PayMoney

Prove what your balance did

Follow the steps from top to bottom. Every step runs in the paymoney binary on your machine, and the activity line shows what is running; the binary logs to its standard error, which Chrome keeps in its own log.

1 · Set up

Open chrome://extensions, turn on Developer mode, choose Load unpacked and select target/pm/unpacked in paymoney-finance, built by npm run build -w extension; then reload this page.

Install the binary and register it with Chrome. The binary reads JSON-RPC 2.0 messages, one per length-prefixed native-messaging frame; it reaches this server's notary over HTTP/3, and this server verifies roots only from that notary.

cargo install --git https://github.com/visoftlabs/paymoney
printf '\053\000\000\000{"jsonrpc":"2.0","id":1,"method":"install"}' | paymoney | tail -c +5

Log in to Revolut in another tab. The extension keeps the headers of Revolut's own API calls per host; this page sees only their names, and lists each one for the extension to attach to its requests. This page follows the session as it changes.

Open Revolut

Extension
not announced
Binary
not checked yet
Revolut session
not checked yet

2 · Choose a pocket and list its transactions

Need a fresh transaction? Send a transfer

A plain request to api.revolut.com with the headers captured from app.revolut.com, not notarized. Once Revolut completes it, list the transactions again.

3 · Notarize and prove legs

Each row is one leg of a transaction. Notarize fetches its details through MPC-TLS; the notary signs commitments to the bytes without seeing them. Prove checks that signature and reads the leg from those bytes, in zero knowledge. Only COMPLETED legs can be proven.

    4 · Aggregate the selected legs

    no proven legs selectedno root yet

    5 · Verify on the server

    Activity