@0x/order-utils
: Add ERC20 Transformer utils and export useful constants.
This commit is contained in:
parent
53aabe3cdb
commit
f7bc3ff49d
@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "10.3.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Add ERC20 Transformer utils and export useful constants.",
|
||||
"pr": 2604
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1583220306,
|
||||
"version": "10.2.4",
|
||||
|
@ -157,4 +157,8 @@ export const constants = {
|
||||
STATIC_CALL_METHOD_ABI,
|
||||
IS_VALID_WALLET_SIGNATURE_MAGIC_VALUE: '0xb0671381',
|
||||
IS_VALID_VALIDATOR_SIGNATURE_MAGIC_VALUE: '0x42b38674',
|
||||
/*
|
||||
* The pseudo-token address for ETH used by the Exchange Proxy's `tranformERC20()`.
|
||||
*/
|
||||
ETH_TOKEN_ADDRESS: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
||||
};
|
||||
|
@ -60,3 +60,26 @@ export {
|
||||
OrdersAndRemainingTakerFillAmount,
|
||||
OrdersAndRemainingMakerFillAmount,
|
||||
} from './types';
|
||||
|
||||
export {
|
||||
FillQuoteTransformerSide,
|
||||
FillQuoteTransformerData,
|
||||
encodeFillQuoteTransformerData,
|
||||
decodeFillQuoteTransformerData,
|
||||
WethTransformerData,
|
||||
encodeWethTransformerData,
|
||||
decodeWethTransformerData,
|
||||
PayTakerTransformerData,
|
||||
encodePayTakerTransformerData,
|
||||
decodePayTakerTransformerData,
|
||||
AffiliateFeeTransformerData,
|
||||
encodeAffiliateFeeTransformerData,
|
||||
decodeAffiliateFeeTransformerData,
|
||||
} from './transformer_data_encoders';
|
||||
|
||||
import { constants } from './constants';
|
||||
export const NULL_ADDRESS = constants.NULL_ADDRESS;
|
||||
export const NULL_BYTES = constants.NULL_BYTES;
|
||||
export const ZERO_AMOUNT = constants.ZERO_AMOUNT;
|
||||
export const NULL_ERC20_ASSET_DATA = constants.NULL_ERC20_ASSET_DATA;
|
||||
export const ETH_TOKEN_ADDRESS = constants.ETH_TOKEN_ADDRESS;
|
||||
|
187
packages/order-utils/src/transformer_data_encoders.ts
Normal file
187
packages/order-utils/src/transformer_data_encoders.ts
Normal file
@ -0,0 +1,187 @@
|
||||
import { Order } from '@0x/types';
|
||||
import { AbiEncoder, BigNumber } from '@0x/utils';
|
||||
|
||||
const ORDER_ABI_COMPONENTS = [
|
||||
{ name: 'makerAddress', type: 'address' },
|
||||
{ name: 'takerAddress', type: 'address' },
|
||||
{ name: 'feeRecipientAddress', type: 'address' },
|
||||
{ name: 'senderAddress', type: 'address' },
|
||||
{ name: 'makerAssetAmount', type: 'uint256' },
|
||||
{ name: 'takerAssetAmount', type: 'uint256' },
|
||||
{ name: 'makerFee', type: 'uint256' },
|
||||
{ name: 'takerFee', type: 'uint256' },
|
||||
{ name: 'expirationTimeSeconds', type: 'uint256' },
|
||||
{ name: 'salt', type: 'uint256' },
|
||||
{ name: 'makerAssetData', type: 'bytes' },
|
||||
{ name: 'takerAssetData', type: 'bytes' },
|
||||
{ name: 'makerFeeAssetData', type: 'bytes' },
|
||||
{ name: 'takerFeeAssetData', type: 'bytes' },
|
||||
];
|
||||
|
||||
/**
|
||||
* ABI encoder for `FillQuoteTransformer.TransformData`
|
||||
*/
|
||||
export const fillQuoteTransformerDataEncoder = AbiEncoder.create([
|
||||
{
|
||||
name: 'data',
|
||||
type: 'tuple',
|
||||
components: [
|
||||
{ name: 'side', type: 'uint8' },
|
||||
{ name: 'sellToken', type: 'address' },
|
||||
{ name: 'buyToken', type: 'address' },
|
||||
{
|
||||
name: 'orders',
|
||||
type: 'tuple[]',
|
||||
components: ORDER_ABI_COMPONENTS,
|
||||
},
|
||||
{ name: 'signatures', type: 'bytes[]' },
|
||||
{ name: 'maxOrderFillAmounts', type: 'uint256[]' },
|
||||
{ name: 'fillAmount', type: 'uint256' },
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
/**
|
||||
* Market operation for `FillQuoteTransformerData`.
|
||||
*/
|
||||
export enum FillQuoteTransformerSide {
|
||||
Sell,
|
||||
Buy,
|
||||
}
|
||||
|
||||
/**
|
||||
* `FillQuoteTransformer.TransformData`
|
||||
*/
|
||||
export interface FillQuoteTransformerData {
|
||||
side: FillQuoteTransformerSide;
|
||||
sellToken: string;
|
||||
buyToken: string;
|
||||
orders: Array<Exclude<Order, ['signature', 'exchangeAddress', 'chainId']>>;
|
||||
signatures: string[];
|
||||
maxOrderFillAmounts: BigNumber[];
|
||||
fillAmount: BigNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-encode a `FillQuoteTransformer.TransformData` type.
|
||||
*/
|
||||
export function encodeFillQuoteTransformerData(data: FillQuoteTransformerData): string {
|
||||
return fillQuoteTransformerDataEncoder.encode([data]);
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-decode a `FillQuoteTransformer.TransformData` type.
|
||||
*/
|
||||
export function decodeFillQuoteTransformerData(encoded: string): FillQuoteTransformerData {
|
||||
return fillQuoteTransformerDataEncoder.decode(encoded).data;
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI encoder for `WethTransformer.TransformData`
|
||||
*/
|
||||
export const wethTransformerDataEncoder = AbiEncoder.create([
|
||||
{
|
||||
name: 'data',
|
||||
type: 'tuple',
|
||||
components: [{ name: 'token', type: 'address' }, { name: 'amount', type: 'uint256' }],
|
||||
},
|
||||
]);
|
||||
|
||||
/**
|
||||
* `WethTransformer.TransformData`
|
||||
*/
|
||||
export interface WethTransformerData {
|
||||
token: string;
|
||||
amount: BigNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-encode a `WethTransformer.TransformData` type.
|
||||
*/
|
||||
export function encodeWethTransformerData(data: WethTransformerData): string {
|
||||
return wethTransformerDataEncoder.encode([data]);
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-decode a `WethTransformer.TransformData` type.
|
||||
*/
|
||||
export function decodeWethTransformerData(encoded: string): WethTransformerData {
|
||||
return wethTransformerDataEncoder.decode(encoded).data;
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI encoder for `PayTakerTransformer.TransformData`
|
||||
*/
|
||||
export const payTakerTransformerDataEncoder = AbiEncoder.create([
|
||||
{
|
||||
name: 'data',
|
||||
type: 'tuple',
|
||||
components: [{ name: 'tokens', type: 'address[]' }, { name: 'amounts', type: 'uint256[]' }],
|
||||
},
|
||||
]);
|
||||
|
||||
/**
|
||||
* `PayTakerTransformer.TransformData`
|
||||
*/
|
||||
export interface PayTakerTransformerData {
|
||||
tokens: string[];
|
||||
amounts: BigNumber[];
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-encode a `PayTakerTransformer.TransformData` type.
|
||||
*/
|
||||
export function encodePayTakerTransformerData(data: PayTakerTransformerData): string {
|
||||
return payTakerTransformerDataEncoder.encode([data]);
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-decode a `PayTakerTransformer.TransformData` type.
|
||||
*/
|
||||
export function decodePayTakerTransformerData(encoded: string): PayTakerTransformerData {
|
||||
return payTakerTransformerDataEncoder.decode(encoded).data;
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI encoder for `PayTakerTransformer.TransformData`
|
||||
*/
|
||||
export const affiliateFeeTransformerDataEncoder = AbiEncoder.create({
|
||||
name: 'data',
|
||||
type: 'tuple',
|
||||
components: [
|
||||
{
|
||||
name: 'fees',
|
||||
type: 'tuple[]',
|
||||
components: [
|
||||
{ name: 'token', type: 'address' },
|
||||
{ name: 'amount', type: 'uint256' },
|
||||
{ name: 'recipient', type: 'address' },
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* `AffiliateFeeTransformer.TransformData`
|
||||
*/
|
||||
export interface AffiliateFeeTransformerData {
|
||||
fees: Array<{
|
||||
token: string;
|
||||
amount: BigNumber;
|
||||
recipient: string;
|
||||
}>;
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-encode a `AffiliateFeeTransformer.TransformData` type.
|
||||
*/
|
||||
export function encodeAffiliateFeeTransformerData(data: AffiliateFeeTransformerData): string {
|
||||
return affiliateFeeTransformerDataEncoder.encode(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* ABI-decode a `AffiliateFeeTransformer.TransformData` type.
|
||||
*/
|
||||
export function decodeAffiliateFeeTransformerData(encoded: string): AffiliateFeeTransformerData {
|
||||
return affiliateFeeTransformerDataEncoder.decode(encoded).data;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user