aboutsummaryrefslogtreecommitdiffstats
path: root/packages/utils/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/utils/src')
-rw-r--r--packages/utils/src/abi_encoder/calldata.ts37
-rw-r--r--packages/utils/src/abi_encoder/data_type.ts68
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types.ts27
-rw-r--r--packages/utils/src/abi_encoder/index.ts2
4 files changed, 98 insertions, 36 deletions
diff --git a/packages/utils/src/abi_encoder/calldata.ts b/packages/utils/src/abi_encoder/calldata.ts
index 11288064e..e6ce58957 100644
--- a/packages/utils/src/abi_encoder/calldata.ts
+++ b/packages/utils/src/abi_encoder/calldata.ts
@@ -20,7 +20,14 @@ export abstract class CalldataBlock {
private relocatable: boolean;
private parentName: string;
- constructor(name: string, signature: string, parentName: string, /*offsetInBytes: number,*/ headerSizeInBytes: number, bodySizeInBytes: number, relocatable: boolean) {
+ constructor(
+ name: string,
+ signature: string,
+ parentName: string,
+ /*offsetInBytes: number,*/ headerSizeInBytes: number,
+ bodySizeInBytes: number,
+ relocatable: boolean,
+ ) {
this.name = name;
this.signature = signature;
this.parentName = parentName;
@@ -91,7 +98,13 @@ export abstract class CalldataBlock {
export class PayloadCalldataBlock extends CalldataBlock {
private payload: Buffer;
- constructor(name: string, signature: string, parentName: string, /*offsetInBytes: number,*/ relocatable: boolean, payload: Buffer) {
+ constructor(
+ name: string,
+ signature: string,
+ parentName: string,
+ /*offsetInBytes: number,*/ relocatable: boolean,
+ payload: Buffer,
+ ) {
const headerSizeInBytes = 0;
const bodySizeInBytes = payload.byteLength;
super(name, signature, parentName, headerSizeInBytes, bodySizeInBytes, relocatable);
@@ -115,7 +128,14 @@ export class DependentCalldataBlock extends CalldataBlock {
private dependency: CalldataBlock;
private aliasFor: CalldataBlock | undefined;
- constructor(name: string, signature: string, parentName: string, relocatable: boolean, dependency: CalldataBlock, parent: CalldataBlock) {
+ constructor(
+ name: string,
+ signature: string,
+ parentName: string,
+ relocatable: boolean,
+ dependency: CalldataBlock,
+ parent: CalldataBlock,
+ ) {
const headerSizeInBytes = 0;
const bodySizeInBytes = DependentCalldataBlock.DEPENDENT_PAYLOAD_SIZE_IN_BYTES;
super(name, signature, parentName, headerSizeInBytes, bodySizeInBytes, relocatable);
@@ -125,7 +145,8 @@ export class DependentCalldataBlock extends CalldataBlock {
}
public toBuffer(): Buffer {
- const destinationOffset = (this.aliasFor !== undefined) ? this.aliasFor.getOffsetInBytes() : this.dependency.getOffsetInBytes();
+ const destinationOffset =
+ this.aliasFor !== undefined ? this.aliasFor.getOffsetInBytes() : this.dependency.getOffsetInBytes();
const parentOffset = this.parent.getOffsetInBytes();
const parentHeaderSize = this.parent.getHeaderSizeInBytes();
const pointer: number = destinationOffset - (parentOffset + parentHeaderSize);
@@ -314,7 +335,7 @@ export class Calldata {
//const ancestrialNamesOffset = name.startsWith('ptr<') ? 4 : 0;
//const parentOffset = name.lastIndexOf(parentName);
- const prettyName = name.replace(`${parentName}.`, '').replace(`${functionName}.`, '');//.replace(`${parentName}[`, '[');
+ const prettyName = name.replace(`${parentName}.`, '').replace(`${functionName}.`, ''); //.replace(`${parentName}[`, '[');
const signature = block.getSignature();
// Current offset
@@ -383,7 +404,7 @@ export class Calldata {
const blocksByHash: { [key: string]: CalldataBlock } = {};
// 1. Create a queue of subtrees by hash
- // Note that they are ordered the same as
+ // Note that they are ordered the same as
const subtreeQueue = this.createQueue(this.root);
let block: CalldataBlock | undefined;
while ((block = subtreeQueue.popBack()) !== undefined) {
@@ -435,7 +456,7 @@ export class Calldata {
}
public toAnnotatedString(): string {
- return "";
+ return '';
}
public setRoot(block: CalldataBlock) {
@@ -532,4 +553,4 @@ export class RawCalldata {
public getSelector(): string {
return this.selector;
}
-} \ No newline at end of file
+}
diff --git a/packages/utils/src/abi_encoder/data_type.ts b/packages/utils/src/abi_encoder/data_type.ts
index 243b221ef..80797c563 100644
--- a/packages/utils/src/abi_encoder/data_type.ts
+++ b/packages/utils/src/abi_encoder/data_type.ts
@@ -1,4 +1,11 @@
-import { RawCalldata, Calldata, CalldataBlock, PayloadCalldataBlock, DependentCalldataBlock, MemberCalldataBlock } from "./calldata";
+import {
+ RawCalldata,
+ Calldata,
+ CalldataBlock,
+ PayloadCalldataBlock,
+ DependentCalldataBlock,
+ MemberCalldataBlock,
+} from './calldata';
import { MethodAbi, DataItem } from 'ethereum-types';
import { DecodingRules, EncodingRules } from './calldata';
import { BigNumber } from '../configured_bignumber';
@@ -67,7 +74,13 @@ export abstract class PayloadDataType extends DataType {
const signature = this.getSignature();
const parentName = parentBlock === undefined ? '' : parentBlock.getName();
const relocatable = false;
- const block = new PayloadCalldataBlock(name, signature, parentName, /*offsetInBytes,*/ relocatable, encodedValue);
+ const block = new PayloadCalldataBlock(
+ name,
+ signature,
+ parentName,
+ /*offsetInBytes,*/ relocatable,
+ encodedValue,
+ );
return block;
}
@@ -104,7 +117,14 @@ export abstract class DependentDataType extends DataType {
const signature = this.getSignature();
const parentName = parentBlock === undefined ? '' : parentBlock.getName();
const relocatable = false;
- const block = new DependentCalldataBlock(name, signature, parentName, relocatable, dependencyBlock, parentBlock);
+ const block = new DependentCalldataBlock(
+ name,
+ signature,
+ parentName,
+ relocatable,
+ dependencyBlock,
+ parentBlock,
+ );
return block;
}
@@ -135,8 +155,13 @@ export abstract class MemberDataType extends DataType {
protected arrayLength: number | undefined;
protected arrayElementType: string | undefined;
-
- public constructor(dataItem: DataItem, factory: DataTypeFactory, isArray: boolean = false, arrayLength?: number, arrayElementType?: string) {
+ public constructor(
+ dataItem: DataItem,
+ factory: DataTypeFactory,
+ isArray: boolean = false,
+ arrayLength?: number,
+ arrayElementType?: string,
+ ) {
super(dataItem, factory);
this.memberMap = {};
this.members = [];
@@ -207,11 +232,17 @@ export abstract class MemberDataType extends DataType {
}
const parentName = parentBlock === undefined ? '' : parentBlock.getName();
- const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(this.getDataItem().name, this.getSignature(), parentName, this.isStatic(), false);
+ const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(
+ this.getDataItem().name,
+ this.getSignature(),
+ parentName,
+ this.isStatic(),
+ false,
+ );
let members = this.members;
if (this.isArray && this.arrayLength === undefined) {
- [members,] = this.createMembersWithLength(this.getDataItem(), value.length);
+ [members] = this.createMembersWithLength(this.getDataItem(), value.length);
const lenBuf = ethUtil.setLengthLeft(ethUtil.toBuffer(`0x${value.length.toString(16)}`), 32);
methodBlock.setHeader(lenBuf);
@@ -228,12 +259,20 @@ export abstract class MemberDataType extends DataType {
protected generateCalldataBlockFromObject(obj: object, parentBlock?: CalldataBlock): MemberCalldataBlock {
const parentName = parentBlock === undefined ? '' : parentBlock.getName();
- const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(this.getDataItem().name, this.getSignature(), parentName, this.isStatic(), false);
+ const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(
+ this.getDataItem().name,
+ this.getSignature(),
+ parentName,
+ this.isStatic(),
+ false,
+ );
const memberBlocks: CalldataBlock[] = [];
let childMap = _.cloneDeep(this.memberMap);
_.forOwn(obj, (value: any, key: string) => {
if (key in childMap === false) {
- throw new Error(`Could not assign tuple to object: unrecognized key '${key}' in object ${this.getDataItem().name}`);
+ throw new Error(
+ `Could not assign tuple to object: unrecognized key '${key}' in object ${this.getDataItem().name}`,
+ );
}
const block = this.members[this.memberMap[key]].generateCalldataBlock(value, methodBlock);
memberBlocks.push(block);
@@ -249,7 +288,10 @@ export abstract class MemberDataType extends DataType {
}
public generateCalldataBlock(value: any[] | object, parentBlock?: CalldataBlock): MemberCalldataBlock {
- const block = (value instanceof Array) ? this.generateCalldataBlockFromArray(value, parentBlock) : this.generateCalldataBlockFromObject(value, parentBlock);
+ const block =
+ value instanceof Array
+ ? this.generateCalldataBlockFromArray(value, parentBlock)
+ : this.generateCalldataBlockFromObject(value, parentBlock);
return block;
}
@@ -261,7 +303,7 @@ export abstract class MemberDataType extends DataType {
const hexBase = 16;
const arrayLength = new BigNumber(arrayLengthHex, hexBase);
- [members,] = this.createMembersWithLength(this.getDataItem(), arrayLength.toNumber());
+ [members] = this.createMembersWithLength(this.getDataItem(), arrayLength.toNumber());
}
calldata.startScope();
@@ -314,9 +356,9 @@ export abstract class MemberDataType extends DataType {
// Search for dependent members
const dependentMember = _.find(this.members, (member: DataType) => {
- return (member instanceof DependentDataType);
+ return member instanceof DependentDataType;
});
- const isStatic = (dependentMember === undefined); // static if we couldn't find a dependent member
+ const isStatic = dependentMember === undefined; // static if we couldn't find a dependent member
return isStatic;
}
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types.ts b/packages/utils/src/abi_encoder/evm_data_types.ts
index 2895ee00f..10e7b987b 100644
--- a/packages/utils/src/abi_encoder/evm_data_types.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types.ts
@@ -21,7 +21,7 @@ export interface DataTypeStaticInterface {
export class Address extends PayloadDataType {
private static SIZE_KNOWN_AT_COMPILE_TIME: boolean = true;
public static ERROR_MESSAGE_ADDRESS_MUST_START_WITH_0X = "Address must start with '0x'";
- public static ERROR_MESSAGE_ADDRESS_MUST_BE_20_BYTES = "Address must be 20 bytes";
+ public static ERROR_MESSAGE_ADDRESS_MUST_BE_20_BYTES = 'Address must be 20 bytes';
constructor(dataItem: DataItem) {
super(dataItem, EvmDataTypeFactory.getInstance(), Address.SIZE_KNOWN_AT_COMPILE_TIME);
@@ -88,7 +88,7 @@ export class Bool extends PayloadDataType {
const valueBuf = calldata.popWord();
const valueHex = ethUtil.bufferToHex(valueBuf);
const valueNumber = new BigNumber(valueHex, 16);
- let value: boolean = (valueNumber.equals(0)) ? false : true;
+ let value: boolean = valueNumber.equals(0) ? false : true;
if (!(valueNumber.equals(0) || valueNumber.equals(1))) {
throw new Error(`Failed to decode boolean. Expected 0x0 or 0x1, got ${valueHex}`);
}
@@ -147,10 +147,7 @@ abstract class Number extends PayloadDataType {
const negativeValue = invertedValue.plus(1);
// Convert the negated value to a hex string
- valueBuf = ethUtil.setLengthLeft(
- ethUtil.toBuffer(`0x${negativeValue.toString(hexBase)}`),
- evmWordWidth,
- );
+ valueBuf = ethUtil.setLengthLeft(ethUtil.toBuffer(`0x${negativeValue.toString(hexBase)}`), evmWordWidth);
}
return valueBuf;
@@ -279,7 +276,7 @@ export class Byte extends PayloadDataType {
if (valueBuf.byteLength > this.width) {
throw new Error(
`Tried to assign ${value} (${
- valueBuf.byteLength
+ valueBuf.byteLength
} bytes), which exceeds max bytes that can be stored in a ${this.getSignature()}`,
);
} else if (value.length % 2 !== 0) {
@@ -392,7 +389,6 @@ export class SolString extends PayloadDataType {
}
export class Pointer extends DependentDataType {
-
constructor(destDataType: DataType, parentDataType: DataType) {
const destDataItem = destDataType.getDataItem();
const dataItem = { name: `ptr<${destDataItem.name}>`, type: `ptr<${destDataItem.type}>` } as DataItem;
@@ -442,7 +438,7 @@ export class SolArray extends MemberDataType {
const isArray = true;
const arrayElementType = matches[1];
- const arrayLength = (matches[2] === '') ? undefined : parseInt(matches[2], 10);
+ const arrayLength = matches[2] === '' ? undefined : parseInt(matches[2], 10);
super(dataItem, EvmDataTypeFactory.getInstance(), isArray, arrayLength, arrayElementType);
this.elementType = arrayElementType;
this.arraySignature = this.computeSignature();
@@ -513,7 +509,9 @@ export class Method extends MemberDataType {
public decode(calldata: string, rules?: DecodingRules): any[] | object {
if (!calldata.startsWith(this.selector)) {
- throw new Error(`Tried to decode calldata, but it was missing the function selector. Expected '${this.selector}'.`);
+ throw new Error(
+ `Tried to decode calldata, but it was missing the function selector. Expected '${this.selector}'.`,
+ );
}
const hasSelector = true;
const value = super.decode(calldata, rules, hasSelector);
@@ -524,7 +522,7 @@ export class Method extends MemberDataType {
//console.log('O'.repeat(100), '\n', returndata, '\n', this.returnDataTypes, 'P'.repeat(100));
const returnValues: any[] = [];
- const rules_ = rules ? rules : { structsAsObjects: false } as DecodingRules;
+ const rules_ = rules ? rules : ({ structsAsObjects: false } as DecodingRules);
const rawReturnData = new RawCalldata(returndata, false);
_.each(this.returnDataTypes, (dataType: DataType) => {
returnValues.push(dataType.generateValue(rawReturnData, rules_));
@@ -549,7 +547,7 @@ export class Method extends MemberDataType {
export class EvmDataTypeFactory implements DataTypeFactory {
private static instance: DataTypeFactory;
- private constructor() { }
+ private constructor() {}
public static getInstance(): DataTypeFactory {
if (!EvmDataTypeFactory.instance) {
@@ -580,10 +578,11 @@ export class EvmDataTypeFactory implements DataTypeFactory {
return dataType;
}
- if (parentDataType === undefined) { // @Todo -- will this work for return values?
+ if (parentDataType === undefined) {
+ // @Todo -- will this work for return values?
throw new Error(`Trying to create a pointer`);
}
const pointer = new Pointer(dataType, parentDataType);
return pointer;
}
-} \ No newline at end of file
+}
diff --git a/packages/utils/src/abi_encoder/index.ts b/packages/utils/src/abi_encoder/index.ts
index 991edb8c5..95ad84ac9 100644
--- a/packages/utils/src/abi_encoder/index.ts
+++ b/packages/utils/src/abi_encoder/index.ts
@@ -1,2 +1,2 @@
export { EncodingRules, DecodingRules } from './calldata';
-export * from './evm_data_types'; \ No newline at end of file
+export * from './evm_data_types';