web3ethabii 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/pa8cztln.cjs +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
@@ -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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"}
|