dfmiTWO FATES
Live demo · reads the dfmi chain from your browser

One signature, two fates — verified right now.

An agent signed two payments with the same session key — same format, same validity, budget unspent. One settled. One was refused. The difference wasn't cryptography; it was intent. Below, your own browser queries the chain to verify every piece of that story, live.

The two runs · recorded output
$ node intent-pay.mjs 0x86CF…2DeB 0.02 # a registered market-data payee intent pre-check: payee category 1 | inside intent → submitting agent 0xd558…3409 signed: 0.02 dUSD → 0x86CF…2DeB ✓ settled | tx 0xa2272a9c…2db8062b | remaining 0.48 dUSD $ node intent-pay.mjs 0x23d7…39f7 0.02 # an address outside the granted intent intent pre-check: payee category 0 | outside intent → submitting anyway agent 0xd558…3409 signed: 0.02 dUSD → 0x23d7…39f7 ⛔ reverted: unregistered payee — same key, same valid signature, budget untouched. Refused only because this payee is outside what the key was granted to want.
Don't trust the screenshot — ask the chain
Is the first payee registered as market-data (category 1)?querying…
Is the second payee registered at all?querying…
Does the wallet allow this session key → market-data payee?querying…
Does the wallet allow this session key → the other address?querying…
Did the in-intent payment really settle on-chain?querying…
Session budget remaining right nowquerying…

Every row above is a read-only JSON-RPC call your browser just made to ethereum.dfmi.app — registry 0xED13…4A81, wallet 0x8FDD…50fB, settled tx 0xa2272a9c…b8062b. Nothing is served from a database; refresh and it asks again.

Run it yourself — send the two payments now

These buttons ask the dfmi relay to sign — with the same disposable, capped session key — and submit two real transactions for you. One pays a market-data payee (inside the key's intent) and settles; one pays an unregistered address (outside intent) and reverts. No wallet, no key, nothing to install.

The buttons above run both payments live for you. Prefer a terminal? The same two commands ship with the open-source repo (dfmi-app). Or do the human version in the owner console: grant a key, watch it spend, revoke it.