aboutsummaryrefslogtreecommitdiffstats
path: root/packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts
diff options
context:
space:
mode:
authorGreg Hysen <greg.hysen@gmail.com>2018-11-21 05:40:46 +0800
committerGreg Hysen <greg.hysen@gmail.com>2018-11-29 08:38:11 +0800
commitfee67326adbbf745966803c935d5663c3ca7f52c (patch)
tree752d17d251026abf2a774992a79b2e9030957161 /packages/utils/src/abi_encoder/abstract_data_types/payload_data_type.ts
parenta47901370bc69d6247e941c569bc9fe824516db9 (diff)
downloaddexon-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.ts38
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;
+}