@invisi-labs/sdk 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/broadcaster-preparation-DMxxZ_1Q.d.cts +587 -0
  2. package/dist/broadcaster-preparation-DMxxZ_1Q.d.ts +587 -0
  3. package/dist/broadcaster-preparation-RMWQFYNL.js +11 -0
  4. package/dist/broadcaster-preparation-UGOTO4SX.cjs +11 -0
  5. package/dist/broadcaster-preparation-UGOTO4SX.cjs.map +1 -0
  6. package/dist/chunk-7F7ZZW3L.cjs +374 -0
  7. package/dist/chunk-7F7ZZW3L.cjs.map +1 -0
  8. package/dist/chunk-EHP5TBC6.js +3565 -0
  9. package/dist/chunk-EHP5TBC6.js.map +1 -0
  10. package/dist/chunk-GTPUYPQL.js +128 -0
  11. package/dist/chunk-GTPUYPQL.js.map +1 -0
  12. package/dist/chunk-ITTGBIG2.js +1877 -0
  13. package/dist/chunk-ITTGBIG2.js.map +1 -0
  14. package/dist/chunk-J2JH6HIG.cjs +1877 -0
  15. package/dist/chunk-J2JH6HIG.cjs.map +1 -0
  16. package/dist/chunk-LOU7AP2B.cjs +128 -0
  17. package/dist/chunk-LOU7AP2B.cjs.map +1 -0
  18. package/dist/chunk-RHNIHI4P.cjs +3565 -0
  19. package/dist/chunk-RHNIHI4P.cjs.map +1 -0
  20. package/dist/{chunk-4HMM7ZKY.js → chunk-XHKQ2BO2.js} +19 -19
  21. package/dist/chunk-XHKQ2BO2.js.map +1 -0
  22. package/dist/ethers.cjs +11 -385
  23. package/dist/ethers.cjs.map +1 -1
  24. package/dist/ethers.d.cts +4 -5
  25. package/dist/ethers.d.ts +4 -5
  26. package/dist/ethers.js +1 -1
  27. package/dist/index.cjs +441 -6217
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +109 -491
  30. package/dist/index.d.ts +109 -491
  31. package/dist/index.js +518 -599
  32. package/dist/index.js.map +1 -1
  33. package/dist/receipt-logs-CvC951p7.d.cts +318 -0
  34. package/dist/receipt-logs-m0-bhaxW.d.ts +318 -0
  35. package/dist/session-support.cjs +168 -0
  36. package/dist/session-support.cjs.map +1 -0
  37. package/dist/session-support.d.cts +252 -0
  38. package/dist/session-support.d.ts +252 -0
  39. package/dist/session-support.js +168 -0
  40. package/dist/session-support.js.map +1 -0
  41. package/package.json +10 -20
  42. package/dist/chunk-4HMM7ZKY.js.map +0 -1
  43. package/dist/chunk-BE52B32Z.js +0 -5490
  44. package/dist/chunk-BE52B32Z.js.map +0 -1
  45. package/dist/indexeddb.cjs +0 -5636
  46. package/dist/indexeddb.cjs.map +0 -1
  47. package/dist/indexeddb.d.cts +0 -20
  48. package/dist/indexeddb.d.ts +0 -20
  49. package/dist/indexeddb.js +0 -70
  50. package/dist/indexeddb.js.map +0 -1
  51. package/dist/memory.cjs +0 -5644
  52. package/dist/memory.cjs.map +0 -1
  53. package/dist/memory.d.cts +0 -12
  54. package/dist/memory.d.ts +0 -12
  55. package/dist/memory.js +0 -10
  56. package/dist/operation-types-D7I405FX.d.ts +0 -275
  57. package/dist/operation-types-DIazgS2d.d.cts +0 -275
  58. package/dist/sqlite.cjs +0 -5620
  59. package/dist/sqlite.cjs.map +0 -1
  60. package/dist/sqlite.d.cts +0 -28
  61. package/dist/sqlite.d.ts +0 -28
  62. package/dist/sqlite.js +0 -54
  63. package/dist/sqlite.js.map +0 -1
  64. package/dist/state-AUnz7TG7.d.cts +0 -78
  65. package/dist/state-AUnz7TG7.d.ts +0 -78
  66. package/dist/store-BMN8kd0c.d.ts +0 -42
  67. package/dist/store-Cz75STRl.d.cts +0 -42
  68. /package/dist/{memory.js.map → broadcaster-preparation-RMWQFYNL.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transactions/records.ts","../src/transactions/preparation/inputs.ts","../src/gas/data/gas-benchmarks.json","../src/gas/profiles.ts","../src/gas/shape.ts","../src/gas/gas-estimation.ts","../src/protocol/AddressRegistry.ts","../src/notes/TransactionOutput.ts","../src/transactions/proving/proof.ts","../src/transactions/proving/proof-integrity.ts","../src/transactions/execution/calldata.ts","../src/transactions/proving/witness.ts","../src/transactions/signing/funding.ts","../src/transactions/execution/operation-execution.ts","../src/transactions/execution/operation-preview.ts","../src/transactions/execution/PreparedTransaction.ts","../src/client/infrastructure.ts","../src/client/Invisi.ts","../src/transactions/preparation/explicit-preparation.ts","../src/discovery/protocol-events.ts","../src/discovery/receipt-logs.ts","../src/discovery/discovery.ts","../src/broadcaster/index.ts"],"sourcesContent":["import type { CreditDeliveryState, Note } from \"@invisi-labs/core\";\nimport type { Hex } from \"@invisi-labs/prover\";\n\nexport interface WalletScope {\n namespace: string;\n chainId: bigint;\n protocolAddress: Hex;\n ownerAddress: Hex;\n}\n\nexport function creditReservationKey(commitment: string): string {\n return \"credit:\" + commitment;\n}\n\nexport interface Checkpoint {\n number: bigint;\n hash: Hex;\n}\n\nexport type SpentState = \"unknown\" | \"unspent\" | \"spent\";\n\nexport interface ReceiptPosition {\n commitment: Hex;\n treeId: bigint;\n leafIndex: number;\n blockNumber: bigint;\n blockHash: Hex;\n transactionHash?: Hex;\n}\n\nexport interface NoteRecord extends ReceiptPosition {\n note: Note;\n spent: SpentState;\n checkedThrough?: Checkpoint;\n}\n\nexport interface CreditRecord extends ReceiptPosition {\n receivingKeySource?: { kind: \"draw\" | \"top-up\"; commitment: Hex };\n state: CreditDeliveryState;\n role: \"owner\" | \"spender\";\n spent: SpentState;\n checkedThrough?: Checkpoint;\n}\n\nexport type OperationStatus =\n | \"prepared\"\n | \"authorized\"\n | \"proved\"\n | \"ready\"\n | \"submitted\"\n | \"confirmed\"\n | \"failed\"\n | \"expired\"\n | \"uncertain\"\n | \"reorged\";\n","import type { Hex, InputSource } from \"@invisi-labs/protocol/contracts\";\nimport type { OperationPlan } from \"../operation-types\";\nimport { creditReservationKey } from \"../records\";\n\nexport function inputFacts(\n plan: OperationPlan\n): Array<{ key: string; reservationKey: string; nullifier: Hex; kind: \"notes\" | \"credits\" }> {\n const credit = plan.credit;\n const noteNullifiers = plan.params?.nullifiers ?? credit?.creation?.nullifiers ?? [];\n let creditNullifiers: readonly Hex[] = [];\n\n if (credit?.draw) {\n creditNullifiers = credit.draw.nullifiers;\n } else if (credit?.topUp) {\n creditNullifiers = [credit.topUp.creditNullifier];\n } else if (credit?.cancel) {\n creditNullifiers = [credit.cancel.nullifier];\n }\n\n if (\n noteNullifiers.length !== plan.inputs.length ||\n creditNullifiers.length !== (credit?.inputs.length ?? 0)\n ) {\n throw new Error(\"operation input statement count mismatch\");\n }\n\n return [\n ...plan.inputs.map((input, index) => ({\n key: input.commitment,\n reservationKey: input.commitment,\n nullifier: noteNullifiers[index]!,\n kind: \"notes\" as const,\n })),\n ...(credit?.inputs ?? []).map((input, index) => ({\n key: input.commitment + \":\" + input.role,\n reservationKey: creditReservationKey(input.commitment),\n nullifier: creditNullifiers[index]!,\n kind: \"credits\" as const,\n })),\n ];\n}\n\nexport function operationSources(plan: OperationPlan): readonly InputSource[] {\n const noteSources = plan.params?.sources;\n if (noteSources != null) return noteSources;\n\n const credit = plan.credit;\n if (credit?.topUp) {\n return [...credit.topUp.creation.sources, credit.topUp.creditSource];\n }\n if (credit?.creation) return credit.creation.sources;\n if (credit?.draw) return credit.draw.sources;\n if (credit?.cancel) return [credit.cancel.source];\n return [];\n}\n","[\n {\n \"formatVersion\": 1,\n \"id\": \"protocol-044e2ee-bc51dde071f1-prague-credit-real\",\n \"deployment\": {\n \"chainId\": \"31337\",\n \"protocolAddress\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\",\n \"tokenAddress\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\"\n },\n \"source\": {\n \"protocolCommit\": \"044e2ee9aeb9ba0e3dbd0630247495189e0405d4\",\n \"measuredAt\": \"2026-11-05T09:54:05.044Z\",\n \"chain\": \"Anvil 31337\",\n \"hardfork\": \"prague\",\n \"token\": \"MockERC20\",\n \"verifier\": \"real\",\n \"fingerprints\": {\n \"protocolSourceSha256\": \"bc51dde071f1ac4616b3264305aeb2b04b52e0d13772625feed53fb5e8dae51b\",\n \"dirtyDiffSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"compiledArtifactsSha256\": \"4900a39e94aeb31f686915bf8618efabf573b93365444db46a0bff3544741221\",\n \"creditManifestSha256\": \"c27ff83889c3082b4c918bd63e15437881f0a6f12ed7f130312e1140873679fb\",\n \"userManifestSha256\": \"9ef9d34d4459c2843d022712093216142e3eacdd1467d2382a6a68ad36c33b8f\",\n \"sdkSourceSha256\": \"0f2fe2deda57196d3736964c8e2caea6d4975d2c246cb6d11edbb6c4b5eeead6\"\n },\n \"toolchain\": {\n \"solidity\": \"0.8.38\",\n \"barretenberg\": \"6.0.0\",\n \"noir\": \"1.0.0-rc.6\",\n \"evmVersion\": \"prague\",\n \"optimizerRuns\": 200,\n \"anvil\": \"anvil Version: 1.8.6\"\n },\n \"blockGasLimit\": \"500000000\",\n \"runtimeContracts\": {\n \"transact_user_slots14_direct_Verifier\": {\n \"address\": \"0x5FbDB2315678afecb367f032d93F642f64180aa3\",\n \"runtimeCodeHash\": \"0x42d1932097f18874242d98855b2fc167471ba84dd122ab3744996dd64320f675\"\n },\n \"transact_user_slots14-adapter\": {\n \"address\": \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\",\n \"runtimeCodeHash\": \"0x876f0e43fc1d24475c0c63ee8c7907427d534b0c604f5985aacd28ee2c6d1b12\"\n },\n \"transact_user_slots56_direct_Verifier\": {\n \"address\": \"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0\",\n \"runtimeCodeHash\": \"0xefca4a7ee5382b0f2029571f6781f2ade7ac698906c32d3e49f10def631e7882\"\n },\n \"transact_user_slots56-adapter\": {\n \"address\": \"0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9\",\n \"runtimeCodeHash\": \"0x945680c4278b61c07bf07fa7637908e9a38ccd414c9330bf23b3c41119ea0de6\"\n },\n \"transact_user_slots112_direct_Verifier\": {\n \"address\": \"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9\",\n \"runtimeCodeHash\": \"0xfbf97cd940123ab3e81ce55283efb48b55ddaa95423fff4d0d648b248f4e196b\"\n },\n \"transact_user_slots112-adapter\": {\n \"address\": \"0x5FC8d32690cc91D4c39d9d3abcBD16989F875707\",\n \"runtimeCodeHash\": \"0xac129aa749b7ece8c51ed68f4f0afcc82a1cbd7b2a01f5ff7ff7de1dcde21b1e\"\n },\n \"transact_user_slots168_direct_Verifier\": {\n \"address\": \"0x0165878A594ca255338adfa4d48449f69242Eb8F\",\n \"runtimeCodeHash\": \"0x7ee9799d55001f74c8d88179dd0247b3de932516f975605ba248b52e7ba540c8\"\n },\n \"transact_user_slots168-adapter\": {\n \"address\": \"0xa513E6E4b8f2a923D98304ec87F64353C4D5C853\",\n \"runtimeCodeHash\": \"0x24b5ea6f436b90b3821bd0ea4872fb205c996fd74f1546bc1086d98b7ec5d87d\"\n },\n \"transact_aggregate_14_4_Verifier\": {\n \"address\": \"0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6\",\n \"runtimeCodeHash\": \"0xae41039ded63fa7777c99a2552ba603a3a4d9703d464079dff787dab6893ef24\"\n },\n \"transact_aggregate_14_4-adapter\": {\n \"address\": \"0x8A791620dd6260079BF849Dc5567aDC3F2FdC318\",\n \"runtimeCodeHash\": \"0xf4e86e9b2001f5972ce00f7fcd5a01deb9bfe5d676e437e74135ee7036469ca3\"\n },\n \"transact_aggregate_14_8_Verifier\": {\n \"address\": \"0x610178dA211FEF7D417bC0e6FeD39F05609AD788\",\n \"runtimeCodeHash\": \"0x089f476f56fb1003586b18c0b5a75f9d24c76d4804d84ea202005371eae333de\"\n },\n \"transact_aggregate_14_8-adapter\": {\n \"address\": \"0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e\",\n \"runtimeCodeHash\": \"0xc40142342902da65f45bb995724b129389e3505c283d7209a6c29bf27521c363\"\n },\n \"transact_aggregate_14_12_Verifier\": {\n \"address\": \"0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0\",\n \"runtimeCodeHash\": \"0xe0cba79e66fdb75dbc082ef0f938b07e4d38acce283b87869fe414083b3e08b0\"\n },\n \"transact_aggregate_14_12-adapter\": {\n \"address\": \"0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82\",\n \"runtimeCodeHash\": \"0x155bfc9367a6f3c96ac9b4d1dc1d0358a4046b584a9a1322a9582557ea691ff4\"\n },\n \"create_credit_direct_Verifier\": {\n \"address\": \"0x9A676e781A523b5d0C0e43731313A708CB607508\",\n \"runtimeCodeHash\": \"0xbc88c374cc3c0c1e2cdf8663cee4c960f3a3ba4b210e2c520ca111e56461b23a\"\n },\n \"create_credit-adapter\": {\n \"address\": \"0x0B306BF915C4d645ff596e518fAf3F9669b97016\",\n \"runtimeCodeHash\": \"0xfd39446d56c189fbb35c0906e525433b6b9c63444c97b13990b7dd6f19bd38fc\"\n },\n \"credit_draw_slots1_direct_Verifier\": {\n \"address\": \"0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1\",\n \"runtimeCodeHash\": \"0x47be80e72c3a22ea044638f6004de8c3a0264d5a0d17189c01153cdabfd7bab6\"\n },\n \"credit_draw_slots1-adapter\": {\n \"address\": \"0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE\",\n \"runtimeCodeHash\": \"0x73a2af387b45cecf383b90f4cebb54b263f621a5038da947944c54f1089ba288\"\n },\n \"credit_draw_slots12_direct_Verifier\": {\n \"address\": \"0x68B1D87F95878fE05B998F19b66F4baba5De1aed\",\n \"runtimeCodeHash\": \"0x244d9ba22f5c736c2a5c42c466701e2a8ba7ae8108665133541026ea45d56e04\"\n },\n \"credit_draw_slots12-adapter\": {\n \"address\": \"0x3Aa5ebB10DC797CAC828524e59A333d0A371443c\",\n \"runtimeCodeHash\": \"0x63c200eae61218b865f3c8b418bf0887da7a70ebf41f55825e4750c36a1d1914\"\n },\n \"credit_draw_slots50_direct_Verifier\": {\n \"address\": \"0xc6e7DF5E7b4f2A278906862b61205850344D4e7d\",\n \"runtimeCodeHash\": \"0x2ad5eb64bcfae34ef04111dd8f9c1ffc5fc8aa6c1ad3a65d8da78233f3390660\"\n },\n \"credit_draw_slots50-adapter\": {\n \"address\": \"0x59b670e9fA9D0A427751Af201D676719a970857b\",\n \"runtimeCodeHash\": \"0x1716df69f1eb1c1db485bc3ba4a4ed5a1009275c9058a9e96b28ab3431a6c006\"\n },\n \"credit_draw_slots120_direct_Verifier\": {\n \"address\": \"0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1\",\n \"runtimeCodeHash\": \"0x523b6d211618bbd33d708f8198b9f3daafc10e2fa7a6a857db5795ed748a24e4\"\n },\n \"credit_draw_slots120-adapter\": {\n \"address\": \"0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44\",\n \"runtimeCodeHash\": \"0x32d875eb4f4c27252fa958971b66e1fdff8c02adb007fea2bf31eee4b851a132\"\n },\n \"credit_cancel_direct_Verifier\": {\n \"address\": \"0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f\",\n \"runtimeCodeHash\": \"0x4058133b7ecd31fe06749bfa3107ad0fbcdc9bf72d3b9cbf4dbd2b2f65be6d35\"\n },\n \"credit_cancel-adapter\": {\n \"address\": \"0x4A679253410272dd5232B3Ff7cF5dbB88f295319\",\n \"runtimeCodeHash\": \"0x0f570794fb4b7f15a791c59c760732d9f9408d1e3bea881ba7c5b76b36fb4e9b\"\n },\n \"credit_top_up_direct_Verifier\": {\n \"address\": \"0x7a2088a1bFc9d81c55368AE168C2C02570cB814F\",\n \"runtimeCodeHash\": \"0x7ada3623c851a9cfba7863a75f4fa289d747040f1a822510eefecc53d70180cd\"\n },\n \"credit_top_up-adapter\": {\n \"address\": \"0x09635F643e140090A9A8Dcd712eD6285858ceBef\",\n \"runtimeCodeHash\": \"0x23bba4eca8306f4bc02ead10449775a359beeed2065ea8c84da4dc6b9e4dfc82\"\n },\n \"PrivateTransferVerifierRegistry\": {\n \"address\": \"0xc5a5C42992dECbae36851359345FE25997F5C42d\",\n \"runtimeCodeHash\": \"0xbc74aacbc22d853cb50fe2041f20014e644fa8f83e06f51656b4667f1da164bc\"\n },\n \"CrossTreeVerifierRegistry\": {\n \"address\": \"0x67d269191c92Caf3cD7723F116c85e6E9bf55933\",\n \"runtimeCodeHash\": \"0x818ce6a634a11cdd9913873d3a265254dda45b490431ad1636373237e2685ba1\"\n },\n \"DualVerifierRouter\": {\n \"address\": \"0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E\",\n \"runtimeCodeHash\": \"0xb3bdc1aa5a6e4eac85e3651615c7942c5565f0593d79bacccb19b5aa587548ca\"\n },\n \"AtomicBatchOutputLib\": {\n \"address\": \"0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690\",\n \"runtimeCodeHash\": \"0xef68c4a35a62fbbb4d0918f1612f0ffd9d250c9ceefd38e59e9c8ef042addb45\"\n },\n \"FundingLib\": {\n \"address\": \"0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB\",\n \"runtimeCodeHash\": \"0x36f4e6d20cf7ca1b221dad34bc34ed7b8540c0e774c594652048822272e6bb52\"\n },\n \"PrivateTransferLib\": {\n \"address\": \"0x9E545E3C0baAB3E08CdfD552C960A1050f373042\",\n \"runtimeCodeHash\": \"0x1e538d13c68b2a7a2f605466cd7c09c166b904476a6b5b372f8b9b45d9de9a62\"\n },\n \"CrossTreeTransferLib\": {\n \"address\": \"0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9\",\n \"runtimeCodeHash\": \"0x9ec892d5a5d1c38e3218c7d38c74bd63034641cc458a195ec63c6a50f67ded25\"\n },\n \"AggregateTransferLib\": {\n \"address\": \"0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8\",\n \"runtimeCodeHash\": \"0x2c01c84317448e4786e7a7b9c06f6f3b4990354f151ae6914cdb75d8b7ebe881\"\n },\n \"CreateCreditLib\": {\n \"address\": \"0x851356ae760d987E095750cCeb3bC6014560891C\",\n \"runtimeCodeHash\": \"0x8b28e626c6a0f41179880773a48681362a05e0eee12193d1641ae5bb625fe960\"\n },\n \"CreditLifecycleLib\": {\n \"address\": \"0xf5059a5D33d5853360D16C683c16e67980206f36\",\n \"runtimeCodeHash\": \"0xa177a7f1dfb69cf2d6eea899ef8170959587b8cb3c60559c3b2cecf62309bfc4\"\n },\n \"ShieldLib\": {\n \"address\": \"0x95401dc811bb5740090279Ba06cfA8fcF6113778\",\n \"runtimeCodeHash\": \"0xfde7bbf1c02e17ab2d9fc9849fc282b29ac1db86378eec27f3a006d7484aa768\"\n },\n \"InvisiFactory\": {\n \"address\": \"0x998abeb3E57409262aE5b751f60747921B33613E\",\n \"runtimeCodeHash\": \"0x9055356390e48564adeca0065b12698a5d09451960af97ad2f5c2e450cb9c84c\"\n },\n \"InvisiAddressRegistry\": {\n \"address\": \"0x70e0bA845a1A0F2DA3359C97E0285013525FFC49\",\n \"runtimeCodeHash\": \"0x007da3f4e888366ba0eed52cd511c4a369359291387ad19ca37e89eb395fce30\"\n },\n \"InvisiProtocol\": {\n \"address\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\"\n },\n \"MockERC20\": {\n \"address\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\",\n \"runtimeCodeHash\": \"0xf7f676b5c54f6e94f82f0de65a0117468a0d915e8a79d150e74f76bd6d7f708b\"\n }\n },\n \"assumptions\": [\n \"normal CREATE/Factory deployment and fresh registry; EIP170/EIP3860 unchanged; no code/storage injection\",\n \"Solidity0.8.38 optimizer200 Prague; pinned BB6.0.0 real verifiers; every native proof independently verified\",\n \"one physical source tree and 123 existing leaves shared by every sample; top-up has two authenticated source groups; no rollover or screener\",\n \"funding/approvals/121 genuine Credit seeds/usage-seed draw/payout reset excluded from business gas\",\n \"each round restores identical token balances, exact caller allowance100, note cursor, nullifiers and baseline; spender payout starts zero; broadcasterFee0\",\n \"complete receipt.gasUsed is measured, including verifier/calldata/logging/output insertion; memo0\",\n \"Prague local block gas limit500000000; measured transactions may be unmineable under lower network transaction/block limits\",\n \"observed three-sample ranges are neither a confidence interval nor a recommended transaction gas limit\"\n ]\n },\n \"measurements\": [\n {\n \"id\": \"create-credit-caller-0x0\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 1132\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1577203\",\n \"transactionHash\": \"0xf0532b598b3e3716709ff7aab549f95775ac0587c2f7cd0203f1a07cc32b46fc\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x61f3ac4cb127a29dc679067666d91e3c123fda2fe8a149e46992d0581de6dbc6\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1577191\",\n \"transactionHash\": \"0xcd1718bea7c432458c18f4215c36fa95ad5da0242fad67f1daaa33344518ae05\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x08215dac6d5558f7ec753df9f66b3a03c7071b7c85b650ba170f621895ea53be\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1577203\",\n \"transactionHash\": \"0xfd07f0fb37c58e302100fb533f946d8fae09514e53181666efc346313c758224\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x5b1ac84931e9343276e5241088041bac0d07f1d7eced2b335eeccfe1a266d05d\",\n \"calldataBytes\": 11844\n }\n ]\n },\n {\n \"id\": \"create-credit-1x1\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1673934\",\n \"transactionHash\": \"0x267c40c655eaf82407bd9dcf4413a0e3ee991a39e2bf9f28506eb761d8eaf8ea\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x137299123d2f9e8bae9f56f5f6e66f6020d41cc6e2397071458fb28abdc1d6b5\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1673898\",\n \"transactionHash\": \"0x967d376d819fb00d0d52fb28ca8b3c1fce10e7ac9ff0314772c8d367b51b2e52\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x16992b27d6bec5d87d6f2488ea31ad232b48dc0fd2effb724e312ddf83dd84f8\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1673994\",\n \"transactionHash\": \"0xd474a561f35e353f446d312aba4338011f6a1765e5019cd839498ade1b2c8ad4\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xdd2ff761b339b033dd11b462585cf747fdf97f6c304a66ddd1344d2421b790ae\",\n \"calldataBytes\": 12196\n }\n ]\n },\n {\n \"id\": \"draw-credit-1-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 1,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1132\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots1\",\n \"target\": \"evm\",\n \"artifactSha256\": \"4542b227e0552b45c302f1dace21cadeba4962c96244e021472f1f7531cff8d1\",\n \"vkSha256\": \"43c051a2bedf9454c12e70b10156361e414944823ba23e80662c16c7ced0a2ce\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1587992\",\n \"transactionHash\": \"0x7eecfe45066881f2e3a39d4d016e5234793a3927056ec51e5772661a7b0b8bd2\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x4c6dd7f24673ec5e8f2bc6303827e3329f3b73d37043a638ed1bd4655282fa6a\",\n \"calldataBytes\": 11588\n },\n {\n \"gasUsed\": \"1587992\",\n \"transactionHash\": \"0xb196e4ce260287d68a8ef8e072605f2cfb97e299e1ed3d8654ff33560a29a34d\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x600aeaf1ca61fe7e4eb39dd8b618f696ba4b6a18a867232af62296c1fc7a24c0\",\n \"calldataBytes\": 11588\n },\n {\n \"gasUsed\": \"1587848\",\n \"transactionHash\": \"0x14de44b3d363a129e8404c1e068d54098ccaf409bc0aaa142a962de94bc21825\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x5312304c773a695984e22ff3eb08c4ca6f022e6e6bc8d7706012846ce8ac4f7c\",\n \"calldataBytes\": 11588\n }\n ]\n },\n {\n \"id\": \"draw-credit-1-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots1\",\n \"target\": \"evm\",\n \"artifactSha256\": \"4542b227e0552b45c302f1dace21cadeba4962c96244e021472f1f7531cff8d1\",\n \"vkSha256\": \"43c051a2bedf9454c12e70b10156361e414944823ba23e80662c16c7ced0a2ce\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1043043\",\n \"transactionHash\": \"0xfc91b84385a2f69bc253f0f486aa171a4911edd3041647b3758b44c0102c7c2f\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x96f83ea8e57ebf1b8572bfbcb6285b8a57c894be0e3134e0c2b24dc44262fb07\",\n \"calldataBytes\": 10372\n },\n {\n \"gasUsed\": \"1043043\",\n \"transactionHash\": \"0xddf613a92d05c1b80cf9074a0484fdbf3a2bfd94555b0d9c266fdfbe2661ed59\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x27b36ebdd105eeb91be849f002816030377ea2e892fb7e1462509aa7b8632e6f\",\n \"calldataBytes\": 10372\n },\n {\n \"gasUsed\": \"1043091\",\n \"transactionHash\": \"0x6df6942fafe1ef79c963b912206bd57443c90f9c8398e5529baf39d438a15b78\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x95af3836c6fe01edbc70bab01ba2e844d0e8fdf9e03884ea5a9d569fd585ee81\",\n \"calldataBytes\": 10372\n }\n ]\n },\n {\n \"id\": \"draw-credit-12-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 12,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 12,\n \"creditOutputs\": 12,\n \"creditRemainders\": 12,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 13584\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots12\",\n \"target\": \"evm\",\n \"artifactSha256\": \"dd72b0867fc3be7cd90de263bd2d0892075cb18eb4f6dd671b13111710f10369\",\n \"vkSha256\": \"5e31d771e6294993736078596d9c69f21fe7595eda50e3cce6d7406b65cf1443\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"3099088\",\n \"transactionHash\": \"0x8a760b052eb9354ef7fd539ab21105ddec51feb6b4b9c51a73a139ac4f9bc1fe\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x5f29a09258dbebafa6fa286c0a1d286bb54694df2e8bd7e7f0e1c9db26b53401\",\n \"calldataBytes\": 30276\n },\n {\n \"gasUsed\": \"3099004\",\n \"transactionHash\": \"0x4af726505fdf1cdcb053d45cce369ff2a17a023b497b438206f232577f52a721\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x762f0616f93335375441b637c545c4691e7ba09fae40952a220ef00a67198a87\",\n \"calldataBytes\": 30276\n },\n {\n \"gasUsed\": \"3099136\",\n \"transactionHash\": \"0xf27042c34b5e7c0e0bfc2e7c6c1e3dcd5b24c98b09c91ab73d156a2d0e474698\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xa7bde9fc7b6fe8e9a9082f4ae597f73608ad9ced3d670506b29584b2c67ab496\",\n \"calldataBytes\": 30276\n }\n ]\n },\n {\n \"id\": \"draw-credit-12-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 12,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 12,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots12\",\n \"target\": \"evm\",\n \"artifactSha256\": \"dd72b0867fc3be7cd90de263bd2d0892075cb18eb4f6dd671b13111710f10369\",\n \"vkSha256\": \"5e31d771e6294993736078596d9c69f21fe7595eda50e3cce6d7406b65cf1443\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1537560\",\n \"transactionHash\": \"0x6c78554a23c04c179a16a9da6c401f0097c02833d8e1c4a3cdeb79107c028333\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xf463ea49ed0328a93b53bc796ff2e0dd46201cd3fee06e6fff160dbb95fe0654\",\n \"calldataBytes\": 15684\n },\n {\n \"gasUsed\": \"1537620\",\n \"transactionHash\": \"0x8097a25c8c2ebced9bfa1baf39e128741e486ed5f7e23aed33ff03b280ac5a7f\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xb121edc36419facbb33f4ca69021bcd71ab6f412664591edf040ac6558b44507\",\n \"calldataBytes\": 15684\n },\n {\n \"gasUsed\": \"1537560\",\n \"transactionHash\": \"0x0a8311777aa63d9239647a14da359672f126c7aa306148d6f44f19eff48dab29\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x065a0f3dd444525a0bed28045e978e3ba74c820eda5ecc488d04e83f416ab4f0\",\n \"calldataBytes\": 15684\n }\n ]\n },\n {\n \"id\": \"draw-credit-50-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 50,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 50,\n \"creditOutputs\": 50,\n \"creditRemainders\": 50,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 56600\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots50\",\n \"target\": \"evm\",\n \"artifactSha256\": \"09c7469866748b4c0c4bbf2b040844771948a170999f6dc7a38fe5c0ecda4054\",\n \"vkSha256\": \"7b613225b6f32a077011d4196c356e836d22dcd116efe687fde53144fbd8db9f\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"7998858\",\n \"transactionHash\": \"0x35a5ff5940aa7939214f82471b8d73531c07b1fcaa543bf31b0f7c1c91db73e2\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x74175711e91a10d93a426d0ef778f12a15793ff5f8f9d8b397057e7cb4e27975\",\n \"calldataBytes\": 94276\n },\n {\n \"gasUsed\": \"7998498\",\n \"transactionHash\": \"0x5e7a948f90e0d37a068d2904d5c1233b0ad6ecda632ef6968f4ec81daa3e932b\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x8b348e78bbce768f9b44d55c43017b08ae0720cf010b923d658e4150bc4bd41f\",\n \"calldataBytes\": 94276\n },\n {\n \"gasUsed\": \"7998498\",\n \"transactionHash\": \"0xf3d92e00b47c5d1c888f98c038b1dbac1986888fabbb40690762b0e9eea6b923\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x1ae727d66e31623abc741d7e5c62db4197c6238fc73a6c0984725b1dee43b9b0\",\n \"calldataBytes\": 94276\n }\n ]\n },\n {\n \"id\": \"draw-credit-50-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 50,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 50,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots50\",\n \"target\": \"evm\",\n \"artifactSha256\": \"09c7469866748b4c0c4bbf2b040844771948a170999f6dc7a38fe5c0ecda4054\",\n \"vkSha256\": \"7b613225b6f32a077011d4196c356e836d22dcd116efe687fde53144fbd8db9f\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"3220161\",\n \"transactionHash\": \"0xadd94db9328f43891fc6cb9c788415319c95a98bcd8b98e2a245d3ba07c1f20a\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x257deb859f7a2c14ef38cb32797b6d0278b25ce2c7cd75ccf81f0c00a1b97250\",\n \"calldataBytes\": 33476\n },\n {\n \"gasUsed\": \"3219933\",\n \"transactionHash\": \"0xe631bbd7681d42974d3b1b25f6e0c7602d32196253f6cee4dc67b5e87929132f\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xafee3915573a0316c9df0f1a56b7a4c4ff8652e74c3890f851ef351e7faedbf3\",\n \"calldataBytes\": 33476\n },\n {\n \"gasUsed\": \"3219897\",\n \"transactionHash\": \"0xfb3807a266b2bfa971b87b3820b6eba6ab968f1028b1d77c9fbcb19177fb7319\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xe6310300cca8b021fd969b27392eae58c21a9c15e071ff8836e42e6490265c0c\",\n \"calldataBytes\": 33476\n }\n ]\n },\n {\n \"id\": \"draw-credit-120-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 120,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 120,\n \"creditOutputs\": 120,\n \"creditRemainders\": 120,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 135840\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots120\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6ccd0366a669c50fd5da875c3eae194fe8aa4c36d35a5f9ebfd64636ea599b48\",\n \"vkSha256\": \"d715848afc5c1ecdfcef5ed5026865abef5040a3bc232fd65330a5ffee8475fb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"17418369\",\n \"transactionHash\": \"0xfab5aadd357ae6105c153dcc98aee2df80a5b46bd911dab0bd457c5440c0e9bb\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xa277729db5ab154b10f2a0c6daa2540f66de7f81e05a289f2f057fef30e43275\",\n \"calldataBytes\": 211140\n },\n {\n \"gasUsed\": \"17418537\",\n \"transactionHash\": \"0xa3d1311b426b88808cd9a5403ecd36c3aea806ac7e2089e6aa22eba7f82e80f6\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x1abf2a9ae3d60f84947bce8449d3ee19e6542a14c6bb1dcde4d37c4df9ab6dfc\",\n \"calldataBytes\": 211140\n },\n {\n \"gasUsed\": \"17417949\",\n \"transactionHash\": \"0x6c7e3735c0d30d2b1897bbacd1a85d8534b714564c87449d1c66fb7b96aebf19\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x17bbc7923c075a1beaf345fbe768629d1c895a32835343640ecb5f7a48da18ab\",\n \"calldataBytes\": 211140\n }\n ]\n },\n {\n \"id\": \"draw-credit-120-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 120,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 120,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots120\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6ccd0366a669c50fd5da875c3eae194fe8aa4c36d35a5f9ebfd64636ea599b48\",\n \"vkSha256\": \"d715848afc5c1ecdfcef5ed5026865abef5040a3bc232fd65330a5ffee8475fb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"6297541\",\n \"transactionHash\": \"0x0e8e80524d7c23a263ad9ed122bb61e5a1ab19285585ac402b7206d87abaf067\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x7ee829303eaaffc7823238e99e83304ccfd3ba349c64fecdee00b882fe39f854\",\n \"calldataBytes\": 65220\n },\n {\n \"gasUsed\": \"6297661\",\n \"transactionHash\": \"0x98f2be383f19b1b17f86c6d365abe86655163b7846c29e5614667ab0e2823bc8\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x3738cef2d40552677299002974043a4355f37d1d76575ee52fc4fe6b6e0c33dd\",\n \"calldataBytes\": 65220\n },\n {\n \"gasUsed\": \"6297613\",\n \"transactionHash\": \"0xb574546b0aacd7d6910e25a2a749aad7f009ed725618763c6229ee7a99fd811e\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x26a15b914134d2f5d5597d632328d368888f3d3076b486231345bb20a4749230\",\n \"calldataBytes\": 65220\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-unchanged-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1714625\",\n \"transactionHash\": \"0x5cebd593124a22bfeac5d22ea51735fedbf409f61e42abd1f398c1b907f4b192\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x04b820b1ac7b4697cc16e2d29e5ba8b530906b6fa5e75da2b022b0a5851cf150\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714697\",\n \"transactionHash\": \"0xd4506ce267c635552b112ee7d304d45433c34d938baf95a46241b88c33f7e57e\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xe7424e20b69104ccf5d407ceb8d72a8fbd3a73ea76fea15c59d8a6e9f0ff3909\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714577\",\n \"transactionHash\": \"0xcf1af44b92f6fa4a46962ece6cbd9216db16438b0ce3320c78f62a59d8753875\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x8a4e50a429190ed3f3d33c8863682d989bdf553cb5e0d961ebd9283f19b1aeea\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-changed-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1714697\",\n \"transactionHash\": \"0xa35c6efd60b27de672329ca9b8f05bb076f8d4e2505ee94a95387e097f9a967b\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x1dd5c7d5206498ad08edcbaa5ba2002560008a6caff12383a14e3733718f0814\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714637\",\n \"transactionHash\": \"0xf8d23c58fa9030fc891c27e45b9bd5905a8b0fe065b83803dbf0239441b64a72\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xc30c6143900dad39d793dc13065fd9c8f1c2e4f77fd350f9a4b3c7eea930c840\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714709\",\n \"transactionHash\": \"0xed72962263a722fcc0d8cb4218579d161dba700c490258c8b0e35a86c574b49e\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x227f3f3fc06e7263168584b1e23d0f722a3255ec818570e76fd36ee4423efcfd\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"cancel-credit-1\",\n \"shape\": {\n \"kind\": \"cancel-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_cancel\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6485609280fe5a3d44ca9f1865b29b44253b3d2cd49770d000e7bb7a3db8e65d\",\n \"vkSha256\": \"d74cf842d204cdf271c06a69482ddff11568e89630346b634d486205bec4bd9e\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"988734\",\n \"transactionHash\": \"0x6a029f228817b397197ad191ec2f4d8e17e004c5c93b58ffcf7ae0d83bb4661a\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x2d0c2050a76696544b225b450634bf892e336157e5dbe41f1a821af8d0c2702e\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"988734\",\n \"transactionHash\": \"0xd9a72b12117c0a3f3905b567922ca326ae21be4447b5e85b4a7b4744be8c2046\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x50f057b1b6c559b46df96c6eea7f22f40a11c39186e8869c819cdc343e56826b\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"988698\",\n \"transactionHash\": \"0x5d7aeb7e7089d3ab48d8e2bfe482d0c65caacb39779e3550118f49937f43f494\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x58dd724ad5f1bca91a0b7bc69722f58890c02e0d205193ad2bb47960bced25d6\",\n \"calldataBytes\": 9604\n }\n ]\n }\n ]\n },\n {\n \"formatVersion\": 1,\n \"id\": \"protocol-92ef274-osaka-real\",\n \"deployment\": {\n \"chainId\": \"31337\",\n \"protocolAddress\": \"0x8870C63A18a9480C7de9B860b849fD293832856D\",\n \"runtimeCodeHash\": \"0x604572c0da90ea139b774cd0d2962a2972fac46e0556c7cec6f6f9aac5deef14\",\n \"tokenAddress\": \"0x4826533B4897376654Bb4d4AD88B7faFD0C98528\"\n },\n \"source\": {\n \"protocolCommit\": \"92ef274c6b36d783507699a33ee20e52192c83c7\",\n \"measuredAt\": \"2026-10-27T08:42:15.991Z\",\n \"chain\": \"Anvil 31337\",\n \"hardfork\": \"osaka\",\n \"token\": \"MockERC20\",\n \"verifier\": \"real\",\n \"assumptions\": [\n \"normal CREATE/Factory deployment; no code or storage injection\",\n \"Solidity 0.8.27 optimizer 200; real BB 5.2.1 verifiers\",\n \"one source tree; two existing leaves; no rollover or screener\",\n \"funding/approval setup excluded; complete transaction receipt gas included\",\n \"exact allowance for caller funding; configured benchmark payout balances\",\n \"observed local samples, not a confidence interval or gas limit\"\n ]\n },\n \"measurements\": [\n {\n \"id\": \"shield-1\",\n \"shape\": {\n \"kind\": \"shield\",\n \"target\": \"evm\",\n \"capacity\": 0,\n \"noteInputs\": 0,\n \"noteOutputs\": 1,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 226\n },\n \"circuit\": null,\n \"samples\": [\n {\n \"gasUsed\": \"649286\",\n \"transactionHash\": \"0xcc299d1780ada9a69b1d9f0f3d06a165db15fccbd2b7ff407834f02f5d563a18\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0xbcb868e781a20588d2fa099a4d7f87c1600044a2e5ec1e369e384d7a5f22f00a\",\n \"calldataBytes\": 1156\n },\n {\n \"gasUsed\": \"649322\",\n \"transactionHash\": \"0x95139dff109725989f0769e3e6fb9bd3e7e1bf581fd475f14e822875eb90fda4\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x7ace353fea4fc8c856c0fd45521d200b02619921977709ff4f910e0ff41c06fe\",\n \"calldataBytes\": 1156\n },\n {\n \"gasUsed\": \"649322\",\n \"transactionHash\": \"0xef578bb38dc8ff8bfd47d2e76e3ab4273019ea9a385f5d2fd99add32ceaecb58\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0xded817f8ef89637e2443e3b626c0837f184ca134fe753be913d5570554c649a6\",\n \"calldataBytes\": 1156\n }\n ]\n },\n {\n \"id\": \"shield-2\",\n \"shape\": {\n \"kind\": \"shield\",\n \"target\": \"evm\",\n \"capacity\": 0,\n \"noteInputs\": 0,\n \"noteOutputs\": 2,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 452\n },\n \"circuit\": null,\n \"samples\": [\n {\n \"gasUsed\": \"757063\",\n \"transactionHash\": \"0x024e2dfbd6f50c368e2a4aa347e3029de668f4ebd36b80227aa003bb7ac21c74\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x8ed63973c158d706ac54bb646626e4f0db5777b4bd56d179b94503af6c417c50\",\n \"calldataBytes\": 1668\n },\n {\n \"gasUsed\": \"757063\",\n \"transactionHash\": \"0x898d852ab28f68adac4d30b160a3dbfee33fa7ca875f70df9eb7763b6b1cd1f0\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x9bb6810de38193933a9f26fa03d3d9bad1ca0151ff5e04544c56520e09da3043\",\n \"calldataBytes\": 1668\n },\n {\n \"gasUsed\": \"757039\",\n \"transactionHash\": \"0x8ff9720e3197aab2d741fbd8d0fa2969203ea8cd051d9649d1e5eb890bcc2be3\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x8604c75eb6363aaae774276e638f5b749aae1f8f815eb99ab1183137eef5730e\",\n \"calldataBytes\": 1668\n }\n ]\n },\n {\n \"id\": \"shield-10\",\n \"shape\": {\n \"kind\": \"shield\",\n \"target\": \"evm\",\n \"capacity\": 0,\n \"noteInputs\": 0,\n \"noteOutputs\": 10,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 2260\n },\n \"circuit\": null,\n \"samples\": [\n {\n \"gasUsed\": \"1692143\",\n \"transactionHash\": \"0x6c13db8bd8a8599daf5034e56712abefbf406982fafe7647b6d22291ba4199ed\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x1ab2ae514f408a79e0c40ca10cee74b2e23d7c8a5f24641b8eea3e1cf58ce700\",\n \"calldataBytes\": 5764\n },\n {\n \"gasUsed\": \"1692083\",\n \"transactionHash\": \"0x5e476c9d3838b782a51332af9bf5c372d29fc411c2168a7af619c52bd5309c7b\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x9c62bc72fc90f990c6711b48865ff922a1856ae05c4fef61dad5f4da7d948401\",\n \"calldataBytes\": 5764\n },\n {\n \"gasUsed\": \"1692203\",\n \"transactionHash\": \"0x0092e2d9160fad95279cde586fc6c79c713244f55db8a2060a5abab9d98c176a\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0xac1bf780b4cc05b4dcc7ee5d741c049ba99ab4af9bdcd25104add730c2a14152\",\n \"calldataBytes\": 5764\n }\n ]\n },\n {\n \"id\": \"transfer-1x2\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 14,\n \"noteInputs\": 1,\n \"noteOutputs\": 2,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 452\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots14\",\n \"target\": \"evm\",\n \"artifactSha256\": \"2a6a20839e90b88b1ecd629f59a01821bad3ee11dbe04db1fd9cdce7a3de0e84\",\n \"vkSha256\": \"ffe0e1a4e690792ecb4eb1fc1acc9ff60f13d3b5af03cfc6ae6d6bf26e99bdea\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1617516\",\n \"transactionHash\": \"0xf49ea3d31cc1346472172e2dee84f9360f60a3fe948a3ef6e87f727af6d42f0d\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xf59c57e63ec2f03abc36d28f273b0af5290184dc97197df740b23d79a851a887\",\n \"calldataBytes\": 11012\n },\n {\n \"gasUsed\": \"1617516\",\n \"transactionHash\": \"0xf8d11286f1f2a4db006ff6b06900c47d0fbf685984499e1e5d4aea49478ba8e5\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xeb5a800190be3534c9e2675c97ac56d0e0be8adef55f60bd32d375776a7d150c\",\n \"calldataBytes\": 11012\n },\n {\n \"gasUsed\": \"1617504\",\n \"transactionHash\": \"0x8939fcea97079a3c5118b9e94325455e2ad1cdb47310ae499a277272654b3eb6\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xecffefb593e2fec5d5827cfd39d0cc4d0efb67dbff6f8dbbd0d2db2439a80cf9\",\n \"calldataBytes\": 11012\n }\n ]\n },\n {\n \"id\": \"transfer-1x14\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 56,\n \"noteInputs\": 1,\n \"noteOutputs\": 14,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 3164\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots56\",\n \"target\": \"evm\",\n \"artifactSha256\": \"ba83ec2f177d16fa88ea04bc54f2e99920f1ac195cdb05b88b9b3bbc245fd953\",\n \"vkSha256\": \"6ad5d3aff0c72a632fb19895658af093a6a92478a9994985e838a71e61237720\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"2489010\",\n \"transactionHash\": \"0x053557acea930a869d6469c91e9bc015d0893607a6ab18d2af684986f7074676\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x734873097eb5e4cb66bfc2cdb61fac6753b53a4b9450fb22895281100af3aaf3\",\n \"calldataBytes\": 17156\n },\n {\n \"gasUsed\": \"2489106\",\n \"transactionHash\": \"0xb3990edb994011775e275bc1eb38c527b7206a2bfadf510e8aa53e260f3594b8\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xf8cb019ebb0ecd0ec5d6634198292883c63fe93a7c65c34f9f3120c6cc54f1cf\",\n \"calldataBytes\": 17156\n },\n {\n \"gasUsed\": \"2489094\",\n \"transactionHash\": \"0xc97079019567ff8a79d285421351ee4bc48d14092a0e12ff634151719e991088\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x5a6947839165c8961eeeb9190331415c40366a78b4a6a5771e7b8954dbb8b3c7\",\n \"calldataBytes\": 17156\n }\n ]\n },\n {\n \"id\": \"transfer-1x56\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 112,\n \"noteInputs\": 1,\n \"noteOutputs\": 56,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 12656\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots112\",\n \"target\": \"evm\",\n \"artifactSha256\": \"713b78469b6e97711122210f8497942120c1c9d66d3604bc184566c4eba59cc3\",\n \"vkSha256\": \"d6a46e297949c28b9a62fd9aef1f202870fdca97b8bfb15beefd27b9e9f3d86e\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"5389227\",\n \"transactionHash\": \"0xb820d3c358724c1d64422017f232d074e4ff1ffaf1b1ce5ee719409427cf2208\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x474bd1e52457801d1a596a9f23aeb6d365a17be028ee0c8cf8fd4758eaa1106b\",\n \"calldataBytes\": 36356\n },\n {\n \"gasUsed\": \"5389095\",\n \"transactionHash\": \"0x16514d8cf1136d7a7f40591859e2ea2d256af66520498e1fc81eb28837db600d\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x42314a0d6eb9e765869e1b66b279444c78f919d2c28aed544d9fa7ac3bd2acb4\",\n \"calldataBytes\": 36356\n },\n {\n \"gasUsed\": \"5389203\",\n \"transactionHash\": \"0xee69d565a7eafb60ad7a47afe80a49d4fa40b50660669d9141e7dc6f4c3dbe0d\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x0dcdada663ee04dd63e06fcdb79dacc5623201d29b687f63deede2b4762a994e\",\n \"calldataBytes\": 36356\n }\n ]\n },\n {\n \"id\": \"transfer-1x112\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 168,\n \"noteInputs\": 1,\n \"noteOutputs\": 112,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 25312\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots168\",\n \"target\": \"evm\",\n \"artifactSha256\": \"f7b3b1384e961367702f544299ca3521d8205fac31b7691c45ff84325d5a31c3\",\n \"vkSha256\": \"e00181533d7e35d2307570528f9e7f8f88e2909b6ae338d93373b608dea96881\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"9139842\",\n \"transactionHash\": \"0x09951c4e00b868b6660429d187a482004646e4c84ef341d3b98352c249db6a06\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xba9da3c08189335acff1eb33554f5f12475e4a6510324cf6ec9eadf340ce15d2\",\n \"calldataBytes\": 61444\n },\n {\n \"gasUsed\": \"9139650\",\n \"transactionHash\": \"0xb06f69d1c6e5406758918d5d296ab889bab4c3814f616cc581ad312cc7ebb2f3\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x5516a76b4b366f2e539a67bb848b7d232c3e6f328d34ca5bd3dba43a14c316bf\",\n \"calldataBytes\": 61444\n },\n {\n \"gasUsed\": \"9139530\",\n \"transactionHash\": \"0x116c4875b7712b7cb51cdb0fcb6e66a95733dca272aa272bc0b1fd265edbe26c\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xd36340fddd1eace21b73f785c6589bf73b07bef782f2e78a5e3d3d828b0b607c\",\n \"calldataBytes\": 61444\n }\n ]\n },\n {\n \"id\": \"withdraw-1x1\",\n \"shape\": {\n \"kind\": \"withdraw\",\n \"target\": \"evm\",\n \"capacity\": 14,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 226\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots14\",\n \"target\": \"evm\",\n \"artifactSha256\": \"2a6a20839e90b88b1ecd629f59a01821bad3ee11dbe04db1fd9cdce7a3de0e84\",\n \"vkSha256\": \"ffe0e1a4e690792ecb4eb1fc1acc9ff60f13d3b5af03cfc6ae6d6bf26e99bdea\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1597571\",\n \"transactionHash\": \"0x326892d32146e0bc36b396fd3973151a629312df68ed25a4ffbb6a3da23ba274\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x3e0f326cba3dd019b86431b4c22145758a7f10c121a696a81a094746b04495b5\",\n \"calldataBytes\": 10564\n },\n {\n \"gasUsed\": \"1597715\",\n \"transactionHash\": \"0x2e3a15157ac9c07e4717bbd4641481ce3bc0068d26157752815b6ec6b30acdd0\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xab7fceac97d55e8702d1202b98d3a05c4b1e0f71e51b6d88d7e80e91cc338596\",\n \"calldataBytes\": 10564\n },\n {\n \"gasUsed\": \"1597595\",\n \"transactionHash\": \"0x5052e94a67520c43416cdcb60a1365a126560861173d0eef46bcbf0a566fe947\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x9a64cf76b646b5a07b72fcc61266e87f17365fec891701c331982a93e5ba9b89\",\n \"calldataBytes\": 10564\n }\n ]\n },\n {\n \"id\": \"sweep-1x0\",\n \"shape\": {\n \"kind\": \"sweep\",\n \"target\": \"evm\",\n \"capacity\": 14,\n \"noteInputs\": 1,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots14\",\n \"target\": \"evm\",\n \"artifactSha256\": \"2a6a20839e90b88b1ecd629f59a01821bad3ee11dbe04db1fd9cdce7a3de0e84\",\n \"vkSha256\": \"ffe0e1a4e690792ecb4eb1fc1acc9ff60f13d3b5af03cfc6ae6d6bf26e99bdea\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1069308\",\n \"transactionHash\": \"0xb1ab469d05ca5f49659f54a332cc172892dcce37e475342fbf52fa9cfb4d3927\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xe5b04579149987198801f1ca19ab771d5262de2aaf9861a6c962d50d1c6baef0\",\n \"calldataBytes\": 10116\n },\n {\n \"gasUsed\": \"1069284\",\n \"transactionHash\": \"0xd6adee997f7e1e19e3918f913f6ee48d94df69c09ed74e333325023089e7f6df\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xcb225566f8f1ea6ae8da30158b8f1aef03d50fa4ea352a00aa42b7f41a05d63c\",\n \"calldataBytes\": 10116\n },\n {\n \"gasUsed\": \"1069308\",\n \"transactionHash\": \"0xe06dd7f3a2718bc9a9412c2d6f505960ce225b2e5fe6c1c66bb5b0e8f427006f\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x37a08c5918892e1c19df017c746ab0ede03c1bb195c3be593d70c1f9de91897e\",\n \"calldataBytes\": 10116\n }\n ]\n }\n ]\n },\n {\n \"formatVersion\": 1,\n \"id\": \"protocol-044e2ee-bc51dde071f1-prague-credit-real-accrued-fees\",\n \"deployment\": {\n \"chainId\": \"31337\",\n \"protocolAddress\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\",\n \"tokenAddress\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\"\n },\n \"source\": {\n \"protocolCommit\": \"044e2ee9aeb9ba0e3dbd0630247495189e0405d4\",\n \"measuredAt\": \"2026-11-05T10:18:51.134Z\",\n \"chain\": \"Anvil 31337\",\n \"hardfork\": \"prague\",\n \"token\": \"MockERC20\",\n \"verifier\": \"real\",\n \"fingerprints\": {\n \"protocolSourceSha256\": \"bc51dde071f1ac4616b3264305aeb2b04b52e0d13772625feed53fb5e8dae51b\",\n \"dirtyDiffSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"compiledArtifactsSha256\": \"4900a39e94aeb31f686915bf8618efabf573b93365444db46a0bff3544741221\",\n \"creditManifestSha256\": \"c27ff83889c3082b4c918bd63e15437881f0a6f12ed7f130312e1140873679fb\",\n \"userManifestSha256\": \"9ef9d34d4459c2843d022712093216142e3eacdd1467d2382a6a68ad36c33b8f\",\n \"sdkSourceSha256\": \"11b42d88482ab2b0ce8adf02a8fef00a667fc73e4cb5c926cd76da6181c5ce15\"\n },\n \"toolchain\": {\n \"solidity\": \"0.8.38\",\n \"barretenberg\": \"6.0.0\",\n \"noir\": \"1.0.0-rc.6\",\n \"evmVersion\": \"prague\",\n \"optimizerRuns\": 200,\n \"anvil\": \"anvil Version: 1.8.6\"\n },\n \"blockGasLimit\": \"500000000\",\n \"runtimeContracts\": {\n \"transact_user_slots14_direct_Verifier\": {\n \"address\": \"0x5FbDB2315678afecb367f032d93F642f64180aa3\",\n \"runtimeCodeHash\": \"0x42d1932097f18874242d98855b2fc167471ba84dd122ab3744996dd64320f675\"\n },\n \"transact_user_slots14-adapter\": {\n \"address\": \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\",\n \"runtimeCodeHash\": \"0x876f0e43fc1d24475c0c63ee8c7907427d534b0c604f5985aacd28ee2c6d1b12\"\n },\n \"transact_user_slots56_direct_Verifier\": {\n \"address\": \"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0\",\n \"runtimeCodeHash\": \"0xefca4a7ee5382b0f2029571f6781f2ade7ac698906c32d3e49f10def631e7882\"\n },\n \"transact_user_slots56-adapter\": {\n \"address\": \"0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9\",\n \"runtimeCodeHash\": \"0x945680c4278b61c07bf07fa7637908e9a38ccd414c9330bf23b3c41119ea0de6\"\n },\n \"transact_user_slots112_direct_Verifier\": {\n \"address\": \"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9\",\n \"runtimeCodeHash\": \"0xfbf97cd940123ab3e81ce55283efb48b55ddaa95423fff4d0d648b248f4e196b\"\n },\n \"transact_user_slots112-adapter\": {\n \"address\": \"0x5FC8d32690cc91D4c39d9d3abcBD16989F875707\",\n \"runtimeCodeHash\": \"0xac129aa749b7ece8c51ed68f4f0afcc82a1cbd7b2a01f5ff7ff7de1dcde21b1e\"\n },\n \"transact_user_slots168_direct_Verifier\": {\n \"address\": \"0x0165878A594ca255338adfa4d48449f69242Eb8F\",\n \"runtimeCodeHash\": \"0x7ee9799d55001f74c8d88179dd0247b3de932516f975605ba248b52e7ba540c8\"\n },\n \"transact_user_slots168-adapter\": {\n \"address\": \"0xa513E6E4b8f2a923D98304ec87F64353C4D5C853\",\n \"runtimeCodeHash\": \"0x24b5ea6f436b90b3821bd0ea4872fb205c996fd74f1546bc1086d98b7ec5d87d\"\n },\n \"transact_aggregate_14_4_Verifier\": {\n \"address\": \"0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6\",\n \"runtimeCodeHash\": \"0xae41039ded63fa7777c99a2552ba603a3a4d9703d464079dff787dab6893ef24\"\n },\n \"transact_aggregate_14_4-adapter\": {\n \"address\": \"0x8A791620dd6260079BF849Dc5567aDC3F2FdC318\",\n \"runtimeCodeHash\": \"0xf4e86e9b2001f5972ce00f7fcd5a01deb9bfe5d676e437e74135ee7036469ca3\"\n },\n \"transact_aggregate_14_8_Verifier\": {\n \"address\": \"0x610178dA211FEF7D417bC0e6FeD39F05609AD788\",\n \"runtimeCodeHash\": \"0x089f476f56fb1003586b18c0b5a75f9d24c76d4804d84ea202005371eae333de\"\n },\n \"transact_aggregate_14_8-adapter\": {\n \"address\": \"0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e\",\n \"runtimeCodeHash\": \"0xc40142342902da65f45bb995724b129389e3505c283d7209a6c29bf27521c363\"\n },\n \"transact_aggregate_14_12_Verifier\": {\n \"address\": \"0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0\",\n \"runtimeCodeHash\": \"0xe0cba79e66fdb75dbc082ef0f938b07e4d38acce283b87869fe414083b3e08b0\"\n },\n \"transact_aggregate_14_12-adapter\": {\n \"address\": \"0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82\",\n \"runtimeCodeHash\": \"0x155bfc9367a6f3c96ac9b4d1dc1d0358a4046b584a9a1322a9582557ea691ff4\"\n },\n \"create_credit_direct_Verifier\": {\n \"address\": \"0x9A676e781A523b5d0C0e43731313A708CB607508\",\n \"runtimeCodeHash\": \"0xbc88c374cc3c0c1e2cdf8663cee4c960f3a3ba4b210e2c520ca111e56461b23a\"\n },\n \"create_credit-adapter\": {\n \"address\": \"0x0B306BF915C4d645ff596e518fAf3F9669b97016\",\n \"runtimeCodeHash\": \"0xfd39446d56c189fbb35c0906e525433b6b9c63444c97b13990b7dd6f19bd38fc\"\n },\n \"credit_draw_slots1_direct_Verifier\": {\n \"address\": \"0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1\",\n \"runtimeCodeHash\": \"0x47be80e72c3a22ea044638f6004de8c3a0264d5a0d17189c01153cdabfd7bab6\"\n },\n \"credit_draw_slots1-adapter\": {\n \"address\": \"0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE\",\n \"runtimeCodeHash\": \"0x73a2af387b45cecf383b90f4cebb54b263f621a5038da947944c54f1089ba288\"\n },\n \"credit_draw_slots12_direct_Verifier\": {\n \"address\": \"0x68B1D87F95878fE05B998F19b66F4baba5De1aed\",\n \"runtimeCodeHash\": \"0x244d9ba22f5c736c2a5c42c466701e2a8ba7ae8108665133541026ea45d56e04\"\n },\n \"credit_draw_slots12-adapter\": {\n \"address\": \"0x3Aa5ebB10DC797CAC828524e59A333d0A371443c\",\n \"runtimeCodeHash\": \"0x63c200eae61218b865f3c8b418bf0887da7a70ebf41f55825e4750c36a1d1914\"\n },\n \"credit_draw_slots50_direct_Verifier\": {\n \"address\": \"0xc6e7DF5E7b4f2A278906862b61205850344D4e7d\",\n \"runtimeCodeHash\": \"0x2ad5eb64bcfae34ef04111dd8f9c1ffc5fc8aa6c1ad3a65d8da78233f3390660\"\n },\n \"credit_draw_slots50-adapter\": {\n \"address\": \"0x59b670e9fA9D0A427751Af201D676719a970857b\",\n \"runtimeCodeHash\": \"0x1716df69f1eb1c1db485bc3ba4a4ed5a1009275c9058a9e96b28ab3431a6c006\"\n },\n \"credit_draw_slots120_direct_Verifier\": {\n \"address\": \"0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1\",\n \"runtimeCodeHash\": \"0x523b6d211618bbd33d708f8198b9f3daafc10e2fa7a6a857db5795ed748a24e4\"\n },\n \"credit_draw_slots120-adapter\": {\n \"address\": \"0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44\",\n \"runtimeCodeHash\": \"0x32d875eb4f4c27252fa958971b66e1fdff8c02adb007fea2bf31eee4b851a132\"\n },\n \"credit_cancel_direct_Verifier\": {\n \"address\": \"0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f\",\n \"runtimeCodeHash\": \"0x4058133b7ecd31fe06749bfa3107ad0fbcdc9bf72d3b9cbf4dbd2b2f65be6d35\"\n },\n \"credit_cancel-adapter\": {\n \"address\": \"0x4A679253410272dd5232B3Ff7cF5dbB88f295319\",\n \"runtimeCodeHash\": \"0x0f570794fb4b7f15a791c59c760732d9f9408d1e3bea881ba7c5b76b36fb4e9b\"\n },\n \"credit_top_up_direct_Verifier\": {\n \"address\": \"0x7a2088a1bFc9d81c55368AE168C2C02570cB814F\",\n \"runtimeCodeHash\": \"0x7ada3623c851a9cfba7863a75f4fa289d747040f1a822510eefecc53d70180cd\"\n },\n \"credit_top_up-adapter\": {\n \"address\": \"0x09635F643e140090A9A8Dcd712eD6285858ceBef\",\n \"runtimeCodeHash\": \"0x23bba4eca8306f4bc02ead10449775a359beeed2065ea8c84da4dc6b9e4dfc82\"\n },\n \"PrivateTransferVerifierRegistry\": {\n \"address\": \"0xc5a5C42992dECbae36851359345FE25997F5C42d\",\n \"runtimeCodeHash\": \"0xbc74aacbc22d853cb50fe2041f20014e644fa8f83e06f51656b4667f1da164bc\"\n },\n \"CrossTreeVerifierRegistry\": {\n \"address\": \"0x67d269191c92Caf3cD7723F116c85e6E9bf55933\",\n \"runtimeCodeHash\": \"0x818ce6a634a11cdd9913873d3a265254dda45b490431ad1636373237e2685ba1\"\n },\n \"DualVerifierRouter\": {\n \"address\": \"0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E\",\n \"runtimeCodeHash\": \"0xb3bdc1aa5a6e4eac85e3651615c7942c5565f0593d79bacccb19b5aa587548ca\"\n },\n \"AtomicBatchOutputLib\": {\n \"address\": \"0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690\",\n \"runtimeCodeHash\": \"0xef68c4a35a62fbbb4d0918f1612f0ffd9d250c9ceefd38e59e9c8ef042addb45\"\n },\n \"FundingLib\": {\n \"address\": \"0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB\",\n \"runtimeCodeHash\": \"0x36f4e6d20cf7ca1b221dad34bc34ed7b8540c0e774c594652048822272e6bb52\"\n },\n \"PrivateTransferLib\": {\n \"address\": \"0x9E545E3C0baAB3E08CdfD552C960A1050f373042\",\n \"runtimeCodeHash\": \"0x1e538d13c68b2a7a2f605466cd7c09c166b904476a6b5b372f8b9b45d9de9a62\"\n },\n \"CrossTreeTransferLib\": {\n \"address\": \"0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9\",\n \"runtimeCodeHash\": \"0x9ec892d5a5d1c38e3218c7d38c74bd63034641cc458a195ec63c6a50f67ded25\"\n },\n \"AggregateTransferLib\": {\n \"address\": \"0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8\",\n \"runtimeCodeHash\": \"0x2c01c84317448e4786e7a7b9c06f6f3b4990354f151ae6914cdb75d8b7ebe881\"\n },\n \"CreateCreditLib\": {\n \"address\": \"0x851356ae760d987E095750cCeb3bC6014560891C\",\n \"runtimeCodeHash\": \"0x8b28e626c6a0f41179880773a48681362a05e0eee12193d1641ae5bb625fe960\"\n },\n \"CreditLifecycleLib\": {\n \"address\": \"0xf5059a5D33d5853360D16C683c16e67980206f36\",\n \"runtimeCodeHash\": \"0xa177a7f1dfb69cf2d6eea899ef8170959587b8cb3c60559c3b2cecf62309bfc4\"\n },\n \"ShieldLib\": {\n \"address\": \"0x95401dc811bb5740090279Ba06cfA8fcF6113778\",\n \"runtimeCodeHash\": \"0xfde7bbf1c02e17ab2d9fc9849fc282b29ac1db86378eec27f3a006d7484aa768\"\n },\n \"InvisiFactory\": {\n \"address\": \"0x998abeb3E57409262aE5b751f60747921B33613E\",\n \"runtimeCodeHash\": \"0x9055356390e48564adeca0065b12698a5d09451960af97ad2f5c2e450cb9c84c\"\n },\n \"InvisiAddressRegistry\": {\n \"address\": \"0x70e0bA845a1A0F2DA3359C97E0285013525FFC49\",\n \"runtimeCodeHash\": \"0x007da3f4e888366ba0eed52cd511c4a369359291387ad19ca37e89eb395fce30\"\n },\n \"InvisiProtocol\": {\n \"address\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\"\n },\n \"MockERC20\": {\n \"address\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\",\n \"runtimeCodeHash\": \"0xf7f676b5c54f6e94f82f0de65a0117468a0d915e8a79d150e74f76bd6d7f708b\"\n }\n },\n \"assumptions\": [\n \"normal CREATE/Factory deployment and fresh registry; EIP170/EIP3860 unchanged; no code/storage injection\",\n \"Solidity0.8.38 optimizer200 Prague; pinned BB6.0.0 real verifiers; every native proof independently verified\",\n \"one physical source tree and 4 existing leaves shared by every sample; top-up has two authenticated source groups; no rollover or screener\",\n \"funding/approvals/2 genuine Credit seeds/usage-seed draw/payout reset excluded from business gas\",\n \"each round restores identical token balances, exact caller allowance105, note cursor, nullifiers and baseline; spender payout starts zero; broadcasterFee5\",\n \"complete receipt.gasUsed is measured, including verifier/calldata/logging/output insertion; memo0\",\n \"Prague local block gas limit500000000; measured transactions may be unmineable under lower network transaction/block limits\",\n \"observed three-sample ranges are neither a confidence interval nor a recommended transaction gas limit\"\n ]\n },\n \"measurements\": [\n {\n \"id\": \"create-credit-caller-0x0\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 1132\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1591717\",\n \"transactionHash\": \"0xd06c84a0fd796d0100870a9f1a17be8069677f0f304664d3670712740c8bdf62\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x3d7c908964c165726e2ec0e921e61287864c7a5cb4677bd472f1d2d3b22c0d1b\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1591897\",\n \"transactionHash\": \"0x9eb1f64a8aeffff70213ef442d8553fff10676770768b1f4ad37508cf354c11c\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xe52bf98f68f306ce13761e3e985c04572d43ac09b0790db5c5217144d68c044d\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1591957\",\n \"transactionHash\": \"0xb3ff21541b1acc1ced31459140c0016f2a5abc25a4723086e3012861d4a8f718\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x681e28c2f26a020985e262c947b3732edaeeeff78f6d59d4957c188af53cfedc\",\n \"calldataBytes\": 11844\n }\n ]\n },\n {\n \"id\": \"create-credit-1x1\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1631989\",\n \"transactionHash\": \"0xf8acf0ee3e372c214ce5ef60d8e28b75ca3041a77d41d1e94acec78070572b5d\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xd822acd15a4373e9c901579700c1f5e83810cf4a3760c99bd535196550f05676\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1632085\",\n \"transactionHash\": \"0x5315adad09961f10a32d18b8337513347327b85475a5fccf2b700262e34660f0\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xd8a5f0b8fe42d735c3e0107291afae3973e14bb8fcbff48ea3a30f65172022e8\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1632013\",\n \"transactionHash\": \"0xbd92a3f189c9cdc991cb2843959d2d020ab3f1aeb48fdb0315147f204b9e4295\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x77deffc18bfbc2cbc8e29c34b62b3be52984869cdcc73ccd245b03025d59797c\",\n \"calldataBytes\": 12196\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-unchanged-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1672668\",\n \"transactionHash\": \"0x7a0ce3262fedebbd2b7c919f37fe0beb0b34d89a8a71223f13e9946c04131e21\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x34c561de8fae1ca6230391e9dfe98187cf68bc30b51b4c7338083e4d5349dbff\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0xf27e9d4e588253646168e8db8bc187e5483dbb0ddc147728c29e06f2ab397349\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xae2cd77d442ba1d55b436388eeded196dcd8735152c0c56dee8830f0ddd457c9\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0xd0633554a0a357d450e49fadecdfb61f39410a2b77969a445a00d7796c088f8a\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x4851b2333dcb118bd2ca4c6e1332736d32d074e90096e6d144ea4d4262a01124\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-changed-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0x7dcd2f549ac253a1db6bf1956a0ae4f7116258cefa4d6468635694cc0cb310d6\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x1b318287c6f265fae88233ea20e7a881723fd01f48ff86941323ad0e465f4757\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0x71b6d1de440b578539ca0045c74ee688dbd9ed1971cb19d12fc9256d46d3a6bd\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x4a9cf7f534d3136b7042447671dd14663bfecce06bb1d432570871de0800995f\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672812\",\n \"transactionHash\": \"0x781a4f563c1f9d17ec5228f49dd32942622e2090b7cefabf718e575ec1159697\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xb7f060617081dd56a3a4fa723a2308ef008da493417dffe3d31b130dfb0f3e64\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"cancel-credit-1\",\n \"shape\": {\n \"kind\": \"cancel-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_cancel\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6485609280fe5a3d44ca9f1865b29b44253b3d2cd49770d000e7bb7a3db8e65d\",\n \"vkSha256\": \"d74cf842d204cdf271c06a69482ddff11568e89630346b634d486205bec4bd9e\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1013031\",\n \"transactionHash\": \"0x14678b9811132c703f7593ee8e4c1dcaf478e11cf4ca06615cf432c9866b3bc3\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x433f2aa3603339fcb28150f0fa6cc45f696cd04808fca1edb0798d674d6488f6\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"1012983\",\n \"transactionHash\": \"0xa4be323a92ee04c57343c79997480fd32cbb6982641c8982504337f634e5d19b\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x7e283b15e8f895ddc75e93041590b0fc7ade0833405e2fa2b349b63649b244d6\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"1013043\",\n \"transactionHash\": \"0x4795ce2a29ea83ea3d44a92624fbd52ab370e6140404d94ecff0e5dee9c04e65\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x90c7422c05e18142fe87c610e13eca9379055d4086019e46d4cacab875959a42\",\n \"calldataBytes\": 9604\n }\n ]\n }\n ]\n }\n]\n","import referenceProfiles from \"./data/gas-benchmarks.json\";\nimport {\n GasBenchmarkCircuit,\n GasBenchmarkDeployment,\n GasBenchmarkProfile,\n GasBenchmarkShape,\n} from \"./types\";\n\nconst word = /^0x[0-9a-fA-F]{64}$/;\n\nexport const address = /^0x[0-9a-fA-F]{40}$/;\n\nconst decimal = /^(0|[1-9][0-9]*)$/;\n\nexport const shapeKeys: Array<keyof GasBenchmarkShape> = [\n \"kind\",\n \"target\",\n \"capacity\",\n \"noteInputs\",\n \"noteOutputs\",\n \"sourceTrees\",\n \"creditInputs\",\n \"creditOutputs\",\n \"creditRemainders\",\n \"funding\",\n \"permit\",\n \"deliveryBytes\",\n];\n\n/** Copy trusted benchmark records; validation checks format, not their publisher's honesty. */\nexport function copyGasBenchmarks(profiles: readonly GasBenchmarkProfile[]): GasBenchmarkProfile[] {\n const copy = structuredClone([...profiles]);\n for (const p of copy) {\n if (\n p.formatVersion !== 1 ||\n !p.id ||\n !decimal.test(p.deployment.chainId) ||\n !address.test(p.deployment.protocolAddress) ||\n !address.test(p.deployment.tokenAddress) ||\n !p.deployment.runtimeCodeHash ||\n !word.test(p.deployment.runtimeCodeHash) ||\n p.source.verifier !== \"real\" ||\n !/^[0-9a-f]{40}$/i.test(p.source.protocolCommit) ||\n !p.source.measuredAt ||\n !Array.isArray(p.source.assumptions) ||\n !p.source.assumptions.every((assumption) => typeof assumption === \"string\") ||\n !p.measurements.length\n )\n throw new Error(\"invalid gas benchmark profile\");\n if (\n p.source.fingerprints &&\n ![\n \"protocolSourceSha256\",\n \"dirtyDiffSha256\",\n \"compiledArtifactsSha256\",\n \"creditManifestSha256\",\n \"userManifestSha256\",\n \"sdkSourceSha256\",\n ].every((key) => {\n const v = (p.source.fingerprints as unknown as Record<string, unknown>)[key];\n return typeof v === \"string\" && /^[a-f0-9]{64}$/i.test(v);\n })\n )\n throw new Error(\"invalid benchmark source fingerprint\");\n if (\n p.source.blockGasLimit !== undefined &&\n (!decimal.test(p.source.blockGasLimit) || BigInt(p.source.blockGasLimit) <= 0n)\n )\n throw new Error(\"invalid benchmark block gas limit\");\n if (\n p.source.runtimeContracts &&\n !Object.values(p.source.runtimeContracts).every(\n (v) => address.test(v.address) && word.test(v.runtimeCodeHash)\n )\n )\n throw new Error(\"invalid benchmark runtime identity\");\n if (\n p.source.toolchain &&\n (![\"solidity\", \"barretenberg\", \"noir\", \"evmVersion\", \"anvil\"].every((key) => {\n const v = (p.source.toolchain as unknown as Record<string, unknown>)[key];\n return typeof v === \"string\" && v.length > 0;\n }) ||\n !Number.isSafeInteger(p.source.toolchain.optimizerRuns) ||\n p.source.toolchain.optimizerRuns < 0)\n )\n throw new Error(\"invalid benchmark toolchain\");\n for (const m of p.measurements) {\n if (\n !m.id ||\n !m.samples.length ||\n ![\"none\", \"caller\", \"signature\"].includes(m.shape.funding) ||\n typeof m.shape.permit !== \"boolean\"\n )\n throw new Error(\"invalid gas benchmark measurement\");\n for (const key of shapeKeys) {\n const value = m.shape[key];\n if (\n ![\"kind\", \"target\", \"funding\", \"permit\"].includes(key) &&\n (!Number.isSafeInteger(value) || Number(value) < 0)\n )\n throw new Error(\"invalid gas benchmark shape\");\n }\n if (\n m.circuit &&\n (![m.circuit.artifactSha256, m.circuit.vkSha256].every((hash) =>\n /^[a-f0-9]{64}$/i.test(hash)\n ) ||\n !m.circuit.circuitName ||\n !m.circuit.target)\n )\n throw new Error(\"invalid gas benchmark circuit identity\");\n const hashes = new Set<string>();\n for (const sample of m.samples) {\n if (\n typeof sample.gasUsed !== \"string\" ||\n !decimal.test(sample.gasUsed) ||\n BigInt(sample.gasUsed) <= 0n ||\n !word.test(sample.transactionHash) ||\n !word.test(sample.blockHash) ||\n !decimal.test(sample.blockNumber) ||\n !Number.isSafeInteger(sample.calldataBytes) ||\n sample.calldataBytes < 0 ||\n hashes.has(sample.transactionHash.toLowerCase())\n )\n throw new Error(\"invalid gas benchmark receipt\");\n hashes.add(sample.transactionHash.toLowerCase());\n }\n }\n }\n return copy;\n}\n\n/** Parse a trusted, JSON-compatible benchmark catalog. No network access or publisher authentication. */\nexport function defineGasBenchmarks(input: unknown): GasBenchmarkProfile[] {\n if (!Array.isArray(input)) throw new Error(\"invalid gas benchmark catalog\");\n try {\n return copyGasBenchmarks(input as GasBenchmarkProfile[]);\n } catch {\n throw new Error(\"invalid gas benchmark catalog\");\n }\n}\n\nexport const defaultProfiles = defineGasBenchmarks(referenceProfiles);\n\nexport function sameDeployment(a: GasBenchmarkDeployment, b: GasBenchmarkDeployment) {\n return (\n a.chainId === b.chainId &&\n a.protocolAddress.toLowerCase() === b.protocolAddress.toLowerCase() &&\n a.tokenAddress.toLowerCase() === b.tokenAddress.toLowerCase() &&\n a.runtimeCodeHash?.toLowerCase() === b.runtimeCodeHash?.toLowerCase()\n );\n}\n\nexport function sameCircuit(a: GasBenchmarkCircuit | null, b: GasBenchmarkCircuit | null) {\n return a === null\n ? b === null\n : b !== null &&\n a.circuitName === b.circuitName &&\n a.target === b.target &&\n a.artifactSha256.toLowerCase() === b.artifactSha256.toLowerCase() &&\n a.vkSha256.toLowerCase() === b.vkSha256.toLowerCase();\n}\n","import { defaultProfiles, sameCircuit, shapeKeys } from \"./profiles\";\nimport { GasBenchmarkProfile, GasBenchmarkShape, GasEstimateRequest, GasReference } from \"./types\";\n\n/** Internal workload envelope for combinations without an exact receipt measurement. */\nexport function estimateShapeGas(\n request: GasEstimateRequest,\n profiles: readonly GasBenchmarkProfile[] = defaultProfiles\n): GasReference {\n if (request.shape.target === \"noir-recursive\") {\n throw new Error(\n \"Estimate gas for the complete aggregate, not an individual recursive member\"\n );\n }\n const measurements = profiles.flatMap((profile) => profile.measurements);\n const matching = measurements.filter(\n (measurement) =>\n measurement.shape.kind === request.shape.kind &&\n measurement.shape.target === request.shape.target &&\n sameCircuit(measurement.circuit, request.circuit)\n );\n const exact = matching.filter((measurement) =>\n shapeKeys.every((key) => measurement.shape[key] === request.shape[key])\n );\n if (exact.length) {\n const means = exact.map((m) => {\n const count = BigInt(m.samples.length);\n return (m.samples.reduce((sum, s) => sum + BigInt(s.gasUsed), 0n) + count - 1n) / count;\n });\n return { gasUnits: means.reduce((max, v) => (v > max ? v : max)) };\n }\n if (\n [\"create-credit\", \"draw-credit\", \"top-up-credit\", \"cancel-credit\"].includes(\n request.shape.kind\n ) &&\n !matching.length\n )\n throw new Error(\"No current Credit gas reference for this artifact and verification key\");\n const candidates = matching.length\n ? matching\n : measurements.filter(\n (measurement) =>\n measurement.shape.kind === request.shape.kind &&\n measurement.shape.target === request.shape.target\n );\n if (!candidates.length) throw new Error(\"No gas reference for this operation kind and target\");\n // Scale upward only. This intentionally overcounts shared verification work rather than\n // claiming a calibrated marginal cost for unmeasured input, tree or authorization paths.\n const dimensions = [\n \"noteInputs\",\n \"noteOutputs\",\n \"sourceTrees\",\n \"creditInputs\",\n \"creditOutputs\",\n \"creditRemainders\",\n \"deliveryBytes\",\n ...(!matching.length ? [\"capacity\"] : []),\n ] as const;\n // Same public shape may have several private-policy variants. Use their worst observed\n // receipt before comparing different workload baselines, so a cheaper variant cannot win.\n const groups = new Map<string, (typeof candidates)[number]>();\n for (const candidate of candidates) {\n const key = JSON.stringify([\n shapeKeys.map((k) => candidate.shape[k]),\n candidate.circuit?.circuitName,\n candidate.circuit?.target,\n candidate.circuit?.artifactSha256.toLowerCase(),\n candidate.circuit?.vkSha256.toLowerCase(),\n ]);\n const previous = groups.get(key);\n groups.set(\n key,\n previous\n ? { ...candidate, samples: [...previous.samples, ...candidate.samples] }\n : candidate\n );\n }\n const estimates = [...groups.values()].map((measurement) => {\n let numerator = 1n;\n let denominator = 1n;\n for (const key of dimensions) {\n const current = BigInt(request.shape[key as keyof GasBenchmarkShape] as number) + 1n;\n const baseline =\n BigInt(measurement.shape[key as keyof GasBenchmarkShape] as number) + 1n;\n if (current * denominator > numerator * baseline) {\n numerator = current;\n denominator = baseline;\n }\n }\n let gas = measurement.samples.reduce(\n (max, sample) => (BigInt(sample.gasUsed) > max ? BigInt(sample.gasUsed) : max),\n 0n\n );\n gas = (gas * numerator + denominator - 1n) / denominator;\n // These external calls were absent from the bundled receipt matrix. Reserve the cost\n // of one complete measured operation for each additional authorization mechanism.\n if (request.shape.funding === \"signature\" && measurement.shape.funding !== \"signature\")\n gas *= 2n;\n if (request.shape.permit && !measurement.shape.permit) gas *= 2n;\n return gas;\n });\n return { gasUnits: estimates.reduce((min, gas) => (gas < min ? gas : min)) };\n}\n","import type { TokenProtocol } from \"@invisi-labs/protocol\";\nimport type { OperationPlan } from \"../transactions/operation-types\";\nimport { operationSources } from \"../transactions/preparation/inputs\";\nimport { defaultProfiles, sameCircuit, sameDeployment, shapeKeys } from \"./profiles\";\nimport { estimateShapeGas } from \"./shape\";\nimport {\n BenchmarkGasEstimate,\n GasBenchmarkProfile,\n GasEstimateRequest,\n GasReference,\n} from \"./types\";\n\n/** Pure reference lookup. No proof, RPC, current fee price, extrapolation or transaction gas limit. */\nexport function estimateBenchmarkGas(\n plan: OperationPlan,\n protocol: TokenProtocol,\n profiles?: readonly GasBenchmarkProfile[]\n): BenchmarkGasEstimate {\n const credit = plan.credit;\n const deliveries = credit?.deliveries ?? plan.outputs.map((out) => out.delivery);\n const request: GasEstimateRequest = {\n deployment: {\n chainId: plan.context.chainId.toString(),\n protocolAddress: plan.context.protocolAddress,\n runtimeCodeHash: protocol.expectedRuntimeCodeHash ?? null,\n tokenAddress: plan.context.tokenAddress,\n },\n shape: {\n kind: plan.kind,\n target: plan.statement?.target ?? \"evm\",\n capacity: plan.capacity ?? 0,\n noteInputs: plan.inputs.length,\n noteOutputs: plan.outputs.length,\n sourceTrees: operationSources(plan).length,\n creditInputs: credit?.inputs.length ?? 0,\n creditOutputs: credit?.outputs.length ?? 0,\n creditRemainders:\n credit?.draw?.remainderCommitments.filter((hash) => BigInt(hash) !== 0n).length ??\n 0,\n funding: plan.fundingMode,\n permit: (plan.funding.permit?.deadline ?? 0n) !== 0n,\n deliveryBytes: deliveries.reduce(\n (sum, d) => sum + (d.ciphertext.length - 2) / 2 + (d.clue.length - 2) / 2,\n 0\n ),\n },\n circuit: plan.statement\n ? {\n circuitName: plan.statement.circuitName,\n target: plan.statement.target,\n artifactSha256: plan.statement.artifactSha256,\n vkSha256: plan.statement.vkSha256,\n }\n : null,\n };\n const base = { source: \"benchmark\" as const, request };\n if (request.shape.target === \"noir-recursive\")\n return { ...base, available: false, reason: \"recursive-member-only\" };\n const candidates = (profiles ?? defaultProfiles).filter((p) =>\n sameDeployment(p.deployment, request.deployment)\n );\n if (!request.deployment.runtimeCodeHash || !candidates.length)\n return { ...base, available: false, reason: \"deployment-not-covered\" };\n const exact = candidates.flatMap((profile) =>\n profile.measurements\n .filter(\n (m) =>\n shapeKeys.every((key) => m.shape[key] === request.shape[key]) &&\n sameCircuit(m.circuit, request.circuit)\n )\n .map((measurement) => ({ profile, measurement }))\n );\n const mean = (measurement: GasBenchmarkProfile[\"measurements\"][number]) => {\n const count = BigInt(measurement.samples.length);\n return (\n (measurement.samples.reduce((sum, s) => sum + BigInt(s.gasUsed), 0n) + count - 1n) /\n count\n );\n };\n exact.sort((a, b) =>\n mean(a.measurement) > mean(b.measurement)\n ? -1\n : mean(a.measurement) < mean(b.measurement)\n ? 1\n : a.measurement.id.localeCompare(b.measurement.id)\n );\n if (exact.length) {\n const { profile, measurement } = exact[0]!;\n const gas = measurement.samples.map((sample) => BigInt(sample.gasUsed));\n const count = BigInt(gas.length);\n return {\n ...base,\n available: true,\n gasUnits: (gas.reduce((sum, value) => sum + value, 0n) + count - 1n) / count,\n range: {\n min: gas.reduce((a, b) => (a < b ? a : b)),\n max: gas.reduce((a, b) => (a > b ? a : b)),\n kind: \"observed\",\n },\n samples: gas.length,\n profileId: profile.id,\n measurementId: measurement.id,\n evidence: structuredClone(profile.source),\n };\n }\n return { ...base, available: false, reason: \"shape-not-covered\" };\n}\n\nexport function estimateGasReference(\n plan: OperationPlan,\n protocol: TokenProtocol,\n profiles?: readonly GasBenchmarkProfile[]\n): GasReference {\n const reference = estimateBenchmarkGas(plan, protocol, profiles);\n if (reference.available) return { gasUnits: reference.gasUnits };\n // Team records take priority only for their exact deployment and shape. The built-in\n // reference model is deployment-independent and covers the current SDK operation family.\n return estimateShapeGas(reference.request);\n}\n\nexport {\n BenchmarkGasEstimate,\n GasBenchmarkCircuit,\n GasBenchmarkDeployment,\n GasBenchmarkProfile,\n GasBenchmarkSample,\n GasBenchmarkShape,\n GasEstimateRequest,\n GasReference,\n} from \"./types\";\n\nexport { copyGasBenchmarks, defineGasBenchmarks } from \"./profiles\";\n\nexport { estimateShapeGas } from \"./shape\";\n","import { AddressRegistry as Registry, type RegistrationPreparation } from \"@invisi-labs/protocol\";\nimport type { Provider } from \"ethers\";\nimport { prepareWithErrors } from \"../errors\";\nimport { EthersChainReader } from \"../integrations/ethers\";\n\n/** Registry operations accept the application's existing ethers provider. */\nexport class AddressRegistry extends Registry {\n override prepareRegistration(\n options:\n | RegistrationPreparation\n | (Omit<RegistrationPreparation, \"reader\"> & { provider: Provider })\n ) {\n return prepareWithErrors(\"prepareRegistration\", async () => {\n if (\"provider\" in options) {\n const { provider, ...preparation } = options;\n return super.prepareRegistration({\n ...preparation,\n reader: new EthersChainReader(provider),\n });\n }\n return super.prepareRegistration(options);\n });\n }\n}\n","import type { PreparedOutput } from \"../transactions/operation-types\";\nimport { exportPaymentNote } from \"../payment-note/export\";\n\n/** Detached final output snapshot, including any generated change. Contains private Note data. */\nexport class TransactionOutput {\n readonly #output: PreparedOutput;\n constructor(output: PreparedOutput) {\n this.#output = structuredClone(output);\n Object.freeze(this);\n }\n get context() {\n return structuredClone(this.#output.context);\n }\n get recipient() {\n return structuredClone(this.#output.recipient);\n }\n get amount() {\n return this.#output.amount;\n }\n get commitment() {\n return this.#output.commitment;\n }\n get identity() {\n return this.#output.identity;\n }\n get nonce() {\n return this.#output.note?.nonce;\n }\n get change() {\n return this.#output.change;\n }\n exportPaymentNote(): string {\n return exportPaymentNote(this.#output);\n }\n}\n","import type { ProofBundle } from \"@invisi-labs/prover\";\n\n/** Whitelist the public proof fields; a custom local backend cannot accidentally export its witness. */\nexport function publicProof(bundle: ProofBundle): ProofBundle {\n return {\n formatVersion: bundle.formatVersion,\n circuitName: bundle.circuitName,\n target: bundle.target,\n bbVersion: bundle.bbVersion,\n artifactSha256: bundle.artifactSha256,\n vkSha256: bundle.vkSha256,\n proofHex: bundle.proofHex,\n proofSha256: bundle.proofSha256,\n publicInputs: [...bundle.publicInputs],\n };\n}\n","import type { ProofBundle, ProofStatement } from \"@invisi-labs/prover\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\nimport { getBytes } from \"ethers\";\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\nexport function sameStatement(proof: ProofBundle, expected: ProofStatement): void {\n check(\n proof.formatVersion === 1 &&\n proof.bbVersion === \"6.0.0\" &&\n proof.circuitName === expected.circuitName &&\n proof.target === expected.target &&\n proof.artifactSha256 === expected.artifactSha256 &&\n proof.vkSha256 === expected.vkSha256,\n \"proof release/target mismatch\"\n );\n check(\n proof.publicInputs.length === expected.expectedPublicInputs.length &&\n proof.publicInputs.every((word, i) => word === expected.expectedPublicInputs[i]),\n \"proof public statement mismatch\"\n );\n check(\n /^0x(?:[a-fA-F0-9]{2})+$/.test(proof.proofHex) &&\n bytesToHex(sha256(getBytes(proof.proofHex))) === proof.proofSha256,\n \"proof integrity mismatch\"\n );\n}\n","import {\n buildCancelCreditCalldata,\n buildCreateCreditCalldata,\n buildCreditDrawCalldata,\n buildShieldCalldata,\n buildTopUpCreditCalldata,\n buildTransactCalldata,\n type TransactionCall,\n} from \"@invisi-labs/protocol\";\nimport type { Hex } from \"@invisi-labs/protocol/contracts\";\nimport type { SavedOperation } from \"../operation-types\";\n\nexport async function encodeOperation(saved: SavedOperation): Promise<TransactionCall> {\n const plan = saved.plan;\n const credit = plan.credit;\n const caller = plan.fundingMode === \"caller\" ? plan.funding.payer : undefined;\n const common = { context: plan.context, proof: saved.proof?.proofHex ?? (\"0x\" as Hex) };\n const funded = { ...common, funding: plan.funding, ...(caller ? { caller } : {}) };\n\n let encoded: { data: Hex };\n if (credit?.topUp) {\n encoded = buildTopUpCreditCalldata({\n ...funded,\n params: credit.topUp,\n deliveries: credit.deliveries,\n });\n } else if (credit?.creation) {\n encoded = buildCreateCreditCalldata({\n ...funded,\n params: credit.creation,\n deliveries: credit.deliveries,\n });\n } else if (credit?.draw) {\n encoded = buildCreditDrawCalldata({\n ...common,\n params: credit.draw,\n deliveries: credit.deliveries,\n });\n } else if (credit?.cancel) {\n encoded = buildCancelCreditCalldata({ ...common, params: credit.cancel });\n } else if (plan.kind === \"shield\") {\n encoded = await buildShieldCalldata({\n ...funded,\n params: plan.shieldParams!,\n outputs: plan.shieldOutputs!,\n deliveries: plan.outputs.map((output) => output.delivery),\n });\n } else {\n encoded = buildTransactCalldata({\n ...funded,\n params: plan.params!,\n deliveries: plan.outputs.map((output) => output.delivery),\n });\n }\n\n return { to: plan.context.protocolAddress, data: encoded.data, value: 0n };\n}\n","import { type AuthorizedStatement } from \"@invisi-labs/core\";\nimport { WitnessBuilder, type TokenProtocol } from \"@invisi-labs/protocol\";\nimport type { ProvingRequest } from \"@invisi-labs/prover\";\nimport type { OperationPlan } from \"../operation-types\";\n\nexport async function witnessFor(\n protocol: TokenProtocol,\n plan: OperationPlan,\n authorization?: AuthorizedStatement\n): Promise<ProvingRequest> {\n const builder = new WitnessBuilder(protocol);\n const credit = plan.credit;\n\n if (credit) {\n if (!authorization) throw new Error(\"private Credit wallet authorization required\");\n\n if (credit.topUp) {\n return builder.topUpCredit({\n params: credit.topUp,\n deliveries: credit.deliveries,\n funding: plan.funding,\n inputs: plan.inputs,\n state: credit.outputs[0]!.state,\n ...(plan.outputs[0] ? { change: plan.outputs[0].note } : {}),\n previous: credit.inputs[0]!,\n authorization,\n });\n }\n if (credit.creation) {\n return builder.createCredit({\n params: credit.creation,\n deliveries: credit.deliveries,\n funding: plan.funding,\n inputs: plan.inputs,\n state: credit.outputs[0]!.state,\n ...(plan.outputs[0] ? { change: plan.outputs[0].note } : {}),\n authorization,\n });\n }\n if (credit.draw) {\n return builder.drawCredit({\n timestamp: plan.preparedAt.timestamp,\n params: credit.draw,\n deliveries: credit.deliveries,\n inputs: credit.inputs,\n amounts: credit.amounts!,\n authorization,\n });\n }\n if (credit.cancel) {\n return builder.cancelCredit({\n params: credit.cancel,\n input: credit.inputs[0]!,\n authorization,\n });\n }\n throw new Error(\"unsupported Credit operation\");\n }\n\n return builder.transact({\n params: plan.params!,\n deliveries: plan.outputs.map((output) => output.delivery),\n funding: plan.funding,\n inputs: plan.inputs,\n outputs: plan.outputs.map((output) => ({\n identity: output.identity,\n amount: output.amount,\n ...(output.note ? { note: output.note } : {}),\n })),\n ...(authorization ? { authorization } : {}),\n target: plan.statement!.target,\n });\n}\n","import {\n encodeAggregateFundingTypedData,\n encodeCreateCreditFundingTypedData,\n encodeShieldFundingTypedData,\n encodeTopUpCreditFundingTypedData,\n encodeTransactFundingTypedData,\n} from \"@invisi-labs/protocol\";\nimport type { SavedOperation } from \"../operation-types\";\n\nexport async function fundingTypedData(saved: SavedOperation) {\n const plan = saved.plan;\n const credit = plan.credit;\n\n if (credit?.topUp) {\n return encodeTopUpCreditFundingTypedData(\n plan.context,\n credit.topUp,\n credit.deliveries,\n plan.funding\n );\n }\n if (credit?.creation) {\n return encodeCreateCreditFundingTypedData(\n plan.context,\n credit.creation,\n credit.deliveries,\n plan.funding\n );\n }\n if (plan.kind === \"shield\") {\n return encodeShieldFundingTypedData({\n context: plan.context,\n params: plan.shieldParams!,\n outputs: plan.shieldOutputs!,\n deliveries: plan.outputs.map((output) => output.delivery),\n funding: plan.funding,\n });\n }\n if (plan.statement?.target === \"noir-recursive\") {\n return encodeAggregateFundingTypedData(plan.context, {\n params: plan.params!,\n deliveries: plan.outputs.map((output) => output.delivery),\n funding: plan.funding,\n });\n }\n return encodeTransactFundingTypedData(\n plan.context,\n saved.proof!.proofHex,\n plan.params!,\n plan.outputs.map((output) => output.delivery),\n plan.funding\n );\n}\n","import {\n AuthorizedStatement,\n computeOwnerAddress,\n computeWalletAuthorizationDigest,\n createSigningRequest,\n walletAuthorizationTypedData,\n type WalletAuthorizationProvider,\n} from \"@invisi-labs/core\";\nimport { WitnessBuilder, type TokenProtocol } from \"@invisi-labs/protocol\";\nimport type { Prover } from \"@invisi-labs/prover\";\nimport { Signature, SigningKey, concat, getBytes, verifyTypedData } from \"ethers\";\nimport type {\n FundingAuthorizationVerifier,\n FundingSigner,\n FundingTypedData,\n OperationPlan,\n SavedOperation,\n TransactionProveOptions,\n TransactionRuntime,\n} from \"../operation-types\";\nimport { publicProof } from \"../proving/proof\";\nimport { sameStatement } from \"../proving/proof-integrity\";\nimport { witnessFor } from \"../proving/witness\";\nimport { fundingTypedData } from \"../signing/funding\";\nimport { authorizationRequest, statement } from \"../signing/statement\";\n\n/** Both managed and detached handles authorize the same frozen statement. */\nexport async function authorizeOperation(\n plan: OperationPlan,\n provider: WalletAuthorizationProvider\n) {\n if (provider.ownerAddress !== plan.scope.ownerAddress)\n throw new Error(\"wallet authorization capability mismatch\");\n const request = authorizationRequest(plan);\n const digest = computeWalletAuthorizationDigest(request);\n const signed = await provider.authorize(structuredClone(request));\n if (signed.ownerAddress !== plan.scope.ownerAddress || signed.digest !== digest)\n throw new Error(\"wallet authorization statement mismatch\");\n return signed;\n}\n\nexport async function proveOperation(\n protocol: TokenProtocol,\n plan: OperationPlan,\n authorization: AuthorizedStatement | undefined,\n prover: Prover,\n options: TransactionProveOptions\n) {\n if (Object.hasOwn(options, \"target\")) {\n throw new Error(\"prove accepts execution, not a backend target\");\n }\n const { execution = \"single\", ...proverOptions } = options;\n if (execution !== \"single\" && execution !== \"aggregate\") {\n throw new Error(\"execution must be single or aggregate\");\n }\n const frozen = statement(plan);\n if (execution === \"aggregate\" && (plan.kind !== \"transfer\" || plan.capacity !== 14)) {\n throw new Error(\"aggregate execution requires a 14-slot transfer\");\n }\n if (plan.kind === \"transfer\") {\n // Only the proof backend/key changes; public words and wallet authorization stay fixed.\n plan.statement = WitnessBuilder.statement(\n frozen.circuitName,\n frozen.expectedPublicInputs,\n execution === \"aggregate\" ? \"noir-recursive\" : \"evm\"\n );\n }\n const request = await witnessFor(protocol, plan, authorization);\n if (JSON.stringify({ ...request, witness: undefined }) !== JSON.stringify(plan.statement))\n throw new Error(\"prepared proof statement changed\");\n try {\n const proof = publicProof(await prover.prove(request, proverOptions));\n sameStatement(proof, plan.statement!);\n if (\n (await prover.verify(\n structuredClone(proof),\n structuredClone(plan.statement!),\n proverOptions\n )) !== true\n )\n throw new Error(\"proof verification failed\");\n return proof;\n } catch {\n options.signal?.throwIfAborted();\n throw new Error(\"operation proof generation or verification failed\");\n }\n}\n\nexport async function signOperationFunding(\n saved: SavedOperation,\n signer: FundingSigner,\n verifier?: FundingAuthorizationVerifier\n) {\n const payer = saved.plan.funding.payer!;\n if (signer.address.toLowerCase() !== payer.toLowerCase())\n throw new Error(\"funding signer is not the payer\");\n const typed = await fundingTypedData(saved);\n const signature = await signer.signTypedData(structuredClone(typed));\n return verifyFundingSignature(typed, payer, signature, verifier);\n}\n\n/** Export only typed commitments, never private note openings or authorization witnesses. */\nexport function walletSigningRequest(plan: OperationPlan) {\n return createSigningRequest(walletAuthorizationTypedData(authorizationRequest(plan)));\n}\n\n/** Recover the EOA key and build the existing private witness without receiving a private key. */\nexport async function acceptWalletSignature(plan: OperationPlan, signature: string) {\n const request = authorizationRequest(plan);\n const digest = computeWalletAuthorizationDigest(request);\n try {\n const signed = Signature.from(signature);\n const publicKey = getBytes(SigningKey.recoverPublicKey(digest, signed));\n const owner = await computeOwnerAddress(publicKey);\n if (owner.toLowerCase() !== plan.scope.ownerAddress.toLowerCase()) {\n throw new Error(\"wallet signature identity mismatch\");\n }\n return new AuthorizedStatement(plan.scope.ownerAddress, digest, {\n public_key_x: Array.from(publicKey.slice(1, 33)),\n public_key_y: Array.from(publicKey.slice(33)),\n signature: Array.from(getBytes(concat([signed.r, signed.s]))),\n });\n } catch {\n throw new Error(\"invalid wallet authorization signature\");\n }\n}\n\n/** The remote round trip may outlive the nonce or deadline selected during preparation. */\nexport async function fundingSigningRequest(\n saved: SavedOperation,\n runtime: Pick<TransactionRuntime, \"reader\" | \"options\">\n) {\n const plan = saved.plan;\n if (plan.fundingMode !== \"signature\") {\n throw new Error(\"operation does not require a funding signature\");\n }\n if (plan.kind !== \"shield\" && !saved.proof) {\n throw new Error(\"proof must precede funding authorization\");\n }\n await runtime.options.protocol.validateDeployment(runtime.reader);\n const block = await runtime.reader.getBlock(await runtime.reader.getLatestBlockNumber());\n if (block.timestamp > plan.deadline || block.timestamp > (plan.funding.deadline ?? 0n)) {\n throw new Error(\"funding authorization expired\");\n }\n if (\n (await runtime.reader.getFundingNonce(plan.context, plan.funding.payer!, block)) !==\n plan.funding.sigNonce\n ) {\n throw new Error(\"funding nonce changed; prepare again\");\n }\n const request = createSigningRequest(await fundingTypedData(saved));\n if ((await runtime.reader.getBlock(block.number)).hash !== block.hash) {\n throw new Error(\"canonical funding block changed\");\n }\n return request;\n}\n\n/** Verify against reconstructed operation data, never caller-supplied typed data. */\nexport async function acceptFundingSignature(\n saved: SavedOperation,\n signature: string,\n runtime: Pick<TransactionRuntime, \"reader\" | \"options\">\n) {\n if (!/^0x(?:[a-fA-F0-9]{2})+$/.test(signature)) {\n throw new Error(\"invalid EVM funding signature\");\n }\n const request = await fundingSigningRequest(saved, runtime);\n return verifyFundingSignature(\n request,\n saved.plan.funding.payer!,\n signature,\n runtime.options.fundingVerifier\n );\n}\n\nasync function verifyFundingSignature(\n request: FundingTypedData,\n payer: `0x${string}`,\n signature: string,\n verifier?: FundingAuthorizationVerifier\n) {\n if (!/^0x(?:[a-fA-F0-9]{2})+$/.test(signature)) {\n throw new Error(\"invalid EVM funding signature\");\n }\n const types = Object.fromEntries(\n Object.entries(request.types).map(([name, fields]) => [name, [...fields]])\n );\n let validEOA = false;\n try {\n validEOA =\n verifyTypedData(request.domain, types, request.message, signature).toLowerCase() ===\n payer.toLowerCase();\n if (validEOA) {\n // Normalize EIP-2098 and parity-style EOA signatures for Solidity SignatureChecker.\n signature = Signature.from(signature).serialized;\n }\n } catch {\n validEOA = false;\n }\n const valid = verifier\n ? await verifier.verifyTypedData({\n ...structuredClone(request),\n address: payer,\n signature: signature as `0x${string}`,\n })\n : validEOA;\n if (valid !== true) {\n throw new Error(\"invalid EVM funding signature\");\n }\n return signature as `0x${string}`;\n}\n","import { normalizeFunding } from \"@invisi-labs/protocol\";\nimport type { OperationPlan } from \"../operation-types\";\nimport { inputFacts } from \"../preparation/inputs\";\nimport type { OperationStatus } from \"../records\";\nimport { requiresAuthorization } from \"../signing/statement\";\nexport function operationPreview(plan: OperationPlan, status: OperationStatus) {\n const p = plan;\n const fee = p.params ?? p.shieldParams ?? p.credit?.creation ?? p.credit?.cancel;\n const funding = normalizeFunding(p.funding);\n return {\n id: p.id,\n kind: p.kind,\n status,\n context: { ...p.context },\n inputs: inputFacts(p).length,\n inputDetails: [\n ...p.inputs.map((input) => ({\n kind: \"notes\" as const,\n commitment: input.commitment,\n amount: input.note.amount,\n owner: input.note.ownerAddress,\n treeId: input.treeId,\n leafIndex: input.leafIndex,\n })),\n ...(p.credit?.inputs ?? []).map((input) => ({\n kind: \"credits\" as const,\n commitment: input.commitment,\n amount: input.state.note.amount,\n owner: input.state.note.ownerWalletIdentity,\n spender: input.state.note.spenderWalletIdentity,\n expiry: input.state.note.expiry,\n role: input.role,\n treeId: input.treeId,\n leafIndex: input.leafIndex,\n })),\n ],\n funding: {\n payer: funding.payer,\n amount: funding.amount,\n authorization: p.fundingMode,\n sigNonce: funding.sigNonce,\n deadline: funding.deadline,\n permit: { deadline: funding.permit.deadline },\n },\n creditOutputs: p.credit?.outputs.map((output) => ({\n commitment: output.commitment,\n amount: output.state.note.amount,\n expiry: output.state.note.expiry,\n owner: output.state.note.ownerWalletIdentity,\n spender: output.state.note.spenderWalletIdentity,\n ownerPayout: output.state.note.ownerPayout,\n spenderPayout: output.state.note.spenderPayout,\n })),\n outputs: p.outputs.map((output) => ({\n commitment: output.commitment,\n to: output.address,\n amount: output.amount,\n change: output.change,\n })),\n capacity: p.capacity,\n deadline: p.deadline,\n feeRecipient: fee?.feeRecipient,\n feeAmount: fee?.feeAmount ?? 0n,\n fundingAmount: p.funding.amount ?? 0n,\n fundingPayer: p.funding.payer,\n withdrawalAmount:\n p.params?.withdrawalAmount ??\n p.credit?.draw?.totalAmount ??\n (p.credit?.cancel\n ? p.credit.cancel.amount - (p.credit.cancel.feeAmount ?? 0n)\n : undefined) ??\n 0n,\n withdrawalAddress:\n p.params?.withdrawalAddress ?? p.credit?.draw?.spender ?? p.credit?.cancel?.owner,\n permissions: {\n walletAuthorization: requiresAuthorization(p),\n proof: p.kind !== \"shield\",\n fundingAuthorization: p.fundingMode === \"signature\",\n },\n };\n}\n","import { TransactionOutput } from \"../../notes/TransactionOutput\";\nimport { MissingCapabilityError, type AuthorizedStatement } from \"@invisi-labs/core\";\nimport { normalizeFunding, type TransactionCall } from \"@invisi-labs/protocol\";\nimport type { ProofBundle, Prover } from \"@invisi-labs/prover\";\nimport { exportBroadcasterIntent } from \"../../broadcaster/intent\";\nimport { estimateGasReference } from \"../../gas/gas-estimation\";\nimport type {\n OperationAggregateMember,\n OperationPlan,\n SavedOperation,\n TransactionProveOptions,\n TransactionRuntime,\n} from \"../operation-types\";\nimport { publicProof } from \"../proving/proof\";\nimport { sameStatement } from \"../proving/proof-integrity\";\nimport type { OperationStatus } from \"../records\";\nimport { requiresAuthorization, statement } from \"../signing/statement\";\nimport { encodeOperation } from \"./calldata\";\nimport {\n acceptFundingSignature,\n acceptWalletSignature,\n fundingSigningRequest,\n proveOperation,\n walletSigningRequest,\n} from \"./operation-execution\";\nimport { operationPreview } from \"./operation-preview\";\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\n\ntype Runtime = TransactionRuntime & {\n reprepare?: (\n intent: import(\"../../broadcaster/broadcaster-preparation\").PreparationIntent\n ) => Promise<OperationPlan>;\n};\ntype Lifecycle = { generation: number; busy: boolean };\n/** An immutable, local transaction handle. No wallet inventory, reservations or persistence. */\nexport class PreparedTransaction {\n readonly #runtime: Runtime;\n readonly #saved: SavedOperation;\n readonly #authorization: AuthorizedStatement | undefined;\n readonly #lifecycle: Lifecycle;\n readonly status: OperationStatus;\n private constructor(\n runtime: Runtime,\n saved: SavedOperation,\n status: OperationStatus,\n lifecycle: Lifecycle,\n authorization?: AuthorizedStatement\n ) {\n this.#runtime = runtime;\n this.#saved = structuredClone(saved);\n this.#lifecycle = lifecycle;\n this.#authorization = authorization;\n this.status = status;\n Object.freeze(this);\n }\n static prepare(runtime: Runtime, plan: OperationPlan): PreparedTransaction {\n return new PreparedTransaction(\n runtime,\n { plan: structuredClone(plan), generation: 0 },\n \"prepared\",\n { generation: 0, busy: false }\n );\n }\n broadcasterQuote() {\n return this.#saved.broadcasterQuote\n ? structuredClone(this.#saved.broadcasterQuote)\n : undefined;\n }\n async withBroadcaster(\n client: import(\"../../broadcaster/index\").BroadcasterClient,\n options: import(\"../../broadcaster/broadcaster-preparation\").WithBroadcasterOptions\n ): Promise<PreparedTransaction> {\n this.current();\n check(\n this.status === \"prepared\" && this.#runtime.reprepare,\n \"broadcaster must attach to an unsigned prepared transaction\"\n );\n const { prepareBroadcasterPlan } =\n await import(\"../../broadcaster/broadcaster-preparation\");\n const selected = await prepareBroadcasterPlan(\n this.#saved.plan,\n this.#runtime.reprepare,\n client,\n options\n );\n return new PreparedTransaction(\n this.#runtime,\n { plan: selected.plan, broadcasterQuote: selected.quote, generation: 0 },\n \"prepared\",\n { generation: 0, busy: false }\n );\n }\n get id() {\n return this.#saved.plan.id;\n }\n get kind() {\n return this.#saved.plan.kind;\n }\n estimateGas() {\n return estimateGasReference(\n this.#saved.plan,\n this.#runtime.options.protocol,\n this.#runtime.options.gasBenchmarks\n );\n }\n /** Final Note outputs, including change; Credit outputs are not exported as IPN. */\n getOutputs(): readonly TransactionOutput[] {\n return Object.freeze(\n this.#saved.plan.outputs.map((output) => new TransactionOutput(output))\n );\n }\n preview() {\n return operationPreview(this.#saved.plan, this.status);\n }\n /** Obtain a firm quote before signing. This intent contains no private inputs or witness. */\n async exportBroadcasterIntent() {\n this.current();\n check(\n [\"prepared\", \"authorized\"].includes(this.status),\n \"quote intent requires a prepared transaction\"\n );\n return exportBroadcasterIntent(this.#saved.plan);\n }\n private current() {\n check(\n !this.#lifecycle.busy && this.#lifecycle.generation === this.#saved.generation,\n \"stale transaction handle or active worker\"\n );\n }\n private async stage(\n stage: string,\n allowed: OperationStatus[],\n work: (\n saved: SavedOperation\n ) => Promise<{ status: OperationStatus; authorization?: AuthorizedStatement }>,\n signal?: AbortSignal\n ): Promise<PreparedTransaction> {\n signal?.throwIfAborted();\n this.current();\n check(allowed.includes(this.status), `invalid transaction stage for ${stage}`);\n this.#lifecycle.busy = true;\n const saved = structuredClone(this.#saved);\n try {\n const next = await work(saved);\n signal?.throwIfAborted();\n saved.generation++;\n this.#lifecycle.generation = saved.generation;\n return new PreparedTransaction(\n this.#runtime,\n saved,\n next.status,\n this.#lifecycle,\n next.authorization ?? this.#authorization\n );\n } finally {\n this.#lifecycle.busy = false;\n }\n }\n /** Public EIP-712 request; signing transport and key custody belong to the caller. */\n async exportWalletAuthorization(options: { signal?: AbortSignal } = {}) {\n options.signal?.throwIfAborted();\n this.current();\n check(\n requiresAuthorization(this.#saved.plan),\n \"operation does not require wallet authorization\"\n );\n check(\n [\"prepared\", \"authorized\"].includes(this.status),\n \"operation is not awaiting wallet authorization\"\n );\n return walletSigningRequest(this.#saved.plan);\n }\n\n /** Attach an external EOA signature, retaining its witness only at the private proving boundary. */\n async withWalletSignature(\n signature: string,\n options: { signal?: AbortSignal } = {}\n ): Promise<PreparedTransaction> {\n options.signal?.throwIfAborted();\n this.current();\n check(\n requiresAuthorization(this.#saved.plan),\n \"operation does not require wallet authorization\"\n );\n check(\n [\"prepared\", \"authorized\"].includes(this.status),\n \"operation is not awaiting wallet authorization\"\n );\n const authorization = await acceptWalletSignature(this.#saved.plan, signature);\n return this.stage(\n \"wallet authorization\",\n [\"prepared\", \"authorized\"],\n async () => ({ status: \"authorized\", authorization }),\n options.signal\n );\n }\n\n /** Export only after proving when the funding authorization binds an actual proof hash. */\n async exportFundingAuthorization(options: { signal?: AbortSignal } = {}) {\n options.signal?.throwIfAborted();\n this.current();\n check(\n this.status === (this.kind === \"shield\" ? \"prepared\" : \"proved\"),\n \"operation is not awaiting funding authorization or proof\"\n );\n const request = await fundingSigningRequest(this.#saved, this.#runtime);\n options.signal?.throwIfAborted();\n this.current();\n return request;\n }\n\n /** Verify an external signature against this handle's own frozen operation. */\n async withFundingSignature(\n signature: string,\n options: { signal?: AbortSignal } = {}\n ): Promise<PreparedTransaction> {\n options.signal?.throwIfAborted();\n this.current();\n check(\n this.status === (this.kind === \"shield\" ? \"prepared\" : \"proved\"),\n \"operation is not awaiting funding authorization or proof\"\n );\n const verified = await acceptFundingSignature(this.#saved, signature, this.#runtime);\n return this.stage(\n \"funding authorization\",\n this.kind === \"shield\" ? [\"prepared\"] : [\"proved\"],\n async (saved) => {\n saved.plan.funding.signature = verified;\n if (saved.plan.statement?.target !== \"noir-recursive\") {\n saved.call = await this.encode(saved);\n }\n return { status: \"ready\" };\n },\n options.signal\n );\n }\n\n async prove(options?: TransactionProveOptions): Promise<PreparedTransaction>;\n async prove(backend: Prover, options?: TransactionProveOptions): Promise<PreparedTransaction>;\n async prove(\n backendOrOptions: Prover | TransactionProveOptions = {},\n suppliedOptions: TransactionProveOptions = {}\n ): Promise<PreparedTransaction> {\n const options = { ...(\"prove\" in backendOrOptions ? suppliedOptions : backendOrOptions) };\n check(\n !this.#saved.broadcasterQuote || options.execution !== \"aggregate\",\n \"a broadcaster quote requires direct execution\"\n );\n const plan = this.#saved.plan;\n check(plan.kind !== \"shield\", \"shield requires no proof\");\n if (requiresAuthorization(plan)) {\n check(\n this.#authorization,\n \"local wallet authorization required; authorize again after recovery\"\n );\n }\n const prover =\n \"prove\" in backendOrOptions ? backendOrOptions : this.#runtime.options.prover;\n if (!prover) {\n throw new MissingCapabilityError(\"prover\");\n }\n return this.stage(\n \"proof\",\n requiresAuthorization(plan) ? [\"authorized\"] : [\"prepared\"],\n async (saved) => {\n const p = saved.plan;\n saved.proof = await proveOperation(\n this.#runtime.options.protocol,\n p,\n this.#authorization,\n prover,\n options\n );\n if (p.fundingMode === \"signature\") {\n return { status: \"proved\" };\n }\n if (p.statement?.target !== \"noir-recursive\") {\n saved.call = await this.encode(saved);\n }\n return { status: \"ready\" };\n },\n options.signal\n );\n }\n\n private encode(saved: SavedOperation): Promise<TransactionCall> {\n return encodeOperation(saved);\n }\n\n /** Shield caller funding needs no wallet signing or proof; this step only encodes its frozen request. */\n async ready(): Promise<PreparedTransaction> {\n check(\n this.kind === \"shield\" && this.#saved.plan.fundingMode === \"caller\",\n \"operation needs authorization or proof first\"\n );\n return this.stage(\"encoding\", [\"prepared\"], async (saved) => {\n saved.call = await this.encode(saved);\n return { status: \"ready\" };\n });\n }\n\n async exportTransaction(): Promise<TransactionCall> {\n this.current();\n check(\n this.#saved.plan.statement?.target !== \"noir-recursive\",\n \"recursive operations must be exported as aggregate members\"\n );\n check(this.status === \"ready\" && this.#saved.call, \"transaction is not ready\");\n return structuredClone(this.#saved.call);\n }\n exportProof(): ProofBundle {\n this.current();\n check(this.#saved.proof, \"transaction has no proof\");\n return publicProof(this.#saved.proof);\n }\n exportAggregateMember(): OperationAggregateMember {\n this.current();\n const saved = this.#saved,\n plan = saved.plan;\n check(\n this.status === \"ready\" &&\n plan.params &&\n saved.proof &&\n plan.statement?.target === \"noir-recursive\" &&\n plan.statement.circuitName === \"transact_user_slots14\",\n \"ready recursive slots14 transaction required\"\n );\n sameStatement(saved.proof, statement(plan));\n check(\n saved.proof.proofHex.length === 2 + 458 * 64,\n \"recursive member proof must have 458 fields\"\n );\n return {\n bundle: publicProof(saved.proof),\n statement: structuredClone(plan.statement),\n context: { ...plan.context },\n request: {\n params: structuredClone(plan.params),\n deliveries: plan.outputs.map((output) => structuredClone(output.delivery)),\n funding: normalizeFunding(plan.funding),\n },\n };\n }\n toJSON() {\n return { transaction: true, id: this.id, kind: this.kind, status: this.status };\n }\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","import { MissingCapabilityError } from \"@invisi-labs/core\";\nimport { ProtocolRpcClient } from \"@invisi-labs/rpc\";\nimport { EthersChainReader, EthersFundingVerifier } from \"../integrations/ethers\";\nimport { configureRecipientInfrastructure } from \"../notes/recipient-infrastructure\";\nimport type { TransactionInfrastructure } from \"../transactions/operation-types\";\n\n/** Resolve adapters without starting synchronization or accessing wallet state. */\nexport function configureTransactionInfrastructure<T extends TransactionInfrastructure>(\n options: T\n): T {\n const { provider } = options;\n const reader = options.chainReader ?? (provider ? new EthersChainReader(provider) : undefined);\n const protocolRpc =\n options.protocolRpc instanceof ProtocolRpcClient && reader\n ? options.protocolRpc.withReader(reader)\n : options.protocolRpc;\n const fundingVerifier =\n options.fundingVerifier ??\n (provider\n ? new EthersFundingVerifier(provider, options.protocol.context.chainId)\n : undefined);\n return configureRecipientInfrastructure({\n ...options,\n ...(reader ? { chainReader: reader } : {}),\n ...(protocolRpc ? { protocolRpc } : {}),\n ...(fundingVerifier ? { fundingVerifier } : {}),\n });\n}\n\n/** Validate the selected chain and pinned deployment before any managed state access. */\nexport async function validateTransactionInfrastructure(\n options: TransactionInfrastructure\n): Promise<void> {\n if (!options.chainReader) throw new MissingCapabilityError(\"chain reader\");\n if (\n options.provider &&\n (await options.provider.getNetwork()).chainId !== options.protocol.context.chainId\n )\n throw new Error(\"provider deployment chain mismatch\");\n await options.protocol.validateDeployment(options.chainReader);\n}\n","import { MissingCapabilityError, PublicWallet } from \"@invisi-labs/core\";\nimport type { RegistrationOperation, RegistrationPreparation } from \"@invisi-labs/protocol\";\nimport { ProtocolRpcClient } from \"@invisi-labs/rpc\";\nimport { prepareWithErrors } from \"../errors\";\nimport { copyGasBenchmarks } from \"../gas/gas-estimation\";\nimport { AddressRegistry } from \"../protocol/AddressRegistry\";\nimport type { PreparedTransaction } from \"../transactions/execution/PreparedTransaction\";\nimport type {\n ExplicitCancelCreditPreparation,\n ExplicitCreateCreditPreparation,\n ExplicitDrawCreditPreparation,\n ExplicitShieldPreparation,\n ExplicitTopUpCreditPreparation,\n ExplicitTransferPreparation,\n TransactionIdentity,\n} from \"../transactions/explicit-types\";\nimport type { TransactionInfrastructure } from \"../transactions/operation-types\";\nimport { explicitPreparation } from \"../transactions/preparation/explicit-preparation\";\nimport {\n configureTransactionInfrastructure,\n validateTransactionInfrastructure,\n} from \"./infrastructure\";\n\n/** Compose independent Chain RPC and indexed Protocol RPC with local wallet capabilities. */\nexport type InvisiOptions = Omit<TransactionInfrastructure, \"wallet\" | \"protocol\" | \"coinSelector\">;\ntype InvisiInfrastructure = InvisiOptions;\n\n/** Public wallet and registry-specific inputs; signing remains external. */\nexport type RegistrationPreparationOptions = Pick<RegistrationPreparation, \"update\" | \"deadline\"> &\n Pick<TransactionIdentity, \"wallet\">;\n\n/** Stateless transaction preparation and independent infrastructure composition. */\nexport class Invisi {\n readonly #options: InvisiInfrastructure;\n\n constructor(options: InvisiOptions = {}) {\n if (\"addressLookup\" in options || \"addressResolver\" in options)\n throw new TypeError(\n \"Recipient lookup belongs to each EVM output; caller resolver injection is not supported\"\n );\n if (\"ciphertextCodecs\" in options || \"envelopeVersion\" in options) {\n throw new Error(\n \"SDK envelope versions are fixed; encode application payload bytes externally\"\n );\n }\n if (\"signer\" in options || \"fundingSigner\" in options) {\n throw new Error(\n \"Invisi does not accept signer defaults; export a signing request and attach the external signature\"\n );\n }\n for (const key of [\n \"store\",\n \"viewing\",\n \"authorization\",\n \"namespace\",\n \"coinSelector\",\n \"wallet\",\n \"protocol\",\n ]) {\n if (key in options)\n throw new TypeError(`Wallet state and permissions belong to WalletSession: ${key}`);\n }\n this.#options = {\n ...options,\n ...(options.gasBenchmarks\n ? { gasBenchmarks: copyGasBenchmarks(options.gasBenchmarks) }\n : {}),\n };\n Object.freeze(this);\n }\n\n /** A detached snapshot of shared infrastructure; wallet permissions and persistence stay external. */\n getInfrastructure(): Readonly<InvisiOptions> {\n return Object.freeze({\n ...this.#options,\n ...(this.#options.gasBenchmarks\n ? { gasBenchmarks: copyGasBenchmarks(this.#options.gasBenchmarks) }\n : {}),\n });\n }\n\n private async resolve(options: TransactionIdentity): Promise<TransactionInfrastructure> {\n const runtime = configureTransactionInfrastructure({\n ...this.getInfrastructure(),\n ...options,\n });\n await validateTransactionInfrastructure(runtime);\n return runtime;\n }\n\n /** Discover the selected chain's registry and prepare an independent signing request. */\n async prepareRegistration(\n options: RegistrationPreparationOptions\n ): Promise<RegistrationOperation> {\n return prepareWithErrors(\"prepareRegistration\", async () => {\n for (const key of Object.keys(options)) {\n if (![\"wallet\", \"update\", \"deadline\"].includes(key)) {\n throw new Error(`Unknown registration option: ${key}`);\n }\n }\n this.assertPublicIdentity(options);\n const selected = { ...options };\n const { provider, protocolRpc } = this.#options;\n if (!provider) throw new MissingCapabilityError(\"ethers provider\");\n if (!(protocolRpc instanceof ProtocolRpcClient)) {\n throw new MissingCapabilityError(\"Protocol RPC deployment discovery\");\n }\n const chainId = (await provider.getNetwork()).chainId;\n const deployment = await protocolRpc.getDeployment(chainId);\n if (!deployment.registry) {\n throw new MissingCapabilityError(\"receiving-key registry deployment\");\n }\n const registry = new AddressRegistry(\n { chainId, registryAddress: deployment.registry.address },\n { expectedRuntimeCodeHash: deployment.registry.runtimeCodeHash }\n );\n return registry.prepareRegistration({ ...selected, provider });\n });\n }\n\n private assertPublicIdentity(options: Pick<TransactionIdentity, \"wallet\">): void {\n const { wallet } = options;\n if (\n !(wallet instanceof PublicWallet) ||\n [\"getViewer\", \"getDetector\", \"exportAuthorization\"].some((key) => key in wallet)\n ) {\n throw new Error(\n \"Independent preparation requires a PublicWallet without private capabilities\"\n );\n }\n for (const key of [\"authorization\", \"signer\", \"fundingSigner\", \"viewing\"]) {\n if (key in options)\n throw new Error(`Independent preparation does not accept capability: ${key}`);\n }\n }\n\n private resolveExplicit(options: TransactionIdentity): Promise<TransactionInfrastructure> {\n this.assertPublicIdentity(options);\n return this.resolve({ wallet: options.wallet, protocol: options.protocol });\n }\n\n async prepareTransfer(options: ExplicitTransferPreparation): Promise<PreparedTransaction> {\n return prepareWithErrors(\"prepareTransfer\", async () => {\n const { wallet, protocol, ...input } = options;\n const request = structuredClone(input);\n const runtime = await this.resolveExplicit(options);\n const preparation = explicitPreparation(runtime, request, request.tokenAddress);\n return preparation.prepareTransfer(request);\n });\n }\n async prepareShield(options: ExplicitShieldPreparation): Promise<PreparedTransaction> {\n return prepareWithErrors(\"prepareShield\", async () => {\n const { wallet, protocol, ...input } = options;\n const request = structuredClone(input);\n const runtime = await this.resolveExplicit(options);\n const preparation = explicitPreparation(runtime, {}, request.tokenAddress);\n return preparation.prepareShield(request);\n });\n }\n async prepareCreateCredit(\n options: ExplicitCreateCreditPreparation\n ): Promise<PreparedTransaction> {\n return prepareWithErrors(\"prepareCreateCredit\", async () => {\n const { wallet, protocol, ...input } = options;\n const request = structuredClone(input);\n const runtime = await this.resolveExplicit(options);\n const preparation = explicitPreparation(runtime, request, request.tokenAddress);\n return preparation.prepareCreateCredit(request);\n });\n }\n async prepareDrawCredit(options: ExplicitDrawCreditPreparation): Promise<PreparedTransaction> {\n return prepareWithErrors(\"prepareDrawCredit\", async () => {\n const { wallet, protocol, ...input } = options;\n const request = structuredClone(input);\n const runtime = await this.resolveExplicit(options);\n const preparation = explicitPreparation(runtime, request, request.tokenAddress);\n return preparation.prepareDrawCredit(request);\n });\n }\n async prepareTopUpCredit(\n options: ExplicitTopUpCreditPreparation\n ): Promise<PreparedTransaction> {\n return prepareWithErrors(\"prepareTopUpCredit\", async () => {\n const { wallet, protocol, ...input } = options;\n const request = structuredClone(input);\n const runtime = await this.resolveExplicit(options);\n const preparation = explicitPreparation(runtime, request, request.tokenAddress);\n return preparation.prepareTopUpCredit(request);\n });\n }\n async prepareCancelCredit(\n options: ExplicitCancelCreditPreparation\n ): Promise<PreparedTransaction> {\n return prepareWithErrors(\"prepareCancelCredit\", async () => {\n const { wallet, protocol, ...input } = options;\n const request = structuredClone(input);\n const runtime = await this.resolveExplicit(options);\n const preparation = explicitPreparation(runtime, request, request.tokenAddress);\n return preparation.prepareCancelCredit(request);\n });\n }\n\n toJSON() {\n return { invisi: true };\n }\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","import { getAddress } from \"ethers\";\nimport { PreparedTransaction } from \"../execution/PreparedTransaction\";\nimport type { CreditInput, NoteInput } from \"../explicit-types\";\nimport type { PreparationInventory, TransactionInfrastructure } from \"../operation-types\";\nimport { positiveAmount } from \"./prepare-common\";\nimport { TransactionPreparation } from \"./transaction-preparation\";\n\n/** Only explicitly supplied records participate. No store or automatic coin selection. */\nexport function explicitPreparation(\n options: TransactionInfrastructure,\n data: {\n inputs?: readonly NoteInput[];\n creditInputs?: readonly CreditInput[];\n changeAddress?: string;\n },\n tokenAddress: `0x${string}`\n) {\n if (!options.chainReader) throw new Error(\"chain reader required\");\n const inputs = structuredClone(data.inputs ?? []);\n const credits = structuredClone(data.creditInputs ?? []);\n const inventory: PreparationInventory = { notes: {}, credits: {}, reservations: {} };\n const context = options.protocol.context;\n function position(input: NoteInput | CreditInput) {\n if (\n typeof input.treeId !== \"bigint\" ||\n input.treeId < 0n ||\n input.treeId >= 1n << 256n ||\n !Number.isInteger(input.leafIndex) ||\n input.leafIndex < 0 ||\n input.leafIndex >= 65536\n )\n throw new Error(\"invalid explicit input position\");\n }\n for (const input of inputs) {\n position(input);\n positiveAmount(input.note.amount);\n if (inventory.notes[input.commitment]) throw new Error(\"duplicate explicit note input\");\n if (\n input.note.chainId !== context.chainId ||\n input.note.protocolAddress !== BigInt(context.protocolAddress) ||\n input.note.ownerAddress !== options.wallet.ownerAddress\n )\n throw new Error(\"explicit note identity or deployment mismatch\");\n inventory.notes[input.commitment] = { ...input, spent: \"unspent\" };\n }\n for (const input of credits) {\n position(input);\n if (input.role !== \"owner\" && input.role !== \"spender\")\n throw new Error(\"invalid explicit Credit role\");\n const key = input.commitment + \":\" + input.role;\n if (inventory.credits[key]) throw new Error(\"duplicate explicit Credit input\");\n inventory.credits[key] = { ...input, spent: \"unspent\" };\n }\n const scope = {\n ...context,\n namespace: \"explicit\",\n ownerAddress: options.wallet.ownerAddress,\n };\n const capabilities = options;\n\n if (inputs.some((input) => input.note.tokenAddress !== BigInt(getAddress(tokenAddress))))\n throw new Error(\"explicit note token mismatch\");\n const runtime = {\n options: { ...capabilities, protocol: options.protocol.forToken(tokenAddress) },\n reader: options.chainReader!,\n scope,\n };\n const reprepare = (\n intent: import(\"../../broadcaster/broadcaster-preparation\").PreparationIntent\n ) =>\n import(\"../../broadcaster/broadcaster-preparation\").then(({ prepareIntent }) =>\n prepareIntent(\n {\n ...runtime,\n explicitInputs: true,\n ...(data.changeAddress ? { changeAddress: data.changeAddress } : {}),\n readInventory: async () => structuredClone(inventory),\n complete: async (plan) => plan,\n },\n intent\n )\n );\n return new TransactionPreparation<PreparedTransaction>({\n ...runtime,\n explicitInputs: true,\n ...(data.changeAddress ? { changeAddress: data.changeAddress } : {}),\n readInventory: async () => structuredClone(inventory),\n complete: async (plan) => PreparedTransaction.prepare({ ...runtime, reprepare }, plan),\n });\n}\n","import { invisiProtocolAbi } from \"@invisi-labs/protocol/contracts\";\nimport { Interface, type Result } from \"ethers\";\n\nconst protocolInterface = new Interface(invisiProtocolAbi);\n\n/** Decode only canonical protocol receipt bytes before routing events to token wallets. */\nexport function decodeProtocolEvent(log: { data: string; topics: readonly string[] }) {\n const decoded = protocolInterface.parseLog(log);\n if (!decoded) throw new Error(\"Unknown protocol receipt event\");\n const encoded = protocolInterface.encodeEventLog(decoded.fragment, decoded.args);\n if (\n encoded.data.toLowerCase() !== log.data.toLowerCase() ||\n encoded.topics.length !== log.topics.length ||\n encoded.topics.some(\n (topic, index) => topic.toLowerCase() !== log.topics[index]!.toLowerCase()\n )\n )\n throw new Error(\"Noncanonical protocol receipt event\");\n const args = decoded.args.toObject(true);\n // Preserve empty protocol arrays: ethers toObject(true) represents an empty Result as {}.\n for (const key of [\n \"tokens\",\n \"commitments\",\n \"nullifiers\",\n \"outputCommitments\",\n \"leafIndices\",\n \"remainderLeafIndices\",\n ]) {\n const values = decoded.args.getValue(key) as Result | undefined;\n if (values) args[key] = values.toArray(true);\n }\n for (const key of [\"sources\", \"deliveries\"]) {\n const values = decoded.args.getValue(key) as Result[] | undefined;\n if (values) args[key] = values.map((value) => value.toObject(true));\n }\n const params = decoded.args.getValue(\"params\") as Result | undefined;\n if (params) {\n const source = (params.getValue(\"creation\") as Result | undefined) ?? params;\n const target = params.getValue(\"creation\") ? args.params.creation : args.params;\n for (const key of [\"nullifiers\", \"remainderCommitments\", \"expiries\", \"recoveryAmounts\"]) {\n const values = source.getValue(key) as Result | undefined;\n if (values) target[key] = values.toArray(true);\n }\n const sources = source.getValue(\"sources\") as Result[] | undefined;\n if (sources) target.sources = sources.map((value) => value.toObject(true));\n }\n return { eventName: decoded.name, args };\n}\n","import type { CanonicalReceipt } from \"@invisi-labs/protocol\";\nimport type { Address } from \"@invisi-labs/protocol/contracts\";\nimport type { DeliveryEventLog } from \"./discovery\";\nimport { decodeProtocolEvent } from \"./protocol-events\";\n\n/** Decode independently fetched canonical receipt bytes, never normalized service events. */\nexport function readProtocolLogs(\n receipt: CanonicalReceipt,\n protocolAddress: Address\n): DeliveryEventLog[] {\n if (\n receipt.status !== \"success\" ||\n !/^0x[0-9a-fA-F]{64}$/.test(receipt.transactionHash) ||\n typeof receipt.block.number !== \"bigint\" ||\n receipt.block.number < 0n ||\n !/^0x[0-9a-fA-F]{64}$/.test(receipt.block.hash)\n )\n throw new Error(\"Invalid canonical protocol receipt\");\n const seen = new Set<number>();\n return receipt.logs\n .filter((log) => log.address.toLowerCase() === protocolAddress.toLowerCase())\n .map((log) => {\n if (\n log.transactionHash.toLowerCase() !== receipt.transactionHash.toLowerCase() ||\n !Number.isSafeInteger(log.logIndex) ||\n log.logIndex < 0 ||\n seen.has(log.logIndex)\n )\n throw new Error(\"Invalid canonical receipt log identity\");\n seen.add(log.logIndex);\n const decoded = decodeProtocolEvent(log);\n return {\n address: log.address,\n eventName: decoded.eventName,\n args: decoded.args as Record<string, unknown>,\n blockNumber: receipt.block.number,\n blockHash: receipt.block.hash,\n transactionHash: receipt.transactionHash.toLowerCase(),\n logIndex: log.logIndex,\n removed: false,\n } as DeliveryEventLog;\n })\n .sort((a, b) => a.logIndex! - b.logIndex!);\n}\n","import { MAX_CIPHERTEXT_BYTES } from \"@invisi-labs/core\";\nimport type { Address, Hex } from \"@invisi-labs/protocol/contracts\";\nimport { isAddress } from \"ethers\";\n\nimport {\n decodeAddress,\n ReceivingAddress,\n type CreditDeliveryState,\n type Note,\n type ViewingCapability,\n} from \"@invisi-labs/core\";\nimport { normalizeOpaqueDelivery } from \"@invisi-labs/protocol\";\n\nexport interface DiscoveryContext {\n chainId: bigint;\n protocolAddress: Address;\n}\n/** Decoded logs from complete canonical transaction receipts, including insertion logs. */\nexport interface DeliveryEventLog {\n address: string;\n eventName: string;\n args?: Record<string, unknown>;\n blockNumber?: bigint | null;\n blockHash?: Hex | null;\n transactionHash?: Hex | null;\n logIndex?: number | null;\n removed?: boolean;\n}\nexport interface DeliveryCandidate {\n tokenAddress: Address;\n treeId: bigint;\n leafIndex: number;\n commitment: Hex;\n role: \"funds\" | \"owner\" | \"spender\";\n delivery: { ciphertext: Hex; clue: Hex };\n blockNumber: bigint;\n blockHash: Hex;\n transactionHash: Hex;\n}\nconst EVENTS = new Set([\n \"CommitmentsInserted\",\n \"BatchOutputs\",\n \"Shield\",\n \"Transact\",\n \"CrossTreeTransact\",\n \"CreditCreated\",\n \"CreditDraw\",\n \"CreditToppedUp\",\n \"CreditCancelled\",\n]);\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\nfunction object(value: unknown): Record<string, unknown> {\n check(value && typeof value === \"object\" && !Array.isArray(value), \"invalid event object\");\n return value as Record<string, unknown>;\n}\nfunction array(value: unknown): unknown[] {\n check(Array.isArray(value), \"invalid event array\");\n check(\n Array.from({ length: value.length }, (_, i) => i in value).every(Boolean),\n \"sparse event array\"\n );\n return value;\n}\nfunction integer(value: unknown): bigint {\n check(\n typeof value === \"bigint\" || (typeof value === \"number\" && Number.isSafeInteger(value)),\n \"invalid event integer\"\n );\n const n = BigInt(value);\n check(n >= 0n, \"negative event integer\");\n return n;\n}\nfunction index(value: unknown): number {\n const n = integer(value);\n check(n < 65536n, \"invalid event leaf index\");\n return Number(n);\n}\nfunction hash(value: unknown): Hex {\n check(typeof value === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(value), \"invalid event hash\");\n return value.toLowerCase() as Hex;\n}\nfunction contextCheck(context: DiscoveryContext): void {\n check(context.chainId >= 0n && context.chainId < 1n << 64n, \"invalid discovery chain\");\n check(\n isAddress(context.protocolAddress) && BigInt(context.protocolAddress) !== 0n,\n \"invalid discovery instance/token\"\n );\n}\nconst position = (tree: bigint, at: number) => `${tree}:${at}`;\n\n/** Correlate deliveries with canonical insertion events, never service-supplied balances or positions.\n * The caller selects a confirmed chain/deployment and supplies complete decoded receipts.\n */\nexport function extractDeliveryCandidates(\n logs: readonly DeliveryEventLog[],\n context: DiscoveryContext,\n confirmedThrough: bigint\n): DeliveryCandidate[] {\n contextCheck(context);\n check(confirmedThrough >= 0n, \"invalid confirmed height\");\n const relevant = logs.filter(\n (log) =>\n log.address.toLowerCase() === context.protocolAddress.toLowerCase() &&\n EVENTS.has(log.eventName)\n );\n const insertions = new Map<string, Hex>();\n const metadata = (log: DeliveryEventLog) => {\n check(!log.removed, \"discovery resync required after reorg\");\n check(\n typeof log.blockNumber === \"bigint\" &&\n log.blockNumber >= 0n &&\n log.blockNumber <= confirmedThrough,\n \"event is not confirmed\"\n );\n check(Number.isSafeInteger(log.logIndex) && log.logIndex! >= 0, \"invalid log position\");\n return {\n blockNumber: log.blockNumber,\n blockHash: hash(log.blockHash),\n transactionHash: hash(log.transactionHash),\n };\n };\n const insertionKey = (log: DeliveryEventLog, tree: bigint, at: number) =>\n `${hash(log.transactionHash)}:${position(tree, at)}`;\n for (const log of relevant) {\n metadata(log);\n if (log.eventName !== \"CommitmentsInserted\" && log.eventName !== \"BatchOutputs\") continue;\n const a = object(log.args),\n tree = integer(a.treeId),\n start = index(a.startLeafIndex),\n leaves = array(a.commitments);\n check(tree > 0n && tree < 1n << 64n, \"invalid insertion tree\");\n check(start + leaves.length <= 65536, \"insertion exceeds tree capacity\");\n for (const [i, leaf] of leaves.entries()) {\n const key = insertionKey(log, tree, start + i),\n value = hash(leaf),\n previous = insertions.get(key);\n check(!previous || previous === value, \"conflicting insertion events\");\n insertions.set(key, value);\n }\n }\n const results = new Map<string, DeliveryCandidate>();\n const add = (\n log: DeliveryEventLog,\n tree: bigint,\n at: number,\n commitment: unknown,\n role: DeliveryCandidate[\"role\"],\n wire: unknown,\n token: unknown = log.args?.token ??\n (log.args?.params as { token?: unknown; creation?: { token?: unknown } } | undefined)\n ?.token ??\n (log.args?.params as { creation?: { token?: unknown } } | undefined)?.creation?.token\n ) => {\n check(tree > 0n && tree < 1n << 64n, \"invalid output tree\");\n const inserted = insertions.get(insertionKey(log, tree, at));\n check(inserted, \"delivery has no matching canonical insertion\");\n if (commitment !== undefined)\n check(hash(commitment) === inserted, \"delivery commitment conflicts with insertion\");\n const delivery = normalizeOpaqueDelivery(wire as never, { allowEmpty: role === \"funds\" });\n check(\n typeof token === \"string\" && isAddress(token) && BigInt(token) !== 0n,\n \"invalid event token\"\n );\n const value = {\n tokenAddress: token as Address,\n treeId: tree,\n leafIndex: at,\n commitment: inserted,\n role,\n delivery,\n ...metadata(log),\n };\n const key = `${insertionKey(log, tree, at)}:${role}`,\n previous = results.get(key);\n check(\n !previous ||\n (previous.tokenAddress.toLowerCase() === token.toLowerCase() &&\n previous.delivery.ciphertext === delivery.ciphertext &&\n previous.delivery.clue === delivery.clue &&\n previous.blockHash === value.blockHash),\n \"conflicting delivery events\"\n );\n results.set(key, value);\n };\n const creation = (\n log: DeliveryEventLog,\n a: Record<string, unknown>,\n fields: Record<string, unknown>\n ) => {\n const tree = integer(a.outputTreeId),\n leaves = array(a.leafIndices),\n ds = array(a.deliveries);\n const change = hash(fields.changeCommitment),\n hasChange = BigInt(change) !== 0n;\n check(\n ds.length === 3 && leaves.length === (hasChange ? 2 : 1),\n \"invalid Credit creation delivery slots\"\n );\n add(log, tree, index(leaves[0]), fields.creditCommitment, \"owner\", ds[0]);\n add(log, tree, index(leaves[0]), fields.creditCommitment, \"spender\", ds[1]);\n if (hasChange) add(log, tree, index(leaves[1]), change, \"funds\", ds[2]);\n else normalizeOpaqueDelivery(ds[2] as never, { empty: true });\n };\n for (const log of relevant) {\n const a = object(log.args);\n if (log.eventName === \"Shield\") {\n const ds = array(a.deliveries),\n tree = integer(a.treeId),\n start = index(a.startLeafIndex);\n check(start + ds.length <= 65536, \"shield exceeds tree capacity\");\n ds.forEach((d, i) => add(log, tree, start + i, undefined, \"funds\", d));\n } else if (log.eventName === \"Transact\" || log.eventName === \"CrossTreeTransact\") {\n const cs = array(a.outputCommitments),\n ds = array(a.deliveries),\n leaves = array(a.leafIndices),\n tree = integer(a.outputTreeId);\n check(\n cs.length === ds.length && cs.length === leaves.length,\n \"invalid transact delivery slots\"\n );\n cs.forEach((c, i) => add(log, tree, index(leaves[i]), c, \"funds\", ds[i]));\n } else if (log.eventName === \"BatchOutputs\") {\n const tokens = array(a.tokens);\n const cs = array(a.commitments),\n tree = integer(a.treeId),\n start = index(a.startLeafIndex),\n packed = a.packedDeliveries;\n check(\n typeof packed === \"string\" && /^0x(?:[0-9a-fA-F]{2})*$/.test(packed),\n \"invalid packed deliveries\"\n );\n check(tokens.length === cs.length, \"batch token count mismatch\");\n check(start + cs.length <= 65536, \"batch exceeds tree capacity\");\n let offset = 2;\n cs.forEach((c, i) => {\n check(offset + 4 <= packed.length, \"truncated delivery length prefix\");\n const length = Number.parseInt(packed.slice(offset, offset + 4), 16);\n offset += 4;\n check(\n length <= MAX_CIPHERTEXT_BYTES &&\n offset + length * 2 + (length === 0 ? 0 : 136) <= packed.length,\n \"invalid packed delivery length\"\n );\n const ciphertext = `0x${packed.slice(offset, offset + length * 2)}`;\n offset += length * 2;\n const clue = length === 0 ? \"0x\" : `0x${packed.slice(offset, offset + 136)}`;\n if (length !== 0) offset += 136;\n add(log, tree, start + i, c, \"funds\", { ciphertext, clue }, tokens[i]);\n });\n check(offset === packed.length, \"trailing packed delivery bytes\");\n } else if (log.eventName === \"CreditCreated\") creation(log, a, a);\n else if (log.eventName === \"CreditToppedUp\")\n creation(log, a, object(object(a.params).creation));\n else if (log.eventName === \"CreditDraw\") {\n const p = object(a.params),\n cs = array(p.remainderCommitments),\n ds = array(a.deliveries),\n leaves = array(a.remainderLeafIndices),\n tree = integer(a.outputTreeId);\n check(\n ds.length === 2 * cs.length && leaves.length === cs.length,\n \"invalid draw delivery slots\"\n );\n cs.forEach((c, i) => {\n if (BigInt(hash(c)) === 0n) {\n check(integer(leaves[i]) === 0n, \"absent remainder has nonzero position\");\n normalizeOpaqueDelivery(ds[2 * i] as never, { empty: true });\n normalizeOpaqueDelivery(ds[2 * i + 1] as never, { empty: true });\n } else {\n add(log, tree, index(leaves[i]), c, \"owner\", ds[2 * i]);\n add(log, tree, index(leaves[i]), c, \"spender\", ds[2 * i + 1]);\n }\n });\n }\n }\n return [...results.values()];\n}\nexport interface DiscoveredNote extends Omit<DeliveryCandidate, \"delivery\" | \"role\"> {\n note: Note;\n}\nexport interface DiscoveredCredit extends Omit<DeliveryCandidate, \"delivery\"> {\n role: \"owner\" | \"spender\";\n state: CreditDeliveryState;\n}\n/** Authenticate private deliveries from a single batch of canonical receipts. */\nexport async function decryptCandidates(\n logs: readonly DeliveryEventLog[],\n options: {\n context: DiscoveryContext;\n viewing: Pick<ViewingCapability, \"ownerAddress\" | \"decryptNote\" | \"decryptCredit\">;\n confirmedThrough: bigint;\n }\n): Promise<{ notes: DiscoveredNote[]; credits: DiscoveredCredit[] }> {\n contextCheck(options.context);\n decodeAddress(ReceivingAddress.fromIdentity(options.viewing.ownerAddress).toString());\n check(\n !logs.some(\n (log) =>\n log.address.toLowerCase() === options.context.protocolAddress.toLowerCase() &&\n log.removed\n ),\n \"discovery resync required after reorg\"\n );\n const candidates = extractDeliveryCandidates(logs, options.context, options.confirmedThrough);\n const positions = new Map<string, DeliveryCandidate>();\n const unique = new Map<string, DeliveryCandidate>();\n for (const candidate of candidates) {\n const key = position(candidate.treeId, candidate.leafIndex);\n const previous = positions.get(key);\n check(\n !previous ||\n (previous.commitment === candidate.commitment &&\n previous.blockHash === candidate.blockHash &&\n previous.transactionHash === candidate.transactionHash &&\n previous.tokenAddress.toLowerCase() === candidate.tokenAddress.toLowerCase()),\n \"conflicting canonical position\"\n );\n positions.set(key, candidate);\n unique.set(`${key}:${candidate.role}`, candidate);\n }\n const notes: DiscoveredNote[] = [];\n const credits: DiscoveredCredit[] = [];\n for (const candidate of unique.values()) {\n const { delivery, role, ...positionData } = candidate;\n const context = {\n chainId: options.context.chainId,\n protocolAddress: BigInt(options.context.protocolAddress),\n tokenAddress: BigInt(candidate.tokenAddress),\n outputCommitment: candidate.commitment,\n };\n // Non-recipient ciphertexts and failed authentication are normal scan outcomes.\n try {\n if (role === \"funds\") {\n if (delivery.ciphertext === \"0x\") continue;\n const note = await options.viewing.decryptNote(delivery.ciphertext, context);\n notes.push({ ...positionData, note });\n } else {\n const state = await options.viewing.decryptCredit(delivery.ciphertext, {\n ...context,\n role,\n });\n credits.push({ ...positionData, role, state });\n }\n } catch {\n /* Unrelated or invalid output: never add unauthenticated amounts. */\n }\n }\n return { notes, credits };\n}\n","import { invisiProtocolAbi } from \"@invisi-labs/protocol/contracts\";\nimport { AbiCoder, getAddress, Interface, keccak256, verifyTypedData } from \"ethers\";\n\nexport const broadcasterQuoteTypes = {\n Quote: [\n { name: \"token\", type: \"address\" },\n { name: \"feeRecipient\", type: \"address\" },\n { name: \"feeAmount\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"maxGas\", type: \"uint256\" },\n { name: \"requestHash\", type: \"bytes32\" },\n ],\n};\nexport interface BroadcasterQuote {\n token: string;\n feeRecipient: string;\n feeAmount: string;\n deadline: string;\n maxGas: string;\n requestHash: string;\n}\nexport interface SignedBroadcasterQuote {\n quote: BroadcasterQuote;\n signature: string;\n context?: { chainId: bigint; protocol: string };\n}\nexport interface BroadcasterTrust {\n chainId: bigint;\n protocol: string;\n signer: string;\n}\nexport function broadcasterQuoteDomain(trust: BroadcasterTrust) {\n return {\n name: \"InvisiBroadcaster\",\n version: \"1\",\n chainId: trust.chainId,\n verifyingContract: getAddress(trust.protocol),\n };\n}\nconst supportedMethods = [\"transact\", \"shield\", \"createCredit\", \"topUpCredit\", \"cancelCredit\"];\nconst intentAbi = invisiProtocolAbi.filter(\n (item) =>\n item.type === \"function\" &&\n supportedMethods.includes(item.name) &&\n (item.name !== \"transact\" || item.inputs[1]?.type === \"tuple\")\n);\nexport const broadcasterTransactInterface = new Interface(intentAbi);\n/** Decode a canonical supported direct public intent. Draw, registry and aggregates are excluded. */\nexport function decodeBroadcasterIntent(data: string) {\n const parsed = broadcasterTransactInterface.parseTransaction({ data });\n if (!parsed || !supportedMethods.includes(parsed.name))\n throw new Error(\"unsupported broadcaster method\");\n const fragment = parsed.fragment;\n const decoded = parsed.args;\n if (\n broadcasterTransactInterface.encodeFunctionData(fragment, decoded).toLowerCase() !==\n data.toLowerCase()\n )\n throw new Error(\"noncanonical broadcaster calldata\");\n const method = parsed.name;\n const raw = method === \"transact\" ? decoded[1] : undefined;\n const params =\n raw?.params ??\n (method === \"shield\"\n ? decoded[0]\n : method === \"topUpCredit\"\n ? decoded[1].creation\n : decoded[1]);\n const funding =\n raw?.funding ??\n (method === \"shield\"\n ? decoded[3]\n : [\"createCredit\", \"topUpCredit\"].includes(method)\n ? decoded[3]\n : undefined);\n const deliveries =\n raw?.deliveries ??\n (method === \"shield\"\n ? decoded[2]\n : [\"createCredit\", \"topUpCredit\"].includes(method)\n ? decoded[2]\n : []);\n return {\n fragment,\n method,\n args: decoded,\n proof: method === \"shield\" ? \"0x\" : (decoded[0] as string),\n request: { params, funding, deliveries },\n };\n}\n/** Domain-separated final public intent: omit only proof bytes and funding.signature. */\nexport function broadcasterRequestHash(data: string): string {\n const { fragment, method, args } = decodeBroadcasterIntent(data);\n const copy = (value: unknown): unknown => (Array.isArray(value) ? value.map(copy) : value);\n const canonical = copy(args) as unknown[];\n if (method !== \"shield\") canonical[0] = \"0x\";\n if (method === \"transact\") ((canonical[1] as unknown[])[2] as unknown[])[4] = \"0x\";\n else if (method !== \"cancelCredit\") (canonical[3] as unknown[])[4] = \"0x\";\n const calldata = broadcasterTransactInterface.encodeFunctionData(fragment, canonical);\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n [\"string\", \"string\", \"bytes\"],\n [\"InvisiBroadcasterIntentV1\", method, calldata]\n )\n );\n}\nexport function verifyBroadcasterQuote(\n signed: SignedBroadcasterQuote,\n trust: BroadcasterTrust,\n data: string,\n now = BigInt(Math.floor(Date.now() / 1000))\n) {\n const { quote } = signed;\n const { request } = decodeBroadcasterIntent(data);\n const p = request.params;\n if (\n quote.requestHash !== broadcasterRequestHash(data) ||\n getAddress(quote.token) !== getAddress(p.token) ||\n getAddress(quote.feeRecipient) !== getAddress(p.feeRecipient) ||\n BigInt(quote.feeAmount) !== p.feeAmount ||\n BigInt(quote.deadline) > p.deadline ||\n BigInt(quote.deadline) < now ||\n BigInt(quote.maxGas) <= 0n ||\n BigInt(quote.feeAmount) <= 0n ||\n BigInt(quote.feeAmount) >= 1n << 128n\n )\n throw new Error(\"quote does not match final intent or bounds\");\n if (\n getAddress(\n verifyTypedData(\n broadcasterQuoteDomain(trust),\n broadcasterQuoteTypes,\n quote,\n signed.signature\n )\n ) !== getAddress(trust.signer)\n )\n throw new Error(\"untrusted quote signature\");\n return quote;\n}\nexport interface BroadcasterStatus {\n id: string;\n state: \"pending\" | \"submitted\" | \"confirmed\" | \"reverted\" | \"uncertain\";\n transactionHash?: string;\n}\nfunction checkedStatus(value: unknown, id: string): BroadcasterStatus {\n const status = value as BroadcasterStatus;\n if (\n !status ||\n status.id !== id ||\n ![\"pending\", \"submitted\", \"confirmed\", \"reverted\", \"uncertain\"].includes(status.state) ||\n (status.transactionHash !== undefined &&\n !/^0x[0-9a-fA-F]{64}$/.test(status.transactionHash))\n )\n throw new Error(\"invalid broadcaster status\");\n return status;\n}\nexport type BroadcasterTransport = (request: {\n jsonrpc: \"2.0\";\n id: number;\n method: string;\n params: unknown;\n}) => Promise<unknown>;\nexport interface BroadcasterConfiguration {\n endpoint: string;\n quoteSigner: string;\n feeRecipient: string;\n}\nexport class BroadcasterClient {\n readonly configuration: Readonly<BroadcasterConfiguration>;\n readonly url: string;\n readonly transport: BroadcasterTransport;\n private requestId = 0;\n constructor(configuration: BroadcasterConfiguration, transport?: BroadcasterTransport) {\n this.configuration = Object.freeze({\n endpoint: configuration.endpoint,\n quoteSigner: getAddress(configuration.quoteSigner),\n feeRecipient: getAddress(configuration.feeRecipient),\n });\n if (\n BigInt(this.configuration.quoteSigner) === 0n ||\n BigInt(this.configuration.feeRecipient) === 0n\n )\n throw new Error(\"invalid broadcaster configuration\");\n this.url = configuration.endpoint;\n const base = new URL(this.url);\n if (base.protocol !== \"https:\" || base.username || base.password)\n throw new Error(\"broadcaster requires HTTPS\");\n\n this.transport =\n transport ??\n (async (request) => {\n const response = await fetch(base, {\n redirect: \"error\",\n method: \"POST\",\n body: JSON.stringify(request),\n headers: { \"content-type\": \"application/json\" },\n signal: AbortSignal.timeout(30000),\n });\n if (!response.ok) throw new Error(`Broadcaster HTTP ${response.status}`);\n if (!response.body) throw new Error(\"empty broadcaster response\");\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n size += result.value.length;\n if (size > 65536) throw new Error(\"broadcaster response too large\");\n chunks.push(result.value);\n }\n } finally {\n await reader.cancel();\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.length;\n }\n return JSON.parse(new TextDecoder().decode(bytes));\n });\n }\n private async call(method: string, params: unknown): Promise<unknown> {\n const id = ++this.requestId;\n const response = (await this.transport({\n jsonrpc: \"2.0\",\n id,\n method,\n params: [params],\n })) as {\n jsonrpc?: string;\n id?: unknown;\n result?: unknown;\n error?: { code?: unknown; message?: unknown };\n };\n if (\n !response ||\n response.jsonrpc !== \"2.0\" ||\n response.id !== id ||\n Object.hasOwn(response, \"result\") === Object.hasOwn(response, \"error\")\n )\n throw new Error(\"invalid broadcaster JSON-RPC response\");\n if (response.error) {\n if (\n !Number.isInteger(response.error.code) ||\n typeof response.error.message !== \"string\"\n )\n throw new Error(\"invalid broadcaster JSON-RPC error\");\n throw new BroadcasterRpcError(response.error.code as number, response.error.message);\n }\n return response.result;\n }\n async fee(\n token: string,\n data?: string\n ): Promise<{ feeRecipient: string; feeAmount: string; maxGas: string }> {\n const fee = (await this.call(\"broadcaster_getFee\", {\n token: getAddress(token),\n ...(data ? { data } : {}),\n })) as {\n feeRecipient: string;\n feeAmount: string;\n maxGas: string;\n };\n if (\n !fee ||\n getAddress(fee.feeRecipient) !== this.configuration.feeRecipient ||\n !/^\\d+$/.test(fee.feeAmount) ||\n BigInt(fee.feeAmount) <= 0n ||\n BigInt(fee.feeAmount) >= 1n << 128n ||\n !/^\\d+$/.test(fee.maxGas) ||\n BigInt(fee.maxGas) <= 0n\n )\n throw new Error(\"invalid broadcaster fee\");\n return fee;\n }\n async quote(\n data: string,\n context: { chainId: bigint; protocol: string }\n ): Promise<SignedBroadcasterQuote> {\n const signed = (await this.call(\"broadcaster_getQuote\", {\n data,\n })) as SignedBroadcasterQuote;\n verifyBroadcasterQuote(\n signed,\n { ...context, signer: this.configuration.quoteSigner },\n data\n );\n if (getAddress(signed.quote.feeRecipient) !== this.configuration.feeRecipient)\n throw new Error(\"unregistered fee recipient\");\n return { quote: signed.quote, signature: signed.signature, context: { ...context } };\n }\n async submit(\n data: string,\n signed: SignedBroadcasterQuote,\n idempotencyKey: string\n ): Promise<BroadcasterStatus> {\n if (!signed.context) throw new Error(\"missing verified quote context\");\n verifyBroadcasterQuote(\n signed,\n { ...signed.context, signer: this.configuration.quoteSigner },\n data,\n 0n\n );\n if (getAddress(signed.quote.feeRecipient) !== this.configuration.feeRecipient)\n throw new Error(\"unregistered fee recipient\");\n return checkedStatus(\n await this.call(\"broadcaster_submitTransaction\", {\n data,\n quote: signed.quote,\n signature: signed.signature,\n idempotencyKey,\n }),\n idempotencyKey\n );\n }\n async status(id: string): Promise<BroadcasterStatus> {\n return checkedStatus(await this.call(\"broadcaster_getTransactionStatus\", { id }), id);\n }\n}\nexport class BroadcasterRpcError extends Error {\n constructor(\n readonly code: number,\n message: string\n ) {\n super(message);\n this.name = \"BroadcasterRpcError\";\n }\n}\n"],"mappings":"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","names":["index","hash","hash","word","WitnessBuilder","getBytes","WitnessBuilder","getBytes","normalizeFunding","check","normalizeFunding","MissingCapabilityError","MissingCapabilityError","MissingCapabilityError","ProtocolRpcClient","position","MissingCapabilityError","ProtocolRpcClient","index","check","invisiProtocolAbi","getAddress","Interface","verifyTypedData"]}