diff options
author | Greg Hysen <greg.hysen@gmail.com> | 2018-11-21 05:40:46 +0800 |
---|---|---|
committer | Greg Hysen <greg.hysen@gmail.com> | 2018-11-29 08:38:11 +0800 |
commit | fee67326adbbf745966803c935d5663c3ca7f52c (patch) | |
tree | 752d17d251026abf2a774992a79b2e9030957161 /packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts | |
parent | a47901370bc69d6247e941c569bc9fe824516db9 (diff) | |
download | dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.tar dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.tar.gz dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.tar.bz2 dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.tar.lz dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.tar.xz dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.tar.zst dexon-sol-tools-fee67326adbbf745966803c935d5663c3ca7f52c.zip |
Merge above
Diffstat (limited to 'packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts')
-rw-r--r-- | packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts b/packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts new file mode 100644 index 000000000..767e64f51 --- /dev/null +++ b/packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts @@ -0,0 +1,38 @@ +import { DataItem } from 'ethereum-types'; +import * as _ from 'lodash'; + +import { CalldataBlock, PayloadCalldataBlock, RawCalldata } from '../calldata'; +import { DecodingRules } from '../utils/rules'; + +import { DataType } from './data_type'; +import { DataTypeFactory } from './interfaces'; + +export abstract class PayloadDataType extends DataType { + protected _hasConstantSize: boolean; + + public constructor(dataItem: DataItem, factory: DataTypeFactory, hasConstantSize: boolean) { + super(dataItem, factory); + this._hasConstantSize = hasConstantSize; + } + + public generateCalldataBlock(value: any, parentBlock?: CalldataBlock): PayloadCalldataBlock { + const encodedValue = this.encodeValue(value); + const name = this.getDataItem().name; + const signature = this.getSignature(); + const parentName = parentBlock === undefined ? '' : parentBlock.getName(); + const block = new PayloadCalldataBlock(name, signature, parentName, encodedValue); + return block; + } + + public generateValue(calldata: RawCalldata, rules: DecodingRules): any { + const value = this.decodeValue(calldata); + return value; + } + + public isStatic(): boolean { + return this._hasConstantSize; + } + + public abstract encodeValue(value: any): Buffer; + public abstract decodeValue(calldata: RawCalldata): any; +} |