Skip to content

Commit

Permalink
lightningd: add listclosedchannels command.
Browse files Browse the repository at this point in the history
Changelog-Added: JSON-RPC: `listclosedchannels` to show old, dead channels we previously had with peers.
Signed-off-by: Rusty Russell <[email protected]>
  • Loading branch information
rustyrussell committed Mar 25, 2023
1 parent e75cf2e commit 89f91b9
Show file tree
Hide file tree
Showing 9 changed files with 444 additions and 3 deletions.
1 change: 1 addition & 0 deletions doc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ MANPAGES := doc/lightning-cli.1 \
doc/lightning-invoicerequest.7 \
doc/lightning-keysend.7 \
doc/lightning-listchannels.7 \
doc/lightning-listclosedchannels.7 \
doc/lightning-listdatastore.7 \
doc/lightning-listforwards.7 \
doc/lightning-listfunds.7 \
Expand Down
1 change: 1 addition & 0 deletions doc/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ Core Lightning Documentation
lightning-invoicerequest <lightning-invoicerequest.7.md>
lightning-keysend <lightning-keysend.7.md>
lightning-listchannels <lightning-listchannels.7.md>
lightning-listclosedchannels <lightning-listclosedchannels.7.md>
lightning-listconfigs <lightning-listconfigs.7.md>
lightning-listdatastore <lightning-listdatastore.7.md>
lightning-listforwards <lightning-listforwards.7.md>
Expand Down
79 changes: 79 additions & 0 deletions doc/lightning-listclosedchannels.7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
lightning-listclosedchannels -- Get data on our closed historical channels
==========================================================================

SYNOPSIS
--------

**listclosedchannels** \[*id*\]

DESCRIPTION
-----------

The **listclosedchannels** RPC command returns data on channels which
are otherwise forgotten (more than 100 blocks after they're completely
resolved onchain).

If no *id* is supplied, then channel data on all historical channels are given.

Supplying *id* will filter the results to only match channels to that peer. Note that prior to v23.05, old peers were forgotten.

RETURN VALUE
------------

[comment]: # (GENERATE-FROM-SCHEMA-START)
On success, an object containing **closedchannels** is returned. It is an array of objects, where each object contains:

- **channel\_id** (hash): The full channel\_id (funding txid Xored with output number)
- **opener** (string): Who initiated the channel (one of "local", "remote")
- **private** (boolean): if False, we will not announce this channel
- **total\_local\_commitments** (u64): Number of commitment transaction we made
- **total\_remote\_commitments** (u64): Number of commitment transaction they made
- **total\_htlcs\_sent** (u64): Number of HTLCs we ever sent
- **funding\_txid** (txid): ID of the funding transaction
- **funding\_outnum** (u32): The 0-based output number of the funding transaction which opens the channel
- **leased** (boolean): Whether this channel was leased from `opener`
- **total\_msat** (msat): total amount in the channel
- **final\_to\_us\_msat** (msat): Our balance in final commitment transaction
- **min\_to\_us\_msat** (msat): Least amount owed to us ever. If the peer were to succesfully steal from us, this is the amount we would still retain.
- **max\_to\_us\_msat** (msat): Most amount owed to us ever. If we were to successfully steal from the peer, this is the amount we could potentially get.
- **close\_cause** (string): What caused the channel to close (one of "unknown", "local", "user", "remote", "protocol", "onchain")
- **peer\_id** (pubkey, optional): Peer public key (can be missing with pre-v23.05 closes!)
- **short\_channel\_id** (short\_channel\_id, optional): The short\_channel\_id
- **alias** (object, optional):
- **local** (short\_channel\_id, optional): An alias assigned by this node to this channel, used for outgoing payments
- **remote** (short\_channel\_id, optional): An alias assigned by the remote node to this channel, usable in routehints and invoices
- **closer** (string, optional): Who initiated the channel close (only present if closing) (one of "local", "remote")
- **channel\_type** (object, optional): channel\_type as negotiated with peer:
- **bits** (array of u32s): Each bit set in this channel\_type:
- Bit number
- **names** (array of strings): Feature name for each bit set in this channel\_type:
- Name of feature bit (one of "static\_remotekey/even", "anchor\_outputs/even", "anchors\_zero\_fee\_htlc\_tx/even", "scid\_alias/even", "zeroconf/even")
- **funding\_fee\_paid\_msat** (msat, optional): How much we paid to lease the channel (iff `leased` is true and `opener` is local)
- **funding\_fee\_rcvd\_msat** (msat, optional): How much they paid to lease the channel (iff `leased` is true and `opener` is remote)
- **funding\_pushed\_msat** (msat, optional): How much `opener` pushed immediate (if non-zero)
- **last\_commitment\_txid** (hash, optional): The final commitment tx's txid (or mutual close, if we accepted it). Not present for some very old, small channels pre-0.7.0.
- **last\_commitment\_fee\_msat** (msat, optional): The fee on `last_commitment_txid`

[comment]: # (GENERATE-FROM-SCHEMA-END)

On error the returned object will contain `code` and `message` properties,
with `code` being one of the following:

- -32602: If the given parameters are wrong.

