@lemmaoracle/x402 0.1.1 → 0.1.3

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 (146) hide show
  1. package/dist/advanced/index.d.ts +14 -0
  2. package/dist/advanced/index.d.ts.map +1 -0
  3. package/dist/advanced/index.js +14 -0
  4. package/dist/advanced/index.js.map +1 -0
  5. package/dist/index.d.ts +25 -42
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +25 -77
  8. package/dist/index.js.map +1 -1
  9. package/dist/lemma-config.d.ts +41 -0
  10. package/dist/lemma-config.d.ts.map +1 -0
  11. package/dist/lemma-config.js +12 -0
  12. package/dist/lemma-config.js.map +1 -0
  13. package/dist/lemma-discovery.d.ts +37 -0
  14. package/dist/lemma-discovery.d.ts.map +1 -0
  15. package/dist/lemma-discovery.js +104 -0
  16. package/dist/lemma-discovery.js.map +1 -0
  17. package/dist/lemma-server.d.ts +30 -0
  18. package/dist/lemma-server.d.ts.map +1 -0
  19. package/dist/lemma-server.js +169 -0
  20. package/dist/lemma-server.js.map +1 -0
  21. package/dist/lemma-submission.d.ts +44 -0
  22. package/dist/lemma-submission.d.ts.map +1 -0
  23. package/dist/lemma-submission.js +81 -0
  24. package/dist/lemma-submission.js.map +1 -0
  25. package/package.json +14 -14
  26. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-1775996174982.json +0 -34
  27. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-1775996423983.json +0 -51
  28. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-1775996907850.json +0 -51
  29. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-latest.json +0 -51
  30. package/cache/DeployPaymentVerifier.s.sol/10143/run-1775996174982.json +0 -7
  31. package/cache/DeployPaymentVerifier.s.sol/10143/run-1775996423983.json +0 -7
  32. package/cache/DeployPaymentVerifier.s.sol/10143/run-1775996907850.json +0 -7
  33. package/cache/DeployPaymentVerifier.s.sol/10143/run-latest.json +0 -7
  34. package/cache/solidity-files-cache.json +0 -1
  35. package/circuits/README.md +0 -78
  36. package/circuits/payment-comprehensive.test.mjs +0 -272
  37. package/circuits/payment.circom +0 -89
  38. package/circuits/payment.test.mjs +0 -173
  39. package/dist/proof-generator.d.ts +0 -26
  40. package/dist/proof-generator.d.ts.map +0 -1
  41. package/dist/proof-generator.js +0 -154
  42. package/dist/proof-generator.js.map +0 -1
  43. package/dist/proof-generator.test.d.ts +0 -7
  44. package/dist/proof-generator.test.d.ts.map +0 -1
  45. package/dist/proof-generator.test.js +0 -121
  46. package/dist/proof-generator.test.js.map +0 -1
  47. package/dist/transaction-watcher.d.ts +0 -42
  48. package/dist/transaction-watcher.d.ts.map +0 -1
  49. package/dist/transaction-watcher.js +0 -88
  50. package/dist/transaction-watcher.js.map +0 -1
  51. package/dist/transaction-watcher.test.d.ts +0 -7
  52. package/dist/transaction-watcher.test.d.ts.map +0 -1
  53. package/dist/transaction-watcher.test.js +0 -111
  54. package/dist/transaction-watcher.test.js.map +0 -1
  55. package/dist/types.d.ts +0 -76
  56. package/dist/types.d.ts.map +0 -1
  57. package/dist/types.js +0 -2
  58. package/dist/types.js.map +0 -1
  59. package/foundry.lock +0 -11
  60. package/foundry.toml +0 -16
  61. package/lib/forge-std/.gitattributes +0 -1
  62. package/lib/forge-std/.github/CODEOWNERS +0 -1
  63. package/lib/forge-std/.github/dependabot.yml +0 -6
  64. package/lib/forge-std/.github/workflows/ci.yml +0 -161
  65. package/lib/forge-std/.github/workflows/sync.yml +0 -36
  66. package/lib/forge-std/CONTRIBUTING.md +0 -193
  67. package/lib/forge-std/LICENSE-APACHE +0 -203
  68. package/lib/forge-std/LICENSE-MIT +0 -25
  69. package/lib/forge-std/README.md +0 -314
  70. package/lib/forge-std/RELEASE_CHECKLIST.md +0 -12
  71. package/lib/forge-std/foundry.toml +0 -18
  72. package/lib/forge-std/package.json +0 -16
  73. package/lib/forge-std/scripts/vm.py +0 -636
  74. package/lib/forge-std/src/Base.sol +0 -48
  75. package/lib/forge-std/src/Config.sol +0 -60
  76. package/lib/forge-std/src/LibVariable.sol +0 -477
  77. package/lib/forge-std/src/Script.sol +0 -28
  78. package/lib/forge-std/src/StdAssertions.sol +0 -1300
  79. package/lib/forge-std/src/StdChains.sol +0 -303
  80. package/lib/forge-std/src/StdCheats.sol +0 -825
  81. package/lib/forge-std/src/StdConfig.sol +0 -632
  82. package/lib/forge-std/src/StdConstants.sol +0 -30
  83. package/lib/forge-std/src/StdError.sol +0 -15
  84. package/lib/forge-std/src/StdInvariant.sol +0 -161
  85. package/lib/forge-std/src/StdJson.sol +0 -275
  86. package/lib/forge-std/src/StdMath.sol +0 -47
  87. package/lib/forge-std/src/StdStorage.sol +0 -476
  88. package/lib/forge-std/src/StdStyle.sol +0 -333
  89. package/lib/forge-std/src/StdToml.sol +0 -275
  90. package/lib/forge-std/src/StdUtils.sol +0 -200
  91. package/lib/forge-std/src/Test.sol +0 -32
  92. package/lib/forge-std/src/Vm.sol +0 -2533
  93. package/lib/forge-std/src/console.sol +0 -1551
  94. package/lib/forge-std/src/console2.sol +0 -4
  95. package/lib/forge-std/src/interfaces/IERC1155.sol +0 -105
  96. package/lib/forge-std/src/interfaces/IERC165.sol +0 -12
  97. package/lib/forge-std/src/interfaces/IERC20.sol +0 -43
  98. package/lib/forge-std/src/interfaces/IERC4626.sol +0 -190
  99. package/lib/forge-std/src/interfaces/IERC6909.sol +0 -72
  100. package/lib/forge-std/src/interfaces/IERC721.sol +0 -164
  101. package/lib/forge-std/src/interfaces/IERC7540.sol +0 -145
  102. package/lib/forge-std/src/interfaces/IERC7575.sol +0 -241
  103. package/lib/forge-std/src/interfaces/IMulticall3.sol +0 -68
  104. package/lib/forge-std/src/safeconsole.sol +0 -13248
  105. package/lib/forge-std/test/CommonBase.t.sol +0 -44
  106. package/lib/forge-std/test/Config.t.sol +0 -381
  107. package/lib/forge-std/test/LibVariable.t.sol +0 -452
  108. package/lib/forge-std/test/StdAssertions.t.sol +0 -141
  109. package/lib/forge-std/test/StdChains.t.sol +0 -227
  110. package/lib/forge-std/test/StdCheats.t.sol +0 -638
  111. package/lib/forge-std/test/StdConstants.t.sol +0 -38
  112. package/lib/forge-std/test/StdError.t.sol +0 -119
  113. package/lib/forge-std/test/StdJson.t.sol +0 -49
  114. package/lib/forge-std/test/StdMath.t.sol +0 -202
  115. package/lib/forge-std/test/StdStorage.t.sol +0 -532
  116. package/lib/forge-std/test/StdStyle.t.sol +0 -110
  117. package/lib/forge-std/test/StdToml.t.sol +0 -49
  118. package/lib/forge-std/test/StdUtils.t.sol +0 -342
  119. package/lib/forge-std/test/Vm.t.sol +0 -18
  120. package/lib/forge-std/test/compilation/CompilationScript.sol +0 -8
  121. package/lib/forge-std/test/compilation/CompilationScriptBase.sol +0 -8
  122. package/lib/forge-std/test/compilation/CompilationTest.sol +0 -8
  123. package/lib/forge-std/test/compilation/CompilationTestBase.sol +0 -8
  124. package/lib/forge-std/test/fixtures/broadcast.log.json +0 -187
  125. package/lib/forge-std/test/fixtures/config.toml +0 -81
  126. package/lib/forge-std/test/fixtures/test.json +0 -8
  127. package/lib/forge-std/test/fixtures/test.toml +0 -6
  128. package/package.json.backup +0 -55
  129. package/scripts/DeployPaymentVerifier.s.sol +0 -18
  130. package/scripts/build.sh +0 -61
  131. package/scripts/deploy.sh +0 -65
  132. package/scripts/fix-verifier.mjs +0 -64
  133. package/scripts/register-circuit.ts +0 -213
  134. package/scripts/test-with-circuit.mjs +0 -88
  135. package/src/index.ts +0 -115
  136. package/src/proof-generator.test.ts +0 -139
  137. package/src/proof-generator.ts +0 -220
  138. package/src/transaction-watcher.test.ts +0 -153
  139. package/src/transaction-watcher.ts +0 -154
  140. package/src/types.ts +0 -110
  141. package/tsconfig.json +0 -14
  142. package/tsconfig.tsbuildinfo +0 -1
  143. package/vitest.config.ts +0 -18
  144. package/workers/x402-facilitator/src/index.ts +0 -582
  145. package/workers/x402-facilitator/src/x402-env.d.ts +0 -25
  146. package/workers/x402-facilitator/wrangler.toml +0 -19
