{"_id":"ledgeroot","_rev":"17-a5b233534d972abd68da17791cbb3659","name":"ledgeroot","dist-tags":{"latest":"0.9.1"},"versions":{"0.1.0":{"name":"ledgeroot","version":"0.1.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.1.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"a957d59e2155a0ad385c7252d58eefdc4a7e4bb8","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.1.0.tgz","fileCount":104,"integrity":"sha512-3oaKF2zRj3fmLFWhJgTGCGkmVq6KhH5JWbGNie5y5WInWUGSYS9YLV/KdavMPC9TpL6GG+9L0AZgyFsf7PfsLQ==","signatures":[{"sig":"MEQCIGqG2hWOTbSAQLt2Gb9LhwhFU+MyZjsJZtRrfG3QI6P3AiBPQQWB4dVMNBuN0P54ZGR4xnKqe+s8cwhygk0yQa0elQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143896},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"aa4f373f768ee926eb3bf0ca15763a4b1cb201d7","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.1.0_1789604459403_0.12348972698921168","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"ledgeroot","version":"0.1.1","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.1.1","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"538c7ce34feb2441c96083482c9179cd23e72f9a","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.1.1.tgz","fileCount":112,"integrity":"sha512-QE4JUrnUm55EPrYa+h4wuc2JSE3J/qr9Fuatf2tn2hysHKynkmdbPax27+Bc01HbH68Sr8KQ1Eb+Q5NQGDqNig==","signatures":[{"sig":"MEUCIGxRamTXzqLBDX8u/XAFICa8USz03IP0he/sxG3Ba5DwAiEAyVX7X92nJ3twe8jPboBmhsUAJ/iKthHad/qn3WUfKtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153520},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"94f850d05ae0aa22983f443f73aaeb9a64266231","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.1.1_1789606475415_0.4714472869663249","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"ledgeroot","version":"0.1.2","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.1.2","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"e4b6a0e3639ab3d0adcd2cb8b5ab33cef7f647db","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.1.2.tgz","fileCount":112,"integrity":"sha512-mVMIxEvzwnpIN1W1JJfj1hQRPoT2uei/Az4XA/1W/BQYwTZAgZHdLeD6O5BnwgETxeRD5gQ92jGHPL5SE7EMsw==","signatures":[{"sig":"MEYCIQCEBfQhZAg5a1zgQ8PSi8nwfSI26DLYYUa8u8fqfOA7vAIhAKdXCB3q98rGutsu1UWpd87I+Z4AMlQKoDH+i11TR23l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160422},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"dd1576416467aeac8f5a5720bff0649bd15faefc","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.1.2_1789610028136_0.9875354165831465","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"ledgeroot","version":"0.2.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.2.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"0ceb0c5473c1534975f1612a88b9addd7ae72e15","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.2.0.tgz","fileCount":120,"integrity":"sha512-HcDFuaQGOpT+vxpy3ZlMY+7D75v7+vJK7kgLO5bUOFnJxEjssqCarNeOPUv3q0TKRoWuCgr4arc8Bd7qwjg7XA==","signatures":[{"sig":"MEYCIQDQ7aA7qz7AnkC+L48jjoqKb/Lp9LmC8/Tc6eFWOBah7wIhAIdkihNwQEPBmcG3kqM1cA19GDMqd4u0kecF79j5fuFr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID7s6m4UDSNCo3tjXnpecOxTza6P/LfrAiT2HMi64a2eAiEAid8jC97rQVENBhOnNhlz0Che3McwGWv0h9egVXhTHk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220828},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"39c43d23ca141885f689016b5faf0e26d95898c6","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.2.0_1789692242493_0.5277105690300465","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"ledgeroot","version":"0.2.1","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.2.1","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"b0ca244438c2143f5a45a1904265dba3feffebd3","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.2.1.tgz","fileCount":120,"integrity":"sha512-biQ79IXqSdEZWl14clSBFeZ8EcjMWXo7JYCDbcGh52UFeaRKf9WtWFICrO3o0IWxQouLwbkS59Lf9aXzk/Q5SQ==","signatures":[{"sig":"MEUCIQDV9CWgrw8dtz6Rc9MWMrg6qVAW+QNUtPoGrg94472IzQIgWrsbxLL4E7KWGCCIMi8UCNNt8sF70IDYT9xvVcy52T4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGiLmjT0sKTfbKIj1NFieOzW5Lfihv8jmJ3rvU0CMTQsAiEAhpwajGOW5Hg3eS61jcRIjJgl3ROznX5xPUiFDVHNnmg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220950},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"f3ceff9732b73a26f8edb259a7a60749bd4906b7","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.2.1_1789704574773_0.42987398416473566","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"ledgeroot","version":"0.3.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.3.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"699549ccfe71fe8ea51d70e3f8dd2bb4a7675835","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.3.0.tgz","fileCount":120,"integrity":"sha512-uKRQx7psr9tbDk+X601aO0MDNEsIKPxiJtxHQ9c39Fa8HhL5WHf/3ayKBYXMBVJNqvefzaLleZ9czGB8PAzdLA==","signatures":[{"sig":"MEQCIAoBbHyKg6W4+6mnTGKkrep4pkaCqJ6SIwuvBD+hBNFGAiAcQP3RWRryU8D+1bPfOXX9zEco+dj1O/aOA52bkcd68g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHYh/9mqNBP6PsVx98p/3x3siRkXzZxTyekjmz2hb8krAiBen31y+LaofslNyczFr/OweDCQtwIBa/+cFnHKVJ+mdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222469},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"00f01949c3768ce6ac88fd1c71273059c0ad2d76","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.3.0_1789709476991_0.8195514325933888","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"ledgeroot","version":"0.4.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.4.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"7af6c60b25d60b2ecf71f84286e405979f52a8a7","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.4.0.tgz","fileCount":120,"integrity":"sha512-8gqDsiNZC3b1XOZ2zlXPIGIwToGQgCFSnrquB8ut2EvusG+nsK21RJ46gzTgbI+L2brI2YBIPSnb0tqEF9KjtA==","signatures":[{"sig":"MEQCIAKoy+w/Coyua8dHGV4uOcYOr1Ze8MFKUt6zqWEUHiG5AiBqDqp0UMvsIfwn+MBbPaLzYGo2yN3XqKfydYHJrgBEuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC4Jlez7lcZnZtWQMu99NLQZd5gU1VeH+0uUrZfRrXv+QIhANEsXYs1VDRfEFkQ3CuG3QzHDw3Da9KH2lpl+TEDZwyt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232637},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"0b1942ed04f7e0b2ab997f8aa940c0b442fb915c","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.4.0_1789712997214_0.2600115107341503","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"ledgeroot","version":"0.4.1","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.4.1","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"516539a144e687285b3d0f9279a5cc71de97981e","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.4.1.tgz","fileCount":120,"integrity":"sha512-royZ4cM9krqa5FN2dV16ZF5oJBDHTK2mVaAG/n+2XEE3EtyuNuOuS4gxM2rNa8LdlhV8DCnRFEOqrGC619h6gw==","signatures":[{"sig":"MEYCIQD02JXvPV2EJ5nUz0Mq9m0kf2KH8hF7rhrLgmQGlmQtQwIhAIO225/ErIMYnqddSDbReq947YQhUjCI1ElUH/qzFvt2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCEEn+rhw1Xc3xSwDdngeILyRdJpxCJInRHfOBAL5Nn4QIgf4DW6/J4TRn7YRS9h36xxqFdwouDXdkRkzVRhNX2j84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236561},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"65d55f80b80f484e2e7949032af9e892c747be0d","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.4.1_1789715260488_0.6330255944639551","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"ledgeroot","version":"0.4.2","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.4.2","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"1e981b6dde83f2ae793db835902a0a79e62ebb32","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.4.2.tgz","fileCount":121,"integrity":"sha512-Z6bCAdxoYb496lRGH0Z6hvGQmHLBeREcW6wEggGXmd5rENkyiev/KG3E3cKV2orubFFgeAFmpqWbJwaqbgsbMQ==","signatures":[{"sig":"MEYCIQCiZ50C6pc4jwoEk3Cm8yePKq3guOIOQxuUjkskErT4bQIhAJIuR9CX+eChwjDnZP9be8082P70hvUeYaisx0/K3xCr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGFpcTjDHQ2eMBW/QpI7Kx+firwtJEic8EsD5yA87PuKAiBjPzou+DOLXEbzzY6uKPX4NaLXMvmCs3dYaue03PpaYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281801},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"8105b8c1e3af625602322b94a7d05d78ea464ade","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.4.2_1789979658826_0.6696189914990558","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"ledgeroot","version":"0.5.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.5.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"33b08280ac5b5bb5607226152c902f7b8e643524","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.5.0.tgz","fileCount":121,"integrity":"sha512-9t6SeGeiyAL6eTVeJ/87xogZopDOBOulGtUZQHJW6HMqio0X64gin/EZnptlSlLkD1u57pHQ0j/Hth1W91ckNQ==","signatures":[{"sig":"MEUCIQCJ/qJlpIiHo+FwSARSVeQ8AD0TSZEq1pitPoN6/h6t3gIgaFpM0QLitOi/ziT7wbbi3Flm9QjijrDT2/eSc86Mos8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBw4ebHej+kjD5AnPxXd04OgKVenTfcTZTnNxI2SVqwtAiEAwQaSaU0P2gEKtuVu/xaVhMqRDFiGOsYUxSHWlpXhe6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286831},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js"}},"gitHead":"8d6cb8d50ffc6e3248d1d2bcfb19079d2bd8ec39","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.5.0_1789981239762_0.7679207626128812","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"ledgeroot","version":"0.5.1","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.5.1","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"646eb6e994e1404c5999f6e8cbd01c0e62ec7f07","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.5.1.tgz","fileCount":121,"integrity":"sha512-j3yk0uda9M8LycgglPZLb/VNsQz1EowJnGV2qMXlackGrgz4Zxu47/QOXdgbpFpEZNdd5m+IM4nph+deHpA0xg==","signatures":[{"sig":"MEYCIQDwc7NssU5bUGkdVK6+023oAQjBBSKfOuITSzwNvUJy4wIhAOcgLE9VLJY9XK05YuBDOpx4Gc9zfrJgwbef2+OpGQ+A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDpKzksH0j3cgSG8Z1owD7gD2TacTnJB5/RtKAa5LntEAiAmVOq83tmaQ3splHxh/9ZpNhvaKaLbcKkjoQg/x1HT2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":287044},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"0bd795a83ead8edd8a37426feab71b1cb6e8e897","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.5.1_1789996795435_0.7063378378135514","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"ledgeroot","version":"0.6.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.6.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"2fdffcecb2e44335ae8d1ba2e2c2bcf66a06ced4","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.6.0.tgz","fileCount":133,"integrity":"sha512-vlLozkF9afJA/HBNYHFLW0upE8haQ9E5xt1/UyMSW329dGashYg6ddKqgXRrNsCtzJa4JFHQwoqrucuoP4g8Zw==","signatures":[{"sig":"MEUCIQCLOGXd8J7FqoAbBfoOJ41hrAzq4EYKEHRDZSjUcmxKaAIgfRLmuZvcP3AN7DdPcf7D9R+eNkEPSVsVkY8IahqyCUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICRFLMs2EaiaXe0Car4iVsihDCzd4+ky/uTrHZHau0pxAiBV1tkCsszmmjNHiVkiRVqTL2qhIq2k1xruEqxtyNR5Lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330173},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"5a54ae8693e248ba456953771e30edee71673868","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","@x402/evm":"^2.26.0","@x402/core":"^2.26.0","@x402/fetch":"^2.26.0","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.6.0_1790039579018_0.31085398465561065","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"ledgeroot","version":"0.6.1","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.6.1","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"23f941cffbce00ab33fd7b32870e64146cef2edd","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.6.1.tgz","fileCount":133,"integrity":"sha512-fFWj78rSGNU8cJ5kq4lwB4AIXrNnLQRUzVZAh7VMdn6n/Z44JF8nNTnHDzIbQ2mFLSg/GmGFC8/I/PjTU0mM6w==","signatures":[{"sig":"MEQCIG1WBM7bGay2izm4LrDTs3ZjsZq/xsUAkDXhlpnR6AtwAiBQ5w6T/PYWMXuaX8sOVl94IAllLobKhYkvfCZ89eZAAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGVSh9PwAp+sBlOJJgQscIgQAysle3/vLplNtB7V+oyxAiB6obAdMDJDercJ/02FFHsBHSursXfERMJTLoK4XJiwzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336817},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"8b8d9481d3133f41608dcb25868a86c6ff7a9721","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","@x402/evm":"^2.26.0","@x402/core":"^2.26.0","@x402/fetch":"^2.26.0","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.6.1_1790040585710_0.45670188513598586","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"ledgeroot","version":"0.7.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.7.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"e3353c97940a6a0940781b3cbc74f1fe74abd945","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.7.0.tgz","fileCount":133,"integrity":"sha512-TvRAcnvV1TJHXco7Hs0ktutvHD7HjZKpq3EPs8DZgNlvul2oMCrWBM5wJPwTj1d/P7vG1P07V2cvTa44hvVjZA==","signatures":[{"sig":"MEYCIQCyJi24vLNzGlkVl6qhIiwDq/T6A8da18n6VKfdtUfjDQIhAIGYAWwTcrw6FbeFxJFTS97G08iI1mWevpEZRnLVF30l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC5nYNwkRjtMvg1aQnM4NMfZoRNkXz+YyLAqtG13OsrdAIhALGhTnO4ibwFJnWv7MlczDslOrZOCRwev/KdeV/qnOaw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352251},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"95100ffbc9391503e07ff9427042050956337590","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","@x402/evm":"^2.26.0","@x402/core":"^2.26.0","@x402/fetch":"^2.26.0","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.7.0_1790127913755_0.6727907788986118","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"ledgeroot","version":"0.8.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.8.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"8af3612c8fdee5e255b259229293b1c1563301d4","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.8.0.tgz","fileCount":133,"integrity":"sha512-7NhNktI83x5tS10GMpYLqWwKS1satw8hCLf/RXvsFPnX1J64owhreqroleXk2gDf3SbQ/7E7OYYYYB5pT4AKbg==","signatures":[{"sig":"MEQCIDP6Px1ugV778e9dznWqXbY/Uo5oVmVBHcgQwRudTKdHAiA9bPHXBULLw4EoXbA+tNJcFKZMP2bDNw/y/Y8yP10cPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCI9UomCssQsscqqYp+YtAKFECf7NvRwAHERomVK5CcRgIgBCfgjpQ5ELvkBShxh+yORvSgQ3qQqa0Uw6470hu3cvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361681},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"99c2c27ba8aa80d22c9e8ada4dc4a39e192e2ac4","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:buy":"tsx scripts/buy-demo.ts","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","@x402/evm":"^2.26.0","@x402/core":"^2.26.0","@x402/fetch":"^2.26.0","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.8.0_1790147897324_0.8227833135423894","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"ledgeroot","version":"0.9.0","keywords":["mcp","x402","agent","payments","audit","monad"],"license":"MIT","_id":"ledgeroot@0.9.0","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"homepage":"https://github.com/ledgeroot/ledgeroot#readme","bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"bin":{"ledgeroot":"dist/cli.js"},"dist":{"shasum":"0ad867f6b5e11eb8dc505204ea64208fa0561056","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.9.0.tgz","fileCount":129,"integrity":"sha512-MinSby5pv7y91MCMnAgbbvCuiOKSuiQqTQAwLw+byY88D5NbToLNAm/iLE7VOcaL04HZ12qPr8mZE7LY3saZmQ==","signatures":[{"sig":"MEUCIQC6r2+zBMSGz8Fe8qiBi3zMd+eUFmo0fQ4rl+SSp5c8+gIgfZC31DMouRD/VEHgjDpmcu8t0rnMJ+F14rdwG/+6I4A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH8RIrC6iRh1uo10FdSKs/jCDXNCwUelkkKCAf1S948/AiEAsVNy/Z2CH7Su9GWA0DdGE7OFbbIW9jaSsUE+eMbneG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380696},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"31b5f97ddd0cdd3b6cb738e89eee429ee7a8ddaf","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:buy":"tsx scripts/buy-demo.ts","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","@x402/evm":"^2.26.0","@x402/core":"^2.26.0","@x402/fetch":"^2.26.0","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/ledgeroot_0.9.0_1790215006801_0.17434532131026637","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"_id":"ledgeroot@0.9.1","bin":{"ledgeroot":"dist/cli.js"},"bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"dist":{"shasum":"04f70d5cb039dd22f07d99db2585e85af4422c50","tarball":"https://registry.npmjs.org/ledgeroot/-/ledgeroot-0.9.1.tgz","fileCount":129,"integrity":"sha512-jm27Buez54LIBEXwnsW3xQ/o7xFb1DP0GLYPRnlnkQ7aJrrAAdLeFRL3sMzy8vRUK4D/jMxbLi1rOXwW8NzE1w==","signatures":[{"sig":"MEUCIDXsJIyN74sBN7XOC9ktSVmEidf5AYaICMKDPaXugFpjAiEA/uNP3v7dC8/sFvacCSs/tvMJZR6Y6tuCojNW2G6aO/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDBeaYlvL7DU/ZpFzCmLJkMQBYo+IE5XHhkg/wNKEWXFgIhAIIjVZu1e3anphg+s6eQmWXQBEdWsQRxf+Xp+fYbFYE8"}],"unpackedSize":381117},"main":"dist/index.js","name":"ledgeroot","type":"module","types":"dist/index.d.ts","engines":{"node":"^22.12.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./store":{"types":"./dist/store/db.d.ts","import":"./dist/store/db.js","default":"./dist/store/db.js"},"./types":{"types":"./dist/types.d.ts"},"./anchor":{"types":"./dist/anchor/anchorer.d.ts","import":"./dist/anchor/anchorer.js","default":"./dist/anchor/anchorer.js"},"./verify":{"types":"./dist/verify/verifier.d.ts","import":"./dist/verify/verifier.js","default":"./dist/verify/verifier.js"},"./receipt":{"types":"./dist/receipt/builder.d.ts","import":"./dist/receipt/builder.js","default":"./dist/receipt/builder.js"}},"gitHead":"c974fc3d379673639bcc160d984aed689ad030b2","license":"MIT","scripts":{"dev":"tsc -p tsconfig.json --watch","demo":"tsx scripts/demo.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/server.js","anchor":"node dist/cli.js anchor","verify":"node dist/cli.js verify","demo:buy":"tsx scripts/buy-demo.ts","demo:pay":"tsx scripts/pay-demo.ts","typecheck":"tsc -p tsconfig.json --noEmit","deploy:monad":"tsx deploy/monad.ts","prepublishOnly":"npm run build && npm test"},"version":"0.9.1","_npmUser":{"name":"liangpeili","email":"liangpeili8@gmail.com"},"homepage":"https://github.com/ledgeroot/ledgeroot#readme","keywords":["mcp","x402","agent","payments","audit","monad"],"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","directories":{},"maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.6.5","viem":"^2.56.5","@x402/evm":"^2.26.0","@x402/core":"^2.26.0","@x402/fetch":"^2.26.0","canonicalize":"^5.0.0","better-sqlite3":"^13.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vitest":"^5.0.1","typescript":"^5.9.3","@types/node":"^22.20.3","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ledgeroot_0.9.1_1790215975328_0.7305429654361213"}}},"time":{"created":"2026-09-17T00:20:59.335Z","modified":"2026-09-24T02:12:55.644Z","0.1.0":"2026-09-17T00:20:59.552Z","0.1.1":"2026-09-17T00:54:35.552Z","0.1.2":"2026-09-17T01:53:48.333Z","0.2.0":"2026-09-18T00:44:02.589Z","0.2.1":"2026-09-18T04:09:34.871Z","0.3.0":"2026-09-18T05:31:17.090Z","0.4.0":"2026-09-18T06:29:57.296Z","0.4.1":"2026-09-18T07:07:40.576Z","0.4.2":"2026-09-21T08:34:18.917Z","0.5.0":"2026-09-21T09:00:39.891Z","0.5.1":"2026-09-21T13:19:55.751Z","0.6.0":"2026-09-22T01:12:59.133Z","0.6.1":"2026-09-22T01:29:45.799Z","0.7.0":"2026-09-23T01:45:13.844Z","0.8.0":"2026-09-23T07:18:17.408Z","0.9.0":"2026-09-24T01:56:46.912Z","0.9.1":"2026-09-24T02:12:55.414Z"},"bugs":{"url":"https://github.com/ledgeroot/ledgeroot/issues"},"license":"MIT","homepage":"https://github.com/ledgeroot/ledgeroot#readme","keywords":["mcp","x402","agent","payments","audit","monad"],"repository":{"url":"git+https://github.com/ledgeroot/ledgeroot.git","type":"git"},"description":"MCP payment plugin and evidence engine for agent x402 payments. Every agent payment, on the record.","maintainers":[{"name":"liangpeili","email":"liangpeili8@gmail.com"}],"readme":"<div align=\"center\">\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/ledgeroot-logo-dark.svg\">\n  <img src=\"assets/ledgeroot-logo-light.svg\" alt=\"Ledgeroot\" width=\"244\">\n</picture>\n\n# Ledgeroot\n\n### 面向 agent x402 支付的 MCP 支付插件 + 证据引擎\n\n**Every agent payment, on the record.**\n\n[![CI](https://github.com/ledgeroot/ledgeroot/actions/workflows/ci.yml/badge.svg)](https://github.com/ledgeroot/ledgeroot/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/ledgeroot)](https://www.npmjs.com/package/ledgeroot)\n![Node](https://img.shields.io/badge/node-%3E%3D22-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-blue)\n![MCP](https://img.shields.io/badge/MCP-server-informational)\n![x402](https://img.shields.io/badge/x402-payments-blueviolet)\n\n[English](./README.md) · **中文**\n\n</div>\n\n---\n\n## 看它拦下一笔被提示注入的支付\n\n```text\n$ LEDGEROOT_DRY_RUN=true npm run demo\n\n1. 签发授权令 → demo-mandate（issuer 0x19E7…ff2A）\n2. 正常支付 → paid，0.1 USDC 付给 agent402.tools/search\n3. 同 requestId 重试 → paid，deduplicated: true（不再扣款）\n4. 提示注入转账 → denied：payTo \"0x…dead\" is not bound by the mandate\n5. 一键熔断 → 已撤销 1 条授权\n6. 熔断后支付 → denied：unknown mandate \"demo-mandate\"\n7. 离线验证 → verified，3 张收据，0 个问题\n```\n\n> 摘自一次真实运行；第 4、6 行是收据里 `reason` 字段的**原文**（拒付原因由代码以英文写出）。**被拒付也是一张收据**——第 4、6 步各自带签名留痕，所以账本最后是 3 张收据，且离线验证依然干净。\n\n不用钱包、不用 USDC、不用网络、不用注册账号。完整闭环就是这些：授权 → 约束 → 支付 → 拒付 → 熔断 → 离线验证。\n\n---\n\n## 快速开始\n\n### 1. 离线跑完整闭环（60 秒）\n\n```bash\nnpm install\nnpm run build\nLEDGEROOT_DRY_RUN=true npm run demo\n```\n\n### 2. 接进 Claude Code\n\n```bash\nclaude mcp add ledgeroot \\\n  --env LEDGEROOT_PRIVATE_KEY=0x你的私钥 \\\n  --env LEDGEROOT_SIGNING_KEY=0x收据签名密钥 \\\n  --env LEDGEROOT_DB=/绝对路径/ledgeroot.sqlite \\\n  -- npx ledgeroot serve\n```\n\n之后全程对话：\n\n1. **签发授权**：说「给它授权 5 USDC 买 agent402.tools 数据」→ Claude 调 `ledgeroot_mandate_sign` → 你确认。\n2. **agent 花钱**：说「帮我调研 X，要买付费数据」→ agent 调 `ledgeroot_pay` → 策略校验 → facilitator 结算 → 六段收据。\n3. **撤销**：说「撤销它的授权」→ `ledgeroot_mandate_revoke`。\n4. **审计**：说「验证证据」→ `ledgeroot_verify`。\n\n> 自然语言解析由宿主完成。Ledgeroot 只提供结构化、确定性的工具；私钥经 `--env` 传入并留在本机。\n\n### CLI\n\n```bash\nnode dist/cli.js verify [--db <path>] [--check-chain]   # 离线验证（可选加链上校验）\nnode dist/cli.js export [--db <path>]                   # 导出证据包 JSON\nnode dist/cli.js anchor [--db <path>] [--watch] [--every <秒>] [--min-receipts <n>] [--force]\n                                                        # 提交 epoch 根上链。\n                                                        # --watch 随收据到达持续锚定；\n                                                        # 账本无新增则跳过，不会重复为同一个根付 gas\n                                                        # 换合约会自动重锚；--force 用于合约未知的记录\nnode dist/cli.js buy <url> --mandate <id> \\\n  [--method POST] [--body '<json>'] [--chain 143]        # 取一个 URL、付掉它的 402、写下收据\nnode dist/cli.js jwks                                   # 第三方验签所需的 JWKS\nnode dist/cli.js serve                                  # 以 stdio 启动 MCP server\n```\n\n### 作为库使用\n\n```ts\nimport { PolicyEngine, defaultPolicies, merkleProof, verifyMerkleProof } from \"ledgeroot\";\nimport { LedgerootStore } from \"ledgeroot/store\";\nimport { verifyReceiptChain } from \"ledgeroot/verify\";\n```\n\n子路径导出：`ledgeroot` · `/store` · `/verify` · `/anchor` · `/receipt` · `/types`。库本身**不加载 `.env`**——环境由调用方掌握（只有 CLI 与 server 入口调 `loadEnv()`）。\n\n### 真实支付与上链锚定\n\n```bash\n# Monad testnet。需要 LEDGEROOT_PRIVATE_KEY 与测试网 USDC（Circle faucet）。\nnpm run demo:pay -- <payTo地址> 0.001\nnpm run verify -- --db ./ledgeroot.sqlite\n\n# 锚定 epoch 根（合约需要 Foundry；forge-std 是 git submodule）\nforge install foundry-rs/forge-std && forge build && forge test\nLEDGEROOT_DEPLOYER_PRIVATE_KEY=... npm run deploy:monad   # owner 由 LEDGEROOT_PRIVATE_KEY 推导\nnpm run anchor -- --db ./ledgeroot.sqlite\n```\n\n---\n\n## 买入一个资源（402 流程）\n\n`ledgeroot_pay` 结算的是**调用方手里已经有报价**的支付——因为 402 握手是宿主在别处做的，而那里发生的事审计轨迹看不见。`ledgeroot_buy` 自己去把报价拿来：\n\n```text\n1  请求资源          → 402，带着卖家的支付要求\n2  选一条能付的轨     → 本构建只注册的那一条网络\n3  跑全部策略        → 对着*那份*报价，在签名之前\n4  签授权            → 只有第 3 步放行才签\n5  带支付重试        → 由卖家经它自己的 facilitator 结算\n6  记收据            → 报价进第三段、结算进第五段、\n                        响应体的哈希进第六段\n```\n\n闸门卡在**签名那一刻**——那是\"拒绝仍然免费\"的最后一个时点。被拒绝会写成一张 `denied` 收据，**带上卖家自己的报价**，并列出每一条跑过的策略的判定：一次在真实卖家处被拦下的采购，连同原因一起留在账上。\n\n| 结果 | 含义 |\n|---|---|\n| `paid` | 卖家收下了支付；收据带结算信息与交付哈希 |\n| `denied` | 策略拒绝，或卖家提供的轨我们都付不了。**两种情况下都没有签名**，尝试都会记录；卖家还没报出报价时，收据里的报价是空的 |\n| `unpaid` | 资源在没有支付的情况下返回（免费额度或 trial）。**不写收据**——没有支付可证明 |\n\n**闸门之后**的失败——传输错误，或我们递了支付之后卖家仍要钱——是**抛出而不是归类**，因为是否已结算在此无从得知。幂等占位会保留，所以重试是拒绝，而不是再买一次。\n\n> 📌 这一半的协议实现——读 402、造 payload、重试、结算——是 [`@x402/fetch`](https://www.npmjs.com/package/@x402/fetch)。我们在它上面注册**一条轨**和**一道闸门**。自己重写握手只会得到一份更差的副本，而真正有意思的问题从来不是谁会跳那段 HTTP 舞。\n\n> ⚠️ **我们要买的卖家只收主网。** agent402 实时 402 在十二条链里给了 `eip155:143`（Monad 主网），**测试网上一条都没有**。所以 `ledgeroot_buy` 默认 `chainId: 143`，而一次真实采购就是一次真实的（虽然很小的）支付。\n\n---\n\n## 为什么用 Ledgeroot\n\n- **fail-closed 是结构性的。** 每条策略都跑，第一个拒绝即中止支付，并且**拒绝本身也被记录**。不存在\"跳过一次检查然后放行\"的路径。\n- **可验证，不只是有日志。** 收据带 Ed25519 签名、哈希链互锁、commit 到链上 epoch Merkle 根。第三方**离线**即可验证——不连回、不经手任何厂商。\n- **拒付也是证据。** 被拦下的尝试与成功的支付产生同样格式的签名收据。那是 agent 任务失败唯一能被看见的地方。\n- **它真的去买，不只是结算。** `ledgeroot_buy` 自己去取资源，所以它据以判定的报价就是卖家发来的那一份，而第六段是它**实际收到**的响应体。\n- **一把钥匙动钱，一把钥匙作证。** 收据签名密钥与支付密钥刻意不互相回落。\n- **钱不碰浮点。** 全程六位小数 bigint 运算。\n- **对\"不知道\"诚实。** 证据缺失报 `incomplete`，**绝不报成被篡改**，也绝不放行。\n- **证明的是执行，不只是意图。** 一致性视图会把已付收据拿回它所属的 mandate 再校验一遍。\n- **MIT、本地 SQLite、无 SaaS、无遥测。** 什么都不会离开本机。\n\n---\n\n## 它站在哪一格\n\n**生态位：链上稳定币 × agent 小额 402 支付**（单价 $0.001–$0.05，百万笔/月量级）。\n\n这个位由**费率结构**保证，不由技术优势保证：$0.30 + 2.9% 的卡组织费率摊在 $0.005 上等于 6000%，**物理上不可行**。所以 x402 存在；也所以我们**不做大额**——大额有发票、合同、退款流程，那是 Shopify / Stripe / Visa TAP / Mastercard 的地盘。\n\n> ⚠️ 费率结构排除的是**按交易金额抽成**的对手，**不排除**按负载计费、把支付当平台功能送的云厂商——见 [competitors.md](./docs/competitors.md) §二。\n\n在这个位里，Ledgeroot 只做三件事：\n\n| 做 | 不做 |\n|---|---|\n| **授权** —— 用户自签的 mandate 约束 agent 能花多少、付给谁、到何时 | ❌ **不做托管** —— 私钥永不出本机 |\n| **执行前校验** —— fail-closed 策略引擎，五条默认策略 | ❌ **不做路由器 / 发现层** —— 分发层已被占据 |\n| **审计留痕** —— 六段收据 + 哈希链 + 上链锚定 + 离线三态验证 | ❌ **不做 LLM 推理闸门** —— 我们的优势恰恰是**确定性** |\n\n> 📌 在这个粒度下，**\"收据\"本身不是产品**（$0.005 的万分之一），它是**原料**。能收费的只有把收据变成**账**的那一层。这个定位**不影响收据的工程质量**——上层要可信，底下每张收据就必须能独立验证。\n\n### 对齐 MAS SAFR\n\nLedgeroot 的三层与 MAS《Safeguards for Agentic Finance at Runtime》的三个运行时保障功能一一对应——**我们在看到这份文档之前就独立实现了同一套架构**：\n\n| SAFR 功能 | Ledgeroot 实现 |\n|---|---|\n| 身份与权限（establish agent's identity and authority） | mandate（EIP-712 签名授权令）+ `ledgeroot_mandate_sign` |\n| 执行前评估（evaluate agent actions against controls before execution） | 策略引擎（fail-closed，五条默认策略）+ `ledgeroot_pay` 前置校验 |\n| 审计留痕（maintain a clear audit record） | 六段收据 + RFC 8785 哈希链 + epoch Merkle 根上链 + `ledgeroot_verify` 离线三态验证 |\n\n> SAFR 是自愿性框架（2026-07-03 发布）；真正有约束力的是 MAS 即将定稿的 AI 风险管理指南（覆盖 agentic AI）。两层都值得对齐——我们现在就按 SAFR 的三层实现。\n\n### 能接什么\n\n- **任意 MCP 宿主** —— Claude Code、opencode，以及任何说 MCP 的宿主（这是我们唯一维护的集成面）。\n- **x402 网关** —— 包括已上 Coinbase Bazaar 的那些。\n- **目前是 Monad** —— 默认 testnet（chainId 10143），主网（143）已接通购买、结算校验与锚定；facilitator 为 `x402-facilitator.molandak.org`。换链是补一个配置实例，不是重写；见[已知边界](#已知边界)。\n- **AP2 风格授权令** —— 可导入外部签名授权，并与本地策略取交集。\n\n---\n\n## 六段收据\n\n`意图 → 授权 → 计划 → 调用 → 交易哈希 → 交付凭证`\n\n| 段 | 内容 | 落在哪 |\n|---|---|---|\n| 1. **意图** | 自然语言说明 agent 为什么付这笔钱 | `segments.intent.text` |\n| 2. **授权** | 覆盖本次支付的 mandate + **策略交集**（mandate 实际约束了哪几条策略） | `segments.mandate` |\n| 3. **计划** | 卖家发来的 402 报价**原样**，加上它的规范哈希 —— `payTo` 与报价金额都从这里读，因此\"策略判定的是什么\"与\"收据记录的是什么\"是同一个对象 | `segments.plan` |\n| 4. **调用** | **逐条策略的判定结果**，放行的和拒付的都记 | `segments.call.policyResults` |\n| 5. **交易** | 结算协议 + `txHash` + `chainId` + `payer` | `segments.tx` |\n| 6. **交付** | 只存**响应体的哈希与字节数**，不存原文 | `segments.delivery` |\n\n几个刻意的地方：\n\n- **段间由 RFC 8785 规范化哈希互锁**：每张收据带 `prevHash` 回指上一张的 `receiptHash`，append-only，不支持原地更新（收据的 `id` 就是它内容的规范哈希——改一个字节就换了身份）。\n- **每张收据带 Ed25519 detached 签名**，JWS 式 `protected` 头，签名覆盖 `{payload, protected}`，因此 `alg` / `kid` 落在**被签字节内**，不可事后替换。`kid` 是公钥的 **RFC 7638 JWK thumbprint**——标识由密钥本身派生，无需注册表，也不会与密钥漂移。\n- **哈希链证\"内容没被改\"，签名证\"谁做的陈述\"。** 两者独立：内容被改并重新哈希后链校验仍能通过，只有签名能发现。\n- 公钥以 **JWKS** 发布（`npx ledgeroot jwks`），并随证据包一起导出，第三方**无需连回即可验签**。\n- **第六段只能由调用方回报**（`ledgeroot_pay` 的 `responseBody`）。Ledgeroot 结算支付，但**不抓取资源**——响应体只有 agent 见过，所以这一段的哈希只能由调用方提供。\n- **第三段是可验证的，不只是描述性的。** 报价原样存储并由哈希承诺，验证方会重算 `canonicalHash(segments.plan.quote)` 做比对。**签名后偷换报价**会被这条抓住——即使把收据重新哈希并重新签名也一样。而 `payTo` 与报价金额取自同一个对象，调用方也就无法一边传一个合规的 `payTo`、一边让报价指向别处。\n\n### 签名密钥与支付密钥是分离的\n\n| 变量 | 用途 | 落空时 |\n|---|---|---|\n| `LEDGEROOT_PRIVATE_KEY` | **动钱**：签 EIP-3009 授权（未设 `LEDGEROOT_ANCHOR_KEY` 时也用它提交锚定） | 无法支付 |\n| `LEDGEROOT_SIGNING_KEY` | **只做陈述**：签收据 | **收据不签名 → `verify` 报 `incomplete` 而不是 `verified`** |\n\n刻意**不互相回落**：一把钥匙动钱，一把钥匙作证，互不兼任。无法归因的证据不该报 `verified`。\n\n---\n\n## 三态验证（离线优先）\n\n验证**不依赖任何服务器**，`ledgeroot verify` 直接读本地库重算。\n\n| 状态 | 含义 |\n|---|---|\n| `verified` | 全部检查通过 |\n| `tampered` | **字节被检查过，对不上** —— 自哈希不符 / `prevHash` 断链 / 首张带 `prevHash` / `plan.quoteHash` 与所记录的报价对不上 / 重算 epoch 根与锚定根不符 / 已锚定 epoch 内的收据缺失 / 签名不符 / `alg` 不受支持 |\n| `incomplete` | **证据缺失或取不到** —— 未签名 / 验证方不持有该 `kid` / 已付收据缺 `txHash` / 锚定记录无边界 / 未知结算协议 / 节点不可达 |\n\n**这条界线是整个产品最重要的纪律**：`tampered` 优先于 `incomplete`，而**取不到证据绝不报成被篡改**。把网络故障报成篡改，会让告警整体失去可信度；反过来把缺失当放行，就是宣称做了一次没做的检查。\n\n**链上结算校验是显式选用的**（`--check-chain` / `checkChain: true`）：离线路径保持同步且零网络，链上校验才去拉 RPC。\n\n| 链上校验的判定 |\n|---|\n| 交易不存在 → `tampered`（链上没有这笔） |\n| **节点连不上 → `incomplete`**（读不到 ≠ 不存在） |\n| 交易回滚 / `to` 不是 USDC 合约 / 调用不是 `transferWithAuthorization` / `to`·`value`·`from` 与收据的 payTo·amount·payer 不符 → `tampered` |\n| 非 x402 的结算协议 → `incomplete`（见[已知边界](#已知边界)） |\n\n**锚定边界**：epoch 根覆盖的是「提交那一刻已存在的收据数」（`receiptCount`）。验证按该边界切片重算，所以**锚定之后再发生支付不会误报篡改**；反过来，已锚定的收据少于记录数 → `tampered`（是删除）。\n\n**锚定记录会写明合约。** 每条本地锚定记录都标出它的根提交到了哪个合约，所以改 `LEDGEROOT_ANCHOR_ADDRESS` 会被识别出来而不是被静默跳过：旧合约的记录无法让新合约看起来\"已锚过\"，下一次 `anchor` 会自动重提。早于该列存在的记录不带合约——目标未知，这才是 `--force` 的用途。\n\n---\n\n## 五条默认策略（fail-closed）\n\n攻击形态各有对应的那条：\n\n1. **对手方白名单** —— 只付 mandate 里列出的 x402 网关\n2. **payTo 绑定** —— 结算地址必须与 mandate 绑定一致（**拦住上面 demo 里那笔提示注入转账的就是这一条**）\n3. **报价漂移** —— 实际扣款与 402 报价的偏差不得超过阈值（默认 10%）\n4. **端点限速** —— 每个端点限制调用频率\n5. **限额** —— 单笔上限 + 累计上限\n\n**约束的语义**：白名单与 payTo 列表**为空 = 不约束**（不是拒绝一切）；限速要 mandate 显式配置 `endpointRateLimit` 才生效；限额两条恒生效。`ledgeroot_mandate_import` 会把 mandate 的约束与本地已注册策略取**交集**，写进收据第二段。\n\n引擎跑完**每一条**策略并记录全部判定，返回第一个拒绝。金额一律走 `decimal.ts` 的 **bigint 六位小数整数运算**——钱不做浮点。\n\n**这几条里，链上表达不了的是报价漂移、端点限速、累计上限（structuring）与拒付留痕。** 链上只知道地址，不知道 host、不知道报价、不记录\"被拦下的尝试\"。这是这一层存在的理由。\n\n---\n\n## 幂等、崩溃窗口与任务关联\n\nx402 轨道与本地库**不是一个事务**。Ledgeroot 用两个可选关联键补上支付原语回答不了的问题：\n\n### `requestId` —— 幂等，且在**动钱之前**占位\n\n朴素做法（\"结算成功后再写收据，重试时查收据去重\"）有一个致命窗口：**钱已结算、收据还没落库**时崩溃，则钱动了、没有记录、`requestId` 也查不到 → 重试**再付一次**。这既丢证据又丢钱，而且丢的正是产品声称要防的事。\n\n所以 `requestId` 在**尝试时**被消耗，而不是在成功时：\n\n| 步 | 动作 |\n|---|---|\n| 1 | 命中已有收据 → **直接回放**（`deduplicated: true`），不再次扣款 |\n| 2 | 策略放行后、**动钱之前**：在链外的 `payment_intents` 表占位 |\n| 3 | **占位失败**（该 key 已被占，说明上一次尝试的结果没被记录）→ **拒付**，并记一条 `denied` 收据 |\n| 4 | 结算 → 写收据 → 释放占位 |\n\n**为什么占位失败必须拒付而不是重试**：那一行的含义是「**我们不知道那笔支付有没有结算**」。拒付是可恢复的，重复付款不是。\n\n> ⚠️ 预写记录**只能在链外**：收据的 `id` 是内容哈希，把 `status` 从 `pending` 改成 `paid` 就会改哈希，下一张收据的 `prevHash` 会指向不存在的哈希。链是 append-only 的，原地更新在结构上不可能。\n>\n> ⚠️ **不传 `requestId` 就没有这层保护**——没有可对应的键。幂等必须主动要求。\n\n### `taskId` —— 意图链\n\n把多笔支付归到同一个用户任务下；仪表盘据此聚合展示「N 笔 / 总额 / 拦截数」。\n\n### 撤销\n\n`ledgeroot_mandate_revoke` 撤销单条；存储层另有**一键熔断**（`revokeAllMandates`）供控制面调用。撤销后的下一笔当场拒付**并留痕**。\n\n---\n\n## 已知边界\n\n诚实部分。这些是**当前实现**的边界，不是设计意图的否定；对应的排序与取舍记录在 [roadmap.md](./docs/roadmap.md)。\n\n| 边界 | 现状 |\n|---|---|\n| **支付路径仍然只支持测试网** | `X402_NETWORKS` 现在有两个实例（Monad 测试网 10143、主网 143），`ledgeroot_buy` 按 `chainId` 二选一。**`ledgeroot_pay` 没有**：`bootstrap.ts` 仍然无条件把 `MONAD_TESTNET_X402` 交给 facilitator，也没有环境变量能改 |\n| **区块时间不是合格时间源** | 锚定已跑在 Monad 主网（`0x958f887f203a08f43fe45ba00a6a4199b9e01b61`），比之前的测试网合约进了一步，但区块时间戳仍不是外部权威；后续仍是 RFC 3161 合格时间戳 |\n| **MPP 只有接缝，没有实现** | `segments.tx.protocol` 是显式维度：**未知协议报 `incomplete`，不放行也不冤枉**。但 MPP 的字段级形状未定，所以没有预设载荷，也没有 provider。**这是 [roadmap.md](./docs/roadmap.md) 里排在第一位的待补项** |\n| **热路径未加索引** | 全库没有一个 `CREATE INDEX`：单笔支付有 4 次未索引全表扫描，其中两次还会 `JSON.parse` 整个匹配集。单笔 O(n)，一个月 O(n²) |\n| **单进程、单租户** | 一个库、一把签名钥、一把付款钥。数据模型里没有租户边界——`agentId` / `mandateId` 不是隔离键 |\n| **测试网锚定无证据价值** | 测试网部署仍在（`0xc0234ea7e3af77e5ae686caff62ff88eaccd8c30`），不产生证据；线上锚定合约是上面那个主网合约 |\n| **包含证明只在库 API** | `merkleProof` / `verifyMerkleProof`（RFC 6962 §2.1.3 审计路径）已实现并有交叉验证测试，但**本仓库的 CLI 与 `ledgeroot_verify` 尚未输出或校验逐张证明**；接入在 [MandateKey](https://github.com/ledgeroot/mandatekey) 的证据包里 |\n| **第三方独立验证仍要走证据包** | 独立验证器包（零依赖、单文件、断网可跑）尚未发布；目前第三方要验单张收据，需用导出的证据包（含公钥）或直接依赖本库 |\n| **验证是全量的** | `verify` 每次遍历全部收据逐条重算 SHA-256 + Ed25519，无增量、无检查点；`--check-chain` 的 RPC 并发没有上限 |\n| **合约测试不在 CI 里** | `.github/workflows/ci.yml` 只跑 typecheck、136 个 TypeScript 测试与 build；`LedgerootAnchor.sol` 的 `forge test` 目前仍只在本地跑 |\n| **没有聚合层** | 全库没有一处 SQL 聚合（无 `GROUP BY` / `SUM` / `COUNT`），也没有对账导出。这是生态位里唯一能收费的那一层，目前**完全不存在** |\n| **ERC-8004 只埋了字段** | `Mandate.agentId` 存在但未接注册表校验 |\n\n---\n\n## 锚定合约\n\n`contracts/src/LedgerootAnchor.sol` —— 全项目唯一合约，**只存 32 字节根 + 回指针 + epoch 计数器 + owner**。\n\n- **权限受控**：`anchor()` 有 `onlyOwner`。开放的 `anchor()` 会让\"这个根在链上\"只等于\"有人往这里锚了东西\"——攻击者可以发布伪造根，或顶掉诚实根让有效收据验成 `tampered`。owner 是**锚定钱包**（设了 `LEDGEROOT_ANCHOR_KEY` 就取它，否则用 `LEDGEROOT_PRIVATE_KEY`），不是部署者，因此两把钥匙可以分离。\n- **所有权可转移**：`transferOwnership` 让锚定钥匙可以在不重部署的前提下轮换。owner 原先固定在构造函数里，换锚定钱包就意味着重新部署、并让老合约上已锚的根全部落空。用一步而不是\"先提名再接受\"两步，是因为转错了现任 owner 还能再转回来，而两步握手的中间态会让合约无法锚定。\n- **epoch 由合约拥有**：`lastEpoch` 每次锚定自增，客户端读合约而不是自己记数——否则一个全新的库会把它的第一次锚定标成 \"epoch 1\"，不管合约已经走到多远。\n- **Merkle 用 RFC 6962 MTH**：叶 `SHA-256(0x00 ‖ d)`、内部节点 `SHA-256(0x01 ‖ L ‖ R)`、按最大 2 的幂切分（不复制奇数末节点）。**域分隔**是第二原像抗性的来源。测试用 RFC 9162 §2.1.2 的栈式算法作独立预言机交叉验证。\n- 部署到 Monad 主网（chainId 143）：`0x958f887f203a08f43fe45ba00a6a4199b9e01b61`，owner 为锚定钱包。它接替了 `0xca08c795357ae8bcee8af592c827d419750fdf84`（owner 是支付密钥）；已锚在那份合约上的根留在那边。更早的测试网部署（`0xc0234ea7e3af77e5ae686caff62ff88eaccd8c30`）不产生证据。**地址会变——以你自己的 `.env` 为准**。\n\n---\n\n## 十一个 `ledgeroot_*` 工具\n\n| 工具 | 作用 |\n|---|---|\n| `ledgeroot_buy` | **取一个 URL，付掉它回的 402。** 所有策略在签名之前跑完；响应体哈希进第六段 |\n| `ledgeroot_pay` | 受约束 x402 支付（幂等去重 + 任务关联），出六段收据；传卖家发来的 `quote`，收据即对它作出承诺；传 `responseBody` 让第六段覆盖交付 |\n| `ledgeroot_mandate_sign` | 本地私钥现场签发授权令（`id` 可省略，自动生成） |\n| `ledgeroot_mandate_import` | 导入 AP2 风格授权令（**验签失败直接拒绝**） |\n| `ledgeroot_mandate_list` | 列出有效授权 |\n| `ledgeroot_mandate_revoke` | 撤销授权（一键熔断） |\n| `ledgeroot_receipt_list` | 列出收据（按 mandate / status / endpoint 过滤） |\n| `ledgeroot_receipt_get` | 取单张收据 |\n| `ledgeroot_verify` | 离线验证证据链 + 锚定；`checkChain` 额外核对链上结算 |\n| `ledgeroot_anchor` | 提交 epoch Merkle 根上链 |\n| `ledgeroot_export` | 导出证据包（收据 + 根 + 锚定记录 + 公钥 + 验证结论） |\n\n---\n\n## 环境变量\n\n| 变量 | 说明 |\n|---|---|\n| `LEDGEROOT_DB` | SQLite 数据库路径（默认 `ledgeroot.sqlite`） |\n| `LEDGEROOT_PRIVATE_KEY` | **动钱**的私钥：支付签名。永不出本机 |\n| `LEDGEROOT_ANCHOR_KEY` | **提交锚定**的私钥。未设置时回落 `LEDGEROOT_PRIVATE_KEY`。设置它可让无人值守的锚定循环拿不到动钱的钥匙——它同时是合约的 `owner`，而合约可用 `transferOwnership` 移交所有权，所以轮换它不需要重部署 |\n| `LEDGEROOT_SIGNING_KEY` | **收据签名**密钥（32 字节 hex 种子）。与支付密钥刻意分离。**未设置则收据不签名，验证报 `incomplete`** |\n| `LEDGEROOT_FACILITATOR_URL` | Monad x402 facilitator 地址（默认 `https://x402-facilitator.molandak.org`，公开、无需 API key） |\n| `LEDGEROOT_RPC_URL` | Monad testnet RPC（默认 `https://testnet-rpc.monad.xyz`） |\n| `LEDGEROOT_MAINNET_RPC_URL` | Monad 主网 RPC，验证落在 143 链上的收据时使用（默认 `https://rpc.monad.xyz`） |\n| `LEDGEROOT_CHAIN_ID` | 锚定器目标链：`10143` 测试网（默认）或 `143` 主网 |\n| `LEDGEROOT_ANCHOR_ADDRESS` | 锚定合约地址（未设置则无法锚定） |\n| `LEDGEROOT_DEPLOYER_PRIVATE_KEY` | 仅 `deploy/monad.ts` 使用；合约 owner 由 `LEDGEROOT_PRIVATE_KEY` 推导 |\n| `LEDGEROOT_ANCHOR_BYTECODE` | 部署用字节码；不设则读 `forge build` 产物 |\n| `LEDGEROOT_DRY_RUN` | `true` 启用仿真：零钱包零 USDC 跑全流程（假 tx + 一次性私钥，**禁止用于真实支付**） |\n\n---\n\n## 仓库结构\n\n```\nsrc/\n  policy/        策略引擎 + 五条默认策略 + Zod schema\n  receipt/       六段收据构建 + RFC 8785 哈希链 + Ed25519 签名（JWKS / thumbprint kid）\n  anchor/        RFC 6962 Merkle（根 / 包含证明）+ 锚定器（viem）\n  verify/        离线三态验证器 + 链上结算内容校验（ERC-3009 解码比对）\n  store/         SQLite append-only 存储（receipts / mandates / anchors / payment_intents）\n  x402/          facilitator 集成（EIP-3009 授权 + /verify + /settle）+ 买家（@x402/fetch，策略闸门卡在签名那一刻）\n  tools/         十一个 ledgeroot_* MCP 工具\n  mandate.ts     EIP-712 授权令（签发 / 验签 / 策略交集）\n  consistency.ts 授权-执行一致性分析（事后复核：已付收据是否越权）\n  decimal.ts     USDC 六位小数 bigint 运算，无浮点\n  env.ts         环境加载 + dry-run 开关\n  cli.ts         verify / export / anchor / jwks / serve\nscripts/         demo（dry-run 全流程）/ pay-demo（真实支付）/ buy-demo（真实 x402 购买）/ deploy\ncontracts/       LedgerootAnchor（Solidity 0.8.24 + Foundry）\ndeploy/          锚定合约部署（链由 LEDGEROOT_CHAIN_ID 选择）\ndocs/            架构评估 / 路线图 / 竞品与标准调研 / 商业化方向\nassets/          字标（亮 / 暗两版）\ntest/            15 个文件、136 个测试\n```\n\n---\n\n## 参与贡献\n\n小而聚焦的改动最好落地，路线图是最好的入口：\n\n- **[roadmap.md](./docs/roadmap.md)** —— 排好序的计划，每项都带验收标准与涉及文件。\n- **[已知边界](#已知边界)** —— 表里每一条都是真实且有边界的工作量。\n- **提 PR 前先跑**：`npm run typecheck && npm test && npm run build`（CI 跑的就是这三条）。\n\n刚接触代码？`scripts/demo.ts` 用单文件走完整闭环，`test/pay.test.ts` 端到端覆盖崩溃窗口那一组行为。\n\n---\n\n## 设计与调研文档\n\n> 📌 这些文档以中文撰写，尚未有英文版。\n\n| 文档 | 内容 |\n|---|---|\n| [README.md](./docs/README.md) | 文档索引与阅读顺序 |\n| [architecture.md](./docs/architecture.md) | 源码级架构评估：已做对的、规模层面的债、零外泄 vs 聚合的张力、链配置与协议接缝 |\n| [roadmap.md](./docs/roadmap.md) | 行动规划：P0 正确性（已清）→ P1 差异化 → P2 可见性 → P3 公信力；含差距清单 N1–N15 与待定决策 Q1–Q17 |\n| [commercialization.md](./docs/commercialization.md) | 生态位、四个取舍、商业模式分层、现在**绝不**做的事 |\n| [landscape.md](./docs/landscape.md) | 威胁分类法（载波 / 分发垄断者 / 直接竞品 / 监管时钟）、商品化半衰期、**监控触发条件** |\n| [competitors.md](./docs/competitors.md) | 四个核心对手的深度拆解：Vaara、AWS AgentCore payments、TrustBench、Semantica（相邻） |\n| [standards.md](./docs/standards.md) | 学术与标准全景：OAP、Vaara Receipt、IETF 草案、x402 与 MPP 并列支持的依据 |\n| [tokenized-equities.md](./docs/tokenized-equities.md) | 第二个垂直：Uniswap permissioned pools × 代币化股票，与两条 SEC 提案线 |\n| [sec-comment-s7-2026-30.md](./docs/sec-comment-s7-2026-30.md) | ⚠️ 给 SEC File S7-2026-30 的评论信**草稿**（标注 DRAFT，不可原样提交） |\n\n---\n\n## 许可\n\nMIT © 2026 Ledgeroot\n\n<div align=\"center\">\n\n### 行业造好了锁，没人造钥匙圈；造好了刹车，没人造黑匣子。\n\n**[自己验一遍——不必信我们。](#快速开始)**\n\n⭐ **[Star](https://github.com/ledgeroot/ledgeroot)** · 📖 **[English README](./README.md)** · 🗺️ **[路线图](./docs/roadmap.md)** · 🛡️ **[威胁全景](./docs/landscape.md)**\n\n<sub>MIT · 无 SaaS · 无遥测 · 私钥永不出本机</sub>\n\n</div>\n","readmeFilename":"README.zh-CN.md"}