Explicit imports for calldata
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import { DataItem } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { Calldata, CalldataBlock, RawCalldata } from '../calldata';
|
||||
import { Calldata } from '../calldata/calldata';
|
||||
import { CalldataBlock } from '../calldata/calldata_block';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
import { DecodingRules, EncodingRules } from '../utils/rules';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { DataItem } from 'ethereum-types';
|
||||
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
|
||||
import { DataType } from './data_type';
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import { DataItem } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { CalldataBlock, CalldataBlocks, RawCalldata } from '../../calldata';
|
||||
import { BlobCalldataBlock } from '../../calldata/blocks/blob';
|
||||
import { CalldataBlock } from '../../calldata/calldata_block';
|
||||
import { RawCalldata } from '../../calldata/raw_calldata';
|
||||
import { DecodingRules } from '../../utils/rules';
|
||||
|
||||
import { DataType } from '../data_type';
|
||||
@@ -15,12 +17,12 @@ export abstract class AbstractBlobDataType extends DataType {
|
||||
this._sizeKnownAtCompileTime = sizeKnownAtCompileTime;
|
||||
}
|
||||
|
||||
public generateCalldataBlock(value: any, parentBlock?: CalldataBlock): CalldataBlocks.Blob {
|
||||
public generateCalldataBlock(value: any, parentBlock?: CalldataBlock): BlobCalldataBlock {
|
||||
const encodedValue = this.encodeValue(value);
|
||||
const name = this.getDataItem().name;
|
||||
const signature = this.getSignature();
|
||||
const parentName = _.isUndefined(parentBlock) ? '' : parentBlock.getName();
|
||||
const block = new CalldataBlocks.Blob(name, signature, parentName, encodedValue);
|
||||
const block = new BlobCalldataBlock(name, signature, parentName, encodedValue);
|
||||
return block;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@ import { DataItem } from 'ethereum-types';
|
||||
import * as ethUtil from 'ethereumjs-util';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { CalldataBlock, CalldataBlocks, RawCalldata } from '../../calldata';
|
||||
import { PointerCalldataBlock } from '../../calldata/blocks/pointer';
|
||||
import { CalldataBlock } from '../../calldata/calldata_block';
|
||||
import { RawCalldata } from '../../calldata/raw_calldata';
|
||||
import { constants } from '../../utils/constants';
|
||||
import { DecodingRules } from '../../utils/rules';
|
||||
|
||||
@@ -19,7 +21,7 @@ export abstract class AbstractPointerDataType extends DataType {
|
||||
this._parent = parent;
|
||||
}
|
||||
|
||||
public generateCalldataBlock(value: any, parentBlock?: CalldataBlock): CalldataBlocks.Pointer {
|
||||
public generateCalldataBlock(value: any, parentBlock?: CalldataBlock): PointerCalldataBlock {
|
||||
if (_.isUndefined(parentBlock)) {
|
||||
throw new Error(`DependentDataType requires a parent block to generate its block`);
|
||||
}
|
||||
@@ -27,7 +29,7 @@ export abstract class AbstractPointerDataType extends DataType {
|
||||
const name = this.getDataItem().name;
|
||||
const signature = this.getSignature();
|
||||
const parentName = parentBlock.getName();
|
||||
const block = new CalldataBlocks.Pointer(name, signature, parentName, destinationBlock, parentBlock);
|
||||
const block = new PointerCalldataBlock(name, signature, parentName, destinationBlock, parentBlock);
|
||||
return block;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,9 @@ import * as ethUtil from 'ethereumjs-util';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { BigNumber } from '../../../configured_bignumber';
|
||||
import { CalldataBlock, CalldataBlocks, RawCalldata } from '../../calldata';
|
||||
import { SetCalldataBlock } from '../../calldata/blocks/set';
|
||||
import { CalldataBlock } from '../../calldata/calldata_block';
|
||||
import { RawCalldata } from '../../calldata/raw_calldata';
|
||||
import { constants } from '../../utils/constants';
|
||||
import { DecodingRules } from '../../utils/rules';
|
||||
|
||||
@@ -39,7 +41,7 @@ export abstract class AbstractSetDataType extends DataType {
|
||||
}
|
||||
}
|
||||
|
||||
public generateCalldataBlock(value: any[] | object, parentBlock?: CalldataBlock): CalldataBlocks.Set {
|
||||
public generateCalldataBlock(value: any[] | object, parentBlock?: CalldataBlock): SetCalldataBlock {
|
||||
const block =
|
||||
value instanceof Array
|
||||
? this._generateCalldataBlockFromArray(value, parentBlock)
|
||||
@@ -94,7 +96,7 @@ export abstract class AbstractSetDataType extends DataType {
|
||||
return isStatic;
|
||||
}
|
||||
|
||||
protected _generateCalldataBlockFromArray(value: any[], parentBlock?: CalldataBlock): CalldataBlocks.Set {
|
||||
protected _generateCalldataBlockFromArray(value: any[], parentBlock?: CalldataBlock): SetCalldataBlock {
|
||||
// Sanity check: if the set has a defined length then `value` must have the same length.
|
||||
if (!_.isUndefined(this._arrayLength) && value.length !== this._arrayLength) {
|
||||
throw new Error(
|
||||
@@ -105,7 +107,7 @@ export abstract class AbstractSetDataType extends DataType {
|
||||
}
|
||||
// Create a new calldata block for this set.
|
||||
const parentName = _.isUndefined(parentBlock) ? '' : parentBlock.getName();
|
||||
const block: CalldataBlocks.Set = new CalldataBlocks.Set(
|
||||
const block = new SetCalldataBlock(
|
||||
this.getDataItem().name,
|
||||
this.getSignature(),
|
||||
parentName,
|
||||
@@ -130,10 +132,10 @@ export abstract class AbstractSetDataType extends DataType {
|
||||
return block;
|
||||
}
|
||||
|
||||
protected _generateCalldataBlockFromObject(obj: object, parentBlock?: CalldataBlock): CalldataBlocks.Set {
|
||||
protected _generateCalldataBlockFromObject(obj: object, parentBlock?: CalldataBlock): SetCalldataBlock {
|
||||
// Create a new calldata block for this set.
|
||||
const parentName = _.isUndefined(parentBlock) ? '' : parentBlock.getName();
|
||||
const block: CalldataBlocks.Set = new CalldataBlocks.Set(
|
||||
const block = new SetCalldataBlock(
|
||||
this.getDataItem().name,
|
||||
this.getSignature(),
|
||||
parentName,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CalldataBlock } from '../calldata_block';
|
||||
|
||||
export class Blob extends CalldataBlock {
|
||||
export class BlobCalldataBlock extends CalldataBlock {
|
||||
private readonly _blob: Buffer;
|
||||
|
||||
constructor(name: string, signature: string, parentName: string, blob: Buffer) {
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
export * from './blob';
|
||||
export * from './pointer';
|
||||
export * from './set';
|
||||
@@ -5,7 +5,7 @@ import { constants } from '../../utils/constants';
|
||||
|
||||
import { CalldataBlock } from '../calldata_block';
|
||||
|
||||
export class Pointer extends CalldataBlock {
|
||||
export class PointerCalldataBlock extends CalldataBlock {
|
||||
public static readonly RAW_DATA_START = new Buffer('<');
|
||||
public static readonly RAW_DATA_END = new Buffer('>');
|
||||
private static readonly _DEPENDENT_PAYLOAD_SIZE_IN_BYTES = 32;
|
||||
@@ -15,8 +15,8 @@ export class Pointer extends CalldataBlock {
|
||||
private _aliasFor: CalldataBlock | undefined;
|
||||
|
||||
constructor(name: string, signature: string, parentName: string, dependency: CalldataBlock, parent: CalldataBlock) {
|
||||
const headerSizeInBytes = Pointer._EMPTY_HEADER_SIZE;
|
||||
const bodySizeInBytes = Pointer._DEPENDENT_PAYLOAD_SIZE_IN_BYTES;
|
||||
const headerSizeInBytes = PointerCalldataBlock._EMPTY_HEADER_SIZE;
|
||||
const bodySizeInBytes = PointerCalldataBlock._DEPENDENT_PAYLOAD_SIZE_IN_BYTES;
|
||||
super(name, signature, parentName, headerSizeInBytes, bodySizeInBytes);
|
||||
this._parent = parent;
|
||||
this._dependency = dependency;
|
||||
@@ -51,9 +51,9 @@ export class Pointer extends CalldataBlock {
|
||||
public getRawData(): Buffer {
|
||||
const dependencyRawData = this._dependency.getRawData();
|
||||
const rawDataComponents: Buffer[] = [];
|
||||
rawDataComponents.push(Pointer.RAW_DATA_START);
|
||||
rawDataComponents.push(PointerCalldataBlock.RAW_DATA_START);
|
||||
rawDataComponents.push(dependencyRawData);
|
||||
rawDataComponents.push(Pointer.RAW_DATA_END);
|
||||
rawDataComponents.push(PointerCalldataBlock.RAW_DATA_END);
|
||||
const rawData = Buffer.concat(rawDataComponents);
|
||||
return rawData;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import * as _ from 'lodash';
|
||||
|
||||
import { CalldataBlock } from '../calldata_block';
|
||||
|
||||
export class Set extends CalldataBlock {
|
||||
export class SetCalldataBlock extends CalldataBlock {
|
||||
private _header: Buffer | undefined;
|
||||
private _members: CalldataBlock[];
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@ import * as _ from 'lodash';
|
||||
import { constants } from '../utils/constants';
|
||||
import { EncodingRules } from '../utils/rules';
|
||||
|
||||
import * as CalldataBlocks from './blocks';
|
||||
import { PointerCalldataBlock } from './blocks/pointer';
|
||||
import { SetCalldataBlock } from './blocks/set';
|
||||
import { CalldataBlock } from './calldata_block';
|
||||
import { CalldataIterator, ReverseCalldataIterator } from './iterator';
|
||||
|
||||
@@ -112,7 +113,7 @@ export class Calldata {
|
||||
for (const block of iterator) {
|
||||
// If a block is a pointer and its value has already been observed, then update
|
||||
// the pointer to resolve to the existing value.
|
||||
if (block instanceof CalldataBlocks.Pointer) {
|
||||
if (block instanceof PointerCalldataBlock) {
|
||||
const dependencyBlockHashBuf = block.getDependency().computeHash();
|
||||
const dependencyBlockHash = ethUtil.bufferToHex(dependencyBlockHashBuf);
|
||||
if (dependencyBlockHash in blocksByHash) {
|
||||
@@ -214,7 +215,7 @@ export class Calldata {
|
||||
),
|
||||
)
|
||||
.padEnd(valuePadding);
|
||||
if (block instanceof CalldataBlocks.Set) {
|
||||
if (block instanceof SetCalldataBlock) {
|
||||
nameStr = `### ${prettyName.padEnd(namePadding)}`;
|
||||
lineStr = `\n${offsetStr}${valueStr}${nameStr}`;
|
||||
} else {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
export * from './calldata';
|
||||
export * from './calldata_block';
|
||||
export * from './raw_calldata';
|
||||
import * as CalldataBlocks from './blocks';
|
||||
export { CalldataBlocks };
|
||||
@@ -3,7 +3,9 @@ import * as _ from 'lodash';
|
||||
|
||||
import { Queue } from '../utils/queue';
|
||||
|
||||
import * as CalldataBlocks from './blocks';
|
||||
import { BlobCalldataBlock } from './blocks/blob';
|
||||
import { PointerCalldataBlock } from './blocks/pointer';
|
||||
import { SetCalldataBlock } from './blocks/set';
|
||||
import { CalldataBlock } from './calldata_block';
|
||||
|
||||
/**
|
||||
@@ -42,7 +44,7 @@ abstract class BaseIterator implements Iterable<CalldataBlock> {
|
||||
private static _createQueue(block: CalldataBlock): Queue<CalldataBlock> {
|
||||
const queue = new Queue<CalldataBlock>();
|
||||
// Base case
|
||||
if (!(block instanceof CalldataBlocks.Set)) {
|
||||
if (!(block instanceof SetCalldataBlock)) {
|
||||
queue.pushBack(block);
|
||||
return queue;
|
||||
}
|
||||
@@ -55,7 +57,7 @@ abstract class BaseIterator implements Iterable<CalldataBlock> {
|
||||
_.each(set.getMembers(), (member: CalldataBlock) => {
|
||||
// Traverse child if it is a unique pointer.
|
||||
// A pointer that is an alias for another pointer is ignored.
|
||||
if (member instanceof CalldataBlocks.Pointer && _.isUndefined(member.getAlias())) {
|
||||
if (member instanceof PointerCalldataBlock && _.isUndefined(member.getAlias())) {
|
||||
const dependency = member.getDependency();
|
||||
queue.mergeBack(BaseIterator._createQueue(dependency));
|
||||
}
|
||||
@@ -82,7 +84,7 @@ abstract class BaseIterator implements Iterable<CalldataBlock> {
|
||||
}
|
||||
return {
|
||||
done: true,
|
||||
value: new CalldataBlocks.Blob('', '', '', new Buffer('')),
|
||||
value: new BlobCalldataBlock('', '', '', new Buffer('')),
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
|
||||
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
|
||||
export class AddressDataType extends AbstractBlobDataType {
|
||||
|
||||
@@ -5,7 +5,7 @@ import * as _ from 'lodash';
|
||||
import { BigNumber } from '../../configured_bignumber';
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
|
||||
export class BoolDataType extends AbstractBlobDataType {
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
|
||||
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
|
||||
export class DynamicBytesDataType extends AbstractBlobDataType {
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
|
||||
import { BigNumber } from '../../configured_bignumber';
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
import * as EncoderMath from '../utils/math';
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
|
||||
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
|
||||
export class StaticBytesDataType extends AbstractBlobDataType {
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
|
||||
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
|
||||
export class StringDataType extends AbstractBlobDataType {
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
|
||||
import { BigNumber } from '../../configured_bignumber';
|
||||
import { DataTypeFactory } from '../abstract_data_types/interfaces';
|
||||
import { AbstractBlobDataType } from '../abstract_data_types/types/blob';
|
||||
import { RawCalldata } from '../calldata';
|
||||
import { RawCalldata } from '../calldata/raw_calldata';
|
||||
import { constants } from '../utils/constants';
|
||||
import * as EncoderMath from '../utils/math';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user