aboutsummaryrefslogtreecommitdiffstats
path: root/packages/utils/src/abi_encoder
diff options
context:
space:
mode:
authorGreg Hysen <greg.hysen@gmail.com>2018-11-28 07:28:26 +0800
committerGreg Hysen <greg.hysen@gmail.com>2018-11-29 08:38:11 +0800
commitf479212410b238a7673983148f403b3a220083af (patch)
tree4d3ebe1ee98ec0a03b8eb99275878f5cc2062123 /packages/utils/src/abi_encoder
parentffb8b0a619be3b8fb30a6acc99f590a6b40d49e1 (diff)
downloaddexon-sol-tools-f479212410b238a7673983148f403b3a220083af.tar
dexon-sol-tools-f479212410b238a7673983148f403b3a220083af.tar.gz
dexon-sol-tools-f479212410b238a7673983148f403b3a220083af.tar.bz2
dexon-sol-tools-f479212410b238a7673983148f403b3a220083af.tar.lz
dexon-sol-tools-f479212410b238a7673983148f403b3a220083af.tar.xz
dexon-sol-tools-f479212410b238a7673983148f403b3a220083af.tar.zst
dexon-sol-tools-f479212410b238a7673983148f403b3a220083af.zip
Style cleanup. Improved wording of some error messages.
Diffstat (limited to 'packages/utils/src/abi_encoder')
-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.ts4
-rw-r--r--packages/utils/src/abi_encoder/calldata/calldata.ts11
-rw-r--r--packages/utils/src/abi_encoder/evm_data_type_factory.ts6
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/address.ts12
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/bool.ts4
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/dynamic_bytes.ts28
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/int.ts1
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/string.ts4
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/uint.ts1
-rw-r--r--packages/utils/src/abi_encoder/utils/math.ts4
11 files changed, 43 insertions, 36 deletions
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 dc9de8a3d..8e597636b 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
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
@@ -44,7 +43,10 @@ export abstract class Pointer extends DataType {
return value;
}
+ // Disable prefer-function-over-method for inherited abstract method.
+ /* tslint:disable prefer-function-over-method */
public isStatic(): boolean {
return true;
}
+ /* tslint:enable prefer-function-over-method */
}
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 637abfb7d..aeea7919f 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
@@ -50,7 +50,7 @@ export abstract class Set extends DataType {
public generateValue(calldata: RawCalldata, rules: DecodingRules): any[] | object {
let members = this._members;
// Case 1: This is an array of undefined length, which means that `this._members` was not
- // populated in the constructor. So, construct the set of members it now.
+ // populated in the constructor. So we must construct the set of members now.
if (this._isArray && _.isUndefined(this._arrayLength)) {
const arrayLengthBuf = calldata.popWord();
const arrayLengthHex = ethUtil.bufferToHex(arrayLengthBuf);
@@ -176,7 +176,7 @@ export abstract class Set extends DataType {
private _createMembersWithKeys(dataItem: DataItem): [DataType[], MemberIndexByName] {
// Sanity check
if (_.isUndefined(dataItem.components)) {
- throw new Error(`Expected components`);
+ throw new Error(`Tried to create a set using key/value pairs, but no components were defined by the input DataItem '${dataItem.name}'.`);
}
// Create one member for each component of `dataItem`
const members: DataType[] = [];
diff --git a/packages/utils/src/abi_encoder/calldata/calldata.ts b/packages/utils/src/abi_encoder/calldata/calldata.ts
index c57ff08c2..6d8814e06 100644
--- a/packages/utils/src/abi_encoder/calldata/calldata.ts
+++ b/packages/utils/src/abi_encoder/calldata/calldata.ts
@@ -59,7 +59,7 @@ export class Calldata {
offset += block.getSizeInBytes();
}
// Generate hex string
- const hexString = this._rules.annotate ? this._toAnnotatedString() : this._toCondensedString();
+ const hexString = this._rules.annotate ? this._toHumanReadableCallData() : this._toEvmCompatibeCallDataHex();
return hexString;
}
/**
@@ -131,10 +131,7 @@ export class Calldata {
}
}
}
- /**
- * Returns EVM-compatible calldata as a Hex string.
- */
- private _toCondensedString(): string {
+ private _toEvmCompatibeCallDataHex(): string {
// Sanity check: must have a root block.
if (_.isUndefined(this._root)) {
throw new Error('expected root');
@@ -152,7 +149,7 @@ export class Calldata {
return hexValue;
}
/**
- * Returns human-redable calldata.
+ * Returns human-readable calldata.
*
* Example:
* simpleFunction(string[], string[])
@@ -173,7 +170,7 @@ export class Calldata {
* 0xe0 0000000000000000000000000000000000000000000000000000000000000005 array2[1]
* 0x100 576f726c64000000000000000000000000000000000000000000000000000000
*/
- private _toAnnotatedString(): string {
+ private _toHumanReadableCallData(): string {
// Sanity check: must have a root block.
if (_.isUndefined(this._root)) {
throw new Error('expected root');
diff --git a/packages/utils/src/abi_encoder/evm_data_type_factory.ts b/packages/utils/src/abi_encoder/evm_data_type_factory.ts
index 16a0b724d..bc68e05b7 100644
--- a/packages/utils/src/abi_encoder/evm_data_type_factory.ts
+++ b/packages/utils/src/abi_encoder/evm_data_type_factory.ts
@@ -1,6 +1,4 @@
-/* tslint:disable prefer-function-over-method */
/* tslint:disable max-classes-per-file */
-/* tslint:disable no-construct */
import { DataItem, MethodAbi } from 'ethereum-types';
import * as _ from 'lodash';
@@ -73,6 +71,7 @@ export class Method extends Impl.Method {
}
}
+/* tslint:disable no-construct */
export class EvmDataTypeFactory implements DataTypeFactory {
private static _instance: DataTypeFactory;
@@ -83,6 +82,7 @@ export class EvmDataTypeFactory implements DataTypeFactory {
return EvmDataTypeFactory._instance;
}
+ /* tslint:disable prefer-function-over-method */
public create(dataItem: DataItem, parentDataType?: DataType): DataType {
// Create data type
let dataType: undefined | DataType;
@@ -114,6 +114,8 @@ export class EvmDataTypeFactory implements DataTypeFactory {
}
return dataType;
}
+ /* tslint:enable prefer-function-over-method */
private constructor() {}
}
+/* tslint:enable no-construct */
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 52fc8e7b9..25ff55903 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/address.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/address.ts
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
@@ -26,10 +25,8 @@ export class Address extends AbstractDataTypes.Blob {
}
}
- public getSignature(): string {
- return 'address';
- }
-
+ // Disable prefer-function-over-method for inherited abstract methods.
+ /* tslint:disable prefer-function-over-method */
public encodeValue(value: string): Buffer {
if (!_.startsWith(value, '0x')) {
throw new Error(Address.ERROR_MESSAGE_ADDRESS_MUST_START_WITH_0X);
@@ -48,4 +45,9 @@ export class Address extends AbstractDataTypes.Blob {
const value = ethUtil.bufferToHex(valueBuf);
return value;
}
+
+ public getSignature(): string {
+ return 'address';
+ }
+ /* tslint:enable prefer-function-over-method */
}
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 fa115bb87..7e135aba9 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/bool.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/bool.ts
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
@@ -22,6 +21,8 @@ export class Bool extends AbstractDataTypes.Blob {
}
}
+ // Disable prefer-function-over-method for inherited abstract methods.
+ /* tslint:disable prefer-function-over-method */
public encodeValue(value: boolean): Buffer {
const encodedValue = value ? '0x1' : '0x0';
const encodedValueBuf = ethUtil.setLengthLeft(
@@ -47,4 +48,5 @@ export class Bool extends AbstractDataTypes.Blob {
public getSignature(): string {
return 'bool';
}
+ /* tslint:enable prefer-function-over-method */
}
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 98d90b7e4..ad22c8c6e 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
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
@@ -14,6 +13,17 @@ export class DynamicBytes extends AbstractDataTypes.Blob {
return type === 'bytes';
}
+ private static _sanityCheckValue(value: string | Buffer): void {
+ if (typeof value !== 'string') {
+ return;
+ }
+ if (!_.startsWith(value, '0x')) {
+ throw new Error(`Tried to encode non-hex value. Value must inlcude '0x' prefix.`);
+ } else if (value.length % 2 !== 0) {
+ throw new Error(`Tried to assign ${value}, which is contains a half-byte. Use full bytes only.`);
+ }
+ }
+
public constructor(dataItem: DataItem, dataTypeFactory: DataTypeFactory) {
super(dataItem, dataTypeFactory, DynamicBytes._SIZE_KNOWN_AT_COMPILE_TIME);
if (!DynamicBytes.matchType(dataItem.type)) {
@@ -21,6 +31,8 @@ export class DynamicBytes extends AbstractDataTypes.Blob {
}
}
+ // Disable prefer-function-over-method for inherited abstract methods.
+ /* tslint:disable prefer-function-over-method */
public encodeValue(value: string | Buffer): Buffer {
// Encoded value is of the form: <length><value>, with each field padded to be word-aligned.
// 1/3 Construct the length
@@ -48,22 +60,12 @@ export class DynamicBytes extends AbstractDataTypes.Blob {
const valueBufPadded = calldata.popWords(wordsToStoreValuePadded);
const valueBuf = valueBufPadded.slice(0, length);
const value = ethUtil.bufferToHex(valueBuf);
- this._sanityCheckValue(value);
+ DynamicBytes._sanityCheckValue(value);
return value;
}
public getSignature(): string {
return 'bytes';
}
-
- private _sanityCheckValue(value: string | Buffer): void {
- if (typeof value !== 'string') {
- return;
- }
- if (!_.startsWith(value, '0x')) {
- throw new Error(`Tried to encode non-hex value. Value must inlcude '0x' prefix.`);
- } else if (value.length % 2 !== 0) {
- throw new Error(`Tried to assign ${value}, which is contains a half-byte. Use full bytes only.`);
- }
- }
+ /* tslint:enable prefer-function-over-method */
}
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 5c5193644..9d328bba9 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/int.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/int.ts
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as _ from 'lodash';
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 6ab3513c9..08f928d8a 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/string.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/string.ts
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
@@ -21,6 +20,8 @@ export class String extends AbstractDataTypes.Blob {
}
}
+ // Disable prefer-function-over-method for inherited abstract methods.
+ /* tslint:disable prefer-function-over-method */
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
@@ -53,4 +54,5 @@ export class String extends AbstractDataTypes.Blob {
public getSignature(): string {
return 'string';
}
+ /* tslint:enable prefer-function-over-method */
}
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 76b944610..4357f15d2 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/uint.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/uint.ts
@@ -1,4 +1,3 @@
-/* tslint:disable prefer-function-over-method */
import { DataItem } from 'ethereum-types';
import * as _ from 'lodash';
diff --git a/packages/utils/src/abi_encoder/utils/math.ts b/packages/utils/src/abi_encoder/utils/math.ts
index bc344c695..9bcdc3af1 100644
--- a/packages/utils/src/abi_encoder/utils/math.ts
+++ b/packages/utils/src/abi_encoder/utils/math.ts
@@ -79,8 +79,8 @@ export function decodeNumericValue(encodedValue: Buffer, minValue: BigNumber): B
}
// 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 valueIsNegative = valueBin.length === Constants.EVM_WORD_WIDTH_IN_BITS && _.startsWith(valueBin[0], '1');
- if (!valueIsNegative) {
+ const isValueNegative = valueBin.length === Constants.EVM_WORD_WIDTH_IN_BITS && _.startsWith(valueBin[0], '1');
+ if (!isValueNegative) {
return value;
}
// Case 3/3: value is negative