web-eth-abi 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +14 -0
- package/README.md +59 -0
- package/lib/commonjs/api/errors_api.d.ts +5 -0
- package/lib/commonjs/api/errors_api.js +44 -0
- package/lib/commonjs/api/errors_api.js.map +1 -0
- package/lib/commonjs/api/events_api.d.ts +51 -0
- package/lib/commonjs/api/events_api.js +90 -0
- package/lib/commonjs/api/events_api.js.map +1 -0
- package/lib/commonjs/api/functions_api.d.ts +92 -0
- package/lib/commonjs/api/functions_api.js +139 -0
- package/lib/commonjs/api/functions_api.js.map +1 -0
- package/lib/commonjs/api/logs_api.d.ts +49 -0
- package/lib/commonjs/api/logs_api.js +107 -0
- package/lib/commonjs/api/logs_api.js.map +1 -0
- package/lib/commonjs/api/parameters_api.d.ts +238 -0
- package/lib/commonjs/api/parameters_api.js +280 -0
- package/lib/commonjs/api/parameters_api.js.map +1 -0
- package/lib/commonjs/coders/base/address.d.ts +4 -0
- package/lib/commonjs/coders/base/address.js +75 -0
- package/lib/commonjs/coders/base/address.js.map +1 -0
- package/lib/commonjs/coders/base/array.d.ts +4 -0
- package/lib/commonjs/coders/base/array.js +106 -0
- package/lib/commonjs/coders/base/array.js.map +1 -0
- package/lib/commonjs/coders/base/bool.d.ts +4 -0
- package/lib/commonjs/coders/base/bool.js +56 -0
- package/lib/commonjs/coders/base/bool.js.map +1 -0
- package/lib/commonjs/coders/base/bytes.d.ts +4 -0
- package/lib/commonjs/coders/base/bytes.js +101 -0
- package/lib/commonjs/coders/base/bytes.js.map +1 -0
- package/lib/commonjs/coders/base/index.d.ts +11 -0
- package/lib/commonjs/coders/base/index.js +109 -0
- package/lib/commonjs/coders/base/index.js.map +1 -0
- package/lib/commonjs/coders/base/number.d.ts +4 -0
- package/lib/commonjs/coders/base/number.js +116 -0
- package/lib/commonjs/coders/base/number.js.map +1 -0
- package/lib/commonjs/coders/base/numbersLimits.d.ts +4 -0
- package/lib/commonjs/coders/base/numbersLimits.js +40 -0
- package/lib/commonjs/coders/base/numbersLimits.js.map +1 -0
- package/lib/commonjs/coders/base/string.d.ts +4 -0
- package/lib/commonjs/coders/base/string.js +40 -0
- package/lib/commonjs/coders/base/string.js.map +1 -0
- package/lib/commonjs/coders/base/tuple.d.ts +7 -0
- package/lib/commonjs/coders/base/tuple.js +123 -0
- package/lib/commonjs/coders/base/tuple.js.map +1 -0
- package/lib/commonjs/coders/base/utils.d.ts +2 -0
- package/lib/commonjs/coders/base/utils.js +50 -0
- package/lib/commonjs/coders/base/utils.js.map +1 -0
- package/lib/commonjs/coders/decode.d.ts +5 -0
- package/lib/commonjs/coders/decode.js +29 -0
- package/lib/commonjs/coders/decode.js.map +1 -0
- package/lib/commonjs/coders/encode.d.ts +38 -0
- package/lib/commonjs/coders/encode.js +113 -0
- package/lib/commonjs/coders/encode.js.map +1 -0
- package/lib/commonjs/coders/types.d.ts +16 -0
- package/lib/commonjs/coders/types.js +19 -0
- package/lib/commonjs/coders/types.js.map +1 -0
- package/lib/commonjs/coders/utils.d.ts +23 -0
- package/lib/commonjs/coders/utils.js +115 -0
- package/lib/commonjs/coders/utils.js.map +1 -0
- package/lib/commonjs/decode_contract_error_data.d.ts +3 -0
- package/lib/commonjs/decode_contract_error_data.js +73 -0
- package/lib/commonjs/decode_contract_error_data.js.map +1 -0
- package/lib/commonjs/eip_712.d.ts +50 -0
- package/lib/commonjs/eip_712.js +144 -0
- package/lib/commonjs/eip_712.js.map +1 -0
- package/lib/commonjs/index.d.ts +8 -0
- package/lib/commonjs/index.js +43 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/utils.d.ts +43 -0
- package/lib/commonjs/utils.js +216 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/esm/api/errors_api.js +40 -0
- package/lib/esm/api/errors_api.js.map +1 -0
- package/lib/esm/api/events_api.js +86 -0
- package/lib/esm/api/events_api.js.map +1 -0
- package/lib/esm/api/functions_api.js +134 -0
- package/lib/esm/api/functions_api.js.map +1 -0
- package/lib/esm/api/logs_api.js +103 -0
- package/lib/esm/api/logs_api.js.map +1 -0
- package/lib/esm/api/parameters_api.js +271 -0
- package/lib/esm/api/parameters_api.js.map +1 -0
- package/lib/esm/coders/base/address.js +70 -0
- package/lib/esm/coders/base/address.js.map +1 -0
- package/lib/esm/coders/base/array.js +101 -0
- package/lib/esm/coders/base/array.js.map +1 -0
- package/lib/esm/coders/base/bool.js +51 -0
- package/lib/esm/coders/base/bool.js.map +1 -0
- package/lib/esm/coders/base/bytes.js +96 -0
- package/lib/esm/coders/base/bytes.js.map +1 -0
- package/lib/esm/coders/base/index.js +90 -0
- package/lib/esm/coders/base/index.js.map +1 -0
- package/lib/esm/coders/base/number.js +111 -0
- package/lib/esm/coders/base/number.js.map +1 -0
- package/lib/esm/coders/base/numbersLimits.js +37 -0
- package/lib/esm/coders/base/numbersLimits.js.map +1 -0
- package/lib/esm/coders/base/string.js +35 -0
- package/lib/esm/coders/base/string.js.map +1 -0
- package/lib/esm/coders/base/tuple.js +118 -0
- package/lib/esm/coders/base/tuple.js.map +1 -0
- package/lib/esm/coders/base/utils.js +46 -0
- package/lib/esm/coders/base/utils.js.map +1 -0
- package/lib/esm/coders/decode.js +25 -0
- package/lib/esm/coders/decode.js.map +1 -0
- package/lib/esm/coders/encode.js +108 -0
- package/lib/esm/coders/encode.js.map +1 -0
- package/lib/esm/coders/types.js +18 -0
- package/lib/esm/coders/types.js.map +1 -0
- package/lib/esm/coders/utils.js +105 -0
- package/lib/esm/coders/utils.js.map +1 -0
- package/lib/esm/decode_contract_error_data.js +69 -0
- package/lib/esm/decode_contract_error_data.js.map +1 -0
- package/lib/esm/eip_712.js +140 -0
- package/lib/esm/eip_712.js.map +1 -0
- package/lib/esm/index.js +25 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/package.json +1 -0
- package/lib/esm/utils.js +199 -0
- package/lib/esm/utils.js.map +1 -0
- package/lib/types/api/errors_api.d.ts +6 -0
- package/lib/types/api/errors_api.d.ts.map +1 -0
- package/lib/types/api/events_api.d.ts +52 -0
- package/lib/types/api/events_api.d.ts.map +1 -0
- package/lib/types/api/functions_api.d.ts +93 -0
- package/lib/types/api/functions_api.d.ts.map +1 -0
- package/lib/types/api/logs_api.d.ts +50 -0
- package/lib/types/api/logs_api.d.ts.map +1 -0
- package/lib/types/api/parameters_api.d.ts +239 -0
- package/lib/types/api/parameters_api.d.ts.map +1 -0
- package/lib/types/coders/base/address.d.ts +5 -0
- package/lib/types/coders/base/address.d.ts.map +1 -0
- package/lib/types/coders/base/array.d.ts +5 -0
- package/lib/types/coders/base/array.d.ts.map +1 -0
- package/lib/types/coders/base/bool.d.ts +5 -0
- package/lib/types/coders/base/bool.d.ts.map +1 -0
- package/lib/types/coders/base/bytes.d.ts +5 -0
- package/lib/types/coders/base/bytes.d.ts.map +1 -0
- package/lib/types/coders/base/index.d.ts +12 -0
- package/lib/types/coders/base/index.d.ts.map +1 -0
- package/lib/types/coders/base/number.d.ts +5 -0
- package/lib/types/coders/base/number.d.ts.map +1 -0
- package/lib/types/coders/base/numbersLimits.d.ts +5 -0
- package/lib/types/coders/base/numbersLimits.d.ts.map +1 -0
- package/lib/types/coders/base/string.d.ts +5 -0
- package/lib/types/coders/base/string.d.ts.map +1 -0
- package/lib/types/coders/base/tuple.d.ts +8 -0
- package/lib/types/coders/base/tuple.d.ts.map +1 -0
- package/lib/types/coders/base/utils.d.ts +3 -0
- package/lib/types/coders/base/utils.d.ts.map +1 -0
- package/lib/types/coders/decode.d.ts +6 -0
- package/lib/types/coders/decode.d.ts.map +1 -0
- package/lib/types/coders/encode.d.ts +39 -0
- package/lib/types/coders/encode.d.ts.map +1 -0
- package/lib/types/coders/types.d.ts +17 -0
- package/lib/types/coders/types.d.ts.map +1 -0
- package/lib/types/coders/utils.d.ts +24 -0
- package/lib/types/coders/utils.d.ts.map +1 -0
- package/lib/types/decode_contract_error_data.d.ts +4 -0
- package/lib/types/decode_contract_error_data.d.ts.map +1 -0
- package/lib/types/eip_712.d.ts +51 -0
- package/lib/types/eip_712.d.ts.map +1 -0
- package/lib/types/index.d.ts +9 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/utils.d.ts +44 -0
- package/lib/types/utils.d.ts.map +1 -0
- package/package.json +56 -0
- package/src/api/errors_api.ts +45 -0
- package/src/api/events_api.ts +91 -0
- package/src/api/functions_api.ts +145 -0
- package/src/api/logs_api.ts +131 -0
- package/src/api/parameters_api.ts +287 -0
- package/src/coders/base/address.ts +75 -0
- package/src/coders/base/array.ts +120 -0
- package/src/coders/base/bool.ts +54 -0
- package/src/coders/base/bytes.ts +106 -0
- package/src/coders/base/index.ts +95 -0
- package/src/coders/base/number.ts +116 -0
- package/src/coders/base/numbersLimits.ts +39 -0
- package/src/coders/base/string.ts +38 -0
- package/src/coders/base/tuple.ts +130 -0
- package/src/coders/base/utils.ts +51 -0
- package/src/coders/decode.ts +32 -0
- package/src/coders/encode.ts +114 -0
- package/src/coders/types.ts +39 -0
- package/src/coders/utils.ts +128 -0
- package/src/decode_contract_error_data.ts +80 -0
- package/src/eip_712.ts +252 -0
- package/src/index.ts +25 -0
- package/src/utils.ts +266 -0
- package/wimho03d.cjs +1 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../../src/coders/base/string.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;EAeE;AACF,6CAAuC;AAEvC,2CAAoD;AAEpD,yCAAsD;AAEtD,SAAgB,YAAY,CAAC,MAAoB,EAAE,KAAc;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,MAAM,IAAI,sBAAQ,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;KACjE;IACD,MAAM,KAAK,GAAG,IAAA,wBAAW,EAAC,KAAK,CAAC,CAAC;IACjC,OAAO,IAAA,sBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAND,oCAMC;AAED,SAAgB,YAAY,CAAC,MAAoB,EAAE,KAAiB;IACnE,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO;QACN,MAAM,EAAE,IAAA,sBAAS,EAAC,CAAC,CAAC,MAAM,CAAC;QAC3B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACpB,CAAC;AACH,CAAC;AAPD,oCAOC"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { AbiParameter } from 'web3-types';
|
2
|
+
import { DecoderResult, EncoderResult } from '../types.js';
|
3
|
+
export declare function encodeTuple(param: AbiParameter, input: unknown): EncoderResult;
|
4
|
+
export declare function decodeTuple(param: AbiParameter, bytes: Uint8Array): DecoderResult<{
|
5
|
+
[key: string]: unknown;
|
6
|
+
__length__: number;
|
7
|
+
}>;
|
@@ -0,0 +1,123 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.decodeTuple = exports.encodeTuple = void 0;
|
4
|
+
/*
|
5
|
+
This file is part of web3.js.
|
6
|
+
|
7
|
+
web3.js is free software: you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
the Free Software Foundation, either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
web3.js is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public License
|
18
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
const web3_errors_1 = require("web3-errors");
|
21
|
+
const web3_utils_1 = require("web3-utils");
|
22
|
+
// eslint-disable-next-line import/no-cycle
|
23
|
+
const index_js_1 = require("./index.js");
|
24
|
+
const utils_js_1 = require("./utils.js");
|
25
|
+
const utils_js_2 = require("../utils.js");
|
26
|
+
const number_js_1 = require("./number.js");
|
27
|
+
function encodeTuple(param, input) {
|
28
|
+
var _a, _b, _c;
|
29
|
+
let dynamic = false;
|
30
|
+
if (!Array.isArray(input) && typeof input !== 'object') {
|
31
|
+
throw new web3_errors_1.AbiError('param must be either Array or Object', {
|
32
|
+
param,
|
33
|
+
input,
|
34
|
+
});
|
35
|
+
}
|
36
|
+
const narrowedInput = input;
|
37
|
+
const encoded = [];
|
38
|
+
for (let i = 0; i < ((_b = (_a = param.components) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0); i += 1) {
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
40
|
+
const paramComponent = param.components[i];
|
41
|
+
let result;
|
42
|
+
if (Array.isArray(narrowedInput)) {
|
43
|
+
if (i >= narrowedInput.length) {
|
44
|
+
throw new web3_errors_1.AbiError('input param length missmatch', {
|
45
|
+
param,
|
46
|
+
input,
|
47
|
+
});
|
48
|
+
}
|
49
|
+
result = (0, index_js_1.encodeParamFromAbiParameter)(paramComponent, narrowedInput[i]);
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
const paramInput = narrowedInput[(_c = paramComponent.name) !== null && _c !== void 0 ? _c : ''];
|
53
|
+
// eslint-disable-next-line no-null/no-null
|
54
|
+
if (paramInput === undefined || paramInput === null) {
|
55
|
+
throw new web3_errors_1.AbiError('missing input defined in abi', {
|
56
|
+
param,
|
57
|
+
input,
|
58
|
+
paramName: paramComponent.name,
|
59
|
+
});
|
60
|
+
}
|
61
|
+
result = (0, index_js_1.encodeParamFromAbiParameter)(paramComponent, paramInput);
|
62
|
+
}
|
63
|
+
if (result.dynamic) {
|
64
|
+
dynamic = true;
|
65
|
+
}
|
66
|
+
encoded.push(result);
|
67
|
+
}
|
68
|
+
if (dynamic) {
|
69
|
+
return {
|
70
|
+
dynamic: true,
|
71
|
+
encoded: (0, utils_js_1.encodeDynamicParams)(encoded),
|
72
|
+
};
|
73
|
+
}
|
74
|
+
return {
|
75
|
+
dynamic: false,
|
76
|
+
encoded: (0, web3_utils_1.uint8ArrayConcat)(...encoded.map(e => e.encoded)),
|
77
|
+
};
|
78
|
+
}
|
79
|
+
exports.encodeTuple = encodeTuple;
|
80
|
+
function decodeTuple(param, bytes) {
|
81
|
+
const result = {
|
82
|
+
__length__: 0,
|
83
|
+
};
|
84
|
+
// tracks how much static params consumed bytes
|
85
|
+
let consumed = 0;
|
86
|
+
if (!param.components) {
|
87
|
+
return {
|
88
|
+
result,
|
89
|
+
encoded: bytes,
|
90
|
+
consumed,
|
91
|
+
};
|
92
|
+
}
|
93
|
+
// track how much dynamic params consumed bytes
|
94
|
+
let dynamicConsumed = 0;
|
95
|
+
for (const [index, childParam] of param.components.entries()) {
|
96
|
+
let decodedResult;
|
97
|
+
if ((0, utils_js_2.isDynamic)(childParam)) {
|
98
|
+
// if dynamic, we will have offset encoded
|
99
|
+
const offsetResult = (0, number_js_1.decodeNumber)({ type: 'uint32', name: '' }, bytes.subarray(consumed));
|
100
|
+
// offset counts from start of original byte sequence
|
101
|
+
decodedResult = (0, index_js_1.decodeParamFromAbiParameter)(childParam, bytes.subarray(Number(offsetResult.result)));
|
102
|
+
consumed += offsetResult.consumed;
|
103
|
+
dynamicConsumed += decodedResult.consumed;
|
104
|
+
}
|
105
|
+
else {
|
106
|
+
// static param, just decode
|
107
|
+
decodedResult = (0, index_js_1.decodeParamFromAbiParameter)(childParam, bytes.subarray(consumed));
|
108
|
+
consumed += decodedResult.consumed;
|
109
|
+
}
|
110
|
+
result.__length__ += 1;
|
111
|
+
result[index] = decodedResult.result;
|
112
|
+
if (childParam.name && childParam.name !== '') {
|
113
|
+
result[childParam.name] = decodedResult.result;
|
114
|
+
}
|
115
|
+
}
|
116
|
+
return {
|
117
|
+
encoded: bytes.subarray(consumed + dynamicConsumed),
|
118
|
+
result,
|
119
|
+
consumed: consumed + dynamicConsumed,
|
120
|
+
};
|
121
|
+
}
|
122
|
+
exports.decodeTuple = decodeTuple;
|
123
|
+
//# sourceMappingURL=tuple.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../../../src/coders/base/tuple.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.encodeDynamicParams = void 0;
|
4
|
+
/*
|
5
|
+
This file is part of web3.js.
|
6
|
+
|
7
|
+
web3.js is free software: you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
the Free Software Foundation, either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
web3.js is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public License
|
18
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
const web3_utils_1 = require("web3-utils");
|
21
|
+
const utils_js_1 = require("../utils.js");
|
22
|
+
const number_js_1 = require("./number.js");
|
23
|
+
function encodeDynamicParams(encodedParams) {
|
24
|
+
let staticSize = 0;
|
25
|
+
let dynamicSize = 0;
|
26
|
+
const staticParams = [];
|
27
|
+
const dynamicParams = [];
|
28
|
+
// figure out static size
|
29
|
+
for (const encodedParam of encodedParams) {
|
30
|
+
if (encodedParam.dynamic) {
|
31
|
+
staticSize += utils_js_1.WORD_SIZE;
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
staticSize += encodedParam.encoded.length;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
for (const encodedParam of encodedParams) {
|
38
|
+
if (encodedParam.dynamic) {
|
39
|
+
staticParams.push((0, number_js_1.encodeNumber)({ type: 'uint256', name: '' }, staticSize + dynamicSize));
|
40
|
+
dynamicParams.push(encodedParam);
|
41
|
+
dynamicSize += encodedParam.encoded.length;
|
42
|
+
}
|
43
|
+
else {
|
44
|
+
staticParams.push(encodedParam);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
return (0, web3_utils_1.uint8ArrayConcat)(...staticParams.map(p => p.encoded), ...dynamicParams.map(p => p.encoded));
|
48
|
+
}
|
49
|
+
exports.encodeDynamicParams = encodeDynamicParams;
|
50
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/coders/base/utils.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;EAeE;AACF,2CAA8C;AAE9C,0CAAwC;AACxC,2CAA2C;AAE3C,SAAgB,mBAAmB,CAAC,aAA2C;IAC9E,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,YAAY,GAAoB,EAAE,CAAC;IACzC,MAAM,aAAa,GAAoB,EAAE,CAAC;IAC1C,yBAAyB;IACzB,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;QACzC,IAAI,YAAY,CAAC,OAAO,EAAE;YACzB,UAAU,IAAI,oBAAS,CAAC;SACxB;aAAM;YACN,UAAU,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1C;KACD;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;QACzC,IAAI,YAAY,CAAC,OAAO,EAAE;YACzB,YAAY,CAAC,IAAI,CAChB,IAAA,wBAAY,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,GAAG,WAAW,CAAC,CACrE,CAAC;YACF,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;SAC3C;aAAM;YACN,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAChC;KACD;IACD,OAAO,IAAA,6BAAgB,EACtB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EACnC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACpC,CAAC;AACH,CAAC;AA7BD,kDA6BC"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
This file is part of web3.js.
|
4
|
+
|
5
|
+
web3.js is free software: you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
web3.js is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
16
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
*/
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
19
|
+
exports.decodeParameters = void 0;
|
20
|
+
const web3_validator_1 = require("web3-validator");
|
21
|
+
const tuple_js_1 = require("./base/tuple.js");
|
22
|
+
const utils_js_1 = require("./utils.js");
|
23
|
+
function decodeParameters(abis, bytes, _loose) {
|
24
|
+
const abiParams = (0, utils_js_1.toAbiParams)(abis);
|
25
|
+
const bytesArray = web3_validator_1.utils.hexToUint8Array(bytes);
|
26
|
+
return (0, tuple_js_1.decodeTuple)({ type: 'tuple', name: '', components: abiParams }, bytesArray).result;
|
27
|
+
}
|
28
|
+
exports.decodeParameters = decodeParameters;
|
29
|
+
//# sourceMappingURL=decode.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/coders/decode.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;AAGF,mDAAuC;AACvC,8CAA8C;AAC9C,yCAAyC;AAEzC,SAAgB,gBAAgB,CAC/B,IAA0C,EAC1C,KAAgB,EAChB,MAAe;IAEf,MAAM,SAAS,GAAG,IAAA,sBAAW,EAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,sBAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAEhD,OAAO,IAAA,sBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC;AAC3F,CAAC;AATD,4CASC"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { AbiInput } from 'web3-types';
|
2
|
+
/**
|
3
|
+
* Encodes a parameter based on its type to its ABI representation.
|
4
|
+
* @param abi - An array of {@link AbiInput}. See [Solidity's documentation](https://solidity.readthedocs.io/en/v0.5.3/abi-spec.html#json) for more details.
|
5
|
+
* @param params - The actual parameters to encode.
|
6
|
+
* @returns - The ABI encoded parameters
|
7
|
+
* @example
|
8
|
+
* ```ts
|
9
|
+
* const res = web3.eth.abi.encodeParameters(
|
10
|
+
* ["uint256", "string"],
|
11
|
+
* ["2345675643", "Hello!%"]
|
12
|
+
* );
|
13
|
+
*
|
14
|
+
* console.log(res);
|
15
|
+
* > 0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000
|
16
|
+
* ```
|
17
|
+
*/
|
18
|
+
export declare function encodeParameters(abi: ReadonlyArray<AbiInput>, params: unknown[]): string;
|
19
|
+
/**
|
20
|
+
* Infer a smart contract method parameter type and then encode this parameter.
|
21
|
+
* @param params - The parameters to encode.
|
22
|
+
* @returns - The ABI encoded parameters
|
23
|
+
*
|
24
|
+
* @remarks
|
25
|
+
* This method is useful when you don't know the type of the parameters you want to encode. It will infer the type of the parameters and then encode them.
|
26
|
+
* However, it is not recommended to use this method when you know the type of the parameters you want to encode. In this case, use the {@link encodeParameters} method instead.
|
27
|
+
* The type inference is not perfect and can lead to unexpected results. Especially when you want to encode an array, uint that is not uint256 or bytes....
|
28
|
+
* @example
|
29
|
+
* ```ts
|
30
|
+
* const res = web3.eth.abi.encodeParameters(
|
31
|
+
* ["2345675643", "Hello!%"]
|
32
|
+
* );
|
33
|
+
*
|
34
|
+
* console.log(res);
|
35
|
+
* > 0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000
|
36
|
+
* ```
|
37
|
+
*/
|
38
|
+
export declare function inferTypesAndEncodeParameters(params: unknown[]): string;
|
@@ -0,0 +1,113 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.inferTypesAndEncodeParameters = exports.encodeParameters = void 0;
|
4
|
+
/*
|
5
|
+
This file is part of web3.js.
|
6
|
+
|
7
|
+
web3.js is free software: you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
the Free Software Foundation, either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
web3.js is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public License
|
18
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
const web3_errors_1 = require("web3-errors");
|
21
|
+
const web3_utils_1 = require("web3-utils");
|
22
|
+
const web3_validator_1 = require("web3-validator");
|
23
|
+
const index_js_1 = require("./base/index.js");
|
24
|
+
const utils_js_1 = require("./utils.js");
|
25
|
+
/**
|
26
|
+
* @param params - The params to infer the ABI from
|
27
|
+
* @returns The inferred ABI
|
28
|
+
* @example
|
29
|
+
* ```
|
30
|
+
* inferParamsAbi([1, -1, 'hello', '0x1234', ])
|
31
|
+
* ```
|
32
|
+
* > [{ type: 'int256' }, { type: 'uint256' }, { type: 'string' }, { type: 'bytes' }]
|
33
|
+
* ```
|
34
|
+
*/
|
35
|
+
function inferParamsAbi(params) {
|
36
|
+
const abi = [];
|
37
|
+
params.forEach(param => {
|
38
|
+
if (Array.isArray(param)) {
|
39
|
+
const inferredParams = inferParamsAbi(param);
|
40
|
+
abi.push({
|
41
|
+
type: 'tuple',
|
42
|
+
components: inferredParams,
|
43
|
+
name: '',
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
45
|
+
});
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
49
|
+
abi.push({ type: (0, web3_utils_1.toHex)(param, true) });
|
50
|
+
}
|
51
|
+
});
|
52
|
+
return abi;
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Encodes a parameter based on its type to its ABI representation.
|
56
|
+
* @param abi - An array of {@link AbiInput}. See [Solidity's documentation](https://solidity.readthedocs.io/en/v0.5.3/abi-spec.html#json) for more details.
|
57
|
+
* @param params - The actual parameters to encode.
|
58
|
+
* @returns - The ABI encoded parameters
|
59
|
+
* @example
|
60
|
+
* ```ts
|
61
|
+
* const res = web3.eth.abi.encodeParameters(
|
62
|
+
* ["uint256", "string"],
|
63
|
+
* ["2345675643", "Hello!%"]
|
64
|
+
* );
|
65
|
+
*
|
66
|
+
* console.log(res);
|
67
|
+
* > 0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000
|
68
|
+
* ```
|
69
|
+
*/
|
70
|
+
function encodeParameters(abi, params) {
|
71
|
+
if ((abi === null || abi === void 0 ? void 0 : abi.length) !== params.length) {
|
72
|
+
throw new web3_errors_1.AbiError('Invalid number of values received for given ABI', {
|
73
|
+
expected: abi === null || abi === void 0 ? void 0 : abi.length,
|
74
|
+
received: params.length,
|
75
|
+
});
|
76
|
+
}
|
77
|
+
const abiParams = (0, utils_js_1.toAbiParams)(abi);
|
78
|
+
return web3_validator_1.utils.uint8ArrayToHexString((0, index_js_1.encodeTuple)({ type: 'tuple', name: '', components: abiParams }, params).encoded);
|
79
|
+
}
|
80
|
+
exports.encodeParameters = encodeParameters;
|
81
|
+
/**
|
82
|
+
* Infer a smart contract method parameter type and then encode this parameter.
|
83
|
+
* @param params - The parameters to encode.
|
84
|
+
* @returns - The ABI encoded parameters
|
85
|
+
*
|
86
|
+
* @remarks
|
87
|
+
* This method is useful when you don't know the type of the parameters you want to encode. It will infer the type of the parameters and then encode them.
|
88
|
+
* However, it is not recommended to use this method when you know the type of the parameters you want to encode. In this case, use the {@link encodeParameters} method instead.
|
89
|
+
* The type inference is not perfect and can lead to unexpected results. Especially when you want to encode an array, uint that is not uint256 or bytes....
|
90
|
+
* @example
|
91
|
+
* ```ts
|
92
|
+
* const res = web3.eth.abi.encodeParameters(
|
93
|
+
* ["2345675643", "Hello!%"]
|
94
|
+
* );
|
95
|
+
*
|
96
|
+
* console.log(res);
|
97
|
+
* > 0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000
|
98
|
+
* ```
|
99
|
+
*/
|
100
|
+
function inferTypesAndEncodeParameters(params) {
|
101
|
+
try {
|
102
|
+
const abiParams = inferParamsAbi(params);
|
103
|
+
return web3_validator_1.utils.uint8ArrayToHexString((0, index_js_1.encodeTuple)({ type: 'tuple', name: '', components: abiParams }, params).encoded);
|
104
|
+
}
|
105
|
+
catch (e) {
|
106
|
+
// throws If the inferred params type caused an error
|
107
|
+
throw new web3_errors_1.AbiError('Could not infer types from given params', {
|
108
|
+
params,
|
109
|
+
});
|
110
|
+
}
|
111
|
+
}
|
112
|
+
exports.inferTypesAndEncodeParameters = inferTypesAndEncodeParameters;
|
113
|
+
//# sourceMappingURL=encode.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/coders/encode.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;EAeE;AACF,6CAAuC;AAEvC,2CAAmC;AACnC,mDAAuC;AACvC,8CAA8C;AAC9C,yCAAyC;AAEzC;;;;;;;;;GASG;AACH,SAAS,cAAc,CAAC,MAAiB;IACxC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,cAAc;gBAC1B,IAAI,EAAE,EAAE;gBACR,iEAAiE;aACjD,CAAC,CAAC;SACnB;aAAM;YACN,iEAAiE;YACjE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAA,kBAAK,EAAC,KAAY,EAAE,IAAI,CAAC,EAAkB,CAAC,CAAC;SAC9D;IACF,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,gBAAgB,CAAC,GAA4B,EAAE,MAAiB;IAC/E,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,MAAK,MAAM,CAAC,MAAM,EAAE;QAClC,MAAM,IAAI,sBAAQ,CAAC,iDAAiD,EAAE;YACrE,QAAQ,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,MAAM;SACvB,CAAC,CAAC;KACH;IAED,MAAM,SAAS,GAAG,IAAA,sBAAW,EAAC,GAAG,CAAC,CAAC;IACnC,OAAO,sBAAK,CAAC,qBAAqB,CACjC,IAAA,sBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,OAAO,CAC/E,CAAC;AACH,CAAC;AAZD,4CAYC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,6BAA6B,CAAC,MAAiB;IAC9D,IAAI;QACH,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,sBAAK,CAAC,qBAAqB,CACjC,IAAA,sBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,OAAO,CAC/E,CAAC;KACF;IAAC,OAAO,CAAC,EAAE;QACX,qDAAqD;QACrD,MAAM,IAAI,sBAAQ,CAAC,yCAAyC,EAAE;YAC7D,MAAM;SACN,CAAC,CAAC;KACH;AACF,CAAC;AAZD,sEAYC"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
export declare type EncoderResult = {
|
2
|
+
dynamic: boolean;
|
3
|
+
encoded: Uint8Array;
|
4
|
+
};
|
5
|
+
export declare type DecoderResult<T = unknown> = {
|
6
|
+
result: T;
|
7
|
+
encoded: Uint8Array;
|
8
|
+
consumed: number;
|
9
|
+
};
|
10
|
+
export declare type NumberType = {
|
11
|
+
signed: boolean;
|
12
|
+
byteLength: number;
|
13
|
+
};
|
14
|
+
export declare type BytesType = {
|
15
|
+
size?: number;
|
16
|
+
};
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
This file is part of web3.js.
|
4
|
+
|
5
|
+
web3.js is free software: you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
web3.js is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
16
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
*/
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
19
|
+
//# sourceMappingURL=types.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/coders/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { AbiParameter as ExternalAbiParameter } from 'abitype';
|
2
|
+
import { AbiInput, AbiParameter } from 'web3-types';
|
3
|
+
export declare const WORD_SIZE = 32;
|
4
|
+
export declare function alloc(size?: number): Uint8Array;
|
5
|
+
/**
|
6
|
+
* Where possible returns a Uint8Array of the requested size that references
|
7
|
+
* uninitialized memory. Only use if you are certain you will immediately
|
8
|
+
* overwrite every value in the returned `Uint8Array`.
|
9
|
+
*/
|
10
|
+
export declare function allocUnsafe(size?: number): Uint8Array;
|
11
|
+
export declare function convertExternalAbiParameter(abiParam: ExternalAbiParameter): AbiParameter;
|
12
|
+
export declare function isAbiParameter(param: unknown): param is AbiParameter;
|
13
|
+
export declare function toAbiParams(abi: ReadonlyArray<AbiInput>): ReadonlyArray<AbiParameter>;
|
14
|
+
export declare function extractArrayType(param: AbiParameter): {
|
15
|
+
size: number;
|
16
|
+
param: AbiParameter;
|
17
|
+
};
|
18
|
+
/**
|
19
|
+
* Param is dynamic if it's dynamic base type or if some of his children (components, array items)
|
20
|
+
* is of dynamic type
|
21
|
+
* @param param
|
22
|
+
*/
|
23
|
+
export declare function isDynamic(param: AbiParameter): boolean;
|
@@ -0,0 +1,115 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
This file is part of web3.js.
|
4
|
+
|
5
|
+
web3.js is free software: you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
web3.js is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
16
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
*/
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
19
|
+
exports.isDynamic = exports.extractArrayType = exports.toAbiParams = exports.isAbiParameter = exports.convertExternalAbiParameter = exports.allocUnsafe = exports.alloc = exports.WORD_SIZE = void 0;
|
20
|
+
const abitype_1 = require("abitype");
|
21
|
+
const web3_errors_1 = require("web3-errors");
|
22
|
+
const web3_utils_1 = require("web3-utils");
|
23
|
+
const utils_js_1 = require("../utils.js");
|
24
|
+
exports.WORD_SIZE = 32;
|
25
|
+
function alloc(size = 0) {
|
26
|
+
var _a;
|
27
|
+
if (((_a = globalThis.Buffer) === null || _a === void 0 ? void 0 : _a.alloc) !== undefined) {
|
28
|
+
const buf = globalThis.Buffer.alloc(size);
|
29
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
30
|
+
}
|
31
|
+
return new Uint8Array(size);
|
32
|
+
}
|
33
|
+
exports.alloc = alloc;
|
34
|
+
/**
|
35
|
+
* Where possible returns a Uint8Array of the requested size that references
|
36
|
+
* uninitialized memory. Only use if you are certain you will immediately
|
37
|
+
* overwrite every value in the returned `Uint8Array`.
|
38
|
+
*/
|
39
|
+
function allocUnsafe(size = 0) {
|
40
|
+
var _a;
|
41
|
+
if (((_a = globalThis.Buffer) === null || _a === void 0 ? void 0 : _a.allocUnsafe) !== undefined) {
|
42
|
+
const buf = globalThis.Buffer.allocUnsafe(size);
|
43
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
44
|
+
}
|
45
|
+
return new Uint8Array(size);
|
46
|
+
}
|
47
|
+
exports.allocUnsafe = allocUnsafe;
|
48
|
+
function convertExternalAbiParameter(abiParam) {
|
49
|
+
var _a, _b;
|
50
|
+
return Object.assign(Object.assign({}, abiParam), { name: (_a = abiParam.name) !== null && _a !== void 0 ? _a : '', components: (_b = abiParam.components) === null || _b === void 0 ? void 0 : _b.map(c => convertExternalAbiParameter(c)) });
|
51
|
+
}
|
52
|
+
exports.convertExternalAbiParameter = convertExternalAbiParameter;
|
53
|
+
function isAbiParameter(param) {
|
54
|
+
return (!(0, web3_utils_1.isNullish)(param) &&
|
55
|
+
typeof param === 'object' &&
|
56
|
+
!(0, web3_utils_1.isNullish)(param.type) &&
|
57
|
+
typeof param.type === 'string');
|
58
|
+
}
|
59
|
+
exports.isAbiParameter = isAbiParameter;
|
60
|
+
function toAbiParams(abi) {
|
61
|
+
return abi.map(input => {
|
62
|
+
var _a;
|
63
|
+
if (isAbiParameter(input)) {
|
64
|
+
return input;
|
65
|
+
}
|
66
|
+
if (typeof input === 'string') {
|
67
|
+
return convertExternalAbiParameter((0, abitype_1.parseAbiParameter)(input.replace(/tuple/, '')));
|
68
|
+
}
|
69
|
+
if ((0, utils_js_1.isSimplifiedStructFormat)(input)) {
|
70
|
+
const structName = Object.keys(input)[0];
|
71
|
+
const structInfo = (0, utils_js_1.mapStructNameAndType)(structName);
|
72
|
+
structInfo.name = (_a = structInfo.name) !== null && _a !== void 0 ? _a : '';
|
73
|
+
return Object.assign(Object.assign({}, structInfo), { components: (0, utils_js_1.mapStructToCoderFormat)(input[structName]) });
|
74
|
+
}
|
75
|
+
throw new web3_errors_1.AbiError('Invalid abi');
|
76
|
+
});
|
77
|
+
}
|
78
|
+
exports.toAbiParams = toAbiParams;
|
79
|
+
function extractArrayType(param) {
|
80
|
+
const arrayParenthesisStart = param.type.lastIndexOf('[');
|
81
|
+
const arrayParamType = param.type.substring(0, arrayParenthesisStart);
|
82
|
+
const sizeString = param.type.substring(arrayParenthesisStart);
|
83
|
+
let size = -1;
|
84
|
+
if (sizeString !== '[]') {
|
85
|
+
size = Number(sizeString.slice(1, -1));
|
86
|
+
// eslint-disable-next-line no-restricted-globals
|
87
|
+
if (isNaN(size)) {
|
88
|
+
throw new web3_errors_1.AbiError('Invalid fixed array size', { size: sizeString });
|
89
|
+
}
|
90
|
+
}
|
91
|
+
return {
|
92
|
+
param: { type: arrayParamType, name: '', components: param.components },
|
93
|
+
size,
|
94
|
+
};
|
95
|
+
}
|
96
|
+
exports.extractArrayType = extractArrayType;
|
97
|
+
/**
|
98
|
+
* Param is dynamic if it's dynamic base type or if some of his children (components, array items)
|
99
|
+
* is of dynamic type
|
100
|
+
* @param param
|
101
|
+
*/
|
102
|
+
function isDynamic(param) {
|
103
|
+
var _a, _b;
|
104
|
+
if (param.type === 'string' || param.type === 'bytes' || param.type.endsWith('[]'))
|
105
|
+
return true;
|
106
|
+
if (param.type === 'tuple') {
|
107
|
+
return (_b = (_a = param.components) === null || _a === void 0 ? void 0 : _a.some(isDynamic)) !== null && _b !== void 0 ? _b : false;
|
108
|
+
}
|
109
|
+
if (param.type.endsWith(']')) {
|
110
|
+
return isDynamic(extractArrayType(param).param);
|
111
|
+
}
|
112
|
+
return false;
|
113
|
+
}
|
114
|
+
exports.isDynamic = isDynamic;
|
115
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/coders/utils.ts"],"names":[],"mappings":"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"}
|