aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorGreg Hysen <greg.hysen@gmail.com>2018-11-28 09:11:15 +0800
committerGreg Hysen <greg.hysen@gmail.com>2018-11-29 08:38:11 +0800
commit029b8d59507df25aa9c7d1b096c8d873eb6ae4da (patch)
treee95e60341f55da870fee30e1fb9aa98d201125c4 /packages
parent14c094d050e7b2d0a4b31d02dbe58a54153be7bb (diff)
downloaddexon-sol-tools-029b8d59507df25aa9c7d1b096c8d873eb6ae4da.tar.gz
dexon-sol-tools-029b8d59507df25aa9c7d1b096c8d873eb6ae4da.tar.zst
dexon-sol-tools-029b8d59507df25aa9c7d1b096c8d873eb6ae4da.zip
Changed constants to an exported enum; this is 0x convention
Diffstat (limited to 'packages')
-rw-r--r--packages/utils/src/abi_encoder/abstract_data_types/data_type.ts6
-rw-r--r--packages/utils/src/abi_encoder/abstract_data_types/types/pointer.ts4
-rw-r--r--packages/utils/src/abi_encoder/abstract_data_types/types/set.ts12
-rw-r--r--packages/utils/src/abi_encoder/calldata/blocks/pointer.ts6
-rw-r--r--packages/utils/src/abi_encoder/calldata/calldata.ts14
-rw-r--r--packages/utils/src/abi_encoder/calldata/raw_calldata.ts6
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/address.ts6
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/array.ts4
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/bool.ts6
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/dynamic_bytes.ts12
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/int.ts4
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/method.ts4
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/static_bytes.ts6
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/string.ts12
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/uint.ts4
-rw-r--r--packages/utils/src/abi_encoder/utils/constants.ts22
-rw-r--r--packages/utils/src/abi_encoder/utils/math.ts20
17 files changed, 75 insertions, 73 deletions
diff --git a/packages/utils/src/abi_encoder/abstract_data_types/data_type.ts b/packages/utils/src/abi_encoder/abstract_data_types/data_type.ts
index 4cef60172..10e5c2540 100644
--- a/packages/utils/src/abi_encoder/abstract_data_types/data_type.ts
+++ b/packages/utils/src/abi_encoder/abstract_data_types/data_type.ts
@@ -2,7 +2,7 @@ import { DataItem } from 'ethereum-types';
import * as _ from 'lodash';
import { Calldata, CalldataBlock, RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
import { DecodingRules, EncodingRules } from '../utils/rules';
import { DataTypeFactory } from './interfaces';
@@ -25,7 +25,7 @@ export abstract class DataType {
}
public encode(value: any, rules?: EncodingRules, selector?: string): string {
- const rules_ = _.isUndefined(rules) ? Constants.DEFAULT_ENCODING_RULES : rules;
+ const rules_ = _.isUndefined(rules) ? constants.DEFAULT_ENCODING_RULES : rules;
const calldata = new Calldata(rules_);
if (!_.isUndefined(selector)) {
calldata.setSelector(selector);
@@ -44,7 +44,7 @@ export abstract class DataType {
}
const hasSelector = !_.isUndefined(selector);
const rawCalldata = new RawCalldata(calldata, hasSelector);
- const rules_ = _.isUndefined(rules) ? Constants.DEFAULT_DECODING_RULES : rules;
+ const rules_ = _.isUndefined(rules) ? constants.DEFAULT_DECODING_RULES : rules;
const value = this.generateValue(rawCalldata, rules_);
return value;
}
diff --git a/packages/utils/src/abi_encoder/abstract_data_types/types/pointer.ts b/packages/utils/src/abi_encoder/abstract_data_types/types/pointer.ts
index 8e597636b..3d38deb94 100644
--- a/packages/utils/src/abi_encoder/abstract_data_types/types/pointer.ts
+++ b/packages/utils/src/abi_encoder/abstract_data_types/types/pointer.ts
@@ -3,7 +3,7 @@ import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
import { CalldataBlock, CalldataBlocks, RawCalldata } from '../../calldata';
-import * as Constants from '../../utils/constants';
+import { constants } from '../../utils/constants';
import { DecodingRules } from '../../utils/rules';
import { DataType } from '../data_type';
@@ -34,7 +34,7 @@ export abstract class Pointer extends DataType {
public generateValue(calldata: RawCalldata, rules: DecodingRules): any {
const destinationOffsetBuf = calldata.popWord();
const destinationOffsetHex = ethUtil.bufferToHex(destinationOffsetBuf);
- const destinationOffsetRelative = parseInt(destinationOffsetHex, Constants.HEX_BASE);
+ const destinationOffsetRelative = parseInt(destinationOffsetHex, constants.HEX_BASE);
const destinationOffsetAbsolute = calldata.toAbsoluteOffset(destinationOffsetRelative);
const currentOffset = calldata.getOffset();
calldata.setOffset(destinationOffsetAbsolute);
diff --git a/packages/utils/src/abi_encoder/abstract_data_types/types/set.ts b/packages/utils/src/abi_encoder/abstract_data_types/types/set.ts
index aeea7919f..f50ed8298 100644
--- a/packages/utils/src/abi_encoder/abstract_data_types/types/set.ts
+++ b/packages/utils/src/abi_encoder/abstract_data_types/types/set.ts
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
import { BigNumber } from '../../../configured_bignumber';
import { CalldataBlock, CalldataBlocks, RawCalldata } from '../../calldata';
-import * as Constants from '../../utils/constants';
+import { constants } from '../../utils/constants';
import { DecodingRules } from '../../utils/rules';
import { DataType } from '../data_type';
@@ -54,7 +54,7 @@ export abstract class Set extends DataType {
if (this._isArray && _.isUndefined(this._arrayLength)) {
const arrayLengthBuf = calldata.popWord();
const arrayLengthHex = ethUtil.bufferToHex(arrayLengthBuf);
- const arrayLength = new BigNumber(arrayLengthHex, Constants.HEX_BASE);
+ const arrayLength = new BigNumber(arrayLengthHex, constants.HEX_BASE);
[members] = this._createMembersWithLength(this.getDataItem(), arrayLength.toNumber());
}
// Create a new scope in the calldata, before descending into the members of this set.
@@ -115,8 +115,8 @@ export abstract class Set extends DataType {
if (this._isArray && _.isUndefined(this._arrayLength)) {
[members] = this._createMembersWithLength(this.getDataItem(), value.length);
const lenBuf = ethUtil.setLengthLeft(
- ethUtil.toBuffer(`0x${value.length.toString(Constants.HEX_BASE)}`),
- Constants.EVM_WORD_WIDTH_IN_BYTES,
+ ethUtil.toBuffer(`0x${value.length.toString(constants.HEX_BASE)}`),
+ constants.EVM_WORD_WIDTH_IN_BYTES,
);
block.setHeader(lenBuf);
}
@@ -205,14 +205,14 @@ export abstract class Set extends DataType {
_.each(range, (idx: number) => {
const memberDataItem: DataItem = {
type: _.isUndefined(this._arrayElementType) ? '' : this._arrayElementType,
- name: `${dataItem.name}[${idx.toString(Constants.DEC_BASE)}]`,
+ name: `${dataItem.name}[${idx.toString(constants.DEC_BASE)}]`,
};
const components = dataItem.components;
if (!_.isUndefined(components)) {
memberDataItem.components = components;
}
const memberType = this.getFactory().create(memberDataItem, this);
- memberIndexByName[idx.toString(Constants.DEC_BASE)] = members.length;
+ memberIndexByName[idx.toString(constants.DEC_BASE)] = members.length;
members.push(memberType);
});
return [members, memberIndexByName];
diff --git a/packages/utils/src/abi_encoder/calldata/blocks/pointer.ts b/packages/utils/src/abi_encoder/calldata/blocks/pointer.ts
index 654cbe26c..1daf33f7e 100644
--- a/packages/utils/src/abi_encoder/calldata/blocks/pointer.ts
+++ b/packages/utils/src/abi_encoder/calldata/blocks/pointer.ts
@@ -1,7 +1,7 @@
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
-import * as Constants from '../../utils/constants';
+import { constants } from '../../utils/constants';
import { CalldataBlock } from '../calldata_block';
@@ -29,9 +29,9 @@ export class Pointer extends CalldataBlock {
const parentOffset = this._parent.getOffsetInBytes();
const parentHeaderSize = this._parent.getHeaderSizeInBytes();
const pointer: number = destinationOffset - (parentOffset + parentHeaderSize);
- const pointerHex = `0x${pointer.toString(Constants.HEX_BASE)}`;
+ const pointerHex = `0x${pointer.toString(constants.HEX_BASE)}`;
const pointerBuf = ethUtil.toBuffer(pointerHex);
- const pointerBufPadded = ethUtil.setLengthLeft(pointerBuf, Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const pointerBufPadded = ethUtil.setLengthLeft(pointerBuf, constants.EVM_WORD_WIDTH_IN_BYTES);
return pointerBufPadded;
}
diff --git a/packages/utils/src/abi_encoder/calldata/calldata.ts b/packages/utils/src/abi_encoder/calldata/calldata.ts
index 6d8814e06..e5858b524 100644
--- a/packages/utils/src/abi_encoder/calldata/calldata.ts
+++ b/packages/utils/src/abi_encoder/calldata/calldata.ts
@@ -1,7 +1,7 @@
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
import { EncodingRules } from '../utils/rules';
import * as CalldataBlocks from './blocks';
@@ -31,7 +31,7 @@ export class Calldata {
public setSelector(selector: string): void {
if (!_.startsWith(selector, '0x')) {
throw new Error(`Expected selector to be hex. Missing prefix '0x'`);
- } else if (selector.length !== Constants.HEX_SELECTOR_LENGTH_IN_CHARS) {
+ } else if (selector.length !== constants.HEX_SELECTOR_LENGTH_IN_CHARS) {
throw new Error(`Invalid selector '${selector}'`);
}
this._selector = selector;
@@ -206,11 +206,11 @@ export class Calldata {
lineStr = `\n${offsetStr}${valueStr}${nameStr}`;
} else {
// This block has at least one word of value.
- offsetStr = `0x${offset.toString(Constants.HEX_BASE)}`.padEnd(offsetPadding);
+ offsetStr = `0x${offset.toString(constants.HEX_BASE)}`.padEnd(offsetPadding);
valueStr = ethUtil
.stripHexPrefix(
ethUtil.bufferToHex(
- block.toBuffer().slice(evmWordStartIndex, Constants.EVM_WORD_WIDTH_IN_BYTES),
+ block.toBuffer().slice(evmWordStartIndex, constants.EVM_WORD_WIDTH_IN_BYTES),
),
)
.padEnd(valuePadding);
@@ -223,11 +223,11 @@ export class Calldata {
}
}
// This block has a value that is more than 1 word.
- for (let j = Constants.EVM_WORD_WIDTH_IN_BYTES; j < size; j += Constants.EVM_WORD_WIDTH_IN_BYTES) {
- offsetStr = `0x${(offset + j).toString(Constants.HEX_BASE)}`.padEnd(offsetPadding);
+ for (let j = constants.EVM_WORD_WIDTH_IN_BYTES; j < size; j += constants.EVM_WORD_WIDTH_IN_BYTES) {
+ offsetStr = `0x${(offset + j).toString(constants.HEX_BASE)}`.padEnd(offsetPadding);
valueStr = ethUtil
.stripHexPrefix(
- ethUtil.bufferToHex(block.toBuffer().slice(j, j + Constants.EVM_WORD_WIDTH_IN_BYTES)),
+ ethUtil.bufferToHex(block.toBuffer().slice(j, j + constants.EVM_WORD_WIDTH_IN_BYTES)),
)
.padEnd(valuePadding);
nameStr = ' '.repeat(namePadding);
diff --git a/packages/utils/src/abi_encoder/calldata/raw_calldata.ts b/packages/utils/src/abi_encoder/calldata/raw_calldata.ts
index fbe592fc7..189841989 100644
--- a/packages/utils/src/abi_encoder/calldata/raw_calldata.ts
+++ b/packages/utils/src/abi_encoder/calldata/raw_calldata.ts
@@ -1,7 +1,7 @@
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
import { Queue } from '../utils/queue';
export class RawCalldata {
@@ -24,8 +24,8 @@ export class RawCalldata {
this._offset = RawCalldata._INITIAL_OFFSET;
// If there's a selector then slice it
if (hasSelector) {
- const selectorBuf = this._value.slice(Constants.HEX_SELECTOR_LENGTH_IN_BYTES);
- this._value = this._value.slice(Constants.HEX_SELECTOR_LENGTH_IN_BYTES);
+ const selectorBuf = this._value.slice(constants.HEX_SELECTOR_LENGTH_IN_BYTES);
+ this._value = this._value.slice(constants.HEX_SELECTOR_LENGTH_IN_BYTES);
this._selector = ethUtil.bufferToHex(selectorBuf);
}
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/address.ts b/packages/utils/src/abi_encoder/evm_data_types/address.ts
index 07a0bd10c..c45355639 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/address.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/address.ts
@@ -4,12 +4,12 @@ import * as _ from 'lodash';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
export class Address extends AbstractDataTypes.Blob {
private static readonly _SIZE_KNOWN_AT_COMPILE_TIME: boolean = true;
private static readonly _ADDRESS_SIZE_IN_BYTES = 20;
- private static readonly _DECODED_ADDRESS_OFFSET_IN_BYTES = Constants.EVM_WORD_WIDTH_IN_BYTES -
+ private static readonly _DECODED_ADDRESS_OFFSET_IN_BYTES = constants.EVM_WORD_WIDTH_IN_BYTES -
Address._ADDRESS_SIZE_IN_BYTES;
public static matchType(type: string): boolean {
@@ -30,7 +30,7 @@ export class Address extends AbstractDataTypes.Blob {
throw new Error(`Invalid address: '${value}'`);
}
const valueBuf = ethUtil.toBuffer(value);
- const encodedValueBuf = ethUtil.setLengthLeft(valueBuf, Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const encodedValueBuf = ethUtil.setLengthLeft(valueBuf, constants.EVM_WORD_WIDTH_IN_BYTES);
return encodedValueBuf;
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/array.ts b/packages/utils/src/abi_encoder/evm_data_types/array.ts
index a86283c2a..272cc4132 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/array.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/array.ts
@@ -2,7 +2,7 @@ import { DataItem } from 'ethereum-types';
import * as _ from 'lodash';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
export class Array extends AbstractDataTypes.Set {
private static readonly _MATCHER = RegExp('^(.+)\\[([0-9]*)\\]$');
@@ -23,7 +23,7 @@ export class Array extends AbstractDataTypes.Set {
throw new Error(`Could not parse array length: ${type}`);
}
const arrayElementType = matches[1];
- const arrayLength = _.isEmpty(matches[2]) ? undefined : parseInt(matches[2], Constants.DEC_BASE);
+ const arrayLength = _.isEmpty(matches[2]) ? undefined : parseInt(matches[2], constants.DEC_BASE);
return [arrayElementType, arrayLength];
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/bool.ts b/packages/utils/src/abi_encoder/evm_data_types/bool.ts
index 7af13506b..0c29f690a 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/bool.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/bool.ts
@@ -5,7 +5,7 @@ import * as _ from 'lodash';
import { BigNumber } from '../../configured_bignumber';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
export class Bool extends AbstractDataTypes.Blob {
private static readonly _SIZE_KNOWN_AT_COMPILE_TIME: boolean = true;
@@ -27,7 +27,7 @@ export class Bool extends AbstractDataTypes.Blob {
const encodedValue = value ? '0x1' : '0x0';
const encodedValueBuf = ethUtil.setLengthLeft(
ethUtil.toBuffer(encodedValue),
- Constants.EVM_WORD_WIDTH_IN_BYTES,
+ constants.EVM_WORD_WIDTH_IN_BYTES,
);
return encodedValueBuf;
}
@@ -35,7 +35,7 @@ export class Bool extends AbstractDataTypes.Blob {
public decodeValue(calldata: RawCalldata): boolean {
const valueBuf = calldata.popWord();
const valueHex = ethUtil.bufferToHex(valueBuf);
- const valueNumber = new BigNumber(valueHex, Constants.HEX_BASE);
+ const valueNumber = new BigNumber(valueHex, constants.HEX_BASE);
if (!(valueNumber.equals(0) || valueNumber.equals(1))) {
throw new Error(`Failed to decode boolean. Expected 0x0 or 0x1, got ${valueHex}`);
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/dynamic_bytes.ts b/packages/utils/src/abi_encoder/evm_data_types/dynamic_bytes.ts
index ac2a1fb6e..2c256cfa9 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/dynamic_bytes.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/dynamic_bytes.ts
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
export class DynamicBytes extends AbstractDataTypes.Blob {
private static readonly _SIZE_KNOWN_AT_COMPILE_TIME: boolean = false;
@@ -37,10 +37,10 @@ export class DynamicBytes extends AbstractDataTypes.Blob {
// Encoded value is of the form: <length><value>, with each field padded to be word-aligned.
// 1/3 Construct the length
const valueBuf = ethUtil.toBuffer(value);
- const wordsToStoreValuePadded = Math.ceil(valueBuf.byteLength / Constants.EVM_WORD_WIDTH_IN_BYTES);
- const bytesToStoreValuePadded = wordsToStoreValuePadded * Constants.EVM_WORD_WIDTH_IN_BYTES;
+ const wordsToStoreValuePadded = Math.ceil(valueBuf.byteLength / constants.EVM_WORD_WIDTH_IN_BYTES);
+ const bytesToStoreValuePadded = wordsToStoreValuePadded * constants.EVM_WORD_WIDTH_IN_BYTES;
const lengthBuf = ethUtil.toBuffer(valueBuf.byteLength);
- const lengthBufPadded = ethUtil.setLengthLeft(lengthBuf, Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const lengthBufPadded = ethUtil.setLengthLeft(lengthBuf, constants.EVM_WORD_WIDTH_IN_BYTES);
// 2/3 Construct the value
DynamicBytes._sanityCheckValue(value);
const valueBufPadded = ethUtil.setLengthRight(valueBuf, bytesToStoreValuePadded);
@@ -54,9 +54,9 @@ export class DynamicBytes extends AbstractDataTypes.Blob {
// 1/2 Decode length
const lengthBuf = calldata.popWord();
const lengthHex = ethUtil.bufferToHex(lengthBuf);
- const length = parseInt(lengthHex, Constants.HEX_BASE);
+ const length = parseInt(lengthHex, constants.HEX_BASE);
// 2/2 Decode value
- const wordsToStoreValuePadded = Math.ceil(length / Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const wordsToStoreValuePadded = Math.ceil(length / constants.EVM_WORD_WIDTH_IN_BYTES);
const valueBufPadded = calldata.popWords(wordsToStoreValuePadded);
const valueBuf = valueBufPadded.slice(0, length);
const value = ethUtil.bufferToHex(valueBuf);
diff --git a/packages/utils/src/abi_encoder/evm_data_types/int.ts b/packages/utils/src/abi_encoder/evm_data_types/int.ts
index 3e465fc15..244b720e3 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/int.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/int.ts
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
import { BigNumber } from '../../configured_bignumber';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
import * as EncoderMath from '../utils/math';
export class Int extends AbstractDataTypes.Blob {
@@ -26,7 +26,7 @@ export class Int extends AbstractDataTypes.Blob {
const matches = Int._MATCHER.exec(type);
const width =
!_.isNull(matches) && matches.length === 2 && !_.isUndefined(matches[1])
- ? parseInt(matches[1], Constants.DEC_BASE)
+ ? parseInt(matches[1], constants.DEC_BASE)
: Int._DEFAULT_WIDTH;
return width;
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/method.ts b/packages/utils/src/abi_encoder/evm_data_types/method.ts
index bd4732097..7256a93d9 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/method.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/method.ts
@@ -3,7 +3,7 @@ import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
import { AbstractDataTypes, DataType, DataTypeFactory } from '../abstract_data_types';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
import { DecodingRules, EncodingRules } from '../utils/rules';
import { Tuple } from './tuple';
@@ -62,7 +62,7 @@ export class Method extends AbstractDataTypes.Set {
ethUtil.toBuffer(
ethUtil
.sha3(signature)
- .slice(Constants.HEX_SELECTOR_BYTE_OFFSET_IN_CALLDATA, Constants.HEX_SELECTOR_LENGTH_IN_BYTES),
+ .slice(constants.HEX_SELECTOR_BYTE_OFFSET_IN_CALLDATA, constants.HEX_SELECTOR_LENGTH_IN_BYTES),
),
);
return selector;
diff --git a/packages/utils/src/abi_encoder/evm_data_types/static_bytes.ts b/packages/utils/src/abi_encoder/evm_data_types/static_bytes.ts
index ed1f51f7e..5453d47a0 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/static_bytes.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/static_bytes.ts
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
export class StaticBytes extends AbstractDataTypes.Blob {
private static readonly _SIZE_KNOWN_AT_COMPILE_TIME: boolean = true;
@@ -22,7 +22,7 @@ export class StaticBytes extends AbstractDataTypes.Blob {
const matches = StaticBytes._MATCHER.exec(type);
const width =
!_.isNull(matches) && matches.length === 3 && !_.isUndefined(matches[2])
- ? parseInt(matches[2], Constants.DEC_BASE)
+ ? parseInt(matches[2], constants.DEC_BASE)
: StaticBytes._DEFAULT_WIDTH;
return width;
}
@@ -45,7 +45,7 @@ export class StaticBytes extends AbstractDataTypes.Blob {
this._sanityCheckValue(value);
const valueBuf = ethUtil.toBuffer(value);
// 2/2 Store value as hex
- const valuePadded = ethUtil.setLengthRight(valueBuf, Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const valuePadded = ethUtil.setLengthRight(valueBuf, constants.EVM_WORD_WIDTH_IN_BYTES);
return valuePadded;
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/string.ts b/packages/utils/src/abi_encoder/evm_data_types/string.ts
index e5b2d5f33..ac62ea264 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/string.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/string.ts
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
export class String extends AbstractDataTypes.Blob {
private static readonly _SIZE_KNOWN_AT_COMPILE_TIME: boolean = false;
@@ -25,10 +25,10 @@ export class String extends AbstractDataTypes.Blob {
public encodeValue(value: string): Buffer {
// Encoded value is of the form: <length><value>, with each field padded to be word-aligned.
// 1/3 Construct the length
- const wordsToStoreValuePadded = Math.ceil(value.length / Constants.EVM_WORD_WIDTH_IN_BYTES);
- const bytesToStoreValuePadded = wordsToStoreValuePadded * Constants.EVM_WORD_WIDTH_IN_BYTES;
+ const wordsToStoreValuePadded = Math.ceil(value.length / constants.EVM_WORD_WIDTH_IN_BYTES);
+ const bytesToStoreValuePadded = wordsToStoreValuePadded * constants.EVM_WORD_WIDTH_IN_BYTES;
const lengthBuf = ethUtil.toBuffer(value.length);
- const lengthBufPadded = ethUtil.setLengthLeft(lengthBuf, Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const lengthBufPadded = ethUtil.setLengthLeft(lengthBuf, constants.EVM_WORD_WIDTH_IN_BYTES);
// 2/3 Construct the value
const valueBuf = new Buffer(value);
const valueBufPadded = ethUtil.setLengthRight(valueBuf, bytesToStoreValuePadded);
@@ -42,9 +42,9 @@ export class String extends AbstractDataTypes.Blob {
// 1/2 Decode length
const lengthBufPadded = calldata.popWord();
const lengthHexPadded = ethUtil.bufferToHex(lengthBufPadded);
- const length = parseInt(lengthHexPadded, Constants.HEX_BASE);
+ const length = parseInt(lengthHexPadded, constants.HEX_BASE);
// 2/2 Decode value
- const wordsToStoreValuePadded = Math.ceil(length / Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const wordsToStoreValuePadded = Math.ceil(length / constants.EVM_WORD_WIDTH_IN_BYTES);
const valueBufPadded = calldata.popWords(wordsToStoreValuePadded);
const valueBuf = valueBufPadded.slice(0, length);
const value = valueBuf.toString('ascii');
diff --git a/packages/utils/src/abi_encoder/evm_data_types/uint.ts b/packages/utils/src/abi_encoder/evm_data_types/uint.ts
index 970400a57..df7ea38a4 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/uint.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/uint.ts
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
import { BigNumber } from '../../configured_bignumber';
import { AbstractDataTypes, DataTypeFactory } from '../abstract_data_types';
import { RawCalldata } from '../calldata';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
import * as EncoderMath from '../utils/math';
export class UInt extends AbstractDataTypes.Blob {
@@ -26,7 +26,7 @@ export class UInt extends AbstractDataTypes.Blob {
const matches = UInt._MATCHER.exec(type);
const width =
!_.isNull(matches) && matches.length === 2 && !_.isUndefined(matches[1])
- ? parseInt(matches[1], Constants.DEC_BASE)
+ ? parseInt(matches[1], constants.DEC_BASE)
: UInt._DEFAULT_WIDTH;
return width;
}
diff --git a/packages/utils/src/abi_encoder/utils/constants.ts b/packages/utils/src/abi_encoder/utils/constants.ts
index 05c6783e7..82eeab010 100644
--- a/packages/utils/src/abi_encoder/utils/constants.ts
+++ b/packages/utils/src/abi_encoder/utils/constants.ts
@@ -1,12 +1,14 @@
import { DecodingRules, EncodingRules } from './rules';
-export const EVM_WORD_WIDTH_IN_BYTES = 32;
-export const EVM_WORD_WIDTH_IN_BITS = 256;
-export const HEX_BASE = 16;
-export const DEC_BASE = 10;
-export const BIN_BASE = 2;
-export const HEX_SELECTOR_LENGTH_IN_CHARS = 10;
-export const HEX_SELECTOR_LENGTH_IN_BYTES = 4;
-export const HEX_SELECTOR_BYTE_OFFSET_IN_CALLDATA = 0;
-export const DEFAULT_DECODING_RULES: DecodingRules = { structsAsObjects: false };
-export const DEFAULT_ENCODING_RULES: EncodingRules = { optimize: false, annotate: false };
+export const constants = {
+ EVM_WORD_WIDTH_IN_BYTES: 32,
+ EVM_WORD_WIDTH_IN_BITS: 256,
+ HEX_BASE: 16,
+ DEC_BASE: 10,
+ BIN_BASE: 2,
+ HEX_SELECTOR_LENGTH_IN_CHARS: 10,
+ HEX_SELECTOR_LENGTH_IN_BYTES: 4,
+ HEX_SELECTOR_BYTE_OFFSET_IN_CALLDATA: 0,
+ DEFAULT_DECODING_RULES: { structsAsObjects: false } as DecodingRules,
+ DEFAULT_ENCODING_RULES: { optimize: false, annotate: false } as EncodingRules,
+};
diff --git a/packages/utils/src/abi_encoder/utils/math.ts b/packages/utils/src/abi_encoder/utils/math.ts
index 9bcdc3af1..d84983c5b 100644
--- a/packages/utils/src/abi_encoder/utils/math.ts
+++ b/packages/utils/src/abi_encoder/utils/math.ts
@@ -2,7 +2,7 @@ import BigNumber from 'bignumber.js';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
-import * as Constants from '../utils/constants';
+import { constants } from '../utils/constants';
function sanityCheckBigNumberRange(
value_: BigNumber | string | number,
@@ -17,9 +17,9 @@ function sanityCheckBigNumberRange(
}
}
function bigNumberToPaddedBuffer(value: BigNumber): Buffer {
- const valueHex = `0x${value.toString(Constants.HEX_BASE)}`;
+ const valueHex = `0x${value.toString(constants.HEX_BASE)}`;
const valueBuf = ethUtil.toBuffer(valueHex);
- const valueBufPadded = ethUtil.setLengthLeft(valueBuf, Constants.EVM_WORD_WIDTH_IN_BYTES);
+ const valueBufPadded = ethUtil.setLengthLeft(valueBuf, constants.EVM_WORD_WIDTH_IN_BYTES);
return valueBufPadded;
}
/**
@@ -37,13 +37,13 @@ export function encodeNumericValue(value_: BigNumber | string | number): Buffer
// Case 2/2: Value is negative
// Use two's-complement to encode the value
// Step 1/3: Convert negative value to positive binary string
- const valueBin = value.times(-1).toString(Constants.BIN_BASE);
+ const valueBin = value.times(-1).toString(constants.BIN_BASE);
// Step 2/3: Invert binary value
- let invertedValueBin = '1'.repeat(Constants.EVM_WORD_WIDTH_IN_BITS - valueBin.length);
+ let invertedValueBin = '1'.repeat(constants.EVM_WORD_WIDTH_IN_BITS - valueBin.length);
_.each(valueBin, (bit: string) => {
invertedValueBin += bit === '1' ? '0' : '1';
});
- const invertedValue = new BigNumber(invertedValueBin, Constants.BIN_BASE);
+ const invertedValue = new BigNumber(invertedValueBin, constants.BIN_BASE);
// Step 3/3: Add 1 to inverted value
const negativeValue = invertedValue.plus(1);
const encodedValue = bigNumberToPaddedBuffer(negativeValue);
@@ -73,13 +73,13 @@ export function safeEncodeNumericValue(
export function decodeNumericValue(encodedValue: Buffer, minValue: BigNumber): BigNumber {
const valueHex = ethUtil.bufferToHex(encodedValue);
// Case 1/3: value is definitely non-negative because of numeric boundaries
- const value = new BigNumber(valueHex, Constants.HEX_BASE);
+ const value = new BigNumber(valueHex, constants.HEX_BASE);
if (!minValue.lessThan(0)) {
return value;
}
// Case 2/3: value is non-negative because there is no leading 1 (encoded as two's-complement)
- const valueBin = value.toString(Constants.BIN_BASE);
- const isValueNegative = valueBin.length === Constants.EVM_WORD_WIDTH_IN_BITS && _.startsWith(valueBin[0], '1');
+ const valueBin = value.toString(constants.BIN_BASE);
+ const isValueNegative = valueBin.length === constants.EVM_WORD_WIDTH_IN_BITS && _.startsWith(valueBin[0], '1');
if (!isValueNegative) {
return value;
}
@@ -89,7 +89,7 @@ export function decodeNumericValue(encodedValue: Buffer, minValue: BigNumber): B
_.each(valueBin, (bit: string) => {
invertedValueBin += bit === '1' ? '0' : '1';
});
- const invertedValue = new BigNumber(invertedValueBin, Constants.BIN_BASE);
+ const invertedValue = new BigNumber(invertedValueBin, constants.BIN_BASE);
// Step 2/3: Add 1 to inverted value
// The result is the two's-complement representation of the input value.
const positiveValue = invertedValue.plus(1);