Use AbiEncoder for methodAbiToFunctionSignature
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user