payer_id + payee_id + token_id triple. Each channel is stored in one ChannelState PDA under the channel-v2 seed scheme.
Why one-way
Agon channels are intentionally unidirectional because the common case is unidirectional:- one buyer paying one API
- one agent paying one tool
- one service paying one provider
What ChannelState stores
| Field | Meaning |
|---|---|
token_id | Settlement token for this channel |
payer_id | Participant that owes value on this channel |
payee_id | Participant that receives value on this channel |
settled_cumulative | Highest cumulative amount already settled |
locked_balance | Funds reserved for this channel |
authorized_signer | Key allowed to sign unilateral payment updates |
pending_unlock_amount + unlock_requested_at | Timelocked unlock request |
pending_authorized_signer + authorized_signer_update_requested_at | Timelocked signer rotation request |
Creating a channel
The payer creates the channel and pays the account rent. The payee may also need to sign, depending on its inbound channel policy.null for authorized_signer, the protocol uses the payer wallet as the signing key by default.
Locked funds
Locked funds are optional. Use them when the payee wants guaranteed payment capacity on the channel. If funds are locked, settlement spends locked balance first and shared participant balance second. Unlocking is intentionally delayed:- The payer requests an unlock (
request_unlock_channel_funds). - The protocol waits through the configured timelock.
- The payer executes the unlock (
execute_unlock_channel_funds) and receives the remaining locked amount back intoavailable_balance.
Channel signing key
Each channel has one signing key for unilateral commitments. By default that is the payer wallet, but the payer can choose a different key at creation time or rotate it later.The signing key is distinct from
authorized_settler:authorized_signersigns new cumulative payment amounts.authorized_settlermay submit a signed commitment on-chain.
request_update_channel_authorized_signer- Wait through the timelock.
execute_update_channel_authorized_signer
Why channels are permanent
Older designs allowed channels to close and reopen. V4 removed that behavior. Permanent channels make the protocol easier to work with:- There is no close-and-reopen replay boundary.
- Payment channels stay stable for off-chain services.
- The protocol has fewer lifecycle rules to handle.
See also
- Commitments — the signed messages that flow over channels
- Balances and withdrawals
- Trust and collateral
- Direct settlement
- Account layouts

