@invisi-labs/sdk 1.1.7 → 1.2.1

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 (118) hide show
  1. package/README.md +5 -0
  2. package/dist/broadcaster-3KTB4JO2.cjs +21 -0
  3. package/dist/broadcaster-3KTB4JO2.cjs.map +1 -0
  4. package/dist/broadcaster-7ZKKSTZQ.js +21 -0
  5. package/dist/broadcaster-preparation-PJ263WBL.cjs +15 -0
  6. package/dist/broadcaster-preparation-PJ263WBL.cjs.map +1 -0
  7. package/dist/broadcaster-preparation-ZQAPZAUG.js +15 -0
  8. package/dist/broadcaster-preparation-ZQAPZAUG.js.map +1 -0
  9. package/dist/{chunk-LOU7AP2B.cjs → chunk-2URICDPW.cjs} +72 -33
  10. package/dist/chunk-2URICDPW.cjs.map +1 -0
  11. package/dist/chunk-3D24ABYR.js +86 -0
  12. package/dist/chunk-3D24ABYR.js.map +1 -0
  13. package/dist/chunk-3KTQQZOW.cjs +71 -0
  14. package/dist/chunk-3KTQQZOW.cjs.map +1 -0
  15. package/dist/chunk-4SDP53YQ.cjs +765 -0
  16. package/dist/chunk-4SDP53YQ.cjs.map +1 -0
  17. package/dist/{chunk-XHKQ2BO2.js → chunk-4VI6LYGH.js} +25 -2
  18. package/dist/chunk-4VI6LYGH.js.map +1 -0
  19. package/dist/chunk-BBSRP4MH.cjs +287 -0
  20. package/dist/chunk-BBSRP4MH.cjs.map +1 -0
  21. package/dist/chunk-DGMVGFKM.js +41 -0
  22. package/dist/chunk-DGMVGFKM.js.map +1 -0
  23. package/dist/chunk-DHQEB6JR.cjs +1616 -0
  24. package/dist/chunk-DHQEB6JR.cjs.map +1 -0
  25. package/dist/chunk-FKF67XE6.js +1616 -0
  26. package/dist/chunk-FKF67XE6.js.map +1 -0
  27. package/dist/chunk-GUD3LAUO.js +765 -0
  28. package/dist/chunk-GUD3LAUO.js.map +1 -0
  29. package/dist/chunk-HCB7RQ3S.cjs +79 -0
  30. package/dist/chunk-HCB7RQ3S.cjs.map +1 -0
  31. package/dist/{chunk-GTPUYPQL.js → chunk-HKGJXQVN.js} +69 -30
  32. package/dist/chunk-HKGJXQVN.js.map +1 -0
  33. package/dist/chunk-HLH5JZD4.js +287 -0
  34. package/dist/chunk-HLH5JZD4.js.map +1 -0
  35. package/dist/chunk-J6TZZVAM.cjs +230 -0
  36. package/dist/chunk-J6TZZVAM.cjs.map +1 -0
  37. package/dist/{chunk-7F7ZZW3L.cjs → chunk-LOR6PYH5.cjs} +25 -2
  38. package/dist/chunk-LOR6PYH5.cjs.map +1 -0
  39. package/dist/chunk-MA2QZEF5.cjs +399 -0
  40. package/dist/chunk-MA2QZEF5.cjs.map +1 -0
  41. package/dist/chunk-MI4IP4ZD.cjs +86 -0
  42. package/dist/chunk-MI4IP4ZD.cjs.map +1 -0
  43. package/dist/chunk-OCZLJKIA.cjs +41 -0
  44. package/dist/chunk-OCZLJKIA.cjs.map +1 -0
  45. package/dist/chunk-R5YAOJKB.js +71 -0
  46. package/dist/chunk-R5YAOJKB.js.map +1 -0
  47. package/dist/chunk-RY4M2CIQ.js +399 -0
  48. package/dist/chunk-RY4M2CIQ.js.map +1 -0
  49. package/dist/chunk-THMD5QO2.js +79 -0
  50. package/dist/chunk-THMD5QO2.js.map +1 -0
  51. package/dist/chunk-ZD2652WH.js +230 -0
  52. package/dist/chunk-ZD2652WH.js.map +1 -0
  53. package/dist/credit.cjs +1 -0
  54. package/dist/credit.cjs.map +1 -0
  55. package/dist/credit.d.cts +12 -0
  56. package/dist/credit.d.ts +12 -0
  57. package/dist/credit.js +1 -0
  58. package/dist/credit.js.map +1 -0
  59. package/dist/ethers.cjs +2 -2
  60. package/dist/ethers.cjs.map +1 -1
  61. package/dist/ethers.d.cts +15 -4
  62. package/dist/ethers.d.ts +15 -4
  63. package/dist/ethers.js +1 -1
  64. package/dist/index-CLhGwLxZ.d.cts +42 -0
  65. package/dist/index-Crp-ZFiM.d.ts +42 -0
  66. package/dist/index.cjs +69 -38
  67. package/dist/index.cjs.map +1 -1
  68. package/dist/index.d.cts +21 -14
  69. package/dist/index.d.ts +21 -14
  70. package/dist/index.js +64 -33
  71. package/dist/index.js.map +1 -1
  72. package/dist/note.cjs +11 -0
  73. package/dist/note.cjs.map +1 -0
  74. package/dist/note.d.cts +29 -0
  75. package/dist/note.d.ts +29 -0
  76. package/dist/note.js +11 -0
  77. package/dist/note.js.map +1 -0
  78. package/dist/{broadcaster-preparation-DMxxZ_1Q.d.cts → operation-bridge-CoECSxfi.d.cts} +130 -245
  79. package/dist/{broadcaster-preparation-DMxxZ_1Q.d.ts → operation-bridge-CoECSxfi.d.ts} +130 -245
  80. package/dist/preparation-HUBTVCZE.js +404 -0
  81. package/dist/preparation-HUBTVCZE.js.map +1 -0
  82. package/dist/preparation-QD3ZSYV5.cjs +404 -0
  83. package/dist/preparation-QD3ZSYV5.cjs.map +1 -0
  84. package/dist/provenance-preparation-43DN2WK7.cjs +16 -0
  85. package/dist/provenance-preparation-43DN2WK7.cjs.map +1 -0
  86. package/dist/provenance-preparation-HEZE4L5H.js +16 -0
  87. package/dist/provenance-preparation-HEZE4L5H.js.map +1 -0
  88. package/dist/provenance.cjs +59 -0
  89. package/dist/provenance.cjs.map +1 -0
  90. package/dist/provenance.d.cts +34 -0
  91. package/dist/provenance.d.ts +34 -0
  92. package/dist/provenance.js +59 -0
  93. package/dist/provenance.js.map +1 -0
  94. package/dist/{receipt-logs-m0-bhaxW.d.ts → receipt-logs-DQRJK0l8.d.cts} +84 -78
  95. package/dist/{receipt-logs-CvC951p7.d.cts → receipt-logs-fMR6Bwql.d.ts} +84 -78
  96. package/dist/session-support.cjs +28 -7
  97. package/dist/session-support.cjs.map +1 -1
  98. package/dist/session-support.d.cts +71 -39
  99. package/dist/session-support.d.ts +71 -39
  100. package/dist/session-support.js +58 -37
  101. package/dist/session-support.js.map +1 -1
  102. package/package.json +22 -6
  103. package/dist/broadcaster-preparation-RMWQFYNL.js +0 -11
  104. package/dist/broadcaster-preparation-UGOTO4SX.cjs +0 -11
  105. package/dist/broadcaster-preparation-UGOTO4SX.cjs.map +0 -1
  106. package/dist/chunk-7F7ZZW3L.cjs.map +0 -1
  107. package/dist/chunk-EHP5TBC6.js +0 -3565
  108. package/dist/chunk-EHP5TBC6.js.map +0 -1
  109. package/dist/chunk-GTPUYPQL.js.map +0 -1
  110. package/dist/chunk-ITTGBIG2.js +0 -1877
  111. package/dist/chunk-ITTGBIG2.js.map +0 -1
  112. package/dist/chunk-J2JH6HIG.cjs +0 -1877
  113. package/dist/chunk-J2JH6HIG.cjs.map +0 -1
  114. package/dist/chunk-LOU7AP2B.cjs.map +0 -1
  115. package/dist/chunk-RHNIHI4P.cjs +0 -3565
  116. package/dist/chunk-RHNIHI4P.cjs.map +0 -1
  117. package/dist/chunk-XHKQ2BO2.js.map +0 -1
  118. /package/dist/{broadcaster-preparation-RMWQFYNL.js.map → broadcaster-7ZKKSTZQ.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/invisi-sdk-ts/invisi-sdk-ts/packages/sdk/dist/chunk-RHNIHI4P.cjs","../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"],"names":["index","hash","word","WitnessBuilder","getBytes","check","getAddress","verifyTypedData"],"mappings":"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","file":"/home/runner/work/invisi-sdk-ts/invisi-sdk-ts/packages/sdk/dist/chunk-RHNIHI4P.cjs","sourcesContent":[null,"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"]}