Skip to main content

Asset channels

RGB v0.11 line (rgb-cmd 0.11.1)

Asset channels exist only for v0.11, through the RGB Lightning Node (RLN), which is alpha software for regtest and testnet. Read RGB on Lightning first. See Two RGB lines.

An RGB channel is a Lightning channel that also holds a balance of one RGB asset. Everything below comes from RLN's openapi.yaml and src/routes.rs (commit of 2026-09-17).

Opening​

POST /openchannel:

FieldMeaning
peer_pubkey_and_opt_addr<pubkey>@<host>:<port>
capacity_satBitcoin capacity. An RGB channel needs at least 30,010 sats. Every channel must be between 5,506 and 16,777,215 sats.
push_msatBitcoin given to the peer at opening
asset_id, asset_amountThe RGB contract and the amount you put in (at least 1). Give both or neither.
push_asset_amountAsset units given to the peer at opening (at most asset_amount)
publicAnnounce the channel in gossip
with_anchorsMust be true for RGB channels
fee_base_msat, fee_proportional_millionthsYour routing fees, in msat
curl -X POST -H "Content-type: application/json" \
-d '{"peer_pubkey_and_opt_addr": "<pubkey>@localhost:9736", "capacity_sat": 30010,
"push_msat": 0, "asset_id": "<asset_id>", "asset_amount": 500, "push_asset_amount": 0,
"public": true, "with_anchors": true}' \
http://localhost:3001/openchannel

Only the opener funds the channel. There is no dual funding and no splicing. The funding transaction sends the bitcoin and the asset (an on-chain RGB transfer) to the 2-of-2 multisig output. The channel becomes usable after 6 confirmations. The node's own limits are in GET /nodeinfo: rgb_channel_capacity_min_sat, channel_capacity_min_sat, channel_capacity_max_sat, channel_asset_min_amount, channel_asset_max_amount and rgb_htlc_min_msat.

Keep bitcoin on both sides

Every RGB HTLC also carries at least 3,000 sats. A side whose bitcoin balance can't cover that minimum (plus reserve and fees) can't send asset payments, even if it holds asset units. Size capacity_sat and push_msat with that in mind.

Checking​

GET /listchannels returns each channel's status (Opening, Opened, Closing), ready, is_usable, the bitcoin balances in msat, and asset_id, asset_local_amount and asset_remote_amount. POST /assetbalance {"asset_id"} adds offchain_outbound and offchain_inbound to the on-chain figures.

Closing​

curl -X POST -H "Content-type: application/json" \
-d '{"channel_id": "<channel_id>", "peer_pubkey": "<pubkey>", "force": false}' \
http://localhost:3001/closechannel
  • Cooperative close: the closing transaction carries an RGB transition that gives each side its asset balance as ordinary on-chain allocations.
  • Force close ("force": true): the latest commitment transaction is broadcast. It already anchors the RGB state of each output through its OP_RETURN commitment, so the assets settle on chain with it. Your own output stays timelocked as usual in Lightning.
Alpha software

RLN uses a fixed fee rate and has no CPFP or anchor fee bumping (maintainers, 2026-06-23). A force close can get stuck in a fee spike. Use only amounts you can afford to lose, on regtest or testnet.

There is no per-channel backup. POST /backup writes an encrypted backup of the whole node.