@@ -1 +0,0 @@
1
- {"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"build","tests":"test","scripts":"script","libraries":["build/libs","node_modules"]},"files":{"build/PaymentVerifier.sol":{"lastModificationDate":1775996890566,"contentHash":"f6822399ee6f7829","interfaceReprHash":null,"sourceName":"build/PaymentVerifier.sol","imports":[],"versionRequirement":">=0.7.0, <0.9.0","artifacts":{"Groth16Verifier":{"0.8.28":{"default":{"path":"PaymentVerifier.sol/Groth16Verifier.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/Base.sol":{"lastModificationDate":1774109577652,"contentHash":"057da15af4544b7a","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/Base.sol","imports":["build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"CommonBase":{"0.8.28":{"default":{"path":"Base.sol/CommonBase.json","build_id":"dd88e620fb29e300"}}},"ScriptBase":{"0.8.28":{"default":{"path":"Base.sol/ScriptBase.json","build_id":"dd88e620fb29e300"}}},"TestBase":{"0.8.28":{"default":{"path":"Base.sol/TestBase.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/Config.sol":{"lastModificationDate":1774109577652,"contentHash":"c199018562a8167e","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/Config.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/LibVariable.sol","build/libs/forge-std/src/StdConfig.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol"],"versionRequirement":"^0.8.13","artifacts":{"Config":{"0.8.28":{"default":{"path":"Config.sol/Config.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/LibVariable.sol":{"lastModificationDate":1774109577652,"contentHash":"65c81408477abb0c","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/LibVariable.sol","imports":[],"versionRequirement":"^0.8.13","artifacts":{"LibVariable":{"0.8.28":{"default":{"path":"LibVariable.sol/LibVariable.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/Script.sol":{"lastModificationDate":1774109577656,"contentHash":"f2808a0770d1b6a2","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/Script.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"Script":{"0.8.28":{"default":{"path":"Script.sol/Script.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdAssertions.sol":{"lastModificationDate":1774109577656,"contentHash":"7bf8f8dd736b7b28","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdAssertions.sol","imports":["build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdAssertions":{"0.8.28":{"default":{"path":"StdAssertions.sol/StdAssertions.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdChains.sol":{"lastModificationDate":1774109577656,"contentHash":"cef85f092f883921","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdChains.sol","imports":["build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdChains":{"0.8.28":{"default":{"path":"StdChains.sol/StdChains.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdCheats.sol":{"lastModificationDate":1774109577656,"contentHash":"906cd6276ed83364","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdCheats.sol","imports":["build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdCheats":{"0.8.28":{"default":{"path":"StdCheats.sol/StdCheats.json","build_id":"dd88e620fb29e300"}}},"StdCheatsSafe":{"0.8.28":{"default":{"path":"StdCheats.sol/StdCheatsSafe.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdConfig.sol":{"lastModificationDate":1774109577656,"contentHash":"6d24ac5c505df3f6","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdConfig.sol","imports":["build/libs/forge-std/src/LibVariable.sol","build/libs/forge-std/src/Vm.sol"],"versionRequirement":"^0.8.13","artifacts":{"StdConfig":{"0.8.28":{"default":{"path":"StdConfig.sol/StdConfig.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdConstants.sol":{"lastModificationDate":1774109577656,"contentHash":"6e64e3e0f1e270b1","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdConstants.sol","imports":["build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdConstants":{"0.8.28":{"default":{"path":"StdConstants.sol/StdConstants.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdError.sol":{"lastModificationDate":1774109577656,"contentHash":"aa3090ae1422ce31","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdError.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"stdError":{"0.8.28":{"default":{"path":"StdError.sol/stdError.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdInvariant.sol":{"lastModificationDate":1774109577656,"contentHash":"65ff1041945c2df0","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdInvariant.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdInvariant":{"0.8.28":{"default":{"path":"StdInvariant.sol/StdInvariant.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdJson.sol":{"lastModificationDate":1774109577656,"contentHash":"deb75521f38fb99f","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdJson.sol","imports":["build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"stdJson":{"0.8.28":{"default":{"path":"StdJson.sol/stdJson.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdMath.sol":{"lastModificationDate":1774109577656,"contentHash":"393b2ec0becc479a","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdMath.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"stdMath":{"0.8.28":{"default":{"path":"StdMath.sol/stdMath.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdStorage.sol":{"lastModificationDate":1774109577667,"contentHash":"8b834c63078a7790","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdStorage.sol","imports":["build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"stdStorage":{"0.8.28":{"default":{"path":"StdStorage.sol/stdStorage.json","build_id":"dd88e620fb29e300"}}},"stdStorageSafe":{"0.8.28":{"default":{"path":"StdStorage.sol/stdStorageSafe.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdStyle.sol":{"lastModificationDate":1774109577656,"contentHash":"dd683e581612d9d7","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdStyle.sol","imports":["build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdStyle":{"0.8.28":{"default":{"path":"StdStyle.sol/StdStyle.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdToml.sol":{"lastModificationDate":1774109577656,"contentHash":"66561afcd2e48189","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdToml.sol","imports":["build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"stdToml":{"0.8.28":{"default":{"path":"StdToml.sol/stdToml.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/StdUtils.sol":{"lastModificationDate":1774109577656,"contentHash":"476c1e8becd32967","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/StdUtils.sol","imports":["build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdUtils":{"0.8.28":{"default":{"path":"StdUtils.sol/StdUtils.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/Test.sol":{"lastModificationDate":1774109577656,"contentHash":"bd0e131f71fa5665","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/Test.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"Test":{"0.8.28":{"default":{"path":"Test.sol/Test.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/Vm.sol":{"lastModificationDate":1774109577656,"contentHash":"55e749aafb49ce93","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/Vm.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"Vm":{"0.8.28":{"default":{"path":"Vm.sol/Vm.json","build_id":"dd88e620fb29e300"}}},"VmSafe":{"0.8.28":{"default":{"path":"Vm.sol/VmSafe.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/console.sol":{"lastModificationDate":1774109577656,"contentHash":"c2f250cceea75093","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/console.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"console":{"0.8.28":{"default":{"path":"console.sol/console.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/console2.sol":{"lastModificationDate":1774109577656,"contentHash":"fb84555cebe27360","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/console2.sol","imports":["build/libs/forge-std/src/console.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC1155.sol":{"lastModificationDate":1774109577656,"contentHash":"6ae5aa0ad6ba5f27","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC1155.sol","imports":["build/libs/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC1155":{"0.8.28":{"default":{"path":"IERC1155.sol/IERC1155.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC165.sol":{"lastModificationDate":1774109577656,"contentHash":"2a62becd43031d2b","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC165.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC165":{"0.8.28":{"default":{"path":"IERC165.sol/IERC165.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC20.sol":{"lastModificationDate":1774109577656,"contentHash":"2ddaac16020da63a","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC20.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC20":{"0.8.28":{"default":{"path":"IERC20.sol/IERC20.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC4626.sol":{"lastModificationDate":1774109577667,"contentHash":"6211c8dd595013af","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC4626.sol","imports":["build/libs/forge-std/src/interfaces/IERC20.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC4626":{"0.8.28":{"default":{"path":"IERC4626.sol/IERC4626.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC6909.sol":{"lastModificationDate":1774109577656,"contentHash":"07b93abd88c3ba3d","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC6909.sol","imports":["build/libs/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC6909":{"0.8.28":{"default":{"path":"IERC6909.sol/IERC6909.json","build_id":"dd88e620fb29e300"}}},"IERC6909ContentURI":{"0.8.28":{"default":{"path":"IERC6909.sol/IERC6909ContentURI.json","build_id":"dd88e620fb29e300"}}},"IERC6909Metadata":{"0.8.28":{"default":{"path":"IERC6909.sol/IERC6909Metadata.json","build_id":"dd88e620fb29e300"}}},"IERC6909TokenSupply":{"0.8.28":{"default":{"path":"IERC6909.sol/IERC6909TokenSupply.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC721.sol":{"lastModificationDate":1774109577656,"contentHash":"2ff3e78e7eda1222","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC721.sol","imports":["build/libs/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC721":{"0.8.28":{"default":{"path":"IERC721.sol/IERC721.json","build_id":"dd88e620fb29e300"}}},"IERC721Enumerable":{"0.8.28":{"default":{"path":"IERC721.sol/IERC721Enumerable.json","build_id":"dd88e620fb29e300"}}},"IERC721Metadata":{"0.8.28":{"default":{"path":"IERC721.sol/IERC721Metadata.json","build_id":"dd88e620fb29e300"}}},"IERC721TokenReceiver":{"0.8.28":{"default":{"path":"IERC721.sol/IERC721TokenReceiver.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC7540.sol":{"lastModificationDate":1774109577667,"contentHash":"27be4839b9dedb2e","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC7540.sol","imports":["build/libs/forge-std/src/interfaces/IERC165.sol","build/libs/forge-std/src/interfaces/IERC7575.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC7540":{"0.8.28":{"default":{"path":"IERC7540.sol/IERC7540.json","build_id":"dd88e620fb29e300"}}},"IERC7540Deposit":{"0.8.28":{"default":{"path":"IERC7540.sol/IERC7540Deposit.json","build_id":"dd88e620fb29e300"}}},"IERC7540Operator":{"0.8.28":{"default":{"path":"IERC7540.sol/IERC7540Operator.json","build_id":"dd88e620fb29e300"}}},"IERC7540Redeem":{"0.8.28":{"default":{"path":"IERC7540.sol/IERC7540Redeem.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IERC7575.sol":{"lastModificationDate":1774109577667,"contentHash":"924a88aa9f18713b","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IERC7575.sol","imports":["build/libs/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IERC7575":{"0.8.28":{"default":{"path":"IERC7575.sol/IERC7575.json","build_id":"dd88e620fb29e300"}}},"IERC7575Share":{"0.8.28":{"default":{"path":"IERC7575.sol/IERC7575Share.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/interfaces/IMulticall3.sol":{"lastModificationDate":1774109577656,"contentHash":"731463c8fd01e759","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/interfaces/IMulticall3.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"IMulticall3":{"0.8.28":{"default":{"path":"IMulticall3.sol/IMulticall3.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/src/safeconsole.sol":{"lastModificationDate":1774109577656,"contentHash":"075ad54247fa474a","interfaceReprHash":null,"sourceName":"build/libs/forge-std/src/safeconsole.sol","imports":[],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"safeconsole":{"0.8.28":{"default":{"path":"safeconsole.sol/safeconsole.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/CommonBase.t.sol":{"lastModificationDate":1774109577656,"contentHash":"020eb4d82e3b0f48","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/CommonBase.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"CommonBaseTest":{"0.8.28":{"default":{"path":"CommonBase.t.sol/CommonBaseTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/Config.t.sol":{"lastModificationDate":1774109577656,"contentHash":"7e4d523ca25f3d1f","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/Config.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/Config.sol","build/libs/forge-std/src/LibVariable.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConfig.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":"^0.8.13","artifacts":{"ConfigTest":{"0.8.28":{"default":{"path":"Config.t.sol/ConfigTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/LibVariable.t.sol":{"lastModificationDate":1774109577656,"contentHash":"7583bf4b040876e1","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/LibVariable.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/LibVariable.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":"^0.8.13","artifacts":{"LibVariableHelper":{"0.8.28":{"default":{"path":"LibVariable.t.sol/LibVariableHelper.json","build_id":"dd88e620fb29e300"}}},"LibVariableTest":{"0.8.28":{"default":{"path":"LibVariable.t.sol/LibVariableTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdAssertions.t.sol":{"lastModificationDate":1774109577656,"contentHash":"0cafbdfb5ca44977","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdAssertions.t.sol","imports":["build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/Vm.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdAssertionsTest":{"0.8.28":{"default":{"path":"StdAssertions.t.sol/StdAssertionsTest.json","build_id":"dd88e620fb29e300"}}},"TestMockCall":{"0.8.28":{"default":{"path":"StdAssertions.t.sol/TestMockCall.json","build_id":"dd88e620fb29e300"}}},"VmInternal":{"0.8.28":{"default":{"path":"StdAssertions.t.sol/VmInternal.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdChains.t.sol":{"lastModificationDate":1774109577656,"contentHash":"e384aa193a5316fe","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdChains.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdChainsMock":{"0.8.28":{"default":{"path":"StdChains.t.sol/StdChainsMock.json","build_id":"dd88e620fb29e300"}}},"StdChainsTest":{"0.8.28":{"default":{"path":"StdChains.t.sol/StdChainsTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdCheats.t.sol":{"lastModificationDate":1774109577660,"contentHash":"cd4b2e8c89bf5b7b","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdCheats.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IERC20.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"Bar":{"0.8.28":{"default":{"path":"StdCheats.t.sol/Bar.json","build_id":"dd88e620fb29e300"}}},"BarERC1155":{"0.8.28":{"default":{"path":"StdCheats.t.sol/BarERC1155.json","build_id":"dd88e620fb29e300"}}},"BarERC721":{"0.8.28":{"default":{"path":"StdCheats.t.sol/BarERC721.json","build_id":"dd88e620fb29e300"}}},"MockContractPayable":{"0.8.28":{"default":{"path":"StdCheats.t.sol/MockContractPayable.json","build_id":"dd88e620fb29e300"}}},"MockContractWithConstructorArgs":{"0.8.28":{"default":{"path":"StdCheats.t.sol/MockContractWithConstructorArgs.json","build_id":"dd88e620fb29e300"}}},"MockUSDC":{"0.8.28":{"default":{"path":"StdCheats.t.sol/MockUSDC.json","build_id":"dd88e620fb29e300"}}},"MockUSDT":{"0.8.28":{"default":{"path":"StdCheats.t.sol/MockUSDT.json","build_id":"dd88e620fb29e300"}}},"RevertingContract":{"0.8.28":{"default":{"path":"StdCheats.t.sol/RevertingContract.json","build_id":"dd88e620fb29e300"}}},"StdCheatsForkTest":{"0.8.28":{"default":{"path":"StdCheats.t.sol/StdCheatsForkTest.json","build_id":"dd88e620fb29e300"}}},"StdCheatsMock":{"0.8.28":{"default":{"path":"StdCheats.t.sol/StdCheatsMock.json","build_id":"dd88e620fb29e300"}}},"StdCheatsTest":{"0.8.28":{"default":{"path":"StdCheats.t.sol/StdCheatsTest.json","build_id":"dd88e620fb29e300"}}},"USDCLike":{"0.8.28":{"default":{"path":"StdCheats.t.sol/USDCLike.json","build_id":"dd88e620fb29e300"}}},"USDTLike":{"0.8.28":{"default":{"path":"StdCheats.t.sol/USDTLike.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdConstants.t.sol":{"lastModificationDate":1774109577660,"contentHash":"45b5f73b628cf97d","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdConstants.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"Dummy":{"0.8.28":{"default":{"path":"StdConstants.t.sol/Dummy.json","build_id":"dd88e620fb29e300"}}},"StdConstantsTest":{"0.8.28":{"default":{"path":"StdConstants.t.sol/StdConstantsTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdError.t.sol":{"lastModificationDate":1774109577660,"contentHash":"b6679380c8f3fa89","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdError.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"ErrorsTest":{"0.8.28":{"default":{"path":"StdError.t.sol/ErrorsTest.json","build_id":"dd88e620fb29e300"}}},"StdErrorsTest":{"0.8.28":{"default":{"path":"StdError.t.sol/StdErrorsTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdJson.t.sol":{"lastModificationDate":1774109577660,"contentHash":"43992737cf1e220b","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdJson.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdJsonTest":{"0.8.28":{"default":{"path":"StdJson.t.sol/StdJsonTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdMath.t.sol":{"lastModificationDate":1774109577660,"contentHash":"2ec51be20fd320a3","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdMath.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdMathMock":{"0.8.28":{"default":{"path":"StdMath.t.sol/StdMathMock.json","build_id":"dd88e620fb29e300"}}},"StdMathTest":{"0.8.28":{"default":{"path":"StdMath.t.sol/StdMathTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdStorage.t.sol":{"lastModificationDate":1774109577667,"contentHash":"960fe5af2417a3a6","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdStorage.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdStorageTest":{"0.8.28":{"default":{"path":"StdStorage.t.sol/StdStorageTest.json","build_id":"dd88e620fb29e300"}}},"StorageTest":{"0.8.28":{"default":{"path":"StdStorage.t.sol/StorageTest.json","build_id":"dd88e620fb29e300"}}},"StorageTestTarget":{"0.8.28":{"default":{"path":"StdStorage.t.sol/StorageTestTarget.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdStyle.t.sol":{"lastModificationDate":1774109577660,"contentHash":"02ddba0a115ff273","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdStyle.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdStyleTest":{"0.8.28":{"default":{"path":"StdStyle.t.sol/StdStyleTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdToml.t.sol":{"lastModificationDate":1774109577660,"contentHash":"2f641a1b90c81f0d","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdToml.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdTomlTest":{"0.8.28":{"default":{"path":"StdToml.t.sol/StdTomlTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/StdUtils.t.sol":{"lastModificationDate":1774109577660,"contentHash":"d214825f40b214c3","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/StdUtils.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"StdUtilsForkTest":{"0.8.28":{"default":{"path":"StdUtils.t.sol/StdUtilsForkTest.json","build_id":"dd88e620fb29e300"}}},"StdUtilsMock":{"0.8.28":{"default":{"path":"StdUtils.t.sol/StdUtilsMock.json","build_id":"dd88e620fb29e300"}}},"StdUtilsTest":{"0.8.28":{"default":{"path":"StdUtils.t.sol/StdUtilsTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/Vm.t.sol":{"lastModificationDate":1774109577660,"contentHash":"196b29a024722e03","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/Vm.t.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"VmTest":{"0.8.28":{"default":{"path":"Vm.t.sol/VmTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/compilation/CompilationScript.sol":{"lastModificationDate":1774109577660,"contentHash":"937a9b7932218551","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/compilation/CompilationScript.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/Script.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"CompilationScript":{"0.8.28":{"default":{"path":"CompilationScript.sol/CompilationScript.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/compilation/CompilationScriptBase.sol":{"lastModificationDate":1774109577660,"contentHash":"3a6f50db485cf89c","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/compilation/CompilationScriptBase.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/Script.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"CompilationScriptBase":{"0.8.28":{"default":{"path":"CompilationScriptBase.sol/CompilationScriptBase.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/compilation/CompilationTest.sol":{"lastModificationDate":1774109577660,"contentHash":"6638e8b486014066","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/compilation/CompilationTest.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"CompilationTest":{"0.8.28":{"default":{"path":"CompilationTest.sol/CompilationTest.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"build/libs/forge-std/test/compilation/CompilationTestBase.sol":{"lastModificationDate":1774109577660,"contentHash":"9a5c7f67f6070d33","interfaceReprHash":null,"sourceName":"build/libs/forge-std/test/compilation/CompilationTestBase.sol","imports":["build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/StdAssertions.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdError.sol","build/libs/forge-std/src/StdInvariant.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdToml.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Test.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.8.13, <0.9.0","artifacts":{"CompilationTestBase":{"0.8.28":{"default":{"path":"CompilationTestBase.sol/CompilationTestBase.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true},"scripts/DeployPaymentVerifier.s.sol":{"lastModificationDate":1775996676036,"contentHash":"a41fc099ee33fdf2","interfaceReprHash":null,"sourceName":"scripts/DeployPaymentVerifier.s.sol","imports":["build/PaymentVerifier.sol","build/libs/forge-std/src/Base.sol","build/libs/forge-std/src/Script.sol","build/libs/forge-std/src/StdChains.sol","build/libs/forge-std/src/StdCheats.sol","build/libs/forge-std/src/StdConstants.sol","build/libs/forge-std/src/StdJson.sol","build/libs/forge-std/src/StdMath.sol","build/libs/forge-std/src/StdStorage.sol","build/libs/forge-std/src/StdStyle.sol","build/libs/forge-std/src/StdUtils.sol","build/libs/forge-std/src/Vm.sol","build/libs/forge-std/src/console.sol","build/libs/forge-std/src/console2.sol","build/libs/forge-std/src/interfaces/IMulticall3.sol","build/libs/forge-std/src/safeconsole.sol"],"versionRequirement":"^0.8.24","artifacts":{"DeployPaymentVerifier":{"0.8.28":{"default":{"path":"DeployPaymentVerifier.s.sol/DeployPaymentVerifier.json","build_id":"dd88e620fb29e300"}}}},"seenByCompiler":true}},"builds":["dd88e620fb29e300"],"profiles":{"default":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode.object","evm.bytecode.sourceMap","evm.bytecode.linkReferences","evm.deployedBytecode.object","evm.deployedBytecode.sourceMap","evm.deployedBytecode.linkReferences","evm.deployedBytecode.immutableReferences","evm.methodIdentifiers","metadata"]}},"evmVersion":"prague","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"prague","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}}},"preprocessed":false,"mocks":[]}
@@ -1,78 +0,0 @@
1
- # X402 Payment Circuit
2
-
3
- This directory contains the ZK-SNARK circuit for x402 payment verification.
4
-
5
- ## Files
6
-
7
- - `payment.circom` - Main circuit definition
8
- - `payment.test.mjs` - Test script for proof generation and verification
9
-
10
- ## Building the Circuit
11
-
12
- ```bash
13
- npm run build:circuit
14
- # or
15
- bash scripts/build.sh
16
- ```
17
-
18
- The build script will:
19
- 1. Compile the circuit to R1CS, WASM, and symbol files
20
- 2. Download the Powers of Tau file (14th power)
21
- 3. Perform Groth16 trusted setup (demo mode, not secure for production)
22
- 4. Generate verification key and Solidity verifier contract
23
-
24
- ## Testing
25
-
26
- To test the circuit with sample inputs:
27
-
28
- ```bash
29
- npm run test:circuit
30
- # or
31
- node circuits/payment.test.mjs
32
- ```
33
-
34
- The test script:
35
- - Generates a valid set of test inputs
36
- - Computes the Poseidon commitment hash
37
- - Generates a ZK proof using the compiled circuit
38
- - Verifies the proof using the verification key
39
- - Validates that the commitment matches the expected value
40
-
41
- ## Circuit Design
42
-
43
- The X402Payment circuit verifies:
44
- 1. The transaction hash commitment exists
45
- 2. Payment was sent to the specified recipient
46
- 3. Payment amount meets or exceeds the required minimum
47
- 4. Transaction is recent enough (timestamp check)
48
-
49
- ### Inputs
50
-
51
- **Private inputs:**
52
- - `txHashPacked[2]` - Transaction hash (2x 128-bit fields = 256-bit total)
53
- - `recipientLow` - Recipient address lower 128 bits
54
- - `recipientHigh` - Recipient address higher 32 bits
55
- - `amount` - Payment amount in USDC smallest unit (6 decimals)
56
- - `timestamp` - Block timestamp of the transaction
57
- - `minAmount` - Minimum required payment amount
58
-
59
- **Public inputs:**
60
- - `commitment` - Poseidon commitment to all private inputs
61
- - `minAmountPublic` - Public minimum amount for verification
62
- - `timestampMax` - Maximum allowed timestamp for the transaction
63
-
64
- ### Constraints
65
-
66
- 1. `minAmount === minAmountPublic` - Private min amount matches public
67
- 2. Commitment computed as `poseidon6(txHashPacked[0], txHashPacked[1], recipientLow, amount, timestamp, minAmount)`
68
-
69
- ## Integration with Lemma
70
-
71
- The circuit is designed to work with Lemma's `disclosure.condition` API. Once a proof is generated, it can be used to gate access to selectively disclosed attributes behind payment verification.
72
-
73
- ## Next Steps
74
-
75
- 1. Upload the compiled circuit (WASM + zkey) to IPFS
76
- 2. Register the circuit with Lemma using `circuits.register()`
77
- 3. Integrate with the x402 proof generator service
78
- 4. Update the verification key and contract address in the production deployment
@@ -1,272 +0,0 @@
1
- /**
2
- * Comprehensive test for payment.circom with edge cases
3
- * Usage: node payment-comprehensive.test.mjs
4
- */
5
- import * as snarkjs from "snarkjs";
6
- import { readFileSync, existsSync } from "fs";
7
- import { poseidon6 } from "poseidon-lite";
8
-
9
- // File path configuration
10
- const WASM_PATH = "build/payment_js/payment.wasm";
11
- const ZKEY_PATH = "build/payment_final.zkey";
12
- const VKEY_PATH = "build/verification_key.json";
13
-
14
- // テストケース
15
- const TEST_CASES = [
16
- {
17
- name: "Basic valid payment",
18
- description: "Minimum amount exactly matches requirement",
19
- inputs: () => {
20
- const txHash = 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdefn;
21
- const recipient = 0x2222222222222222222222222222222222222222n;
22
- const amount = 1000n;
23
- const minAmount = 1000n;
24
- const timestamp = 1712000000n;
25
- const timestampMax = 1712003600n;
26
-
27
- const txHashUpper = txHash >> 128n;
28
- const txHashLower = txHash & ((1n << 128n) - 1n);
29
- const recipientLow = recipient & ((1n << 128n) - 1n);
30
- const recipientHigh = recipient >> 128n;
31
-
32
- const commitment = poseidon6([
33
- txHashUpper, txHashLower, recipientLow, amount, timestamp, minAmount
34
- ]);
35
-
36
- return {
37
- private: {
38
- txHashPacked: [txHashUpper.toString(), txHashLower.toString()],
39
- recipientLow: recipientLow.toString(),
40
- recipientHigh: recipientHigh.toString(),
41
- amount: amount.toString(),
42
- timestamp: timestamp.toString(),
43
- minAmount: minAmount.toString(),
44
- },
45
- public: {
46
- commitment: commitment.toString(),
47
- minAmountPublic: minAmount.toString(),
48
- timestampMax: timestampMax.toString()
49
- }
50
- };
51
- },
52
- shouldPass: true
53
- },
54
- {
55
- name: "Payment above minimum",
56
- description: "Amount is greater than minimum requirement",
57
- inputs: () => {
58
- const txHash = 0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890n;
59
- const recipient = 0x3333333333333333333333333333333333333333n;
60
- const amount = 5000n;
61
- const minAmount = 1000n;
62
- const timestamp = 1712001000n;
63
- const timestampMax = 1712004600n;
64
-
65
- const txHashUpper = txHash >> 128n;
66
- const txHashLower = txHash & ((1n << 128n) - 1n);
67
- const recipientLow = recipient & ((1n << 128n) - 1n);
68
- const recipientHigh = recipient >> 128n;
69
-
70
- const commitment = poseidon6([
71
- txHashUpper, txHashLower, recipientLow, amount, timestamp, minAmount
72
- ]);
73
-
74
- return {
75
- private: {
76
- txHashPacked: [txHashUpper.toString(), txHashLower.toString()],
77
- recipientLow: recipientLow.toString(),
78
- recipientHigh: recipientHigh.toString(),
79
- amount: amount.toString(),
80
- timestamp: timestamp.toString(),
81
- minAmount: minAmount.toString(),
82
- },
83
- public: {
84
- commitment: commitment.toString(),
85
- minAmountPublic: minAmount.toString(),
86
- timestampMax: timestampMax.toString()
87
- }
88
- };
89
- },
90
- shouldPass: true
91
- },
92
- {
93
- name: "Wrong commitment",
94
- description: "Incorrect commitment hash should fail verification",
95
- inputs: () => {
96
- const txHash = 0x1111111111111111111111111111111111111111111111111111111111111111n;
97
- const recipient = 0x4444444444444444444444444444444444444444n;
98
- const amount = 1000n;
99
- const minAmount = 1000n;
100
- const timestamp = 1712002000n;
101
- const timestampMax = 1712005600n;
102
-
103
- const txHashUpper = txHash >> 128n;
104
- const txHashLower = txHash & ((1n << 128n) - 1n);
105
- const recipientLow = recipient & ((1n << 128n) - 1n);
106
- const recipientHigh = recipient >> 128n;
107
-
108
- // Use wrong commitment (off by one)
109
- const wrongCommitment = poseidon6([
110
- txHashUpper, txHashLower, recipientLow, amount, timestamp, minAmount + 1n
111
- ]);
112
-
113
- return {
114
- private: {
115
- txHashPacked: [txHashUpper.toString(), txHashLower.toString()],
116
- recipientLow: recipientLow.toString(),
117
- recipientHigh: recipientHigh.toString(),
118
- amount: amount.toString(),
119
- timestamp: timestamp.toString(),
120
- minAmount: minAmount.toString(),
121
- },
122
- public: {
123
- commitment: wrongCommitment.toString(),
124
- minAmountPublic: minAmount.toString(),
125
- timestampMax: timestampMax.toString()
126
- }
127
- };
128
- },
129
- shouldPass: false
130
- },
131
- {
132
- name: "Mismatched minAmount",
133
- description: "Private and public minAmount don't match",
134
- inputs: () => {
135
- const txHash = 0x2222222222222222222222222222222222222222222222222222222222222222n;
136
- const recipient = 0x5555555555555555555555555555555555555555n;
137
- const amount = 2000n;
138
- const minAmountPrivate = 1000n;
139
- const minAmountPublic = 1500n; // Different from private!
140
- const timestamp = 1712003000n;
141
- const timestampMax = 1712006600n;
142
-
143
- const txHashUpper = txHash >> 128n;
144
- const txHashLower = txHash & ((1n << 128n) - 1n);
145
- const recipientLow = recipient & ((1n << 128n) - 1n);
146
- const recipientHigh = recipient >> 128n;
147
-
148
- // Commitment uses private minAmount
149
- const commitment = poseidon6([
150
- txHashUpper, txHashLower, recipientLow, amount, timestamp, minAmountPrivate
151
- ]);
152
-
153
- return {
154
- private: {
155
- txHashPacked: [txHashUpper.toString(), txHashLower.toString()],
156
- recipientLow: recipientLow.toString(),
157
- recipientHigh: recipientHigh.toString(),
158
- amount: amount.toString(),
159
- timestamp: timestamp.toString(),
160
- minAmount: minAmountPrivate.toString(),
161
- },
162
- public: {
163
- commitment: commitment.toString(),
164
- minAmountPublic: minAmountPublic.toString(),
165
- timestampMax: timestampMax.toString()
166
- }
167
- };
168
- },
169
- shouldPass: false
170
- }
171
- ];
172
-
173
- // Check if build files exist
174
- function checkBuildFiles() {
175
- const files = [WASM_PATH, ZKEY_PATH, VKEY_PATH];
176
- const missingFiles = files.filter(file => !existsSync(file));
177
-
178
- if (missingFiles.length > 0) {
179
- console.error("❌ Missing build files:");
180
- missingFiles.forEach(file => console.error(` - ${file}`));
181
- console.error("\n⚠️ Please run the build script first:");
182
- console.error(" npm run build:circuit");
183
- console.error(" or");
184
- console.error(" bash scripts/build.sh");
185
- return false;
186
- }
187
-
188
- return true;
189
- }
190
-
191
- async function runTestCase(testCase) {
192
- console.log(`\n=== ${testCase.name} ===`);
193
- console.log(`Description: ${testCase.description}`);
194
-
195
- const { private: privateInputs, public: publicInputs } = testCase.inputs();
196
- const input = { ...privateInputs, ...publicInputs };
197
-
198
- try {
199
- console.log("Generating proof...");
200
- const { proof, publicSignals } = await snarkjs.groth16.fullProve(
201
- input,
202
- WASM_PATH,
203
- ZKEY_PATH
204
- );
205
-
206
- const vKey = JSON.parse(readFileSync(VKEY_PATH, "utf8"));
207
- const valid = await snarkjs.groth16.verify(vKey, publicSignals, proof);
208
-
209
- const passed = valid === testCase.shouldPass;
210
-
211
- if (passed) {
212
- console.log(`✅ ${testCase.shouldPass ? "Proof is VALID as expected" : "Proof is INVALID as expected"}`);
213
- return true;
214
- } else {
215
- console.log(`❌ Unexpected result:`);
216
- console.log(` Expected: ${testCase.shouldPass ? "valid" : "invalid"}`);
217
- console.log(` Got: ${valid ? "valid" : "invalid"}`);
218
- return false;
219
- }
220
-
221
- } catch (error) {
222
- // If test case should fail and we get an error, that might be expected
223
- if (!testCase.shouldPass && error.message.includes("Error in template")) {
224
- console.log(`✅ Circuit rejected invalid inputs as expected`);
225
- return true;
226
- }
227
-
228
- console.log(`❌ Error: ${error.message}`);
229
- return false;
230
- }
231
- }
232
-
233
- async function main() {
234
- console.log("=== X402 Payment Circuit Comprehensive Test ===\n");
235
-
236
- // Check build files
237
- if (!checkBuildFiles()) {
238
- process.exit(1);
239
- }
240
-
241
- let passedCount = 0;
242
- const totalCount = TEST_CASES.length;
243
-
244
- for (const testCase of TEST_CASES) {
245
- const passed = await runTestCase(testCase);
246
- if (passed) passedCount++;
247
- }
248
-
249
- console.log("\n=== Summary ===");
250
- console.log(`Passed: ${passedCount}/${totalCount}`);
251
-
252
- if (passedCount === totalCount) {
253
- console.log("✅ All tests passed!");
254
- process.exit(0);
255
- } else {
256
- console.log(`❌ ${totalCount - passedCount} test(s) failed`);
257
- process.exit(1);
258
- }
259
- }
260
-
261
- // Execute main function
262
- main().catch(error => {
263
- console.error("Unhandled error:", error);
264
- process.exit(1);
265
- });
266
-
267
- // Fallback to force process exit
268
- // snarkjs may leave background processes running
269
- setTimeout(() => {
270
- console.warn("⚠️ Force exiting process after timeout");
271
- process.exit(0);
272
- }, 60000); // Force exit after 60 seconds (comprehensive tests may take longer)
@@ -1,89 +0,0 @@
1
- pragma circom 2.1.0;
2
-
3
- include "circomlib/circuits/poseidon.circom";
4
-
5
- /**
6
- * X402Payment — Payment verification circuit for x402 micropayments.
7
- *
8
- * Proves that the prover knows a valid x402 payment transaction
9
- * with the specified recipient, amount, and timestamp. This circuit
10
- * is used with Lemma's disclosure.condition API to gate access to
11
- * selectively disclosed attributes behind payment verification.
12
- *
13
- * The circuit verifies:
14
- * 1. The transaction hash commitment exists
15
- * 2. Payment was sent to the specified recipient
16
- * 3. Payment amount meets or exceeds the required minimum
17
- * 4. Transaction is recent enough (timestamp check)
18
- *
19
- * Private inputs:
20
- * txHashPacked[2] Transaction hash (2x 128-bit fields = 256-bit total)
21
- * recipientLow Recipient address lower 128 bits
22
- * recipientHigh Recipient address higher 32 bits
23
- * amount Payment amount in USDC smallest unit (6 decimals)
24
- * timestamp Block timestamp of the transaction
25
- * minAmount Minimum required payment amount
26
- *
27
- * Public inputs:
28
- * commitment Poseidon commitment to all private inputs
29
- * minAmountPublic Public minimum amount for verification
30
- * timestampMax Maximum allowed timestamp for the transaction
31
- */
32
-
33
- template X402Payment() {
34
- // ── Private inputs ──────────────────────────────────────────────
35
- // Transaction hash (256-bit hash split into 2 field elements)
36
- signal input txHashPacked[2];
37
-
38
- // Recipient address (160-bit split into 2 field elements for simplicity)
39
- signal input recipientLow;
40
- signal input recipientHigh;
41
-
42
- // Payment amount in smallest unit
43
- signal input amount;
44
-
45
- // Transaction timestamp
46
- signal input timestamp;
47
-
48
- // Minimum amount requirement (private, matched with public)
49
- signal input minAmount;
50
-
51
- // ── Public inputs ───────────────────────────────────────────────
52
- signal input commitment;
53
-
54
- // Public minimum amount for verification
55
- signal input minAmountPublic;
56
-
57
- // Maximum allowed timestamp (freshness check)
58
- signal input timestampMax;
59
-
60
- // ── Constraints ─────────────────────────────────────────────────
61
-
62
- // 1. Verify minAmount matches public minAmountPublic
63
- minAmount === minAmountPublic;
64
-
65
- // 2. Verify amount >= minAmount
66
- // Since we can't do direct comparison in Circom, we use:
67
- // amount - minAmount must be a valid field element (non-negative)
68
- // The constraint amount === minAmount + delta ensures amount >= minAmount
69
- // We'll verify this externally and just prove knowledge of valid values
70
-
71
- // 3. Verify timestamp is within acceptable range
72
- // timestamp <= timestampMax (freshness check)
73
- // We use: timestampMax - timestamp must be non-negative
74
- // Similar to above, we rely on range proofs outside circuit for this check
75
-
76
- // 4. Create commitment from all inputs
77
- // Using 6 inputs to poseidon for complete binding
78
- component hasher = Poseidon(6);
79
- hasher.inputs[0] <== txHashPacked[0];
80
- hasher.inputs[1] <== txHashPacked[1];
81
- hasher.inputs[2] <== recipientLow;
82
- hasher.inputs[3] <== amount;
83
- hasher.inputs[4] <== timestamp;
84
- hasher.inputs[5] <== minAmount;
85
-
86
- commitment === hasher.out;
87
- }
88
-
89
- component main {public [commitment, minAmountPublic, timestampMax]} = X402Payment();