participant_id for the life of the deployment. Participants deposit allowlisted tokens into protocol balances. When one participant pays another, they create one permanent one-way payment channel for that token. The payer may optionally lock funds to that channel if the relationship needs guaranteed payment capacity.
On-chain objects
The current architecture uses global singletons plus bucketed participant and channel state:
Full field-level layouts are on the Account layouts reference.
Signed messages
Ryvo uses two signed message formats:ryvo-cmt-v5- the unilateral cumulative commitment for one channelRyvo-round- the cooperative clearing-round body for several participants
message_domain, so a signature for one environment does not verify on another. Full byte-level layouts are on the Message formats reference.
Settlement paths
Those two messages feed three settlement instructions:
All three settle into the same shared vault and the same participant balances.
End-to-end flow
In the common case, an integration goes through these steps:- Register the payer and payee as participants.
- Deposit an allowlisted token.
- Create a one-way payment channel.
- Optionally lock funds to that channel for guaranteed capacity.
- Sign cumulative commitments off-chain as usage grows.
- Settle the newest valid state later.
What stays off-chain
Ryvo keeps signed payment updates off-chain until settlement. Most integrations store:- the latest signed
ryvo-cmt-v5per channel - usage or metering state
- bundle assembly logic
- cooperative round construction logic
Why Ryvo uses permanent identities and persistent lanes
Ryvo intentionally uses stable identities and permanent channels. The tradeoff is more long-lived on-chain state, but the protocol becomes much easier to work with:participant_idvalues do not recycle.- Off-chain services can index users without worrying about identity reuse.
- Channels do not close and reopen, so there is no reopened-channel replay surface.
- Replay protection is simpler.
- Payment channels stay stable for clients and operators.
Choosing a settlement mode
- Use direct settlement when one payer and one payee need the smallest possible surface and each lane can settle on its own.
- Use bundle settlement when one payee collects signed commitments from many payers in the same token and wants one transaction instead of many.
- Use cooperative clearing when several parties are willing to co-sign one shared round so many lanes can be advanced in one transaction.
Current deployment
See Deployment for environment-specific chain IDs and timelocks.
Where to go next
Your first payment
Build the smallest useful Ryvo integration with real Anchor calls.
Payment channels
How one-way, permanent channels are modeled and maintained.
Commitments
How cumulative signed messages work and why they are cheap to update.
Instructions
The full on-chain instruction surface.
