blob: a091e55b9deea98af54cfe3f092728e5d49f57d5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import { DataItem } from 'ethereum-types';
import * as _ from 'lodash';
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';
import { DataTypeFactory } from '../interfaces';
export abstract class AbstractBlobDataType extends DataType {
protected _sizeKnownAtCompileTime: boolean;
public constructor(dataItem: DataItem, factory: DataTypeFactory, sizeKnownAtCompileTime: boolean) {
super(dataItem, factory);
this._sizeKnownAtCompileTime = sizeKnownAtCompileTime;
}
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 BlobCalldataBlock(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._sizeKnownAtCompileTime;
}
public abstract encodeValue(value: any): Buffer;
public abstract decodeValue(calldata: RawCalldata): any;
}
|