@waku/rln 0.1.5-cad3e7a.0 → 0.1.5-d0da8f8.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 (179) hide show
  1. package/bundle/_virtual/utils.js +2 -2
  2. package/bundle/_virtual/utils2.js +2 -2
  3. package/bundle/index.js +4 -3
  4. package/bundle/packages/rln/dist/contract/constants.js +2 -1
  5. package/bundle/packages/rln/dist/contract/{rln_light_contract.js → rln_base_contract.js} +189 -186
  6. package/bundle/packages/rln/dist/contract/rln_contract.js +10 -420
  7. package/bundle/packages/rln/dist/contract/types.js +9 -0
  8. package/bundle/packages/rln/dist/create.js +1 -1
  9. package/bundle/packages/rln/dist/{rln_light.js → credentials_manager.js} +114 -48
  10. package/bundle/packages/rln/dist/identity.js +0 -9
  11. package/bundle/packages/rln/dist/keystore/keystore.js +31 -17
  12. package/bundle/packages/rln/dist/rln.js +57 -167
  13. package/bundle/packages/rln/dist/utils/bytes.js +8 -2
  14. package/bundle/packages/rln/dist/utils/metamask.js +2 -2
  15. package/bundle/packages/rln/dist/zerokit.js +5 -5
  16. package/bundle/packages/rln/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +1 -1
  17. package/bundle/packages/rln/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +2 -2
  18. package/bundle/packages/rln/node_modules/@noble/hashes/_sha2.js +1 -1
  19. package/bundle/packages/rln/node_modules/@noble/hashes/hmac.js +1 -1
  20. package/bundle/packages/rln/node_modules/@noble/hashes/pbkdf2.js +1 -1
  21. package/bundle/packages/rln/node_modules/@noble/hashes/scrypt.js +1 -1
  22. package/bundle/packages/rln/node_modules/@noble/hashes/sha256.js +1 -1
  23. package/bundle/packages/rln/node_modules/@noble/hashes/sha512.js +1 -1
  24. package/bundle/packages/rln/node_modules/@noble/hashes/utils.js +1 -1
  25. package/dist/.tsbuildinfo +1 -1
  26. package/dist/contract/constants.d.ts +1 -1
  27. package/dist/contract/constants.js +1 -1
  28. package/dist/contract/constants.js.map +1 -1
  29. package/dist/contract/index.d.ts +1 -0
  30. package/dist/contract/index.js +1 -0
  31. package/dist/contract/index.js.map +1 -1
  32. package/dist/contract/{rln_light_contract.d.ts → rln_base_contract.d.ts} +24 -58
  33. package/dist/contract/{rln_light_contract.js → rln_base_contract.js} +187 -184
  34. package/dist/contract/rln_base_contract.js.map +1 -0
  35. package/dist/contract/rln_contract.d.ts +5 -122
  36. package/dist/contract/rln_contract.js +8 -417
  37. package/dist/contract/rln_contract.js.map +1 -1
  38. package/dist/contract/types.d.ts +45 -0
  39. package/dist/contract/types.js +8 -0
  40. package/dist/contract/types.js.map +1 -0
  41. package/dist/create.js +1 -1
  42. package/dist/create.js.map +1 -1
  43. package/dist/credentials_manager.d.ts +44 -0
  44. package/dist/credentials_manager.js +197 -0
  45. package/dist/credentials_manager.js.map +1 -0
  46. package/dist/identity.d.ts +0 -1
  47. package/dist/identity.js +0 -9
  48. package/dist/identity.js.map +1 -1
  49. package/dist/index.d.ts +5 -4
  50. package/dist/index.js +4 -3
  51. package/dist/index.js.map +1 -1
  52. package/dist/keystore/keystore.d.ts +1 -0
  53. package/dist/keystore/keystore.js +31 -17
  54. package/dist/keystore/keystore.js.map +1 -1
  55. package/dist/keystore/types.d.ts +3 -3
  56. package/dist/rln.d.ts +9 -52
  57. package/dist/rln.js +55 -164
  58. package/dist/rln.js.map +1 -1
  59. package/dist/types.d.ts +27 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/utils/bytes.js +8 -2
  63. package/dist/utils/bytes.js.map +1 -1
  64. package/dist/zerokit.d.ts +3 -3
  65. package/dist/zerokit.js +5 -5
  66. package/dist/zerokit.js.map +1 -1
  67. package/package.json +1 -1
  68. package/src/contract/constants.ts +1 -1
  69. package/src/contract/index.ts +1 -0
  70. package/src/contract/{rln_light_contract.ts → rln_base_contract.ts} +306 -323
  71. package/src/contract/rln_contract.ts +9 -663
  72. package/src/contract/types.ts +53 -0
  73. package/src/create.ts +1 -1
  74. package/src/credentials_manager.ts +282 -0
  75. package/src/identity.ts +0 -10
  76. package/src/index.ts +7 -5
  77. package/src/keystore/keystore.ts +57 -31
  78. package/src/keystore/types.ts +3 -3
  79. package/src/rln.ts +68 -259
  80. package/src/types.ts +31 -0
  81. package/src/utils/bytes.ts +10 -2
  82. package/src/zerokit.ts +3 -3
  83. package/bundle/_virtual/__node-resolve_empty.js +0 -6
  84. package/bundle/_virtual/_node-resolve_empty.js +0 -3
  85. package/bundle/_virtual/bn.js +0 -3
  86. package/bundle/_virtual/common.js +0 -3
  87. package/bundle/_virtual/common2.js +0 -3
  88. package/bundle/_virtual/hash.js +0 -3
  89. package/bundle/_virtual/inherits_browser.js +0 -3
  90. package/bundle/_virtual/ripemd.js +0 -3
  91. package/bundle/_virtual/sha.js +0 -3
  92. package/bundle/_virtual/sha3.js +0 -3
  93. package/bundle/_virtual/utils3.js +0 -3
  94. package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +0 -3
  95. package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +0 -96
  96. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +0 -148
  97. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +0 -26
  98. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +0 -20
  99. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +0 -210
  100. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +0 -18
  101. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +0 -30
  102. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +0 -26
  103. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +0 -22
  104. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +0 -43
  105. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +0 -19
  106. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +0 -58
  107. package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +0 -854
  108. package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +0 -609
  109. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +0 -3
  110. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +0 -66
  111. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +0 -3
  112. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +0 -302
  113. package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +0 -3
  114. package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +0 -110
  115. package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +0 -20
  116. package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +0 -120
  117. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +0 -3
  118. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +0 -287
  119. package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +0 -3
  120. package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +0 -402
  121. package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +0 -3
  122. package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +0 -8
  123. package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +0 -3
  124. package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +0 -3
  125. package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +0 -893
  126. package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +0 -3
  127. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +0 -256
  128. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +0 -36
  129. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +0 -135
  130. package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +0 -8
  131. package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +0 -64
  132. package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +0 -443
  133. package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +0 -8
  134. package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +0 -660
  135. package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +0 -3
  136. package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +0 -352
  137. package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +0 -3
  138. package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +0 -248
  139. package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +0 -3
  140. package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +0 -127
  141. package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +0 -3
  142. package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +0 -2007
  143. package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +0 -422
  144. package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +0 -674
  145. package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +0 -132
  146. package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +0 -3
  147. package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +0 -120
  148. package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +0 -8
  149. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +0 -3
  150. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +0 -2430
  151. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +0 -76
  152. package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +0 -3
  153. package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +0 -219
  154. package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +0 -3
  155. package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +0 -279
  156. package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +0 -3
  157. package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +0 -69
  158. package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +0 -404
  159. package/bundle/node_modules/bech32/index.js +0 -187
  160. package/bundle/node_modules/bn.js/lib/bn.js +0 -3361
  161. package/bundle/node_modules/hash.js/lib/hash/common.js +0 -97
  162. package/bundle/node_modules/hash.js/lib/hash/hmac.js +0 -51
  163. package/bundle/node_modules/hash.js/lib/hash/ripemd.js +0 -152
  164. package/bundle/node_modules/hash.js/lib/hash/sha/1.js +0 -81
  165. package/bundle/node_modules/hash.js/lib/hash/sha/224.js +0 -33
  166. package/bundle/node_modules/hash.js/lib/hash/sha/256.js +0 -113
  167. package/bundle/node_modules/hash.js/lib/hash/sha/384.js +0 -39
  168. package/bundle/node_modules/hash.js/lib/hash/sha/512.js +0 -336
  169. package/bundle/node_modules/hash.js/lib/hash/sha/common.js +0 -53
  170. package/bundle/node_modules/hash.js/lib/hash/sha.js +0 -14
  171. package/bundle/node_modules/hash.js/lib/hash/utils.js +0 -282
  172. package/bundle/node_modules/hash.js/lib/hash.js +0 -33
  173. package/bundle/node_modules/inherits/inherits_browser.js +0 -33
  174. package/bundle/node_modules/minimalistic-assert/index.js +0 -13
  175. package/dist/contract/rln_light_contract.js.map +0 -1
  176. package/dist/rln_light.d.ts +0 -64
  177. package/dist/rln_light.js +0 -144
  178. package/dist/rln_light.js.map +0 -1
  179. package/src/rln_light.ts +0 -235
@@ -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 '../node_modules/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 };