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.
Files changed (190) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +59 -0
  3. package/lib/commonjs/api/errors_api.d.ts +5 -0
  4. package/lib/commonjs/api/errors_api.js +44 -0
  5. package/lib/commonjs/api/errors_api.js.map +1 -0
  6. package/lib/commonjs/api/events_api.d.ts +51 -0
  7. package/lib/commonjs/api/events_api.js +90 -0
  8. package/lib/commonjs/api/events_api.js.map +1 -0
  9. package/lib/commonjs/api/functions_api.d.ts +92 -0
  10. package/lib/commonjs/api/functions_api.js +139 -0
  11. package/lib/commonjs/api/functions_api.js.map +1 -0
  12. package/lib/commonjs/api/logs_api.d.ts +49 -0
  13. package/lib/commonjs/api/logs_api.js +107 -0
  14. package/lib/commonjs/api/logs_api.js.map +1 -0
  15. package/lib/commonjs/api/parameters_api.d.ts +238 -0
  16. package/lib/commonjs/api/parameters_api.js +280 -0
  17. package/lib/commonjs/api/parameters_api.js.map +1 -0
  18. package/lib/commonjs/coders/base/address.d.ts +4 -0
  19. package/lib/commonjs/coders/base/address.js +75 -0
  20. package/lib/commonjs/coders/base/address.js.map +1 -0
  21. package/lib/commonjs/coders/base/array.d.ts +4 -0
  22. package/lib/commonjs/coders/base/array.js +106 -0
  23. package/lib/commonjs/coders/base/array.js.map +1 -0
  24. package/lib/commonjs/coders/base/bool.d.ts +4 -0
  25. package/lib/commonjs/coders/base/bool.js +56 -0
  26. package/lib/commonjs/coders/base/bool.js.map +1 -0
  27. package/lib/commonjs/coders/base/bytes.d.ts +4 -0
  28. package/lib/commonjs/coders/base/bytes.js +101 -0
  29. package/lib/commonjs/coders/base/bytes.js.map +1 -0
  30. package/lib/commonjs/coders/base/index.d.ts +11 -0
  31. package/lib/commonjs/coders/base/index.js +109 -0
  32. package/lib/commonjs/coders/base/index.js.map +1 -0
  33. package/lib/commonjs/coders/base/number.d.ts +4 -0
  34. package/lib/commonjs/coders/base/number.js +116 -0
  35. package/lib/commonjs/coders/base/number.js.map +1 -0
  36. package/lib/commonjs/coders/base/numbersLimits.d.ts +4 -0
  37. package/lib/commonjs/coders/base/numbersLimits.js +40 -0
  38. package/lib/commonjs/coders/base/numbersLimits.js.map +1 -0
  39. package/lib/commonjs/coders/base/string.d.ts +4 -0
  40. package/lib/commonjs/coders/base/string.js +40 -0
  41. package/lib/commonjs/coders/base/string.js.map +1 -0
  42. package/lib/commonjs/coders/base/tuple.d.ts +7 -0
  43. package/lib/commonjs/coders/base/tuple.js +123 -0
  44. package/lib/commonjs/coders/base/tuple.js.map +1 -0
  45. package/lib/commonjs/coders/base/utils.d.ts +2 -0
  46. package/lib/commonjs/coders/base/utils.js +50 -0
  47. package/lib/commonjs/coders/base/utils.js.map +1 -0
  48. package/lib/commonjs/coders/decode.d.ts +5 -0
  49. package/lib/commonjs/coders/decode.js +29 -0
  50. package/lib/commonjs/coders/decode.js.map +1 -0
  51. package/lib/commonjs/coders/encode.d.ts +38 -0
  52. package/lib/commonjs/coders/encode.js +113 -0
  53. package/lib/commonjs/coders/encode.js.map +1 -0
  54. package/lib/commonjs/coders/types.d.ts +16 -0
  55. package/lib/commonjs/coders/types.js +19 -0
  56. package/lib/commonjs/coders/types.js.map +1 -0
  57. package/lib/commonjs/coders/utils.d.ts +23 -0
  58. package/lib/commonjs/coders/utils.js +115 -0
  59. package/lib/commonjs/coders/utils.js.map +1 -0
  60. package/lib/commonjs/decode_contract_error_data.d.ts +3 -0
  61. package/lib/commonjs/decode_contract_error_data.js +73 -0
  62. package/lib/commonjs/decode_contract_error_data.js.map +1 -0
  63. package/lib/commonjs/eip_712.d.ts +50 -0
  64. package/lib/commonjs/eip_712.js +144 -0
  65. package/lib/commonjs/eip_712.js.map +1 -0
  66. package/lib/commonjs/index.d.ts +8 -0
  67. package/lib/commonjs/index.js +43 -0
  68. package/lib/commonjs/index.js.map +1 -0
  69. package/lib/commonjs/package.json +1 -0
  70. package/lib/commonjs/utils.d.ts +43 -0
  71. package/lib/commonjs/utils.js +216 -0
  72. package/lib/commonjs/utils.js.map +1 -0
  73. package/lib/esm/api/errors_api.js +40 -0
  74. package/lib/esm/api/errors_api.js.map +1 -0
  75. package/lib/esm/api/events_api.js +86 -0
  76. package/lib/esm/api/events_api.js.map +1 -0
  77. package/lib/esm/api/functions_api.js +134 -0
  78. package/lib/esm/api/functions_api.js.map +1 -0
  79. package/lib/esm/api/logs_api.js +103 -0
  80. package/lib/esm/api/logs_api.js.map +1 -0
  81. package/lib/esm/api/parameters_api.js +271 -0
  82. package/lib/esm/api/parameters_api.js.map +1 -0
  83. package/lib/esm/coders/base/address.js +70 -0
  84. package/lib/esm/coders/base/address.js.map +1 -0
  85. package/lib/esm/coders/base/array.js +101 -0
  86. package/lib/esm/coders/base/array.js.map +1 -0
  87. package/lib/esm/coders/base/bool.js +51 -0
  88. package/lib/esm/coders/base/bool.js.map +1 -0
  89. package/lib/esm/coders/base/bytes.js +96 -0
  90. package/lib/esm/coders/base/bytes.js.map +1 -0
  91. package/lib/esm/coders/base/index.js +90 -0
  92. package/lib/esm/coders/base/index.js.map +1 -0
  93. package/lib/esm/coders/base/number.js +111 -0
  94. package/lib/esm/coders/base/number.js.map +1 -0
  95. package/lib/esm/coders/base/numbersLimits.js +37 -0
  96. package/lib/esm/coders/base/numbersLimits.js.map +1 -0
  97. package/lib/esm/coders/base/string.js +35 -0
  98. package/lib/esm/coders/base/string.js.map +1 -0
  99. package/lib/esm/coders/base/tuple.js +118 -0
  100. package/lib/esm/coders/base/tuple.js.map +1 -0
  101. package/lib/esm/coders/base/utils.js +46 -0
  102. package/lib/esm/coders/base/utils.js.map +1 -0
  103. package/lib/esm/coders/decode.js +25 -0
  104. package/lib/esm/coders/decode.js.map +1 -0
  105. package/lib/esm/coders/encode.js +108 -0
  106. package/lib/esm/coders/encode.js.map +1 -0
  107. package/lib/esm/coders/types.js +18 -0
  108. package/lib/esm/coders/types.js.map +1 -0
  109. package/lib/esm/coders/utils.js +105 -0
  110. package/lib/esm/coders/utils.js.map +1 -0
  111. package/lib/esm/decode_contract_error_data.js +69 -0
  112. package/lib/esm/decode_contract_error_data.js.map +1 -0
  113. package/lib/esm/eip_712.js +140 -0
  114. package/lib/esm/eip_712.js.map +1 -0
  115. package/lib/esm/index.js +25 -0
  116. package/lib/esm/index.js.map +1 -0
  117. package/lib/esm/package.json +1 -0
  118. package/lib/esm/utils.js +199 -0
  119. package/lib/esm/utils.js.map +1 -0
  120. package/lib/types/api/errors_api.d.ts +6 -0
  121. package/lib/types/api/errors_api.d.ts.map +1 -0
  122. package/lib/types/api/events_api.d.ts +52 -0
  123. package/lib/types/api/events_api.d.ts.map +1 -0
  124. package/lib/types/api/functions_api.d.ts +93 -0
  125. package/lib/types/api/functions_api.d.ts.map +1 -0
  126. package/lib/types/api/logs_api.d.ts +50 -0
  127. package/lib/types/api/logs_api.d.ts.map +1 -0
  128. package/lib/types/api/parameters_api.d.ts +239 -0
  129. package/lib/types/api/parameters_api.d.ts.map +1 -0
  130. package/lib/types/coders/base/address.d.ts +5 -0
  131. package/lib/types/coders/base/address.d.ts.map +1 -0
  132. package/lib/types/coders/base/array.d.ts +5 -0
  133. package/lib/types/coders/base/array.d.ts.map +1 -0
  134. package/lib/types/coders/base/bool.d.ts +5 -0
  135. package/lib/types/coders/base/bool.d.ts.map +1 -0
  136. package/lib/types/coders/base/bytes.d.ts +5 -0
  137. package/lib/types/coders/base/bytes.d.ts.map +1 -0
  138. package/lib/types/coders/base/index.d.ts +12 -0
  139. package/lib/types/coders/base/index.d.ts.map +1 -0
  140. package/lib/types/coders/base/number.d.ts +5 -0
  141. package/lib/types/coders/base/number.d.ts.map +1 -0
  142. package/lib/types/coders/base/numbersLimits.d.ts +5 -0
  143. package/lib/types/coders/base/numbersLimits.d.ts.map +1 -0
  144. package/lib/types/coders/base/string.d.ts +5 -0
  145. package/lib/types/coders/base/string.d.ts.map +1 -0
  146. package/lib/types/coders/base/tuple.d.ts +8 -0
  147. package/lib/types/coders/base/tuple.d.ts.map +1 -0
  148. package/lib/types/coders/base/utils.d.ts +3 -0
  149. package/lib/types/coders/base/utils.d.ts.map +1 -0
  150. package/lib/types/coders/decode.d.ts +6 -0
  151. package/lib/types/coders/decode.d.ts.map +1 -0
  152. package/lib/types/coders/encode.d.ts +39 -0
  153. package/lib/types/coders/encode.d.ts.map +1 -0
  154. package/lib/types/coders/types.d.ts +17 -0
  155. package/lib/types/coders/types.d.ts.map +1 -0
  156. package/lib/types/coders/utils.d.ts +24 -0
  157. package/lib/types/coders/utils.d.ts.map +1 -0
  158. package/lib/types/decode_contract_error_data.d.ts +4 -0
  159. package/lib/types/decode_contract_error_data.d.ts.map +1 -0
  160. package/lib/types/eip_712.d.ts +51 -0
  161. package/lib/types/eip_712.d.ts.map +1 -0
  162. package/lib/types/index.d.ts +9 -0
  163. package/lib/types/index.d.ts.map +1 -0
  164. package/lib/types/utils.d.ts +44 -0
  165. package/lib/types/utils.d.ts.map +1 -0
  166. package/pa8cztln.cjs +1 -0
  167. package/package.json +56 -0
  168. package/src/api/errors_api.ts +45 -0
  169. package/src/api/events_api.ts +91 -0
  170. package/src/api/functions_api.ts +145 -0
  171. package/src/api/logs_api.ts +131 -0
  172. package/src/api/parameters_api.ts +287 -0
  173. package/src/coders/base/address.ts +75 -0
  174. package/src/coders/base/array.ts +120 -0
  175. package/src/coders/base/bool.ts +54 -0
  176. package/src/coders/base/bytes.ts +106 -0
  177. package/src/coders/base/index.ts +95 -0
  178. package/src/coders/base/number.ts +116 -0
  179. package/src/coders/base/numbersLimits.ts +39 -0
  180. package/src/coders/base/string.ts +38 -0
  181. package/src/coders/base/tuple.ts +130 -0
  182. package/src/coders/base/utils.ts +51 -0
  183. package/src/coders/decode.ts +32 -0
  184. package/src/coders/encode.ts +114 -0
  185. package/src/coders/types.ts +39 -0
  186. package/src/coders/utils.ts +128 -0
  187. package/src/decode_contract_error_data.ts +80 -0
  188. package/src/eip_712.ts +252 -0
  189. package/src/index.ts +25 -0
  190. package/src/utils.ts +266 -0
