{ "$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" }, "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": { }, "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": { }, "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": { }, "initial_feerate": { }, "last_feerate": { }, "next_feerate": { }, "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": { }, "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": { }, "initial_feerate": { }, "last_feerate": { }, "next_feerate": { }, "last_tx_fee": { }, "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": { }, "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": { }, "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" } } } } ] } } } }