OpaqueApp

Docs/Concepts

Relayer and fees

Who sends your transactions, and what they cost.

Why a relayer

If your wallet submitted a withdrawal, the chain would show your wallet paying for a transaction that moved tokens to an address. That link is the whole thing Opaque exists to cut. So transfers and withdrawals are submitted by a relayer: a server that receives your finished proof and sends it from its own address.

Deposits are the exception. A deposit pulls tokens from your wallet, so your wallet has to sign it.

What the relayer can and cannot do

The relayer can submit your transaction or decline to. It cannot change it. The recipient, the amounts, the relayer address and the fee are all hashed into the proof; alter any byte and the proof fails. If the relayer is unavailable, you can submit the same transaction from any address yourself.

Fees and rent

Sent byNetwork cost
DepositYour walletPaid by you in SOL
TransferRelayerPaid by the relayer
WithdrawalRelayerPaid by the relayer
Cross orderRelayerPaid by the relayer
Cross claimOpaque's keeperPaid by the keeper

On Solana the cost of a transaction is mostly rent, not fees: spending a note creates a small account that marks it spent, and that account stays. A deposit is two transactions signed with one approval and costs about 0.002 SOL in rent and fees; the staging account the first one creates is closed by the second, and its rent comes back to you.

Where the relayer charges for what it pays, the charge is taken from the notes you spend, in the asset you are moving, and the app shows it before you confirm. A transfer that pays a fee reveals the asset it is paid in; a transfer with no fee reveals nothing.