On this page
- Spend 2 at a glance
- Spend 3 at a glance
- Check it in your browser
- The seven checks
- Spend 2
- Spend 3
- How the payments were decided
- Spend 2: two refusals, then the code rules alone
- Spend 3: an attested model and the code rules
- The ledger and its anchors
- Run the verifier
- With the ledger of 6 entries
- The run after spend 2
- The Base side
- The fee and the cost
- The NEAR technology in these runs
- Where to go next
- What this does not do
Mainnet payouts, step by step
On 2026-11-13 the vault v0.probarion.near paid the owner's own Base wallet twice, as tests of the cross-chain path, not customer payments. Spend 2 burned 1.00 USDC, decided by code rules alone, and 0.9976 USDC arrived. Spend 3 burned 0.25 USDC, proposed by an attested model and allowed by the code rules, and 0.2476 USDC arrived. Every step can be checked from public data.
On 2026-11-13 the vault v0.probarion.near paid the owner's own Base wallet 0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27 twice through NEAR Intents, as tests. Spend 2 burned 1.00 USDC on NEAR mainnet, and the POA bridge delivered 0.9976 USDC, 997600 in base units, in Base block 56821514: code refused two attested model proposals for its invoice, then the code rules alone allowed the payment. Spend 3 burned 0.25 USDC, and the bridge delivered 0.2476 USDC, 247600 in base units, in Base block 56898526: an attested model proposed it, and the code rules allowed it. In both, the agent's spend call named no address: the vault took the payee from the mandate the owner signed. Every step is on chain, and you can check each one with no wallet and no key.
Tests, not customer payments.
INV-M002 and INV-M003 are labeled sample invoices. The payee is the owner's own Base wallet, and the amounts are small on purpose, because the contract is unaudited. The USDC is real USDC on NEAR mainnet and on Base. The owner ran every step on their own machine. For spend 2 they signed the owner calls with near-cli-rs and the 1Click deposit in Meteor. For spend 3 they signed mandate 3 with probarion.near. The kit signed both spends with the agent key, which can call spend and nothing else, and the ledger entries and anchors with the ledger key. The POA bridge signed the Base transfers. Spend 3 added no USDC and no key: it paid from the Base USDC that spend 2's round left inside intents.near.
Spend 2 at a glance#
| What | Value |
|---|---|
| Vault | v0.probarion.near, owner probarion.near, no full-access key |
| Mandate | Mandate 2: pays 0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27 on Base, at most 1.00 USDC a payment and 1.00 USDC in all, 1 use, until 2026-11-20 (transaction (opens in a new tab)) |
| Spend | Spend 2, invoice INV-M002, 1.00 USDC (1000000), status burned, at 07:24 UTC (transaction (opens in a new tab)) |
| On Base | 0.9976 USDC (997600) to the owner's wallet, block 56821514, in the same minute (transaction (opens in a new tab)) |
| Fee | 0.0024 USDC (2400), kept by the POA bridge as its withdrawal fee. Probarion took none |
| Gas | Spend 2 burned 15.35 Tgas, 0.001423 NEAR, summed over the transaction and its receipts |
| Decided by | The code rules alone, after code refused two attested model proposals |
| Ledger | 4 signed entries, covered by 3 anchors on the vault |
The run's files are in docs/evidence/mainnet-v0/s1-2026-11-13 (opens in a new tab): the signed ledger, the snapshot, the verifier's output, the invoice and purchase order, the POA bridge and 1Click statuses, and the order of every transaction.
Spend 3 at a glance#
| What | Value |
|---|---|
| Vault | The same vault, v0.probarion.near, with the same agent key and ledger key |
| Mandate | Mandate 3: pays 0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27 on Base, at most 0.25 USDC a payment and 0.25 USDC in all, 1 use, until 2026-11-20 (transaction (opens in a new tab)) |
| Spend | Spend 3, invoice INV-M003, 0.25 USDC (250000), status burned, at 11:41 UTC (transaction (opens in a new tab)) |
| On Base | 0.2476 USDC (247600) to the owner's wallet, block 56898526, in the same minute (transaction (opens in a new tab)) |
| Fee | 0.0024 USDC (2400), kept by the POA bridge as its withdrawal fee. Probarion took none |
| Gas | Spend 3 burned 15.36 Tgas, 0.001424 NEAR, summed over the transaction and its receipts |
| Decided by | z-ai/glm-5.3-flash, an attested model on NEAR AI Cloud, proposed it, and the code rules allowed it. Code refused no proposal for INV-M003 |
| Ledger | 6 signed entries, covered by 4 anchors on the vault |
The run's files are in docs/evidence/mainnet-v0/s2-2026-11-13 (opens in a new tab): the whole signed ledger, the snapshot, the verifier's output, the invoice and purchase order, the outcome and the spend's decision, the POA bridge status, the Base receipt, the gas record and the order of every transaction.
Check it in your browser#
Nothing here needs a wallet, a key or an account.
- Read the chain again. Open the mainnet section of the landing page. Spend 3, the newest payout, shows at the top, open: press Read the chain now in its card. Your browser reads 4 transactions and 3 views from public RPC and runs the seven checks below. When every answer matches, the verdict line above the checks says "Read just now: 7 of 7 checks pass." A node that does not answer leaves its rows on the recorded values, marked "Could not read".
- Read spend 2 again. Spend 2 is folded under spend 3. Open it with "Show its seven checks and its ledger", and press its own Read the chain now. It reads spend 2's transactions and views in the same way.
- Open the burns on nearblocks. Spend 2 (opens in a new tab) shows the vault's
spend, itsft_withdrawcall tointents.near, and theft_burnof 1000000 with the memoWITHDRAW_TO:0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27. Spend 3 (opens in a new tab) shows the same calls, with anft_burnof 250000 and the same memo. - Open the arrivals on Basescan. Spend 2's transfer (opens in a new tab) shows 0.9976 USDC moving to
0xb22eacdf11177d6d635e8956bbbbdd54b3e6eb27, and spend 3's (opens in a new tab) shows 0.2476 USDC, both on the USDC contract0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.
The seven checks#
The landing page runs these seven checks in your browser for each payout, in the order of the route from NEAR to Base. The values are the ones the recorded run read from mainnet on 2026-11-13, and a live run must read the same.
Spend 2#
| # | Check | What it reads | What it found |
|---|---|---|---|
| 01 | The owner signed the payee | The create_mandate transaction 77cC8nMq…483g (opens in a new tab) and the vault's get_config | Signed by probarion.near, the vault's owner. It returned mandate 2, paying 0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27 on Base, at most 1.00 USDC, 1 use, until 2026-11-20, for the agent key below |
| 02 | The agent's key can call one method: spend | The spend transaction and view_access_key at its block | ed25519:GADeVCXtgcxS3E5JrcVpEWTuZiNMJ4gu17iyuEgyCycd signed spend 2, sent from the vault's own account. It is a function-call key for v0.probarion.near, and its one method is spend |
| 03 | The spend call has no address in it | The spend transaction BdN7oB76…rSQ9 (opens in a new tab) and view_account | Sent from the vault account to itself, method spend. The request has 5 fields, each of its type, and no address in any of them: mandate_id 2, amount 1000000, invoice_hash bd45f232…8357, ref INV-M002, decision_hash d64f0de7…a336. The vault's code hash is 3cQXYDvfGLRMveCVAHmh1exiuZKDXWqD8cUhqdEs9MF1, the recorded build of commit 64ac3c0, whose SpendRequest (opens in a new tab) has these 5 fields |
| 04 | The vault wrote the memo from the mandate | The receipts of the spend transaction | v0.probarion.near called ft_withdraw on intents.near for 1000000 of base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near, with the memo WITHDRAW_TO:0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27: the payee of check 01 |
| 05 | 1.00 USDC burned on NEAR | The events of the spend transaction | The Base USDC token logged an ft_burn of 1000000 from intents.near with the same memo, intents.near logged an mt_burn of 1000000 of nep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near from the vault, the vault logged spend_burned for spend 2, and spend returned status burned |
| 06 | The spend's decision is in the anchored ledger | The anchor transaction 65eBfw6v…eA9Q (opens in a new tab), the spend transaction, get_config, and entries 2 and 3 of the ledger file (opens in a new tab) | Signed with the ledger key that get_config names, method anchor, event ledger_anchored with seq 3, count 4 and root 28ac4e58…e6c6. The spend's decision_hash is the body hash of entry 2, d64f0de7…a336, and entries 2 and 3 hash, from the link of entry 1, to that root |
| 07 | 0.9976 USDC arrived on Base | eth_getTransactionReceipt for 0xc2df8f87…ea71 (opens in a new tab) | Status 0x1, block 56821514, a Transfer of 997600 on the USDC contract 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 from 0x2cff890f0378a11913b6129b2e97417a2c302680 to the payee of check 01. The chain does not tie this transfer to spend 2: the POA bridge's withdrawal status does (recorded (opens in a new tab)). The fee is computed: 1000000 less 997600 is 2400, 0.0024 USDC |
Spend 3#
| # | Check | What it reads | What it found |
|---|---|---|---|
| 01 | The owner signed the payee | The create_mandate transaction 4cmSz4b3…XT3T (opens in a new tab) and the vault's get_config | Signed by probarion.near, the vault's owner. It returned mandate 3, paying 0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27 on Base, at most 0.25 USDC, 1 use, until 2026-11-20, for the agent key below |
| 02 | The agent's key can call one method: spend | The spend transaction and view_access_key at its block | ed25519:GADeVCXtgcxS3E5JrcVpEWTuZiNMJ4gu17iyuEgyCycd, the key that signed spend 2, signed spend 3, sent from the vault's own account. It is still a function-call key for v0.probarion.near, and its one method is spend |
| 03 | The spend call has no address in it | The spend transaction 5amtgb8M…9NGH (opens in a new tab) and view_account | Sent from the vault account to itself, method spend. The request has 5 fields, each of its type, and no address in any of them: mandate_id 3, amount 250000, invoice_hash c2461348…83b6, ref INV-M003, decision_hash d3807956…32aa. The vault's code hash is still 3cQXYDvfGLRMveCVAHmh1exiuZKDXWqD8cUhqdEs9MF1, the recorded build of commit 64ac3c0 |
| 04 | The vault wrote the memo from the mandate | The receipts of the spend transaction | v0.probarion.near called ft_withdraw on intents.near for 250000 of base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near, with the memo WITHDRAW_TO:0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27: the payee of check 01 |
| 05 | 0.25 USDC burned on NEAR | The events of the spend transaction | The Base USDC token logged an ft_burn of 250000 from intents.near with the same memo, intents.near logged an mt_burn of 250000 of nep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near from the vault, the vault logged spend_burned for spend 3, and spend returned status burned |
| 06 | The spend's decision is in the anchored ledger | The anchor transaction 6jRY21z9…bLyG (opens in a new tab), the spend transaction, get_config, and entries 4 and 5 of the ledger file (opens in a new tab) | Signed with the ledger key that get_config names, method anchor, event ledger_anchored with seq 4, count 6 and root fcacffdc…c037. The spend's decision_hash is the body hash of entry 4, d3807956…32aa, and entries 4 and 5 hash, from the link of entry 3, to that root |
| 07 | 0.2476 USDC arrived on Base | eth_getTransactionReceipt for 0xc6c4507e…7ab7 (opens in a new tab) | Status 0x1, block 56898526, a Transfer of 247600 on the USDC contract 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 from 0x2cff890f0378a11913b6129b2e97417a2c302680 to the payee of check 01. The chain does not tie this transfer to spend 3: the POA bridge's withdrawal status does (recorded (opens in a new tab)). The fee is computed: 250000 less 247600 is 2400, 0.0024 USDC |
How the page reads them:
- Pinned views. The three views,
get_config,view_access_keyandview_account, are read at the block of each spend, which the spend's own outcome names: for spend 2,GM4ojam5J4e91NpzMF1BdbjF65wJcVPvbF6bijT37FTa(height 224331722), and for spend 3,B7iXoHCJHWLPWbLNispMCJBzSYC5oD8XqEuZr59MvWeB(height 224358455). A later change to the vault cannot change their answers, and a check fails when an answer comes from another block. - Public hosts. Every NEAR read asks FastNEAR's archival node,
archival-rpc.mainnet.fastnear.com, then the regular node,rpc.mainnet.fastnear.com. The regular node forgets old transactions within days. The Base read asksmainnet.base.org. Each request gives up after 8 seconds and is tried up to twice more, when a retry can help, after 0.5 and 1.5 seconds, before the next host. An answer for another transaction, or one that is not final, goes to the next host. So a NEAR read takes at most 52 seconds, and the Base read 26. - Nothing in between. The requests go from your browser to those hosts, with no cookies and no referrer, and none goes through Probarion's server. They change nothing and sign nothing.
- Not the verifier. The seven checks read the chain again, and check 06 hashes the two ledger entries the page carries for each payout. They do not check the entries' signatures or the rest of the file: the verifier does, see Run the verifier.
How the payments were decided#
Spend 2: two refusals, then the code rules alone#
The owner set up the run the same day:
- A top-up through NEAR Intents 1Click. The owner's wallet sent 1.5 native USDC to a 1Click deposit address (transaction (opens in a new tab)), and 1Click credited 1.499823 Base USDC to the vault's balance inside
intents.near(settlement (opens in a new tab), signed by 1Click). - A ledger key.
set_ledger_keyaddeded25519:RY7kjsaRStq4gt27RpNgErr9AjuKuZdzCXd6atSrzKK, a function-call key on the vault that can callanchorand nothing else (transaction (opens in a new tab)). - Mandate 2. The owner's own Base wallet, up to 1.00 USDC, 1 use, until 2026-11-20 (transaction (opens in a new tab)).
Then the SDK ran three cycles on INV-M002. Cycles 1 and 2 each wrote one signed entry and anchored the ledger before the next cycle began. Cycle 3 wrote entries 2 and 3, then anchor 3:
| Entry | Time (UTC) | Who proposed | What code decided |
|---|---|---|---|
| 0 | 07:17 | z-ai/glm-5.3-flash, an attested model on NEAR AI Cloud, proposed pay with confidence 0.95 | Refused by the rule mandate.payee_mismatch. Nothing was sent |
| 1 | 07:22 | Qwen/Qwen3.8-27B, attested, proposed pay with confidence 0.9 | Refused the same way. Nothing was sent |
| 2 | 07:24 | No model | The code rules alone allowed it: all 14 rules passed |
| 3 | 07:24 | None: this entry records the payment | Spend 2, burned, transaction BdN7oB76…rSQ9 |
Why code refused the two proposals. Both models proposed the right amount and the right Base address. Both also put the mandate's asset account, base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near (Base USDC as a NEAR token), in the payee hint's near_account field. The SDK the owner ran, at commit 4ab41ca, took any NEAR account in the hint as a contradiction for a mandate that pays a Base address (payeeHintContradiction in packages/core/src/policy.ts (opens in a new tab) at that commit). The rule's words in entry 0: "invoice names NEAR account base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near; the mandate pays base:0xB22EAcDf11177d6D635E8956BBbBdd54B3E6EB27". The rule, as it ran, had no case for a Base mandate's own asset account, so both were false refusals: the amount and the Base address were right, and they cost two tries and no money. After the run, PR #142 (opens in a new tab) changed the rule for a model's hint. In an invoice it is still refused. Why spend has no payee explains the rule.
Why the code rules alone decided the payment. The owner ran the cycle a third time with no model. The SDK decided with the code rules alone, and every rule passed. Entry 2's body hash, d64f0de77c38294cf103439e6b5b0c2623b96b114962afd50f5a3c553df2a336, is the decision_hash the spend carries, so the spend points at its own decision.
Spend 3: an attested model and the code rules#
The owner set up the second round the same day, with one transaction:
- Mandate 3. The owner's own Base wallet, the payee of mandate 2, up to 0.25 USDC, 1 use, until 2026-11-20 (transaction (opens in a new tab)).
The round added no USDC and no key. It paid from the 0.499823 Base USDC that spend 2's round left inside intents.near, and it wrote on the same ledger with the same ledger key. The kit ran the SDK at commit c85f41b, which holds PR #142 and PR #144 (opens in a new tab). It ran one cycle on INV-M003, which wrote entries 4 and 5, then anchor 4:
| Entry | Time (UTC) | Who proposed | What code decided |
|---|---|---|---|
| 4 | 11:40 | z-ai/glm-5.3-flash, an attested model on NEAR AI Cloud, proposed pay with confidence 0.92 | Allowed, decided by model+rules: all 16 rules passed |
| 5 | 11:41 | None: this entry records the payment | Spend 3, burned, transaction 5amtgb8M…9NGH |
Why code refused nothing this time. The model answered on attempt 1, in 38.2 seconds. Its payee hint named the mandate's Base address and no NEAR account, so mandate.payee_mismatch passed on the address alone. The 16 rules are the 14 of entry 2 plus model.refused and model.low_confidence, which passed with the action pay and a confidence of 0.92 over the floor of 0.7. The rule changes of PR #142 and PR #144 read a mandate's own asset account in a hint, and this hint gave them nothing to read, so they were not exercised on mainnet.
What the attestation shows. Before the SDK counted the answer, it checked the model's evidence: the signature, the response, the recorded proposal and the attestation report agree with each other and with ledger position 4 (A1 to A7), and the request matches the invoice text (A8). Entry 4's body hash, d3807956b1e0a0481656862a50a2147d2b0a1f04834a30829529311c9cec32aa, is the decision_hash spend 3 carries. The TDX quote and the GPU evidence are checked by verify --online (O1 and O2), which passed on this decision in a read-only run at 17:52 UTC on 2026-11-13 (output (opens in a new tab)), and the TEE measurement is not pinned, so this does not show which model image ran.
The ledger and its anchors#
The ledger key signs every entry, and each entry links the hash of the one before it. Each anchor stores on the vault how many entries it covers and their root. Ledger and anchors explains the format.
| Anchor | Covers | Root | Time (UTC) | Transaction |
|---|---|---|---|---|
| 1 | Entry 0 | 097e7bd7…7a90 | 07:18 | 8REzPLVw…LvPp (opens in a new tab) |
| 2 | Entries 0 and 1 | 2fb2b5cc…a7e0 | 07:22 | 6ULZZvGa…DMqY (opens in a new tab) |
| 3 | Entries 0 to 3 | 28ac4e58…e6c6 | 07:24 | 65eBfw6v…eA9Q (opens in a new tab) |
| 4 | Entries 0 to 5 | fcacffdc…c037 | 11:41 | 6jRY21z9…bLyG (opens in a new tab) |
Each refusal was anchored on chain before the next cycle began, so the vault held a root covering both refusals before spend 2 was sent. Anchor 4 came after spend 3 and covers all 6 entries. There are two ledger files, byte for byte as the runs wrote them: spend 2's (opens in a new tab) holds entries 0 to 3, and spend 3's (opens in a new tab) holds entries 0 to 5. Spend 3's file starts with spend 2's file, byte for byte.
Run the verifier#
The verifier checks the ledger file against the chain. It reads public mainnet data and signs nothing. Build the CLI from a clone, since the commands below read the ledger, the invoice texts and the evidence from its docs folder:
git clone https://github.com/probarion/probarion
cd probarion
pnpm install
pnpm --filter "{packages/cli}..." buildWith the ledger of 6 entries#
Run it live, with the ledger file that holds both payouts, the two invoice texts for A8, the repository's evidence for spend 1 and the recorded transactions:
node packages/cli/dist/bin.js --network mainnet --rpc https://rpc.mainnet.fastnear.com verify --vault v0.probarion.near --ledger docs/evidence/mainnet-v0/s2-2026-11-13/ledger-2026-11-13.jsonl --invoice docs/evidence/mainnet-v0/s1-2026-11-13/invoice-INV-M002.txt --invoice docs/evidence/mainnet-v0/s2-2026-11-13/invoice-INV-M003.txt --evidence docs/evidence --proof docs/mainnet-proof.jsonThe kit's live run at 11:41:26 UTC on 2026-11-13 ended with these two lines (the full output (opens in a new tab)):
8 passed, 0 failed, 0 unproven, 1 skipped
RESULT: PASSWhat each check found:
- Checks a, b and c: the 6 entries carry valid signatures by the ledger key, their hash links recompute from the zero link, and the 4 anchors on chain match the ledger.
- Check d: spends 2 and 3 are each bound to their own
allowdecision, entries 2 and 4, with the same invoice, mandate and amount. Spend 1 of 2026-11-11 is exempt: its decision is a file in the repository, from before the vault had a ledger. - Check e: the 3 attested decisions, entries 0, 1 and 4, pass A1 to A7, and A8 passes on all three with the two invoice texts. Entry 2 is reported as decided by code rules with no model, not failed.
- Checks f and g: no full-access key, every key is the ledger key or the agent key, and no key is registered for the vault in
intents.near. - Check h: spends 2 and 3 each have one matched burn pair, the
ft_burnmemo and the vault'smt_burnfor the spend's amount. - Check i skips: no factory made this vault.
The kit ran these checks from its own SDK clone at c85f41b, with the two burn transactions given with --burn-tx in place of --proof, because that commit's proof file had no spend 3, and with the invoices read from its own folder. The command above, with --proof docs/mainnet-proof.json and the committed invoices, gives the same counts.
Without --ledger, checks c and d fail: the chain's anchors cover 6 entries, and the spends' decisions are in no entry. With spend 2's ledger file of 4 entries, check c fails, because the chain's last anchor covers 6 entries, and check d fails, because spend 3's decision is in none of them. A live run passes while the chain's anchors cover the entries the file holds. When the vault anchors a later entry, use the ledger file that holds it.
To check this run with no network, read the snapshot the verifier wrote at 11:41:25 UTC:
node packages/cli/dist/bin.js verify --offline docs/evidence/mainnet-v0/s2-2026-11-13/snapshot-2026-11-13.json --invoice docs/evidence/mainnet-v0/s1-2026-11-13/invoice-INV-M002.txt --invoice docs/evidence/mainnet-v0/s2-2026-11-13/invoice-INV-M003.txtThe run after spend 2#
Before spend 3, the kit's live run at 07:24:43 UTC read spend 2's ledger file of 4 entries and INV-M002, and it ended with the same two lines (the full output (opens in a new tab)). Checks a to c passed on 4 entries and the 3 anchors on chain then. Check d bound spend 2 to entry 2. Check e found 2 attested decisions, entries 0 and 1, that pass A1 to A7, and A8 on both with the invoice text. Check h found spend 2's burn pair. To check that run with no network, read the snapshot the verifier wrote at 07:24:42 UTC:
node packages/cli/dist/bin.js verify --offline docs/evidence/mainnet-v0/s1-2026-11-13/snapshot-2026-11-13.json --invoice docs/evidence/mainnet-v0/s1-2026-11-13/invoice-INV-M002.txtThe Base side#
The Base side is not in the ledger: entries 3 and 5 record the burns on NEAR. To read the transfers with no key, ask Base's public RPC:
curl -s https://mainnet.base.org -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["0xc2df8f8799467834cdaed0e8f23638af49334483387560fd34ef360939e1ea71"]}'
curl -s https://mainnet.base.org -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["0xc6c4507e098b558bdff1b5836600f5e3365fee5a63037d399db58e1db4547ab7"]}'Spend 2's answers "status":"0x1" and "blockNumber":"0x363070a" (56821514), with one Transfer log on the USDC contract, from 0x2cff890f0378a11913b6129b2e97417a2c302680 to 0xb22eacdf11177d6d635e8956bbbbdd54b3e6eb27, whose data ends in f38e0: 997600. Spend 3's answers "status":"0x1" and "blockNumber":"0x36433de" (56898526), with one Transfer log between the same two addresses, whose data ends in 3c730: 247600.
The fee and the cost#
- The bridge fee. For spend 2 the vault burned 1000000 and the owner's wallet received 997600, and for spend 3 it burned 250000 and the wallet received 247600. The POA bridge's statuses say
withdrawal_fee2400 for each (spend 2 (opens in a new tab), spend 3 (opens in a new tab)). Probarion took none. - The top-up. 1Click took 1500000 of native USDC and credited 1499823 of Base USDC to the vault inside
intents.near(status (opens in a new tab)). The vault kept 0.499823 Base USDC there after spend 2, and 0.249823 after spend 3. - The gas. Spend 2 burned 15.35 Tgas, 0.001423 NEAR, and spend 3 burned 15.36 Tgas, 0.001424 NEAR, each summed over the transaction and every receipt, read from an archival node (spend 2 (opens in a new tab), spend 3 (opens in a new tab)). Limits and costs lists the gas the contracts attach.
The NEAR technology in these runs#
| Technology | What it did here |
|---|---|
| NEAR Intents 1Click | Swapped 1.5 native USDC into Base USDC inside intents.near, credited to the vault, before spend 2 |
ft_withdraw on intents.near | The vault's call that burned 1.00 and then 0.25 Base USDC, each with the memo the vault built from its mandate |
| POA bridge | Released 0.9976 USDC and 0.2476 USDC on Base to the mandates' address and kept 0.0024 USDC of each as its fee |
| NEAR AI Cloud | For INV-M002, two attested models proposed paying, and code refused both proposals. For INV-M003, one attested model proposed paying, and the code rules allowed it |
| Function-call access keys | The agent key can call spend and nothing else. The ledger key can call anchor and nothing else |
| Ledger anchors | 4 anchors on the vault cover the 6 signed entries, so the chain holds a root for every decision |
Where to go next#
- Testnet and mainnet covers the mainnet vault and its run of 2026-11-11.
- Verify a vault walks the verifier on a testnet vault, offline and live.
- Verifier checks says what each check proves.
- Vaults, roles and keys covers the agent key and the ledger key.
What this does not do#
- They are tests, not customer payments. Two payouts, of 1.00 USDC and 0.25 USDC, went to the owner's own Base wallet: one decided by the code rules alone, one proposed by an attested model and allowed by the code rules. They show the cross-chain path works on mainnet for this vault. They do not show a business paying a supplier.
- By 2026-11-13, one mainnet payment had come from a model's proposal. Spend 1 of 2026-11-11 was sent without the SDK, spend 2 was decided by the code rules alone, and spend 3 was proposed by an attested model and allowed by the code rules.
- The model hint fix came after spend 2's run. After it, PR #142 (opens in a new tab) changed
payeeHintContradiction: in a model's hint, a Base or Solana mandate's own asset account names no other payee. In an invoice it is still refused. Spend 2's run used the code before it, at commit4ab41ca. Spend 3's run used commitc85f41b, which holds it, but its hint named no NEAR account, so the change was not exercised. - The attestation does not show which model image ran. A1 to A8 passed on entries 0, 1 and 4, and a later read-only run of
verify --onlinepassed O1 and O2 on all three (output (opens in a new tab)). The TEE measurement is not pinned, so the record does not show which model image ran. - The contract checks the burn, not the arrival. The vault's part ends with the burn on NEAR. The POA bridge releases the USDC on Base, and check 07 reads that from Base.
- No console or proof page serves this vault. Both serve testnet. The mainnet factory is not deployed, so the console cannot create a mainnet vault yet.
Built from f388114 · reviewed
docs/evidence/mainnet-v0/s1-2026-11-13/README.md(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/ledger-2026-11-13.jsonl(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/verify-2026-11-13.txt(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/poa-status.json(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/oneclick-status-final.json(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/gas-spend-2.json(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/txs.log(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/outcome-20261113T071746Z.json(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/outcome-20261113T072221Z.json(opens in a new tab)docs/evidence/mainnet-v0/s1-2026-11-13/outcome-20261113T072425Z.json(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/README.md(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/ledger-2026-11-13.jsonl(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/verify-2026-11-13.txt(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/verify-online-2026-11-13.txt(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/poa-status.json(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/base-receipt.json(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/gas-spend-3.json(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/txs.log(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/outcome-20261113T114028Z.json(opens in a new tab)docs/evidence/mainnet-v0/s2-2026-11-13/invoice-INV-M003.txt(opens in a new tab)docs/mainnet-proof.json(opens in a new tab)contracts/deployments/mainnet.json(opens in a new tab)apps/web/src/lib/site/mainnet-payout.ts(opens in a new tab)apps/web/src/lib/site/mainnet-payout-recorded.json(opens in a new tab)apps/web/src/lib/site/facts.ts(opens in a new tab)packages/core/src/policy.ts(opens in a new tab)packages/core/src/types.ts(opens in a new tab)packages/cli/src/commands/verify.ts(opens in a new tab)contracts/vault/src/types.rs(opens in a new tab)README.md(opens in a new tab)