@invisi-labs/sdk 1.1.6 → 1.1.7

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 (67) hide show
  1. package/dist/{NoteOutput-DRkVnwlx.d.cts → broadcaster-preparation-DMxxZ_1Q.d.cts} +309 -120
  2. package/dist/{NoteOutput-DpDC6T2O.d.ts → broadcaster-preparation-DMxxZ_1Q.d.ts} +309 -120
  3. package/dist/broadcaster-preparation-RMWQFYNL.js +11 -0
  4. package/dist/broadcaster-preparation-UGOTO4SX.cjs +11 -0
  5. package/dist/broadcaster-preparation-UGOTO4SX.cjs.map +1 -0
  6. package/dist/chunk-7F7ZZW3L.cjs +374 -0
  7. package/dist/chunk-7F7ZZW3L.cjs.map +1 -0
  8. package/dist/{chunk-4SD3MW6N.js → chunk-EHP5TBC6.js} +1347 -2493
  9. package/dist/chunk-EHP5TBC6.js.map +1 -0
  10. package/dist/{broadcaster-preparation-QVL62KM6.js → chunk-GTPUYPQL.js} +6 -6
  11. package/dist/chunk-GTPUYPQL.js.map +1 -0
  12. package/dist/{chunk-FL4TIGWW.js → chunk-ITTGBIG2.js} +617 -521
  13. package/dist/chunk-ITTGBIG2.js.map +1 -0
  14. package/dist/chunk-J2JH6HIG.cjs +1877 -0
  15. package/dist/chunk-J2JH6HIG.cjs.map +1 -0
  16. package/dist/chunk-LOU7AP2B.cjs +128 -0
  17. package/dist/chunk-LOU7AP2B.cjs.map +1 -0
  18. package/dist/chunk-RHNIHI4P.cjs +3565 -0
  19. package/dist/chunk-RHNIHI4P.cjs.map +1 -0
  20. package/dist/{chunk-QC6TQR3R.js → chunk-XHKQ2BO2.js} +12 -12
  21. package/dist/chunk-XHKQ2BO2.js.map +1 -0
  22. package/dist/ethers.cjs +11 -385
  23. package/dist/ethers.cjs.map +1 -1
  24. package/dist/ethers.d.cts +3 -4
  25. package/dist/ethers.d.ts +3 -4
  26. package/dist/ethers.js +1 -1
  27. package/dist/index.cjs +451 -7845
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +72 -702
  30. package/dist/index.d.ts +72 -702
  31. package/dist/index.js +374 -862
  32. package/dist/index.js.map +1 -1
  33. package/dist/receipt-logs-CvC951p7.d.cts +318 -0
  34. package/dist/receipt-logs-m0-bhaxW.d.ts +318 -0
  35. package/dist/session-support.cjs +168 -0
  36. package/dist/session-support.cjs.map +1 -0
  37. package/dist/session-support.d.cts +252 -0
  38. package/dist/session-support.d.ts +252 -0
  39. package/dist/session-support.js +168 -0
  40. package/dist/session-support.js.map +1 -0
  41. package/package.json +10 -20
  42. package/dist/broadcaster-preparation-QVL62KM6.js.map +0 -1
  43. package/dist/chunk-4SD3MW6N.js.map +0 -1
  44. package/dist/chunk-FL4TIGWW.js.map +0 -1
  45. package/dist/chunk-QC6TQR3R.js.map +0 -1
  46. package/dist/indexeddb.cjs +0 -6878
  47. package/dist/indexeddb.cjs.map +0 -1
  48. package/dist/indexeddb.d.cts +0 -20
  49. package/dist/indexeddb.d.ts +0 -20
  50. package/dist/indexeddb.js +0 -71
  51. package/dist/indexeddb.js.map +0 -1
  52. package/dist/memory.cjs +0 -6886
  53. package/dist/memory.cjs.map +0 -1
  54. package/dist/memory.d.cts +0 -12
  55. package/dist/memory.d.ts +0 -12
  56. package/dist/memory.js +0 -11
  57. package/dist/sqlite.cjs +0 -6862
  58. package/dist/sqlite.cjs.map +0 -1
  59. package/dist/sqlite.d.cts +0 -28
  60. package/dist/sqlite.d.ts +0 -28
  61. package/dist/sqlite.js +0 -55
  62. package/dist/sqlite.js.map +0 -1
  63. package/dist/state-C4HZFotm.d.cts +0 -78
  64. package/dist/state-C4HZFotm.d.ts +0 -78
  65. package/dist/store-8aBhnbGr.d.ts +0 -42
  66. package/dist/store-YrbXb6CY.d.cts +0 -42
  67. /package/dist/{memory.js.map → broadcaster-preparation-RMWQFYNL.js.map} +0 -0
