@waku/rln 0.1.4 → 0.1.5-164df63.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 (223) hide show
  1. package/README.md +5 -0
  2. package/bundle/_virtual/index2.js +1 -1
  3. package/bundle/index.js +4 -1
  4. package/bundle/packages/rln/dist/contract/abi.js +502 -248
  5. package/bundle/packages/rln/dist/contract/constants.js +5 -4
  6. package/bundle/packages/rln/dist/contract/rln_base_contract.js +483 -0
  7. package/bundle/packages/rln/dist/contract/rln_contract.js +32 -358
  8. package/bundle/packages/rln/dist/contract/types.js +9 -0
  9. package/bundle/packages/rln/dist/create.js +1 -1
  10. package/bundle/packages/rln/dist/credentials_manager.js +215 -0
  11. package/bundle/packages/rln/dist/keystore/cipher.js +3 -3
  12. package/bundle/packages/rln/dist/keystore/keystore.js +12 -7
  13. package/bundle/packages/rln/dist/rln.js +56 -166
  14. package/bundle/packages/rln/dist/utils/bytes.js +8 -2
  15. package/bundle/packages/rln/dist/utils/metamask.js +2 -2
  16. package/bundle/packages/rln/dist/zerokit.js +5 -5
  17. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/checksum.js +3 -3
  18. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/cipher.js +4 -4
  19. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/class.js +7 -7
  20. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/functional.js +7 -7
  21. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/index.js +6 -6
  22. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/kdf.js +5 -5
  23. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/password.js +1 -1
  24. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/schema-validation-generated.js +1 -1
  25. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/schema-validation.js +2 -2
  26. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/lib/types.js +1 -1
  27. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/aes.js +3 -3
  28. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/pbkdf2.js +7 -7
  29. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +3 -3
  30. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/scrypt.js +3 -3
  31. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/sha256.js +3 -3
  32. package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +7 -7
  33. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/_assert.js +1 -1
  34. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/_sha2.js +3 -3
  35. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/_u64.js +1 -1
  36. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/cryptoBrowser.js +1 -1
  37. package/bundle/packages/rln/node_modules/@noble/hashes/esm/_assert.js +43 -0
  38. package/bundle/packages/rln/node_modules/@noble/hashes/esm/_sha2.js +116 -0
  39. package/bundle/packages/rln/node_modules/@noble/hashes/esm/hmac.js +79 -0
  40. package/bundle/packages/rln/node_modules/@noble/hashes/esm/sha256.js +126 -0
  41. package/bundle/packages/rln/node_modules/@noble/hashes/esm/utils.js +43 -0
  42. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/hmac.js +3 -3
  43. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/pbkdf2.js +4 -4
  44. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/scrypt.js +5 -5
  45. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/sha256.js +3 -3
  46. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/sha512.js +4 -4
  47. package/bundle/{node_modules/@chainsafe/bls-keystore → packages/rln}/node_modules/@noble/hashes/utils.js +2 -2
  48. package/dist/.tsbuildinfo +1 -1
  49. package/dist/codec.test-utils.d.ts +36 -0
  50. package/dist/codec.test-utils.js +56 -0
  51. package/dist/codec.test-utils.js.map +1 -0
  52. package/dist/contract/abi.d.ts +21 -17
  53. package/dist/contract/abi.js +502 -248
  54. package/dist/contract/abi.js.map +1 -1
  55. package/dist/contract/constants.d.ts +22 -18
  56. package/dist/contract/constants.js +3 -3
  57. package/dist/contract/constants.js.map +1 -1
  58. package/dist/contract/index.d.ts +1 -0
  59. package/dist/contract/index.js +1 -0
  60. package/dist/contract/index.js.map +1 -1
  61. package/dist/contract/rln_base_contract.d.ts +90 -0
  62. package/dist/contract/rln_base_contract.js +466 -0
  63. package/dist/contract/rln_base_contract.js.map +1 -0
  64. package/dist/contract/rln_contract.d.ts +5 -115
  65. package/dist/contract/rln_contract.js +30 -355
  66. package/dist/contract/rln_contract.js.map +1 -1
  67. package/dist/contract/test-setup.d.ts +26 -0
  68. package/dist/contract/test-setup.js +56 -0
  69. package/dist/contract/test-setup.js.map +1 -0
  70. package/dist/contract/test-utils.d.ts +39 -0
  71. package/dist/contract/test-utils.js +118 -0
  72. package/dist/contract/test-utils.js.map +1 -0
  73. package/dist/contract/types.d.ts +45 -0
  74. package/dist/contract/types.js +8 -0
  75. package/dist/contract/types.js.map +1 -0
  76. package/dist/create.js +1 -1
  77. package/dist/create.js.map +1 -1
  78. package/dist/credentials_manager.d.ts +44 -0
  79. package/dist/credentials_manager.js +197 -0
  80. package/dist/credentials_manager.js.map +1 -0
  81. package/dist/index.d.ts +6 -2
  82. package/dist/index.js +5 -2
  83. package/dist/index.js.map +1 -1
  84. package/dist/keystore/keystore.js +11 -6
  85. package/dist/keystore/keystore.js.map +1 -1
  86. package/dist/keystore/types.d.ts +4 -3
  87. package/dist/rln.d.ts +9 -52
  88. package/dist/rln.js +54 -163
  89. package/dist/rln.js.map +1 -1
  90. package/dist/types.d.ts +27 -0
  91. package/dist/types.js +2 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/utils/bytes.js +8 -2
  94. package/dist/utils/bytes.js.map +1 -1
  95. package/dist/zerokit.d.ts +3 -3
  96. package/dist/zerokit.js +5 -5
  97. package/dist/zerokit.js.map +1 -1
  98. package/package.json +1 -91
  99. package/src/codec.test-utils.ts +80 -0
  100. package/src/contract/abi.ts +502 -248
  101. package/src/contract/constants.ts +3 -3
  102. package/src/contract/index.ts +1 -0
  103. package/src/contract/rln_base_contract.ts +712 -0
  104. package/src/contract/rln_contract.ts +37 -579
  105. package/src/contract/test-setup.ts +86 -0
  106. package/src/contract/test-utils.ts +179 -0
  107. package/src/contract/types.ts +53 -0
  108. package/src/create.ts +1 -1
  109. package/src/credentials_manager.ts +282 -0
  110. package/src/index.ts +19 -2
  111. package/src/keystore/keystore.ts +23 -12
  112. package/src/keystore/types.ts +4 -3
  113. package/src/rln.ts +67 -258
  114. package/src/types.ts +31 -0
  115. package/src/utils/bytes.ts +10 -2
  116. package/src/zerokit.ts +3 -3
  117. package/bundle/_virtual/__node-resolve_empty.js +0 -6
  118. package/bundle/_virtual/_node-resolve_empty.js +0 -3
  119. package/bundle/_virtual/bn.js +0 -3
  120. package/bundle/_virtual/common.js +0 -3
  121. package/bundle/_virtual/common2.js +0 -3
  122. package/bundle/_virtual/hash.js +0 -3
  123. package/bundle/_virtual/inherits_browser.js +0 -3
  124. package/bundle/_virtual/ripemd.js +0 -3
  125. package/bundle/_virtual/sha.js +0 -3
  126. package/bundle/_virtual/sha3.js +0 -3
  127. package/bundle/_virtual/utils3.js +0 -3
  128. package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +0 -3
  129. package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +0 -96
  130. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +0 -148
  131. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +0 -26
  132. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +0 -20
  133. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +0 -210
  134. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +0 -18
  135. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +0 -30
  136. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +0 -26
  137. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +0 -22
  138. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +0 -43
  139. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +0 -19
  140. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +0 -58
  141. package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +0 -854
  142. package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +0 -609
  143. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +0 -3
  144. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +0 -66
  145. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +0 -3
  146. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +0 -302
  147. package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +0 -3
  148. package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +0 -110
  149. package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +0 -20
  150. package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +0 -120
  151. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +0 -3
  152. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +0 -287
  153. package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +0 -3
  154. package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +0 -402
  155. package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +0 -3
  156. package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +0 -8
  157. package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +0 -3
  158. package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +0 -3
  159. package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +0 -893
  160. package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +0 -3
  161. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +0 -256
  162. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +0 -36
  163. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +0 -135
  164. package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +0 -8
  165. package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +0 -64
  166. package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +0 -443
  167. package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +0 -8
  168. package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +0 -3
  169. package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +0 -352
  170. package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +0 -3
  171. package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +0 -266
  172. package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +0 -3
  173. package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +0 -127
  174. package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +0 -3
  175. package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +0 -2007
  176. package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +0 -422
  177. package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +0 -674
  178. package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +0 -132
  179. package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +0 -3
  180. package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +0 -120
  181. package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +0 -8
  182. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +0 -3
  183. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +0 -2478
  184. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +0 -76
  185. package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +0 -3
  186. package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +0 -219
  187. package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +0 -3
  188. package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +0 -279
  189. package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +0 -3
  190. package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +0 -69
  191. package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +0 -404
  192. package/bundle/node_modules/bech32/index.js +0 -187
  193. package/bundle/node_modules/bn.js/lib/bn.js +0 -3361
  194. package/bundle/node_modules/hash.js/lib/hash/common.js +0 -97
  195. package/bundle/node_modules/hash.js/lib/hash/hmac.js +0 -51
  196. package/bundle/node_modules/hash.js/lib/hash/ripemd.js +0 -152
  197. package/bundle/node_modules/hash.js/lib/hash/sha/1.js +0 -81
  198. package/bundle/node_modules/hash.js/lib/hash/sha/224.js +0 -33
  199. package/bundle/node_modules/hash.js/lib/hash/sha/256.js +0 -113
  200. package/bundle/node_modules/hash.js/lib/hash/sha/384.js +0 -39
  201. package/bundle/node_modules/hash.js/lib/hash/sha/512.js +0 -336
  202. package/bundle/node_modules/hash.js/lib/hash/sha/common.js +0 -53
  203. package/bundle/node_modules/hash.js/lib/hash/sha.js +0 -14
  204. package/bundle/node_modules/hash.js/lib/hash/utils.js +0 -282
  205. package/bundle/node_modules/hash.js/lib/hash.js +0 -33
  206. package/bundle/node_modules/inherits/inherits_browser.js +0 -33
  207. package/bundle/node_modules/js-sha3/src/sha3.js +0 -660
  208. package/bundle/node_modules/minimalistic-assert/index.js +0 -13
  209. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/index.js +0 -0
  210. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/md5.js +0 -0
  211. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/nil.js +0 -0
  212. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/parse.js +0 -0
  213. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/regex.js +0 -0
  214. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/rng.js +0 -0
  215. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/sha1.js +0 -0
  216. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/stringify.js +0 -0
  217. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v1.js +0 -0
  218. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v3.js +0 -0
  219. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v35.js +0 -0
  220. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v4.js +0 -0
  221. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v5.js +0 -0
  222. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/validate.js +0 -0
  223. /package/bundle/{node_modules → packages/rln/node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/version.js +0 -0
@@ -1,443 +0,0 @@
1
- import { getAddress } from '../../address/lib.esm/index.js';
2
- import { hexConcat, isHexString, hexlify, arrayify, hexZeroPad } from '../../bytes/lib.esm/index.js';
3
- import { keccak256 } from '../../keccak256/lib.esm/index.js';
4
- import { defineReadOnly, deepCopy, shallowCopy } from '../../properties/lib.esm/index.js';
5
- import { Logger } from '../../logger/lib.esm/index.js';
6
- import { version } from './_version.js';
7
- import { id } from './id.js';
8
- import { BigNumber } from '../../bignumber/lib.esm/bignumber.js';
9
-
10
- var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
11
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
- step((generator = generator.apply(thisArg, _arguments || [])).next());
17
- });
18
- };
19
- const logger = new Logger(version);
20
- const padding = new Uint8Array(32);
21
- padding.fill(0);
22
- const NegativeOne = BigNumber.from(-1);
23
- const Zero = BigNumber.from(0);
24
- const One = BigNumber.from(1);
25
- const MaxUint256 = BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
26
- function hexPadRight(value) {
27
- const bytes = arrayify(value);
28
- const padOffset = bytes.length % 32;
29
- if (padOffset) {
30
- return hexConcat([bytes, padding.slice(padOffset)]);
31
- }
32
- return hexlify(bytes);
33
- }
34
- const hexTrue = hexZeroPad(One.toHexString(), 32);
35
- const hexFalse = hexZeroPad(Zero.toHexString(), 32);
36
- const domainFieldTypes = {
37
- name: "string",
38
- version: "string",
39
- chainId: "uint256",
40
- verifyingContract: "address",
41
- salt: "bytes32"
42
- };
43
- const domainFieldNames = [
44
- "name", "version", "chainId", "verifyingContract", "salt"
45
- ];
46
- function checkString(key) {
47
- return function (value) {
48
- if (typeof (value) !== "string") {
49
- logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);
50
- }
51
- return value;
52
- };
53
- }
54
- const domainChecks = {
55
- name: checkString("name"),
56
- version: checkString("version"),
57
- chainId: function (value) {
58
- try {
59
- return BigNumber.from(value).toString();
60
- }
61
- catch (error) { }
62
- return logger.throwArgumentError(`invalid domain value for "chainId"`, "domain.chainId", value);
63
- },
64
- verifyingContract: function (value) {
65
- try {
66
- return getAddress(value).toLowerCase();
67
- }
68
- catch (error) { }
69
- return logger.throwArgumentError(`invalid domain value "verifyingContract"`, "domain.verifyingContract", value);
70
- },
71
- salt: function (value) {
72
- try {
73
- const bytes = arrayify(value);
74
- if (bytes.length !== 32) {
75
- throw new Error("bad length");
76
- }
77
- return hexlify(bytes);
78
- }
79
- catch (error) { }
80
- return logger.throwArgumentError(`invalid domain value "salt"`, "domain.salt", value);
81
- }
82
- };
83
- function getBaseEncoder(type) {
84
- // intXX and uintXX
85
- {
86
- const match = type.match(/^(u?)int(\d*)$/);
87
- if (match) {
88
- const signed = (match[1] === "");
89
- const width = parseInt(match[2] || "256");
90
- if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {
91
- logger.throwArgumentError("invalid numeric width", "type", type);
92
- }
93
- const boundsUpper = MaxUint256.mask(signed ? (width - 1) : width);
94
- const boundsLower = signed ? boundsUpper.add(One).mul(NegativeOne) : Zero;
95
- return function (value) {
96
- const v = BigNumber.from(value);
97
- if (v.lt(boundsLower) || v.gt(boundsUpper)) {
98
- logger.throwArgumentError(`value out-of-bounds for ${type}`, "value", value);
99
- }
100
- return hexZeroPad(v.toTwos(256).toHexString(), 32);
101
- };
102
- }
103
- }
104
- // bytesXX
105
- {
106
- const match = type.match(/^bytes(\d+)$/);
107
- if (match) {
108
- const width = parseInt(match[1]);
109
- if (width === 0 || width > 32 || match[1] !== String(width)) {
110
- logger.throwArgumentError("invalid bytes width", "type", type);
111
- }
112
- return function (value) {
113
- const bytes = arrayify(value);
114
- if (bytes.length !== width) {
115
- logger.throwArgumentError(`invalid length for ${type}`, "value", value);
116
- }
117
- return hexPadRight(value);
118
- };
119
- }
120
- }
121
- switch (type) {
122
- case "address": return function (value) {
123
- return hexZeroPad(getAddress(value), 32);
124
- };
125
- case "bool": return function (value) {
126
- return ((!value) ? hexFalse : hexTrue);
127
- };
128
- case "bytes": return function (value) {
129
- return keccak256(value);
130
- };
131
- case "string": return function (value) {
132
- return id(value);
133
- };
134
- }
135
- return null;
136
- }
137
- function encodeType(name, fields) {
138
- return `${name}(${fields.map(({ name, type }) => (type + " " + name)).join(",")})`;
139
- }
140
- class TypedDataEncoder {
141
- constructor(types) {
142
- defineReadOnly(this, "types", Object.freeze(deepCopy(types)));
143
- defineReadOnly(this, "_encoderCache", {});
144
- defineReadOnly(this, "_types", {});
145
- // Link struct types to their direct child structs
146
- const links = {};
147
- // Link structs to structs which contain them as a child
148
- const parents = {};
149
- // Link all subtypes within a given struct
150
- const subtypes = {};
151
- Object.keys(types).forEach((type) => {
152
- links[type] = {};
153
- parents[type] = [];
154
- subtypes[type] = {};
155
- });
156
- for (const name in types) {
157
- const uniqueNames = {};
158
- types[name].forEach((field) => {
159
- // Check each field has a unique name
160
- if (uniqueNames[field.name]) {
161
- logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, "types", types);
162
- }
163
- uniqueNames[field.name] = true;
164
- // Get the base type (drop any array specifiers)
165
- const baseType = field.type.match(/^([^\x5b]*)(\x5b|$)/)[1];
166
- if (baseType === name) {
167
- logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, "types", types);
168
- }
169
- // Is this a base encoding type?
170
- const encoder = getBaseEncoder(baseType);
171
- if (encoder) {
172
- return;
173
- }
174
- if (!parents[baseType]) {
175
- logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, "types", types);
176
- }
177
- // Add linkage
178
- parents[baseType].push(name);
179
- links[name][baseType] = true;
180
- });
181
- }
182
- // Deduce the primary type
183
- const primaryTypes = Object.keys(parents).filter((n) => (parents[n].length === 0));
184
- if (primaryTypes.length === 0) {
185
- logger.throwArgumentError("missing primary type", "types", types);
186
- }
187
- else if (primaryTypes.length > 1) {
188
- logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(", ")}`, "types", types);
189
- }
190
- defineReadOnly(this, "primaryType", primaryTypes[0]);
191
- // Check for circular type references
192
- function checkCircular(type, found) {
193
- if (found[type]) {
194
- logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, "types", types);
195
- }
196
- found[type] = true;
197
- Object.keys(links[type]).forEach((child) => {
198
- if (!parents[child]) {
199
- return;
200
- }
201
- // Recursively check children
202
- checkCircular(child, found);
203
- // Mark all ancestors as having this decendant
204
- Object.keys(found).forEach((subtype) => {
205
- subtypes[subtype][child] = true;
206
- });
207
- });
208
- delete found[type];
209
- }
210
- checkCircular(this.primaryType, {});
211
- // Compute each fully describe type
212
- for (const name in subtypes) {
213
- const st = Object.keys(subtypes[name]);
214
- st.sort();
215
- this._types[name] = encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join("");
216
- }
217
- }
218
- getEncoder(type) {
219
- let encoder = this._encoderCache[type];
220
- if (!encoder) {
221
- encoder = this._encoderCache[type] = this._getEncoder(type);
222
- }
223
- return encoder;
224
- }
225
- _getEncoder(type) {
226
- // Basic encoder type (address, bool, uint256, etc)
227
- {
228
- const encoder = getBaseEncoder(type);
229
- if (encoder) {
230
- return encoder;
231
- }
232
- }
233
- // Array
234
- const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/);
235
- if (match) {
236
- const subtype = match[1];
237
- const subEncoder = this.getEncoder(subtype);
238
- const length = parseInt(match[3]);
239
- return (value) => {
240
- if (length >= 0 && value.length !== length) {
241
- logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value);
242
- }
243
- let result = value.map(subEncoder);
244
- if (this._types[subtype]) {
245
- result = result.map(keccak256);
246
- }
247
- return keccak256(hexConcat(result));
248
- };
249
- }
250
- // Struct
251
- const fields = this.types[type];
252
- if (fields) {
253
- const encodedType = id(this._types[type]);
254
- return (value) => {
255
- const values = fields.map(({ name, type }) => {
256
- const result = this.getEncoder(type)(value[name]);
257
- if (this._types[type]) {
258
- return keccak256(result);
259
- }
260
- return result;
261
- });
262
- values.unshift(encodedType);
263
- return hexConcat(values);
264
- };
265
- }
266
- return logger.throwArgumentError(`unknown type: ${type}`, "type", type);
267
- }
268
- encodeType(name) {
269
- const result = this._types[name];
270
- if (!result) {
271
- logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, "name", name);
272
- }
273
- return result;
274
- }
275
- encodeData(type, value) {
276
- return this.getEncoder(type)(value);
277
- }
278
- hashStruct(name, value) {
279
- return keccak256(this.encodeData(name, value));
280
- }
281
- encode(value) {
282
- return this.encodeData(this.primaryType, value);
283
- }
284
- hash(value) {
285
- return this.hashStruct(this.primaryType, value);
286
- }
287
- _visit(type, value, callback) {
288
- // Basic encoder type (address, bool, uint256, etc)
289
- {
290
- const encoder = getBaseEncoder(type);
291
- if (encoder) {
292
- return callback(type, value);
293
- }
294
- }
295
- // Array
296
- const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/);
297
- if (match) {
298
- const subtype = match[1];
299
- const length = parseInt(match[3]);
300
- if (length >= 0 && value.length !== length) {
301
- logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value);
302
- }
303
- return value.map((v) => this._visit(subtype, v, callback));
304
- }
305
- // Struct
306
- const fields = this.types[type];
307
- if (fields) {
308
- return fields.reduce((accum, { name, type }) => {
309
- accum[name] = this._visit(type, value[name], callback);
310
- return accum;
311
- }, {});
312
- }
313
- return logger.throwArgumentError(`unknown type: ${type}`, "type", type);
314
- }
315
- visit(value, callback) {
316
- return this._visit(this.primaryType, value, callback);
317
- }
318
- static from(types) {
319
- return new TypedDataEncoder(types);
320
- }
321
- static getPrimaryType(types) {
322
- return TypedDataEncoder.from(types).primaryType;
323
- }
324
- static hashStruct(name, types, value) {
325
- return TypedDataEncoder.from(types).hashStruct(name, value);
326
- }
327
- static hashDomain(domain) {
328
- const domainFields = [];
329
- for (const name in domain) {
330
- const type = domainFieldTypes[name];
331
- if (!type) {
332
- logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, "domain", domain);
333
- }
334
- domainFields.push({ name, type });
335
- }
336
- domainFields.sort((a, b) => {
337
- return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);
338
- });
339
- return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain);
340
- }
341
- static encode(domain, types, value) {
342
- return hexConcat([
343
- "0x1901",
344
- TypedDataEncoder.hashDomain(domain),
345
- TypedDataEncoder.from(types).hash(value)
346
- ]);
347
- }
348
- static hash(domain, types, value) {
349
- return keccak256(TypedDataEncoder.encode(domain, types, value));
350
- }
351
- // Replaces all address types with ENS names with their looked up address
352
- static resolveNames(domain, types, value, resolveName) {
353
- return __awaiter(this, void 0, void 0, function* () {
354
- // Make a copy to isolate it from the object passed in
355
- domain = shallowCopy(domain);
356
- // Look up all ENS names
357
- const ensCache = {};
358
- // Do we need to look up the domain's verifyingContract?
359
- if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {
360
- ensCache[domain.verifyingContract] = "0x";
361
- }
362
- // We are going to use the encoder to visit all the base values
363
- const encoder = TypedDataEncoder.from(types);
364
- // Get a list of all the addresses
365
- encoder.visit(value, (type, value) => {
366
- if (type === "address" && !isHexString(value, 20)) {
367
- ensCache[value] = "0x";
368
- }
369
- return value;
370
- });
371
- // Lookup each name
372
- for (const name in ensCache) {
373
- ensCache[name] = yield resolveName(name);
374
- }
375
- // Replace the domain verifyingContract if needed
376
- if (domain.verifyingContract && ensCache[domain.verifyingContract]) {
377
- domain.verifyingContract = ensCache[domain.verifyingContract];
378
- }
379
- // Replace all ENS names with their address
380
- value = encoder.visit(value, (type, value) => {
381
- if (type === "address" && ensCache[value]) {
382
- return ensCache[value];
383
- }
384
- return value;
385
- });
386
- return { domain, value };
387
- });
388
- }
389
- static getPayload(domain, types, value) {
390
- // Validate the domain fields
391
- TypedDataEncoder.hashDomain(domain);
392
- // Derive the EIP712Domain Struct reference type
393
- const domainValues = {};
394
- const domainTypes = [];
395
- domainFieldNames.forEach((name) => {
396
- const value = domain[name];
397
- if (value == null) {
398
- return;
399
- }
400
- domainValues[name] = domainChecks[name](value);
401
- domainTypes.push({ name, type: domainFieldTypes[name] });
402
- });
403
- const encoder = TypedDataEncoder.from(types);
404
- const typesWithDomain = shallowCopy(types);
405
- if (typesWithDomain.EIP712Domain) {
406
- logger.throwArgumentError("types must not contain EIP712Domain type", "types.EIP712Domain", types);
407
- }
408
- else {
409
- typesWithDomain.EIP712Domain = domainTypes;
410
- }
411
- // Validate the data structures and types
412
- encoder.encode(value);
413
- return {
414
- types: typesWithDomain,
415
- domain: domainValues,
416
- primaryType: encoder.primaryType,
417
- message: encoder.visit(value, (type, value) => {
418
- // bytes
419
- if (type.match(/^bytes(\d*)/)) {
420
- return hexlify(arrayify(value));
421
- }
422
- // uint or int
423
- if (type.match(/^u?int/)) {
424
- return BigNumber.from(value).toString();
425
- }
426
- switch (type) {
427
- case "address":
428
- return value.toLowerCase();
429
- case "bool":
430
- return !!value;
431
- case "string":
432
- if (typeof (value) !== "string") {
433
- logger.throwArgumentError(`invalid string`, "value", value);
434
- }
435
- return value;
436
- }
437
- return logger.throwArgumentError("unsupported type", "type", type);
438
- })
439
- };
440
- }
441
- }
442
-
443
- export { TypedDataEncoder };
@@ -1,8 +0,0 @@
1
- import sha3 from '../../../js-sha3/src/sha3.js';
2
- import { arrayify } from '../../bytes/lib.esm/index.js';
3
-
4
- function keccak256(data) {
5
- return '0x' + sha3.keccak_256(arrayify(data));
6
- }
7
-
8
- export { keccak256 };
@@ -1,3 +0,0 @@
1
- const version = "logger/5.8.0";
2
-
3
- export { version };