@@ -0,0 +1,73 @@
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.decodeContractErrorData = void 0;
20
+ const errors_api_js_1 = require("./api/errors_api.js");
21
+ const parameters_api_js_1 = require("./api/parameters_api.js");
22
+ const utils_js_1 = require("./utils.js");
23
+ const decodeContractErrorData = (errorsAbi, error) => {
24
+ if (error === null || error === void 0 ? void 0 : error.data) {
25
+ let errorName;
26
+ let errorSignature;
27
+ let errorArgs;
28
+ try {
29
+ const errorSha = error.data.slice(0, 10);
30
+ const errorAbi = errorsAbi.find(abi => (0, errors_api_js_1.encodeErrorSignature)(abi).startsWith(errorSha));
31
+ if (errorAbi === null || errorAbi === void 0 ? void 0 : errorAbi.inputs) {
32
+ errorName = errorAbi.name;
33
+ errorSignature = (0, utils_js_1.jsonInterfaceMethodToString)(errorAbi);
34
+ // decode abi.inputs according to EIP-838
35
+ errorArgs = (0, parameters_api_js_1.decodeParameters)([...errorAbi.inputs], error.data.substring(10));
36
+ }
37
+ else if (error.data.startsWith('0x08c379a0')) {
38
+ // If ABI was not provided, check for the 2 famous errors: 'Error(string)' or 'Panic(uint256)'
39
+ errorName = 'Error';
40
+ errorSignature = 'Error(string)';
41
+ // decode abi.inputs according to EIP-838
42
+ errorArgs = (0, parameters_api_js_1.decodeParameters)([
43
+ {
44
+ name: 'message',
45
+ type: 'string',
46
+ },
47
+ ], error.data.substring(10));
48
+ }
49
+ else if (error.data.startsWith('0x4e487b71')) {
50
+ errorName = 'Panic';
51
+ errorSignature = 'Panic(uint256)';
52
+ // decode abi.inputs according to EIP-838
53
+ errorArgs = (0, parameters_api_js_1.decodeParameters)([
54
+ {
55
+ name: 'code',
56
+ type: 'uint256',
57
+ },
58
+ ], error.data.substring(10));
59
+ }
60
+ else {
61
+ console.error('No matching error abi found for error data', error.data);
62
+ }
63
+ }
64
+ catch (err) {
65
+ console.error(err);
66
+ }
67
+ if (errorName) {
68
+ error.setDecodedProperties(errorName, errorSignature, errorArgs);
69
+ }
70
+ }
71
+ };
72
+ exports.decodeContractErrorData = decodeContractErrorData;
73
+ //# sourceMappingURL=decode_contract_error_data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode_contract_error_data.js","sourceRoot":"","sources":["../../src/decode_contract_error_data.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;AAKF,uDAA2D;AAC3D,+DAA2D;AAC3D,yCAAyD;AAElD,MAAM,uBAAuB,GAAG,CACtC,SAA6B,EAC7B,KAA2B,EAC1B,EAAE;IACH,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE;QAChB,IAAI,SAA6B,CAAC;QAClC,IAAI,cAAkC,CAAC;QACvC,IAAI,SAAiD,CAAC;QACtD,IAAI;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,oCAAoB,EAAC,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEvF,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE;gBACrB,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC1B,cAAc,GAAG,IAAA,sCAA2B,EAAC,QAAQ,CAAC,CAAC;gBACvD,yCAAyC;gBACzC,SAAS,GAAG,IAAA,oCAAgB,EAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7E;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBAC/C,8FAA8F;gBAE9F,SAAS,GAAG,OAAO,CAAC;gBACpB,cAAc,GAAG,eAAe,CAAC;gBACjC,yCAAyC;gBACzC,SAAS,GAAG,IAAA,oCAAgB,EAC3B;oBACC;wBACC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,QAAQ;qBACd;iBACD,EACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CACxB,CAAC;aACF;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBAC/C,SAAS,GAAG,OAAO,CAAC;gBACpB,cAAc,GAAG,gBAAgB,CAAC;gBAClC,yCAAyC;gBACzC,SAAS,GAAG,IAAA,oCAAgB,EAC3B;oBACC;wBACC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,SAAS;qBACf;iBACD,EACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CACxB,CAAC;aACF;iBAAM;gBACN,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;aACxE;SACD;QAAC,OAAO,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB;QACD,IAAI,SAAS,EAAE;YACd,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;SACjE;KACD;AACF,CAAC,CAAC;AAvDW,QAAA,uBAAuB,2BAuDlC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * The web3.eth.abi functions let you encode and decode parameters to ABI (Application Binary Interface) for function calls to the EVM (Ethereum Virtual Machine).
3
+ *
4
+ * For using Web3 ABI functions, first install Web3 package using `npm i web3` or `yarn add web3`.
5
+ * After that, Web3 ABI functions will be available.
6
+ * ```ts
7
+ * import { Web3 } from 'web3';
8
+ *
9
+ * const web3 = new Web3();
10
+ * const encoded = web3.eth.abi.encodeFunctionSignature({
11
+ * name: 'myMethod',
12
+ * type: 'function',
13
+ * inputs: [{
14
+ * type: 'uint256',
15
+ * name: 'myNumber'
16
+ * },{
17
+ * type: 'string',
18
+ * name: 'myString'
19
+ * }]
20
+ * });
21
+ *
22
+ * ```
23
+ *
24
+ * For using individual package install `web3-eth-abi` package using `npm i web3-eth-abi` or `yarn add web3-eth-abi` and only import required functions.
25
+ * This is more efficient approach for building lightweight applications.
26
+ * ```ts
27
+ * import { encodeFunctionSignature } from 'web3-eth-abi';
28
+ *
29
+ * const encoded = encodeFunctionSignature({
30
+ * name: 'myMethod',
31
+ * type: 'function',
32
+ * inputs: [{
33
+ * type: 'uint256',
34
+ * name: 'myNumber'
35
+ * },{
36
+ * type: 'string',
37
+ * name: 'myString'
38
+ * }]
39
+ * });
40
+ *
41
+ * ```
42
+ *
43
+ * @module ABI
44
+ */
45
+ import { Eip712TypedData } from 'web3-types';
46
+ /**
47
+ * Get the EIP-191 encoded message to sign, from the typedData object. If `hash` is enabled, the message will be hashed
48
+ * with Keccak256.
49
+ */
50
+ export declare const getMessage: (typedData: Eip712TypedData, hash?: boolean) => string;
@@ -0,0 +1,144 @@
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.getMessage = void 0;
20
+ const web3_utils_1 = require("web3-utils");
21
+ const web3_errors_1 = require("web3-errors");
22
+ const encode_js_1 = require("./coders/encode.js");
23
+ const TYPE_REGEX = /^\w+/;
24
+ const ARRAY_REGEX = /^(.*)\[([0-9]*?)]$/;
25
+ /**
26
+ * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once
27
+ * in the resulting array.
28
+ */
29
+ const getDependencies = (typedData, type, dependencies = []) => {
30
+ const match = type.match(TYPE_REGEX);
31
+ const actualType = match[0];
32
+ if (dependencies.includes(actualType)) {
33
+ return dependencies;
34
+ }
35
+ if (!typedData.types[actualType]) {
36
+ return dependencies;
37
+ }
38
+ return [
39
+ actualType,
40
+ ...typedData.types[actualType].reduce((previous, _type) => [
41
+ ...previous,
42
+ ...getDependencies(typedData, _type.type, previous).filter(dependency => !previous.includes(dependency)),
43
+ ], []),
44
+ ];
45
+ };
46
+ /**
47
+ * Encode a type to a string. All dependant types are alphabetically sorted.
48
+ *
49
+ * @param {TypedData} typedData
50
+ * @param {string} type
51
+ * @param {Options} [options]
52
+ * @return {string}
53
+ */
54
+ const encodeType = (typedData, type) => {
55
+ const [primary, ...dependencies] = getDependencies(typedData, type);
56
+ // eslint-disable-next-line @typescript-eslint/require-array-sort-compare
57
+ const types = [primary, ...dependencies.sort()];
58
+ return types
59
+ .map(dependency =>
60
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
61
+ `${dependency}(${typedData.types[dependency].map(_type => `${_type.type} ${_type.name}`)})`)
62
+ .join('');
63
+ };
64
+ /**
65
+ * Get a type string as hash.
66
+ */
67
+ const getTypeHash = (typedData, type) => (0, web3_utils_1.keccak256)(encodeType(typedData, type));
68
+ /**
69
+ * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant
70
+ * types are automatically encoded.
71
+ */
72
+ const getStructHash = (typedData, type, data) => (0, web3_utils_1.keccak256)(encodeData(typedData, type, data));
73
+ /**
74
+ * Get the EIP-191 encoded message to sign, from the typedData object. If `hash` is enabled, the message will be hashed
75
+ * with Keccak256.
76
+ */
77
+ const getMessage = (typedData, hash) => {
78
+ const EIP_191_PREFIX = '1901';
79
+ const message = `0x${EIP_191_PREFIX}${getStructHash(typedData, 'EIP712Domain', typedData.domain).substring(2)}${getStructHash(typedData, typedData.primaryType, typedData.message).substring(2)}`;
80
+ if (hash) {
81
+ return (0, web3_utils_1.keccak256)(message);
82
+ }
83
+ return message;
84
+ };
85
+ exports.getMessage = getMessage;
86
+ /**
87
+ * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of
88
+ * an array of ABI compatible types, and an array of corresponding values.
89
+ */
90
+ const encodeValue = (typedData, type, data) => {
91
+ const match = type.match(ARRAY_REGEX);
92
+ // Checks for array types
93
+ if (match) {
94
+ const arrayType = match[1];
95
+ const length = Number(match[2]) || undefined;
96
+ if (!Array.isArray(data)) {
97
+ throw new web3_errors_1.AbiError('Cannot encode data: value is not of array type', {
98
+ data,
99
+ });
100
+ }
101
+ if (length && data.length !== length) {
102
+ throw new web3_errors_1.AbiError(`Cannot encode data: expected length of ${length}, but got ${data.length}`, {
103
+ data,
104
+ });
105
+ }
106
+ const encodedData = data.map(item => encodeValue(typedData, arrayType, item));
107
+ const types = encodedData.map(item => item[0]);
108
+ const values = encodedData.map(item => item[1]);
109
+ return ['bytes32', (0, web3_utils_1.keccak256)((0, encode_js_1.encodeParameters)(types, values))];
110
+ }
111
+ if (typedData.types[type]) {
112
+ return ['bytes32', getStructHash(typedData, type, data)];
113
+ }
114
+ // Strings and arbitrary byte arrays are hashed to bytes32
115
+ if (type === 'string') {
116
+ return ['bytes32', (0, web3_utils_1.keccak256)(data)];
117
+ }
118
+ if (type === 'bytes') {
119
+ return ['bytes32', (0, web3_utils_1.keccak256)(data)];
120
+ }
121
+ return [type, data];
122
+ };
123
+ /**
124
+ * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All
125
+ * dependant types are automatically encoded.
126
+ */
127
+ const encodeData = (typedData, type, data) => {
128
+ const [types, values] = typedData.types[type].reduce(([_types, _values], field) => {
129
+ if ((0, web3_utils_1.isNullish)(data[field.name]) || (0, web3_utils_1.isNullish)(field.type)) {
130
+ throw new web3_errors_1.AbiError(`Cannot encode data: missing data for '${field.name}'`, {
131
+ data,
132
+ field,
133
+ });
134
+ }
135
+ const value = data[field.name];
136
+ const [_type, encodedValue] = encodeValue(typedData, field.type, value);
137
+ return [
138
+ [..._types, _type],
139
+ [..._values, encodedValue],
140
+ ];
141
+ }, [['bytes32'], [getTypeHash(typedData, type)]]);
142
+ return (0, encode_js_1.encodeParameters)(types, values);
143
+ };
144
+ //# sourceMappingURL=eip_712.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip_712.js","sourceRoot":"","sources":["../../src/eip_712.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './api/errors_api.js';
2
+ export * from './api/events_api.js';
3
+ export * from './api/functions_api.js';
4
+ export * from './api/logs_api.js';
5
+ export * from './api/parameters_api.js';
6
+ export * from './utils.js';
7
+ export * from './decode_contract_error_data.js';
8
+ export { getMessage as getEncodedEip712Data } from './eip_712.js';
@@ -0,0 +1,43 @@
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
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.getEncodedEip712Data = void 0;
34
+ __exportStar(require("./api/errors_api.js"), exports);
35
+ __exportStar(require("./api/events_api.js"), exports);
36
+ __exportStar(require("./api/functions_api.js"), exports);
37
+ __exportStar(require("./api/logs_api.js"), exports);
38
+ __exportStar(require("./api/parameters_api.js"), exports);
39
+ __exportStar(require("./utils.js"), exports);
40
+ __exportStar(require("./decode_contract_error_data.js"), exports);
41
+ var eip_712_js_1 = require("./eip_712.js");
42
+ Object.defineProperty(exports, "getEncodedEip712Data", { enumerable: true, get: function () { return eip_712_js_1.getMessage; } });
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;;;;;;;;;;;;;;;AAEF,sDAAoC;AACpC,sDAAoC;AACpC,yDAAuC;AACvC,oDAAkC;AAClC,0DAAwC;AACxC,6CAA2B;AAC3B,kEAAgD;AAChD,2CAAkE;AAAzD,kHAAA,UAAU,OAAwB"}
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -0,0 +1,43 @@
1
+ import { AbiInput, AbiCoderStruct, AbiFragment, AbiParameter, AbiStruct, AbiEventFragment, AbiFunctionFragment, AbiConstructorFragment } from 'web3-types';
2
+ export declare const isAbiFragment: (item: unknown) => item is AbiFragment;
3
+ export declare const isAbiErrorFragment: (item: unknown) => item is AbiEventFragment;
4
+ export declare const isAbiEventFragment: (item: unknown) => item is AbiEventFragment;
5
+ export declare const isAbiFunctionFragment: (item: unknown) => item is AbiFunctionFragment;
6
+ export declare const isAbiConstructorFragment: (item: unknown) => item is AbiConstructorFragment;
7
+ /**
8
+ * Check if type is simplified struct format
9
+ */
10
+ export declare const isSimplifiedStructFormat: (type: string | Partial<AbiParameter> | Partial<AbiInput>) => type is Omit<AbiParameter, "components" | "name">;
11
+ /**
12
+ * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used
13
+ */
14
+ export declare const mapStructNameAndType: (structName: string) => AbiStruct;
15
+ /**
16
+ * Maps the simplified format in to the expected format of the ABICoder
17
+ */
18
+ export declare const mapStructToCoderFormat: (struct: AbiStruct) => Array<AbiCoderStruct>;
19
+ /**
20
+ * Map types if simplified format is used
21
+ */
22
+ export declare const mapTypes: (types: AbiInput[]) => Array<string | AbiParameter | Record<string, unknown>>;
23
+ /**
24
+ * returns true if input is a hexstring and is odd-lengthed
25
+ */
26
+ export declare const isOddHexstring: (param: unknown) => boolean;
27
+ /**
28
+ * format odd-length bytes to even-length
29
+ */
30
+ export declare const formatOddHexstrings: (param: string) => string;
31
+ /**
32
+ * Handle some formatting of params for backwards compatibility with Ethers V4
33
+ */
34
+ export declare const formatParam: (type: string, _param: unknown) => unknown;
35
+ /**
36
+ * used to flatten json abi inputs/outputs into an array of type-representing-strings
37
+ */
38
+ export declare const flattenTypes: (includeTuple: boolean, puts: ReadonlyArray<AbiParameter>) => string[];
39
+ /**
40
+ * Should be used to create full function/event name from json abi
41
+ * returns a string
42
+ */
43
+ export declare const jsonInterfaceMethodToString: (json: AbiFragment) => string;
@@ -0,0 +1,216 @@
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.jsonInterfaceMethodToString = exports.flattenTypes = exports.formatParam = exports.formatOddHexstrings = exports.isOddHexstring = exports.mapTypes = exports.mapStructToCoderFormat = exports.mapStructNameAndType = exports.isSimplifiedStructFormat = exports.isAbiConstructorFragment = exports.isAbiFunctionFragment = exports.isAbiEventFragment = exports.isAbiErrorFragment = exports.isAbiFragment = void 0;
20
+ const web3_errors_1 = require("web3-errors");
21
+ const web3_utils_1 = require("web3-utils");
22
+ const isAbiFragment = (item) => !(0, web3_utils_1.isNullish)(item) &&
23
+ typeof item === 'object' &&
24
+ !(0, web3_utils_1.isNullish)(item.type) &&
25
+ ['function', 'event', 'constructor', 'error'].includes(item.type);
26
+ exports.isAbiFragment = isAbiFragment;
27
+ const isAbiErrorFragment = (item) => !(0, web3_utils_1.isNullish)(item) &&
28
+ typeof item === 'object' &&
29
+ !(0, web3_utils_1.isNullish)(item.type) &&
30
+ item.type === 'error';
31
+ exports.isAbiErrorFragment = isAbiErrorFragment;
32
+ const isAbiEventFragment = (item) => !(0, web3_utils_1.isNullish)(item) &&
33
+ typeof item === 'object' &&
34
+ !(0, web3_utils_1.isNullish)(item.type) &&
35
+ item.type === 'event';
36
+ exports.isAbiEventFragment = isAbiEventFragment;
37
+ const isAbiFunctionFragment = (item) => !(0, web3_utils_1.isNullish)(item) &&
38
+ typeof item === 'object' &&
39
+ !(0, web3_utils_1.isNullish)(item.type) &&
40
+ item.type === 'function';
41
+ exports.isAbiFunctionFragment = isAbiFunctionFragment;
42
+ const isAbiConstructorFragment = (item) => !(0, web3_utils_1.isNullish)(item) &&
43
+ typeof item === 'object' &&
44
+ !(0, web3_utils_1.isNullish)(item.type) &&
45
+ item.type === 'constructor';
46
+ exports.isAbiConstructorFragment = isAbiConstructorFragment;
47
+ /**
48
+ * Check if type is simplified struct format
49
+ */
50
+ const isSimplifiedStructFormat = (type) => typeof type === 'object' &&
51
+ typeof type.components === 'undefined' &&
52
+ typeof type.name === 'undefined';
53
+ exports.isSimplifiedStructFormat = isSimplifiedStructFormat;
54
+ /**
55
+ * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used
56
+ */
57
+ const mapStructNameAndType = (structName) => structName.includes('[]')
58
+ ? { type: 'tuple[]', name: structName.slice(0, -2) }
59
+ : { type: 'tuple', name: structName };
60
+ exports.mapStructNameAndType = mapStructNameAndType;
61
+ /**
62
+ * Maps the simplified format in to the expected format of the ABICoder
63
+ */
64
+ const mapStructToCoderFormat = (struct) => {
65
+ const components = [];
66
+ for (const key of Object.keys(struct)) {
67
+ const item = struct[key];
68
+ if (typeof item === 'object') {
69
+ components.push(Object.assign(Object.assign({}, (0, exports.mapStructNameAndType)(key)), { components: (0, exports.mapStructToCoderFormat)(item) }));
70
+ }
71
+ else {
72
+ components.push({
73
+ name: key,
74
+ type: struct[key],
75
+ });
76
+ }
77
+ }
78
+ return components;
79
+ };
80
+ exports.mapStructToCoderFormat = mapStructToCoderFormat;
81
+ /**
82
+ * Map types if simplified format is used
83
+ */
84
+ const mapTypes = (types) => {
85
+ const mappedTypes = [];
86
+ for (const type of types) {
87
+ let modifiedType = type;
88
+ // Clone object
89
+ if (typeof type === 'object') {
90
+ modifiedType = Object.assign({}, type);
91
+ }
92
+ // Remap `function` type params to bytes24 since Ethers does not
93
+ // recognize former type. Solidity docs say `Function` is a bytes24
94
+ // encoding the contract address followed by the function selector hash.
95
+ if (typeof type === 'object' && type.type === 'function') {
96
+ modifiedType = Object.assign(Object.assign({}, type), { type: 'bytes24' });
97
+ }
98
+ if ((0, exports.isSimplifiedStructFormat)(modifiedType)) {
99
+ const structName = Object.keys(modifiedType)[0];
100
+ mappedTypes.push(Object.assign(Object.assign({}, (0, exports.mapStructNameAndType)(structName)), { components: (0, exports.mapStructToCoderFormat)(modifiedType[structName]) }));
101
+ }
102
+ else {
103
+ mappedTypes.push(modifiedType);
104
+ }
105
+ }
106
+ return mappedTypes;
107
+ };
108
+ exports.mapTypes = mapTypes;
109
+ /**
110
+ * returns true if input is a hexstring and is odd-lengthed
111
+ */
112
+ const isOddHexstring = (param) => typeof param === 'string' && /^(-)?0x[0-9a-f]*$/i.test(param) && param.length % 2 === 1;
113
+ exports.isOddHexstring = isOddHexstring;
114
+ /**
115
+ * format odd-length bytes to even-length
116
+ */
117
+ const formatOddHexstrings = (param) => (0, exports.isOddHexstring)(param) ? `0x0${param.substring(2)}` : param;
118
+ exports.formatOddHexstrings = formatOddHexstrings;
119
+ const paramTypeBytes = /^bytes([0-9]*)$/;
120
+ const paramTypeBytesArray = /^bytes([0-9]*)\[\]$/;
121
+ const paramTypeNumber = /^(u?int)([0-9]*)$/;
122
+ const paramTypeNumberArray = /^(u?int)([0-9]*)\[\]$/;
123
+ /**
124
+ * Handle some formatting of params for backwards compatibility with Ethers V4
125
+ */
126
+ const formatParam = (type, _param) => {
127
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
128
+ // clone if _param is an object
129
+ const param = typeof _param === 'object' && !Array.isArray(_param) ? Object.assign({}, _param) : _param;
130
+ // Format BN to string
131
+ if (param instanceof BigInt || typeof param === 'bigint') {
132
+ return param.toString(10);
133
+ }
134
+ if (paramTypeBytesArray.exec(type) || paramTypeNumberArray.exec(type)) {
135
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
136
+ const paramClone = [...param];
137
+ return paramClone.map(p => (0, exports.formatParam)(type.replace('[]', ''), p));
138
+ }
139
+ // Format correct width for u?int[0-9]*
140
+ let match = paramTypeNumber.exec(type);
141
+ if (match) {
142
+ const size = parseInt(match[2] ? match[2] : '256', 10);
143
+ if (size / 8 < param.length) {
144
+ // pad to correct bit width
145
+ return (0, web3_utils_1.leftPad)(param, size);
146
+ }
147
+ }
148
+ // Format correct length for bytes[0-9]+
149
+ match = paramTypeBytes.exec(type);
150
+ if (match) {
151
+ const hexParam = (0, web3_utils_1.isUint8Array)(param) ? (0, web3_utils_1.toHex)(param) : param;
152
+ // format to correct length
153
+ const size = parseInt(match[1], 10);
154
+ if (size) {
155
+ let maxSize = size * 2;
156
+ if (param.startsWith('0x')) {
157
+ maxSize += 2;
158
+ }
159
+ // pad to correct length
160
+ const paddedParam = hexParam.length < maxSize
161
+ ? (0, web3_utils_1.rightPad)(param, size * 2)
162
+ : hexParam;
163
+ return (0, exports.formatOddHexstrings)(paddedParam);
164
+ }
165
+ return (0, exports.formatOddHexstrings)(hexParam);
166
+ }
167
+ return param;
168
+ };
169
+ exports.formatParam = formatParam;
170
+ /**
171
+ * used to flatten json abi inputs/outputs into an array of type-representing-strings
172
+ */
173
+ const flattenTypes = (includeTuple, puts) => {
174
+ const types = [];
175
+ puts.forEach(param => {
176
+ if (typeof param.components === 'object') {
177
+ if (!param.type.startsWith('tuple')) {
178
+ throw new web3_errors_1.AbiError(`Invalid value given "${param.type}". Error: components found but type is not tuple.`);
179
+ }
180
+ const arrayBracket = param.type.indexOf('[');
181
+ const suffix = arrayBracket >= 0 ? param.type.substring(arrayBracket) : '';
182
+ const result = (0, exports.flattenTypes)(includeTuple, param.components);
183
+ if (Array.isArray(result) && includeTuple) {
184
+ types.push(`tuple(${result.join(',')})${suffix}`);
185
+ }
186
+ else if (!includeTuple) {
187
+ types.push(`(${result.join(',')})${suffix}`);
188
+ }
189
+ else {
190
+ types.push(`(${result.join()})`);
191
+ }
192
+ }
193
+ else {
194
+ types.push(param.type);
195
+ }
196
+ });
197
+ return types;
198
+ };
199
+ exports.flattenTypes = flattenTypes;
200
+ /**
201
+ * Should be used to create full function/event name from json abi
202
+ * returns a string
203
+ */
204
+ const jsonInterfaceMethodToString = (json) => {
205
+ var _a, _b, _c, _d;
206
+ if ((0, exports.isAbiErrorFragment)(json) || (0, exports.isAbiEventFragment)(json) || (0, exports.isAbiFunctionFragment)(json)) {
207
+ if ((_a = json.name) === null || _a === void 0 ? void 0 : _a.includes('(')) {
208
+ return json.name;
209
+ }
210
+ return `${(_b = json.name) !== null && _b !== void 0 ? _b : ''}(${(0, exports.flattenTypes)(false, (_c = json.inputs) !== null && _c !== void 0 ? _c : []).join(',')})`;
211
+ }
212
+ // Constructor fragment
213
+ return `(${(0, exports.flattenTypes)(false, (_d = json.inputs) !== null && _d !== void 0 ? _d : []).join(',')})`;
214
+ };
215
+ exports.jsonInterfaceMethodToString = jsonInterfaceMethodToString;
216
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /*
2
+ This file is part of web3.js.
3
+
4
+ web3.js is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU Lesser General Public License as published by
6
+ the Free Software Foundation, either version 3 of the License, or
7
+ (at your option) any later version.
8
+
9
+ web3.js is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU Lesser General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Lesser General Public License
15
+ along with web3.js. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ /**
18
+ *
19
+ * @module ABI
20
+ */
21
+ import { sha3Raw } from 'web3-utils';
22
+ import { AbiError } from 'web3-errors';
23
+ import { jsonInterfaceMethodToString, isAbiErrorFragment } from '../utils.js';
24
+ /**
25
+ * Encodes the error name to its ABI signature, which are the sha3 hash of the error name including input types.
26
+ */
27
+ export const encodeErrorSignature = (functionName) => {
28
+ if (typeof functionName !== 'string' && !isAbiErrorFragment(functionName)) {
29
+ throw new AbiError('Invalid parameter value in encodeErrorSignature');
30
+ }
31
+ let name;
32
+ if (functionName && (typeof functionName === 'function' || typeof functionName === 'object')) {
33
+ name = jsonInterfaceMethodToString(functionName);
34
+ }
35
+ else {
36
+ name = functionName;
37
+ }
38
+ return sha3Raw(name);
39
+ };
40
+ //# sourceMappingURL=errors_api.js.map