@@ -0,0 +1,374 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/integrations/ethers.ts
2
+ var _address = require('@invisi-labs/core/address');
3
+
4
+
5
+
6
+
7
+ var _contracts = require('@invisi-labs/protocol/contracts');
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ var _ethers = require('ethers');
19
+ var getAddress = (value) => _ethers.getAddress.call(void 0, value);
20
+ var erc1271Abi = [
21
+ "function isValidSignature(bytes32 hash, bytes signature) view returns (bytes4)"
22
+ ];
23
+ function fundingTypes(data) {
24
+ const types = Object.fromEntries(
25
+ Object.entries(data.types).map(([name, fields]) => [name, [...fields]])
26
+ );
27
+ check(
28
+ _ethers.TypedDataEncoder.from(types).primaryType === data.primaryType,
29
+ "funding typed-data primary type mismatch"
30
+ );
31
+ return types;
32
+ }
33
+ function check(value, message) {
34
+ if (!value) {
35
+ throw new Error(message);
36
+ }
37
+ }
38
+ async function chain(client, expected) {
39
+ check((await client.getNetwork()).chainId === expected, "EVM client chain mismatch");
40
+ }
41
+ function number(value) {
42
+ check(typeof value === "bigint" && value >= 0n, "invalid chain integer");
43
+ return value;
44
+ }
45
+ function boolean(value) {
46
+ check(typeof value === "boolean", "invalid chain boolean");
47
+ return value;
48
+ }
49
+ function word(value) {
50
+ check(typeof value === "string" && /^0x[0-9a-fA-F]{64}$/.test(value), "invalid chain word");
51
+ return value.toLowerCase();
52
+ }
53
+ function ownerWord(value) {
54
+ const identity = _address.ReceivingAddress.fromIdentity(value).ownerAddress;
55
+ return _ethers.zeroPadValue.call(void 0, identity, 32);
56
+ }
57
+ var EthersChainReader = class {
58
+ constructor(client) {
59
+ this.client = client;
60
+ }
61
+ async getChainId() {
62
+ return (await this.client.getNetwork()).chainId;
63
+ }
64
+ async isValidRegistrationSignature(owner, digest, signature) {
65
+ try {
66
+ const result = await this.client.call({
67
+ to: getAddress(owner),
68
+ data: new (0, _ethers.Interface)(erc1271Abi).encodeFunctionData("isValidSignature", [
69
+ digest,
70
+ signature
71
+ ])
72
+ });
73
+ return result.length >= 66 && result.slice(0, 66).toLowerCase() === "0x1626ba7e" + "00".repeat(28);
74
+ } catch (error) {
75
+ if (_ethers.isError.call(void 0, error, "CALL_EXCEPTION")) return false;
76
+ throw error;
77
+ }
78
+ }
79
+ async getProtocolAddressRegistry(address) {
80
+ return getAddress(
81
+ await new (0, _ethers.Contract)(getAddress(address), _contracts.invisiProtocolAbi, this.client).getFunction(
82
+ "addressRegistry"
83
+ )()
84
+ );
85
+ }
86
+ async getProtocolVersion(address) {
87
+ return BigInt(
88
+ await new (0, _ethers.Contract)(getAddress(address), _contracts.invisiProtocolAbi, this.client).getFunction(
89
+ "VERSION"
90
+ )()
91
+ );
92
+ }
93
+ async getCode(address) {
94
+ return await this.client.getCode(getAddress(address));
95
+ }
96
+ async getFactoryInstanceAddress(factory, salt) {
97
+ return getAddress(
98
+ await new (0, _ethers.Contract)(factory, _contracts.invisiFactoryAbi, this.client).getFunction(
99
+ "getInstanceAddress"
100
+ )(salt)
101
+ );
102
+ }
103
+ async isFactoryInstance(factory, instance) {
104
+ return boolean(
105
+ await new (0, _ethers.Contract)(factory, _contracts.invisiFactoryAbi, this.client).getFunction("isInstance")(
106
+ instance
107
+ )
108
+ );
109
+ }
110
+ async getInstanceFactory(instance) {
111
+ return getAddress(
112
+ await new (0, _ethers.Contract)(instance, _contracts.invisiProtocolAbi, this.client).getFunction("factory")()
113
+ );
114
+ }
115
+ async getLatestBlockNumber() {
116
+ return BigInt(await this.client.getBlockNumber());
117
+ }
118
+ async getBlock(blockNumber) {
119
+ const block = await this.client.getBlock(blockNumber);
120
+ check(
121
+ block && BigInt(block.number) === blockNumber && block.hash && block.parentHash,
122
+ "invalid canonical block"
123
+ );
124
+ return {
125
+ number: BigInt(block.number),
126
+ hash: word(block.hash),
127
+ parentHash: word(block.parentHash),
128
+ timestamp: number(BigInt(block.timestamp))
129
+ };
130
+ }
131
+ async read(context, address, abi, functionName, args, block) {
132
+ await chain(this.client, context.chainId);
133
+ if (block) {
134
+ check(
135
+ (await this.getBlock(block.number)).hash === block.hash,
136
+ "canonical read block mismatch"
137
+ );
138
+ }
139
+ return new (0, _ethers.Contract)(getAddress(address), abi, this.client).getFunction(functionName)(
140
+ ...args,
141
+ ...block ? [{ blockTag: block.number }] : []
142
+ );
143
+ }
144
+ async getFundingNonce(context, payer, block) {
145
+ return number(
146
+ await this.read(
147
+ context,
148
+ context.protocolAddress,
149
+ _contracts.invisiProtocolAbi,
150
+ "nonces",
151
+ [getAddress(payer)],
152
+ block
153
+ )
154
+ );
155
+ }
156
+ async getRegistryNonce(context, ownerAddress, block) {
157
+ return number(
158
+ await this.read(
159
+ context,
160
+ context.registryAddress,
161
+ _contracts.invisiAddressRegistryAbi,
162
+ "nonceOf",
163
+ [ownerWord(ownerAddress)],
164
+ block
165
+ )
166
+ );
167
+ }
168
+ async isKnownRoot(context, treeId, root, block) {
169
+ return boolean(
170
+ await this.read(
171
+ context,
172
+ context.protocolAddress,
173
+ _contracts.invisiProtocolAbi,
174
+ "rootHistory",
175
+ [number(treeId), word(root)],
176
+ block
177
+ )
178
+ );
179
+ }
180
+ async isSpent(context, nullifiers, block) {
181
+ const copied = nullifiers.map(word);
182
+ const result = [];
183
+ for (let offset = 0; offset < copied.length; offset += 32) {
184
+ result.push(
185
+ ...await Promise.all(
186
+ copied.slice(offset, offset + 32).map(
187
+ (nf) => this.read(
188
+ context,
189
+ context.protocolAddress,
190
+ _contracts.invisiProtocolAbi,
191
+ "isNullifierSpent",
192
+ [nf],
193
+ block
194
+ ).then(boolean)
195
+ )
196
+ )
197
+ );
198
+ }
199
+ return result;
200
+ }
201
+ async getTransaction(hash) {
202
+ try {
203
+ const tx = await this.client.getTransaction(word(hash));
204
+ if (!_optionalChain([tx, 'optionalAccess', _ => _.to])) {
205
+ return null;
206
+ }
207
+ return {
208
+ transactionHash: word(tx.hash),
209
+ to: getAddress(tx.to),
210
+ from: getAddress(tx.from),
211
+ nonce: number(BigInt(tx.nonce)),
212
+ data: tx.data,
213
+ value: number(tx.value)
214
+ };
215
+ } catch (error) {
216
+ if (error instanceof Error && error.name === "TransactionNotFoundError") {
217
+ return null;
218
+ }
219
+ throw error;
220
+ }
221
+ }
222
+ async getReceipt(hash) {
223
+ try {
224
+ const receipt = await this.client.getTransactionReceipt(word(hash));
225
+ if (!receipt) return null;
226
+ const block = await this.getBlock(BigInt(receipt.blockNumber));
227
+ check(block.hash === receipt.blockHash, "receipt block is no longer canonical");
228
+ return {
229
+ block,
230
+ transactionHash: word(receipt.hash),
231
+ status: receipt.status === 1 ? "success" : "reverted",
232
+ logs: receipt.logs.map((log) => {
233
+ check(
234
+ !log.removed && log.transactionHash === receipt.hash && log.index !== null,
235
+ "invalid receipt log"
236
+ );
237
+ return {
238
+ address: getAddress(log.address),
239
+ data: log.data,
240
+ topics: [...log.topics],
241
+ transactionHash: word(log.transactionHash),
242
+ logIndex: log.index
243
+ };
244
+ })
245
+ };
246
+ } catch (error) {
247
+ if (error instanceof Error && error.name === "TransactionReceiptNotFoundError") {
248
+ return null;
249
+ }
250
+ throw error;
251
+ }
252
+ }
253
+ };
254
+ var EthersAddressResolver = (_class = class {
255
+ constructor(client, context, expectedRuntimeCodeHash) {;_class.prototype.__init.call(this);
256
+ this.client = client;
257
+ this.expectedRuntimeCodeHash = expectedRuntimeCodeHash;
258
+ this.#context = Object.freeze({
259
+ ...context,
260
+ registryAddress: getAddress(context.registryAddress)
261
+ });
262
+ check(BigInt(context.registryAddress) !== 0n, "invalid registry address");
263
+ }
264
+ #context;
265
+ __init() {this.lookup = async (ownerAddress) => {
266
+ await chain(this.client, this.#context.chainId);
267
+ if (this.expectedRuntimeCodeHash) {
268
+ const code = await this.client.getCode(this.#context.registryAddress);
269
+ check(
270
+ code !== "0x" && _ethers.keccak256.call(void 0, code) === this.expectedRuntimeCodeHash,
271
+ "registry runtime profile mismatch"
272
+ );
273
+ }
274
+ const block = await this.client.getBlock("latest");
275
+ check(block && block.hash, "invalid registry block");
276
+ const contract = new (0, _ethers.Contract)(
277
+ this.#context.registryAddress,
278
+ _contracts.invisiAddressRegistryAbi,
279
+ this.client
280
+ );
281
+ const registered = await contract.getFunction("isRegistered")(ownerWord(ownerAddress), {
282
+ blockTag: block.number
283
+ });
284
+ if (!registered) return null;
285
+ const [keys] = await contract.getFunction("receivingKeysOf")(ownerWord(ownerAddress), {
286
+ blockTag: block.number
287
+ });
288
+ check(
289
+ await _asyncOptionalChain([(await this.client.getBlock(block.number)), 'optionalAccess', async _3 => _3.hash]) === block.hash,
290
+ "canonical registry read changed"
291
+ );
292
+ return _address.ReceivingAddress.from({
293
+ ownerAddress,
294
+ viewingPublicKey: _ethers.getBytes.call(void 0, keys.viewingPublicKey),
295
+ clueKey: _ethers.getBytes.call(void 0, keys.clueKey)
296
+ }).getReceivingKeys();
297
+ }}
298
+ }, _class);
299
+ var EthersFundingSigner = class _EthersFundingSigner {
300
+ constructor(signer, chainId, address) {
301
+ this.signer = signer;
302
+ this.chainId = chainId;
303
+ this.address = getAddress(address);
304
+ }
305
+
306
+ static async create(signer, chainId) {
307
+ return new _EthersFundingSigner(signer, chainId, getAddress(await signer.getAddress()));
308
+ }
309
+ async signTypedData(data) {
310
+ const copied = structuredClone(data);
311
+ check(
312
+ BigInt(copied.domain.chainId) === this.chainId,
313
+ "funding typed-data chain mismatch"
314
+ );
315
+ check(
316
+ getAddress(await this.signer.getAddress()) === this.address,
317
+ "funding signer address mismatch"
318
+ );
319
+ if (this.signer.provider) await chain(this.signer.provider, this.chainId);
320
+ return await this.signer.signTypedData(
321
+ copied.domain,
322
+ fundingTypes(copied),
323
+ copied.message
324
+ );
325
+ }
326
+ };
327
+ var EthersFundingVerifier = class {
328
+ constructor(client, chainId) {
329
+ this.client = client;
330
+ this.chainId = chainId;
331
+ }
332
+ async verifyTypedData(data) {
333
+ const copied = structuredClone(data);
334
+ check(
335
+ BigInt(copied.domain.chainId) === this.chainId,
336
+ "funding typed-data chain mismatch"
337
+ );
338
+ await chain(this.client, this.chainId);
339
+ const address = getAddress(copied.address);
340
+ if (await this.client.getCode(address) === "0x") {
341
+ try {
342
+ return getAddress(
343
+ _ethers.verifyTypedData.call(void 0,
344
+ copied.domain,
345
+ fundingTypes(copied),
346
+ copied.message,
347
+ copied.signature
348
+ )
349
+ ) === address;
350
+ } catch (e) {
351
+ return false;
352
+ }
353
+ }
354
+ try {
355
+ return await new (0, _ethers.Contract)(address, erc1271Abi, this.client).getFunction(
356
+ "isValidSignature"
357
+ )(
358
+ _ethers.TypedDataEncoder.hash(copied.domain, fundingTypes(copied), copied.message),
359
+ copied.signature
360
+ ) === "0x1626ba7e";
361
+ } catch (error) {
362
+ if (_ethers.isError.call(void 0, error, "CALL_EXCEPTION")) return false;
363
+ throw error;
364
+ }
365
+ }
366
+ };
367
+
368
+
369
+
370
+
371
+
372
+
373
+ exports.EthersChainReader = EthersChainReader; exports.EthersAddressResolver = EthersAddressResolver; exports.EthersFundingSigner = EthersFundingSigner; exports.EthersFundingVerifier = EthersFundingVerifier;
374
+ //# sourceMappingURL=chunk-7F7ZZW3L.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/invisi-sdk-ts/invisi-sdk-ts/packages/sdk/dist/chunk-7F7ZZW3L.cjs","../src/integrations/ethers.ts"],"names":[],"mappings":"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","file":"/home/runner/work/invisi-sdk-ts/invisi-sdk-ts/packages/sdk/dist/chunk-7F7ZZW3L.cjs","sourcesContent":[null,"import { ReceivingAddress, type ReceivingKeyLookup } from \"@invisi-labs/core/address\";\nimport type {\n CanonicalBlock,\n CanonicalReceipt,\n ChainReader,\n DeploymentContext,\n FactoryReader,\n RegistryContext,\n RegistryReader,\n} from \"@invisi-labs/protocol\";\nimport type { Address, Hex } from \"@invisi-labs/protocol/contracts\";\nimport {\n invisiAddressRegistryAbi,\n invisiFactoryAbi,\n invisiProtocolAbi,\n} from \"@invisi-labs/protocol/contracts\";\nimport {\n Contract,\n getAddress as ethersAddress,\n getBytes,\n Interface,\n isError,\n keccak256,\n TypedDataEncoder,\n verifyTypedData,\n zeroPadValue,\n type Provider,\n type Signer,\n} from \"ethers\";\nimport type {\n FundingAuthorizationVerifier,\n FundingSigner,\n FundingTypedData,\n} from \"../transactions/operation-types\";\nconst getAddress = (value: string): Address => ethersAddress(value) as Address;\n\nconst erc1271Abi = [\n \"function isValidSignature(bytes32 hash, bytes signature) view returns (bytes4)\",\n];\nfunction fundingTypes(data: FundingTypedData) {\n const types = Object.fromEntries(\n Object.entries(data.types).map(([name, fields]) => [name, [...fields]])\n );\n check(\n TypedDataEncoder.from(types).primaryType === data.primaryType,\n \"funding typed-data primary type mismatch\"\n );\n return types;\n}\n\nfunction check(value: unknown, message: string): asserts value {\n if (!value) {\n throw new Error(message);\n }\n}\n\nasync function chain(client: Provider, expected: bigint): Promise<void> {\n check((await client.getNetwork()).chainId === expected, \"EVM client chain mismatch\");\n}\n\nfunction number(value: unknown): bigint {\n check(typeof value === \"bigint\" && value >= 0n, \"invalid chain integer\");\n return value;\n}\n\nfunction boolean(value: unknown): boolean {\n check(typeof value === \"boolean\", \"invalid chain boolean\");\n return value;\n}\n\nfunction word(value: unknown): Hex {\n check(typeof value === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(value), \"invalid chain word\");\n return value.toLowerCase() as Hex;\n}\n\nfunction ownerWord(value: Hex): Hex {\n // Public owners use canonical EVM addresses; registry slots remain bytes32.\n const identity = ReceivingAddress.fromIdentity(value).ownerAddress;\n return zeroPadValue(identity, 32) as Hex;\n}\n\n/** Reads exact block numbers; higher layers additionally enforce post-read snapshot barriers. */\nexport class EthersChainReader implements ChainReader, RegistryReader, FactoryReader {\n constructor(readonly client: Provider) {}\n\n async getChainId() {\n return (await this.client.getNetwork()).chainId;\n }\n\n async isValidRegistrationSignature(\n owner: Address,\n digest: Hex,\n signature: Hex\n ): Promise<boolean> {\n try {\n const result = await this.client.call({\n to: getAddress(owner),\n data: new Interface(erc1271Abi).encodeFunctionData(\"isValidSignature\", [\n digest,\n signature,\n ]),\n });\n // SignatureChecker compares the complete first return word, including padding.\n return (\n result.length >= 66 &&\n result.slice(0, 66).toLowerCase() === \"0x1626ba7e\" + \"00\".repeat(28)\n );\n } catch (error) {\n if (isError(error, \"CALL_EXCEPTION\")) return false;\n throw error;\n }\n }\n\n async getProtocolAddressRegistry(address: Address): Promise<Address> {\n return getAddress(\n await new Contract(getAddress(address), invisiProtocolAbi, this.client).getFunction(\n \"addressRegistry\"\n )()\n );\n }\n\n async getProtocolVersion(address: Address): Promise<bigint> {\n return BigInt(\n await new Contract(getAddress(address), invisiProtocolAbi, this.client).getFunction(\n \"VERSION\"\n )()\n );\n }\n\n async getCode(address: Address): Promise<Hex> {\n return (await this.client.getCode(getAddress(address))) as Hex;\n }\n\n async getFactoryInstanceAddress(factory: Address, salt: Hex): Promise<Address> {\n return getAddress(\n await new Contract(factory, invisiFactoryAbi, this.client).getFunction(\n \"getInstanceAddress\"\n )(salt)\n );\n }\n async isFactoryInstance(factory: Address, instance: Address): Promise<boolean> {\n return boolean(\n await new Contract(factory, invisiFactoryAbi, this.client).getFunction(\"isInstance\")(\n instance\n )\n );\n }\n async getInstanceFactory(instance: Address): Promise<Address> {\n return getAddress(\n await new Contract(instance, invisiProtocolAbi, this.client).getFunction(\"factory\")()\n );\n }\n async getLatestBlockNumber() {\n return BigInt(await this.client.getBlockNumber());\n }\n\n async getBlock(blockNumber: bigint): Promise<CanonicalBlock> {\n const block = await this.client.getBlock(blockNumber);\n check(\n block && BigInt(block.number) === blockNumber && block.hash && block.parentHash,\n \"invalid canonical block\"\n );\n return {\n number: BigInt(block.number),\n hash: word(block.hash),\n parentHash: word(block.parentHash),\n timestamp: number(BigInt(block.timestamp)),\n };\n }\n\n private async read(\n context: { chainId: bigint },\n address: Address,\n abi: ConstructorParameters<typeof Interface>[0],\n functionName: string,\n args: readonly unknown[],\n block?: CanonicalBlock\n ): Promise<unknown> {\n await chain(this.client, context.chainId);\n if (block) {\n check(\n (await this.getBlock(block.number)).hash === block.hash,\n \"canonical read block mismatch\"\n );\n }\n return new Contract(getAddress(address), abi, this.client).getFunction(functionName)(\n ...args,\n ...(block ? [{ blockTag: block.number }] : [])\n );\n }\n\n async getFundingNonce(context: DeploymentContext, payer: Address, block: CanonicalBlock) {\n return number(\n await this.read(\n context,\n context.protocolAddress,\n invisiProtocolAbi,\n \"nonces\",\n [getAddress(payer)],\n block\n )\n );\n }\n\n async getRegistryNonce(context: RegistryContext, ownerAddress: Hex, block: CanonicalBlock) {\n return number(\n await this.read(\n context,\n context.registryAddress,\n invisiAddressRegistryAbi,\n \"nonceOf\",\n [ownerWord(ownerAddress)],\n block\n )\n );\n }\n\n async isKnownRoot(\n context: DeploymentContext,\n treeId: bigint,\n root: Hex,\n block: CanonicalBlock\n ) {\n return boolean(\n await this.read(\n context,\n context.protocolAddress,\n invisiProtocolAbi,\n \"rootHistory\",\n [number(treeId), word(root)],\n block\n )\n );\n }\n\n async isSpent(context: DeploymentContext, nullifiers: readonly Hex[], block: CanonicalBlock) {\n const copied = nullifiers.map(word);\n const result: boolean[] = [];\n for (let offset = 0; offset < copied.length; offset += 32) {\n result.push(\n ...(await Promise.all(\n copied\n .slice(offset, offset + 32)\n .map((nf) =>\n this.read(\n context,\n context.protocolAddress,\n invisiProtocolAbi,\n \"isNullifierSpent\",\n [nf],\n block\n ).then(boolean)\n )\n ))\n );\n }\n return result;\n }\n\n async getTransaction(hash: Hex) {\n try {\n const tx = await this.client.getTransaction(word(hash));\n if (!tx?.to) {\n return null;\n }\n return {\n transactionHash: word(tx.hash),\n to: getAddress(tx.to),\n from: getAddress(tx.from),\n nonce: number(BigInt(tx.nonce)),\n data: tx.data as Hex,\n value: number(tx.value),\n };\n } catch (error) {\n if (error instanceof Error && error.name === \"TransactionNotFoundError\") {\n return null;\n }\n throw error;\n }\n }\n\n async getReceipt(hash: Hex): Promise<CanonicalReceipt | null> {\n try {\n const receipt = await this.client.getTransactionReceipt(word(hash));\n if (!receipt) return null;\n const block = await this.getBlock(BigInt(receipt.blockNumber));\n check(block.hash === receipt.blockHash, \"receipt block is no longer canonical\");\n return {\n block,\n transactionHash: word(receipt.hash),\n status: receipt.status === 1 ? \"success\" : \"reverted\",\n logs: receipt.logs.map((log) => {\n check(\n !log.removed && log.transactionHash === receipt.hash && log.index !== null,\n \"invalid receipt log\"\n );\n return {\n address: getAddress(log.address),\n data: log.data as Hex,\n topics: [...log.topics] as Hex[],\n transactionHash: word(log.transactionHash),\n logIndex: log.index,\n };\n }),\n };\n } catch (error) {\n if (error instanceof Error && error.name === \"TransactionReceiptNotFoundError\") {\n return null;\n }\n throw error;\n }\n }\n}\n\n/** Resolves only the explicitly selected registry. Validates canonical public key encodings. */\nexport class EthersAddressResolver {\n readonly #context: Readonly<RegistryContext>;\n\n constructor(\n readonly client: Provider,\n context: RegistryContext,\n readonly expectedRuntimeCodeHash?: Hex\n ) {\n this.#context = Object.freeze({\n ...context,\n registryAddress: getAddress(context.registryAddress),\n });\n check(BigInt(context.registryAddress) !== 0n, \"invalid registry address\");\n }\n\n readonly lookup: ReceivingKeyLookup = async (ownerAddress) => {\n await chain(this.client, this.#context.chainId);\n if (this.expectedRuntimeCodeHash) {\n const code = await this.client.getCode(this.#context.registryAddress);\n check(\n code !== \"0x\" && keccak256(code) === this.expectedRuntimeCodeHash,\n \"registry runtime profile mismatch\"\n );\n }\n const block = await this.client.getBlock(\"latest\");\n check(block && block.hash, \"invalid registry block\");\n const contract = new Contract(\n this.#context.registryAddress,\n invisiAddressRegistryAbi,\n this.client\n );\n const registered = await contract.getFunction(\"isRegistered\")(ownerWord(ownerAddress), {\n blockTag: block.number,\n });\n if (!registered) return null;\n const [keys] = await contract.getFunction(\"receivingKeysOf\")(ownerWord(ownerAddress), {\n blockTag: block.number,\n });\n check(\n (await this.client.getBlock(block.number))?.hash === block.hash,\n \"canonical registry read changed\"\n );\n return ReceivingAddress.from({\n ownerAddress,\n viewingPublicKey: getBytes(keys.viewingPublicKey),\n clueKey: getBytes(keys.clueKey),\n }).getReceivingKeys();\n };\n}\n\nexport class EthersFundingSigner implements FundingSigner {\n readonly address: Address;\n constructor(\n readonly signer: Signer,\n readonly chainId: bigint,\n address: Address\n ) {\n this.address = getAddress(address);\n }\n static async create(signer: Signer, chainId: bigint): Promise<EthersFundingSigner> {\n return new EthersFundingSigner(signer, chainId, getAddress(await signer.getAddress()));\n }\n async signTypedData(data: FundingTypedData): Promise<Hex> {\n const copied = structuredClone(data);\n check(\n BigInt(copied.domain.chainId as bigint) === this.chainId,\n \"funding typed-data chain mismatch\"\n );\n check(\n getAddress(await this.signer.getAddress()) === this.address,\n \"funding signer address mismatch\"\n );\n if (this.signer.provider) await chain(this.signer.provider, this.chainId);\n return (await this.signer.signTypedData(\n copied.domain,\n fundingTypes(copied),\n copied.message\n )) as Hex;\n }\n}\n\nexport class EthersFundingVerifier implements FundingAuthorizationVerifier {\n constructor(\n readonly client: Provider,\n readonly chainId: bigint\n ) {}\n async verifyTypedData(\n data: FundingTypedData & { address: Address; signature: Hex }\n ): Promise<boolean> {\n const copied = structuredClone(data);\n check(\n BigInt(copied.domain.chainId as bigint) === this.chainId,\n \"funding typed-data chain mismatch\"\n );\n await chain(this.client, this.chainId);\n const address = getAddress(copied.address);\n if ((await this.client.getCode(address)) === \"0x\") {\n try {\n return (\n getAddress(\n verifyTypedData(\n copied.domain,\n fundingTypes(copied),\n copied.message,\n copied.signature\n )\n ) === address\n );\n } catch {\n return false;\n }\n }\n try {\n return (\n (await new Contract(address, erc1271Abi, this.client).getFunction(\n \"isValidSignature\"\n )(\n TypedDataEncoder.hash(copied.domain, fundingTypes(copied), copied.message),\n copied.signature\n )) === \"0x1626ba7e\"\n );\n } catch (error) {\n if (isError(error, \"CALL_EXCEPTION\")) return false;\n throw error;\n }\n }\n}\n"]}