core-lightning/doc/schemas/listpeers.schema.json
niftynei 4e503f7d0a bkpr/listpeeers: add lease_fees back to funds; separate out in listpeers
First, how we record "our_funds" and then apply pushes vs lease_fees
(for liquidity ad buys/sales) was exactly opposite.

For pushes we were reporting the total funded into the channel, with the
push representing how much we'd later moved to the peer.

For lease_fees we were rerporting the total in the channel, with the
push representing how much was already moved to the peer.

We fix this (from a view perspective) by re-adding lease fees to what's
reported in the channel funding totals. Since this is now new behavior
(for leased channel values), we added new fields so we can take the old
field names thru a deprecation cycle.

We also make it possible to differentiate btw a push and a lease_fee
(before they were all the same), by adding to new fields to `listpeers`:
`fee_paid_msat` and `fee_rcvd_msat`.

This allows us to avoid math in the bookkeeper, instead we just pick
the numbers out directly and record them.

Fixes #5472

Changelog-Added: JSON-RPC: `listpeers` now has a few new fields for `funding` (`remote_funds_msat`, `local_funds_msat`, `fee_paid_msat`, `fee_rcvd_msat`).
Changelog-Deprecated: JSON-RPC: `listpeers`.`funded` fields `local_msat` and `remote_msat` are now deprecated.
2022-07-31 21:53:05 +09:30

1168 lines
45 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": "hash",
"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": {
"type": "string",
"enum": [
"local",
"remote"
],
"description": "Who initiated the channel close"
},
"features": {
"type": "array",
"items": {
"type": "string",
"enum": [
"option_static_remotekey",
"option_anchor_outputs",
"option_zeroconf"
],
"description": "BOLT #9 features which apply to this channel"
}
},
"funding": {
"type": "object",
"additionalProperties": false,
"required": [
"local_funds_msat",
"remote_funds_msat"
],
"properties": {
"local_msat": {
"type": "msat",
"description": "Amount of channel we funded (deprecated)"
},
"remote_msat": {
"type": "msat",
"description": "Amount of channel they funded (deprecated)"
},
"pushed_msat": {
"type": "msat",
"description": "Amount pushed from opener to peer"
},
"local_funds_msat": {
"type": "msat",
"description": "Amount of channel we funded"
},
"remote_funds_msat": {
"type": "msat",
"description": "Amount of channel they funded"
},
"fee_paid_msat": {
"type": "msat",
"description": "Amount we paid peer at open"
},
"fee_rcvd_msat": {
"type": "msat",
"description": "Amount we were paid by peer at open"
}
}
},
"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"
},
"minimum_htlc_out_msat": {
"type": "msat",
"description": "the minimum amount HTLC we will send"
},
"maximum_htlc_out_msat": {
"type": "msat",
"description": "the maximum amount HTLC we will send"
},
"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
},
"alias": {
"type": "object",
"required": [],
"properties": {
"local": {
"type": "short_channel_id",
"description": "An alias assigned by this node to this channel, used for outgoing payments"
},
"remote": {
"type": "short_channel_id",
"description": "An alias assigned by the remote node to this channel, usable in routehints and invoices"
}
}
},
"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": "hash",
"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": {},
"alias": {},
"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": {},
"alias": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"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": {},
"minimum_htlc_out_msat": {},
"maximum_htlc_out_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_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": {},
"alias": {},
"scratch_txid": {},
"feerate": {},
"owner": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"inflight": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"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": {},
"minimum_htlc_out_msat": {},
"maximum_htlc_out_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_msat": {
"type": "msat",
"description": "fee attached to this the current tx"
}
}
}
},
{
"if": {
"required": [
"short_channel_id"
]
},
"then": {
"additionalProperties": false,
"required": [
"direction"
],
"properties": {
"alias": {},
"state": {},
"scratch_txid": {},
"feerate": {},
"owner": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"inflight": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"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": {},
"minimum_htlc_out_msat": {},
"maximum_htlc_out_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": {},
"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": {},
"alias": {},
"short_channel_id": {},
"channel_id": {},
"funding_txid": {},
"funding_outnum": {},
"close_to": {},
"private": {},
"opener": {},
"closer": {},
"features": {},
"funding": {},
"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": {},
"minimum_htlc_out_msat": {},
"maximum_htlc_out_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": {},
"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": {},
"netaddr": {
"type": "array",
"minItems": 1,
"maxItems": 1,
"description": "A single entry array",
"items": {
"type": "string",
"description": "address, e.g. 1.2.3.4:1234"
}
},
"remote_addr": {
"type": "string",
"description": "The public IPv4/6 address the peer sees us from, e.g. 1.2.3.4:1234"
},
"features": {
"type": "hex",
"description": "bitmap of BOLT #9 features from peer's INIT message"
}
}
}
}
]
}
}
}
}