aboutsummaryrefslogtreecommitdiffstats
path: root/packages/abi-gen/src/utils.ts
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2018-02-24 03:35:44 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2018-02-28 04:05:23 +0800
commit2d561bc8a05e8d1fca91cde93bae2080d87be926 (patch)
tree10d785eff73c67ecae09a337ed3721ff6b6102a9 /packages/abi-gen/src/utils.ts
parentf5275d3ad75d2a989556de99cdef82bcf2cd687c (diff)
downloaddexon-0x-contracts-2d561bc8a05e8d1fca91cde93bae2080d87be926.tar.gz
dexon-0x-contracts-2d561bc8a05e8d1fca91cde93bae2080d87be926.tar.zst
dexon-0x-contracts-2d561bc8a05e8d1fca91cde93bae2080d87be926.zip
Allow users to specify the contracts backend in abi-gen
Diffstat (limited to 'packages/abi-gen/src/utils.ts')
-rw-r--r--packages/abi-gen/src/utils.ts18
1 files changed, 13 insertions, 5 deletions
diff --git a/packages/abi-gen/src/utils.ts b/packages/abi-gen/src/utils.ts
index 14255643a..dc2c5390e 100644
--- a/packages/abi-gen/src/utils.ts
+++ b/packages/abi-gen/src/utils.ts
@@ -3,14 +3,14 @@ import * as _ from 'lodash';
import * as path from 'path';
import * as Web3 from 'web3';
-import { AbiType, ParamKind } from './types';
+import { AbiType, ContractsBackend, ParamKind } from './types';
export const utils = {
- solTypeToTsType(paramKind: ParamKind, solType: string): string {
+ solTypeToTsType(paramKind: ParamKind, backend: ContractsBackend, solType: string): string {
const trailingArrayRegex = /\[\d*\]$/;
if (solType.match(trailingArrayRegex)) {
const arrayItemSolType = solType.replace(trailingArrayRegex, '');
- const arrayItemTsType = utils.solTypeToTsType(paramKind, arrayItemSolType);
+ const arrayItemTsType = utils.solTypeToTsType(paramKind, backend, arrayItemSolType);
const arrayTsType = utils.isUnionType(arrayItemTsType)
? `Array<${arrayItemTsType}>`
: `${arrayItemTsType}[]`;
@@ -24,13 +24,21 @@ export const utils = {
{ regex: '^bytes\\d*$', tsType: 'string' },
];
if (paramKind === ParamKind.Input) {
- // web3 allows to pass those an non-bignumbers and that's nice
- // but it always returns stuff as BigNumbers
+ // web3 and ethers allow to pass those as numbers instead of bignumbers
solTypeRegexToTsType.unshift({
regex: '^u?int(8|16|32)?$',
tsType: 'number|BigNumber',
});
}
+ if (backend === ContractsBackend.Ethers) {
+ if (paramKind === ParamKind.Output) {
+ // ethers-contracts automatically converts small BigNumbers to numbers
+ solTypeRegexToTsType.unshift({
+ regex: '^u?int(8|16|32|48)?$',
+ tsType: 'number',
+ });
+ }
+ }
for (const regexAndTxType of solTypeRegexToTsType) {
const { regex, tsType } = regexAndTxType;
if (solType.match(regex)) {