core-lightning/doc/schemas/listpeers.schema.json
niftynei 081ef05dd1 listchannels: add funding_outnum to listchannels
Changelog-Added: JSONRPC: `listchannels` now includes the `funding_outnum`
2022-02-07 13:02:09 +10:30

1134 lines
43 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": false,
"required": [
"peers"
],
"properties": {
"peers": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"required": [
"id",
"connected",
"channels"
],
"properties": {
"id": {
"type": "pubkey",
"description": "the public key of the peer"
},
"connected": {
"type": "boolean",
"description": "True if the peer is currently connected"
},
"log": {
"type": "array",
"description": "if *level* is specified, logs for this peer",
"items": {
"type": "object",
"additionalProperties": true,
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"SKIPPED",
"BROKEN",
"UNUSUAL",
"INFO",
"DEBUG",
"IO_IN",
"IO_OUT"
]
}
},
"allOf": [
{
"if": {
"properties": {
"type": {
"enum": [
"SKIPPED"
]
}
}
},
"then": {
"type": "object",
"additionalProperties": false,
"required": [
"num_skipped"
],
"properties": {
"type": {},
"num_skipped": {
"type": "u32",
"description": "number of deleted/omitted entries"
}
}
}
},
{
"if": {
"properties": {
"type": {
"enum": [
"BROKEN",
"UNUSUAL",
"INFO",
"DEBUG"
]
}
}
},
"then": {
"type": "object",
"additionalProperties": false,
"required": [
"time",
"source",
"log",
"node_id"
],
"properties": {
"type": {},
"time": {
"type": "string",
"description": "UNIX timestamp with 9 decimal places"
},
"source": {
"type": "string",
"description": "The particular logbook this was found in"
},
"log": {
"type": "string",
"description": "The actual log message"
},
"node_id": {
"type": "pubkey",
"description": "The peer this is associated with"
}
}
}
},
{
"if": {
"properties": {
"type": {
"enum": [
"IO_IN",
"IO_OUT"
]
}
}
},
"then": {
"type": "object",
"additionalProperties": false,
"required": [
"time",
"source",
"log",
"node_id",
"data"
],
"properties": {
"type": {},
"time": {
"type": "string",
"description": "UNIX timestamp with 9 decimal places"
},
"source": {
"type": "string",
"description": "The particular logbook this was found in"
},
"log": {
"type": "string",
"description": "The actual log message"
},
"node_id": {
"type": "pubkey",
"description": "The peer this is associated with"
},
"data": {
"type": "hex",
"description": "The IO which occurred"
}
}
}
}
]
}
},
"channels": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"required": [
"state",
"opener",
"features"
],
"properties": {
"state": {
"type": "string",
"enum": [
"OPENINGD",
"CHANNELD_AWAITING_LOCKIN",
"CHANNELD_NORMAL",
"CHANNELD_SHUTTING_DOWN",
"CLOSINGD_SIGEXCHANGE",
"CLOSINGD_COMPLETE",
"AWAITING_UNILATERAL",
"FUNDING_SPEND_SEEN",
"ONCHAIN",
"DUALOPEND_OPEN_INIT",
"DUALOPEND_AWAITING_LOCKIN"
],
"description": "the channel state, in particular \"CHANNELD_NORMAL\" means the channel can be used normally"
},
"scratch_txid": {
"type": "txid",
"description": "The txid we would use if we went onchain now"
},
"feerate": {
"type": "object",
"description": "Feerates for the current tx",
"additionalProperties": false,
"required": [
"perkw",
"perkb"
],
"properties": {
"perkw": {
"type": "u32",
"description": "Feerate per 1000 weight (i.e kSipa)"
},
"perkb": {
"type": "u32",
"description": "Feerate per 1000 virtual bytes"
}
}
},
"owner": {
"type": "string",
"description": "The current subdaemon controlling this connection"
},
"short_channel_id": {
"type": "short_channel_id",
"description": "The short_channel_id (once locked in)"
},
"channel_id": {
"type": "hex",
"description": "The full channel_id",
"minLength": 64,
"maxLength": 64
},
"funding_txid": {
"type": "txid",
"description": "ID of the funding transaction"
},
"funding_outnum": {
"type": "u32",
"description": "The 0-based output number of the funding transaction which opens the channel"
},
"initial_feerate": {
"type": "string",
"description": "For inflight opens, the first feerate used to initiate the channel open"
},
"last_feerate": {
"type": "string",
"description": "For inflight opens, the most recent feerate used on the channel open"
},
"next_feerate": {
"type": "string",
"description": "For inflight opens, the next feerate we'll use for the channel open"
},
"next_fee_step": {
"type": "u32",
"description": "For inflight opens, the next feerate step we'll use for the channel open"
},
"inflight": {
"type": "array",
"description": "Current candidate funding transactions (only for dual-funding)",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"funding_txid",
"funding_outnum",
"feerate",
"total_funding_msat",
"our_funding_msat",
"scratch_txid"
],
"properties": {
"funding_txid": {
"type": "txid",
"description": "ID of the funding transaction"
},
"funding_outnum": {
"type": "u32",
"description": "The 0-based output number of the funding transaction which opens the channel"
},
"feerate": {
"type": "string",
"description": "The feerate for this funding transaction in per-1000-weight, with \"kpw\" appended"
},
"total_funding_msat": {
"type": "msat",
"description": "total amount in the channel"
},
"our_funding_msat": {
"type": "msat",
"description": "amount we have in the channel"
},
"scratch_txid": {
"type": "txid",
"description": "The commitment transaction txid we would use if we went onchain now"
}
}
}
},
"close_to": {
"type": "hex",
"description": "scriptPubkey which we have to close to if we mutual close"
},
"private": {
"type": "boolean",
"description": "if False, we will not announce this channel"
},
"opener": {
"type": "string",
"enum": [
"local",
"remote"
],
"description": "Who initiated the channel"
},
"closer": {
"FIXME": "deprecated_apis turns off null!",
"type": [
"string",
"null"
],
"enum": [
"local",
"remote",
null
],
"description": "Who initiated the channel close (`null` is deprecated!)"
},
"features": {
"type": "array",
"items": {
"type": "string",
"enum": [
"option_static_remotekey",
"option_anchor_outputs"
],
"description": "BOLT #9 features which apply to this channel"
}
},
"funding": {
"type": "object",
"additionalProperties": false,
"required": [
"local_msat",
"remote_msat"
],
"properties": {
"local_msat": {
"type": "msat",
"description": "Amount of channel we funded"
},
"remote_msat": {
"type": "msat",
"description": "Amount of channel they funded"
}
}
},
"funding_allocation_msat": {
"deprecated": true
},
"funding_msat": {
"deprecated": true
},
"to_us_msat": {
"type": "msat",
"description": "how much of channel is owed to us"
},
"min_to_us_msat": {
"type": "msat",
"description": "least amount owed to us ever"
},
"max_to_us_msat": {
"type": "msat",
"description": "most amount owed to us ever"
},
"total_msat": {
"type": "msat",
"description": "total amount in the channel"
},
"fee_base_msat": {
"type": "msat",
"description": "amount we charge to use the channel"
},
"fee_proportional_millionths": {
"type": "u32",
"description": "amount we charge to use the channel in parts-per-million"
},
"dust_limit_msat": {
"type": "msat",
"description": "minimum amount for an output on the channel transactions"
},
"max_total_htlc_in_msat": {
"type": "msat",
"description": "max amount accept in a single payment"
},
"their_reserve_msat": {
"type": "msat",
"description": "minimum we insist they keep in channel"
},
"our_reserve_msat": {
"type": "msat",
"description": "minimum they insist we keep in channel"
},
"spendable_msat": {
"type": "msat",
"description": "total we could send through channel"
},
"receivable_msat": {
"type": "msat",
"description": "total peer could send through channel"
},
"minimum_htlc_in_msat": {
"type": "msat",
"description": "the minimum amount HTLC we accept"
},
"their_to_self_delay": {
"type": "u32",
"description": "the number of blocks before they can take their funds if they unilateral close"
},
"our_to_self_delay": {
"type": "u32",
"description": "the number of blocks before we can take our funds if we unilateral close"
},
"max_accepted_htlcs": {
"type": "u32",
"description": "Maximum number of incoming HTLC we will accept at once"
},
"msatoshi_to_us": {
"deprecated": true
},
"msatoshi_to_us_min": {
"deprecated": true
},
"msatoshi_to_us_max": {
"deprecated": true
},
"msatoshi_total": {
"deprecated": true
},
"dust_limit_satoshis": {
"deprecated": true
},
"max_htlc_value_in_flight_msat": {
"deprecated": true
},
"our_channel_reserve_satoshis": {
"deprecated": true
},
"their_channel_reserve_satoshis": {
"deprecated": true
},
"spendable_msatoshi": {
"deprecated": true
},
"receivable_msatoshi": {
"deprecated": true
},
"htlc_minimum_msat": {
"deprecated": true
},
"state_changes": {
"type": "array",
"description": "Prior state changes",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"timestamp",
"old_state",
"new_state",
"cause",
"message"
],
"properties": {
"timestamp": {
"type": "string",
"description": "UTC timestamp of form YYYY-mm-ddTHH:MM:SS.%03dZ"
},
"old_state": {
"type": "string",
"enum": [
"OPENINGD",
"CHANNELD_AWAITING_LOCKIN",
"CHANNELD_NORMAL",
"CHANNELD_SHUTTING_DOWN",
"CLOSINGD_SIGEXCHANGE",
"CLOSINGD_COMPLETE",
"AWAITING_UNILATERAL",
"FUNDING_SPEND_SEEN",
"ONCHAIN",
"DUALOPEND_OPEN_INIT",
"DUALOPEND_AWAITING_LOCKIN"
],
"description": "Previous state"
},
"new_state": {
"type": "string",
"enum": [
"OPENINGD",
"CHANNELD_AWAITING_LOCKIN",
"CHANNELD_NORMAL",
"CHANNELD_SHUTTING_DOWN",
"CLOSINGD_SIGEXCHANGE",
"CLOSINGD_COMPLETE",
"AWAITING_UNILATERAL",
"FUNDING_SPEND_SEEN",
"ONCHAIN",
"DUALOPEND_OPEN_INIT",
"DUALOPEND_AWAITING_LOCKIN"
],
"description": "New state"
},
"cause": {
"type": "string",
"enum": [
"unknown",
"local",
"user",
"remote",
"protocol",
"onchain"
],
"description": "What caused the change"
},
"message": {
"type": "string",
"description": "Human-readable explanation"
}
}
}
},
"status": {
"type": "array",
"items": {
"type": "string",
"description": "Billboard log of significant changes"
}
},
"in_payments_offered": {
"type": "u64",
"description": "Number of incoming payment attempts"
},
"in_offered_msat": {
"type": "msat",
"description": "Total amount of incoming payment attempts"
},
"in_msatoshi_offered": {
"deprecated": true
},
"in_payments_fulfilled": {
"type": "u64",
"description": "Number of successful incoming payment attempts"
},
"in_fulfilled_msat": {
"type": "msat",
"description": "Total amount of successful incoming payment attempts"
},
"in_msatoshi_fulfilled": {
"deprecated": true
},
"out_payments_offered": {
"type": "u64",
"description": "Number of outgoing payment attempts"
},
"out_offered_msat": {
"type": "msat",
"description": "Total amount of outgoing payment attempts"
},
"out_msatoshi_offered": {
"deprecated": true
},
"out_payments_fulfilled": {
"type": "u64",
"description": "Number of successful outgoing payment attempts"
},
"out_fulfilled_msat": {
"type": "msat",
"description": "Total amount of successful outgoing payment attempts"
},
"out_msatoshi_fulfilled": {
"deprecated": true
},
"htlcs": {
"type": "array",
"description": "current HTLCs in this channel",
"items": {
"type": "object",
"additionalProperties": true,
"required": [
"direction",
"id",
"amount_msat",
"expiry",
"payment_hash",
"state"
],
"properties": {
"direction": {
"type": "string",
"enum": [
"in",
"out"
],
"description": "Whether it came from peer, or is going to peer"
},
"id": {
"type": "u64",
"description": "Unique ID for this htlc on this channel in this direction"
},
"amount_msat": {
"type": "msat",
"description": "Amount send/received for this HTLC"
},
"msatoshi": {
"deprecated": true
},
"expiry": {
"type": "u32",
"description": "Block this HTLC expires at"
},
"payment_hash": {
"type": "hex",
"description": "the hash of the payment_preimage which will prove payment",
"maxLength": 64,
"minLength": 64
},
"local_trimmed": {
"type": "boolean",
"enum": [
true
],
"description": "if this is too small to enforce onchain"
},
"status": {
"type": "string",
"description": "set if this HTLC is currently waiting on a hook (and shows what plugin)"
}
},
"allOf": [
{
"if": {
"properties": {
"direction": {
"enum": [
"out"
]
}
}
},
"then": {
"additionalProperties": false,
"required": [
"state"
],
"properties": {
"direction": {},
"id": {},
"amount_msat": {},
"msatoshi": {},
"expiry": {},
"payment_hash": {},
"local_trimmed": {},
"status": {},
"state": {
"type": "string",
"enum": [
"SENT_ADD_HTLC",
"SENT_ADD_COMMIT",
"RCVD_ADD_REVOCATION",
"RCVD_ADD_ACK_COMMIT",
"SENT_ADD_ACK_REVOCATION",
"RCVD_REMOVE_HTLC",
"RCVD_REMOVE_COMMIT",
"SENT_REMOVE_REVOCATION",
"SENT_REMOVE_ACK_COMMIT",
"RCVD_REMOVE_ACK_REVOCATION"
],
"description": "Status of the HTLC"
}
}
}
},
{
"if": {
"properties": {
"direction": {
"enum": [
"in"
]
}
}
},
"then": {
"additionalProperties": false,
"required": [
"state"
],
"properties": {
"direction": {},
"id": {},
"amount_msat": {},
"msatoshi": {},
"expiry": {},
"payment_hash": {},
"local_trimmed": {},
"status": {},
"state": {
"type": "string",
"enum": [
"RCVD_ADD_HTLC",
"RCVD_ADD_COMMIT",
"SENT_ADD_REVOCATION",
"SENT_ADD_ACK_COMMIT",
"RCVD_ADD_ACK_REVOCATION",
"SENT_REMOVE_HTLC",
"SENT_REMOVE_COMMIT",
"RCVD_REMOVE_REVOCATION",
"RCVD_REMOVE_ACK_COMMIT",
"SENT_REMOVE_ACK_REVOCATION"
],
"description": "Status of the HTLC"
}
}
}
}
]
}
}
},
"allOf": [
{
"if": {
"required": [
"close_to"
]
},
"then": {
"additionalProperties": false,
"required": [],
"properties": {
"state": {},
"scratch_txid": {},
"feerate": {},
"owner": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"funding_allocation_msat": {},
"funding_msat": {},
"to_us_msat": {},
"min_to_us_msat": {},
"max_to_us_msat": {},
"total_msat": {},
"fee_base_msat": {},
"fee_proportional_millionths": {},
"dust_limit_msat": {},
"max_total_htlc_in_msat": {},
"their_reserve_msat": {},
"our_reserve_msat": {},
"spendable_msat": {},
"receivable_msat": {},
"minimum_htlc_in_msat": {},
"spendable_msatoshi": {},
"receivable_msatoshi": {},
"their_to_self_delay": {},
"our_to_self_delay": {},
"max_accepted_htlcs": {},
"msatoshi_to_us": {},
"msatoshi_to_us_min": {},
"msatoshi_to_us_max": {},
"msatoshi_total": {},
"dust_limit_satoshis": {},
"max_htlc_value_in_flight_msat": {},
"our_channel_reserve_satoshis": {},
"their_channel_reserve_satoshis": {},
"spendable_satoshis": {},
"receivable_satoshis": {},
"htlc_minimum_msat": {},
"state_changes": {},
"status": {},
"in_payments_offered": {},
"in_offered_msat": {},
"in_msatoshi_offered": {},
"in_payments_fulfilled": {},
"in_fulfilled_msat": {},
"in_msatoshi_fulfilled": {},
"out_payments_offered": {},
"out_offered_msat": {},
"out_msatoshi_offered": {},
"out_payments_fulfilled": {},
"out_fulfilled_msat": {},
"out_msatoshi_fulfilled": {},
"htlcs": {},
"initial_feerate": {},
"last_feerate": {},
"next_feerate": {},
"inflight": {},
"last_tx_fee": {},
"last_tx_fee_msat": {},
"direction": {},
"close_to_addr": {
"type": "string",
"description": "The bitcoin address we will close to"
}
}
}
},
{
"if": {
"required": [
"scratch_txid"
]
},
"then": {
"additionalProperties": false,
"required": [
"last_tx_fee_msat"
],
"properties": {
"state": {},
"scratch_txid": {},
"feerate": {},
"owner": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"inflight": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"funding_allocation_msat": {},
"funding_msat": {},
"to_us_msat": {},
"min_to_us_msat": {},
"max_to_us_msat": {},
"total_msat": {},
"fee_base_msat": {},
"fee_proportional_millionths": {},
"dust_limit_msat": {},
"max_total_htlc_in_msat": {},
"their_reserve_msat": {},
"our_reserve_msat": {},
"spendable_msat": {},
"receivable_msat": {},
"minimum_htlc_in_msat": {},
"spendable_msatoshi": {},
"receivable_msatoshi": {},
"their_to_self_delay": {},
"our_to_self_delay": {},
"max_accepted_htlcs": {},
"msatoshi_to_us": {},
"msatoshi_to_us_min": {},
"msatoshi_to_us_max": {},
"msatoshi_total": {},
"dust_limit_satoshis": {},
"max_htlc_value_in_flight_msat": {},
"our_channel_reserve_satoshis": {},
"their_channel_reserve_satoshis": {},
"spendable_satoshis": {},
"receivable_satoshis": {},
"htlc_minimum_msat": {},
"state_changes": {},
"status": {},
"in_payments_offered": {},
"in_offered_msat": {},
"in_msatoshi_offered": {},
"in_payments_fulfilled": {},
"in_fulfilled_msat": {},
"in_msatoshi_fulfilled": {},
"out_payments_offered": {},
"out_offered_msat": {},
"out_msatoshi_offered": {},
"out_payments_fulfilled": {},
"out_fulfilled_msat": {},
"out_msatoshi_fulfilled": {},
"htlcs": {},
"initial_feerate": {},
"last_feerate": {},
"next_feerate": {},
"close_to_addr": {},
"direction": {},
"last_tx_fee": {
"deprecated": true
},
"last_tx_fee_msat": {
"type": "msat",
"description": "fee attached to this the current tx"
}
}
}
},
{
"if": {
"required": [
"short_channel_id"
]
},
"then": {
"additionalProperties": false,
"required": [
"direction"
],
"properties": {
"state": {},
"scratch_txid": {},
"feerate": {},
"owner": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"inflight": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"funding_allocation_msat": {},
"funding_msat": {},
"to_us_msat": {},
"min_to_us_msat": {},
"max_to_us_msat": {},
"total_msat": {},
"fee_base_msat": {},
"fee_proportional_millionths": {},
"dust_limit_msat": {},
"max_total_htlc_in_msat": {},
"their_reserve_msat": {},
"our_reserve_msat": {},
"spendable_msat": {},
"receivable_msat": {},
"minimum_htlc_in_msat": {},
"spendable_msatoshi": {},
"receivable_msatoshi": {},
"their_to_self_delay": {},
"our_to_self_delay": {},
"max_accepted_htlcs": {},
"msatoshi_to_us": {},
"msatoshi_to_us_min": {},
"msatoshi_to_us_max": {},
"msatoshi_total": {},
"dust_limit_satoshis": {},
"max_htlc_value_in_flight_msat": {},
"our_channel_reserve_satoshis": {},
"their_channel_reserve_satoshis": {},
"spendable_satoshis": {},
"receivable_satoshis": {},
"htlc_minimum_msat": {},
"state_changes": {},
"status": {},
"in_payments_offered": {},
"in_offered_msat": {},
"in_msatoshi_offered": {},
"in_payments_fulfilled": {},
"in_fulfilled_msat": {},
"in_msatoshi_fulfilled": {},
"out_payments_offered": {},
"out_offered_msat": {},
"out_msatoshi_offered": {},
"out_payments_fulfilled": {},
"out_fulfilled_msat": {},
"out_msatoshi_fulfilled": {},
"htlcs": {},
"initial_feerate": {},
"last_feerate": {},
"next_feerate": {},
"last_tx_fee": {},
"close_to_addr": {},
"last_tx_fee_msat": {},
"direction": {
"type": "u32",
"description": "0 if we're the lesser node_id, 1 if we're the greater"
}
}
}
},
{
"if": {
"required": [
"inflight"
]
},
"then": {
"additionalProperties": false,
"required": [
"initial_feerate",
"last_feerate",
"next_feerate"
],
"properties": {
"state": {},
"scratch_txid": {},
"feerate": {},
"owner": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"funding_allocation_msat": {},
"funding_msat": {},
"to_us_msat": {},
"min_to_us_msat": {},
"max_to_us_msat": {},
"total_msat": {},
"fee_base_msat": {},
"fee_proportional_millionths": {},
"dust_limit_msat": {},
"max_total_htlc_in_msat": {},
"their_reserve_msat": {},
"our_reserve_msat": {},
"spendable_msat": {},
"receivable_msat": {},
"minimum_htlc_in_msat": {},
"spendable_msatoshi": {},
"receivable_msatoshi": {},
"their_to_self_delay": {},
"our_to_self_delay": {},
"max_accepted_htlcs": {},
"msatoshi_to_us": {},
"msatoshi_to_us_min": {},
"msatoshi_to_us_max": {},
"msatoshi_total": {},
"dust_limit_satoshis": {},
"max_htlc_value_in_flight_msat": {},
"our_channel_reserve_satoshis": {},
"their_channel_reserve_satoshis": {},
"spendable_satoshis": {},
"receivable_satoshis": {},
"htlc_minimum_msat": {},
"state_changes": {},
"status": {},
"in_payments_offered": {},
"in_offered_msat": {},
"in_msatoshi_offered": {},
"in_payments_fulfilled": {},
"in_fulfilled_msat": {},
"in_msatoshi_fulfilled": {},
"out_payments_offered": {},
"out_offered_msat": {},
"out_msatoshi_offered": {},
"out_payments_fulfilled": {},
"out_fulfilled_msat": {},
"out_msatoshi_fulfilled": {},
"htlcs": {},
"inflight": {},
"last_tx_fee": {},
"close_to_addr": {},
"direction": {},
"last_tx_fee_msat": {},
"initial_feerate": {
"type": "string",
"description": "The feerate for the initial funding transaction in per-1000-weight, with \"kpw\" appended"
},
"last_feerate": {
"type": "string",
"description": "The feerate for the latest funding transaction in per-1000-weight, with \"kpw\" appended"
},
"next_feerate": {
"type": "string",
"description": "The minimum feerate for the next funding transaction in per-1000-weight, with \"kpw\" appended"
}
}
}
}
]
}
}
},
"allOf": [
{
"if": {
"additionalProperties": true,
"properties": {
"connected": {
"enum": [
true
]
}
}
},
"then": {
"additionalProperties": false,
"required": [
"netaddr",
"features"
],
"properties": {
"id": {},
"channels": {},
"connected": {},
"htlcs": {},
"log": {},
"last_tx_fee": {},
"netaddr": {
"type": "array",
"minItems": 1,
"maxItems": 1,
"description": "A single entry array",
"items": {
"type": "string",
"description": "address, e.g. 1.2.3.4:1234"
}
},
"features": {
"type": "hex",
"description": "bitmap of BOLT #9 features from peer's INIT message"
}
}
}
}
]
}
}
}
}