Use this file to discover all available pages before exploring further.
This guide shows the smallest useful Ryvo integration: one payer, one payee, one token, one payment channel, and one settled ryvo-cmt-v5 message.The examples below mirror the current protocol tests. They use raw Anchor calls so you can see the exact accounts and signatures involved.
If you don’t need that level of control, the official @ryvonetwork/sdk wraps every step on this page into one or two method calls. See the SDK Recipes for the same flow in a dozen lines.
Anchor workspace wired to the Ryvo program at 3UyUFeNsUYPpM6hMRf7H8wg3MKEXQ82rqnsXhZrUwgSD on devnet
Two keypairs with a small amount of SOL on devnet
One allowlisted settlement token. Gateway-channel v1 uses official devnet USDC, mint 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU; resolve its token_id from TokenRegistry or RYVO_PROTOCOL_DEVNET_USDC_TOKEN_ID.
import * as anchor from "@coral-xyz/anchor";import { Program } from "@coral-xyz/anchor";import { Ed25519Program, PublicKey, SystemProgram } from "@solana/web3.js";import { RyvoProtocol } from "../target/types/ryvo_protocol";const provider = anchor.AnchorProvider.env();anchor.setProvider(provider);const program = anchor.workspace.RyvoProtocol as Program<RyvoProtocol>;
The channel PDA seed order is payer_id (u32 LE) || payee_id (u32 LE) || token_id (u16 LE) under the channel-v2 prefix. If you derive in a different order, settle_* instructions will reject the account.
The payeeOwner signer is only required when the payee’s inbound-channel policy demands consent. Under Permissionless, channel creation does not require the payee to sign.
ryvo-cmt-v5 is cumulative. It does not say “pay 25 again.” It says “this channel is now authorized up to cumulative amount X.”The helper below matches the real test suite:
The signer above must match the channel’s current authorized_signer. This key signs new cumulative payment amounts for that channel. By default it is the payer wallet that created the channel; if the channel uses a different signing key, that key must sign here instead.
authorized_signer signs the payment update. Settlement submitter logic stays outside the signed commitment body.
The program verifies the Ed25519 instruction, parses the message, checks the message_domain, validates the canonical payer / payee / token / channel, then moves the delta between the old and new cumulative amounts.
The payee balance has increased by the same amount.
Any locked funds used by the settlement have been consumed first.
If an operator also needs to be paid, model that as a separate channel payment rather than as a fee field inside this message. See Operator payment.That is the full direct settlement flow.