AUTHOR
------

Rusty Russell <<[email protected]>>.

SEE ALSO
--------

lightning-listpeerchannels(7)

RESOURCES
---------

Main web site: <https://github.com/ElementsProject/lightning> Lightning

[comment]: # ( SHA256STAMP:0c368cb41f46a2124e9b3f0b760494d1f4b9c3b248267f56b887fbf96f26e176)
13 changes: 13 additions & 0 deletions doc/schemas/listclosedchannels.request.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [],
"additionalProperties": false,
"added": "v23.05",
"properties": {
"id": {
"type": "pubkey",
"description": "If supplied, limits the channels to just the peer with the given ID, if it exists."
}
}
}
188 changes: 188 additions & 0 deletions doc/schemas/listclosedchannels.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": false,
"added": "v23.05",
"required": [
"closedchannels"
],
"properties": {
"closedchannels": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"required": [
"channel_id",
"opener",
"private",
"total_msat",
"total_local_commitments",
"total_remote_commitments",
"total_htlcs_sent",
"funding_txid",
"funding_outnum",
"leased",
"final_to_us_msat",
"min_to_us_msat",
"max_to_us_msat",
"close_cause"
],
"properties": {
"peer_id": {
"type": "pubkey",
"description": "Peer public key (can be missing with pre-v23.05 closes!)"
},
"channel_id": {
"type": "hash",
"description": "The full channel_id (funding txid Xored with output number)"
},
"short_channel_id": {
"type": "short_channel_id",
"description": "The short_channel_id"
},
"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"
}
}
},
"opener": {
"type": "string",
"enum": [
"local",
"remote"
],
"description": "Who initiated the channel"
},
"closer": {
"type": "string",
"enum": [
"local",
"remote"
],
"description": "Who initiated the channel close (only present if closing)"
},
"private": {
"type": "boolean",
"description": "if False, we will not announce this channel"
},
"channel_type": {
"type": "object",
"description": "channel_type as negotiated with peer",
"additionalProperties": false,
"required": [
"bits",
"names"
],
"properties": {
"bits": {
"type": "array",
"description": "Each bit set in this channel_type",
"items": {
"type": "u32",
"description": "Bit number"
}
},
"names": {
"type": "array",
"description": "Feature name for each bit set in this channel_type",
"items": {
"type": "string",
"enum": [
"static_remotekey/even",
"anchor_outputs/even",
"anchors_zero_fee_htlc_tx/even",
"scid_alias/even",
"zeroconf/even"
],
"description": "Name of feature bit"
}
}
}
},
"total_local_commitments": {
"type": "u64",
"description": "Number of commitment transaction we made"
},
"total_remote_commitments": {
"type": "u64",
"description": "Number of commitment transaction they made"
},
"total_htlcs_sent": {
"type": "u64",
"description": "Number of HTLCs we ever sent"
},
"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"
},
"leased": {
"type": "boolean",
"description": "Whether this channel was leased from `opener`"
},
"funding_fee_paid_msat": {
"type": "msat",
"description": "How much we paid to lease the channel (iff `leased` is true and `opener` is local)"
},
"funding_fee_rcvd_msat": {
"type": "msat",
"description": "How much they paid to lease the channel (iff `leased` is true and `opener` is remote)"
},
"funding_pushed_msat": {
"type": "msat",
"description": "How much `opener` pushed immediate (if non-zero)"
},
"total_msat": {
"type": "msat",
"description": "total amount in the channel"
},
"final_to_us_msat": {
"type": "msat",
"description": "Our balance in final commitment transaction"
},
"min_to_us_msat": {
"type": "msat",
"description": "Least amount owed to us ever. If the peer were to succesfully steal from us, this is the amount we would still retain."
},
"max_to_us_msat": {
"type": "msat",
"description": "Most amount owed to us ever. If we were to successfully steal from the peer, this is the amount we could potentially get."
},
"last_commitment_txid": {
"type": "hash",
"description": "The final commitment tx's txid (or mutual close, if we accepted it). Not present for some very old, small channels pre-0.7.0."
},
"last_commitment_fee_msat": {
"type": "msat",
"description": "The fee on `last_commitment_txid`"
},
"close_cause": {
"type": "string",
"enum": [
"unknown",
"local",
"user",
"remote",
"protocol",
"onchain"
],
"description": "What caused the channel to close"
}
}
}
}
}
}
2 changes: 1 addition & 1 deletion lightningd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ LIGHTNINGD_SRC := \
lightningd/closing_control.c \
lightningd/coin_mvts.c \
lightningd/dual_open_control.c \
lightningd/closed_channel.c \
lightningd/connect_control.c \
lightningd/onion_message.c \
lightningd/feerate.c \
Expand Down Expand Up @@ -48,7 +49,6 @@ include wallet/Makefile

LIGHTNINGD_HDRS := \
$(LIGHTNINGD_SRC:.c=.h) \
lightningd/closed_channel.h \
lightningd/channel_state.h \
lightningd/channel_state_names_gen.h \
$(WALLET_HDRS)
Expand Down
Loading

0 comments on commit 89f91b9

Please sign in to comment.