Use AbiEncoder for methodAbiToFunctionSignature

This commit is contained in:
Michael Zhu
2019-11-21 16:45:02 -08:00
parent 5a79ec28d1
commit 79eb613b3e

View File

@@ -1,3 +1,4 @@
import { AbiEncoder } from '@0x/utils';
import { DataItem, MethodAbi } from 'ethereum-types';
// tslint:disable-next-line:completed-docs
@@ -29,24 +30,11 @@ export function formatABIDataItem(abi: DataItem, value: any, formatter: (type: s
}
}
function dataItemsToABIString(dataItems: DataItem[]): string {
const trailingArrayRegex = /\[\d*\]$/;
const types = dataItems.map(item => {
if (item.components) {
const componentsABIString = `(${dataItemsToABIString(item.components)})`;
const trailingArray = item.type.match(trailingArrayRegex);
return trailingArray !== null ? componentsABIString.concat(trailingArray[0]) : componentsABIString;
} else {
return item.type;
}
});
return `${types.join(',')}`;
}
/**
* Takes a MethodAbi and returns a function signature for ABI encoding/decoding
* @return a function signature as a string, e.g. 'functionName(uint256, bytes[])'
*/
export function methodAbiToFunctionSignature(methodAbi: MethodAbi): string {
const inputs = dataItemsToABIString(methodAbi.inputs);
return `${methodAbi.name}(${inputs})`;
const method = AbiEncoder.createMethod(methodAbi.name, methodAbi.inputs);
return method.getSignature();
}