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-13Transaction
Operator 1 proposes a request for 900,000,000.00, and approves itFwiTj2ao…, GWDL9Dyr…
Operator 2 approves it too: the enclave still refusesDubr3TBc…
Operator 1 proposes the settlementDV7rjHqd…
Operator 1 approves: nothing movesGcGWLS8L…
Operator 2 approves: that transaction pays three lenders3zDwMAgB…
Two operators settle the short payment: four lenders are each paid halfEgCyUC3e…, 8CgtGPkL…, whwMQ8ae…
Two operators settle the next period: every unpaid half is paid42HB29Km…, 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:

  1. 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.
  2. 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%.
  3. 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.