37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { AbiEncoder, BigNumber } from '@0x/utils';
|
|
|
|
const transformERC20Encoder = AbiEncoder.createMethod('transformERC20', [
|
|
{ type: 'address', name: 'inputToken' },
|
|
{ type: 'address', name: 'outputToken' },
|
|
{ type: 'uint256', name: 'inputTokenAmount' },
|
|
{ type: 'uint256', name: 'minOutputTokenAmount' },
|
|
{
|
|
type: 'tuple[]',
|
|
name: 'transformations',
|
|
components: [
|
|
{ type: 'uint32', name: 'deploymentNonce' },
|
|
{ type: 'bytes', name: 'data' },
|
|
],
|
|
},
|
|
]);
|
|
|
|
interface TransformERC20Args {
|
|
inputToken: string;
|
|
outputToken: string;
|
|
inputTokenAmount: BigNumber;
|
|
minOutputTokenAmount: BigNumber;
|
|
transformations: {
|
|
deploymentNonce: BigNumber;
|
|
data: string;
|
|
}[];
|
|
}
|
|
|
|
/** Returns decoded `TransformERC20.transformERC20` calldata. */
|
|
export function decodeTransformERC20(calldata: string): TransformERC20Args {
|
|
return transformERC20Encoder.decode(calldata) as TransformERC20Args;
|
|
}
|
|
|
|
export function getTransformerNonces(args: TransformERC20Args): number[] {
|
|
return args.transformations.map((t) => t.deploymentNonce.toNumber());
|
|
}
|