Design
The agent, two of three
The deal's agent can be a Sputnik DAO with three operators, of whom two must approve. Nothing in the rules contract or the enclave changes for this.
A real agent desk does not act on one person’s word, and on a chain it should not act on one key. On NEAR an account can be a contract, so the deal’s agent can be a Sputnik DAO. The contract checks that the caller is the deal’s agent, and the agent is the DAO.
- Each of the agent’s actions (fix the rate, request interest, settle a payment, settle a trade) is a DAO proposal to call the rules contract.
- Operator 1 proposes and approves. Nothing moves. The books’ fingerprint stays the same and no lender is paid.
- A second operator approves, and it settles. That one transaction runs DAO → rules contract → enclave and back, and credits every lender.
- Approval does not replace the rule. At Citibank three people approved the Revlon wire, under the bank’s “six-eye” check, and it still went out. Here two operators can approve a request for 900,000,000.00 and the enclave still refuses it.
The recorded run
The recorded run of deal northwind-13 is the whole deal played this way, by paridesk-agent.sputnikv2.testnet with operators op1, op2 and op3:
| Step of deal northwind-13 | Transaction |
|---|---|
| Operator 1 proposes a request for 900,000,000.00, and approves it | FwiTj2ao…, GWDL9Dyr… |
| Operator 2 approves it too: the enclave still refuses | Dubr3TBc… |
| Operator 1 proposes the settlement | DV7rjHqd… |
| Operator 1 approves: nothing moves | GcGWLS8L… |
| Operator 2 approves: that transaction pays three lenders | 3zDwMAgB… |
| Two operators settle the short payment: four lenders are each paid half | EgCyUC3e…, 8CgtGPkL…, whwMQ8ae… |
| Two operators settle the next period: every unpaid half is paid | 42HB29Km…, 3QZrUvKQ…, 7Vcf7jDE… |
All 62 transactions are in near/runs/northwind-13.json, and npm run prove:privacy -- northwind-13 runs the leak test on them.
Play it yourself
On your own deployment:
npm run setup -- --fresh --dao # makes the DAO and a new deal whose agent is the DAO
npm run e2e # the same deal; every agent action takes two operators--dao needs about 11 NEAR more than the plain setup: 6 to create the DAO, and 1.5 for each operator, which covers the 1 NEAR bond the DAO holds while a proposal waits. In the browser, on a deal made with --dao:
- Open
/agent. A panel Two of three names the DAO. Press Fix rate. You see: Proposed, and approved by operator 1 of 3. Nothing has moved: proposal 1 runs when a second operator approves it. (The number counts the DAO’s proposals, so yours may differ.) The panel lists the proposal, and the rate still reads Not fixed. - In the panel, press Approve as operator 2. You see: Two of three operators approved, so the agent acted. Base rate fixed at 4.30% to 15 Dec 2026. All-in 7.80%.
- Request
900,000,000.00, then press Approve as operator 3. You see: Refused. You entered 900,000,000.00; the register says 1,971,666.66.
Every other step of the walk in Check it yourself works the same way, with one more press for each of the agent’s actions.
What a DAO makes public
A proposal’s arguments are public, as everything in a DAO is: the rate, the total, the number of a request or a trade. None of them is a secret, and the rules contract’s own record shows the same figures. The leak test passes on the DAO run as well.
In the demo, when the agent is a DAO, the server holds all three operators’ keys as well. In production each party, and each operator, holds its own.