Every contract address, transaction hash, attestation digest, storage CID, AXL peer ID, and ENS namespace behind Ledger’s three sponsor integrations. Every entry is reproducible — click anything mono-spaced to verify on the relevant explorer, or run pnpm tsx tools/register.ts to put your own worker on the same rails.
Galileo Testnet (chainId 16602). Hosts the iNFT, escrow, identity registry, and the encrypted memory blob in 0G Storage. Inference runs sealed on 0G Compute and the attestation digest is verifiable.
| Chain | 0G Galileo Testnet · chainId 16602 Official 0G developer docs — testnet overview. |
| iNFT spec | ERC-7857 (0G iNFT draft) 0G Labs reference implementation our WorkerINFT mirrors. |
| WorkerINFT (ERC-7857 draft) | 0xd4d74E089DD9A09FF768be95d732081bd542E498 |
| LedgerEscrow | 0x83dF0Ed0b4f3D1D057cB56494b8c7eE417265489 Upgraded live escrow. This address proves token-owned payout routing with acceptTokenBid, taskWorkerTokenIds, payoutRecipient, and releasePayment resolving ownerOf(tokenId) on Galileo. |
| LedgerIdentityRegistry | 0x9581490E530Da772Af332EBCe3f35D27d5e8377F |
| MockTEEOracle | 0x306919805Eed1aD4772d92e18d00A1c132b07C19 Honest disclosure — this is a shim. The ERC-7857 spec is followed mechanically (sealed-key bytes change on transfer, proof verified) but a real TEE enclave is not running. |
| Source verification | ChainScan exactMatch=true MockTEEOracle, WorkerINFT, LedgerEscrow, and LedgerIdentityRegistry are exact-match source verified on the Galileo explorer. |
| Mint tx (token #1) | 0x26b7de55c33f7f82730ea333b509706c1092797c65c5360d1ad5ae0027c17c96 |
| Transfer tx (Owner_A → Owner_B) | 0xe4d697d7b8dd7c3cb01fa28544a03aecd4cd6f2f1c019c26d2219c828398e9fd ownerOf(1) flipped from Owner_A (0x6B9a…) to Owner_B (0x6641…) at this block. Sealed key was re-keyed in the same call. |
| Sealed key (post-transfer) | 0x7365616c65642d666f722d726573657276652d6f776e6572 ASCII-decodes to "sealed-for-reserve-owner" — proves bytes rotated. A real TEE would emit ciphertext. |
| Owner_A (mint recipient) | 0x6B9ad963c764a06A7ef8ff96D38D0cB86575eC00 |
| Owner_B (current ownerOf) | 0x6641221B1cb66Dc9f890350058A7341eF0eD600b |
| 0G Storage flow contract | 0x22e03a6a89b950f1c82ec5e74f8eca321a105296 |
| Storage upload tx | 0xc6cd5ca57b2c005114fef5705d89da67bcff578659a4ca5a8f5d50d4220eb5ca |
| Memory root hash | 0xd8fb3ad312ca5e9002f7bdd47d93839b9a6dcd83d396bb74a44a9f65344982c4 AES-256-CTR encrypted client-side. Roundtrip download + decrypt was byte-equal with the plaintext. |
| Memory CID (in iNFT metadata) | 0g://0xd8fb3ad312ca5e9002f7bdd47d93839b9a6dcd83d396bb74a44a9f65344982c4 |
| 0G Compute ledger tx | 0xc27d4f36505320f24f60d6ab6cc0e0cf7899b374def9ee953527c2d0aac78ff2 |
| Live provider | 0xa48f01287233509FD694a22Bf840225062E67836 |
| Model | qwen/qwen-2.5-7b-instruct |
| Attestation digest | 0x59c79e5a43357945f442a2417cd7aabf2c74b19708dc97e839ec08e1ae223950 Returned by broker.inference.verifyService. verifyAttestation() returned true. |
| Escrow deploy tx | 0x85140cba84b7c5bc152ded0ab046f805a82d1ffcd9b2fd2c7cbaa2ecc54db21 |
| Escrow postTask | 0x4b36766cd44b05bbc95ebfaf188ec3cac57a8d81b3246f51526f487eb9d4007c |
| Escrow acceptTokenBid | 0x57f35f717ff8e73e2e309f9e9131f68399bad823cc773bf7e123cde8b0335c02 Token ID 1 is attached to the task; taskWorkerTokenIds(taskId) returns 1. |
| Escrow payoutRecipient(taskId) | 0x6641221B1cb66Dc9f890350058A7341eF0eD600b Direct RPC read resolves the payee from WorkerINFT.ownerOf(1), so the payout follows the current iNFT owner. |
| Escrow releasePayment | 0x7f7ff8061ba4a68b6963d27abefa601fbde8d9474e8dadd8207d138fc6e1a3e2 PaymentReleased event topic 2 is the current owner 0x6641…600b. Final task status readback is 3 (Released). |
| Result hash | 0xf8d3ef6a9f1c1d8242101d18b891675e37eef6670eda143971bf69b4d4ce9fb4 |
| Demo task ID | 0x005ecb1bf6cd06a9d1c7240ab1365aebedbe8104d1b530a892fd0af228c1e604 |
Three independent nodes — two cloud, one residential laptop. Full mesh via Yggdrasil over hop-by-hop TLS plus end-to-end payload encryption. Bootstrap-kill resilience verified; mesh stays connected without the seed peer.
| AXL node source | github.com/gensyn-ai/axl Go binary every node runs — same source on Fly + laptop. |
| Live mesh /topology (judges) | axl.fierypools.fun/topology Cloudflared tunnel → M2 HTTP bridge. Returns peers + IPv6. |
| Bootstrap peer ID | a560b12fe6e16b1c8a94bb99b3019fa6d5f490474c275a31848f022df3a170eb Fly.io · sjc · public TCP listener at 66.51.123.38:9001 |
| Bootstrap Yggdrasil IPv6 | 200:b53e:9da0:323d:29c6:ead6:88cc:99fc |
| Worker-1 peer ID | f274bf0f8dadfa028b75f73cf7b29c927ded368b6703caf403abdb0d9aa1fa64 Fly.io · fra · cloud worker, public listener for resilience |
| Worker-1 Yggdrasil IPv6 | 200:1b16:81e0:e4a4:bfa:e914:1186:109a |
| Worker-2 peer ID | 590fa3b614da78d5e50939f708dea209e5cfb5e7ae69f1220611d8eefcc95f4c Residential laptop (NAT) · launchd-managed (KeepAlive=true) · proves outbound NAT traversal |
| Worker-2 Yggdrasil IPv6 | 201:9bc1:7127:ac96:1ca8:6bdb:1823:dc85 |
| Encryption (transport) | Hop-by-hop TLS + end-to-end payload (two layers) |
| Channels | #ledger-jobs, #ledger-auction-closed (gossipsub fork) |
| Bootstrap-kill resilience | Verified 2026-05-02T16:23:39Z sjc bootstrap was stopped, fra and residential exchanged TASK_POSTED + RESULT directly through the fra public listener, then bootstrap restarted. |
| GossipSub fanout (TS port) | local 567ms · fra 601ms Ports the AXL repo's gossipsub example to TypeScript. |
| Full protocol cycle | TASK_POSTED → BID → BID_ACCEPTED → AUCTION_CLOSED → RESULT Verified end-to-end on 2026-05-02T16:28:18Z across the live mesh. |
| Qualification boundary | Separate AXL nodes, not in-process Two Fly.io regions plus one residential NAT laptop. The app did not replace AXL with a centralized broker. |
| Topology snapshot | proofs/data/axl-topology.json |
| Full-cycle event log | proofs/data/axl-full-cycle.json |
| TCP packet capture | proofs/data/axl-tcpdump.txt |
Custom CCIP-Read offchain resolver under ledger.eth on Sepolia. Five capability namespaces per worker — who, pay, tx, rep, mem — each with its own dispatch logic. ENSIP-10 signed responses. ENSIP-25 text record closes the verification loop with the audited ERC-8004 deployment on Base.
| Parent ENS | ledger.eth (Sepolia) Open in the official ENS app to view records + signed text. |
| Parent owner / signer | 0x32FE11d9900D63350016374BE98ff37c3Af75847 |
| Resolver contract | 0xd94cC429058E5495a57953c7896661542648E1B3 Source verified on Sourcify for Sepolia chainId 11155111. |
| Set-resolver tx | 0xc49a3288274156d826bec3898bf31c15121a90d3bf885f39a8cb74ba67d89caf |
| Gateway URL (durable) | https://resolver.fierypools.fun Cloudflare named tunnel `kosyn-cre` → localhost:8787. Survives client IP changes and Wi-Fi reconnects. |
| worker-001.ledger.eth (root) | 0x6641221B1cb66Dc9f890350058A7341eF0eD600b Worker root — resolves to the same live owner as who.* and surfaces description/url/notice text records so the ENS app shows real content. |
| who.worker-001.ledger.eth | 0x6641221B1cb66Dc9f890350058A7341eF0eD600b Reads ownerOf(1) on Galileo, 30s TTL cache. Ownership flips without a new ENS transaction. |
| pay.worker-001.ledger.eth (rotation 0) | 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC HD-derived from a parent xpub, indexed by tokenId + nonce. |
| pay.worker-001.ledger.eth (rotation 1) | 0x90F79bf6EB2c4f870365E785982E1f101E93b906 |
| rep.worker-001.ledger.eth | ai.rep.registry=0x8004B663… · ai.rep.agent=5444 · count=47 · avg=4.77 Live read from ERC-8004 ReputationRegistry on Base Sepolia. The 47 giveFeedback records were seeded for the demo (see ERC-8004 disclosure below) — the resolver path itself is real. |
| mem.worker-001.ledger.eth | 0g://0xd8fb3ad312ca5e9002f7bdd47d93839b9a6dcd83d396bb74a44a9f65344982c4 Open the encrypted blob's tx on the 0G Storage explorer. |
| ledger.eth ENSIP-25 text record | agent-registration={"standard":"ENSIP-25","registry":"0x8004B663…","chain":"base-sepolia","chainId":84532,"agentId":"5444"} |
| Live smoke artifact | proofs/data/ens-sepolia-resolve.json |
Audited reputation registry on Base Sepolia. Ledger does not deploy its own — every settlement writes feedback() to the canonical deployment. The 47-job, 4.77-rating demo number is reproducible on-chain (47 giveFeedback txs from 8 employer-agent keys) but those records were seeded for the demo, not earned organically. Honest disclosure on the last row.
| Standard | ERC-8004 (EIPs.ethereum.org) Audited reputation registry standard the iNFT references. |
| IdentityRegistry | 0x8004A818BFB912233c491871b3d84c89A494BD9e |
| ReputationRegistry | 0x8004B663056A597Dffe9eCcC1965A193B7388713 |
| Source verification | Basescan verified + Sourcify partial match The ERC-8004 reference contracts are external audited deployments; Ledger uses them and does not redeploy them. |
| Demo agentId | 5444 |
| Total feedback records | 47 |
| Distinct client wallets | 8 |
| getSummary() raw return | count=47 · sumValue=224190000000000000000 · decimals=18 Direct read: average = 4.77 (17 decimals after divide). |
| Verify command | cast call 0x8004B663… "getSummary(uint256,address[],string,string)(uint64,int128,uint8)" 5444 [<8 client addresses>] "" "" --rpc-url https://sepolia.base.org |
| Disclosure | Reputation history was seeded for the demo. 47 seeded completion feedback records signed across 8 employer-agent keys. Disclosed in README and 0g-proof.md per ETHGlobal anti-fraud norms. |
# Mint your own worker iNFT git clone https://github.com/DarthStormerXII/ledger cd ledger/tools && pnpm install pnpm tsx register.ts gen-keys --name my-worker pnpm tsx register.ts mint --identity my-worker \ --memory-cid 0g://… --sealed-key 0x… --dry-run # Verify the live ENS namespaces cd ../resolver && npm run smoke:ens # Read demo worker on-chain cast call 0xd4d74E089DD9A09FF768be95d732081bd542E498 \ "ownerOf(uint256)(address)" 1 \ --rpc-url https://evmrpc-testnet.0g.ai
Full walkthrough at docs/REGISTER_AN_AGENT.md. Source proofs at /proofs.