@invisi-labs/protocol 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +37 -80
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -20
- package/dist/index.d.ts +12 -20
- package/dist/index.js +25 -71
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/AddressRegistry.ts","../src/RegistrationOperation.ts","../src/contracts/abis/InvisiProtocol.ts","../src/contracts/abis/InvisiFactory.ts","../src/contracts/abis/InvisiAddressRegistry.ts","../src/registry.ts","../src/credit-create.ts","../src/validation.ts","../src/credit-lifecycle.ts","../src/funds.ts","../src/Protocol.ts","../src/TokenProtocol.ts","../src/verify.ts","../src/withdrawal.ts","../src/witness.ts","../src/witness-layouts.json","../src/factory.ts"],"sourcesContent":["export * from \"./AddressRegistry\";\nexport * from \"./credit-create\";\nexport * from \"./credit-lifecycle\";\nexport * from \"./funds\";\nexport * from \"./interfaces\";\nexport * from \"./Protocol\";\nexport * from \"./registry\";\nexport * from \"./validation\";\nexport * from \"./verify\";\nexport * from \"./withdrawal\";\nexport * from \"./witness\";\n\nexport * from \"./factory\";\nexport * from \"./RegistrationOperation\";\nexport * from \"./TokenProtocol\";\n","import type { Hex } from \"./contracts\";\nimport { getAddress, keccak256 } from \"ethers\";\n\nimport {\n MissingCapabilityError,\n ReceivingAddress,\n type ReceivingKeyLookup,\n} from \"@invisi-labs/core\";\nimport {\n RegistrationOperation,\n type RegistrationPreparation,\n type RegistryReader,\n} from \"./RegistrationOperation\";\nimport {\n buildRegistrationCalldata,\n registrationTypedData,\n registrationDigest,\n type AddressRegistration,\n type RegistrationOptions,\n type RegistryContext,\n} from \"./registry\";\n\nexport interface AddressRegistryOptions {\n lookup?: ReceivingKeyLookup;\n expectedRuntimeCodeHash?: Hex;\n}\n\n/** Independent registry deployment and nonce domain, selected by the application. */\nexport class AddressRegistry {\n readonly context: Readonly<RegistryContext>;\n readonly #lookup: ReceivingKeyLookup | undefined;\n readonly expectedRuntimeCodeHash: Hex | undefined;\n\n constructor(context: RegistryContext, options: AddressRegistryOptions = {}) {\n if (\n typeof context.chainId !== \"bigint\" ||\n context.chainId < 0n ||\n context.chainId >= 1n << 64n ||\n BigInt(getAddress(context.registryAddress) as Hex) === 0n\n ) {\n throw new Error(\"invalid registry context\");\n }\n this.context = Object.freeze({\n ...context,\n registryAddress: getAddress(context.registryAddress) as Hex,\n });\n this.#lookup = options.lookup;\n this.expectedRuntimeCodeHash = options.expectedRuntimeCodeHash?.toLowerCase() as\n Hex | undefined;\n if (\n this.expectedRuntimeCodeHash &&\n !/^0x[0-9a-f]{64}$/.test(this.expectedRuntimeCodeHash)\n ) {\n throw new Error(\"invalid registry runtime profile\");\n }\n Object.freeze(this);\n }\n\n async validateDeployment(\n reader: Pick<RegistryReader, \"getChainId\" | \"getCode\">\n ): Promise<void> {\n if (!this.expectedRuntimeCodeHash) {\n throw new MissingCapabilityError(\"trusted registry deployment profile\");\n }\n if ((await reader.getChainId()) !== this.context.chainId) {\n throw new Error(\"registry chain mismatch\");\n }\n const code = await reader.getCode(this.context.registryAddress);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(code) ||\n (keccak256(code) as Hex) !== this.expectedRuntimeCodeHash\n ) {\n throw new Error(\"registry runtime profile mismatch\");\n }\n }\n\n prepareRegistration(options: RegistrationPreparation): Promise<RegistrationOperation> {\n return RegistrationOperation.prepare(this, options);\n }\n\n async resolve(address: string): Promise<string> {\n const receiving = ReceivingAddress.parse(address);\n if (receiving.kind === \"short\" && !this.#lookup) {\n throw new MissingCapabilityError(\"registry reader\");\n }\n return (await receiving.resolve(this.#lookup)).toString();\n }\n\n typedData(registration: AddressRegistration, options?: RegistrationOptions) {\n return registrationTypedData(this.context, registration, options);\n }\n\n digest(registration: AddressRegistration, options?: RegistrationOptions) {\n return registrationDigest(this.context, registration, options);\n }\n\n buildCall(\n registration: AddressRegistration,\n signature: `0x${string}`,\n options?: RegistrationOptions\n ) {\n return buildRegistrationCalldata(this.context, registration, signature, options);\n }\n}\n","import type { Address, Hex } from \"./contracts\";\nimport { hexlify, Interface, getBytes, verifyTypedData, type Signer } from \"ethers\";\n\nimport { invisiAddressRegistryAbi } from \"./contracts\";\nimport { ReceivingAddress, type Wallet } from \"@invisi-labs/core\";\nimport type { AddressRegistry } from \"./AddressRegistry\";\nimport type { CanonicalBlock, ChainReader, TransactionCall } from \"./interfaces\";\nimport {\n buildRegistrationCalldata,\n registrationTypedData,\n registrationDigest,\n type AddressRegistration,\n type RegistryContext,\n} from \"./registry\";\n\nexport interface RegistryReader extends Pick<\n ChainReader,\n \"getChainId\" | \"getCode\" | \"getBlock\" | \"getLatestBlockNumber\" | \"getTransaction\" | \"getReceipt\"\n> {\n /** Validate arbitrary ERC-1271 bytes for a contract owner; transport errors propagate. */\n isValidRegistrationSignature?(owner: Address, digest: Hex, signature: Hex): Promise<boolean>;\n getRegistryNonce(\n context: RegistryContext,\n walletIdentity: Hex,\n block: CanonicalBlock\n ): Promise<bigint>;\n}\n\nexport interface RegistrationPreparation {\n wallet: Wallet;\n reader: RegistryReader;\n signer?: Signer;\n deadline?: bigint;\n update?: boolean;\n}\n\nexport type RegistrationStatus =\n | \"prepared\"\n | \"ready\"\n | \"submitted\"\n | \"confirmed\"\n | \"uncertain\"\n | \"failed\"\n | \"expired\"\n | \"reorged\";\n\ninterface RegistrationPlan {\n id: string;\n context: RegistryContext;\n registration: AddressRegistration;\n update: boolean;\n}\n\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) {\n throw new Error(message);\n }\n}\n\nexport class RegistrationOperation {\n readonly #registry: AddressRegistry;\n readonly #runtime: RegistrationPreparation;\n readonly #plan: RegistrationPlan;\n readonly #signature: Hex | undefined;\n readonly #hash: Hex | undefined;\n readonly #anchor: CanonicalBlock | undefined;\n readonly status: RegistrationStatus;\n\n private constructor(\n registry: AddressRegistry,\n runtime: RegistrationPreparation,\n plan: RegistrationPlan,\n status: RegistrationStatus,\n signature?: Hex,\n hash?: Hex,\n anchor?: CanonicalBlock\n ) {\n this.#registry = registry;\n this.#runtime = { ...runtime };\n this.#plan = structuredClone(plan);\n this.status = status;\n this.#signature = signature;\n this.#hash = hash;\n this.#anchor = anchor ? { ...anchor } : undefined;\n Object.freeze(this);\n }\n\n static async prepare(\n registry: AddressRegistry,\n options: RegistrationPreparation\n ): Promise<RegistrationOperation> {\n const runtime = { ...options };\n const update = options.update ?? false;\n check(typeof update === \"boolean\", \"update must be boolean\");\n await registry.validateDeployment(runtime.reader);\n const block = await runtime.reader.getBlock(await runtime.reader.getLatestBlockNumber());\n const context = { ...registry.context, now: block.timestamp };\n const nonce = await runtime.reader.getRegistryNonce(\n context,\n runtime.wallet.walletIdentity,\n block\n );\n check(\n typeof nonce === \"bigint\" && nonce >= 0n && nonce < (1n << 64n) - 1n,\n \"invalid or exhausted registry nonce\"\n );\n check(\n update ? nonce > 0n : nonce === 0n,\n update ? \"wallet is not registered\" : \"wallet is already registered; prepare an update\"\n );\n const address = ReceivingAddress.parse(await registry.resolve(runtime.wallet.getAddress()));\n const keys = address.getReceivingKeys();\n const registration: AddressRegistration = {\n walletIdentity: runtime.wallet.walletIdentity,\n keys: {\n viewingPublicKey: hexlify(keys.viewingPublicKey) as Hex,\n clueKey: hexlify(keys.clueKey) as Hex,\n },\n nonce,\n deadline: options.deadline ?? block.timestamp + 300n,\n };\n registrationTypedData(context, registration, { update, expectedNonce: nonce });\n check(\n (await runtime.reader.getBlock(block.number)).hash === block.hash,\n \"canonical registry block changed while preparing\"\n );\n return new RegistrationOperation(\n registry,\n runtime,\n { id: crypto.randomUUID(), context, registration, update },\n \"prepared\"\n );\n }\n\n get id(): string {\n return this.#plan.id;\n }\n\n preview() {\n return {\n id: this.id,\n status: this.status,\n chainId: this.#plan.context.chainId,\n registryAddress: this.#plan.context.registryAddress,\n ...structuredClone(this.#plan.registration),\n update: this.#plan.update,\n };\n }\n\n /** Sign with ethers, or attach externally obtained ERC-1271 signature bytes. */\n async authorize(\n options: { signal?: AbortSignal; signature?: Hex } = {}\n ): Promise<RegistrationOperation> {\n check(this.status === \"prepared\", \"registry operation is not awaiting authorization\");\n options.signal?.throwIfAborted();\n await this.validateFreshness();\n options.signal?.throwIfAborted();\n let signature = options.signature;\n if (signature === undefined) {\n const signer = this.#runtime.signer;\n check(signer, \"registry signer capability is missing\");\n check(\n BigInt(await signer.getAddress()) ===\n BigInt(this.#plan.registration.walletIdentity),\n \"registry signer does not match wallet owner\"\n );\n const typed = this.typedData();\n signature = (await signer.signTypedData(\n typed.domain,\n typed.types,\n typed.message\n )) as Hex;\n }\n check(\n /^0x(?:[a-fA-F0-9]{2})+$/.test(signature),\n \"registry signature must be nonempty hexadecimal bytes\"\n );\n const p = this.#plan;\n const owner = p.registration.walletIdentity as Address;\n // Match the protocol's SignatureChecker: canonical ECDSA first, including\n // delegated EOAs with code, then the contract-owner ERC-1271 fallback.\n let valid = false;\n try {\n const bytes = getBytes(signature);\n const typed = this.typedData();\n valid =\n bytes.length === 65 &&\n (bytes[64] === 27 || bytes[64] === 28) &&\n BigInt(verifyTypedData(typed.domain, typed.types, typed.message, signature)) ===\n BigInt(owner);\n } catch {\n valid = false;\n }\n if (!valid) {\n const code = await this.#runtime.reader.getCode(owner);\n check(/^0x(?:[a-fA-F0-9]{2})*$/.test(code), \"invalid owner contract code\");\n check(code !== \"0x\", \"invalid EOA registry signature\");\n const verify = this.#runtime.reader.isValidRegistrationSignature;\n check(verify, \"ERC-1271 registry signature verification capability is missing\");\n check(\n await verify.call(\n this.#runtime.reader,\n owner,\n registrationDigest(p.context, p.registration, { update: p.update }),\n signature\n ),\n \"invalid ERC-1271 registry signature\"\n );\n }\n options.signal?.throwIfAborted();\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n this.#plan,\n \"ready\",\n signature\n );\n }\n\n /** Empty signatures require the transaction sender to be the wallet owner. */\n async authorizeDirect(): Promise<RegistrationOperation> {\n check(this.status === \"prepared\", \"registry operation is not awaiting authorization\");\n await this.validateFreshness();\n return new RegistrationOperation(this.#registry, this.#runtime, this.#plan, \"ready\", \"0x\");\n }\n\n typedData() {\n const p = this.#plan;\n return registrationTypedData(p.context, p.registration, {\n update: p.update,\n expectedNonce: p.registration.nonce,\n });\n }\n\n private call(): TransactionCall {\n check(this.#signature !== undefined, \"registry signature is missing\");\n const p = this.#plan;\n const result = buildRegistrationCalldata(p.context, p.registration, this.#signature, {\n update: p.update,\n expectedNonce: p.registration.nonce,\n });\n return { to: result.to, data: result.callData, value: result.value };\n }\n\n async exportTransaction(): Promise<TransactionCall> {\n check(\n this.#signature !== undefined && this.status !== \"prepared\",\n \"registry operation is not ready\"\n );\n await this.validateFreshness();\n return this.call();\n }\n\n private async validateFreshness(): Promise<void> {\n await this.#registry.validateDeployment(this.#runtime.reader);\n const block = await this.#runtime.reader.getBlock(\n await this.#runtime.reader.getLatestBlockNumber()\n );\n const p = this.#plan;\n check(block.timestamp <= p.registration.deadline, \"registry operation has expired\");\n check(\n (await this.#runtime.reader.getRegistryNonce(\n p.context,\n p.registration.walletIdentity,\n block\n )) === p.registration.nonce,\n \"registry nonce changed; prepare again\"\n );\n check(\n (await this.#runtime.reader.getBlock(block.number)).hash === block.hash,\n \"canonical registry block changed during authorization\"\n );\n }\n\n /** Associate a signed/broadcast transaction; ethers owns sending and receipt waiting. */\n trackTransaction(transactionHash: string): RegistrationOperation {\n check(/^0x[a-fA-F0-9]{64}$/.test(transactionHash), \"invalid registry transaction hash\");\n check(\n this.#signature !== undefined && [\"ready\", \"uncertain\"].includes(this.status),\n \"registry operation is not ready\"\n );\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n this.#plan,\n \"uncertain\",\n this.#signature,\n transactionHash as Hex\n );\n }\n\n async reconcile(\n options: { transactionHash?: Hex; signal?: AbortSignal } = {}\n ): Promise<RegistrationOperation> {\n options.signal?.throwIfAborted();\n const { reader } = this.#runtime;\n const p = this.#plan;\n await this.#registry.validateDeployment(reader);\n if (\n this.#anchor &&\n (await reader.getBlock(this.#anchor.number)).hash !== this.#anchor.hash\n ) {\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n p,\n \"reorged\",\n this.#signature,\n this.#hash\n );\n }\n const hash = options.transactionHash ?? this.#hash;\n const receipt = hash ? await reader.getReceipt(hash) : null;\n if (receipt) {\n check(\n receipt.transactionHash === hash &&\n (await reader.getBlock(receipt.block.number)).hash === receipt.block.hash,\n \"registry receipt is not canonical\"\n );\n const transaction = await reader.getTransaction(hash!);\n const call = this.call();\n check(\n transaction &&\n transaction.transactionHash === hash &&\n transaction.to.toLowerCase() === call.to.toLowerCase() &&\n transaction.data.toLowerCase() === call.data.toLowerCase() &&\n transaction.value === 0n &&\n (this.#signature !== \"0x\" ||\n BigInt(transaction.from) === BigInt(p.registration.walletIdentity)),\n \"registry transaction differs from frozen request\"\n );\n check(\n receipt.status === \"success\" || receipt.status === \"reverted\",\n \"registry execution status is missing\"\n );\n if (receipt.status === \"success\") {\n const found = receipt.logs.some((log) => {\n if (\n log.address.toLowerCase() !== p.context.registryAddress.toLowerCase() ||\n log.transactionHash !== hash\n ) {\n return false;\n }\n try {\n const event = ((decoded) => ({\n eventName: decoded!.name,\n args: decoded!.args.toObject(),\n }))(\n new Interface(invisiAddressRegistryAbi).parseLog({\n data: log.data,\n topics: log.topics as never,\n })\n );\n return (\n event.eventName === \"ReceivingKeysSet\" &&\n BigInt(event.args.walletIdentity) ===\n BigInt(p.registration.walletIdentity) &&\n event.args.viewingPublicKey.toLowerCase() ===\n p.registration.keys.viewingPublicKey.toLowerCase() &&\n event.args.clueKey.toLowerCase() ===\n p.registration.keys.clueKey.toLowerCase() &&\n event.args.nextNonce === p.registration.nonce + 1n\n );\n } catch {\n return false;\n }\n });\n check(found, \"registry receipt has no matching key update event\");\n check(\n (await reader.getBlock(receipt.block.number)).hash === receipt.block.hash,\n \"registry block changed during confirmation\"\n );\n options.signal?.throwIfAborted();\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n p,\n \"confirmed\",\n this.#signature,\n hash,\n receipt.block\n );\n }\n }\n const head = await reader.getBlock(await reader.getLatestBlockNumber());\n const nonce = await reader.getRegistryNonce(p.context, p.registration.walletIdentity, head);\n check(\n (await reader.getBlock(head.number)).hash === head.hash,\n \"canonical registry block changed during reconciliation\"\n );\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n p,\n head.timestamp > p.registration.deadline\n ? \"expired\"\n : nonce !== p.registration.nonce\n ? \"failed\"\n : \"uncertain\",\n this.#signature,\n hash\n );\n }\n\n toJSON() {\n return {\n id: this.id,\n kind: this.#plan.update ? \"update-receiving-keys\" : \"register-receiving-keys\",\n status: this.status,\n };\n }\n\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","// AUTO-GENERATED from invisi-protocol build artifacts. Run pnpm sync:abis.\nexport const invisiProtocolAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct InstanceParams\",\n \"components\": [\n {\n \"name\": \"factory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"globalEmergency\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"emergencyAdmin\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"verifierRouter\",\n \"type\": \"address\",\n \"internalType\": \"contract IVerifierRouter\"\n }\n ]\n },\n {\n \"name\": \"_screener\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_addressRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CHAIN_ID\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"FUND_SHIELD_TYPEHASH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"FUND_TRANSACT_TYPEHASH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"activeNoteTreeId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addressRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IAddressRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelCredit\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CancelCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"source\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.InputSource\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"circuitPaused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createCredit\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreateCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creditDraw\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreditDrawParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"remainderCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"expiries\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n },\n {\n \"name\": \"recoveryAmounts\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"totalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyAdmin\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"factory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getNoteTreeNextLeafIndex\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getNoteTreeRoot\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTreeCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"count\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalEmergency\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"invalidateNonce\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isCommitmentPaid\",\n \"inputs\": [\n {\n \"name\": \"noteCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isNullifierSpent\",\n \"inputs\": [\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isTreeFull\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pauseCircuit\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rootHistory\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"screener\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setScreener\",\n \"inputs\": [\n {\n \"name\": \"newScreener\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"shield\",\n \"inputs\": [\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.ShieldParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.ShieldOutput[]\",\n \"components\": [\n {\n \"name\": \"identity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"topUpCredit\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.TopUpCreditParams\",\n \"components\": [\n {\n \"name\": \"creation\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreateCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"creditSource\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.InputSource\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"creditNullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousExpiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transact\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"requests\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.TransactRequest[]\",\n \"components\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CrossTreeTransactParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"funding\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transact\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"r\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.TransactRequest\",\n \"components\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CrossTreeTransactParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"funding\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpauseCircuit\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"verifierRouter\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IVerifierRouter\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"BatchOutputs\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"startLeafIndex\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"firstOutputOffset\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"tokens\",\n \"type\": \"address[]\",\n \"indexed\": false,\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"commitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"packedDeliveries\",\n \"type\": \"bytes\",\n \"indexed\": false,\n \"internalType\": \"bytes\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BatchRequest\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"requestIndex\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"capacity\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"depositAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"statementHash\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CircuitPauseUpdated\",\n \"inputs\": [\n {\n \"name\": \"paused\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CommitmentsInserted\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"startLeafIndex\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"commitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditCancelled\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"inputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditCreated\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditDraw\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.CreditDrawParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"remainderCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"expiries\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n },\n {\n \"name\": \"recoveryAmounts\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"totalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"remainderLeafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditToppedUp\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.TopUpCreditParams\",\n \"components\": [\n {\n \"name\": \"creation\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreateCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"creditSource\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.InputSource\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"creditNullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousExpiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CrossTreeTransact\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"NonceInvalidated\",\n \"inputs\": [\n {\n \"name\": \"signer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newNonce\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PublicDeposit\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"proofHash\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ScreenerUpdated\",\n \"inputs\": [\n {\n \"name\": \"newScreener\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Shield\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"startLeafIndex\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transact\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"inputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TransactAggregated\",\n \"inputs\": [\n {\n \"name\": \"proofHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"requestCount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreeCreated\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AddressScreeningFailed\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ChainIdMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CommitmentAlreadyPaid\",\n \"inputs\": [\n {\n \"name\": \"commitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CreditDrawWindowClosed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DoubleSpend\",\n \"inputs\": [\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpiryInPast\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InexactTokenReceipt\",\n \"inputs\": [\n {\n \"name\": \"requested\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"received\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAddressRegistry\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAggregateBatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAmount\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidBatchSize\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCommitment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreditExpiry\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidDelivery\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidFunding\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidIdentityCommitment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidMerkleRoot\",\n \"inputs\": [\n {\n \"name\": \"root\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNonce\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNullifierKeyHash\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidOwnerIdentityCommitment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPrivateTransferCiphertext\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPrivateTransferContext\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPrivateTransferShape\",\n \"inputs\": [\n {\n \"name\": \"inputs\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"outputs\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidProof\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidReceivingAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShieldContext\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShieldOutputCount\",\n \"inputs\": [\n {\n \"name\": \"outputs\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShortString\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTree\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"LengthMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotEmergencyAdmin\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotGlobalEmergency\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NullifierAlreadySpent\",\n \"inputs\": [\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NullifiersEmpty\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"PrivateTransferExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ShieldExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SignatureExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"StaleRoot\",\n \"inputs\": [\n {\n \"name\": \"root\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringTooLong\",\n \"inputs\": [\n {\n \"name\": \"str\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferFailed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TreeFull\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"WrongPermitToken\",\n \"inputs\": [\n {\n \"name\": \"provided\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expected\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroNullifier\",\n \"inputs\": []\n }\n] as const\n","// AUTO-GENERATED from invisi-protocol build artifacts. Run pnpm sync:abis.\nexport const invisiFactoryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"initialOwner_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"globalEmergency_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"verifierRouter_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creationCodeHash_\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"computeInstanceAddress\",\n \"inputs\": [\n {\n \"name\": \"creationCode\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"initialOwner_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"emergencyAdmin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"screener_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addressRegistry_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creationCodeHash\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deploy\",\n \"inputs\": [\n {\n \"name\": \"creationCode\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"initialOwner_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"emergencyAdmin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"screener_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addressRegistry_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyPauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyPauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyUnpauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyUnpauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getInstanceAddress\",\n \"inputs\": [\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalEmergency\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"instanceCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isInstance\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"verifierRouter\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IVerifierRouter\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyPauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyPauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyUnpauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyUnpauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"InstanceDeployed\",\n \"inputs\": [\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"InstanceAlreadyDeployed\",\n \"inputs\": [\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreationCode\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAnInstance\",\n \"inputs\": [\n {\n \"name\": \"addr\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NotGlobalEmergency\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const\n","// AUTO-GENERATED from invisi-protocol build artifacts. Run pnpm sync:abis.\nexport const invisiAddressRegistryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CHAIN_ID\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isRegistered\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonceOf\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"receivingKeysOf\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"keys\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.ReceivingKeys\",\n \"components\": [\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"registerKeys\",\n \"inputs\": [\n {\n \"name\": \"registration\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.Registration\",\n \"components\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"keys\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.ReceivingKeys\",\n \"components\": [\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateKeys\",\n \"inputs\": [\n {\n \"name\": \"registration\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.Registration\",\n \"components\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"keys\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.ReceivingKeys\",\n \"components\": [\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReceivingKeysSet\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"indexed\": false,\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"nextNonce\",\n \"type\": \"uint64\",\n \"indexed\": false,\n \"internalType\": \"uint64\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyRegistered\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ChainIdMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNonce\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidReceivingKeys\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRegistrationSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShortString\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidWalletIdentity\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NonceExhausted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotRegistered\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RegistrationExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"StringTooLong\",\n \"inputs\": [\n {\n \"name\": \"str\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n }\n] as const\n","import type { Address, Hex } from \"./contracts\";\nimport {\n Contract,\n Interface,\n getAddress,\n getBytes,\n hexlify,\n isHexString,\n TypedDataEncoder,\n toBeHex,\n type ContractRunner,\n} from \"ethers\";\n\nimport { invisiAddressRegistryAbi } from \"./contracts\";\nimport { ReceivingAddress, decodeAddress, type ReceivingKeyLookup } from \"@invisi-labs/core\";\n\nexport interface RegistryContext {\n chainId: bigint;\n registryAddress: Address;\n /** Optional explicit wall-clock value in seconds. Equality with deadline is valid. */\n now?: bigint;\n}\nexport interface RegistryReceivingKeys {\n viewingPublicKey: Hex;\n clueKey: Hex;\n}\nexport interface AddressRegistration {\n /** Nonzero EVM owner: 20 bytes or canonical zero-padded bytes32. */\n walletIdentity: Hex;\n keys: RegistryReceivingKeys;\n /** The current registry nonce expected for this operation. */\n nonce: bigint;\n deadline: bigint;\n}\nexport interface RegistrationOptions {\n update?: boolean;\n /** Check a separately obtained current nonce before authorizing or encoding. */\n expectedNonce?: bigint;\n}\nexport interface RegistrationCalldata {\n to: Address;\n callData: Hex;\n value: 0n;\n}\nconst MAX_NONCE = (1n << 64n) - 1n;\nfunction uint64(value: bigint, name: string): bigint {\n if (typeof value !== \"bigint\" || value < 0n || value > MAX_NONCE)\n throw new RangeError(`${name} must be uint64`);\n return value;\n}\nfunction hexBytes(value: Hex, length: number): Uint8Array {\n if (typeof value !== \"string\" || !isHexString(value) || value.length !== 2 + length * 2)\n throw new Error(`Expected ${length} hexadecimal bytes`);\n return getBytes(value);\n}\nfunction normalizeKeys(walletIdentity: Hex, keys: RegistryReceivingKeys): RegistryReceivingKeys {\n const decoded = decodeAddress(\n ReceivingAddress.from({\n walletIdentity,\n viewingPublicKey: hexBytes(keys.viewingPublicKey, 33),\n clueKey: hexBytes(keys.clueKey, 32),\n }).toString()\n );\n if (decoded.kind !== \"long\") throw new Error(\"Expected full receiving address\");\n return {\n viewingPublicKey: hexlify(decoded.viewingPublicKey) as Hex,\n clueKey: hexlify(decoded.clueKey) as Hex,\n };\n}\nfunction normalize(\n context: RegistryContext,\n registration: AddressRegistration,\n options: RegistrationOptions\n) {\n uint64(context.chainId, \"chainId\");\n const registryAddress = getAddress(context.registryAddress) as Hex;\n if (BigInt(registryAddress) === 0n) throw new Error(\"Registry address must be nonzero\");\n if (!/^0x(?:[0-9a-fA-F]{40}|[0-9a-fA-F]{64})$/.test(registration.walletIdentity))\n throw new Error(\"Wallet identity must be an EVM owner or padded bytes32\");\n // Converting to 20 bytes rejects nonzero high bits instead of truncating them.\n const walletIdentity = decodeAddress(\n ReceivingAddress.fromIdentity(\n toBeHex(BigInt(registration.walletIdentity), 20) as Hex\n ).toString()\n ).walletIdentity;\n const keys = normalizeKeys(walletIdentity, registration.keys);\n const nonce = uint64(registration.nonce, \"nonce\"),\n deadline = uint64(registration.deadline, \"deadline\");\n if (nonce === MAX_NONCE) throw new Error(\"Registry nonce exhausted\");\n if (options.update !== undefined && typeof options.update !== \"boolean\")\n throw new TypeError(\"update must be boolean\");\n if (!options.update && nonce !== 0n)\n throw new Error(\"Initial registration requires nonce zero\");\n if (\n options.expectedNonce !== undefined &&\n uint64(options.expectedNonce, \"expectedNonce\") !== nonce\n )\n throw new Error(\"Registry nonce mismatch\");\n if (context.now !== undefined && deadline < uint64(context.now, \"now\"))\n throw new Error(\"Registration expired\");\n return { registryAddress, registration: { walletIdentity, keys, nonce, deadline } };\n}\n\n/** Standard registry EIP-712 data, independent of private WalletAuthorization. */\nexport function registrationTypedData(\n context: RegistryContext,\n registration: AddressRegistration,\n options: RegistrationOptions = {}\n) {\n const { registryAddress, registration: r } = normalize(context, registration, options);\n const primaryType = options.update ? \"UpdateReceivingKeys\" : \"RegisterReceivingKeys\";\n return {\n domain: {\n name: \"InvisiAddressRegistry\",\n version: \"1\",\n chainId: context.chainId,\n verifyingContract: registryAddress,\n },\n primaryType,\n types: {\n [primaryType]: [\n { name: \"walletIdentity\", type: \"bytes32\" },\n { name: \"viewingPublicKey\", type: \"bytes\" },\n { name: \"clueKey\", type: \"bytes32\" },\n { name: \"nonce\", type: \"uint64\" },\n { name: \"deadline\", type: \"uint64\" },\n ],\n },\n message: {\n walletIdentity: toBeHex(BigInt(r.walletIdentity), 32),\n ...r.keys,\n nonce: r.nonce,\n deadline: r.deadline,\n },\n };\n}\nexport function registrationDigest(\n context: RegistryContext,\n registration: AddressRegistration,\n options: RegistrationOptions = {}\n): Hex {\n const typed = registrationTypedData(context, registration, options);\n return TypedDataEncoder.hash(typed.domain, typed.types, typed.message) as Hex;\n}\n/** Encode an owner call (empty signature) or an EIP-712 / ERC-1271 authorized relay. */\nexport function buildRegistrationCalldata(\n context: RegistryContext,\n registration: AddressRegistration,\n signature: Hex,\n options: RegistrationOptions = {}\n): RegistrationCalldata {\n const normalized = normalize(context, registration, options);\n if (typeof signature !== \"string\" || !isHexString(signature) || signature.length % 2 !== 0)\n throw new Error(\"Registration signature must be hexadecimal bytes\");\n return {\n to: normalized.registryAddress,\n value: 0n,\n callData: new Interface(invisiAddressRegistryAbi).encodeFunctionData(\n options.update ? \"updateKeys\" : \"registerKeys\",\n [\n {\n ...normalized.registration,\n walletIdentity: toBeHex(BigInt(normalized.registration.walletIdentity), 32),\n },\n signature,\n ]\n ) as Hex,\n };\n}\n\n/** Ethers runner used for registry contract reads. */\nexport type RegistryReadClient = ContractRunner;\n/** One receivingKeysOf query per short address; RPC failures propagate unchanged. */\nexport function createRegistryReceivingKeyLookup(\n client: RegistryReadClient,\n registryAddress: Address\n): ReceivingKeyLookup {\n const address = getAddress(registryAddress) as Hex;\n if (BigInt(address) === 0n) throw new Error(\"Registry address must be nonzero\");\n return async (walletIdentity) => {\n const identity = decodeAddress(\n ReceivingAddress.fromIdentity(walletIdentity).toString()\n ).walletIdentity;\n const [keys, nonce] = await new Contract(\n address,\n invisiAddressRegistryAbi,\n client\n ).getFunction(\"receivingKeysOf\")(toBeHex(BigInt(identity), 32));\n uint64(nonce, \"registry nonce\");\n const normalized = normalizeKeys(identity, keys);\n return {\n viewingPublicKey: getBytes(normalized.viewingPublicKey),\n clueKey: getBytes(normalized.clueKey),\n };\n };\n}\n","import type { Address, Hex } from \"./contracts\";\nimport {\n AbiCoder,\n dataLength,\n getAddress,\n Interface,\n isHexString,\n keccak256,\n ParamType,\n} from \"ethers\";\n\nimport { invisiProtocolAbi, type CreateCreditParams, type Delivery } from \"./contracts\";\nimport { computeWalletAuthorizationDigest, walletAuthorizationTypedData } from \"@invisi-labs/core\";\nimport {\n checkDeadline,\n deliveriesHash,\n dense,\n field,\n fundingFields,\n getEIP712Domain,\n known,\n normalizeContext,\n normalizeDelivery,\n normalizeFunding,\n normalizeSources,\n notes,\n pad,\n uint,\n validateFundingSubmission,\n word,\n ZERO_ADDRESS,\n type FundingInput,\n type TransactionContext,\n} from \"./validation\";\nconst creationTuple = [\n \"(address token,(uint256 treeId,bytes32 merkleRoot)[] sources,bytes32[] nullifiers,bytes32 creditCommitment,bytes32 changeCommitment,address owner,uint256 expiry,uint256 deadline)\",\n][0]!;\nexport const CREATE_CREDIT_FIELDS = [\n \"token\",\n \"sources\",\n \"nullifiers\",\n \"creditCommitment\",\n \"changeCommitment\",\n \"owner\",\n \"expiry\",\n \"deadline\",\n] as const;\n/** Public checks cannot establish ownership or conservation: those are enforced by the proof. */\nexport function validateCreateCreditRequest(\n c: TransactionContext,\n p: CreateCreditParams,\n cs: readonly Delivery[],\n funding: FundingInput = {}\n) {\n known(p, CREATE_CREDIT_FIELDS);\n if ((getAddress(p.token) as Hex) !== (getAddress(c.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n const ctx = normalizeContext(c),\n ns = notes(p.nullifiers, \"nullifiers\"),\n sources = normalizeSources(p.sources, ns.length, 10),\n creditCommitment = word(field(p.creditCommitment)),\n changeCommitment = word(field(p.changeCommitment)),\n owner = getAddress(p.owner) as Hex,\n expiry = uint(p.expiry, 64, \"expiry\"),\n deadline = checkDeadline(c, p.deadline),\n f = normalizeFunding(funding);\n if (BigInt(creditCommitment) === 0n || creditCommitment === changeCommitment)\n throw new Error(\"zero or duplicate commitment\");\n if (BigInt(owner) === 0n || expiry === 0n || (c.now !== undefined && expiry <= c.now))\n throw new Error(\"owner must be nonzero and expiry future\");\n if (dense(cs, \"deliveries\").length !== 3) throw new Error(\"deliveries count mismatch\");\n const deliveries = cs.map((v, i) =>\n normalizeDelivery(v, { credit: i < 2, empty: i === 2 && BigInt(changeCommitment) === 0n })\n );\n if (ns.length === 0 && f.amount === 0n)\n throw new Error(\"empty inputs require positive funding\");\n return {\n ...ctx,\n sources,\n nullifiers: ns,\n actualCount: ns.length,\n sourceCount: sources.length,\n creditCommitment,\n changeCommitment,\n owner,\n expiry,\n deadline,\n deliveries,\n funding: f,\n };\n}\nexport function createCreditBaseInputs(\n c: TransactionContext,\n p: CreateCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateCreateCreditRequest(c, p, cs, f),\n h = BigInt(deliveriesHash(cs));\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.owner),\n BigInt(r.actualCount),\n BigInt(r.sourceCount),\n ...pad(\n r.sources.map((s) => s.treeId),\n 10\n ),\n ...pad(\n r.sources.map((s) => BigInt(s.merkleRoot)),\n 10\n ),\n ...pad(r.nullifiers.map(BigInt), 10),\n BigInt(r.creditCommitment),\n BigInt(r.changeCommitment),\n h >> 128n,\n h & ((1n << 128n) - 1n),\n r.expiry,\n r.deadline,\n r.funding.amount,\n BigInt(r.funding.payer),\n ].map(word);\n}\nexport function createCreditPublicInputs(\n c: TransactionContext,\n p: CreateCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n const base = createCreditBaseInputs(c, p, deliveries, funding);\n const digest = BigInt(\n computeWalletAuthorizationDigest({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation: \"create-credit\",\n capacity: 10,\n words: base.map(BigInt),\n })\n );\n return [...base, word(digest >> 128n), word(digest & ((1n << 128n) - 1n))];\n}\nconst hashContext = {\n chainId: 0n,\n protocolAddress: ZERO_ADDRESS,\n tokenAddress: ZERO_ADDRESS,\n};\nexport function createCreditRequestHash(\n p: CreateCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateCreateCreditRequest({ ...hashContext, tokenAddress: p.token }, p, cs, f);\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n { type: \"bytes32\" },\n creationTuple,\n { type: \"bytes32\" },\n { type: \"address\" },\n { type: \"uint256\" },\n ].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiCreateCredit\")),\n p,\n deliveriesHash(cs),\n r.funding.payer,\n r.funding.amount,\n ]\n ) as Hex\n ) as Hex;\n}\nexport function encodeCreateCreditTypedData(\n c: TransactionContext,\n p: CreateCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n return walletAuthorizationTypedData({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation: \"create-credit\",\n capacity: 10,\n words: createCreditBaseInputs(c, p, deliveries, funding).map(BigInt),\n });\n}\nexport function encodeCreateCreditFundingTypedData(\n c: TransactionContext,\n p: CreateCreditParams,\n cs: readonly Delivery[],\n f: FundingInput\n) {\n const r = validateCreateCreditRequest(c, p, cs, f);\n if (r.funding.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: createCreditRequestHash(p, cs, f),\n payer: r.funding.payer,\n amount: r.funding.amount,\n sigNonce: r.funding.sigNonce,\n deadline: r.funding.deadline,\n },\n };\n}\nexport interface BuildCreateCreditCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: CreateCreditParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n caller?: Address;\n}\nexport function buildCreateCreditCalldata(p: BuildCreateCreditCalldataParams) {\n const r = validateCreateCreditRequest(p.context, p.params, p.deliveries, p.funding);\n validateFundingSubmission(r.funding, p.caller, p.context.now);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"createCredit\", [\n encodeCreditProof(p.proof),\n p.params,\n p.deliveries,\n r.funding,\n ]) as Hex,\n approveAmount: r.funding.amount,\n };\n}\n\n/** Frame a raw direct proof from the proving backend for the Credit verifier adapter. */\nexport function encodeCreditProof(proof: Hex): Hex {\n if (!isHexString(proof) || !/^0x(?:[a-fA-F0-9]{2})*$/.test(proof) || dataLength(proof) === 0)\n throw new Error(\"empty or malformed Credit proof\");\n return AbiCoder.defaultAbiCoder().encode(\n [\"uint8\", \"bytes\"].map((parameter) => ParamType.from(parameter)),\n [0, proof]\n ) as Hex;\n}\n","import type { Address, Delivery, FundingParams, Hex, InputSource } from \"./contracts\";\nimport {\n AbiCoder,\n dataLength,\n getAddress,\n isHexString,\n keccak256,\n ParamType,\n toBeHex,\n} from \"ethers\";\n\nexport type { DeploymentContext } from \"@invisi-labs/rpc\";\nimport type { DeploymentContext } from \"@invisi-labs/rpc\";\nexport interface TransactionContext extends DeploymentContext {\n tokenAddress: Address;\n now?: bigint;\n /** Explicit chain timestamp used to bind Credit draw UTC periods. */\n timestamp?: bigint;\n}\nexport const FIELD_MODULUS =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as const;\nexport const ZERO_WORD = toBeHex(0n, 32) as Hex;\nexport const EMPTY_PERMIT = {\n deadline: 0n,\n v: 0,\n r: ZERO_WORD,\n s: ZERO_WORD,\n} as const;\nexport const EMPTY_FUNDING: FundingParams = {\n payer: ZERO_ADDRESS,\n amount: 0n,\n sigNonce: 0n,\n deadline: 0n,\n signature: \"0x\",\n permit: EMPTY_PERMIT,\n};\nexport type FundingInput = Partial<Omit<FundingParams, \"permit\">> & {\n permit?: FundingParams[\"permit\"];\n};\nexport function uint(v: bigint | number | string, bits: number, name = \"value\"): bigint {\n if (\n (typeof v !== \"bigint\" && typeof v !== \"number\" && typeof v !== \"string\") ||\n (typeof v === \"number\" && !Number.isSafeInteger(v))\n )\n throw new Error(`${name} must be an integer`);\n const n = BigInt(v);\n if (n < 0n || n >= 1n << BigInt(bits)) throw new Error(`${name} exceeds u${bits}`);\n return n;\n}\nexport function field(v: bigint | string, name = \"field\"): bigint {\n const n = uint(v, 256, name);\n if (n >= FIELD_MODULUS) throw new Error(`${name} is noncanonical field`);\n return n;\n}\nexport const word = (v: bigint | string): Hex =>\n toBeHex(typeof v === \"bigint\" ? v : BigInt(v), 32) as Hex;\nexport function dense<T>(v: readonly T[], name: string): readonly T[] {\n if (!Array.isArray(v)) throw new Error(`${name} must be array`);\n for (let i = 0; i < v.length; i++)\n if (!Object.hasOwn(v, i) || v[i] === undefined || v[i] === null)\n throw new Error(`${name} has missing or sparse entries`);\n return v;\n}\nexport function known(v: object, keys: readonly string[], name = \"params\") {\n if (\n !v ||\n typeof v !== \"object\" ||\n Array.isArray(v) ||\n Object.keys(v).some((k) => !keys.includes(k))\n )\n throw new Error(`${name} has unsupported fields`);\n}\nexport function notes(v: readonly Hex[], name: string) {\n const r = dense(v, name).map((v) => word(field(v, name)));\n if (r.some((v) => BigInt(v) === 0n) || new Set(r).size !== r.length)\n throw new Error(`duplicate or zero ${name}`);\n return r;\n}\nexport function envelope(v: Hex, length: number, version?: number, maximum = length): Hex {\n if (\n !isHexString(v) ||\n !/^0x(?:[a-fA-F0-9]{2})*$/.test(v) ||\n dataLength(v) < length ||\n dataLength(v) > maximum\n )\n throw new Error(`ciphertext must be ${length} bytes`);\n if (version !== undefined && Number.parseInt(v.slice(2, 4), 16) !== version)\n throw new Error(\"unsupported ciphertext envelope version\");\n return v;\n}\nexport function normalizeContext(c: TransactionContext) {\n return {\n ...c,\n chainId: uint(c.chainId, 64, \"chainId\"),\n protocolAddress: getAddress(c.protocolAddress) as Hex,\n tokenAddress: getAddress(c.tokenAddress) as Hex,\n };\n}\nexport function checkDeadline(c: TransactionContext, value: bigint) {\n const n = uint(value, 64, \"deadline\");\n if (c.now !== undefined && n < uint(c.now, 64, \"now\")) throw new Error(\"deadline has expired\");\n return n;\n}\nexport function normalizeSources(\n sources: readonly InputSource[],\n inputCount: number,\n capacity: number\n) {\n dense(sources, \"sources\");\n if (\n inputCount < 0 ||\n inputCount > capacity ||\n sources.length > inputCount ||\n (inputCount === 0 ? sources.length !== 0 : sources.length === 0)\n )\n throw new Error(\"source count must be 1..inputCount, or empty for zero inputs\");\n let previous = 0n;\n return sources.map((s) => {\n known(s, [\"treeId\", \"merkleRoot\"], \"source\");\n const treeId = uint(s.treeId, 64, \"treeId\"),\n merkleRoot = word(field(s.merkleRoot, \"merkleRoot\"));\n if (treeId === 0n || treeId <= previous || BigInt(merkleRoot) === 0n)\n throw new Error(\"sources must have positive roots and strictly ascending tree IDs\");\n previous = treeId;\n return { treeId, merkleRoot };\n });\n}\nexport const pad = (v: readonly bigint[], n: number): bigint[] => [\n ...v,\n ...(Array(n - v.length).fill(0n) as bigint[]),\n];\nexport function normalizeDelivery(\n value: Delivery,\n options: { credit?: boolean; empty?: boolean } = {}\n): Delivery {\n known(value, [\"ciphertext\", \"clue\"], \"delivery\");\n if (options.empty) {\n if (value.ciphertext !== \"0x\" || value.clue !== \"0x\")\n throw new Error(\"absent output requires an empty delivery\");\n return { ciphertext: \"0x\", clue: \"0x\" };\n }\n const ciphertext = envelope(\n value.ciphertext,\n options.credit ? 498 : 160,\n options.credit ? 5 : 2,\n options.credit ? 754 : 416\n );\n const clue = envelope(value.clue, 68);\n if (clue.slice(130, 132).toLowerCase() !== \"18\") throw new Error(\"clue precision must be 24\");\n return { ciphertext, clue };\n}\nexport const deliveriesHash = (v: readonly Delivery[]) =>\n keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n {\n type: \"tuple[]\",\n components: [\n { name: \"ciphertext\", type: \"bytes\" },\n { name: \"clue\", type: \"bytes\" },\n ],\n },\n ].map((parameter) => ParamType.from(parameter)),\n [dense(v, \"deliveries\")]\n ) as Hex\n ) as Hex;\nexport function normalizeFunding(input: FundingInput = {}): FundingParams {\n const f = { ...EMPTY_FUNDING, ...input };\n getAddress(f.payer) as Hex;\n uint(f.amount, 128, \"depositAmount\");\n uint(f.sigNonce, 256, \"sigNonce\");\n uint(f.deadline, 256, \"funding deadline\");\n if (!isHexString(f.signature) || !/^0x(?:[a-fA-F0-9]{2})*$/.test(f.signature))\n throw new Error(\"invalid signature bytes\");\n const p = f.permit;\n uint(p.deadline, 256);\n uint(p.v, 8);\n for (const v of [p.r, p.s])\n if (!isHexString(v) || dataLength(v) !== 32) throw new Error(\"permit r/s must be bytes32\");\n if ((f.amount === 0n) !== (BigInt(f.payer) === 0n))\n throw new Error(\"deposit amount and payer must both be zero or positive\");\n if (\n f.amount === 0n &&\n (f.sigNonce !== 0n ||\n f.deadline !== 0n ||\n f.signature !== \"0x\" ||\n p.deadline !== 0n ||\n p.v !== 0 ||\n BigInt(p.r) !== 0n ||\n BigInt(p.s) !== 0n)\n )\n throw new Error(\"zero funding must be entirely empty\");\n return { ...f, payer: getAddress(f.payer) as Hex };\n}\nexport function validateFundingSubmission(f: FundingParams, caller?: Address, now?: bigint) {\n if (f.signature !== \"0x\" && now !== undefined && uint(now, 64, \"now\") > f.deadline)\n throw new Error(\"funding authorization has expired\");\n if (\n f.signature === \"0x\" &&\n (f.sigNonce !== 0n ||\n f.deadline !== 0n ||\n (caller !== undefined && f.amount > 0n && (getAddress(caller) as Hex) !== f.payer))\n )\n throw new Error(\"direct funding requires payer caller and zero nonce/deadline\");\n}\nexport const getEIP712Domain = (c: TransactionContext) => ({\n name: \"InvisibleProtocol\",\n version: \"1\",\n chainId: uint(c.chainId, 64),\n verifyingContract: getAddress(c.protocolAddress) as Hex,\n});\nexport const fundingFields = [\n { name: \"requestHash\", type: \"bytes32\" },\n { name: \"payer\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n { name: \"sigNonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n] as const;\n","import type { Address, Hex } from \"./contracts\";\nimport { AbiCoder, getAddress, Interface, keccak256, ParamType } from \"ethers\";\n\nimport {\n invisiProtocolAbi,\n type CancelCreditParams,\n type CreditDrawParams,\n type Delivery,\n type TopUpCreditParams,\n} from \"./contracts\";\nimport {\n creditPeriods,\n computeWalletAuthorizationDigest,\n walletAuthorizationTypedData,\n type WalletOperation,\n} from \"@invisi-labs/core\";\nimport {\n createCreditBaseInputs,\n encodeCreditProof,\n validateCreateCreditRequest,\n} from \"./credit-create\";\nimport {\n checkDeadline,\n deliveriesHash,\n dense,\n field,\n fundingFields,\n getEIP712Domain,\n known,\n normalizeContext,\n normalizeDelivery,\n normalizeSources,\n notes,\n pad,\n uint,\n validateFundingSubmission,\n word,\n ZERO_ADDRESS,\n type FundingInput,\n type TransactionContext,\n} from \"./validation\";\nexport const CREDIT_DRAW_CAPACITIES = [1, 12, 50, 120] as const;\nexport function selectCreditDrawCircuit(count: number) {\n if (!Number.isInteger(count) || count < 1 || count > 120)\n throw new Error(\"draw requires 1..120 credits\");\n const maxSize = CREDIT_DRAW_CAPACITIES.find((n) => count <= n)!;\n return {\n name: `credit_draw_slots${maxSize}`,\n maxSize,\n publicInputCount: 6 * maxSize + 14,\n totalBits: 126 + Math.ceil(Math.log2(maxSize)),\n };\n}\nexport function validateCreditDrawRequest(\n c: TransactionContext,\n p: CreditDrawParams,\n cs: readonly Delivery[]\n) {\n known(p, [\n \"token\",\n \"sources\",\n \"nullifiers\",\n \"remainderCommitments\",\n \"expiries\",\n \"recoveryAmounts\",\n \"spender\",\n \"totalAmount\",\n \"deadline\",\n ]);\n if ((getAddress(p.token) as Hex) !== (getAddress(c.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n const ctx = normalizeContext(c),\n ns = notes(p.nullifiers, \"nullifiers\"),\n profile = selectCreditDrawCircuit(ns.length),\n sources = normalizeSources(p.sources, ns.length, profile.maxSize);\n for (const [key, v] of Object.entries({\n remainderCommitments: p.remainderCommitments,\n expiries: p.expiries,\n recoveryAmounts: p.recoveryAmounts,\n }))\n if (dense<unknown>(v, key).length !== ns.length) throw new Error(`${key} count mismatch`);\n const remainderCommitments = p.remainderCommitments.map((v) => word(field(v))),\n recoveryAmounts = p.recoveryAmounts.map((v) => word(field(v))),\n expiries = p.expiries.map((v) => uint(v, 64, \"expiry\")),\n positives = remainderCommitments.filter((v) => BigInt(v) !== 0n);\n if (new Set(positives).size !== positives.length)\n throw new Error(\"duplicate remainder commitment\");\n for (let i = 0; i < ns.length; i++) {\n if (expiries[i] === 0n || (c.now !== undefined && expiries[i]! <= c.now))\n throw new Error(\"expiry must be future\");\n if (BigInt(remainderCommitments[i]!) === 0n && BigInt(recoveryAmounts[i]!) !== 0n)\n throw new Error(\"full draw requires zero recovery amount\");\n }\n const spender = getAddress(p.spender) as Hex,\n totalAmount = uint(p.totalAmount, profile.totalBits, \"totalAmount\");\n if (BigInt(spender) === 0n || totalAmount === 0n)\n throw new Error(\"spender and total amount must be positive\");\n if (dense(cs, \"deliveries\").length !== 2 * ns.length)\n throw new Error(\"deliveries count mismatch\");\n const deliveries = cs.map((v, i) =>\n BigInt(remainderCommitments[Math.floor(i / 2)]!) === 0n\n ? normalizeDelivery(v, { empty: true })\n : normalizeDelivery(v, { credit: true })\n );\n return {\n ...ctx,\n sources,\n nullifiers: ns,\n remainderCommitments,\n recoveryAmounts,\n expiries,\n spender,\n totalAmount,\n deadline: checkDeadline(c, p.deadline),\n deliveries,\n profile,\n periods: creditPeriods(c.timestamp!),\n };\n}\nexport function creditDrawBaseInputs(\n c: TransactionContext,\n p: CreditDrawParams,\n cs: readonly Delivery[]\n) {\n const r = validateCreditDrawRequest(c, p, cs),\n n = r.profile.maxSize,\n h = BigInt(deliveriesHash(cs));\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.spender),\n BigInt(r.nullifiers.length),\n BigInt(r.sources.length),\n ...pad(\n r.sources.map((s) => s.treeId),\n n\n ),\n ...pad(\n r.sources.map((s) => BigInt(s.merkleRoot)),\n n\n ),\n ...pad(r.nullifiers.map(BigInt), n),\n ...pad(r.remainderCommitments.map(BigInt), n),\n ...pad(r.expiries, n),\n r.totalAmount,\n r.deadline,\n h >> 128n,\n h & ((1n << 128n) - 1n),\n ...pad(r.recoveryAmounts.map(BigInt), n),\n r.periods.currentDay,\n r.periods.currentMonth,\n ].map(word);\n}\nexport function validateCancelCreditRequest(c: TransactionContext, p: CancelCreditParams) {\n known(p, [\"token\", \"source\", \"nullifier\", \"owner\", \"amount\", \"deadline\"]);\n if ((getAddress(p.token) as Hex) !== (getAddress(c.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n const ctx = normalizeContext(c),\n source = normalizeSources([p.source], 1, 1)[0]!,\n nullifier = notes([p.nullifier], \"nullifier\")[0]!,\n owner = getAddress(p.owner) as Hex,\n amount = uint(p.amount, 126, \"amount\");\n if (BigInt(owner) === 0n || amount === 0n) throw new Error(\"owner and amount must be positive\");\n return {\n ...ctx,\n source,\n nullifier,\n owner,\n amount,\n deadline: checkDeadline(c, p.deadline),\n };\n}\nexport function cancelCreditBaseInputs(c: TransactionContext, p: CancelCreditParams) {\n const r = validateCancelCreditRequest(c, p);\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.owner),\n r.source.treeId,\n BigInt(r.source.merkleRoot),\n BigInt(r.nullifier),\n r.amount,\n r.deadline,\n ].map(word);\n}\nexport function validateTopUpCreditRequest(\n c: TransactionContext,\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n funding: FundingInput = {}\n) {\n known(p, [\"token\", \"creation\", \"creditSource\", \"creditNullifier\", \"previousExpiry\"]);\n const creation = validateCreateCreditRequest(c, p.creation, cs, funding),\n creditSource = normalizeSources([p.creditSource], 1, 1)[0]!,\n creditNullifier = notes([p.creditNullifier], \"creditNullifier\")[0]!,\n previousExpiry = uint(p.previousExpiry, 64, \"previousExpiry\");\n if (previousExpiry === 0n || (c.now !== undefined && previousExpiry <= c.now))\n throw new Error(\"previous Credit has expired\");\n if (creation.expiry < previousExpiry) throw new Error(\"expiry must not decrease\");\n if (creation.nullifiers.includes(creditNullifier))\n throw new Error(\"duplicate credit and ordinary nullifier\");\n return { creation, creditSource, creditNullifier, previousExpiry };\n}\nexport function topUpCreditBaseInputs(\n c: TransactionContext,\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateTopUpCreditRequest(c, p, cs, f);\n return [\n ...createCreditBaseInputs(c, p.creation, cs, f),\n word(r.creditSource.treeId),\n r.creditSource.merkleRoot,\n r.creditNullifier,\n word(r.previousExpiry),\n ];\n}\nconst cancelTuple = [\n \"(address token,(uint256 treeId,bytes32 merkleRoot) source,bytes32 nullifier,address owner,uint256 amount,uint256 deadline)\",\n][0]!;\nconst topTuple = [\n \"((address token,(uint256 treeId,bytes32 merkleRoot)[] sources,bytes32[] nullifiers,bytes32 creditCommitment,bytes32 changeCommitment,address owner,uint256 expiry,uint256 deadline) creation,(uint256 treeId,bytes32 merkleRoot) creditSource,bytes32 creditNullifier,uint256 previousExpiry)\",\n][0]!;\nconst hashContext = {\n chainId: 0n,\n protocolAddress: ZERO_ADDRESS,\n tokenAddress: ZERO_ADDRESS,\n};\nexport function cancelCreditRequestHash(p: CancelCreditParams) {\n validateCancelCreditRequest({ ...hashContext, tokenAddress: p.token }, p);\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [{ type: \"bytes32\" }, cancelTuple].map((parameter) => ParamType.from(parameter)),\n [keccak256(new TextEncoder().encode(\"InvisiCancelCredit\")), p]\n ) as Hex\n ) as Hex;\n}\nexport function topUpCreditRequestHash(\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateTopUpCreditRequest(\n { ...hashContext, tokenAddress: p.creation.token },\n p,\n cs,\n f\n );\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n { type: \"bytes32\" },\n topTuple,\n { type: \"bytes32\" },\n { type: \"address\" },\n { type: \"uint256\" },\n ].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiTopUpCredit\")),\n p,\n deliveriesHash(cs),\n r.creation.funding.payer,\n r.creation.funding.amount,\n ]\n ) as Hex\n ) as Hex;\n}\nfunction authorize(\n c: TransactionContext,\n operation: WalletOperation,\n capacity: number,\n words: readonly Hex[]\n) {\n return walletAuthorizationTypedData({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation,\n capacity,\n words: words.map(BigInt),\n });\n}\nfunction appendDigest(\n c: TransactionContext,\n operation: WalletOperation,\n capacity: number,\n words: readonly Hex[]\n) {\n const digest = BigInt(\n computeWalletAuthorizationDigest({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation,\n capacity,\n words: words.map(BigInt),\n })\n );\n return [...words, word(digest >> 128n), word(digest & ((1n << 128n) - 1n))];\n}\nexport function encodeCancelCreditTypedData(c: TransactionContext, p: CancelCreditParams) {\n return authorize(c, \"cancel-credit\", 1, cancelCreditBaseInputs(c, p));\n}\nexport function encodeTopUpCreditTypedData(\n c: TransactionContext,\n p: TopUpCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n return authorize(c, \"top-up-credit\", 10, topUpCreditBaseInputs(c, p, deliveries, funding));\n}\nexport function encodeCreditDrawTypedData(\n c: TransactionContext,\n p: CreditDrawParams,\n deliveries: readonly Delivery[]\n) {\n return authorize(\n c,\n \"credit-draw\",\n selectCreditDrawCircuit(p.nullifiers.length).maxSize,\n creditDrawBaseInputs(c, p, deliveries)\n );\n}\nexport function creditDrawPublicInputs(\n c: TransactionContext,\n p: CreditDrawParams,\n deliveries: readonly Delivery[]\n) {\n return appendDigest(\n c,\n \"credit-draw\",\n selectCreditDrawCircuit(p.nullifiers.length).maxSize,\n creditDrawBaseInputs(c, p, deliveries)\n );\n}\nexport function cancelCreditPublicInputs(c: TransactionContext, p: CancelCreditParams) {\n return appendDigest(c, \"cancel-credit\", 1, cancelCreditBaseInputs(c, p));\n}\nexport function topUpCreditPublicInputs(\n c: TransactionContext,\n p: TopUpCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n return appendDigest(c, \"top-up-credit\", 10, topUpCreditBaseInputs(c, p, deliveries, funding));\n}\nexport function encodeTopUpCreditFundingTypedData(\n c: TransactionContext,\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n f: FundingInput\n) {\n const r = validateTopUpCreditRequest(c, p, cs, f),\n funding = r.creation.funding;\n if (funding.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: topUpCreditRequestHash(p, cs, f),\n payer: funding.payer,\n amount: funding.amount,\n sigNonce: funding.sigNonce,\n deadline: funding.deadline,\n },\n };\n}\nexport interface BuildCreditDrawCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: CreditDrawParams;\n deliveries: readonly Delivery[];\n}\nexport function buildCreditDrawCalldata(p: BuildCreditDrawCalldataParams) {\n validateCreditDrawRequest(p.context, p.params, p.deliveries);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"creditDraw\", [\n encodeCreditProof(p.proof),\n p.params,\n p.deliveries,\n ]) as Hex,\n nullifiers: p.params.nullifiers,\n totalAmount: p.params.totalAmount,\n };\n}\nexport interface BuildCancelCreditCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: CancelCreditParams;\n}\nexport function buildCancelCreditCalldata(p: BuildCancelCreditCalldataParams) {\n validateCancelCreditRequest(p.context, p.params);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"cancelCredit\", [\n encodeCreditProof(p.proof),\n p.params,\n ]) as Hex,\n };\n}\nexport interface BuildTopUpCreditCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: TopUpCreditParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n caller?: Address;\n}\nexport function buildTopUpCreditCalldata(p: BuildTopUpCreditCalldataParams) {\n const r = validateTopUpCreditRequest(p.context, p.params, p.deliveries, p.funding);\n validateFundingSubmission(r.creation.funding, p.caller, p.context.now);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"topUpCredit\", [\n encodeCreditProof(p.proof),\n p.params,\n p.deliveries,\n r.creation.funding,\n ]) as Hex,\n approveAmount: r.creation.funding.amount,\n };\n}\n","import type { Address, Hex } from \"./contracts\";\nimport { AbiCoder, getAddress, Interface, keccak256, ParamType, TypedDataEncoder } from \"ethers\";\n\nimport {\n invisiProtocolAbi,\n type CrossTreeTransactParams,\n type Delivery,\n type ShieldOutput,\n type ShieldParams,\n type TransactRequest,\n} from \"./contracts\";\nimport { computeNoteCommitment, walletAuthorizationTypedData } from \"@invisi-labs/core\";\nimport {\n checkDeadline,\n deliveriesHash,\n dense,\n field,\n fundingFields,\n getEIP712Domain,\n known,\n normalizeContext,\n normalizeDelivery,\n normalizeFunding,\n normalizeSources,\n notes,\n pad,\n uint,\n validateFundingSubmission,\n word,\n type DeploymentContext,\n type FundingInput,\n type TransactionContext,\n} from \"./validation\";\nexport const TRANSACT_CAPACITIES = [14, 56, 112, 168] as const;\nexport type TransactCapacity = (typeof TRANSACT_CAPACITIES)[number];\nexport function selectTransactCapacity(inputs: number, outputs: number): TransactCapacity {\n if (\n !Number.isInteger(inputs) ||\n !Number.isInteger(outputs) ||\n inputs < 0 ||\n outputs < 0 ||\n inputs + outputs < 1 ||\n (inputs === 0 && outputs < 2) ||\n inputs + outputs > 168\n )\n throw new Error(\"unsupported transact shape\");\n return TRANSACT_CAPACITIES.find((n) => inputs + outputs <= n)!;\n}\nexport type TransactRequestParams = CrossTreeTransactParams;\nexport function normalizeTransactRequest(\n c: TransactionContext,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n funding: FundingInput = {}\n) {\n const ctx = normalizeContext(c);\n if ((getAddress(p.token) as Hex) !== ctx.tokenAddress)\n throw new Error(\"request token mismatch\");\n known(p, [\n \"token\",\n \"sources\",\n \"nullifiers\",\n \"outputCommitments\",\n \"withdrawalAddress\",\n \"withdrawalAmount\",\n \"deadline\",\n ]);\n const ns = notes(p.nullifiers, \"nullifiers\"),\n os = notes(p.outputCommitments, \"outputCommitments\"),\n capacity = selectTransactCapacity(ns.length, os.length);\n const sources = normalizeSources(p.sources, ns.length, capacity),\n deliveries = dense(cs, \"deliveries\").map((v) => normalizeDelivery(v));\n if (deliveries.length !== os.length) throw new Error(\"deliveries count mismatch\");\n const withdrawalAmount = uint(p.withdrawalAmount, 128, \"withdrawalAmount\"),\n withdrawalAddress = getAddress(p.withdrawalAddress) as Hex,\n f = normalizeFunding(funding);\n if (\n (withdrawalAmount === 0n) !== (BigInt(withdrawalAddress) === 0n) ||\n (os.length === 0 && withdrawalAmount === 0n)\n )\n throw new Error(\"invalid withdrawal\");\n if (ns.length === 0 && (f.amount === 0n || withdrawalAmount !== 0n))\n throw new Error(\"zero inputs require positive funding and zero withdrawal\");\n return {\n ...ctx,\n capacity,\n sources,\n nullifiers: ns,\n outputCommitments: os,\n inputCount: ns.length,\n outputCount: os.length,\n sourceCount: sources.length,\n inputTreeIds: pad(\n sources.map((s) => s.treeId),\n capacity\n ),\n merkleRoots: pad(\n sources.map((s) => BigInt(s.merkleRoot)),\n capacity\n ),\n slotValues: pad([...ns, ...os].map(BigInt), capacity),\n deliveries,\n deliveriesHash: deliveriesHash(deliveries),\n withdrawalAddress,\n withdrawalAmount,\n deadline: checkDeadline(c, p.deadline),\n depositAmount: f.amount,\n depositPayer: f.payer,\n funding: f,\n };\n}\nexport function transactPublicInputs(\n c: TransactionContext,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = normalizeTransactRequest(c, p, cs, f),\n h = BigInt(r.deliveriesHash);\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.inputCount),\n BigInt(r.outputCount),\n BigInt(r.sourceCount),\n ...r.inputTreeIds,\n ...r.merkleRoots,\n ...r.slotValues,\n h >> 128n,\n h & ((1n << 128n) - 1n),\n BigInt(r.withdrawalAddress),\n r.withdrawalAmount,\n r.deadline,\n r.depositAmount,\n BigInt(r.depositPayer),\n ].map(word);\n}\nexport function encodeTransactTypedData(\n c: TransactionContext,\n p: TransactRequestParams,\n deliveries: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = normalizeTransactRequest(c, p, deliveries, f);\n return walletAuthorizationTypedData({\n context: { chainId: r.chainId, protocolAddress: BigInt(r.protocolAddress) },\n operation: \"transact\",\n capacity: r.capacity,\n words: transactPublicInputs(c, p, deliveries, f).map(BigInt),\n });\n}\nconst singleTuple = [\n \"(address token,bytes32 merkleRoot,bytes32[] nullifiers,bytes32[] outputCommitments,uint256 inputTreeId,address withdrawalAddress,uint256 withdrawalAmount,uint256 deadline)\",\n][0]!;\nconst crossTuple = [\n \"(address token,(uint256 treeId,bytes32 merkleRoot)[] sources,bytes32[] nullifiers,bytes32[] outputCommitments,address withdrawalAddress,uint256 withdrawalAmount,uint256 deadline)\",\n][0]!;\nexport function transactFundingRequestHash(\n proof: Hex,\n p: TransactRequestParams,\n cs: readonly Delivery[]\n) {\n const single = {\n token: p.token,\n merkleRoot: p.sources[0]?.merkleRoot ?? word(0n),\n nullifiers: p.nullifiers,\n outputCommitments: p.outputCommitments,\n inputTreeId: p.sources[0]?.treeId ?? 0n,\n withdrawalAddress: p.withdrawalAddress,\n withdrawalAmount: p.withdrawalAmount,\n deadline: p.deadline,\n };\n return p.sources.length > 1\n ? (keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [{ type: \"bytes32\" }, { type: \"bytes32\" }, crossTuple, { type: \"bytes32\" }].map(\n (parameter) => ParamType.from(parameter)\n ),\n [\n keccak256(new TextEncoder().encode(\"InvisiCrossTreeTransact\")),\n keccak256(proof),\n p,\n deliveriesHash(cs),\n ]\n ) as Hex\n ) as Hex)\n : (keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [{ type: \"bytes32\" }, singleTuple, { type: \"bytes32\" }].map((parameter) =>\n ParamType.from(parameter)\n ),\n [keccak256(proof), single, deliveriesHash(cs)]\n ) as Hex\n ) as Hex);\n}\nexport function encodeTransactFundingTypedData(\n c: TransactionContext,\n proof: Hex,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n funding: FundingInput\n) {\n normalizeTransactRequest(c, p, cs, funding);\n const f = normalizeFunding(funding);\n if (f.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: transactFundingRequestHash(proof, p, cs),\n payer: f.payer,\n amount: f.amount,\n sigNonce: f.sigNonce,\n deadline: f.deadline,\n },\n };\n}\nexport interface BuildTransactCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: TransactRequestParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n caller?: Address;\n}\nexport function buildTransactCalldata(p: BuildTransactCalldataParams) {\n const r = normalizeTransactRequest(p.context, p.params, p.deliveries, p.funding);\n validateFundingSubmission(r.funding, p.caller, p.context.now);\n const request: TransactRequest = {\n params: {\n token: r.tokenAddress,\n sources: r.sources,\n nullifiers: r.nullifiers,\n outputCommitments: r.outputCommitments,\n withdrawalAddress: r.withdrawalAddress,\n withdrawalAmount: r.withdrawalAmount,\n deadline: r.deadline,\n },\n deliveries: p.deliveries,\n funding: r.funding,\n };\n const abi = invisiProtocolAbi.filter(\n (item) =>\n item.type === \"function\" &&\n item.name === \"transact\" &&\n item.inputs.length === 2 &&\n item.inputs[1]?.type === \"tuple\"\n );\n const data = new Interface(abi).encodeFunctionData(\"transact\", [p.proof, request]) as Hex;\n return { data, capacity: r.capacity, approveAmount: r.depositAmount };\n}\nexport interface BuildTransactAggregateCalldataParams {\n context: DeploymentContext & { now?: bigint };\n proof: Hex;\n requests: readonly TransactRequest[];\n caller?: Address;\n}\nexport function buildTransactAggregateCalldata(p: BuildTransactAggregateCalldataParams) {\n if (![4, 8, 12].includes(dense(p.requests, \"requests\").length))\n throw new Error(\"aggregate requires 4, 8 or 12 requests\");\n for (const request of p.requests) {\n const r = normalizeTransactRequest(\n { ...p.context, tokenAddress: request.params.token },\n request.params,\n request.deliveries,\n request.funding\n );\n if (r.capacity !== 14) throw new Error(\"aggregate supports only capacity 14\");\n validateFundingSubmission(r.funding, p.caller, p.context.now);\n }\n return {\n data: new Interface(\n invisiProtocolAbi.filter(\n (item) =>\n item.type === \"function\" &&\n item.name === \"transact\" &&\n item.inputs[1]?.type === \"tuple[]\"\n )\n ).encodeFunctionData(\"transact\", [p.proof, p.requests]) as Hex,\n capacity: 14 as const,\n };\n}\nexport interface BuildShieldCalldataParams {\n context: TransactionContext;\n params: ShieldParams;\n outputs: readonly ShieldOutput[];\n deliveries: readonly Delivery[];\n funding: FundingInput;\n caller?: Address;\n}\nexport async function validateShieldRequest(p: BuildShieldCalldataParams) {\n normalizeContext(p.context);\n if ((getAddress(p.params.token) as Hex) !== (getAddress(p.context.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n known(p.params, [\"token\", \"outputCommitments\", \"deadline\"]);\n checkDeadline(p.context, p.params.deadline);\n const outputs = dense(p.outputs, \"outputs\"),\n commitments = notes(p.params.outputCommitments, \"outputCommitments\"),\n cs = dense(p.deliveries, \"deliveries\"),\n f = normalizeFunding(p.funding);\n if (\n outputs.length < 1 ||\n outputs.length > 10 ||\n commitments.length !== outputs.length ||\n cs.length !== outputs.length\n )\n throw new Error(\"shield requires 1..10 outputs and matching deliveries\");\n let total = 0n;\n for (const [i, o] of outputs.entries()) {\n known(o, [\"identity\", \"amount\"], \"output\");\n uint(o.amount, 128, \"amount\");\n if (o.amount === 0n) throw new Error(\"amount must be positive\");\n field(o.identity);\n normalizeDelivery(cs[i]!);\n if (\n (await computeNoteCommitment(\n p.context.chainId,\n o.identity,\n BigInt(p.context.tokenAddress),\n o.amount\n )) !== commitments[i]\n )\n throw new Error(\"output commitment mismatch\");\n total += o.amount;\n }\n if (total !== f.amount) throw new Error(\"funding must equal output total\");\n return f;\n}\nexport function shieldFundingRequestHash(\n params: ShieldParams,\n outputs: readonly ShieldOutput[],\n cs: readonly Delivery[]\n) {\n const outputHash = keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\"(bytes32 identity,uint256 amount)[]\"].map((parameter) => ParamType.from(parameter)),\n [outputs]\n ) as Hex\n ) as Hex;\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n \"bytes32\",\n \"(address token,bytes32[] outputCommitments,uint256 deadline)\",\n \"bytes32\",\n \"bytes32\",\n ].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiShield\")),\n params,\n outputHash,\n deliveriesHash(cs),\n ]\n ) as Hex\n ) as Hex;\n}\nexport async function encodeShieldFundingTypedData(p: BuildShieldCalldataParams) {\n const f = await validateShieldRequest(p);\n return {\n domain: getEIP712Domain(p.context),\n primaryType: \"FundShield\" as const,\n types: { FundShield: fundingFields },\n message: {\n requestHash: shieldFundingRequestHash(p.params, p.outputs, p.deliveries),\n payer: f.payer,\n amount: f.amount,\n sigNonce: f.sigNonce,\n deadline: f.deadline,\n },\n };\n}\nexport async function buildShieldCalldata(p: BuildShieldCalldataParams) {\n const f = await validateShieldRequest(p);\n validateFundingSubmission(f, p.caller, p.context.now);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"shield\", [\n p.params,\n p.outputs,\n p.deliveries,\n f,\n ]) as Hex,\n approveAmount: f.amount,\n };\n}\n\n/** Full active user-circuit public inputs: business statement followed by EIP-712 digest limbs. */\nexport function transactUserPublicInputs(\n c: TransactionContext,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const words = transactPublicInputs(c, p, cs, f),\n digest = BigInt(\n ((typed) =>\n TypedDataEncoder.hash(\n typed.domain,\n Object.fromEntries(\n Object.entries(typed.types).map(([name, fields]) => [\n name,\n [...(fields as readonly { name: string; type: string }[])],\n ])\n ),\n typed.message\n ))(encodeTransactTypedData(c, p, cs, f))\n );\n return [...words, word(digest >> 128n), word(digest & ((1n << 128n) - 1n))];\n}\nexport type AggregateMemberInput = Pick<TransactRequest, \"params\" | \"deliveries\"> & {\n funding?: FundingInput;\n};\n/** Atomic aggregate funding binds the member statement rather than the aggregate proof bytes. */\nexport function aggregateMemberRequestHash(c: TransactionContext, r: AggregateMemberInput) {\n const capacity = selectTransactCapacity(\n r.params.nullifiers.length,\n r.params.outputCommitments.length\n );\n if (capacity !== 14) throw new Error(\"aggregate supports only capacity 14\");\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\"bytes32\", \"uint256\", \"bytes32[]\"].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiAtomicBatchMemberV1\")),\n BigInt(capacity),\n transactPublicInputs(c, r.params, r.deliveries, r.funding),\n ]\n ) as Hex\n ) as Hex;\n}\n/** Router adapter business words (56 per member), not the aggregate circuit statement. */\nexport function aggregatePublicInputs(\n c: TransactionContext,\n requests: readonly AggregateMemberInput[]\n) {\n if (![4, 8, 12].includes(dense(requests, \"requests\").length))\n throw new Error(\"aggregate requires 4, 8 or 12 requests\");\n return requests.flatMap((r) => {\n const context = { ...c, tokenAddress: r.params.token };\n aggregateMemberRequestHash(context, r);\n return [word(14n), ...transactPublicInputs(context, r.params, r.deliveries, r.funding)];\n });\n}\nexport function encodeAggregateFundingTypedData(c: TransactionContext, r: AggregateMemberInput) {\n const f = normalizeFunding(r.funding);\n if (f.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: aggregateMemberRequestHash(c, r),\n payer: f.payer,\n amount: f.amount,\n sigNonce: f.sigNonce,\n deadline: f.deadline,\n },\n };\n}\n","import type { Address, Hex } from \"./contracts\";\nimport { Contract, getAddress, keccak256, type Provider } from \"ethers\";\n\nimport {\n defineDeployment,\n type ProtocolDeployment,\n type ProtocolRpcClient,\n} from \"@invisi-labs/rpc\";\nimport { buildTransactAggregateCalldata, type BuildTransactAggregateCalldataParams } from \"./funds\";\nimport type { ChainReader } from \"./interfaces\";\nimport { TokenProtocol } from \"./TokenProtocol\";\nimport { known, type DeploymentContext } from \"./validation\";\n\nexport interface ProtocolOptions {\n deployment: ProtocolDeployment;\n}\n\n/** A multi-token deployment. Asset support is always read from the chain. */\nexport class Protocol {\n readonly deployment: Readonly<ProtocolDeployment>;\n readonly context: Readonly<DeploymentContext>;\n\n constructor(options: ProtocolOptions) {\n known(options, [\"deployment\"], \"protocol options\");\n this.deployment = defineDeployment(options.deployment);\n this.context = Object.freeze({\n chainId: this.deployment.chainId,\n protocolAddress: this.deployment.protocol.address,\n });\n Object.freeze(this);\n }\n\n /** Load the selected deployment and verify its contract against Chain RPC before returning. */\n static async fromRpc(\n rpc: Pick<ProtocolRpcClient, \"getDeployment\">,\n provider: Provider,\n options: { signal?: AbortSignal } = {}\n ): Promise<Protocol> {\n const chainId = (await provider.getNetwork()).chainId;\n if (typeof chainId !== \"bigint\" || chainId <= 0n || chainId >= 1n << 64n)\n throw new Error(\"invalid protocol chainId\");\n const deployment = await rpc.getDeployment(\n chainId,\n options.signal ? { signal: options.signal } : {}\n );\n const protocol = new Protocol({ deployment });\n if (protocol.context.chainId !== chainId) throw new Error(\"RPC deployment chain mismatch\");\n await protocol.validateDeployment(provider);\n return protocol;\n }\n\n async validateDeployment(\n connection:\n | Provider\n | (Pick<ChainReader, \"getChainId\" | \"getCode\"> & {\n getProtocolVersion?(address: Address): Promise<bigint>;\n getProtocolAddressRegistry?(address: Address): Promise<Address>;\n })\n ): Promise<void> {\n const reader =\n \"getNetwork\" in connection\n ? {\n getChainId: async () => (await connection.getNetwork()).chainId,\n getCode: async (address: Address) =>\n (await connection.getCode(address)) as Hex,\n getProtocolAddressRegistry: async (address: Address) =>\n getAddress(\n await new Contract(\n address,\n [\"function addressRegistry() view returns (address)\"],\n connection\n ).getFunction(\"addressRegistry\")()\n ) as Address,\n getProtocolVersion: async (address: Address) =>\n BigInt(\n await new Contract(\n address,\n [\"function VERSION() view returns (uint256)\"],\n connection\n ).getFunction(\"VERSION\")()\n ),\n }\n : connection;\n if ((await reader.getChainId()) !== this.context.chainId)\n throw new Error(\"deployment chain mismatch\");\n const code = await reader.getCode(this.context.protocolAddress);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(code) ||\n (keccak256(code) as Hex) !== this.deployment.protocol.runtimeCodeHash\n )\n throw new Error(\"protocol runtime code profile mismatch\");\n if (\n reader.getProtocolVersion &&\n (await reader.getProtocolVersion(this.context.protocolAddress)) !== 1n\n )\n throw new Error(\"unsupported onchain protocol version\");\n const registry = this.deployment.registry;\n if (registry) {\n if (!reader.getProtocolAddressRegistry)\n throw new Error(\"registry binding reader capability is missing\");\n if (\n getAddress(\n await reader.getProtocolAddressRegistry(this.context.protocolAddress)\n ) !== getAddress(registry.address)\n )\n throw new Error(\"protocol registry binding mismatch\");\n const registryCode = await reader.getCode(registry.address);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(registryCode) ||\n keccak256(registryCode) !== registry.runtimeCodeHash\n )\n throw new Error(\"registry runtime code profile mismatch\");\n }\n }\n\n aggregate(request: Omit<BuildTransactAggregateCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTransactAggregateCalldata({ ...request, context: this.context }),\n };\n }\n\n /** Build an operation context for one asset within this same deployment. */\n forToken(tokenAddress: Address): TokenProtocol {\n return new TokenProtocol(\n { ...this.context, tokenAddress: getAddress(tokenAddress) as Hex },\n { expectedRuntimeCodeHash: this.deployment.protocol.runtimeCodeHash }\n );\n }\n}\n","import type { Hex } from \"./contracts\";\nimport { keccak256 } from \"ethers\";\n\nimport { MissingCapabilityError } from \"@invisi-labs/core\";\nimport { buildCreateCreditCalldata, type BuildCreateCreditCalldataParams } from \"./credit-create\";\nimport {\n buildCancelCreditCalldata,\n buildCreditDrawCalldata,\n buildTopUpCreditCalldata,\n type BuildCancelCreditCalldataParams,\n type BuildCreditDrawCalldataParams,\n type BuildTopUpCreditCalldataParams,\n} from \"./credit-lifecycle\";\nimport {\n buildShieldCalldata,\n buildTransactAggregateCalldata,\n buildTransactCalldata,\n type BuildShieldCalldataParams,\n type BuildTransactAggregateCalldataParams,\n type BuildTransactCalldataParams,\n} from \"./funds\";\nimport type { ChainReader } from \"./interfaces\";\nimport { normalizeContext, type TransactionContext } from \"./validation\";\n\nexport interface TokenProtocolOptions {\n expectedRuntimeCodeHash?: Hex;\n}\n\n/** A token-specific operation binding within a multi-token deployment. Pure builders never sign or submit. */\nexport class TokenProtocol {\n readonly context: Readonly<TransactionContext>;\n readonly expectedRuntimeCodeHash: Hex | undefined;\n\n constructor(context: TransactionContext, options: TokenProtocolOptions = {}) {\n const normalized = normalizeContext(context);\n if (BigInt(normalized.protocolAddress) === 0n || BigInt(normalized.tokenAddress) === 0n) {\n throw new Error(\"deployment addresses must be nonzero\");\n }\n if (\n options.expectedRuntimeCodeHash &&\n !/^0x[0-9a-fA-F]{64}$/.test(options.expectedRuntimeCodeHash)\n ) {\n throw new Error(\"invalid runtime code hash\");\n }\n this.expectedRuntimeCodeHash = options.expectedRuntimeCodeHash?.toLowerCase() as\n Hex | undefined;\n this.context = Object.freeze(normalized);\n Object.freeze(this);\n }\n\n async validateDeployment(\n reader: Pick<ChainReader, \"getChainId\" | \"getCode\">,\n options: { requireRuntimeProfile?: boolean } = {}\n ): Promise<void> {\n if ((options.requireRuntimeProfile ?? true) && !this.expectedRuntimeCodeHash) {\n throw new MissingCapabilityError(\"trusted deployment profile\");\n }\n if ((await reader.getChainId()) !== this.context.chainId) {\n throw new Error(\"deployment chain mismatch\");\n }\n const code = await reader.getCode(this.context.protocolAddress);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(code) ||\n (this.expectedRuntimeCodeHash &&\n (keccak256(code) as Hex) !== this.expectedRuntimeCodeHash)\n ) {\n throw new Error(\"deployment runtime code profile mismatch\");\n }\n const tokenCode = await reader.getCode(this.context.tokenAddress);\n if (!/^0x(?:[0-9a-fA-F]{2})+$/.test(tokenCode)) {\n throw new Error(\"token address must have contract code\");\n }\n }\n\n transact(request: Omit<BuildTransactCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTransactCalldata({ ...request, context: this.context }),\n };\n }\n\n aggregate(request: Omit<BuildTransactAggregateCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTransactAggregateCalldata({ ...request, context: this.context }),\n };\n }\n\n async shield(request: Omit<BuildShieldCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...(await buildShieldCalldata({ ...request, context: this.context })),\n };\n }\n\n createCredit(request: Omit<BuildCreateCreditCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildCreateCreditCalldata({ ...request, context: this.context }),\n };\n }\n\n drawCredit(request: Omit<BuildCreditDrawCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildCreditDrawCalldata({ ...request, context: this.context }),\n };\n }\n\n cancelCredit(request: Omit<BuildCancelCreditCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildCancelCreditCalldata({ ...request, context: this.context }),\n };\n }\n\n topUpCredit(request: Omit<BuildTopUpCreditCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTopUpCreditCalldata({ ...request, context: this.context }),\n };\n }\n}\n","import {\n computeCreditCommitment,\n computeCreditSharedKeyHash,\n computeNoteCommitment,\n computeNoteIdentity,\n FIELD_MODULUS,\n} from \"@invisi-labs/core\";\n\nexport interface VerifyNoteCommitmentParams {\n walletIdentity: `0x${string}`;\n tokenAddress: `0x${string}`;\n amount: bigint;\n nonce: `0x${string}`;\n noteCommitment: `0x${string}`;\n chainId: bigint;\n}\n\nexport async function verifyNoteCommitment(params: VerifyNoteCommitmentParams): Promise<boolean> {\n const expected = await computeNoteCommitment(\n params.chainId,\n await computeNoteIdentity(BigInt(params.walletIdentity), BigInt(params.nonce)),\n BigInt(params.tokenAddress),\n params.amount\n );\n return BigInt(expected) === BigInt(params.noteCommitment);\n}\n\nexport interface VerifyCreditCommitmentParams extends Partial<\n import(\"@invisi-labs/core\").CreditPolicy\n> {\n chainId: bigint;\n spenderWalletIdentity: `0x${string}`;\n ownerWalletIdentity: `0x${string}`;\n spenderPayout: `0x${string}`;\n ownerPayout: `0x${string}`;\n tokenAddress: `0x${string}`;\n amount: bigint;\n nonce: bigint;\n expiry: bigint;\n creditSharedKey: bigint;\n /** Server-returned value to verify against the locally recomputed commitment. */\n creditCommitment: `0x${string}`;\n}\n\n/**\n * Hashes the received shared key locally, recomputes the Credit leaf and compares it to the\n * server-returned value. A mismatch means the server folded a wrong nonce\n * (or other parameter) — the caller MUST abort and not create a Credit.\n */\nexport async function verifyCreditCommitment(\n params: VerifyCreditCommitmentParams\n): Promise<boolean> {\n if (params.creditSharedKey <= 0n || params.creditSharedKey >= FIELD_MODULUS)\n throw new RangeError(\"creditSharedKey must be a nonzero canonical Field\");\n const expected = await computeCreditCommitment(\n params.chainId,\n params.spenderWalletIdentity,\n params.ownerWalletIdentity,\n BigInt(params.spenderPayout),\n BigInt(params.ownerPayout),\n BigInt(params.tokenAddress),\n params.amount,\n params.nonce,\n params.expiry,\n await computeCreditSharedKeyHash(params.creditSharedKey),\n params\n );\n return BigInt(expected) === BigInt(params.creditCommitment);\n}\n","import {\n computeNoteCommitment,\n computeNoteIdentity,\n computeNoteNullifier,\n type Note,\n} from \"@invisi-labs/core\";\nimport {\n buildTransactCalldata,\n normalizeTransactRequest,\n type BuildTransactCalldataParams,\n} from \"./funds\";\n\nexport interface BuildWithdrawalCalldataParams extends Omit<\n BuildTransactCalldataParams,\n \"deliveries\"\n> {\n sourceNotes: readonly Note[];\n}\n\n/** Prepare a full public withdrawal whose spending authority is already proven in the supplied proof. */\nexport async function buildWithdrawalCalldata(p: BuildWithdrawalCalldataParams) {\n const r = normalizeTransactRequest(p.context, p.params, [], p.funding);\n if (\n r.outputCount !== 0 ||\n r.depositAmount !== 0n ||\n p.sourceNotes.length === 0 ||\n p.sourceNotes.length !== r.inputCount\n ) {\n throw new Error(\"full withdrawal requires inputs, no private outputs and no funding\");\n }\n const walletIdentity = BigInt(p.sourceNotes[0]!.walletIdentity);\n let total = 0n;\n for (const [index, note] of p.sourceNotes.entries()) {\n if (\n note.chainId !== p.context.chainId ||\n note.protocolAddress !== BigInt(p.context.protocolAddress)\n )\n throw new Error(\"source note context mismatch\");\n if (\n BigInt(note.walletIdentity) !== walletIdentity ||\n note.tokenAddress !== BigInt(p.context.tokenAddress) ||\n note.amount <= 0n\n )\n throw new Error(\"source note wallet/token/amount mismatch\");\n const commitment = await computeNoteCommitment(\n note.chainId,\n await computeNoteIdentity(walletIdentity, note.nonce),\n note.tokenAddress,\n note.amount\n );\n const nullifier = await computeNoteNullifier(note.chainId, note.nonce, commitment);\n if (nullifier.toLowerCase() !== r.nullifiers[index]!.toLowerCase())\n throw new Error(\"source note nullifier mismatch\");\n total += note.amount;\n }\n if (r.withdrawalAmount !== total)\n throw new Error(\"withdrawal must equal the full input balance\");\n return buildTransactCalldata({ ...p, deliveries: [] });\n}\n","import type {\n CancelCreditParams,\n CreateCreditParams,\n CreditDrawParams,\n Delivery,\n Hex,\n InputSource,\n TopUpCreditParams,\n} from \"./contracts\";\n\nimport {\n computeCreditCommitment,\n normalizeCreditPolicy,\n applyCreditDrawUsage,\n computeCreditNullifier,\n computeCreditSharedKeyHash,\n computeNoteCommitment,\n computeNoteIdentity,\n computeNoteNullifier,\n computeWalletAuthorizationDigest,\n normalizeCreditDeliveryState,\n poseidonHash,\n verifyWalletAuthorization,\n type AuthorizedStatement,\n type CreditDeliveryState,\n type CreditNote,\n type Note,\n type WalletAuthorizationWitness,\n type WalletOperation,\n} from \"@invisi-labs/core\";\nimport {\n LocalWitness,\n type CircuitName,\n type ProofStatement,\n type ProofTarget,\n type ProvingRequest,\n} from \"@invisi-labs/prover\";\n\nimport { TokenProtocol } from \"./TokenProtocol\";\nimport { createCreditPublicInputs } from \"./credit-create\";\nimport {\n cancelCreditPublicInputs,\n creditDrawPublicInputs,\n selectCreditDrawCircuit,\n topUpCreditPublicInputs,\n} from \"./credit-lifecycle\";\nimport {\n normalizeTransactRequest,\n transactUserPublicInputs,\n type BuildTransactCalldataParams,\n} from \"./funds\";\nimport { FIELD_MODULUS, type FundingInput } from \"./validation\";\nimport layouts from \"./witness-layouts.json\";\n\nexport interface NoteMembership {\n note: Note;\n treeId: bigint;\n leafIndex: number;\n path: readonly bigint[];\n}\nexport interface CreditMembership {\n state: CreditDeliveryState;\n treeId: bigint;\n leafIndex: number;\n path: readonly bigint[];\n}\nexport interface TransactWitnessParams extends Omit<\n BuildTransactCalldataParams,\n \"proof\" | \"context\"\n> {\n inputs: readonly NoteMembership[];\n outputs: readonly Note[];\n authorization?: AuthorizedStatement;\n target?: ProofTarget;\n}\nexport interface CreateCreditWitnessParams {\n params: CreateCreditParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n inputs: readonly NoteMembership[];\n state: CreditDeliveryState;\n change?: Note;\n authorization: AuthorizedStatement;\n}\nexport interface DrawCreditWitnessParams {\n /** Explicit chain timestamp used to prepare this signed statement. */\n timestamp: bigint;\n params: CreditDrawParams;\n deliveries: readonly Delivery[];\n inputs: readonly CreditMembership[];\n amounts: readonly bigint[];\n authorization: AuthorizedStatement;\n}\nexport interface CancelCreditWitnessParams {\n params: CancelCreditParams;\n input: CreditMembership;\n authorization: AuthorizedStatement;\n}\nexport interface TopUpCreditWitnessParams extends Omit<CreateCreditWitnessParams, \"params\"> {\n params: TopUpCreditParams;\n previous: CreditMembership;\n}\nconst pad = <T>(values: readonly T[], count: number, zero: () => T): T[] => {\n if (values.length > count) throw new Error(\"witness capacity exceeded\");\n return [...values, ...Array.from({ length: count - values.length }, zero)];\n};\nconst policyWitness = (note: CreditNote, usage = true) => {\n const p = normalizeCreditPolicy(note);\n return {\n single_limit: p.singleLimit,\n daily_limit: p.dailyLimit,\n monthly_limit: p.monthlyLimit,\n ...(usage\n ? {\n last_day: p.lastDay,\n daily_spent: p.dailySpent,\n last_month: p.lastMonth,\n monthly_spent: p.monthlySpent,\n }\n : {}),\n };\n};\nconst zeros = () => Array<bigint>(16).fill(0n);\nconst zeroAuthority = (): WalletAuthorizationWitness => ({\n public_key_x: Array<number>(32).fill(0),\n public_key_y: Array<number>(32).fill(0),\n signature: Array<number>(64).fill(0),\n});\nfunction check(ok: boolean, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\nfunction provingRequest(\n circuitName: CircuitName,\n privateInputs: Record<string, unknown>,\n expectedPublicInputs: readonly Hex[],\n target: ProofTarget = \"evm\"\n): ProvingRequest {\n const schema = layouts[circuitName],\n key = schema.keys[target as keyof typeof schema.keys];\n check(typeof key === \"string\", \"unpublished proof target\");\n check(\n expectedPublicInputs.length === schema.publicInputCount,\n \"public input order/width mismatch\"\n );\n check(\n Object.keys(privateInputs).length === schema.private.length &&\n schema.private.every((name) => Object.hasOwn(privateInputs, name)),\n \"private witness schema mismatch\"\n );\n let offset = 0;\n const publicInputs: Record<string, unknown> = {};\n for (const entry of schema.public) {\n const values = expectedPublicInputs.slice(offset, offset + entry.count).map((value) => {\n const n = BigInt(value);\n check(n >= 0n && n < FIELD_MODULUS, \"noncanonical public input\");\n return n;\n });\n publicInputs[entry.name] = entry.array ? values : values[0];\n offset += entry.count;\n }\n check(offset === expectedPublicInputs.length, \"public input layout mismatch\");\n return {\n circuitName,\n target,\n artifactSha256: schema.artifactSha256,\n vkSha256: key,\n expectedPublicInputs: [...expectedPublicInputs],\n witness: new LocalWitness({ ...privateInputs, ...publicInputs }),\n };\n}\n/** Local typed assembly for authenticated circuit releases; no network or backend selection. */\nexport class WitnessBuilder {\n readonly #protocol: TokenProtocol;\n constructor(protocol: TokenProtocol) {\n this.#protocol = protocol;\n }\n static statement(\n circuitName: CircuitName,\n expectedPublicInputs: readonly Hex[],\n target: ProofTarget = \"evm\"\n ): ProofStatement {\n const schema = layouts[circuitName],\n key = schema.keys[target as keyof typeof schema.keys];\n check(\n typeof key === \"string\" && expectedPublicInputs.length === schema.publicInputCount,\n \"unpublished target or statement width mismatch\"\n );\n return {\n circuitName,\n target,\n artifactSha256: schema.artifactSha256,\n vkSha256: key,\n expectedPublicInputs: [...expectedPublicInputs],\n };\n }\n private context(note: Note | CreditNote): void {\n const c = this.#protocol.context;\n check(\n note.chainId === c.chainId &&\n note.protocolAddress === BigInt(c.protocolAddress) &&\n note.tokenAddress === BigInt(c.tokenAddress),\n \"note context mismatch\"\n );\n }\n private async authority(\n operation: WalletOperation,\n capacity: number,\n words: readonly Hex[],\n signed: AuthorizedStatement | undefined,\n identity: Hex\n ): Promise<WalletAuthorizationWitness> {\n check(!!signed, \"private wallet authorization required\");\n const c = this.#protocol.context,\n request = {\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation,\n capacity,\n words: words.slice(0, -2).map(BigInt),\n };\n check(\n signed.walletIdentity === identity &&\n signed.digest === computeWalletAuthorizationDigest(request),\n \"authorization statement mismatch\"\n );\n const witness = signed.withWitness((value) => value);\n check(\n await verifyWalletAuthorization(\n identity,\n Uint8Array.from([4, ...witness.public_key_x, ...witness.public_key_y]),\n Uint8Array.from(witness.signature),\n request\n ),\n \"invalid wallet authorization\"\n );\n return witness;\n }\n private async membership(\n leaf: Hex,\n input: { treeId: bigint; leafIndex: number; path: readonly bigint[] },\n sources: readonly InputSource[]\n ): Promise<number> {\n const source = sources.findIndex((value) => value.treeId === input.treeId);\n check(\n source >= 0 &&\n Number.isInteger(input.leafIndex) &&\n input.leafIndex >= 0 &&\n input.leafIndex < 65536 &&\n input.path.length === 16,\n \"invalid membership position\"\n );\n let root = BigInt(leaf);\n for (let level = 0; level < 16; level++)\n root = BigInt(\n await poseidonHash(\n (input.leafIndex >> level) & 1\n ? [input.path[level]!, root]\n : [root, input.path[level]!]\n )\n );\n check(root === BigInt(sources[source]!.merkleRoot), \"membership root mismatch\");\n return source;\n }\n private async noteLeaf(note: Note): Promise<Hex> {\n this.context(note);\n return computeNoteCommitment(\n note.chainId,\n await computeNoteIdentity(BigInt(note.walletIdentity), note.nonce),\n note.tokenAddress,\n note.amount\n );\n }\n private async creditLeaf(note: CreditNote): Promise<Hex> {\n this.context(note);\n return computeCreditCommitment(\n note.chainId,\n note.spenderWalletIdentity,\n note.ownerWalletIdentity,\n note.spenderPayout,\n note.ownerPayout,\n note.tokenAddress,\n note.amount,\n note.nonce,\n note.expiry,\n await computeCreditSharedKeyHash(note.creditSharedKey),\n note\n );\n }\n private async noteInputs(\n inputs: readonly NoteMembership[],\n sources: readonly InputSource[],\n nullifiers: readonly Hex[],\n identity: Hex,\n authority: WalletAuthorizationWitness\n ) {\n check(inputs.length === nullifiers.length, \"input count mismatch\");\n return Promise.all(\n inputs.map(async (input, i) => {\n check(input.note.walletIdentity === identity, \"input wallet mismatch\");\n const leaf = await this.noteLeaf(input.note);\n check(\n (await computeNoteNullifier(input.note.chainId, input.note.nonce, leaf)) ===\n nullifiers[i],\n \"input nullifier mismatch\"\n );\n return BigInt(await this.membership(leaf, input, sources));\n })\n );\n }\n async transact(p: TransactWitnessParams): Promise<ProvingRequest> {\n const c = this.#protocol.context,\n n = normalizeTransactRequest(c, p.params, p.deliveries, p.funding),\n words = transactUserPublicInputs(c, p.params, p.deliveries, p.funding);\n check(\n p.inputs.length === n.inputCount && p.outputs.length === n.outputCount,\n \"note count mismatch\"\n );\n const identity = p.inputs[0]?.note.walletIdentity;\n const unsignedSweep =\n !!identity &&\n !p.authorization &&\n n.outputCount === 0 &&\n n.depositAmount === 0n &&\n BigInt(p.params.withdrawalAddress) === BigInt(identity);\n const authority =\n identity && !unsignedSweep\n ? await this.authority(\"transact\", n.capacity, words, p.authorization, identity)\n : zeroAuthority();\n const sources = await this.noteInputs(\n p.inputs,\n p.params.sources,\n p.params.nullifiers,\n identity ?? ((\"0x\" + \"00\".repeat(32)) as Hex),\n authority\n );\n for (const [i, note] of p.outputs.entries())\n check(\n (await this.noteLeaf(note)) === p.params.outputCommitments[i],\n \"output commitment mismatch\"\n );\n const all = [...p.inputs.map((input) => input.note), ...p.outputs];\n return provingRequest(\n `transact_user_slots${n.capacity}`,\n {\n wallet_identity: identity ? BigInt(identity) : 0n,\n ...authority,\n output_wallet_identities: pad(\n [\n ...p.inputs.map(() => 0n),\n ...p.outputs.map((note) => BigInt(note.walletIdentity)),\n ],\n n.capacity,\n () => 0n\n ),\n amounts: pad(\n all.map((note) => note.amount),\n n.capacity,\n () => 0n\n ),\n nonces: pad(\n all.map((note) => note.nonce),\n n.capacity,\n () => 0n\n ),\n leaf_indices: pad(\n p.inputs.map((input) => BigInt(input.leafIndex)),\n n.capacity,\n () => 0n\n ),\n merkle_paths: pad(\n p.inputs.map((input) => [...input.path]),\n n.capacity,\n zeros\n ),\n input_source_indices: pad(sources, n.capacity, () => 0n),\n },\n words,\n p.target\n );\n }\n private async creation(\n p: CreateCreditWitnessParams,\n operation: \"create-credit\" | \"top-up-credit\",\n words: readonly Hex[]\n ) {\n const state = normalizeCreditDeliveryState(p.state),\n note = state.note;\n check(\n (await this.creditLeaf(note)) === p.params.creditCommitment &&\n note.ownerPayout === BigInt(p.params.owner) &&\n note.expiry === p.params.expiry,\n \"Credit creation mismatch\"\n );\n if (\n operation === \"create-credit\" &&\n [note.lastDay, note.dailySpent, note.lastMonth, note.monthlySpent].some((v) => v !== 0n)\n )\n throw new Error(\"new Credit usage must be zero\");\n const authority = await this.authority(\n operation,\n 10,\n words,\n p.authorization,\n note.ownerWalletIdentity\n );\n const sources = await this.noteInputs(\n p.inputs,\n p.params.sources,\n p.params.nullifiers,\n note.ownerWalletIdentity,\n authority\n );\n if (p.change)\n check(\n p.change.walletIdentity === note.ownerWalletIdentity &&\n (await this.noteLeaf(p.change)) === p.params.changeCommitment,\n \"change commitment mismatch\"\n );\n else check(BigInt(p.params.changeCommitment) === 0n, \"missing change note\");\n return {\n ...authority,\n input_amounts: pad(\n p.inputs.map((input) => input.note.amount),\n 10,\n () => 0n\n ),\n input_nonces: pad(\n p.inputs.map((input) => input.note.nonce),\n 10,\n () => 0n\n ),\n leaf_indices: pad(\n p.inputs.map((input) => BigInt(input.leafIndex)),\n 10,\n () => 0n\n ),\n merkle_paths: pad(\n p.inputs.map((input) => [...input.path]),\n 10,\n zeros\n ),\n input_source_indices: pad(sources, 10, () => 0n),\n spender_payout: note.spenderPayout,\n spender_wallet_identity: BigInt(note.spenderWalletIdentity),\n owner_wallet_identity: BigInt(note.ownerWalletIdentity),\n ...policyWitness(note, operation === \"top-up-credit\"),\n credit_amount: note.amount,\n credit_nonce: note.nonce,\n credit_shared_key: note.creditSharedKey,\n change_amount: p.change?.amount ?? 0n,\n change_nonce: p.change?.nonce ?? 0n,\n };\n }\n async createCredit(p: CreateCreditWitnessParams): Promise<ProvingRequest> {\n const words = createCreditPublicInputs(\n this.#protocol.context,\n p.params,\n p.deliveries,\n p.funding\n );\n return provingRequest(\n \"create_credit\",\n await this.creation(p, \"create-credit\", words),\n words\n );\n }\n async cancelCredit(p: CancelCreditWitnessParams): Promise<ProvingRequest> {\n const note = normalizeCreditDeliveryState(p.input.state).note,\n leaf = await this.creditLeaf(note),\n c = this.#protocol.context;\n check(\n (await computeCreditNullifier(c.chainId, note.creditSharedKey, leaf)) ===\n p.params.nullifier &&\n note.amount === p.params.amount &&\n note.ownerPayout === BigInt(p.params.owner),\n \"Credit cancellation mismatch\"\n );\n await this.membership(leaf, p.input, [p.params.source]);\n const words = cancelCreditPublicInputs(c, p.params),\n authority = await this.authority(\n \"cancel-credit\",\n 1,\n words,\n p.authorization,\n note.ownerWalletIdentity\n );\n return provingRequest(\n \"credit_cancel\",\n {\n ...authority,\n spender_payout: note.spenderPayout,\n spender_wallet_identity: BigInt(note.spenderWalletIdentity),\n owner_wallet_identity: BigInt(note.ownerWalletIdentity),\n ...policyWitness(note),\n input_nonce: note.nonce,\n expiry: note.expiry,\n credit_shared_key: note.creditSharedKey,\n leaf_index: BigInt(p.input.leafIndex),\n merkle_path: [...p.input.path],\n },\n words\n );\n }\n async drawCredit(p: DrawCreditWitnessParams): Promise<ProvingRequest> {\n const c = { ...this.#protocol.context, timestamp: p.timestamp },\n profile = selectCreditDrawCircuit(p.inputs.length),\n capacity = profile.maxSize;\n check(\n p.inputs.length === p.amounts.length && p.inputs.length === p.params.nullifiers.length,\n \"draw input count mismatch\"\n );\n const notes = p.inputs.map((input) => normalizeCreditDeliveryState(input.state).note),\n identity = notes[0]!.spenderWalletIdentity;\n const words = creditDrawPublicInputs(c, p.params, p.deliveries),\n authority = await this.authority(\n \"credit-draw\",\n capacity,\n words,\n p.authorization,\n identity\n );\n const sourceIndices = await Promise.all(\n notes.map(async (note, i) => {\n applyCreditDrawUsage(note, p.amounts[i]!, p.timestamp);\n const leaf = await this.creditLeaf(note);\n check(\n note.spenderWalletIdentity === identity &&\n note.spenderPayout === BigInt(p.params.spender) &&\n note.expiry === p.params.expiries[i] &&\n p.amounts[i]! > 0n &&\n p.amounts[i]! <= note.amount &&\n (await computeCreditNullifier(c.chainId, note.creditSharedKey, leaf)) ===\n p.params.nullifiers[i],\n \"Credit draw mismatch\"\n );\n return BigInt(await this.membership(leaf, p.inputs[i]!, p.params.sources));\n })\n );\n return provingRequest(\n profile.name as CircuitName,\n {\n ...authority,\n ...Object.fromEntries(\n Object.entries({\n singleLimit: \"single_limits\",\n dailyLimit: \"daily_limits\",\n monthlyLimit: \"monthly_limits\",\n lastDay: \"last_days\",\n dailySpent: \"daily_spents\",\n lastMonth: \"last_months\",\n monthlySpent: \"monthly_spents\",\n }).map(([key, name]) => [\n name,\n pad(\n notes.map(\n (note) =>\n normalizeCreditPolicy(note)[\n key as keyof ReturnType<typeof normalizeCreditPolicy>\n ]\n ),\n capacity,\n () => 0n\n ),\n ])\n ),\n spender_wallet_identity: BigInt(identity),\n owner_payouts: pad(\n notes.map((note) => note.ownerPayout),\n capacity,\n () => 0n\n ),\n owner_wallet_identities: pad(\n notes.map((note) => BigInt(note.ownerWalletIdentity)),\n capacity,\n () => 0n\n ),\n input_amounts: pad(\n notes.map((note) => note.amount),\n capacity,\n () => 0n\n ),\n input_nonces: pad(\n notes.map((note) => note.nonce),\n capacity,\n () => 0n\n ),\n credit_shared_keys: pad(\n notes.map((note) => note.creditSharedKey),\n capacity,\n () => 0n\n ),\n leaf_indices: pad(\n p.inputs.map((input) => BigInt(input.leafIndex)),\n capacity,\n () => 0n\n ),\n merkle_paths: pad(\n p.inputs.map((input) => [...input.path]),\n capacity,\n zeros\n ),\n input_source_indices: pad(sourceIndices, capacity, () => 0n),\n draw_amounts: pad(p.amounts, capacity, () => 0n),\n },\n words\n );\n }\n async topUpCredit(p: TopUpCreditWitnessParams): Promise<ProvingRequest> {\n const c = this.#protocol.context,\n previous = normalizeCreditDeliveryState(p.previous.state),\n next = normalizeCreditDeliveryState(p.state),\n old = previous.note,\n note = next.note,\n leaf = await this.creditLeaf(old);\n for (const field of [\n \"spenderWalletIdentity\",\n \"ownerWalletIdentity\",\n \"spenderPayout\",\n \"ownerPayout\",\n \"creditSharedKey\",\n \"lastDay\",\n \"dailySpent\",\n \"lastMonth\",\n \"monthlySpent\",\n ] as const)\n check(old[field] === note[field], \"Credit role or payout changed\");\n check(\n JSON.stringify(previous.ownerReceivingKeys) ===\n JSON.stringify(next.ownerReceivingKeys) &&\n JSON.stringify(previous.spenderReceivingKeys) ===\n JSON.stringify(next.spenderReceivingKeys),\n \"Credit receiving snapshots changed\"\n );\n check(\n old.amount < note.amount &&\n old.expiry <= note.expiry &&\n old.expiry === p.params.previousExpiry &&\n (c.now === undefined || old.expiry > c.now),\n \"invalid Credit top-up\"\n );\n check(\n (await computeCreditNullifier(c.chainId, old.creditSharedKey, leaf)) ===\n p.params.creditNullifier,\n \"previous Credit nullifier mismatch\"\n );\n await this.membership(leaf, p.previous, [p.params.creditSource]);\n const words = topUpCreditPublicInputs(c, p.params, p.deliveries, p.funding),\n base = await this.creation({ ...p, params: p.params.creation }, \"top-up-credit\", words);\n return provingRequest(\n \"credit_top_up\",\n {\n ...base,\n previous_single_limit: old.singleLimit!,\n previous_daily_limit: old.dailyLimit!,\n previous_monthly_limit: old.monthlyLimit!,\n previous_credit_amount: old.amount,\n previous_credit_nonce: old.nonce,\n previous_credit_leaf_index: BigInt(p.previous.leafIndex),\n previous_credit_merkle_path: [...p.previous.path],\n },\n words\n );\n }\n}\n","{\n \"transact_user_slots14\": {\n \"artifactSha256\": \"486a749ae3944ae83a7ff2d298e7469b18737d88553a7d99c4782f22f7332996\",\n \"keys\": {\n \"evm\": \"7b3e65d5201246e733a1816489d80acb219a98e8606e1b81e6d48ff0c1fd537a\",\n \"noir-recursive\": \"148957e28e6339a8ce1121851fb7a232e31f4c5b741e415733b8d627f4b62649\"\n },\n \"publicInputCount\": 57,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 14,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 14,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 14,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_user_slots56\": {\n \"artifactSha256\": \"169db2ff23c15adb14756edf9bb99bbd343df807b3e1c7f1f510070897e653cf\",\n \"keys\": {\n \"evm\": \"cbf54de94bff266bf846f9722c0f3ffa1fb7a0f9f478466f193de0e9123ce7f5\"\n },\n \"publicInputCount\": 183,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 56,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 56,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 56,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_user_slots112\": {\n \"artifactSha256\": \"221bbbd6ff0c7d7dec74677e52484f082b3e176bb0fa47f3236064e396d73739\",\n \"keys\": {\n \"evm\": \"67b2d361b023f193ecdb5a9aefbe2840349ee5ce848ab4101416734f3a7e91e9\"\n },\n \"publicInputCount\": 351,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 112,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 112,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 112,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_user_slots168\": {\n \"artifactSha256\": \"d479253eaaacc973806a84e142e2362d873bba0f150ce050d32b8d9b2947adc8\",\n \"keys\": {\n \"evm\": \"c50e72b0718c6393f82f5a67e248ba093d0db56ece42bbf092da93e9369c2624\"\n },\n \"publicInputCount\": 519,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 168,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 168,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 168,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_aggregate_14_4\": {\n \"artifactSha256\": \"4fe7c63fb80cba35af4c4525fbabcfb75033286e681afbdcb3fb043c03456246\",\n \"keys\": {\n \"evm\": \"664d4ff0de6b8c876ce990ea368d7a59cee411463c24dd5621d64c8949554674\"\n },\n \"publicInputCount\": 229,\n \"public\": [\n {\n \"name\": \"statements\",\n \"count\": 4,\n \"array\": true\n },\n {\n \"name\": \"inner_vk_commitment\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"verification_key\",\n \"key_hash\",\n \"proofs\"\n ]\n },\n \"transact_aggregate_14_8\": {\n \"artifactSha256\": \"0a266ad4bb4c6dce42b1e851fcbb34b1becae1edd6bf6af82d7b9ed7184576df\",\n \"keys\": {\n \"evm\": \"042139122d0eee8beeaa9c18397276fa5a2872218495fa16ca438fbdd80fa3e1\"\n },\n \"publicInputCount\": 457,\n \"public\": [\n {\n \"name\": \"statements\",\n \"count\": 8,\n \"array\": true\n },\n {\n \"name\": \"inner_vk_commitment\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"verification_key\",\n \"key_hash\",\n \"proofs\"\n ]\n },\n \"transact_aggregate_14_12\": {\n \"artifactSha256\": \"738849e83eb4a78eb69cb6e20a86f6f27ba3784d04a83abd338f84de5c20d7d2\",\n \"keys\": {\n \"evm\": \"539928b264aea4d07a41e772d5d5a7b7666a6883decb985c27ca7422e7f8ea1f\"\n },\n \"publicInputCount\": 685,\n \"public\": [\n {\n \"name\": \"statements\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"inner_vk_commitment\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"verification_key\",\n \"key_hash\",\n \"proofs\"\n ]\n },\n \"create_credit\": {\n \"artifactSha256\": \"3ed6cfdee4f5fd840f023580f76c208768777fea79737f2511377e5c55be0230\",\n \"keys\": {\n \"evm\": \"56f663c6053be0d158a271022d200c732597efd3a2e0be48fe94549d0b1795e0\"\n },\n \"publicInputCount\": 46,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"owner_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"credit_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"change_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"expiry\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"input_amounts\",\n \"input_nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_payout\",\n \"spender_wallet_identity\",\n \"owner_wallet_identity\",\n \"credit_amount\",\n \"credit_nonce\",\n \"credit_shared_key\",\n \"single_limit\",\n \"daily_limit\",\n \"monthly_limit\",\n \"change_amount\",\n \"change_nonce\"\n ]\n },\n \"credit_draw_slots1\": {\n \"artifactSha256\": \"4542b227e0552b45c302f1dace21cadeba4962c96244e021472f1f7531cff8d1\",\n \"keys\": {\n \"evm\": \"43c051a2bedf9454c12e70b10156361e414944823ba23e80662c16c7ced0a2ce\"\n },\n \"publicInputCount\": 20,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_draw_slots12\": {\n \"artifactSha256\": \"dd72b0867fc3be7cd90de263bd2d0892075cb18eb4f6dd671b13111710f10369\",\n \"keys\": {\n \"evm\": \"5e31d771e6294993736078596d9c69f21fe7595eda50e3cce6d7406b65cf1443\"\n },\n \"publicInputCount\": 86,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_draw_slots50\": {\n \"artifactSha256\": \"09c7469866748b4c0c4bbf2b040844771948a170999f6dc7a38fe5c0ecda4054\",\n \"keys\": {\n \"evm\": \"7b613225b6f32a077011d4196c356e836d22dcd116efe687fde53144fbd8db9f\"\n },\n \"publicInputCount\": 314,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_draw_slots120\": {\n \"artifactSha256\": \"6ccd0366a669c50fd5da875c3eae194fe8aa4c36d35a5f9ebfd64636ea599b48\",\n \"keys\": {\n \"evm\": \"d715848afc5c1ecdfcef5ed5026865abef5040a3bc232fd65330a5ffee8475fb\"\n },\n \"publicInputCount\": 734,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_cancel\": {\n \"artifactSha256\": \"b4459c2cf756d096e37291cf4d7cd129866b6d420b6d03c928f383b057112ccb\",\n \"keys\": {\n \"evm\": \"fc8ad196ef15f3328afcc8f01d867a3ebefd15451c2813948442fab1923b73b2\"\n },\n \"publicInputCount\": 11,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"owner_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"merkle_root\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"nullifier\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_payout\",\n \"spender_wallet_identity\",\n \"owner_wallet_identity\",\n \"input_nonce\",\n \"expiry\",\n \"credit_shared_key\",\n \"single_limit\",\n \"daily_limit\",\n \"monthly_limit\",\n \"last_day\",\n \"daily_spent\",\n \"last_month\",\n \"monthly_spent\",\n \"leaf_index\",\n \"merkle_path\"\n ]\n },\n \"credit_top_up\": {\n \"artifactSha256\": \"2ffebd5753ec1b0c050204d4f97498765fe61ea01a793a9b2466c2f97536345c\",\n \"keys\": {\n \"evm\": \"40b02a9d2e7eb7b49daaac4b7760328537b7982fd5a225cc065bb74cd5ef44b3\"\n },\n \"publicInputCount\": 50,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"owner_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"credit_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"change_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"expiry\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"credit_tree_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"credit_merkle_root\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"credit_nullifier\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"previous_expiry\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"input_amounts\",\n \"input_nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_payout\",\n \"spender_wallet_identity\",\n \"owner_wallet_identity\",\n \"credit_amount\",\n \"credit_nonce\",\n \"credit_shared_key\",\n \"single_limit\",\n \"daily_limit\",\n \"monthly_limit\",\n \"previous_single_limit\",\n \"previous_daily_limit\",\n \"previous_monthly_limit\",\n \"last_day\",\n \"daily_spent\",\n \"last_month\",\n \"monthly_spent\",\n \"change_amount\",\n \"change_nonce\",\n \"previous_credit_amount\",\n \"previous_credit_nonce\",\n \"previous_credit_leaf_index\",\n \"previous_credit_merkle_path\"\n ]\n }\n}\n","import type { Hex } from \"./contracts\";\nimport { Contract, getAddress, type ContractRunner } from \"ethers\";\n\nimport { invisiFactoryAbi } from \"./contracts\";\n/**\n * Query the selected factory. The caller still verifies the returned deployment profile.\n * Calls `factory.getInstanceAddress(salt)` on-chain.\n */\nexport async function resolveInstanceAddress(\n client: ContractRunner,\n factoryAddress: `0x${string}`,\n salt: `0x${string}`\n): Promise<`0x${string}`> {\n const instance = await new Contract(\n getAddress(factoryAddress),\n invisiFactoryAbi,\n client\n ).getFunction(\"getInstanceAddress\")(salt);\n return getAddress(instance) as Hex;\n}\n"],"mappings":"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AA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MA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","names":["import_ethers","import_core","import_ethers","import_core","import_ethers","import_core","import_ethers","v","import_ethers","import_core","hashContext","import_ethers","import_core","import_ethers","import_ethers","import_core","import_core","import_core","import_core","pad","check","notes","field","import_ethers"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/AddressRegistry.ts","../src/RegistrationOperation.ts","../src/contracts/abis/InvisiProtocol.ts","../src/contracts/abis/InvisiFactory.ts","../src/contracts/abis/InvisiAddressRegistry.ts","../src/registry.ts","../src/credit-create.ts","../src/validation.ts","../src/credit-lifecycle.ts","../src/funds.ts","../src/Protocol.ts","../src/TokenProtocol.ts","../src/verify.ts","../src/witness.ts","../src/witness-layouts.json","../src/factory.ts"],"sourcesContent":["export * from \"./AddressRegistry\";\nexport * from \"./credit-create\";\nexport * from \"./credit-lifecycle\";\nexport * from \"./funds\";\nexport * from \"./interfaces\";\nexport * from \"./Protocol\";\nexport * from \"./registry\";\nexport * from \"./validation\";\nexport * from \"./verify\";\nexport * from \"./witness\";\n\nexport * from \"./factory\";\nexport * from \"./RegistrationOperation\";\nexport * from \"./TokenProtocol\";\n","import type { Hex } from \"./contracts\";\nimport { getAddress, keccak256 } from \"ethers\";\n\nimport {\n MissingCapabilityError,\n ReceivingAddress,\n type ReceivingKeyLookup,\n} from \"@invisi-labs/core\";\nimport {\n RegistrationOperation,\n type RegistrationPreparation,\n type RegistryReader,\n} from \"./RegistrationOperation\";\nimport {\n buildRegistrationCalldata,\n registrationTypedData,\n registrationDigest,\n type AddressRegistration,\n type RegistrationOptions,\n type RegistryContext,\n} from \"./registry\";\n\nexport interface AddressRegistryOptions {\n lookup?: ReceivingKeyLookup;\n expectedRuntimeCodeHash?: Hex;\n}\n\n/** Independent registry deployment and nonce domain, selected by the application. */\nexport class AddressRegistry {\n readonly context: Readonly<RegistryContext>;\n readonly #lookup: ReceivingKeyLookup | undefined;\n readonly expectedRuntimeCodeHash: Hex | undefined;\n\n constructor(context: RegistryContext, options: AddressRegistryOptions = {}) {\n if (\n typeof context.chainId !== \"bigint\" ||\n context.chainId < 0n ||\n context.chainId >= 1n << 64n ||\n BigInt(getAddress(context.registryAddress) as Hex) === 0n\n ) {\n throw new Error(\"invalid registry context\");\n }\n this.context = Object.freeze({\n ...context,\n registryAddress: getAddress(context.registryAddress) as Hex,\n });\n this.#lookup = options.lookup;\n this.expectedRuntimeCodeHash = options.expectedRuntimeCodeHash?.toLowerCase() as\n Hex | undefined;\n if (\n this.expectedRuntimeCodeHash &&\n !/^0x[0-9a-f]{64}$/.test(this.expectedRuntimeCodeHash)\n ) {\n throw new Error(\"invalid registry runtime profile\");\n }\n Object.freeze(this);\n }\n\n async validateDeployment(\n reader: Pick<RegistryReader, \"getChainId\" | \"getCode\">\n ): Promise<void> {\n if (!this.expectedRuntimeCodeHash) {\n throw new MissingCapabilityError(\"trusted registry deployment profile\");\n }\n if ((await reader.getChainId()) !== this.context.chainId) {\n throw new Error(\"registry chain mismatch\");\n }\n const code = await reader.getCode(this.context.registryAddress);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(code) ||\n (keccak256(code) as Hex) !== this.expectedRuntimeCodeHash\n ) {\n throw new Error(\"registry runtime profile mismatch\");\n }\n }\n\n prepareRegistration(options: RegistrationPreparation): Promise<RegistrationOperation> {\n return RegistrationOperation.prepare(this, options);\n }\n\n async resolve(address: string): Promise<string> {\n const receiving = ReceivingAddress.parse(address);\n if (receiving.kind === \"short\" && !this.#lookup) {\n throw new MissingCapabilityError(\"registry reader\");\n }\n return (await receiving.resolve(this.#lookup)).toString();\n }\n\n typedData(registration: AddressRegistration, options?: RegistrationOptions) {\n return registrationTypedData(this.context, registration, options);\n }\n\n digest(registration: AddressRegistration, options?: RegistrationOptions) {\n return registrationDigest(this.context, registration, options);\n }\n\n buildCall(\n registration: AddressRegistration,\n signature: `0x${string}`,\n options?: RegistrationOptions\n ) {\n return buildRegistrationCalldata(this.context, registration, signature, options);\n }\n}\n","import type { PublicWallet } from \"@invisi-labs/core\";\nimport type { Address, Hex } from \"./contracts\";\nimport { hexlify, Interface, getBytes, verifyTypedData } from \"ethers\";\n\nimport { invisiAddressRegistryAbi } from \"./contracts\";\nimport { ReceivingAddress, createSigningRequest } from \"@invisi-labs/core\";\nimport type { AddressRegistry } from \"./AddressRegistry\";\nimport type { CanonicalBlock, ChainReader, TransactionCall } from \"./interfaces\";\nimport {\n buildRegistrationCalldata,\n registrationTypedData,\n registrationDigest,\n type AddressRegistration,\n type RegistryContext,\n} from \"./registry\";\n\nexport interface RegistryReader extends Pick<\n ChainReader,\n \"getChainId\" | \"getCode\" | \"getBlock\" | \"getLatestBlockNumber\" | \"getTransaction\" | \"getReceipt\"\n> {\n /** Validate arbitrary ERC-1271 bytes for a contract owner; transport errors propagate. */\n isValidRegistrationSignature?(owner: Address, digest: Hex, signature: Hex): Promise<boolean>;\n getRegistryNonce(\n context: RegistryContext,\n walletIdentity: Hex,\n block: CanonicalBlock\n ): Promise<bigint>;\n}\n\nexport interface RegistrationPreparation {\n wallet: PublicWallet;\n reader: RegistryReader;\n deadline?: bigint;\n update?: boolean;\n}\n\nexport type RegistrationStatus =\n | \"prepared\"\n | \"ready\"\n | \"submitted\"\n | \"confirmed\"\n | \"uncertain\"\n | \"failed\"\n | \"expired\"\n | \"reorged\";\n\ninterface RegistrationPlan {\n id: string;\n context: RegistryContext;\n registration: AddressRegistration;\n update: boolean;\n}\n\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) {\n throw new Error(message);\n }\n}\n\nexport class RegistrationOperation {\n readonly #registry: AddressRegistry;\n readonly #runtime: RegistrationPreparation;\n readonly #plan: RegistrationPlan;\n readonly #signature: Hex | undefined;\n readonly #hash: Hex | undefined;\n readonly #anchor: CanonicalBlock | undefined;\n readonly status: RegistrationStatus;\n\n private constructor(\n registry: AddressRegistry,\n runtime: RegistrationPreparation,\n plan: RegistrationPlan,\n status: RegistrationStatus,\n signature?: Hex,\n hash?: Hex,\n anchor?: CanonicalBlock\n ) {\n this.#registry = registry;\n this.#runtime = { ...runtime };\n this.#plan = structuredClone(plan);\n this.status = status;\n this.#signature = signature;\n this.#hash = hash;\n this.#anchor = anchor ? { ...anchor } : undefined;\n Object.freeze(this);\n }\n\n static async prepare(\n registry: AddressRegistry,\n options: RegistrationPreparation\n ): Promise<RegistrationOperation> {\n const runtime = { ...options };\n const update = options.update ?? false;\n check(typeof update === \"boolean\", \"update must be boolean\");\n await registry.validateDeployment(runtime.reader);\n const block = await runtime.reader.getBlock(await runtime.reader.getLatestBlockNumber());\n const context = { ...registry.context, now: block.timestamp };\n const nonce = await runtime.reader.getRegistryNonce(\n context,\n runtime.wallet.walletIdentity,\n block\n );\n check(\n typeof nonce === \"bigint\" && nonce >= 0n && nonce < (1n << 64n) - 1n,\n \"invalid or exhausted registry nonce\"\n );\n check(\n update ? nonce > 0n : nonce === 0n,\n update ? \"wallet is not registered\" : \"wallet is already registered; prepare an update\"\n );\n const address = ReceivingAddress.parse(await registry.resolve(runtime.wallet.getAddress()));\n const keys = address.getReceivingKeys();\n const registration: AddressRegistration = {\n walletIdentity: runtime.wallet.walletIdentity,\n keys: {\n viewingPublicKey: hexlify(keys.viewingPublicKey) as Hex,\n clueKey: hexlify(keys.clueKey) as Hex,\n },\n nonce,\n deadline: options.deadline ?? block.timestamp + 300n,\n };\n registrationTypedData(context, registration, { update, expectedNonce: nonce });\n check(\n (await runtime.reader.getBlock(block.number)).hash === block.hash,\n \"canonical registry block changed while preparing\"\n );\n return new RegistrationOperation(\n registry,\n runtime,\n { id: crypto.randomUUID(), context, registration, update },\n \"prepared\"\n );\n }\n\n get id(): string {\n return this.#plan.id;\n }\n\n preview() {\n return {\n id: this.id,\n status: this.status,\n chainId: this.#plan.context.chainId,\n registryAddress: this.#plan.context.registryAddress,\n ...structuredClone(this.#plan.registration),\n update: this.#plan.update,\n };\n }\n\n /** Export portable EIP-712 data for external signing. */\n async exportRegistrationAuthorization(options: { signal?: AbortSignal } = {}) {\n check(this.status === \"prepared\", \"registry operation is not awaiting authorization\");\n options.signal?.throwIfAborted();\n await this.validateFreshness();\n options.signal?.throwIfAborted();\n return createSigningRequest(this.typedData());\n }\n\n /** Validate and attach an independently obtained EOA or ERC-1271 signature. */\n async withSignature(\n signature: string,\n options: { signal?: AbortSignal } = {}\n ): Promise<RegistrationOperation> {\n check(this.status === \"prepared\", \"registry operation is not awaiting authorization\");\n options.signal?.throwIfAborted();\n await this.validateFreshness();\n options.signal?.throwIfAborted();\n check(\n /^0x(?:[a-fA-F0-9]{2})+$/.test(signature),\n \"registry signature must be nonempty hexadecimal bytes\"\n );\n const p = this.#plan;\n const owner = p.registration.walletIdentity as Address;\n // Match the protocol's SignatureChecker: canonical ECDSA first, including\n // delegated EOAs with code, then the contract-owner ERC-1271 fallback.\n let valid = false;\n try {\n const bytes = getBytes(signature);\n const typed = this.typedData();\n valid =\n bytes.length === 65 &&\n (bytes[64] === 27 || bytes[64] === 28) &&\n BigInt(verifyTypedData(typed.domain, typed.types, typed.message, signature)) ===\n BigInt(owner);\n } catch {\n valid = false;\n }\n if (!valid) {\n const code = await this.#runtime.reader.getCode(owner);\n check(/^0x(?:[a-fA-F0-9]{2})*$/.test(code), \"invalid owner contract code\");\n check(code !== \"0x\", \"invalid EOA registry signature\");\n const verify = this.#runtime.reader.isValidRegistrationSignature;\n check(verify, \"ERC-1271 registry signature verification capability is missing\");\n check(\n await verify.call(\n this.#runtime.reader,\n owner,\n registrationDigest(p.context, p.registration, { update: p.update }),\n signature as Hex\n ),\n \"invalid ERC-1271 registry signature\"\n );\n }\n options.signal?.throwIfAborted();\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n this.#plan,\n \"ready\",\n signature as Hex\n );\n }\n\n /** Empty signatures require the transaction sender to be the wallet owner. */\n async authorizeDirect(): Promise<RegistrationOperation> {\n check(this.status === \"prepared\", \"registry operation is not awaiting authorization\");\n await this.validateFreshness();\n return new RegistrationOperation(this.#registry, this.#runtime, this.#plan, \"ready\", \"0x\");\n }\n\n typedData() {\n const p = this.#plan;\n return registrationTypedData(p.context, p.registration, {\n update: p.update,\n expectedNonce: p.registration.nonce,\n });\n }\n\n private call(): TransactionCall {\n check(this.#signature !== undefined, \"registry signature is missing\");\n const p = this.#plan;\n const result = buildRegistrationCalldata(p.context, p.registration, this.#signature, {\n update: p.update,\n expectedNonce: p.registration.nonce,\n });\n return { to: result.to, data: result.callData, value: result.value };\n }\n\n async exportTransaction(): Promise<TransactionCall> {\n check(\n this.#signature !== undefined && this.status !== \"prepared\",\n \"registry operation is not ready\"\n );\n await this.validateFreshness();\n return this.call();\n }\n\n private async validateFreshness(): Promise<void> {\n await this.#registry.validateDeployment(this.#runtime.reader);\n const block = await this.#runtime.reader.getBlock(\n await this.#runtime.reader.getLatestBlockNumber()\n );\n const p = this.#plan;\n check(block.timestamp <= p.registration.deadline, \"registry operation has expired\");\n check(\n (await this.#runtime.reader.getRegistryNonce(\n p.context,\n p.registration.walletIdentity,\n block\n )) === p.registration.nonce,\n \"registry nonce changed; prepare again\"\n );\n check(\n (await this.#runtime.reader.getBlock(block.number)).hash === block.hash,\n \"canonical registry block changed during authorization\"\n );\n }\n\n /** Associate a signed/broadcast transaction; ethers owns sending and receipt waiting. */\n trackTransaction(transactionHash: string): RegistrationOperation {\n check(/^0x[a-fA-F0-9]{64}$/.test(transactionHash), \"invalid registry transaction hash\");\n check(\n this.#signature !== undefined && [\"ready\", \"uncertain\"].includes(this.status),\n \"registry operation is not ready\"\n );\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n this.#plan,\n \"uncertain\",\n this.#signature,\n transactionHash as Hex\n );\n }\n\n async reconcile(\n options: { transactionHash?: Hex; signal?: AbortSignal } = {}\n ): Promise<RegistrationOperation> {\n options.signal?.throwIfAborted();\n const { reader } = this.#runtime;\n const p = this.#plan;\n await this.#registry.validateDeployment(reader);\n if (\n this.#anchor &&\n (await reader.getBlock(this.#anchor.number)).hash !== this.#anchor.hash\n ) {\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n p,\n \"reorged\",\n this.#signature,\n this.#hash\n );\n }\n const hash = options.transactionHash ?? this.#hash;\n const receipt = hash ? await reader.getReceipt(hash) : null;\n if (receipt) {\n check(\n receipt.transactionHash === hash &&\n (await reader.getBlock(receipt.block.number)).hash === receipt.block.hash,\n \"registry receipt is not canonical\"\n );\n const transaction = await reader.getTransaction(hash!);\n const call = this.call();\n check(\n transaction &&\n transaction.transactionHash === hash &&\n transaction.to.toLowerCase() === call.to.toLowerCase() &&\n transaction.data.toLowerCase() === call.data.toLowerCase() &&\n transaction.value === 0n &&\n (this.#signature !== \"0x\" ||\n BigInt(transaction.from) === BigInt(p.registration.walletIdentity)),\n \"registry transaction differs from frozen request\"\n );\n check(\n receipt.status === \"success\" || receipt.status === \"reverted\",\n \"registry execution status is missing\"\n );\n if (receipt.status === \"success\") {\n const found = receipt.logs.some((log) => {\n if (\n log.address.toLowerCase() !== p.context.registryAddress.toLowerCase() ||\n log.transactionHash !== hash\n ) {\n return false;\n }\n try {\n const event = ((decoded) => ({\n eventName: decoded!.name,\n args: decoded!.args.toObject(),\n }))(\n new Interface(invisiAddressRegistryAbi).parseLog({\n data: log.data,\n topics: log.topics as never,\n })\n );\n return (\n event.eventName === \"ReceivingKeysSet\" &&\n BigInt(event.args.walletIdentity) ===\n BigInt(p.registration.walletIdentity) &&\n event.args.viewingPublicKey.toLowerCase() ===\n p.registration.keys.viewingPublicKey.toLowerCase() &&\n event.args.clueKey.toLowerCase() ===\n p.registration.keys.clueKey.toLowerCase() &&\n event.args.nextNonce === p.registration.nonce + 1n\n );\n } catch {\n return false;\n }\n });\n check(found, \"registry receipt has no matching key update event\");\n check(\n (await reader.getBlock(receipt.block.number)).hash === receipt.block.hash,\n \"registry block changed during confirmation\"\n );\n options.signal?.throwIfAborted();\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n p,\n \"confirmed\",\n this.#signature,\n hash,\n receipt.block\n );\n }\n }\n const head = await reader.getBlock(await reader.getLatestBlockNumber());\n const nonce = await reader.getRegistryNonce(p.context, p.registration.walletIdentity, head);\n check(\n (await reader.getBlock(head.number)).hash === head.hash,\n \"canonical registry block changed during reconciliation\"\n );\n return new RegistrationOperation(\n this.#registry,\n this.#runtime,\n p,\n head.timestamp > p.registration.deadline\n ? \"expired\"\n : nonce !== p.registration.nonce\n ? \"failed\"\n : \"uncertain\",\n this.#signature,\n hash\n );\n }\n\n toJSON() {\n return {\n id: this.id,\n kind: this.#plan.update ? \"update-receiving-keys\" : \"register-receiving-keys\",\n status: this.status,\n };\n }\n\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","// AUTO-GENERATED from invisi-protocol build artifacts. Run pnpm sync:abis.\nexport const invisiProtocolAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct InstanceParams\",\n \"components\": [\n {\n \"name\": \"factory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"globalEmergency\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"emergencyAdmin\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"verifierRouter\",\n \"type\": \"address\",\n \"internalType\": \"contract IVerifierRouter\"\n }\n ]\n },\n {\n \"name\": \"_screener\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_addressRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CHAIN_ID\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"FUND_SHIELD_TYPEHASH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"FUND_TRANSACT_TYPEHASH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"activeNoteTreeId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addressRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IAddressRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelCredit\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CancelCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"source\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.InputSource\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"circuitPaused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createCredit\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreateCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creditDraw\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreditDrawParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"remainderCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"expiries\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n },\n {\n \"name\": \"recoveryAmounts\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"totalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyAdmin\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"factory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getNoteTreeNextLeafIndex\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getNoteTreeRoot\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTreeCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"count\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalEmergency\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"invalidateNonce\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isCommitmentPaid\",\n \"inputs\": [\n {\n \"name\": \"noteCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isNullifierSpent\",\n \"inputs\": [\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isTreeFull\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pauseCircuit\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rootHistory\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"screener\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setScreener\",\n \"inputs\": [\n {\n \"name\": \"newScreener\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"shield\",\n \"inputs\": [\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.ShieldParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.ShieldOutput[]\",\n \"components\": [\n {\n \"name\": \"identity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"topUpCredit\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.TopUpCreditParams\",\n \"components\": [\n {\n \"name\": \"creation\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreateCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"creditSource\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.InputSource\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"creditNullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousExpiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transact\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"requests\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.TransactRequest[]\",\n \"components\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CrossTreeTransactParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"funding\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transact\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"r\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.TransactRequest\",\n \"components\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CrossTreeTransactParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"funding\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.FundingParams\",\n \"components\": [\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sigNonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"permit\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IMetaTx.TokenPermit\",\n \"components\": [\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ]\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpauseCircuit\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"verifierRouter\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IVerifierRouter\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"BatchOutputs\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"startLeafIndex\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"firstOutputOffset\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"tokens\",\n \"type\": \"address[]\",\n \"indexed\": false,\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"commitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"packedDeliveries\",\n \"type\": \"bytes\",\n \"indexed\": false,\n \"internalType\": \"bytes\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BatchRequest\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"requestIndex\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"capacity\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"depositAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"statementHash\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CircuitPauseUpdated\",\n \"inputs\": [\n {\n \"name\": \"paused\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CommitmentsInserted\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"startLeafIndex\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"commitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditCancelled\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"inputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditCreated\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditDraw\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.CreditDrawParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"remainderCommitments\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"expiries\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n },\n {\n \"name\": \"recoveryAmounts\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"totalAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"remainderLeafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreditToppedUp\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.TopUpCreditParams\",\n \"components\": [\n {\n \"name\": \"creation\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.CreateCreditParams\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"creditCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"changeCommitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"creditSource\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IInvisiProtocol.InputSource\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"creditNullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousExpiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CrossTreeTransact\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"sources\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.InputSource[]\",\n \"components\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"NonceInvalidated\",\n \"inputs\": [\n {\n \"name\": \"signer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newNonce\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PublicDeposit\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"proofHash\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ScreenerUpdated\",\n \"inputs\": [\n {\n \"name\": \"newScreener\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Shield\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"startLeafIndex\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transact\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"inputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"outputTreeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"nullifiers\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"outputCommitments\",\n \"type\": \"bytes32[]\",\n \"indexed\": false,\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"leafIndices\",\n \"type\": \"uint32[]\",\n \"indexed\": false,\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"deliveries\",\n \"type\": \"tuple[]\",\n \"indexed\": false,\n \"internalType\": \"struct IInvisiProtocol.Delivery[]\",\n \"components\": [\n {\n \"name\": \"ciphertext\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clue\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"withdrawalAddress\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"withdrawalAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TransactAggregated\",\n \"inputs\": [\n {\n \"name\": \"proofHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"requestCount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreeCreated\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AddressScreeningFailed\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ChainIdMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CommitmentAlreadyPaid\",\n \"inputs\": [\n {\n \"name\": \"commitment\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CreditDrawWindowClosed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DoubleSpend\",\n \"inputs\": [\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpiryInPast\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InexactTokenReceipt\",\n \"inputs\": [\n {\n \"name\": \"requested\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"received\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAddressRegistry\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAggregateBatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAmount\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidBatchSize\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCommitment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreditExpiry\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidDelivery\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidFunding\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidIdentityCommitment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidMerkleRoot\",\n \"inputs\": [\n {\n \"name\": \"root\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNonce\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNullifierKeyHash\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidOwnerIdentityCommitment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPrivateTransferCiphertext\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPrivateTransferContext\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPrivateTransferShape\",\n \"inputs\": [\n {\n \"name\": \"inputs\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"outputs\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidProof\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidReceivingAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShieldContext\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShieldOutputCount\",\n \"inputs\": [\n {\n \"name\": \"outputs\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShortString\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTree\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"LengthMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotEmergencyAdmin\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotGlobalEmergency\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NullifierAlreadySpent\",\n \"inputs\": [\n {\n \"name\": \"nullifier\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NullifiersEmpty\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"PrivateTransferExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ShieldExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SignatureExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"StaleRoot\",\n \"inputs\": [\n {\n \"name\": \"root\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"StringTooLong\",\n \"inputs\": [\n {\n \"name\": \"str\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferFailed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TreeFull\",\n \"inputs\": [\n {\n \"name\": \"treeId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"WrongPermitToken\",\n \"inputs\": [\n {\n \"name\": \"provided\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"expected\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroNullifier\",\n \"inputs\": []\n }\n] as const\n","// AUTO-GENERATED from invisi-protocol build artifacts. Run pnpm sync:abis.\nexport const invisiFactoryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"initialOwner_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"globalEmergency_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"verifierRouter_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creationCodeHash_\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"computeInstanceAddress\",\n \"inputs\": [\n {\n \"name\": \"creationCode\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"initialOwner_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"emergencyAdmin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"screener_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addressRegistry_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creationCodeHash\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deploy\",\n \"inputs\": [\n {\n \"name\": \"creationCode\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"initialOwner_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"emergencyAdmin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"screener_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addressRegistry_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyPauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyPauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyUnpauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"emergencyUnpauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getInstanceAddress\",\n \"inputs\": [\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalEmergency\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"instanceCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isInstance\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"verifierRouter\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IVerifierRouter\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyPauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyPauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyUnpauseInstance\",\n \"inputs\": [\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EmergencyUnpauseRange\",\n \"inputs\": [\n {\n \"name\": \"start\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"InstanceDeployed\",\n \"inputs\": [\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"instance\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"InstanceAlreadyDeployed\",\n \"inputs\": [\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreationCode\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAnInstance\",\n \"inputs\": [\n {\n \"name\": \"addr\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NotGlobalEmergency\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const\n","// AUTO-GENERATED from invisi-protocol build artifacts. Run pnpm sync:abis.\nexport const invisiAddressRegistryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CHAIN_ID\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isRegistered\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonceOf\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"receivingKeysOf\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"keys\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.ReceivingKeys\",\n \"components\": [\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"registerKeys\",\n \"inputs\": [\n {\n \"name\": \"registration\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.Registration\",\n \"components\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"keys\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.ReceivingKeys\",\n \"components\": [\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateKeys\",\n \"inputs\": [\n {\n \"name\": \"registration\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.Registration\",\n \"components\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"keys\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IAddressRegistry.ReceivingKeys\",\n \"components\": [\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReceivingKeysSet\",\n \"inputs\": [\n {\n \"name\": \"walletIdentity\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"viewingPublicKey\",\n \"type\": \"bytes\",\n \"indexed\": false,\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"clueKey\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"nextNonce\",\n \"type\": \"uint64\",\n \"indexed\": false,\n \"internalType\": \"uint64\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyRegistered\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ChainIdMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNonce\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidReceivingKeys\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRegistrationSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShortString\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidWalletIdentity\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NonceExhausted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotRegistered\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RegistrationExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"StringTooLong\",\n \"inputs\": [\n {\n \"name\": \"str\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n }\n] as const\n","import type { Address, Hex } from \"./contracts\";\nimport {\n Contract,\n Interface,\n getAddress,\n getBytes,\n hexlify,\n isHexString,\n TypedDataEncoder,\n toBeHex,\n type ContractRunner,\n} from \"ethers\";\n\nimport { invisiAddressRegistryAbi } from \"./contracts\";\nimport { ReceivingAddress, decodeAddress, type ReceivingKeyLookup } from \"@invisi-labs/core\";\n\nexport interface RegistryContext {\n chainId: bigint;\n registryAddress: Address;\n /** Optional explicit wall-clock value in seconds. Equality with deadline is valid. */\n now?: bigint;\n}\nexport interface RegistryReceivingKeys {\n viewingPublicKey: Hex;\n clueKey: Hex;\n}\nexport interface AddressRegistration {\n /** Nonzero EVM owner: 20 bytes or canonical zero-padded bytes32. */\n walletIdentity: Hex;\n keys: RegistryReceivingKeys;\n /** The current registry nonce expected for this operation. */\n nonce: bigint;\n deadline: bigint;\n}\nexport interface RegistrationOptions {\n update?: boolean;\n /** Check a separately obtained current nonce before authorizing or encoding. */\n expectedNonce?: bigint;\n}\nexport interface RegistrationCalldata {\n to: Address;\n callData: Hex;\n value: 0n;\n}\nconst MAX_NONCE = (1n << 64n) - 1n;\nfunction uint64(value: bigint, name: string): bigint {\n if (typeof value !== \"bigint\" || value < 0n || value > MAX_NONCE)\n throw new RangeError(`${name} must be uint64`);\n return value;\n}\nfunction hexBytes(value: Hex, length: number): Uint8Array {\n if (typeof value !== \"string\" || !isHexString(value) || value.length !== 2 + length * 2)\n throw new Error(`Expected ${length} hexadecimal bytes`);\n return getBytes(value);\n}\nfunction normalizeKeys(walletIdentity: Hex, keys: RegistryReceivingKeys): RegistryReceivingKeys {\n const decoded = decodeAddress(\n ReceivingAddress.from({\n walletIdentity,\n viewingPublicKey: hexBytes(keys.viewingPublicKey, 33),\n clueKey: hexBytes(keys.clueKey, 32),\n }).toString()\n );\n if (decoded.kind !== \"long\") throw new Error(\"Expected full receiving address\");\n return {\n viewingPublicKey: hexlify(decoded.viewingPublicKey) as Hex,\n clueKey: hexlify(decoded.clueKey) as Hex,\n };\n}\nfunction normalize(\n context: RegistryContext,\n registration: AddressRegistration,\n options: RegistrationOptions\n) {\n uint64(context.chainId, \"chainId\");\n const registryAddress = getAddress(context.registryAddress) as Hex;\n if (BigInt(registryAddress) === 0n) throw new Error(\"Registry address must be nonzero\");\n if (!/^0x(?:[0-9a-fA-F]{40}|[0-9a-fA-F]{64})$/.test(registration.walletIdentity))\n throw new Error(\"Wallet identity must be an EVM owner or padded bytes32\");\n // Converting to 20 bytes rejects nonzero high bits instead of truncating them.\n const walletIdentity = decodeAddress(\n ReceivingAddress.fromIdentity(\n toBeHex(BigInt(registration.walletIdentity), 20) as Hex\n ).toString()\n ).walletIdentity;\n const keys = normalizeKeys(walletIdentity, registration.keys);\n const nonce = uint64(registration.nonce, \"nonce\"),\n deadline = uint64(registration.deadline, \"deadline\");\n if (nonce === MAX_NONCE) throw new Error(\"Registry nonce exhausted\");\n if (options.update !== undefined && typeof options.update !== \"boolean\")\n throw new TypeError(\"update must be boolean\");\n if (!options.update && nonce !== 0n)\n throw new Error(\"Initial registration requires nonce zero\");\n if (\n options.expectedNonce !== undefined &&\n uint64(options.expectedNonce, \"expectedNonce\") !== nonce\n )\n throw new Error(\"Registry nonce mismatch\");\n if (context.now !== undefined && deadline < uint64(context.now, \"now\"))\n throw new Error(\"Registration expired\");\n return { registryAddress, registration: { walletIdentity, keys, nonce, deadline } };\n}\n\n/** Standard registry EIP-712 data, independent of private WalletAuthorization. */\nexport function registrationTypedData(\n context: RegistryContext,\n registration: AddressRegistration,\n options: RegistrationOptions = {}\n) {\n const { registryAddress, registration: r } = normalize(context, registration, options);\n const primaryType = options.update ? \"UpdateReceivingKeys\" : \"RegisterReceivingKeys\";\n return {\n domain: {\n name: \"InvisiAddressRegistry\",\n version: \"1\",\n chainId: context.chainId,\n verifyingContract: registryAddress,\n },\n primaryType,\n types: {\n [primaryType]: [\n { name: \"walletIdentity\", type: \"bytes32\" },\n { name: \"viewingPublicKey\", type: \"bytes\" },\n { name: \"clueKey\", type: \"bytes32\" },\n { name: \"nonce\", type: \"uint64\" },\n { name: \"deadline\", type: \"uint64\" },\n ],\n },\n message: {\n walletIdentity: toBeHex(BigInt(r.walletIdentity), 32),\n ...r.keys,\n nonce: r.nonce,\n deadline: r.deadline,\n },\n };\n}\nexport function registrationDigest(\n context: RegistryContext,\n registration: AddressRegistration,\n options: RegistrationOptions = {}\n): Hex {\n const typed = registrationTypedData(context, registration, options);\n return TypedDataEncoder.hash(typed.domain, typed.types, typed.message) as Hex;\n}\n/** Encode an owner call (empty signature) or an EIP-712 / ERC-1271 authorized relay. */\nexport function buildRegistrationCalldata(\n context: RegistryContext,\n registration: AddressRegistration,\n signature: Hex,\n options: RegistrationOptions = {}\n): RegistrationCalldata {\n const normalized = normalize(context, registration, options);\n if (typeof signature !== \"string\" || !isHexString(signature) || signature.length % 2 !== 0)\n throw new Error(\"Registration signature must be hexadecimal bytes\");\n return {\n to: normalized.registryAddress,\n value: 0n,\n callData: new Interface(invisiAddressRegistryAbi).encodeFunctionData(\n options.update ? \"updateKeys\" : \"registerKeys\",\n [\n {\n ...normalized.registration,\n walletIdentity: toBeHex(BigInt(normalized.registration.walletIdentity), 32),\n },\n signature,\n ]\n ) as Hex,\n };\n}\n\n/** Ethers runner used for registry contract reads. */\nexport type RegistryReadClient = ContractRunner;\n/** One receivingKeysOf query per short address; RPC failures propagate unchanged. */\nexport function createRegistryReceivingKeyLookup(\n client: RegistryReadClient,\n registryAddress: Address\n): ReceivingKeyLookup {\n const address = getAddress(registryAddress) as Hex;\n if (BigInt(address) === 0n) throw new Error(\"Registry address must be nonzero\");\n return async (walletIdentity) => {\n const identity = decodeAddress(\n ReceivingAddress.fromIdentity(walletIdentity).toString()\n ).walletIdentity;\n const [keys, nonce] = await new Contract(\n address,\n invisiAddressRegistryAbi,\n client\n ).getFunction(\"receivingKeysOf\")(toBeHex(BigInt(identity), 32));\n uint64(nonce, \"registry nonce\");\n const normalized = normalizeKeys(identity, keys);\n return {\n viewingPublicKey: getBytes(normalized.viewingPublicKey),\n clueKey: getBytes(normalized.clueKey),\n };\n };\n}\n","import type { Address, Hex } from \"./contracts\";\nimport {\n AbiCoder,\n dataLength,\n getAddress,\n Interface,\n isHexString,\n keccak256,\n ParamType,\n} from \"ethers\";\n\nimport { invisiProtocolAbi, type CreateCreditParams, type Delivery } from \"./contracts\";\nimport { computeWalletAuthorizationDigest, walletAuthorizationTypedData } from \"@invisi-labs/core\";\nimport {\n checkDeadline,\n deliveriesHash,\n dense,\n field,\n fundingFields,\n getEIP712Domain,\n known,\n normalizeContext,\n normalizeOpaqueDelivery,\n normalizeFunding,\n normalizeSources,\n notes,\n pad,\n uint,\n validateFundingSubmission,\n word,\n ZERO_ADDRESS,\n type FundingInput,\n type TransactionContext,\n} from \"./validation\";\nconst creationTuple = [\n \"(address token,(uint256 treeId,bytes32 merkleRoot)[] sources,bytes32[] nullifiers,bytes32 creditCommitment,bytes32 changeCommitment,address owner,uint256 expiry,uint256 deadline)\",\n][0]!;\nexport const CREATE_CREDIT_FIELDS = [\n \"token\",\n \"sources\",\n \"nullifiers\",\n \"creditCommitment\",\n \"changeCommitment\",\n \"owner\",\n \"expiry\",\n \"deadline\",\n] as const;\n/** Public checks cannot establish ownership or conservation: those are enforced by the proof. */\nexport function validateCreateCreditRequest(\n c: TransactionContext,\n p: CreateCreditParams,\n cs: readonly Delivery[],\n funding: FundingInput = {}\n) {\n known(p, CREATE_CREDIT_FIELDS);\n if ((getAddress(p.token) as Hex) !== (getAddress(c.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n const ctx = normalizeContext(c),\n ns = notes(p.nullifiers, \"nullifiers\"),\n sources = normalizeSources(p.sources, ns.length, 10),\n creditCommitment = word(field(p.creditCommitment)),\n changeCommitment = word(field(p.changeCommitment)),\n owner = getAddress(p.owner) as Hex,\n expiry = uint(p.expiry, 64, \"expiry\"),\n deadline = checkDeadline(c, p.deadline),\n f = normalizeFunding(funding);\n if (BigInt(creditCommitment) === 0n || creditCommitment === changeCommitment)\n throw new Error(\"zero or duplicate commitment\");\n if (BigInt(owner) === 0n || expiry === 0n || (c.now !== undefined && expiry <= c.now))\n throw new Error(\"owner must be nonzero and expiry future\");\n if (dense(cs, \"deliveries\").length !== 3) throw new Error(\"deliveries count mismatch\");\n const deliveries = cs.map((v, i) =>\n normalizeOpaqueDelivery(v, { empty: i === 2 && BigInt(changeCommitment) === 0n })\n );\n if (ns.length === 0 && f.amount === 0n)\n throw new Error(\"empty inputs require positive funding\");\n return {\n ...ctx,\n sources,\n nullifiers: ns,\n actualCount: ns.length,\n sourceCount: sources.length,\n creditCommitment,\n changeCommitment,\n owner,\n expiry,\n deadline,\n deliveries,\n funding: f,\n };\n}\nexport function createCreditBaseInputs(\n c: TransactionContext,\n p: CreateCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateCreateCreditRequest(c, p, cs, f),\n h = BigInt(deliveriesHash(cs));\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.owner),\n BigInt(r.actualCount),\n BigInt(r.sourceCount),\n ...pad(\n r.sources.map((s) => s.treeId),\n 10\n ),\n ...pad(\n r.sources.map((s) => BigInt(s.merkleRoot)),\n 10\n ),\n ...pad(r.nullifiers.map(BigInt), 10),\n BigInt(r.creditCommitment),\n BigInt(r.changeCommitment),\n h >> 128n,\n h & ((1n << 128n) - 1n),\n r.expiry,\n r.deadline,\n r.funding.amount,\n BigInt(r.funding.payer),\n ].map(word);\n}\nexport function createCreditPublicInputs(\n c: TransactionContext,\n p: CreateCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n const base = createCreditBaseInputs(c, p, deliveries, funding);\n const digest = BigInt(\n computeWalletAuthorizationDigest({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation: \"create-credit\",\n capacity: 10,\n words: base.map(BigInt),\n })\n );\n return [...base, word(digest >> 128n), word(digest & ((1n << 128n) - 1n))];\n}\nconst hashContext = {\n chainId: 0n,\n protocolAddress: ZERO_ADDRESS,\n tokenAddress: ZERO_ADDRESS,\n};\nexport function createCreditRequestHash(\n p: CreateCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateCreateCreditRequest({ ...hashContext, tokenAddress: p.token }, p, cs, f);\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n { type: \"bytes32\" },\n creationTuple,\n { type: \"bytes32\" },\n { type: \"address\" },\n { type: \"uint256\" },\n ].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiCreateCredit\")),\n p,\n deliveriesHash(cs),\n r.funding.payer,\n r.funding.amount,\n ]\n ) as Hex\n ) as Hex;\n}\nexport function encodeCreateCreditTypedData(\n c: TransactionContext,\n p: CreateCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n return walletAuthorizationTypedData({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation: \"create-credit\",\n capacity: 10,\n words: createCreditBaseInputs(c, p, deliveries, funding).map(BigInt),\n });\n}\nexport function encodeCreateCreditFundingTypedData(\n c: TransactionContext,\n p: CreateCreditParams,\n cs: readonly Delivery[],\n f: FundingInput\n) {\n const r = validateCreateCreditRequest(c, p, cs, f);\n if (r.funding.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: createCreditRequestHash(p, cs, f),\n payer: r.funding.payer,\n amount: r.funding.amount,\n sigNonce: r.funding.sigNonce,\n deadline: r.funding.deadline,\n },\n };\n}\nexport interface BuildCreateCreditCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: CreateCreditParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n caller?: Address;\n}\nexport function buildCreateCreditCalldata(p: BuildCreateCreditCalldataParams) {\n const r = validateCreateCreditRequest(p.context, p.params, p.deliveries, p.funding);\n validateFundingSubmission(r.funding, p.caller, p.context.now);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"createCredit\", [\n encodeCreditProof(p.proof),\n p.params,\n p.deliveries,\n r.funding,\n ]) as Hex,\n approveAmount: r.funding.amount,\n };\n}\n\n/** Frame a raw direct proof from the proving backend for the Credit verifier adapter. */\nexport function encodeCreditProof(proof: Hex): Hex {\n if (!isHexString(proof) || !/^0x(?:[a-fA-F0-9]{2})*$/.test(proof) || dataLength(proof) === 0)\n throw new Error(\"empty or malformed Credit proof\");\n return AbiCoder.defaultAbiCoder().encode(\n [\"uint8\", \"bytes\"].map((parameter) => ParamType.from(parameter)),\n [0, proof]\n ) as Hex;\n}\n","import { MAX_CIPHERTEXT_BYTES } from \"@invisi-labs/core\";\nimport type { Address, Delivery, FundingParams, Hex, InputSource } from \"./contracts\";\nimport {\n AbiCoder,\n dataLength,\n getAddress,\n isHexString,\n keccak256,\n ParamType,\n toBeHex,\n} from \"ethers\";\n\nexport type { DeploymentContext } from \"@invisi-labs/rpc\";\nimport type { DeploymentContext } from \"@invisi-labs/rpc\";\nexport interface TransactionContext extends DeploymentContext {\n tokenAddress: Address;\n now?: bigint;\n /** Explicit chain timestamp used to bind Credit draw UTC periods. */\n timestamp?: bigint;\n}\nexport const FIELD_MODULUS =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as const;\nexport const ZERO_WORD = toBeHex(0n, 32) as Hex;\nexport const EMPTY_PERMIT = {\n deadline: 0n,\n v: 0,\n r: ZERO_WORD,\n s: ZERO_WORD,\n} as const;\nexport const EMPTY_FUNDING: FundingParams = {\n payer: ZERO_ADDRESS,\n amount: 0n,\n sigNonce: 0n,\n deadline: 0n,\n signature: \"0x\",\n permit: EMPTY_PERMIT,\n};\nexport type FundingInput = Partial<Omit<FundingParams, \"permit\">> & {\n permit?: FundingParams[\"permit\"];\n};\nexport function uint(v: bigint | number | string, bits: number, name = \"value\"): bigint {\n if (\n (typeof v !== \"bigint\" && typeof v !== \"number\" && typeof v !== \"string\") ||\n (typeof v === \"number\" && !Number.isSafeInteger(v))\n )\n throw new Error(`${name} must be an integer`);\n const n = BigInt(v);\n if (n < 0n || n >= 1n << BigInt(bits)) throw new Error(`${name} exceeds u${bits}`);\n return n;\n}\nexport function field(v: bigint | string, name = \"field\"): bigint {\n const n = uint(v, 256, name);\n if (n >= FIELD_MODULUS) throw new Error(`${name} is noncanonical field`);\n return n;\n}\nexport const word = (v: bigint | string): Hex =>\n toBeHex(typeof v === \"bigint\" ? v : BigInt(v), 32) as Hex;\nexport function dense<T>(v: readonly T[], name: string): readonly T[] {\n if (!Array.isArray(v)) throw new Error(`${name} must be array`);\n for (let i = 0; i < v.length; i++)\n if (!Object.hasOwn(v, i) || v[i] === undefined || v[i] === null)\n throw new Error(`${name} has missing or sparse entries`);\n return v;\n}\nexport function known(v: object, keys: readonly string[], name = \"params\") {\n if (\n !v ||\n typeof v !== \"object\" ||\n Array.isArray(v) ||\n Object.keys(v).some((k) => !keys.includes(k))\n )\n throw new Error(`${name} has unsupported fields`);\n}\nexport function notes(v: readonly Hex[], name: string) {\n const r = dense(v, name).map((v) => word(field(v, name)));\n if (r.some((v) => BigInt(v) === 0n) || new Set(r).size !== r.length)\n throw new Error(`duplicate or zero ${name}`);\n return r;\n}\nexport function envelope(v: Hex, length: number, version?: number, maximum = length): Hex {\n if (\n !isHexString(v) ||\n !/^0x(?:[a-fA-F0-9]{2})*$/.test(v) ||\n dataLength(v) < length ||\n dataLength(v) > maximum\n )\n throw new Error(`ciphertext must be ${length} bytes`);\n if (version !== undefined && Number.parseInt(v.slice(2, 4), 16) !== version)\n throw new Error(\"unsupported ciphertext envelope version\");\n return v;\n}\nexport function normalizeContext(c: TransactionContext) {\n return {\n ...c,\n chainId: uint(c.chainId, 64, \"chainId\"),\n protocolAddress: getAddress(c.protocolAddress) as Hex,\n tokenAddress: getAddress(c.tokenAddress) as Hex,\n };\n}\nexport function checkDeadline(c: TransactionContext, value: bigint) {\n const n = uint(value, 64, \"deadline\");\n if (c.now !== undefined && n < uint(c.now, 64, \"now\")) throw new Error(\"deadline has expired\");\n return n;\n}\nexport function normalizeSources(\n sources: readonly InputSource[],\n inputCount: number,\n capacity: number\n) {\n dense(sources, \"sources\");\n if (\n inputCount < 0 ||\n inputCount > capacity ||\n sources.length > inputCount ||\n (inputCount === 0 ? sources.length !== 0 : sources.length === 0)\n )\n throw new Error(\"source count must be 1..inputCount, or empty for zero inputs\");\n let previous = 0n;\n return sources.map((s) => {\n known(s, [\"treeId\", \"merkleRoot\"], \"source\");\n const treeId = uint(s.treeId, 64, \"treeId\"),\n merkleRoot = word(field(s.merkleRoot, \"merkleRoot\"));\n if (treeId === 0n || treeId <= previous || BigInt(merkleRoot) === 0n)\n throw new Error(\"sources must have positive roots and strictly ascending tree IDs\");\n previous = treeId;\n return { treeId, merkleRoot };\n });\n}\nexport const pad = (v: readonly bigint[], n: number): bigint[] => [\n ...v,\n ...(Array(n - v.length).fill(0n) as bigint[]),\n];\n/** Receipt/transport validation must not reject unrelated future wallet codecs. */\nexport function normalizeOpaqueDelivery(\n value: Delivery,\n options: { empty?: boolean } = {}\n): Delivery {\n known(value, [\"ciphertext\", \"clue\"], \"delivery\");\n if (options.empty) {\n if (value.ciphertext !== \"0x\" || value.clue !== \"0x\")\n throw new Error(\"absent output requires an empty delivery\");\n return { ciphertext: \"0x\", clue: \"0x\" };\n }\n const ciphertext = envelope(value.ciphertext, 1, undefined, MAX_CIPHERTEXT_BYTES);\n const clue = envelope(value.clue, 68);\n if (clue.slice(130, 132).toLowerCase() !== \"18\") throw new Error(\"clue precision must be 24\");\n return { ciphertext, clue };\n}\n\nexport const deliveriesHash = (v: readonly Delivery[]) =>\n keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n {\n type: \"tuple[]\",\n components: [\n { name: \"ciphertext\", type: \"bytes\" },\n { name: \"clue\", type: \"bytes\" },\n ],\n },\n ].map((parameter) => ParamType.from(parameter)),\n [dense(v, \"deliveries\")]\n ) as Hex\n ) as Hex;\nexport function normalizeFunding(input: FundingInput = {}): FundingParams {\n const f = { ...EMPTY_FUNDING, ...input };\n getAddress(f.payer) as Hex;\n uint(f.amount, 128, \"depositAmount\");\n uint(f.sigNonce, 256, \"sigNonce\");\n uint(f.deadline, 256, \"funding deadline\");\n if (!isHexString(f.signature) || !/^0x(?:[a-fA-F0-9]{2})*$/.test(f.signature))\n throw new Error(\"invalid signature bytes\");\n const p = f.permit;\n uint(p.deadline, 256);\n uint(p.v, 8);\n for (const v of [p.r, p.s])\n if (!isHexString(v) || dataLength(v) !== 32) throw new Error(\"permit r/s must be bytes32\");\n if ((f.amount === 0n) !== (BigInt(f.payer) === 0n))\n throw new Error(\"deposit amount and payer must both be zero or positive\");\n if (\n f.amount === 0n &&\n (f.sigNonce !== 0n ||\n f.deadline !== 0n ||\n f.signature !== \"0x\" ||\n p.deadline !== 0n ||\n p.v !== 0 ||\n BigInt(p.r) !== 0n ||\n BigInt(p.s) !== 0n)\n )\n throw new Error(\"zero funding must be entirely empty\");\n return { ...f, payer: getAddress(f.payer) as Hex };\n}\nexport function validateFundingSubmission(f: FundingParams, caller?: Address, now?: bigint) {\n if (f.signature !== \"0x\" && now !== undefined && uint(now, 64, \"now\") > f.deadline)\n throw new Error(\"funding authorization has expired\");\n if (\n f.signature === \"0x\" &&\n (f.sigNonce !== 0n ||\n f.deadline !== 0n ||\n (caller !== undefined && f.amount > 0n && (getAddress(caller) as Hex) !== f.payer))\n )\n throw new Error(\"direct funding requires payer caller and zero nonce/deadline\");\n}\nexport const getEIP712Domain = (c: TransactionContext) => ({\n name: \"InvisibleProtocol\",\n version: \"1\",\n chainId: uint(c.chainId, 64),\n verifyingContract: getAddress(c.protocolAddress) as Hex,\n});\nexport const fundingFields = [\n { name: \"requestHash\", type: \"bytes32\" },\n { name: \"payer\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n { name: \"sigNonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n] as const;\n","import type { Address, Hex } from \"./contracts\";\nimport { AbiCoder, getAddress, Interface, keccak256, ParamType } from \"ethers\";\n\nimport {\n invisiProtocolAbi,\n type CancelCreditParams,\n type CreditDrawParams,\n type Delivery,\n type TopUpCreditParams,\n} from \"./contracts\";\nimport {\n creditPeriods,\n computeWalletAuthorizationDigest,\n walletAuthorizationTypedData,\n type WalletOperation,\n} from \"@invisi-labs/core\";\nimport {\n createCreditBaseInputs,\n encodeCreditProof,\n validateCreateCreditRequest,\n} from \"./credit-create\";\nimport {\n checkDeadline,\n deliveriesHash,\n dense,\n field,\n fundingFields,\n getEIP712Domain,\n known,\n normalizeContext,\n normalizeOpaqueDelivery,\n normalizeSources,\n notes,\n pad,\n uint,\n validateFundingSubmission,\n word,\n ZERO_ADDRESS,\n type FundingInput,\n type TransactionContext,\n} from \"./validation\";\nexport const CREDIT_DRAW_CAPACITIES = [1, 12, 50, 120] as const;\nexport function selectCreditDrawCircuit(count: number) {\n if (!Number.isInteger(count) || count < 1 || count > 120)\n throw new Error(\"draw requires 1..120 credits\");\n const maxSize = CREDIT_DRAW_CAPACITIES.find((n) => count <= n)!;\n return {\n name: `credit_draw_slots${maxSize}`,\n maxSize,\n publicInputCount: 6 * maxSize + 14,\n totalBits: 126 + Math.ceil(Math.log2(maxSize)),\n };\n}\nexport function validateCreditDrawRequest(\n c: TransactionContext,\n p: CreditDrawParams,\n cs: readonly Delivery[]\n) {\n known(p, [\n \"token\",\n \"sources\",\n \"nullifiers\",\n \"remainderCommitments\",\n \"expiries\",\n \"recoveryAmounts\",\n \"spender\",\n \"totalAmount\",\n \"deadline\",\n ]);\n if ((getAddress(p.token) as Hex) !== (getAddress(c.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n const ctx = normalizeContext(c),\n ns = notes(p.nullifiers, \"nullifiers\"),\n profile = selectCreditDrawCircuit(ns.length),\n sources = normalizeSources(p.sources, ns.length, profile.maxSize);\n for (const [key, v] of Object.entries({\n remainderCommitments: p.remainderCommitments,\n expiries: p.expiries,\n recoveryAmounts: p.recoveryAmounts,\n }))\n if (dense<unknown>(v, key).length !== ns.length) throw new Error(`${key} count mismatch`);\n const remainderCommitments = p.remainderCommitments.map((v) => word(field(v))),\n recoveryAmounts = p.recoveryAmounts.map((v) => word(field(v))),\n expiries = p.expiries.map((v) => uint(v, 64, \"expiry\")),\n positives = remainderCommitments.filter((v) => BigInt(v) !== 0n);\n if (new Set(positives).size !== positives.length)\n throw new Error(\"duplicate remainder commitment\");\n for (let i = 0; i < ns.length; i++) {\n if (expiries[i] === 0n || (c.now !== undefined && expiries[i]! <= c.now))\n throw new Error(\"expiry must be future\");\n if (BigInt(remainderCommitments[i]!) === 0n && BigInt(recoveryAmounts[i]!) !== 0n)\n throw new Error(\"full draw requires zero recovery amount\");\n }\n const spender = getAddress(p.spender) as Hex,\n totalAmount = uint(p.totalAmount, profile.totalBits, \"totalAmount\");\n if (BigInt(spender) === 0n || totalAmount === 0n)\n throw new Error(\"spender and total amount must be positive\");\n if (dense(cs, \"deliveries\").length !== 2 * ns.length)\n throw new Error(\"deliveries count mismatch\");\n const deliveries = cs.map((v, i) =>\n BigInt(remainderCommitments[Math.floor(i / 2)]!) === 0n\n ? normalizeOpaqueDelivery(v, { empty: true })\n : normalizeOpaqueDelivery(v, {})\n );\n return {\n ...ctx,\n sources,\n nullifiers: ns,\n remainderCommitments,\n recoveryAmounts,\n expiries,\n spender,\n totalAmount,\n deadline: checkDeadline(c, p.deadline),\n deliveries,\n profile,\n periods: creditPeriods(c.timestamp!),\n };\n}\nexport function creditDrawBaseInputs(\n c: TransactionContext,\n p: CreditDrawParams,\n cs: readonly Delivery[]\n) {\n const r = validateCreditDrawRequest(c, p, cs),\n n = r.profile.maxSize,\n h = BigInt(deliveriesHash(cs));\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.spender),\n BigInt(r.nullifiers.length),\n BigInt(r.sources.length),\n ...pad(\n r.sources.map((s) => s.treeId),\n n\n ),\n ...pad(\n r.sources.map((s) => BigInt(s.merkleRoot)),\n n\n ),\n ...pad(r.nullifiers.map(BigInt), n),\n ...pad(r.remainderCommitments.map(BigInt), n),\n ...pad(r.expiries, n),\n r.totalAmount,\n r.deadline,\n h >> 128n,\n h & ((1n << 128n) - 1n),\n ...pad(r.recoveryAmounts.map(BigInt), n),\n r.periods.currentDay,\n r.periods.currentMonth,\n ].map(word);\n}\nexport function validateCancelCreditRequest(c: TransactionContext, p: CancelCreditParams) {\n known(p, [\"token\", \"source\", \"nullifier\", \"owner\", \"amount\", \"deadline\"]);\n if ((getAddress(p.token) as Hex) !== (getAddress(c.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n const ctx = normalizeContext(c),\n source = normalizeSources([p.source], 1, 1)[0]!,\n nullifier = notes([p.nullifier], \"nullifier\")[0]!,\n owner = getAddress(p.owner) as Hex,\n amount = uint(p.amount, 126, \"amount\");\n if (BigInt(owner) === 0n || amount === 0n) throw new Error(\"owner and amount must be positive\");\n return {\n ...ctx,\n source,\n nullifier,\n owner,\n amount,\n deadline: checkDeadline(c, p.deadline),\n };\n}\nexport function cancelCreditBaseInputs(c: TransactionContext, p: CancelCreditParams) {\n const r = validateCancelCreditRequest(c, p);\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.owner),\n r.source.treeId,\n BigInt(r.source.merkleRoot),\n BigInt(r.nullifier),\n r.amount,\n r.deadline,\n ].map(word);\n}\nexport function validateTopUpCreditRequest(\n c: TransactionContext,\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n funding: FundingInput = {}\n) {\n known(p, [\"token\", \"creation\", \"creditSource\", \"creditNullifier\", \"previousExpiry\"]);\n const creation = validateCreateCreditRequest(c, p.creation, cs, funding),\n creditSource = normalizeSources([p.creditSource], 1, 1)[0]!,\n creditNullifier = notes([p.creditNullifier], \"creditNullifier\")[0]!,\n previousExpiry = uint(p.previousExpiry, 64, \"previousExpiry\");\n if (previousExpiry === 0n || (c.now !== undefined && previousExpiry <= c.now))\n throw new Error(\"previous Credit has expired\");\n if (creation.expiry < previousExpiry) throw new Error(\"expiry must not decrease\");\n if (creation.nullifiers.includes(creditNullifier))\n throw new Error(\"duplicate credit and ordinary nullifier\");\n return { creation, creditSource, creditNullifier, previousExpiry };\n}\nexport function topUpCreditBaseInputs(\n c: TransactionContext,\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateTopUpCreditRequest(c, p, cs, f);\n return [\n ...createCreditBaseInputs(c, p.creation, cs, f),\n word(r.creditSource.treeId),\n r.creditSource.merkleRoot,\n r.creditNullifier,\n word(r.previousExpiry),\n ];\n}\nconst cancelTuple = [\n \"(address token,(uint256 treeId,bytes32 merkleRoot) source,bytes32 nullifier,address owner,uint256 amount,uint256 deadline)\",\n][0]!;\nconst topTuple = [\n \"((address token,(uint256 treeId,bytes32 merkleRoot)[] sources,bytes32[] nullifiers,bytes32 creditCommitment,bytes32 changeCommitment,address owner,uint256 expiry,uint256 deadline) creation,(uint256 treeId,bytes32 merkleRoot) creditSource,bytes32 creditNullifier,uint256 previousExpiry)\",\n][0]!;\nconst hashContext = {\n chainId: 0n,\n protocolAddress: ZERO_ADDRESS,\n tokenAddress: ZERO_ADDRESS,\n};\nexport function cancelCreditRequestHash(p: CancelCreditParams) {\n validateCancelCreditRequest({ ...hashContext, tokenAddress: p.token }, p);\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [{ type: \"bytes32\" }, cancelTuple].map((parameter) => ParamType.from(parameter)),\n [keccak256(new TextEncoder().encode(\"InvisiCancelCredit\")), p]\n ) as Hex\n ) as Hex;\n}\nexport function topUpCreditRequestHash(\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = validateTopUpCreditRequest(\n { ...hashContext, tokenAddress: p.creation.token },\n p,\n cs,\n f\n );\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n { type: \"bytes32\" },\n topTuple,\n { type: \"bytes32\" },\n { type: \"address\" },\n { type: \"uint256\" },\n ].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiTopUpCredit\")),\n p,\n deliveriesHash(cs),\n r.creation.funding.payer,\n r.creation.funding.amount,\n ]\n ) as Hex\n ) as Hex;\n}\nfunction authorize(\n c: TransactionContext,\n operation: WalletOperation,\n capacity: number,\n words: readonly Hex[]\n) {\n return walletAuthorizationTypedData({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation,\n capacity,\n words: words.map(BigInt),\n });\n}\nfunction appendDigest(\n c: TransactionContext,\n operation: WalletOperation,\n capacity: number,\n words: readonly Hex[]\n) {\n const digest = BigInt(\n computeWalletAuthorizationDigest({\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation,\n capacity,\n words: words.map(BigInt),\n })\n );\n return [...words, word(digest >> 128n), word(digest & ((1n << 128n) - 1n))];\n}\nexport function encodeCancelCreditTypedData(c: TransactionContext, p: CancelCreditParams) {\n return authorize(c, \"cancel-credit\", 1, cancelCreditBaseInputs(c, p));\n}\nexport function encodeTopUpCreditTypedData(\n c: TransactionContext,\n p: TopUpCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n return authorize(c, \"top-up-credit\", 10, topUpCreditBaseInputs(c, p, deliveries, funding));\n}\nexport function encodeCreditDrawTypedData(\n c: TransactionContext,\n p: CreditDrawParams,\n deliveries: readonly Delivery[]\n) {\n return authorize(\n c,\n \"credit-draw\",\n selectCreditDrawCircuit(p.nullifiers.length).maxSize,\n creditDrawBaseInputs(c, p, deliveries)\n );\n}\nexport function creditDrawPublicInputs(\n c: TransactionContext,\n p: CreditDrawParams,\n deliveries: readonly Delivery[]\n) {\n return appendDigest(\n c,\n \"credit-draw\",\n selectCreditDrawCircuit(p.nullifiers.length).maxSize,\n creditDrawBaseInputs(c, p, deliveries)\n );\n}\nexport function cancelCreditPublicInputs(c: TransactionContext, p: CancelCreditParams) {\n return appendDigest(c, \"cancel-credit\", 1, cancelCreditBaseInputs(c, p));\n}\nexport function topUpCreditPublicInputs(\n c: TransactionContext,\n p: TopUpCreditParams,\n deliveries: readonly Delivery[],\n funding: FundingInput = {}\n) {\n return appendDigest(c, \"top-up-credit\", 10, topUpCreditBaseInputs(c, p, deliveries, funding));\n}\nexport function encodeTopUpCreditFundingTypedData(\n c: TransactionContext,\n p: TopUpCreditParams,\n cs: readonly Delivery[],\n f: FundingInput\n) {\n const r = validateTopUpCreditRequest(c, p, cs, f),\n funding = r.creation.funding;\n if (funding.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: topUpCreditRequestHash(p, cs, f),\n payer: funding.payer,\n amount: funding.amount,\n sigNonce: funding.sigNonce,\n deadline: funding.deadline,\n },\n };\n}\nexport interface BuildCreditDrawCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: CreditDrawParams;\n deliveries: readonly Delivery[];\n}\nexport function buildCreditDrawCalldata(p: BuildCreditDrawCalldataParams) {\n validateCreditDrawRequest(p.context, p.params, p.deliveries);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"creditDraw\", [\n encodeCreditProof(p.proof),\n p.params,\n p.deliveries,\n ]) as Hex,\n nullifiers: p.params.nullifiers,\n totalAmount: p.params.totalAmount,\n };\n}\nexport interface BuildCancelCreditCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: CancelCreditParams;\n}\nexport function buildCancelCreditCalldata(p: BuildCancelCreditCalldataParams) {\n validateCancelCreditRequest(p.context, p.params);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"cancelCredit\", [\n encodeCreditProof(p.proof),\n p.params,\n ]) as Hex,\n };\n}\nexport interface BuildTopUpCreditCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: TopUpCreditParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n caller?: Address;\n}\nexport function buildTopUpCreditCalldata(p: BuildTopUpCreditCalldataParams) {\n const r = validateTopUpCreditRequest(p.context, p.params, p.deliveries, p.funding);\n validateFundingSubmission(r.creation.funding, p.caller, p.context.now);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"topUpCredit\", [\n encodeCreditProof(p.proof),\n p.params,\n p.deliveries,\n r.creation.funding,\n ]) as Hex,\n approveAmount: r.creation.funding.amount,\n };\n}\n","import type { Address, Hex } from \"./contracts\";\nimport { AbiCoder, getAddress, Interface, keccak256, ParamType, TypedDataEncoder } from \"ethers\";\n\nimport {\n invisiProtocolAbi,\n type CrossTreeTransactParams,\n type Delivery,\n type ShieldOutput,\n type ShieldParams,\n type TransactRequest,\n} from \"./contracts\";\nimport { computeNoteCommitment, walletAuthorizationTypedData } from \"@invisi-labs/core\";\nimport {\n checkDeadline,\n deliveriesHash,\n dense,\n field,\n fundingFields,\n getEIP712Domain,\n known,\n normalizeContext,\n normalizeOpaqueDelivery,\n normalizeFunding,\n normalizeSources,\n notes,\n pad,\n uint,\n validateFundingSubmission,\n word,\n type DeploymentContext,\n type FundingInput,\n type TransactionContext,\n} from \"./validation\";\nexport const TRANSACT_CAPACITIES = [14, 56, 112, 168] as const;\nexport type TransactCapacity = (typeof TRANSACT_CAPACITIES)[number];\nexport function selectTransactCapacity(inputs: number, outputs: number): TransactCapacity {\n if (\n !Number.isInteger(inputs) ||\n !Number.isInteger(outputs) ||\n inputs < 0 ||\n outputs < 0 ||\n inputs + outputs < 1 ||\n (inputs === 0 && outputs < 2) ||\n inputs + outputs > 168\n )\n throw new Error(\"unsupported transact shape\");\n return TRANSACT_CAPACITIES.find((n) => inputs + outputs <= n)!;\n}\nexport type TransactRequestParams = CrossTreeTransactParams;\nexport function normalizeTransactRequest(\n c: TransactionContext,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n funding: FundingInput = {}\n) {\n const ctx = normalizeContext(c);\n if ((getAddress(p.token) as Hex) !== ctx.tokenAddress)\n throw new Error(\"request token mismatch\");\n known(p, [\n \"token\",\n \"sources\",\n \"nullifiers\",\n \"outputCommitments\",\n \"withdrawalAddress\",\n \"withdrawalAmount\",\n \"deadline\",\n ]);\n const ns = notes(p.nullifiers, \"nullifiers\"),\n os = notes(p.outputCommitments, \"outputCommitments\"),\n capacity = selectTransactCapacity(ns.length, os.length);\n const sources = normalizeSources(p.sources, ns.length, capacity),\n deliveries = dense(cs, \"deliveries\").map((v) => normalizeOpaqueDelivery(v));\n if (deliveries.length !== os.length) throw new Error(\"deliveries count mismatch\");\n const withdrawalAmount = uint(p.withdrawalAmount, 128, \"withdrawalAmount\"),\n withdrawalAddress = getAddress(p.withdrawalAddress) as Hex,\n f = normalizeFunding(funding);\n if (\n (withdrawalAmount === 0n) !== (BigInt(withdrawalAddress) === 0n) ||\n (os.length === 0 && withdrawalAmount === 0n)\n )\n throw new Error(\"invalid withdrawal\");\n if (ns.length === 0 && (f.amount === 0n || withdrawalAmount !== 0n))\n throw new Error(\"zero inputs require positive funding and zero withdrawal\");\n return {\n ...ctx,\n capacity,\n sources,\n nullifiers: ns,\n outputCommitments: os,\n inputCount: ns.length,\n outputCount: os.length,\n sourceCount: sources.length,\n inputTreeIds: pad(\n sources.map((s) => s.treeId),\n capacity\n ),\n merkleRoots: pad(\n sources.map((s) => BigInt(s.merkleRoot)),\n capacity\n ),\n slotValues: pad([...ns, ...os].map(BigInt), capacity),\n deliveries,\n deliveriesHash: deliveriesHash(deliveries),\n withdrawalAddress,\n withdrawalAmount,\n deadline: checkDeadline(c, p.deadline),\n depositAmount: f.amount,\n depositPayer: f.payer,\n funding: f,\n };\n}\nexport function transactPublicInputs(\n c: TransactionContext,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = normalizeTransactRequest(c, p, cs, f),\n h = BigInt(r.deliveriesHash);\n return [\n r.chainId,\n BigInt(r.protocolAddress),\n BigInt(r.tokenAddress),\n BigInt(r.inputCount),\n BigInt(r.outputCount),\n BigInt(r.sourceCount),\n ...r.inputTreeIds,\n ...r.merkleRoots,\n ...r.slotValues,\n h >> 128n,\n h & ((1n << 128n) - 1n),\n BigInt(r.withdrawalAddress),\n r.withdrawalAmount,\n r.deadline,\n r.depositAmount,\n BigInt(r.depositPayer),\n ].map(word);\n}\nexport function encodeTransactTypedData(\n c: TransactionContext,\n p: TransactRequestParams,\n deliveries: readonly Delivery[],\n f: FundingInput = {}\n) {\n const r = normalizeTransactRequest(c, p, deliveries, f);\n return walletAuthorizationTypedData({\n context: { chainId: r.chainId, protocolAddress: BigInt(r.protocolAddress) },\n operation: \"transact\",\n capacity: r.capacity,\n words: transactPublicInputs(c, p, deliveries, f).map(BigInt),\n });\n}\nconst singleTuple = [\n \"(address token,bytes32 merkleRoot,bytes32[] nullifiers,bytes32[] outputCommitments,uint256 inputTreeId,address withdrawalAddress,uint256 withdrawalAmount,uint256 deadline)\",\n][0]!;\nconst crossTuple = [\n \"(address token,(uint256 treeId,bytes32 merkleRoot)[] sources,bytes32[] nullifiers,bytes32[] outputCommitments,address withdrawalAddress,uint256 withdrawalAmount,uint256 deadline)\",\n][0]!;\nexport function transactFundingRequestHash(\n proof: Hex,\n p: TransactRequestParams,\n cs: readonly Delivery[]\n) {\n const single = {\n token: p.token,\n merkleRoot: p.sources[0]?.merkleRoot ?? word(0n),\n nullifiers: p.nullifiers,\n outputCommitments: p.outputCommitments,\n inputTreeId: p.sources[0]?.treeId ?? 0n,\n withdrawalAddress: p.withdrawalAddress,\n withdrawalAmount: p.withdrawalAmount,\n deadline: p.deadline,\n };\n return p.sources.length > 1\n ? (keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [{ type: \"bytes32\" }, { type: \"bytes32\" }, crossTuple, { type: \"bytes32\" }].map(\n (parameter) => ParamType.from(parameter)\n ),\n [\n keccak256(new TextEncoder().encode(\"InvisiCrossTreeTransact\")),\n keccak256(proof),\n p,\n deliveriesHash(cs),\n ]\n ) as Hex\n ) as Hex)\n : (keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [{ type: \"bytes32\" }, singleTuple, { type: \"bytes32\" }].map((parameter) =>\n ParamType.from(parameter)\n ),\n [keccak256(proof), single, deliveriesHash(cs)]\n ) as Hex\n ) as Hex);\n}\nexport function encodeTransactFundingTypedData(\n c: TransactionContext,\n proof: Hex,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n funding: FundingInput\n) {\n normalizeTransactRequest(c, p, cs, funding);\n const f = normalizeFunding(funding);\n if (f.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: transactFundingRequestHash(proof, p, cs),\n payer: f.payer,\n amount: f.amount,\n sigNonce: f.sigNonce,\n deadline: f.deadline,\n },\n };\n}\nexport interface BuildTransactCalldataParams {\n context: TransactionContext;\n proof: Hex;\n params: TransactRequestParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n caller?: Address;\n}\nexport function buildTransactCalldata(p: BuildTransactCalldataParams) {\n const r = normalizeTransactRequest(p.context, p.params, p.deliveries, p.funding);\n validateFundingSubmission(r.funding, p.caller, p.context.now);\n const request: TransactRequest = {\n params: {\n token: r.tokenAddress,\n sources: r.sources,\n nullifiers: r.nullifiers,\n outputCommitments: r.outputCommitments,\n withdrawalAddress: r.withdrawalAddress,\n withdrawalAmount: r.withdrawalAmount,\n deadline: r.deadline,\n },\n deliveries: p.deliveries,\n funding: r.funding,\n };\n const abi = invisiProtocolAbi.filter(\n (item) =>\n item.type === \"function\" &&\n item.name === \"transact\" &&\n item.inputs.length === 2 &&\n item.inputs[1]?.type === \"tuple\"\n );\n const data = new Interface(abi).encodeFunctionData(\"transact\", [p.proof, request]) as Hex;\n return { data, capacity: r.capacity, approveAmount: r.depositAmount };\n}\nexport interface BuildTransactAggregateCalldataParams {\n context: DeploymentContext & { now?: bigint };\n proof: Hex;\n requests: readonly TransactRequest[];\n caller?: Address;\n}\nexport function buildTransactAggregateCalldata(p: BuildTransactAggregateCalldataParams) {\n if (![4, 8, 12].includes(dense(p.requests, \"requests\").length))\n throw new Error(\"aggregate requires 4, 8 or 12 requests\");\n for (const request of p.requests) {\n const r = normalizeTransactRequest(\n { ...p.context, tokenAddress: request.params.token },\n request.params,\n request.deliveries,\n request.funding\n );\n if (r.capacity !== 14) throw new Error(\"aggregate supports only capacity 14\");\n validateFundingSubmission(r.funding, p.caller, p.context.now);\n }\n return {\n data: new Interface(\n invisiProtocolAbi.filter(\n (item) =>\n item.type === \"function\" &&\n item.name === \"transact\" &&\n item.inputs[1]?.type === \"tuple[]\"\n )\n ).encodeFunctionData(\"transact\", [p.proof, p.requests]) as Hex,\n capacity: 14 as const,\n };\n}\nexport interface BuildShieldCalldataParams {\n context: TransactionContext;\n params: ShieldParams;\n outputs: readonly ShieldOutput[];\n deliveries: readonly Delivery[];\n funding: FundingInput;\n caller?: Address;\n}\nexport async function validateShieldRequest(p: BuildShieldCalldataParams) {\n normalizeContext(p.context);\n if ((getAddress(p.params.token) as Hex) !== (getAddress(p.context.tokenAddress) as Hex))\n throw new Error(\"request token mismatch\");\n known(p.params, [\"token\", \"outputCommitments\", \"deadline\"]);\n checkDeadline(p.context, p.params.deadline);\n const outputs = dense(p.outputs, \"outputs\"),\n commitments = notes(p.params.outputCommitments, \"outputCommitments\"),\n cs = dense(p.deliveries, \"deliveries\"),\n f = normalizeFunding(p.funding);\n if (\n outputs.length < 1 ||\n outputs.length > 10 ||\n commitments.length !== outputs.length ||\n cs.length !== outputs.length\n )\n throw new Error(\"shield requires 1..10 outputs and matching deliveries\");\n let total = 0n;\n for (const [i, o] of outputs.entries()) {\n known(o, [\"identity\", \"amount\"], \"output\");\n uint(o.amount, 128, \"amount\");\n if (o.amount === 0n) throw new Error(\"amount must be positive\");\n field(o.identity);\n normalizeOpaqueDelivery(cs[i]!);\n if (\n (await computeNoteCommitment(\n p.context.chainId,\n o.identity,\n BigInt(p.context.tokenAddress),\n o.amount\n )) !== commitments[i]\n )\n throw new Error(\"output commitment mismatch\");\n total += o.amount;\n }\n if (total !== f.amount) throw new Error(\"funding must equal output total\");\n return f;\n}\nexport function shieldFundingRequestHash(\n params: ShieldParams,\n outputs: readonly ShieldOutput[],\n cs: readonly Delivery[]\n) {\n const outputHash = keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\"(bytes32 identity,uint256 amount)[]\"].map((parameter) => ParamType.from(parameter)),\n [outputs]\n ) as Hex\n ) as Hex;\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\n \"bytes32\",\n \"(address token,bytes32[] outputCommitments,uint256 deadline)\",\n \"bytes32\",\n \"bytes32\",\n ].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiShield\")),\n params,\n outputHash,\n deliveriesHash(cs),\n ]\n ) as Hex\n ) as Hex;\n}\nexport async function encodeShieldFundingTypedData(p: BuildShieldCalldataParams) {\n const f = await validateShieldRequest(p);\n return {\n domain: getEIP712Domain(p.context),\n primaryType: \"FundShield\" as const,\n types: { FundShield: fundingFields },\n message: {\n requestHash: shieldFundingRequestHash(p.params, p.outputs, p.deliveries),\n payer: f.payer,\n amount: f.amount,\n sigNonce: f.sigNonce,\n deadline: f.deadline,\n },\n };\n}\nexport async function buildShieldCalldata(p: BuildShieldCalldataParams) {\n const f = await validateShieldRequest(p);\n validateFundingSubmission(f, p.caller, p.context.now);\n return {\n data: new Interface(invisiProtocolAbi).encodeFunctionData(\"shield\", [\n p.params,\n p.outputs,\n p.deliveries,\n f,\n ]) as Hex,\n approveAmount: f.amount,\n };\n}\n\n/** Full active user-circuit public inputs: business statement followed by EIP-712 digest limbs. */\nexport function transactUserPublicInputs(\n c: TransactionContext,\n p: TransactRequestParams,\n cs: readonly Delivery[],\n f: FundingInput = {}\n) {\n const words = transactPublicInputs(c, p, cs, f),\n digest = BigInt(\n ((typed) =>\n TypedDataEncoder.hash(\n typed.domain,\n Object.fromEntries(\n Object.entries(typed.types).map(([name, fields]) => [\n name,\n [...(fields as readonly { name: string; type: string }[])],\n ])\n ),\n typed.message\n ))(encodeTransactTypedData(c, p, cs, f))\n );\n return [...words, word(digest >> 128n), word(digest & ((1n << 128n) - 1n))];\n}\nexport type AggregateMemberInput = Pick<TransactRequest, \"params\" | \"deliveries\"> & {\n funding?: FundingInput;\n};\n/** Atomic aggregate funding binds the member statement rather than the aggregate proof bytes. */\nexport function aggregateMemberRequestHash(c: TransactionContext, r: AggregateMemberInput) {\n const capacity = selectTransactCapacity(\n r.params.nullifiers.length,\n r.params.outputCommitments.length\n );\n if (capacity !== 14) throw new Error(\"aggregate supports only capacity 14\");\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\"bytes32\", \"uint256\", \"bytes32[]\"].map((parameter) => ParamType.from(parameter)),\n [\n keccak256(new TextEncoder().encode(\"InvisiAtomicBatchMemberV1\")),\n BigInt(capacity),\n transactPublicInputs(c, r.params, r.deliveries, r.funding),\n ]\n ) as Hex\n ) as Hex;\n}\n/** Router adapter business words (56 per member), not the aggregate circuit statement. */\nexport function aggregatePublicInputs(\n c: TransactionContext,\n requests: readonly AggregateMemberInput[]\n) {\n if (![4, 8, 12].includes(dense(requests, \"requests\").length))\n throw new Error(\"aggregate requires 4, 8 or 12 requests\");\n return requests.flatMap((r) => {\n const context = { ...c, tokenAddress: r.params.token };\n aggregateMemberRequestHash(context, r);\n return [word(14n), ...transactPublicInputs(context, r.params, r.deliveries, r.funding)];\n });\n}\nexport function encodeAggregateFundingTypedData(c: TransactionContext, r: AggregateMemberInput) {\n const f = normalizeFunding(r.funding);\n if (f.amount === 0n) throw new Error(\"funding authorization requires positive deposit\");\n return {\n domain: getEIP712Domain(c),\n primaryType: \"FundTransact\" as const,\n types: { FundTransact: fundingFields },\n message: {\n requestHash: aggregateMemberRequestHash(c, r),\n payer: f.payer,\n amount: f.amount,\n sigNonce: f.sigNonce,\n deadline: f.deadline,\n },\n };\n}\n","import type { Address, Hex } from \"./contracts\";\nimport { Contract, getAddress, keccak256, type Provider } from \"ethers\";\n\nimport {\n defineDeployment,\n type ProtocolDeployment,\n type ProtocolRpcClient,\n} from \"@invisi-labs/rpc\";\nimport { buildTransactAggregateCalldata, type BuildTransactAggregateCalldataParams } from \"./funds\";\nimport type { ChainReader } from \"./interfaces\";\nimport { TokenProtocol } from \"./TokenProtocol\";\nimport { known, type DeploymentContext } from \"./validation\";\n\nexport interface ProtocolOptions {\n deployment: ProtocolDeployment;\n}\n\n/** A multi-token deployment. Asset support is always read from the chain. */\nexport class Protocol {\n readonly deployment: Readonly<ProtocolDeployment>;\n readonly context: Readonly<DeploymentContext>;\n\n constructor(options: ProtocolOptions) {\n known(options, [\"deployment\"], \"protocol options\");\n this.deployment = defineDeployment(options.deployment);\n this.context = Object.freeze({\n chainId: this.deployment.chainId,\n protocolAddress: this.deployment.protocol.address,\n });\n Object.freeze(this);\n }\n\n /** Load the selected deployment and verify its contract against Chain RPC before returning. */\n static async fromRpc(\n rpc: Pick<ProtocolRpcClient, \"getDeployment\">,\n provider: Provider,\n options: { signal?: AbortSignal } = {}\n ): Promise<Protocol> {\n const chainId = (await provider.getNetwork()).chainId;\n if (typeof chainId !== \"bigint\" || chainId <= 0n || chainId >= 1n << 64n)\n throw new Error(\"invalid protocol chainId\");\n const deployment = await rpc.getDeployment(\n chainId,\n options.signal ? { signal: options.signal } : {}\n );\n const protocol = new Protocol({ deployment });\n if (protocol.context.chainId !== chainId) throw new Error(\"RPC deployment chain mismatch\");\n await protocol.validateDeployment(provider);\n return protocol;\n }\n\n async validateDeployment(\n connection:\n | Provider\n | (Pick<ChainReader, \"getChainId\" | \"getCode\"> & {\n getProtocolVersion?(address: Address): Promise<bigint>;\n getProtocolAddressRegistry?(address: Address): Promise<Address>;\n })\n ): Promise<void> {\n const reader =\n \"getNetwork\" in connection\n ? {\n getChainId: async () => (await connection.getNetwork()).chainId,\n getCode: async (address: Address) =>\n (await connection.getCode(address)) as Hex,\n getProtocolAddressRegistry: async (address: Address) =>\n getAddress(\n await new Contract(\n address,\n [\"function addressRegistry() view returns (address)\"],\n connection\n ).getFunction(\"addressRegistry\")()\n ) as Address,\n getProtocolVersion: async (address: Address) =>\n BigInt(\n await new Contract(\n address,\n [\"function VERSION() view returns (uint256)\"],\n connection\n ).getFunction(\"VERSION\")()\n ),\n }\n : connection;\n if ((await reader.getChainId()) !== this.context.chainId)\n throw new Error(\"deployment chain mismatch\");\n const code = await reader.getCode(this.context.protocolAddress);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(code) ||\n (keccak256(code) as Hex) !== this.deployment.protocol.runtimeCodeHash\n )\n throw new Error(\"protocol runtime code profile mismatch\");\n if (\n reader.getProtocolVersion &&\n (await reader.getProtocolVersion(this.context.protocolAddress)) !== 1n\n )\n throw new Error(\"unsupported onchain protocol version\");\n const registry = this.deployment.registry;\n if (registry) {\n if (!reader.getProtocolAddressRegistry)\n throw new Error(\"registry binding reader capability is missing\");\n if (\n getAddress(\n await reader.getProtocolAddressRegistry(this.context.protocolAddress)\n ) !== getAddress(registry.address)\n )\n throw new Error(\"protocol registry binding mismatch\");\n const registryCode = await reader.getCode(registry.address);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(registryCode) ||\n keccak256(registryCode) !== registry.runtimeCodeHash\n )\n throw new Error(\"registry runtime code profile mismatch\");\n }\n }\n\n aggregate(request: Omit<BuildTransactAggregateCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTransactAggregateCalldata({ ...request, context: this.context }),\n };\n }\n\n /** Build an operation context for one asset within this same deployment. */\n forToken(tokenAddress: Address): TokenProtocol {\n return new TokenProtocol(\n { ...this.context, tokenAddress: getAddress(tokenAddress) as Hex },\n { expectedRuntimeCodeHash: this.deployment.protocol.runtimeCodeHash }\n );\n }\n}\n","import type { Hex } from \"./contracts\";\nimport { keccak256 } from \"ethers\";\n\nimport { MissingCapabilityError } from \"@invisi-labs/core\";\nimport { buildCreateCreditCalldata, type BuildCreateCreditCalldataParams } from \"./credit-create\";\nimport {\n buildCancelCreditCalldata,\n buildCreditDrawCalldata,\n buildTopUpCreditCalldata,\n type BuildCancelCreditCalldataParams,\n type BuildCreditDrawCalldataParams,\n type BuildTopUpCreditCalldataParams,\n} from \"./credit-lifecycle\";\nimport {\n buildShieldCalldata,\n buildTransactAggregateCalldata,\n buildTransactCalldata,\n type BuildShieldCalldataParams,\n type BuildTransactAggregateCalldataParams,\n type BuildTransactCalldataParams,\n} from \"./funds\";\nimport type { ChainReader } from \"./interfaces\";\nimport { normalizeContext, type TransactionContext } from \"./validation\";\n\nexport interface TokenProtocolOptions {\n expectedRuntimeCodeHash?: Hex;\n}\n\n/** A token-specific operation binding within a multi-token deployment. Pure builders never sign or submit. */\nexport class TokenProtocol {\n readonly context: Readonly<TransactionContext>;\n readonly expectedRuntimeCodeHash: Hex | undefined;\n\n constructor(context: TransactionContext, options: TokenProtocolOptions = {}) {\n const normalized = normalizeContext(context);\n if (BigInt(normalized.protocolAddress) === 0n || BigInt(normalized.tokenAddress) === 0n) {\n throw new Error(\"deployment addresses must be nonzero\");\n }\n if (\n options.expectedRuntimeCodeHash &&\n !/^0x[0-9a-fA-F]{64}$/.test(options.expectedRuntimeCodeHash)\n ) {\n throw new Error(\"invalid runtime code hash\");\n }\n this.expectedRuntimeCodeHash = options.expectedRuntimeCodeHash?.toLowerCase() as\n Hex | undefined;\n this.context = Object.freeze(normalized);\n Object.freeze(this);\n }\n\n async validateDeployment(\n reader: Pick<ChainReader, \"getChainId\" | \"getCode\">,\n options: { requireRuntimeProfile?: boolean } = {}\n ): Promise<void> {\n if ((options.requireRuntimeProfile ?? true) && !this.expectedRuntimeCodeHash) {\n throw new MissingCapabilityError(\"trusted deployment profile\");\n }\n if ((await reader.getChainId()) !== this.context.chainId) {\n throw new Error(\"deployment chain mismatch\");\n }\n const code = await reader.getCode(this.context.protocolAddress);\n if (\n !/^0x(?:[0-9a-fA-F]{2})+$/.test(code) ||\n (this.expectedRuntimeCodeHash &&\n (keccak256(code) as Hex) !== this.expectedRuntimeCodeHash)\n ) {\n throw new Error(\"deployment runtime code profile mismatch\");\n }\n const tokenCode = await reader.getCode(this.context.tokenAddress);\n if (!/^0x(?:[0-9a-fA-F]{2})+$/.test(tokenCode)) {\n throw new Error(\"token address must have contract code\");\n }\n }\n\n transact(request: Omit<BuildTransactCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTransactCalldata({ ...request, context: this.context }),\n };\n }\n\n aggregate(request: Omit<BuildTransactAggregateCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTransactAggregateCalldata({ ...request, context: this.context }),\n };\n }\n\n async shield(request: Omit<BuildShieldCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...(await buildShieldCalldata({ ...request, context: this.context })),\n };\n }\n\n createCredit(request: Omit<BuildCreateCreditCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildCreateCreditCalldata({ ...request, context: this.context }),\n };\n }\n\n drawCredit(request: Omit<BuildCreditDrawCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildCreditDrawCalldata({ ...request, context: this.context }),\n };\n }\n\n cancelCredit(request: Omit<BuildCancelCreditCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildCancelCreditCalldata({ ...request, context: this.context }),\n };\n }\n\n topUpCredit(request: Omit<BuildTopUpCreditCalldataParams, \"context\">) {\n return {\n to: this.context.protocolAddress,\n value: 0n,\n ...buildTopUpCreditCalldata({ ...request, context: this.context }),\n };\n }\n}\n","import {\n computeCreditCommitment,\n computeCreditSharedKeyHash,\n computeNoteCommitment,\n computeNoteIdentity,\n FIELD_MODULUS,\n} from \"@invisi-labs/core\";\n\nexport interface VerifyNoteCommitmentParams {\n walletIdentity: `0x${string}`;\n tokenAddress: `0x${string}`;\n amount: bigint;\n nonce: `0x${string}`;\n noteCommitment: `0x${string}`;\n chainId: bigint;\n}\n\nexport async function verifyNoteCommitment(params: VerifyNoteCommitmentParams): Promise<boolean> {\n const expected = await computeNoteCommitment(\n params.chainId,\n await computeNoteIdentity(BigInt(params.walletIdentity), BigInt(params.nonce)),\n BigInt(params.tokenAddress),\n params.amount\n );\n return BigInt(expected) === BigInt(params.noteCommitment);\n}\n\nexport interface VerifyCreditCommitmentParams extends Partial<\n import(\"@invisi-labs/core\").CreditPolicy\n> {\n chainId: bigint;\n spenderWalletIdentity: `0x${string}`;\n ownerWalletIdentity: `0x${string}`;\n spenderPayout: `0x${string}`;\n ownerPayout: `0x${string}`;\n tokenAddress: `0x${string}`;\n amount: bigint;\n nonce: bigint;\n expiry: bigint;\n creditSharedKey: bigint;\n /** Server-returned value to verify against the locally recomputed commitment. */\n creditCommitment: `0x${string}`;\n}\n\n/**\n * Hashes the received shared key locally, recomputes the Credit leaf and compares it to the\n * server-returned value. A mismatch means the server folded a wrong nonce\n * (or other parameter) — the caller MUST abort and not create a Credit.\n */\nexport async function verifyCreditCommitment(\n params: VerifyCreditCommitmentParams\n): Promise<boolean> {\n if (params.creditSharedKey <= 0n || params.creditSharedKey >= FIELD_MODULUS)\n throw new RangeError(\"creditSharedKey must be a nonzero canonical Field\");\n const expected = await computeCreditCommitment(\n params.chainId,\n params.spenderWalletIdentity,\n params.ownerWalletIdentity,\n BigInt(params.spenderPayout),\n BigInt(params.ownerPayout),\n BigInt(params.tokenAddress),\n params.amount,\n params.nonce,\n params.expiry,\n await computeCreditSharedKeyHash(params.creditSharedKey),\n params\n );\n return BigInt(expected) === BigInt(params.creditCommitment);\n}\n","import type {\n CancelCreditParams,\n CreateCreditParams,\n CreditDrawParams,\n Delivery,\n Hex,\n InputSource,\n TopUpCreditParams,\n} from \"./contracts\";\n\nimport {\n computeCreditCommitment,\n normalizeCreditPolicy,\n applyCreditDrawUsage,\n computeCreditNullifier,\n computeCreditSharedKeyHash,\n computeNoteCommitment,\n computeNoteIdentity,\n computeNoteNullifier,\n computeWalletAuthorizationDigest,\n normalizeCreditDeliveryState,\n poseidonHash,\n verifyWalletAuthorization,\n type AuthorizedStatement,\n type CreditDeliveryState,\n type CreditNote,\n type Note,\n type WalletAuthorizationWitness,\n type WalletOperation,\n} from \"@invisi-labs/core\";\nimport {\n LocalWitness,\n type CircuitName,\n type ProofStatement,\n type ProofTarget,\n type ProvingRequest,\n} from \"@invisi-labs/prover\";\n\nimport { TokenProtocol } from \"./TokenProtocol\";\nimport { createCreditPublicInputs } from \"./credit-create\";\nimport {\n cancelCreditPublicInputs,\n creditDrawPublicInputs,\n selectCreditDrawCircuit,\n topUpCreditPublicInputs,\n} from \"./credit-lifecycle\";\nimport {\n normalizeTransactRequest,\n transactUserPublicInputs,\n type BuildTransactCalldataParams,\n} from \"./funds\";\nimport { FIELD_MODULUS, type FundingInput } from \"./validation\";\nimport layouts from \"./witness-layouts.json\";\n\nexport interface NoteMembership {\n note: Note;\n treeId: bigint;\n leafIndex: number;\n path: readonly bigint[];\n}\nexport interface CreditMembership {\n state: CreditDeliveryState;\n treeId: bigint;\n leafIndex: number;\n path: readonly bigint[];\n}\nexport interface TransactWitnessParams extends Omit<\n BuildTransactCalldataParams,\n \"proof\" | \"context\"\n> {\n inputs: readonly NoteMembership[];\n outputs: readonly Note[];\n authorization?: AuthorizedStatement;\n target?: ProofTarget;\n}\nexport interface CreateCreditWitnessParams {\n params: CreateCreditParams;\n deliveries: readonly Delivery[];\n funding?: FundingInput;\n inputs: readonly NoteMembership[];\n state: CreditDeliveryState;\n change?: Note;\n authorization: AuthorizedStatement;\n}\nexport interface DrawCreditWitnessParams {\n /** Explicit chain timestamp used to prepare this signed statement. */\n timestamp: bigint;\n params: CreditDrawParams;\n deliveries: readonly Delivery[];\n inputs: readonly CreditMembership[];\n amounts: readonly bigint[];\n authorization: AuthorizedStatement;\n}\nexport interface CancelCreditWitnessParams {\n params: CancelCreditParams;\n input: CreditMembership;\n authorization: AuthorizedStatement;\n}\nexport interface TopUpCreditWitnessParams extends Omit<CreateCreditWitnessParams, \"params\"> {\n params: TopUpCreditParams;\n previous: CreditMembership;\n}\nconst pad = <T>(values: readonly T[], count: number, zero: () => T): T[] => {\n if (values.length > count) throw new Error(\"witness capacity exceeded\");\n return [...values, ...Array.from({ length: count - values.length }, zero)];\n};\nconst policyWitness = (note: CreditNote, usage = true) => {\n const p = normalizeCreditPolicy(note);\n return {\n single_limit: p.singleLimit,\n daily_limit: p.dailyLimit,\n monthly_limit: p.monthlyLimit,\n ...(usage\n ? {\n last_day: p.lastDay,\n daily_spent: p.dailySpent,\n last_month: p.lastMonth,\n monthly_spent: p.monthlySpent,\n }\n : {}),\n };\n};\nconst zeros = () => Array<bigint>(16).fill(0n);\nconst zeroAuthority = (): WalletAuthorizationWitness => ({\n public_key_x: Array<number>(32).fill(0),\n public_key_y: Array<number>(32).fill(0),\n signature: Array<number>(64).fill(0),\n});\nfunction check(ok: boolean, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\nfunction provingRequest(\n circuitName: CircuitName,\n privateInputs: Record<string, unknown>,\n expectedPublicInputs: readonly Hex[],\n target: ProofTarget = \"evm\"\n): ProvingRequest {\n const schema = layouts[circuitName],\n key = schema.keys[target as keyof typeof schema.keys];\n check(typeof key === \"string\", \"unpublished proof target\");\n check(\n expectedPublicInputs.length === schema.publicInputCount,\n \"public input order/width mismatch\"\n );\n check(\n Object.keys(privateInputs).length === schema.private.length &&\n schema.private.every((name) => Object.hasOwn(privateInputs, name)),\n \"private witness schema mismatch\"\n );\n let offset = 0;\n const publicInputs: Record<string, unknown> = {};\n for (const entry of schema.public) {\n const values = expectedPublicInputs.slice(offset, offset + entry.count).map((value) => {\n const n = BigInt(value);\n check(n >= 0n && n < FIELD_MODULUS, \"noncanonical public input\");\n return n;\n });\n publicInputs[entry.name] = entry.array ? values : values[0];\n offset += entry.count;\n }\n check(offset === expectedPublicInputs.length, \"public input layout mismatch\");\n return {\n circuitName,\n target,\n artifactSha256: schema.artifactSha256,\n vkSha256: key,\n expectedPublicInputs: [...expectedPublicInputs],\n witness: new LocalWitness({ ...privateInputs, ...publicInputs }),\n };\n}\n/** Local typed assembly for authenticated circuit releases; no network or backend selection. */\nexport class WitnessBuilder {\n readonly #protocol: TokenProtocol;\n constructor(protocol: TokenProtocol) {\n this.#protocol = protocol;\n }\n static statement(\n circuitName: CircuitName,\n expectedPublicInputs: readonly Hex[],\n target: ProofTarget = \"evm\"\n ): ProofStatement {\n const schema = layouts[circuitName],\n key = schema.keys[target as keyof typeof schema.keys];\n check(\n typeof key === \"string\" && expectedPublicInputs.length === schema.publicInputCount,\n \"unpublished target or statement width mismatch\"\n );\n return {\n circuitName,\n target,\n artifactSha256: schema.artifactSha256,\n vkSha256: key,\n expectedPublicInputs: [...expectedPublicInputs],\n };\n }\n private context(note: Note | CreditNote): void {\n const c = this.#protocol.context;\n check(\n note.chainId === c.chainId &&\n note.protocolAddress === BigInt(c.protocolAddress) &&\n note.tokenAddress === BigInt(c.tokenAddress),\n \"note context mismatch\"\n );\n }\n private async authority(\n operation: WalletOperation,\n capacity: number,\n words: readonly Hex[],\n signed: AuthorizedStatement | undefined,\n identity: Hex\n ): Promise<WalletAuthorizationWitness> {\n check(!!signed, \"private wallet authorization required\");\n const c = this.#protocol.context,\n request = {\n context: { chainId: c.chainId, protocolAddress: BigInt(c.protocolAddress) },\n operation,\n capacity,\n words: words.slice(0, -2).map(BigInt),\n };\n check(\n signed.walletIdentity === identity &&\n signed.digest === computeWalletAuthorizationDigest(request),\n \"authorization statement mismatch\"\n );\n const witness = signed.withWitness((value) => value);\n check(\n await verifyWalletAuthorization(\n identity,\n Uint8Array.from([4, ...witness.public_key_x, ...witness.public_key_y]),\n Uint8Array.from(witness.signature),\n request\n ),\n \"invalid wallet authorization\"\n );\n return witness;\n }\n private async membership(\n leaf: Hex,\n input: { treeId: bigint; leafIndex: number; path: readonly bigint[] },\n sources: readonly InputSource[]\n ): Promise<number> {\n const source = sources.findIndex((value) => value.treeId === input.treeId);\n check(\n source >= 0 &&\n Number.isInteger(input.leafIndex) &&\n input.leafIndex >= 0 &&\n input.leafIndex < 65536 &&\n input.path.length === 16,\n \"invalid membership position\"\n );\n let root = BigInt(leaf);\n for (let level = 0; level < 16; level++)\n root = BigInt(\n await poseidonHash(\n (input.leafIndex >> level) & 1\n ? [input.path[level]!, root]\n : [root, input.path[level]!]\n )\n );\n check(root === BigInt(sources[source]!.merkleRoot), \"membership root mismatch\");\n return source;\n }\n private async noteLeaf(note: Note): Promise<Hex> {\n this.context(note);\n return computeNoteCommitment(\n note.chainId,\n await computeNoteIdentity(BigInt(note.walletIdentity), note.nonce),\n note.tokenAddress,\n note.amount\n );\n }\n private async creditLeaf(note: CreditNote): Promise<Hex> {\n this.context(note);\n return computeCreditCommitment(\n note.chainId,\n note.spenderWalletIdentity,\n note.ownerWalletIdentity,\n note.spenderPayout,\n note.ownerPayout,\n note.tokenAddress,\n note.amount,\n note.nonce,\n note.expiry,\n await computeCreditSharedKeyHash(note.creditSharedKey),\n note\n );\n }\n private async noteInputs(\n inputs: readonly NoteMembership[],\n sources: readonly InputSource[],\n nullifiers: readonly Hex[],\n identity: Hex,\n authority: WalletAuthorizationWitness\n ) {\n check(inputs.length === nullifiers.length, \"input count mismatch\");\n return Promise.all(\n inputs.map(async (input, i) => {\n check(input.note.walletIdentity === identity, \"input wallet mismatch\");\n const leaf = await this.noteLeaf(input.note);\n check(\n (await computeNoteNullifier(input.note.chainId, input.note.nonce, leaf)) ===\n nullifiers[i],\n \"input nullifier mismatch\"\n );\n return BigInt(await this.membership(leaf, input, sources));\n })\n );\n }\n async transact(p: TransactWitnessParams): Promise<ProvingRequest> {\n const c = this.#protocol.context,\n n = normalizeTransactRequest(c, p.params, p.deliveries, p.funding),\n words = transactUserPublicInputs(c, p.params, p.deliveries, p.funding);\n check(\n p.inputs.length === n.inputCount && p.outputs.length === n.outputCount,\n \"note count mismatch\"\n );\n const identity = p.inputs[0]?.note.walletIdentity;\n const unsignedSweep =\n !!identity &&\n !p.authorization &&\n n.outputCount === 0 &&\n n.depositAmount === 0n &&\n BigInt(p.params.withdrawalAddress) === BigInt(identity);\n const authority =\n identity && !unsignedSweep\n ? await this.authority(\"transact\", n.capacity, words, p.authorization, identity)\n : zeroAuthority();\n const sources = await this.noteInputs(\n p.inputs,\n p.params.sources,\n p.params.nullifiers,\n identity ?? ((\"0x\" + \"00\".repeat(32)) as Hex),\n authority\n );\n for (const [i, note] of p.outputs.entries())\n check(\n (await this.noteLeaf(note)) === p.params.outputCommitments[i],\n \"output commitment mismatch\"\n );\n const all = [...p.inputs.map((input) => input.note), ...p.outputs];\n return provingRequest(\n `transact_user_slots${n.capacity}`,\n {\n wallet_identity: identity ? BigInt(identity) : 0n,\n ...authority,\n output_wallet_identities: pad(\n [\n ...p.inputs.map(() => 0n),\n ...p.outputs.map((note) => BigInt(note.walletIdentity)),\n ],\n n.capacity,\n () => 0n\n ),\n amounts: pad(\n all.map((note) => note.amount),\n n.capacity,\n () => 0n\n ),\n nonces: pad(\n all.map((note) => note.nonce),\n n.capacity,\n () => 0n\n ),\n leaf_indices: pad(\n p.inputs.map((input) => BigInt(input.leafIndex)),\n n.capacity,\n () => 0n\n ),\n merkle_paths: pad(\n p.inputs.map((input) => [...input.path]),\n n.capacity,\n zeros\n ),\n input_source_indices: pad(sources, n.capacity, () => 0n),\n },\n words,\n p.target\n );\n }\n private async creation(\n p: CreateCreditWitnessParams,\n operation: \"create-credit\" | \"top-up-credit\",\n words: readonly Hex[]\n ) {\n const state = normalizeCreditDeliveryState(p.state),\n note = state.note;\n check(\n (await this.creditLeaf(note)) === p.params.creditCommitment &&\n note.ownerPayout === BigInt(p.params.owner) &&\n note.expiry === p.params.expiry,\n \"Credit creation mismatch\"\n );\n if (\n operation === \"create-credit\" &&\n [note.lastDay, note.dailySpent, note.lastMonth, note.monthlySpent].some((v) => v !== 0n)\n )\n throw new Error(\"new Credit usage must be zero\");\n const authority = await this.authority(\n operation,\n 10,\n words,\n p.authorization,\n note.ownerWalletIdentity\n );\n const sources = await this.noteInputs(\n p.inputs,\n p.params.sources,\n p.params.nullifiers,\n note.ownerWalletIdentity,\n authority\n );\n if (p.change)\n check(\n p.change.walletIdentity === note.ownerWalletIdentity &&\n (await this.noteLeaf(p.change)) === p.params.changeCommitment,\n \"change commitment mismatch\"\n );\n else check(BigInt(p.params.changeCommitment) === 0n, \"missing change note\");\n return {\n ...authority,\n input_amounts: pad(\n p.inputs.map((input) => input.note.amount),\n 10,\n () => 0n\n ),\n input_nonces: pad(\n p.inputs.map((input) => input.note.nonce),\n 10,\n () => 0n\n ),\n leaf_indices: pad(\n p.inputs.map((input) => BigInt(input.leafIndex)),\n 10,\n () => 0n\n ),\n merkle_paths: pad(\n p.inputs.map((input) => [...input.path]),\n 10,\n zeros\n ),\n input_source_indices: pad(sources, 10, () => 0n),\n spender_payout: note.spenderPayout,\n spender_wallet_identity: BigInt(note.spenderWalletIdentity),\n owner_wallet_identity: BigInt(note.ownerWalletIdentity),\n ...policyWitness(note, operation === \"top-up-credit\"),\n credit_amount: note.amount,\n credit_nonce: note.nonce,\n credit_shared_key: note.creditSharedKey,\n change_amount: p.change?.amount ?? 0n,\n change_nonce: p.change?.nonce ?? 0n,\n };\n }\n async createCredit(p: CreateCreditWitnessParams): Promise<ProvingRequest> {\n const words = createCreditPublicInputs(\n this.#protocol.context,\n p.params,\n p.deliveries,\n p.funding\n );\n return provingRequest(\n \"create_credit\",\n await this.creation(p, \"create-credit\", words),\n words\n );\n }\n async cancelCredit(p: CancelCreditWitnessParams): Promise<ProvingRequest> {\n const note = normalizeCreditDeliveryState(p.input.state).note,\n leaf = await this.creditLeaf(note),\n c = this.#protocol.context;\n check(\n (await computeCreditNullifier(c.chainId, note.creditSharedKey, leaf)) ===\n p.params.nullifier &&\n note.amount === p.params.amount &&\n note.ownerPayout === BigInt(p.params.owner),\n \"Credit cancellation mismatch\"\n );\n await this.membership(leaf, p.input, [p.params.source]);\n const words = cancelCreditPublicInputs(c, p.params),\n authority = await this.authority(\n \"cancel-credit\",\n 1,\n words,\n p.authorization,\n note.ownerWalletIdentity\n );\n return provingRequest(\n \"credit_cancel\",\n {\n ...authority,\n spender_payout: note.spenderPayout,\n spender_wallet_identity: BigInt(note.spenderWalletIdentity),\n owner_wallet_identity: BigInt(note.ownerWalletIdentity),\n ...policyWitness(note),\n input_nonce: note.nonce,\n expiry: note.expiry,\n credit_shared_key: note.creditSharedKey,\n leaf_index: BigInt(p.input.leafIndex),\n merkle_path: [...p.input.path],\n },\n words\n );\n }\n async drawCredit(p: DrawCreditWitnessParams): Promise<ProvingRequest> {\n const c = { ...this.#protocol.context, timestamp: p.timestamp },\n profile = selectCreditDrawCircuit(p.inputs.length),\n capacity = profile.maxSize;\n check(\n p.inputs.length === p.amounts.length && p.inputs.length === p.params.nullifiers.length,\n \"draw input count mismatch\"\n );\n const notes = p.inputs.map((input) => normalizeCreditDeliveryState(input.state).note),\n identity = notes[0]!.spenderWalletIdentity;\n const words = creditDrawPublicInputs(c, p.params, p.deliveries),\n authority = await this.authority(\n \"credit-draw\",\n capacity,\n words,\n p.authorization,\n identity\n );\n const sourceIndices = await Promise.all(\n notes.map(async (note, i) => {\n applyCreditDrawUsage(note, p.amounts[i]!, p.timestamp);\n const leaf = await this.creditLeaf(note);\n check(\n note.spenderWalletIdentity === identity &&\n note.spenderPayout === BigInt(p.params.spender) &&\n note.expiry === p.params.expiries[i] &&\n p.amounts[i]! > 0n &&\n p.amounts[i]! <= note.amount &&\n (await computeCreditNullifier(c.chainId, note.creditSharedKey, leaf)) ===\n p.params.nullifiers[i],\n \"Credit draw mismatch\"\n );\n return BigInt(await this.membership(leaf, p.inputs[i]!, p.params.sources));\n })\n );\n return provingRequest(\n profile.name as CircuitName,\n {\n ...authority,\n ...Object.fromEntries(\n Object.entries({\n singleLimit: \"single_limits\",\n dailyLimit: \"daily_limits\",\n monthlyLimit: \"monthly_limits\",\n lastDay: \"last_days\",\n dailySpent: \"daily_spents\",\n lastMonth: \"last_months\",\n monthlySpent: \"monthly_spents\",\n }).map(([key, name]) => [\n name,\n pad(\n notes.map(\n (note) =>\n normalizeCreditPolicy(note)[\n key as keyof ReturnType<typeof normalizeCreditPolicy>\n ]\n ),\n capacity,\n () => 0n\n ),\n ])\n ),\n spender_wallet_identity: BigInt(identity),\n owner_payouts: pad(\n notes.map((note) => note.ownerPayout),\n capacity,\n () => 0n\n ),\n owner_wallet_identities: pad(\n notes.map((note) => BigInt(note.ownerWalletIdentity)),\n capacity,\n () => 0n\n ),\n input_amounts: pad(\n notes.map((note) => note.amount),\n capacity,\n () => 0n\n ),\n input_nonces: pad(\n notes.map((note) => note.nonce),\n capacity,\n () => 0n\n ),\n credit_shared_keys: pad(\n notes.map((note) => note.creditSharedKey),\n capacity,\n () => 0n\n ),\n leaf_indices: pad(\n p.inputs.map((input) => BigInt(input.leafIndex)),\n capacity,\n () => 0n\n ),\n merkle_paths: pad(\n p.inputs.map((input) => [...input.path]),\n capacity,\n zeros\n ),\n input_source_indices: pad(sourceIndices, capacity, () => 0n),\n draw_amounts: pad(p.amounts, capacity, () => 0n),\n },\n words\n );\n }\n async topUpCredit(p: TopUpCreditWitnessParams): Promise<ProvingRequest> {\n const c = this.#protocol.context,\n previous = normalizeCreditDeliveryState(p.previous.state),\n next = normalizeCreditDeliveryState(p.state),\n old = previous.note,\n note = next.note,\n leaf = await this.creditLeaf(old);\n for (const field of [\n \"spenderWalletIdentity\",\n \"ownerWalletIdentity\",\n \"spenderPayout\",\n \"ownerPayout\",\n \"creditSharedKey\",\n \"lastDay\",\n \"dailySpent\",\n \"lastMonth\",\n \"monthlySpent\",\n ] as const)\n check(old[field] === note[field], \"Credit role or payout changed\");\n check(\n JSON.stringify(previous.ownerReceivingKeys) ===\n JSON.stringify(next.ownerReceivingKeys) &&\n JSON.stringify(previous.spenderReceivingKeys) ===\n JSON.stringify(next.spenderReceivingKeys),\n \"Credit receiving snapshots changed\"\n );\n check(\n old.amount < note.amount &&\n old.expiry <= note.expiry &&\n old.expiry === p.params.previousExpiry &&\n (c.now === undefined || old.expiry > c.now),\n \"invalid Credit top-up\"\n );\n check(\n (await computeCreditNullifier(c.chainId, old.creditSharedKey, leaf)) ===\n p.params.creditNullifier,\n \"previous Credit nullifier mismatch\"\n );\n await this.membership(leaf, p.previous, [p.params.creditSource]);\n const words = topUpCreditPublicInputs(c, p.params, p.deliveries, p.funding),\n base = await this.creation({ ...p, params: p.params.creation }, \"top-up-credit\", words);\n return provingRequest(\n \"credit_top_up\",\n {\n ...base,\n previous_single_limit: old.singleLimit!,\n previous_daily_limit: old.dailyLimit!,\n previous_monthly_limit: old.monthlyLimit!,\n previous_credit_amount: old.amount,\n previous_credit_nonce: old.nonce,\n previous_credit_leaf_index: BigInt(p.previous.leafIndex),\n previous_credit_merkle_path: [...p.previous.path],\n },\n words\n );\n }\n}\n","{\n \"transact_user_slots14\": {\n \"artifactSha256\": \"486a749ae3944ae83a7ff2d298e7469b18737d88553a7d99c4782f22f7332996\",\n \"keys\": {\n \"evm\": \"7b3e65d5201246e733a1816489d80acb219a98e8606e1b81e6d48ff0c1fd537a\",\n \"noir-recursive\": \"148957e28e6339a8ce1121851fb7a232e31f4c5b741e415733b8d627f4b62649\"\n },\n \"publicInputCount\": 57,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 14,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 14,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 14,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_user_slots56\": {\n \"artifactSha256\": \"169db2ff23c15adb14756edf9bb99bbd343df807b3e1c7f1f510070897e653cf\",\n \"keys\": {\n \"evm\": \"cbf54de94bff266bf846f9722c0f3ffa1fb7a0f9f478466f193de0e9123ce7f5\"\n },\n \"publicInputCount\": 183,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 56,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 56,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 56,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_user_slots112\": {\n \"artifactSha256\": \"221bbbd6ff0c7d7dec74677e52484f082b3e176bb0fa47f3236064e396d73739\",\n \"keys\": {\n \"evm\": \"67b2d361b023f193ecdb5a9aefbe2840349ee5ce848ab4101416734f3a7e91e9\"\n },\n \"publicInputCount\": 351,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 112,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 112,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 112,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_user_slots168\": {\n \"artifactSha256\": \"d479253eaaacc973806a84e142e2362d873bba0f150ce050d32b8d9b2947adc8\",\n \"keys\": {\n \"evm\": \"c50e72b0718c6393f82f5a67e248ba093d0db56ece42bbf092da93e9369c2624\"\n },\n \"publicInputCount\": 519,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"output_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 168,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 168,\n \"array\": true\n },\n {\n \"name\": \"slot_values\",\n \"count\": 168,\n \"array\": true\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"withdrawal_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"wallet_identity\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"output_wallet_identities\",\n \"amounts\",\n \"nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\"\n ]\n },\n \"transact_aggregate_14_4\": {\n \"artifactSha256\": \"4fe7c63fb80cba35af4c4525fbabcfb75033286e681afbdcb3fb043c03456246\",\n \"keys\": {\n \"evm\": \"664d4ff0de6b8c876ce990ea368d7a59cee411463c24dd5621d64c8949554674\"\n },\n \"publicInputCount\": 229,\n \"public\": [\n {\n \"name\": \"statements\",\n \"count\": 4,\n \"array\": true\n },\n {\n \"name\": \"inner_vk_commitment\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"verification_key\",\n \"key_hash\",\n \"proofs\"\n ]\n },\n \"transact_aggregate_14_8\": {\n \"artifactSha256\": \"0a266ad4bb4c6dce42b1e851fcbb34b1becae1edd6bf6af82d7b9ed7184576df\",\n \"keys\": {\n \"evm\": \"042139122d0eee8beeaa9c18397276fa5a2872218495fa16ca438fbdd80fa3e1\"\n },\n \"publicInputCount\": 457,\n \"public\": [\n {\n \"name\": \"statements\",\n \"count\": 8,\n \"array\": true\n },\n {\n \"name\": \"inner_vk_commitment\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"verification_key\",\n \"key_hash\",\n \"proofs\"\n ]\n },\n \"transact_aggregate_14_12\": {\n \"artifactSha256\": \"738849e83eb4a78eb69cb6e20a86f6f27ba3784d04a83abd338f84de5c20d7d2\",\n \"keys\": {\n \"evm\": \"539928b264aea4d07a41e772d5d5a7b7666a6883decb985c27ca7422e7f8ea1f\"\n },\n \"publicInputCount\": 685,\n \"public\": [\n {\n \"name\": \"statements\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"inner_vk_commitment\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"verification_key\",\n \"key_hash\",\n \"proofs\"\n ]\n },\n \"create_credit\": {\n \"artifactSha256\": \"3ed6cfdee4f5fd840f023580f76c208768777fea79737f2511377e5c55be0230\",\n \"keys\": {\n \"evm\": \"56f663c6053be0d158a271022d200c732597efd3a2e0be48fe94549d0b1795e0\"\n },\n \"publicInputCount\": 46,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"owner_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"credit_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"change_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"expiry\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"input_amounts\",\n \"input_nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_payout\",\n \"spender_wallet_identity\",\n \"owner_wallet_identity\",\n \"credit_amount\",\n \"credit_nonce\",\n \"credit_shared_key\",\n \"single_limit\",\n \"daily_limit\",\n \"monthly_limit\",\n \"change_amount\",\n \"change_nonce\"\n ]\n },\n \"credit_draw_slots1\": {\n \"artifactSha256\": \"4542b227e0552b45c302f1dace21cadeba4962c96244e021472f1f7531cff8d1\",\n \"keys\": {\n \"evm\": \"43c051a2bedf9454c12e70b10156361e414944823ba23e80662c16c7ced0a2ce\"\n },\n \"publicInputCount\": 20,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 1,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_draw_slots12\": {\n \"artifactSha256\": \"dd72b0867fc3be7cd90de263bd2d0892075cb18eb4f6dd671b13111710f10369\",\n \"keys\": {\n \"evm\": \"5e31d771e6294993736078596d9c69f21fe7595eda50e3cce6d7406b65cf1443\"\n },\n \"publicInputCount\": 86,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 12,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_draw_slots50\": {\n \"artifactSha256\": \"09c7469866748b4c0c4bbf2b040844771948a170999f6dc7a38fe5c0ecda4054\",\n \"keys\": {\n \"evm\": \"7b613225b6f32a077011d4196c356e836d22dcd116efe687fde53144fbd8db9f\"\n },\n \"publicInputCount\": 314,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 50,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_draw_slots120\": {\n \"artifactSha256\": \"6ccd0366a669c50fd5da875c3eae194fe8aa4c36d35a5f9ebfd64636ea599b48\",\n \"keys\": {\n \"evm\": \"d715848afc5c1ecdfcef5ed5026865abef5040a3bc232fd65330a5ffee8475fb\"\n },\n \"publicInputCount\": 734,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"spender_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_ids\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"roots\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"remainder_commitments\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"expiries\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"total_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"recovery_amounts\",\n \"count\": 120,\n \"array\": true\n },\n {\n \"name\": \"current_day\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"current_month\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_wallet_identity\",\n \"owner_payouts\",\n \"owner_wallet_identities\",\n \"input_amounts\",\n \"input_nonces\",\n \"credit_shared_keys\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"draw_amounts\",\n \"single_limits\",\n \"daily_limits\",\n \"monthly_limits\",\n \"last_days\",\n \"daily_spents\",\n \"last_months\",\n \"monthly_spents\"\n ]\n },\n \"credit_cancel\": {\n \"artifactSha256\": \"b4459c2cf756d096e37291cf4d7cd129866b6d420b6d03c928f383b057112ccb\",\n \"keys\": {\n \"evm\": \"fc8ad196ef15f3328afcc8f01d867a3ebefd15451c2813948442fab1923b73b2\"\n },\n \"publicInputCount\": 11,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"owner_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"tree_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"merkle_root\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"nullifier\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_payout\",\n \"spender_wallet_identity\",\n \"owner_wallet_identity\",\n \"input_nonce\",\n \"expiry\",\n \"credit_shared_key\",\n \"single_limit\",\n \"daily_limit\",\n \"monthly_limit\",\n \"last_day\",\n \"daily_spent\",\n \"last_month\",\n \"monthly_spent\",\n \"leaf_index\",\n \"merkle_path\"\n ]\n },\n \"credit_top_up\": {\n \"artifactSha256\": \"2ffebd5753ec1b0c050204d4f97498765fe61ea01a793a9b2466c2f97536345c\",\n \"keys\": {\n \"evm\": \"40b02a9d2e7eb7b49daaac4b7760328537b7982fd5a225cc065bb74cd5ef44b3\"\n },\n \"publicInputCount\": 50,\n \"public\": [\n {\n \"name\": \"chain_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"protocol_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"token_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"owner_address\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"actual_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"source_count\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"input_tree_ids\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"merkle_roots\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"nullifiers\",\n \"count\": 10,\n \"array\": true\n },\n {\n \"name\": \"credit_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"change_commitment\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"delivery_hash_low\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"expiry\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deadline\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_amount\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"deposit_payer\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"credit_tree_id\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"credit_merkle_root\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"credit_nullifier\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"previous_expiry\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_high\",\n \"count\": 1,\n \"array\": false\n },\n {\n \"name\": \"auth_digest_low\",\n \"count\": 1,\n \"array\": false\n }\n ],\n \"private\": [\n \"input_amounts\",\n \"input_nonces\",\n \"leaf_indices\",\n \"merkle_paths\",\n \"input_source_indices\",\n \"public_key_x\",\n \"public_key_y\",\n \"signature\",\n \"spender_payout\",\n \"spender_wallet_identity\",\n \"owner_wallet_identity\",\n \"credit_amount\",\n \"credit_nonce\",\n \"credit_shared_key\",\n \"single_limit\",\n \"daily_limit\",\n \"monthly_limit\",\n \"previous_single_limit\",\n \"previous_daily_limit\",\n \"previous_monthly_limit\",\n \"last_day\",\n \"daily_spent\",\n \"last_month\",\n \"monthly_spent\",\n \"change_amount\",\n \"change_nonce\",\n \"previous_credit_amount\",\n \"previous_credit_nonce\",\n \"previous_credit_leaf_index\",\n \"previous_credit_merkle_path\"\n ]\n }\n}\n","import type { Hex } from \"./contracts\";\nimport { Contract, getAddress, type ContractRunner } from \"ethers\";\n\nimport { invisiFactoryAbi } from \"./contracts\";\n/**\n * Query the selected factory. The caller still verifies the returned deployment profile.\n * Calls `factory.getInstanceAddress(salt)` on-chain.\n */\nexport async function resolveInstanceAddress(\n client: ContractRunner,\n factoryAddress: `0x${string}`,\n salt: `0x${string}`\n): Promise<`0x${string}`> {\n const instance = await new Contract(\n getAddress(factoryAddress),\n invisiFactoryAbi,\n client\n ).getFunction(\"getInstanceAddress\")(salt);\n return getAddress(instance) as Hex;\n}\n"],"mappings":"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","names":["import_ethers","import_core","import_ethers","import_core","import_ethers","import_core","import_core","import_ethers","v","import_ethers","import_core","hashContext","import_ethers","import_core","import_ethers","import_ethers","import_core","import_core","import_core","pad","check","notes","field","import_ethers"]}
|