How it works

One address per invoice, step by step.

Nayro gives every invoice its own deposit address on Robinhood Chain, so your payout wallet is not on the invoice and appears on chain only when you collect.

1. You make an invoice

In the browser you choose the asset (ETH, USDG or any ERC-20 by address), the amount, an optional note and an expiry. You sign one message once per tab; it sends nothing and costs nothing. From that signature the page derives a private number for each invoice.

The deposit address is then computed, not created:

address = CREATE2(desk, keccak256(abi.encode(payout, controller, ref)), keccak256(cell code))

payout is where the money goes, controller is the wallet that may sign a refund, a redirect or a close (or none), and ref is the private number. Nothing is written to the chain at this step. The amount, the note and the expiry are kept in your browser and in the link.

2. The payer pays the address

The payer opens a link with the deposit address, the asset and the amount. It does not contain your payout address or the private number. They pay with a plain transfer from any wallet; the pay page can also send it for them.

Public after this step

  • The payer's wallet, the amount, the asset and the time are public, like any transfer on Robinhood Chain.
  • That the deposit address received funds.

Not on chain after this step

  • Your payout address, the note, the invoice number, and the fact that this address belongs to you.

Nayro cannot check who made a pay link. Pay only links you got from the person you owe.

3. You collect

One call to the desk creates the small cell contract at that address (the first time) and moves its whole balance of the asset to the payout. Anyone may send this call, but the funds can only go to the payout written into the address. You can collect several invoices in one transaction.

Public after this step

  • Collecting publicly links the invoice address to the payout address; collecting several invoices in one transaction links them to each other.
  • The wallet that sent the collect transaction.

4. Refund, redirect or close

If the invoice has a controller, that wallet can sign a typed message (EIP-712) to send the balance to another address: a refund to the payer, or a new payout if the old one cannot receive. It can also close the invoice; its pay page then refuses to send. Every signature carries a nonce and a deadline and works once.

What Nayro is not

  • Nayro is not a private payment system. It keeps your main wallet off each invoice until you collect; it does not hide who paid, how much or when.
  • It is not a wallet, an exchange or a payment processor. It never holds your keys, and the desk contract never holds a balance of its own.
  • It does not convert currencies, and it does not check who the payer is.

Risks

  • The desk contract is new and has had no outside review. Try a small invoice first.
  • Some tokens can block addresses. If a token blocks the deposit address, the funds there cannot move. If it blocks the payout, the controller can redirect them.
  • If you lose the invoice file and the wallet that made it, the money at an address can still only go to its payout, but you may not find the address. Export your invoices.
  • An invoice without a controller can never be refunded or closed. Collecting to its payout always works.

Planned, not built

  • A payment API and webhooks for shops.
  • A hosted dashboard that keeps invoices across devices.
  • Paying an invoice in another asset than the one it asks for.
  • Private balances or private payments. A fresh address is not that, and Nayro will not call it that.

See the roadmap · Read the contract · Make an invoice