msggen: generate native notification bindings from schemas
What changed, and why it matters
This commit is a large, routine code-generation update for Core Lightning's Rust and gRPC client libraries. It adds native bindings for many existing node notifications (such as payment events, log messages, and coin movements) so that external applications can subscribe to them through the gRPC and Rust RPC interfaces. The change is mostly mechanical: it exposes notifications that already existed internally, but does not by itself add new node functionality or change security-critical logic. There is no indication in the commit that this fixes a security bug or introduces a vulnerability.
Treat as a normal feature/API expansion commit. Reviewers should verify that the generated gRPC server correctly enforces existing authentication/authorization for the new streaming RPCs, and that sensitive notification payloads (e.g., payment hashes, peer IDs, log messages, PSBTs) are only delivered to authenticated clients as intended by the existing gRPC plugin model. No immediate security action is required based solely on this diff.
Security signals we found
Large generated diff (+6199/-579) across RPC/gRPC bindings
New gRPC streaming RPCs expose additional node events to subscribers
Adds new notification types including coin_movement, forward_event, sendpay_failure/success, log, warning, plugin lifecycle, and xpay payment part events
No changes to authentication, authorization, or access control visible in the diff
No vendor security disclosure or CVE references present in commit message or diff
Evidence from the diff
The patch expands msggen’s notification schema coverage and regenerates cln-rpc, cln-grpc, and Python gRPC proto artifacts. It adds enum mappings, request/response message definitions, Protobuf service methods, and Rust conversion traits for notifications including balance_snapshot, coin_movement, forward_event, invoice_creation/payment, log, onionmessage_forward_fail, openchannel_peer_sigs, plugin_started/stopped, sendpay_failure/success, shutdown, warning, and xpay’s pay_part_start/end. The gRPC server gets matching Subscribe* streaming RPCs that filter a broadcast event stream. A new ChannelState::Closed enum value is also added to primitives.proto. The commit is additive and generated; it does not alter core daemon behavior, authentication, or authorization.
Changed components
cln-rpc/src/notifications.rscln-grpc/proto/node.protocln-grpc/proto/primitives.protocln-grpc/src/convert.rscln-grpc/src/server.rscontrib/pyln-grpc-proto generated Python filescontrib/msggen schema metadatadoc/schemas/notification/*.jsonInspect captured patch +6199 / −579
diff --git a/.msggen.json b/.msggen.json
index bd870f0d..7d003069 100644
--- a/.msggen.json
+++ b/.msggen.json
@@ -37,6 +37,35 @@
"unilateral": 1,
"unopened": 2
},
+ "CoinMovementPrimaryTag": {
+ "anchor": 10,
+ "channel_close": 4,
+ "channel_open": 3,
+ "channel_proposed": 20,
+ "delayed_to_us": 5,
+ "deposit": 0,
+ "htlc_fulfill": 8,
+ "htlc_timeout": 7,
+ "htlc_tx": 6,
+ "ignored": 14,
+ "invoice": 16,
+ "journal_entry": 22,
+ "lease_fee": 19,
+ "penalized": 12,
+ "penalty": 2,
+ "penalty_adj": 21,
+ "pushed": 18,
+ "routed": 17,
+ "stolen": 13,
+ "to_miner": 15,
+ "to_them": 11,
+ "to_wallet": 9,
+ "withdrawal": 1
+ },
+ "CoinMovementType": {
+ "chain_mvt": 1,
+ "channel_mvt": 0
+ },
"ConnectAddressType": {
"ipv4": 1,
"ipv6": 2,
@@ -105,6 +134,16 @@
"perkb": 0,
"perkw": 1
},
+ "ForwardEventStatus": {
+ "failed": 3,
+ "local_failed": 2,
+ "offered": 0,
+ "settled": 1
+ },
+ "ForwardEventStyle": {
+ "legacy": 0,
+ "tlv": 1
+ },
"FunderupdatePolicy": {
"available": 1,
"fixed": 2,
@@ -454,6 +493,14 @@
"theirs": 0,
"withdraw": 2
},
+ "LogLevel": {
+ "broken": 5,
+ "debug": 2,
+ "info": 3,
+ "io": 0,
+ "trace": 1,
+ "unusual": 4
+ },
"MultifundchannelFailedMethod": {
"connect": 0,
"fundchannel_complete": 3,
@@ -465,6 +512,10 @@
"bech32": 0,
"p2tr": 3
},
+ "PayPartEndStatus": {
+ "failure": 1,
+ "success": 0
+ },
"PayStatus": {
"complete": 0,
"failed": 2,
@@ -518,10 +569,18 @@
"complete": 1,
"pending": 0
},
+ "SendpayFailureDataStatus": {
+ "complete": 2,
+ "failed": 0,
+ "pending": 1
+ },
"SendpayStatus": {
"complete": 1,
"pending": 0
},
+ "SendpaySuccessStatus": {
+ "complete": 0
+ },
"StopResult": {
"Shutdown complete": 0
},
@@ -608,6 +667,10 @@
},
"WaitsendpayStatus": {
"complete": 0
+ },
+ "WarningLevel": {
+ "error": 1,
+ "warn": 0
}
},
"grpc-field-map": {
@@ -967,6 +1030,17 @@
"AutoCleanInvoice.enabled": 1,
"AutoCleanInvoice.expired_by": 2
},
+ "BalanceSnapshotAccounts": {
+ "balance_snapshot.accounts[].account_id": 1,
+ "balance_snapshot.accounts[].balance_msat": 2,
+ "balance_snapshot.accounts[].coin_type": 3
+ },
+ "BalanceSnapshotNotification": {
+ "balance_snapshot.accounts[]": 4,
+ "balance_snapshot.blockheight": 2,
+ "balance_snapshot.node_id": 1,
+ "balance_snapshot.timestamp": 3
+ },
"Bkpr-channelsapyChannelsApy": {
"Bkpr-ChannelsApy.channels_apy[].account": 1,
"Bkpr-ChannelsApy.channels_apy[].apy_in": 18,
@@ -1238,6 +1312,34 @@
"Close.txs[]": 4,
"Close.type": 1
},
+ "CoinMovementNotification": {
+ "coin_movement.account_id": 6,
+ "coin_movement.blockheight": 26,
+ "coin_movement.coin_type": 2,
+ "coin_movement.created_index": 5,
+ "coin_movement.credit_msat": 7,
+ "coin_movement.debit_msat": 8,
+ "coin_movement.extra_tags[]": 12,
+ "coin_movement.fees_msat": 16,
+ "coin_movement.group_id": 15,
+ "coin_movement.node_id": 3,
+ "coin_movement.originating_account": 19,
+ "coin_movement.output_count": 25,
+ "coin_movement.output_msat": 24,
+ "coin_movement.part_id": 14,
+ "coin_movement.payment_hash": 13,
+ "coin_movement.peer_id": 18,
+ "coin_movement.primary_tag": 11,
+ "coin_movement.spending_txid": 21,
+ "coin_movement.tags[]": 10,
+ "coin_movement.timestamp": 9,
+ "coin_movement.txid": 20,
+ "coin_movement.type": 4,
+ "coin_movement.utxo": 17,
+ "coin_movement.utxo_txid": 22,
+ "coin_movement.version": 1,
+ "coin_movement.vout": 23
+ },
"ConnectAddress": {
"Connect.address.address": 3,
"Connect.address.port": 4,
@@ -1610,6 +1712,9 @@
"DelpayResponse": {
"DelPay.payments[]": 1
},
+ "DeprecatedOneshotNotification": {
+ "deprecated_oneshot.deprecated_ok": 1
+ },
"Dev-forget-channelRequest": {
"Dev-Forget-Channel.channel_id": 3,
"Dev-Forget-Channel.force": 4,
@@ -1659,6 +1764,9 @@
"DisableOffer.single_use": 3,
"DisableOffer.used": 5
},
+ "DisconnectNotification": {
+ "disconnect.id": 1
+ },
"DisconnectRequest": {
"Disconnect.force": 2,
"Disconnect.id": 1
@@ -1788,6 +1896,20 @@
"FetchInvoice.invoice": 1,
"FetchInvoice.next_period": 3
},
+ "ForwardEventNotification": {
+ "forward_event.failcode": 8,
+ "forward_event.failreason": 9,
+ "forward_event.fee_msat": 6,
+ "forward_event.in_channel": 2,
+ "forward_event.in_msat": 4,
+ "forward_event.out_channel": 3,
+ "forward_event.out_msat": 5,
+ "forward_event.payment_hash": 1,
+ "forward_event.received_time": 11,
+ "forward_event.resolved_time": 12,
+ "forward_event.status": 7,
+ "forward_event.style": 10
+ },
"FundchannelCancelRequest": {
"FundChannel_Cancel.id": 1
},
@@ -2065,6 +2187,17 @@
"InjectPaymentOnion.created_index": 3,
"InjectPaymentOnion.payment_preimage": 4
},
+ "InvoiceCreationNotification": {
+ "invoice_creation.label": 3,
+ "invoice_creation.msat": 1,
+ "invoice_creation.preimage": 2
+ },
+ "InvoicePaymentNotification": {
+ "invoice_payment.label": 4,
+ "invoice_payment.msat": 1,
+ "invoice_payment.outpoint": 3,
+ "invoice_payment.preimage": 2
+ },
"InvoiceRequest": {
"Invoice.amount_msat": 10,
"Invoice.cltv": 6,
@@ -3281,6 +3414,13 @@
"ListTransactions.transactions[].outputs[].scriptPubKey": 3,
"ListTransactions.transactions[].outputs[].type": 4
},
+ "LogNotification": {
+ "log.level": 1,
+ "log.log": 5,
+ "log.source": 4,
+ "log.time": 2,
+ "log.timestamp": 3
+ },
"MakesecretRequest": {
"MakeSecret.hex": 1,
"MakeSecret.string": 2
@@ -3415,6 +3555,18 @@
"Offer.single_use": 3,
"Offer.used": 5
},
+ "OnionMessageForwardFailNotification": {
+ "onionmessage_forward_fail.incoming": 2,
+ "onionmessage_forward_fail.next_node_id": 5,
+ "onionmessage_forward_fail.next_short_channel_id_dir": 6,
+ "onionmessage_forward_fail.outgoing": 4,
+ "onionmessage_forward_fail.path_key": 3,
+ "onionmessage_forward_fail.source": 1
+ },
+ "OpenChannelPeerSigsNotification": {
+ "openchannel_peer_sigs.channel_id": 1,
+ "openchannel_peer_sigs.signed_psbt": 2
+ },
"OpenchannelAbortRequest": {
"OpenChannel_Abort.channel_id": 1
},
@@ -3491,6 +3643,34 @@
"OpenChannel_Update.psbt": 3,
"OpenChannel_Update.requires_confirmed_inputs": 7
},
+ "PayPartEndNotification": {
+ "pay_part_end.duration": 2,
+ "pay_part_end.error_code": 10,
+ "pay_part_end.error_message": 11,
+ "pay_part_end.failed_direction": 9,
+ "pay_part_end.failed_msg": 6,
+ "pay_part_end.failed_node_id": 7,
+ "pay_part_end.failed_short_channel_id": 8,
+ "pay_part_end.groupid": 4,
+ "pay_part_end.partid": 5,
+ "pay_part_end.payment_hash": 3,
+ "pay_part_end.status": 1
+ },
+ "PayPartStartHops": {
+ "pay_part_start.hops[].channel_in_msat": 4,
+ "pay_part_start.hops[].channel_out_msat": 5,
+ "pay_part_start.hops[].direction": 3,
+ "pay_part_start.hops[].next_node": 1,
+ "pay_part_start.hops[].short_channel_id": 2
+ },
+ "PayPartStartNotification": {
+ "pay_part_start.attempt_msat": 5,
+ "pay_part_start.groupid": 2,
+ "pay_part_start.hops[]": 6,
+ "pay_part_start.partid": 3,
+ "pay_part_start.payment_hash": 1,
+ "pay_part_start.total_payment_msat": 4
+ },
"PayRequest": {
"Pay.amount_msat": 13,
"Pay.bolt11": 1,
@@ -3544,6 +3724,16 @@
"Plugin.result": 3,
"Plugin.subcommand": 4
},
+ "PluginStartedNotification": {
+ "plugin_started.methods[]": 3,
+ "plugin_started.plugin_name": 1,
+ "plugin_started.plugin_path": 2
+ },
+ "PluginStoppedNotification": {
+ "plugin_stopped.methods[]": 3,
+ "plugin_stopped.plugin_name": 1,
+ "plugin_stopped.plugin_path": 2
+ },
"PreapproveinvoiceRequest": {
"PreApproveInvoice.bolt11": 1
},
@@ -3622,6 +3812,31 @@
"ReserveinputsResponse": {
"ReserveInputs.reservations[]": 1
},
+ "SendPayFailureNotification": {
+ "sendpay_failure.code": 1,
+ "sendpay_failure.data": 3,
+ "sendpay_failure.message": 2
+ },
+ "SendPaySuccessNotification": {
+ "sendpay_success.amount_msat": 8,
+ "sendpay_success.amount_sent_msat": 9,
+ "sendpay_success.bolt11": 15,
+ "sendpay_success.bolt12": 16,
+ "sendpay_success.completed_at": 11,
+ "sendpay_success.created_at": 10,
+ "sendpay_success.created_index": 1,
+ "sendpay_success.description": 17,
+ "sendpay_success.destination": 7,
+ "sendpay_success.erroronion": 18,
+ "sendpay_success.groupid": 4,
+ "sendpay_success.id": 2,
+ "sendpay_success.label": 14,
+ "sendpay_success.partid": 6,
+ "sendpay_success.payment_hash": 3,
+ "sendpay_success.payment_preimage": 13,
+ "sendpay_success.status": 12,
+ "sendpay_success.updated_index": 5
+ },
"SendcustommsgRequest": {
"SendCustomMsg.msg": 2,
"SendCustomMsg.node_id": 1
@@ -3699,6 +3914,34 @@
"SendOnionMessage.first_id": 1,
"SendOnionMessage.hops[]": 3
},
+ "SendpayFailureData": {
+ "sendpay_failure.data.amount_msat": 8,
+ "sendpay_failure.data.amount_sent_msat": 9,
+ "sendpay_failure.data.bolt11": 15,
+ "sendpay_failure.data.bolt12": 16,
+ "sendpay_failure.data.completed_at": 11,
+ "sendpay_failure.data.created_at": 10,
+ "sendpay_failure.data.created_index": 1,
+ "sendpay_failure.data.description": 17,
+ "sendpay_failure.data.destination": 7,
+ "sendpay_failure.data.erring_channel": 24,
+ "sendpay_failure.data.erring_direction": 25,
+ "sendpay_failure.data.erring_index": 20,
+ "sendpay_failure.data.erring_node": 23,
+ "sendpay_failure.data.erroronion": 18,
+ "sendpay_failure.data.failcode": 21,
+ "sendpay_failure.data.failcodename": 22,
+ "sendpay_failure.data.groupid": 4,
+ "sendpay_failure.data.id": 2,
+ "sendpay_failure.data.label": 14,
+ "sendpay_failure.data.onionreply": 19,
+ "sendpay_failure.data.partid": 6,
+ "sendpay_failure.data.payment_hash": 3,
+ "sendpay_failure.data.payment_preimage": 13,
+ "sendpay_failure.data.raw_message": 26,
+ "sendpay_failure.data.status": 12,
+ "sendpay_failure.data.updated_index": 5
+ },
"SendpayRequest": {
"SendPay.amount_msat": 10,
"SendPay.bolt11": 5,
@@ -4126,6 +4369,13 @@
"WaitSendPay.status": 4,
"WaitSendPay.updated_index": 16
},
+ "WarningNotification": {
+ "warning.level": 1,
+ "warning.log": 5,
+ "warning.source": 4,
+ "warning.time": 2,
+ "warning.timestamp": 3
+ },
"WithdrawRequest": {
"Withdraw.destination": 1,
"Withdraw.feerate": 5,
@@ -14341,6 +14591,38 @@
"added": "v24.11",
"deprecated": null
},
+ "balance_snapshot": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.accounts[]": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.accounts[].account_id": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.accounts[].balance_msat": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.accounts[].coin_type": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.blockheight": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.node_id": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "balance_snapshot.timestamp": {
+ "added": "v24.11",
+ "deprecated": null
+ },
"block_added": {
"added": "v22.11",
"deprecated": null
@@ -14417,6 +14699,114 @@
"added": "pre-v0.10.1",
"deprecated": null
},
+ "coin_movement": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.account_id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.blockheight": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.coin_type": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.created_index": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "coin_movement.credit_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.debit_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.extra_tags[]": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "coin_movement.fees_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.group_id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.node_id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.originating_account": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.output_count": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.output_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.part_id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.payment_hash": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.peer_id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.primary_tag": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "coin_movement.spending_txid": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "coin_movement.tags[]": {
+ "added": "pre-v0.10.1",
+ "deprecated": "v25.09"
+ },
+ "coin_movement.timestamp": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.txid": {
+ "added": "pre-v0.10.1",
+ "deprecated": "v25.09"
+ },
+ "coin_movement.type": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.utxo": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "coin_movement.utxo_txid": {
+ "added": "pre-v0.10.1",
+ "deprecated": "v25.09"
+ },
+ "coin_movement.version": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "coin_movement.vout": {
+ "added": "pre-v0.10.1",
+ "deprecated": "v25.09"
+ },
"connect": {
"added": "pre-v0.10.1",
"deprecated": null
@@ -14461,6 +14851,134 @@
"added": "v24.02",
"deprecated": null
},
+ "deprecated_oneshot": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "deprecated_oneshot.deprecated_ok": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "disconnect": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "disconnect.id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.failcode": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.failreason": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.fee_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.in_channel": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.in_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.out_channel": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.out_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.payment_hash": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.received_time": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.resolved_time": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.status": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "forward_event.style": {
+ "added": "v23.11",
+ "deprecated": null
+ },
+ "invoice_creation": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_creation.label": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_creation.msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_creation.preimage": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_payment": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_payment.label": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_payment.msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "invoice_payment.outpoint": {
+ "added": "v23.11",
+ "deprecated": null
+ },
+ "invoice_payment.preimage": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "log": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "log.level": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "log.log": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "log.source": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "log.time": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "log.timestamp": {
+ "added": "v24.02",
+ "deprecated": null
+ },
"multifundchannel": {
"added": "pre-v0.10.1",
"deprecated": null
@@ -14588,6 +15106,398 @@
"multifundchannel.utxos[]": {
"added": "pre-v0.10.1",
"deprecated": null
+ },
+ "onionmessage_forward_fail": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "onionmessage_forward_fail.incoming": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "onionmessage_forward_fail.next_node_id": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "onionmessage_forward_fail.next_short_channel_id_dir": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "onionmessage_forward_fail.outgoing": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "onionmessage_forward_fail.path_key": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "onionmessage_forward_fail.source": {
+ "added": "v24.11",
+ "deprecated": null
+ },
+ "openchannel_peer_sigs": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "openchannel_peer_sigs.channel_id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "openchannel_peer_sigs.signed_psbt": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "pay_part_end": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.duration": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.error_code": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.error_message": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.failed_direction": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.failed_msg": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.failed_node_id": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.failed_short_channel_id": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.groupid": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.partid": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.payment_hash": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_end.status": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.attempt_msat": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.groupid": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.hops[]": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.hops[].channel_in_msat": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.hops[].channel_out_msat": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.hops[].direction": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.hops[].next_node": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.hops[].short_channel_id": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.partid": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.payment_hash": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "pay_part_start.total_payment_msat": {
+ "added": "v25.09",
+ "deprecated": null
+ },
+ "plugin_started": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_started.methods[]": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_started.plugin_name": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_started.plugin_path": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_stopped": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_stopped.methods[]": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_stopped.plugin_name": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "plugin_stopped.plugin_path": {
+ "added": "v25.02",
+ "deprecated": null
+ },
+ "sendpay_failure": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.code": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.amount_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.amount_sent_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.bolt11": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.bolt12": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "sendpay_failure.data.completed_at": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.created_at": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.created_index": {
+ "added": "v23.11",
+ "deprecated": null
+ },
+ "sendpay_failure.data.description": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.destination": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.erring_channel": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.erring_direction": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.erring_index": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.erring_node": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.erroronion": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.failcode": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.failcodename": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.groupid": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.label": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.onionreply": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.partid": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.payment_hash": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.payment_preimage": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.raw_message": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.status": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_failure.data.updated_index": {
+ "added": "v23.11",
+ "deprecated": null
+ },
+ "sendpay_failure.message": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.amount_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.amount_sent_msat": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.bolt11": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.bolt12": {
+ "added": "v24.02",
+ "deprecated": null
+ },
+ "sendpay_success.completed_at": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.created_at": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.created_index": {
+ "added": "v23.11",
+ "deprecated": null
+ },
+ "sendpay_success.description": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.destination": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.erroronion": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.groupid": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.id": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.label": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.partid": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.payment_hash": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.payment_preimage": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.status": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "sendpay_success.updated_index": {
+ "added": "v23.11",
+ "deprecated": null
+ },
+ "shutdown": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "warning": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "warning.level": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "warning.log": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "warning.source": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "warning.time": {
+ "added": "pre-v0.10.1",
+ "deprecated": null
+ },
+ "warning.timestamp": {
+ "added": "v24.02",
+ "deprecated": null
}
}
}
\ No newline at end of file
diff --git a/cln-grpc/proto/node.proto b/cln-grpc/proto/node.proto
index 814c79a1..4a2cb3d8 100644
--- a/cln-grpc/proto/node.proto
+++ b/cln-grpc/proto/node.proto
@@ -154,12 +154,30 @@ service Node {
rpc CurrencyConvert(CurrencyconvertRequest) returns (CurrencyconvertResponse) {}
rpc CurrencyRate(CurrencyrateRequest) returns (CurrencyrateResponse) {}
+ rpc SubscribeBalanceSnapshot(StreamBalanceSnapshotRequest) returns (stream BalanceSnapshotNotification) {}
rpc SubscribeBlockAdded(StreamBlockAddedRequest) returns (stream BlockAddedNotification) {}
rpc SubscribeChannelOpenFailed(StreamChannelOpenFailedRequest) returns (stream ChannelOpenFailedNotification) {}
rpc SubscribeChannelOpened(StreamChannelOpenedRequest) returns (stream ChannelOpenedNotification) {}
+ rpc SubscribeChannelStateChanged(StreamChannelStateChangedRequest) returns (stream ChannelStateChangedNotification) {}
rpc SubscribeConnect(StreamConnectRequest) returns (stream PeerConnectNotification) {}
+ rpc SubscribeCoinMovement(StreamCoinMovementRequest) returns (stream CoinMovementNotification) {}
rpc SubscribeCustomMsg(StreamCustomMsgRequest) returns (stream CustomMsgNotification) {}
- rpc SubscribeChannelStateChanged(StreamChannelStateChangedRequest) returns (stream ChannelStateChangedNotification) {}
+ rpc SubscribeDeprecatedOneshot(StreamDeprecatedOneshotRequest) returns (stream DeprecatedOneshotNotification) {}
+ rpc SubscribeDisconnect(StreamDisconnectRequest) returns (stream DisconnectNotification) {}
+ rpc SubscribeForwardEvent(StreamForwardEventRequest) returns (stream ForwardEventNotification) {}
+ rpc SubscribeInvoiceCreation(StreamInvoiceCreationRequest) returns (stream InvoiceCreationNotification) {}
+ rpc SubscribeInvoicePayment(StreamInvoicePaymentRequest) returns (stream InvoicePaymentNotification) {}
+ rpc SubscribeLog(StreamLogRequest) returns (stream LogNotification) {}
+ rpc SubscribeOnionMessageForwardFail(StreamOnionMessageForwardFailRequest) returns (stream OnionMessageForwardFailNotification) {}
+ rpc SubscribeOpenChannelPeerSigs(StreamOpenChannelPeerSigsRequest) returns (stream OpenChannelPeerSigsNotification) {}
+ rpc SubscribePluginStarted(StreamPluginStartedRequest) returns (stream PluginStartedNotification) {}
+ rpc SubscribePluginStopped(StreamPluginStoppedRequest) returns (stream PluginStoppedNotification) {}
+ rpc SubscribeSendPayFailure(StreamSendPayFailureRequest) returns (stream SendPayFailureNotification) {}
+ rpc SubscribeSendPaySuccess(StreamSendPaySuccessRequest) returns (stream SendPaySuccessNotification) {}
+ rpc SubscribeShutdown(StreamShutdownRequest) returns (stream ShutdownNotification) {}
+ rpc SubscribeWarning(StreamWarningRequest) returns (stream WarningNotification) {}
+ rpc SubscribePayPartEnd(StreamPayPartEndRequest) returns (stream PayPartEndNotification) {}
+ rpc SubscribePayPartStart(StreamPayPartStartRequest) returns (stream PayPartStartNotification) {}
}
message GetinfoRequest {
@@ -4343,6 +4361,22 @@ message CurrencyrateResponse {
double rate = 1;
}
+message StreamBalanceSnapshotRequest {
+}
+
+message BalanceSnapshotNotification {
+ bytes node_id = 1;
+ uint32 blockheight = 2;
+ uint32 timestamp = 3;
+ repeated BalanceSnapshotAccounts accounts = 4;
+}
+
+message BalanceSnapshotAccounts {
+ string account_id = 1;
+ Amount balance_msat = 2;
+ string coin_type = 3;
+}
+
message StreamBlockAddedRequest {
}
@@ -4368,6 +4402,29 @@ message ChannelOpenedNotification {
bool channel_ready = 4;
}
+message StreamChannelStateChangedRequest {
+}
+
+message ChannelStateChangedNotification {
+ // channel_state_changed.cause
+ enum ChannelStateChangedCause {
+ UNKNOWN = 0;
+ LOCAL = 1;
+ USER = 2;
+ REMOTE = 3;
+ PROTOCOL = 4;
+ ONCHAIN = 5;
+ }
+ bytes peer_id = 1;
+ bytes channel_id = 2;
+ optional string short_channel_id = 3;
+ string timestamp = 4;
+ optional ChannelState old_state = 5;
+ ChannelState new_state = 6;
+ ChannelStateChangedCause cause = 7;
+ optional string message = 8;
+}
+
message StreamConnectRequest {
}
@@ -4398,6 +4455,69 @@ message PeerConnectAddress {
optional uint32 port = 4;
}
+message StreamCoinMovementRequest {
+}
+
+message CoinMovementNotification {
+ // coin_movement.type
+ enum CoinMovementType {
+ CHANNEL_MVT = 0;
+ CHAIN_MVT = 1;
+ }
+ // coin_movement.primary_tag
+ enum CoinMovementPrimaryTag {
+ DEPOSIT = 0;
+ WITHDRAWAL = 1;
+ PENALTY = 2;
+ CHANNEL_OPEN = 3;
+ CHANNEL_CLOSE = 4;
+ DELAYED_TO_US = 5;
+ HTLC_TX = 6;
+ HTLC_TIMEOUT = 7;
+ HTLC_FULFILL = 8;
+ TO_WALLET = 9;
+ ANCHOR = 10;
+ TO_THEM = 11;
+ PENALIZED = 12;
+ STOLEN = 13;
+ IGNORED = 14;
+ TO_MINER = 15;
+ INVOICE = 16;
+ ROUTED = 17;
+ PUSHED = 18;
+ LEASE_FEE = 19;
+ CHANNEL_PROPOSED = 20;
+ PENALTY_ADJ = 21;
+ JOURNAL_ENTRY = 22;
+ }
+ uint32 version = 1;
+ string coin_type = 2;
+ bytes node_id = 3;
+ CoinMovementType item_type = 4;
+ optional uint64 created_index = 5;
+ string account_id = 6;
+ Amount credit_msat = 7;
+ Amount debit_msat = 8;
+ uint64 timestamp = 9;
+ repeated string tags = 10;
+ optional CoinMovementPrimaryTag primary_tag = 11;
+ repeated string extra_tags = 12;
+ optional bytes payment_hash = 13;
+ optional uint64 part_id = 14;
+ optional uint64 group_id = 15;
+ optional Amount fees_msat = 16;
+ optional Outpoint utxo = 17;
+ optional bytes peer_id = 18;
+ optional string originating_account = 19;
+ optional bytes txid = 20;
+ optional bytes spending_txid = 21;
+ optional bytes utxo_txid = 22;
+ optional uint32 vout = 23;
+ optional Amount output_msat = 24;
+ optional uint32 output_count = 25;
+ optional uint32 blockheight = 26;
+}
+
message StreamCustomMsgRequest {
}
@@ -4406,25 +4526,259 @@ message CustomMsgNotification {
bytes payload = 2;
}
-message StreamChannelStateChangedRequest {
+message StreamDeprecatedOneshotRequest {
}
-message ChannelStateChangedNotification {
- // channel_state_changed.cause
- enum ChannelStateChangedCause {
- UNKNOWN = 0;
- LOCAL = 1;
- USER = 2;
- REMOTE = 3;
- PROTOCOL = 4;
- ONCHAIN = 5;
+message DeprecatedOneshotNotification {
+ bool deprecated_ok = 1;
+}
+
+message StreamDisconnectRequest {
+}
+
+message DisconnectNotification {
+ bytes id = 1;
+}
+
+message StreamForwardEventRequest {
+}
+
+message ForwardEventNotification {
+ // forward_event.status
+ enum ForwardEventStatus {
+ OFFERED = 0;
+ SETTLED = 1;
+ LOCAL_FAILED = 2;
+ FAILED = 3;
}
- bytes peer_id = 1;
- bytes channel_id = 2;
- optional string short_channel_id = 3;
- string timestamp = 4;
- optional ChannelState old_state = 5;
- ChannelState new_state = 6;
- ChannelStateChangedCause cause = 7;
- optional string message = 8;
+ // forward_event.style
+ enum ForwardEventStyle {
+ LEGACY = 0;
+ TLV = 1;
+ }
+ bytes payment_hash = 1;
+ string in_channel = 2;
+ optional string out_channel = 3;
+ Amount in_msat = 4;
+ optional Amount out_msat = 5;
+ optional Amount fee_msat = 6;
+ ForwardEventStatus status = 7;
+ optional uint32 failcode = 8;
+ optional string failreason = 9;
+ optional ForwardEventStyle style = 10;
+ double received_time = 11;
+ optional double resolved_time = 12;
+}
+
+message StreamInvoiceCreationRequest {
+}
+
+message InvoiceCreationNotification {
+ optional Amount msat = 1;
+ bytes preimage = 2;
+ string label = 3;
+}
+
+message StreamInvoicePaymentRequest {
+}
+
+message InvoicePaymentNotification {
+ Amount msat = 1;
+ bytes preimage = 2;
+ optional Outpoint outpoint = 3;
+ string label = 4;
+}
+
+message StreamLogRequest {
+}
+
+message LogNotification {
+ // log.level
+ enum LogLevel {
+ IO = 0;
+ TRACE = 1;
+ DEBUG = 2;
+ INFO = 3;
+ UNUSUAL = 4;
+ BROKEN = 5;
+ }
+ LogLevel level = 1;
+ string time = 2;
+ string timestamp = 3;
+ string source = 4;
+ string log = 5;
+}
+
+message StreamOnionMessageForwardFailRequest {
+}
+
+message OnionMessageForwardFailNotification {
+ bytes source = 1;
+ bytes incoming = 2;
+ bytes path_key = 3;
+ optional bytes outgoing = 4;
+ optional bytes next_node_id = 5;
+ optional string next_short_channel_id_dir = 6;
+}
+
+message StreamOpenChannelPeerSigsRequest {
+}
+
+message OpenChannelPeerSigsNotification {
+ bytes channel_id = 1;
+ string signed_psbt = 2;
+}
+
+message StreamPluginStartedRequest {
+}
+
+message PluginStartedNotification {
+ string plugin_name = 1;
+ string plugin_path = 2;
+ repeated string methods = 3;
+}
+
+message StreamPluginStoppedRequest {
+}
+
+message PluginStoppedNotification {
+ string plugin_name = 1;
+ string plugin_path = 2;
+ repeated string methods = 3;
+}
+
+message StreamSendPayFailureRequest {
+}
+
+message SendPayFailureNotification {
+ sint64 code = 1;
+ string message = 2;
+ SendpayFailureData data = 3;
+}
+
+message SendpayFailureData {
+ // sendpay_failure.data.status
+ enum SendpayFailureDataStatus {
+ FAILED = 0;
+ PENDING = 1;
+ COMPLETE = 2;
+ }
+ optional uint64 created_index = 1;
+ optional uint64 id = 2;
+ optional bytes payment_hash = 3;
+ optional uint64 groupid = 4;
+ optional uint64 updated_index = 5;
+ optional uint64 partid = 6;
+ optional bytes destination = 7;
+ optional Amount amount_msat = 8;
+ optional Amount amount_sent_msat = 9;
+ optional uint64 created_at = 10;
+ optional uint64 completed_at = 11;
+ optional SendpayFailureDataStatus status = 12;
+ optional bytes payment_preimage = 13;
+ optional string label = 14;
+ optional string bolt11 = 15;
+ optional string bolt12 = 16;
+ optional string description = 17;
+ optional bytes erroronion = 18;
+ optional bytes onionreply = 19;
+ optional uint32 erring_index = 20;
+ optional uint32 failcode = 21;
+ optional string failcodename = 22;
+ optional bytes erring_node = 23;
+ optional string erring_channel = 24;
+ optional uint32 erring_direction = 25;
+ optional bytes raw_message = 26;
+}
+
+message StreamSendPaySuccessRequest {
+}
+
+message SendPaySuccessNotification {
+ // sendpay_success.status
+ enum SendpaySuccessStatus {
+ COMPLETE = 0;
+ }
+ uint64 created_index = 1;
+ uint64 id = 2;
+ bytes payment_hash = 3;
+ uint64 groupid = 4;
+ optional uint64 updated_index = 5;
+ optional uint64 partid = 6;
+ optional bytes destination = 7;
+ optional Amount amount_msat = 8;
+ Amount amount_sent_msat = 9;
+ uint64 created_at = 10;
+ optional uint64 completed_at = 11;
+ SendpaySuccessStatus status = 12;
+ optional bytes payment_preimage = 13;
+ optional string label = 14;
+ optional string bolt11 = 15;
+ optional string bolt12 = 16;
+ optional string description = 17;
+ optional bytes erroronion = 18;
+}
+
+message StreamShutdownRequest {
+}
+
+message ShutdownNotification {
+}
+
+message StreamWarningRequest {
+}
+
+message WarningNotification {
+ // warning.level
+ enum WarningLevel {
+ WARN = 0;
+ ERROR = 1;
+ }
+ WarningLevel level = 1;
+ string time = 2;
+ string timestamp = 3;
+ string source = 4;
+ string log = 5;
+}
+
+message StreamPayPartEndRequest {
+}
+
+message PayPartEndNotification {
+ // pay_part_end.status
+ enum PayPartEndStatus {
+ SUCCESS = 0;
+ FAILURE = 1;
+ }
+ PayPartEndStatus status = 1;
+ double duration = 2;
+ bytes payment_hash = 3;
+ uint64 groupid = 4;
+ uint64 partid = 5;
+ optional bytes failed_msg = 6;
+ optional bytes failed_node_id = 7;
+ optional string failed_short_channel_id = 8;
+ optional uint32 failed_direction = 9;
+ optional uint32 error_code = 10;
+ optional string error_message = 11;
+}
+
+message StreamPayPartStartRequest {
+}
+
+message PayPartStartNotification {
+ bytes payment_hash = 1;
+ uint64 groupid = 2;
+ uint64 partid = 3;
+ Amount total_payment_msat = 4;
+ Amount attempt_msat = 5;
+ repeated PayPartStartHops hops = 6;
+}
+
+message PayPartStartHops {
+ bytes next_node = 1;
+ string short_channel_id = 2;
+ uint32 direction = 3;
+ Amount channel_in_msat = 4;
+ Amount channel_out_msat = 5;
}
diff --git a/cln-grpc/proto/primitives.proto b/cln-grpc/proto/primitives.proto
index fb256807..fa62fdcf 100644
--- a/cln-grpc/proto/primitives.proto
+++ b/cln-grpc/proto/primitives.proto
@@ -39,6 +39,7 @@ enum ChannelState {
ChanneldAwaitingSplice = 11;
DualopendOpenCommitted = 12;
DualopendOpenCommittReady = 13;
+ Closed = 14;
}
enum HtlcState {
diff --git a/cln-grpc/src/convert.rs b/cln-grpc/src/convert.rs
index e85f3650..cc52f170 100644
--- a/cln-grpc/src/convert.rs
+++ b/cln-grpc/src/convert.rs
@@ -4614,6 +4614,30 @@ impl From<responses::CurrencyrateResponse> for pb::CurrencyrateResponse {
}
}
+#[allow(unused_variables)]
+impl From<notifications::BalanceSnapshotAccounts> for pb::BalanceSnapshotAccounts {
+ fn from(c: notifications::BalanceSnapshotAccounts) -> Self {
+ Self {
+ account_id: c.account_id, // Rule #2 for type string
+ balance_msat: Some(c.balance_msat.into()), // Rule #2 for type msat
+ coin_type: c.coin_type, // Rule #2 for type string
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::BalanceSnapshotNotification> for pb::BalanceSnapshotNotification {
+ fn from(c: notifications::BalanceSnapshotNotification) -> Self {
+ Self {
+ // Field: balance_snapshot.accounts[]
+ accounts: c.accounts.into_iter().map(|i| i.into()).collect(), // Rule #3 for type BalanceSnapshotAccounts
+ blockheight: c.blockheight, // Rule #2 for type u32
+ node_id: c.node_id.serialize().to_vec(), // Rule #2 for type pubkey
+ timestamp: c.timestamp, // Rule #2 for type u32
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<notifications::BlockAddedNotification> for pb::BlockAddedNotification {
fn from(c: notifications::BlockAddedNotification) -> Self {
@@ -4645,6 +4669,22 @@ impl From<notifications::ChannelOpenedNotification> for pb::ChannelOpenedNotific
}
}
+#[allow(unused_variables)]
+impl From<notifications::ChannelStateChangedNotification> for pb::ChannelStateChangedNotification {
+ fn from(c: notifications::ChannelStateChangedNotification) -> Self {
+ Self {
+ cause: c.cause as i32,
+ channel_id: <Sha256 as AsRef<[u8]>>::as_ref(&c.channel_id).to_vec(), // Rule #2 for type hash
+ message: c.message, // Rule #2 for type string?
+ new_state: c.new_state as i32,
+ old_state: c.old_state.map(|v| v as i32),
+ peer_id: c.peer_id.serialize().to_vec(), // Rule #2 for type pubkey
+ short_channel_id: c.short_channel_id.map(|v| v.to_string()), // Rule #2 for type short_channel_id?
+ timestamp: c.timestamp, // Rule #2 for type string
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<notifications::ConnectAddress> for pb::PeerConnectAddress {
fn from(c: notifications::ConnectAddress) -> Self {
@@ -4668,6 +4708,45 @@ impl From<notifications::ConnectNotification> for pb::PeerConnectNotification {
}
}
+#[allow(unused_variables,deprecated)]
+impl From<notifications::CoinMovementNotification> for pb::CoinMovementNotification {
+ fn from(c: notifications::CoinMovementNotification) -> Self {
+ Self {
+ account_id: c.account_id, // Rule #2 for type string
+ blockheight: c.blockheight, // Rule #2 for type u32?
+ coin_type: c.coin_type, // Rule #2 for type string
+ created_index: c.created_index, // Rule #2 for type u64?
+ credit_msat: Some(c.credit_msat.into()), // Rule #2 for type msat
+ debit_msat: Some(c.debit_msat.into()), // Rule #2 for type msat
+ // Field: coin_movement.extra_tags[]
+ extra_tags: c.extra_tags.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3
+ fees_msat: c.fees_msat.map(|f| f.into()), // Rule #2 for type msat?
+ group_id: c.group_id, // Rule #2 for type u64?
+ node_id: c.node_id.serialize().to_vec(), // Rule #2 for type pubkey
+ originating_account: c.originating_account, // Rule #2 for type string?
+ output_count: c.output_count, // Rule #2 for type u32?
+ output_msat: c.output_msat.map(|f| f.into()), // Rule #2 for type msat?
+ part_id: c.part_id, // Rule #2 for type u64?
+ payment_hash: c.payment_hash.map(|v| <Sha256 as AsRef<[u8]>>::as_ref(&v).to_vec()), // Rule #2 for type hash?
+ peer_id: c.peer_id.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey?
+ primary_tag: c.primary_tag.map(|v| v as i32),
+ spending_txid: c.spending_txid.map(|v| hex::decode(v).unwrap()), // Rule #2 for type txid?
+ // Field: coin_movement.tags[]
+ tags: c.tags.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3
+ timestamp: c.timestamp, // Rule #2 for type u64
+ #[allow(deprecated)]
+ txid: c.txid.map(|v| hex::decode(v).unwrap()), // Rule #2 for type txid?
+ item_type: c.item_type as i32,
+ utxo: c.utxo.map(|o|o.into()), // Rule #2 for type outpoint?
+ #[allow(deprecated)]
+ utxo_txid: c.utxo_txid.map(|v| hex::decode(v).unwrap()), // Rule #2 for type txid?
+ version: c.version, // Rule #2 for type u32
+ #[allow(deprecated)]
+ vout: c.vout, // Rule #2 for type u32?
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<notifications::CustomMsgNotification> for pb::CustomMsgNotification {
fn from(c: notifications::CustomMsgNotification) -> Self {
@@ -4679,21 +4758,266 @@ impl From<notifications::CustomMsgNotification> for pb::CustomMsgNotification {
}
#[allow(unused_variables)]
-impl From<notifications::ChannelStateChangedNotification> for pb::ChannelStateChangedNotification {
- fn from(c: notifications::ChannelStateChangedNotification) -> Self {
+impl From<notifications::DeprecatedOneshotNotification> for pb::DeprecatedOneshotNotification {
+ fn from(c: notifications::DeprecatedOneshotNotification) -> Self {
+ Self {
+ deprecated_ok: c.deprecated_ok, // Rule #2 for type boolean
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::DisconnectNotification> for pb::DisconnectNotification {
+ fn from(c: notifications::DisconnectNotification) -> Self {
+ Self {
+ id: c.id.serialize().to_vec(), // Rule #2 for type pubkey
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::ForwardEventNotification> for pb::ForwardEventNotification {
+ fn from(c: notifications::ForwardEventNotification) -> Self {
+ Self {
+ failcode: c.failcode, // Rule #2 for type u32?
+ failreason: c.failreason, // Rule #2 for type string?
+ fee_msat: c.fee_msat.map(|f| f.into()), // Rule #2 for type msat?
+ in_channel: c.in_channel.to_string(), // Rule #2 for type short_channel_id
+ in_msat: Some(c.in_msat.into()), // Rule #2 for type msat
+ out_channel: c.out_channel.map(|v| v.to_string()), // Rule #2 for type short_channel_id?
+ out_msat: c.out_msat.map(|f| f.into()), // Rule #2 for type msat?
+ payment_hash: <Sha256 as AsRef<[u8]>>::as_ref(&c.payment_hash).to_vec(), // Rule #2 for type hash
+ received_time: c.received_time, // Rule #2 for type number
+ resolved_time: c.resolved_time, // Rule #2 for type number?
+ status: c.status as i32,
+ style: c.style.map(|v| v as i32),
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::InvoiceCreationNotification> for pb::InvoiceCreationNotification {
+ fn from(c: notifications::InvoiceCreationNotification) -> Self {
+ Self {
+ label: c.label, // Rule #2 for type string
+ msat: c.msat.map(|f| f.into()), // Rule #2 for type msat?
+ preimage: c.preimage.to_vec(), // Rule #2 for type secret
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::InvoicePaymentNotification> for pb::InvoicePaymentNotification {
+ fn from(c: notifications::InvoicePaymentNotification) -> Self {
+ Self {
+ label: c.label, // Rule #2 for type string
+ msat: Some(c.msat.into()), // Rule #2 for type msat
+ outpoint: c.outpoint.map(|o|o.into()), // Rule #2 for type outpoint?
+ preimage: c.preimage.to_vec(), // Rule #2 for type secret
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::LogNotification> for pb::LogNotification {
+ fn from(c: notifications::LogNotification) -> Self {
+ Self {
+ level: c.level as i32,
+ log: c.log, // Rule #2 for type string
+ source: c.source, // Rule #2 for type string
+ time: c.time, // Rule #2 for type string
+ timestamp: c.timestamp, // Rule #2 for type string
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::OnionMessageForwardFailNotification> for pb::OnionMessageForwardFailNotification {
+ fn from(c: notifications::OnionMessageForwardFailNotification) -> Self {
+ Self {
+ incoming: hex::decode(&c.incoming).unwrap(), // Rule #2 for type hex
+ next_node_id: c.next_node_id.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey?
+ next_short_channel_id_dir: c.next_short_channel_id_dir.map(|v| v.to_string()), // Rule #2 for type short_channel_id_dir?
+ outgoing: c.outgoing.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex?
+ path_key: c.path_key.serialize().to_vec(), // Rule #2 for type pubkey
+ source: c.source.serialize().to_vec(), // Rule #2 for type pubkey
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::OpenChannelPeerSigsNotification> for pb::OpenChannelPeerSigsNotification {
+ fn from(c: notifications::OpenChannelPeerSigsNotification) -> Self {
Self {
- cause: c.cause as i32,
channel_id: <Sha256 as AsRef<[u8]>>::as_ref(&c.channel_id).to_vec(), // Rule #2 for type hash
- message: c.message, // Rule #2 for type string?
- new_state: c.new_state as i32,
- old_state: c.old_state.map(|v| v as i32),
- peer_id: c.peer_id.serialize().to_vec(), // Rule #2 for type pubkey
- short_channel_id: c.short_channel_id.map(|v| v.to_string()), // Rule #2 for type short_channel_id?
+ signed_psbt: c.signed_psbt, // Rule #2 for type string
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::PluginStartedNotification> for pb::PluginStartedNotification {
+ fn from(c: notifications::PluginStartedNotification) -> Self {
+ Self {
+ // Field: plugin_started.methods[]
+ methods: c.methods.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string
+ plugin_name: c.plugin_name, // Rule #2 for type string
+ plugin_path: c.plugin_path, // Rule #2 for type string
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::PluginStoppedNotification> for pb::PluginStoppedNotification {
+ fn from(c: notifications::PluginStoppedNotification) -> Self {
+ Self {
+ // Field: plugin_stopped.methods[]
+ methods: c.methods.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string
+ plugin_name: c.plugin_name, // Rule #2 for type string
+ plugin_path: c.plugin_path, // Rule #2 for type string
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::SendpayFailureData> for pb::SendpayFailureData {
+ fn from(c: notifications::SendpayFailureData) -> Self {
+ Self {
+ amount_msat: c.amount_msat.map(|f| f.into()), // Rule #2 for type msat?
+ amount_sent_msat: c.amount_sent_msat.map(|f| f.into()), // Rule #2 for type msat?
+ bolt11: c.bolt11, // Rule #2 for type string?
+ bolt12: c.bolt12, // Rule #2 for type string?
+ completed_at: c.completed_at, // Rule #2 for type u64?
+ created_at: c.created_at, // Rule #2 for type u64?
+ created_index: c.created_index, // Rule #2 for type u64?
+ description: c.description, // Rule #2 for type string?
+ destination: c.destination.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey?
+ erring_channel: c.erring_channel.map(|v| v.to_string()), // Rule #2 for type short_channel_id?
+ erring_direction: c.erring_direction, // Rule #2 for type u32?
+ erring_index: c.erring_index, // Rule #2 for type u32?
+ erring_node: c.erring_node.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey?
+ erroronion: c.erroronion.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex?
+ failcode: c.failcode, // Rule #2 for type u32?
+ failcodename: c.failcodename, // Rule #2 for type string?
+ groupid: c.groupid, // Rule #2 for type u64?
+ id: c.id, // Rule #2 for type u64?
+ label: c.label, // Rule #2 for type string?
+ onionreply: c.onionreply.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex?
+ partid: c.partid, // Rule #2 for type u64?
+ payment_hash: c.payment_hash.map(|v| <Sha256 as AsRef<[u8]>>::as_ref(&v).to_vec()), // Rule #2 for type hash?
+ payment_preimage: c.payment_preimage.map(|v| v.to_vec()), // Rule #2 for type secret?
+ raw_message: c.raw_message.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex?
+ status: c.status.map(|v| v as i32),
+ updated_index: c.updated_index, // Rule #2 for type u64?
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::SendPayFailureNotification> for pb::SendPayFailureNotification {
+ fn from(c: notifications::SendPayFailureNotification) -> Self {
+ Self {
+ code: c.code, // Rule #2 for type integer
+ data: Some(c.data.into()),
+ message: c.message, // Rule #2 for type string
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::SendPaySuccessNotification> for pb::SendPaySuccessNotification {
+ fn from(c: notifications::SendPaySuccessNotification) -> Self {
+ Self {
+ amount_msat: c.amount_msat.map(|f| f.into()), // Rule #2 for type msat?
+ amount_sent_msat: Some(c.amount_sent_msat.into()), // Rule #2 for type msat
+ bolt11: c.bolt11, // Rule #2 for type string?
+ bolt12: c.bolt12, // Rule #2 for type string?
+ completed_at: c.completed_at, // Rule #2 for type u64?
+ created_at: c.created_at, // Rule #2 for type u64
+ created_index: c.created_index, // Rule #2 for type u64
+ description: c.description, // Rule #2 for type string?
+ destination: c.destination.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey?
+ erroronion: c.erroronion.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex?
+ groupid: c.groupid, // Rule #2 for type u64
+ id: c.id, // Rule #2 for type u64
+ label: c.label, // Rule #2 for type string?
+ partid: c.partid, // Rule #2 for type u64?
+ payment_hash: <Sha256 as AsRef<[u8]>>::as_ref(&c.payment_hash).to_vec(), // Rule #2 for type hash
+ payment_preimage: c.payment_preimage.map(|v| v.to_vec()), // Rule #2 for type secret?
+ status: c.status as i32,
+ updated_index: c.updated_index, // Rule #2 for type u64?
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::ShutdownNotification> for pb::ShutdownNotification {
+ fn from(c: notifications::ShutdownNotification) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::WarningNotification> for pb::WarningNotification {
+ fn from(c: notifications::WarningNotification) -> Self {
+ Self {
+ level: c.level as i32,
+ log: c.log, // Rule #2 for type string
+ source: c.source, // Rule #2 for type string
+ time: c.time, // Rule #2 for type string
timestamp: c.timestamp, // Rule #2 for type string
}
}
}
+#[allow(unused_variables)]
+impl From<notifications::PayPartEndNotification> for pb::PayPartEndNotification {
+ fn from(c: notifications::PayPartEndNotification) -> Self {
+ Self {
+ duration: c.duration, // Rule #2 for type number
+ error_code: c.error_code, // Rule #2 for type u32?
+ error_message: c.error_message, // Rule #2 for type string?
+ failed_direction: c.failed_direction, // Rule #2 for type u32?
+ failed_msg: c.failed_msg.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex?
+ failed_node_id: c.failed_node_id.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey?
+ failed_short_channel_id: c.failed_short_channel_id.map(|v| v.to_string()), // Rule #2 for type short_channel_id?
+ groupid: c.groupid, // Rule #2 for type u64
+ partid: c.partid, // Rule #2 for type u64
+ payment_hash: <Sha256 as AsRef<[u8]>>::as_ref(&c.payment_hash).to_vec(), // Rule #2 for type hash
+ status: c.status as i32,
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::PayPartStartHops> for pb::PayPartStartHops {
+ fn from(c: notifications::PayPartStartHops) -> Self {
+ Self {
+ channel_in_msat: Some(c.channel_in_msat.into()), // Rule #2 for type msat
+ channel_out_msat: Some(c.channel_out_msat.into()), // Rule #2 for type msat
+ direction: c.direction, // Rule #2 for type u32
+ next_node: c.next_node.serialize().to_vec(), // Rule #2 for type pubkey
+ short_channel_id: c.short_channel_id.to_string(), // Rule #2 for type short_channel_id
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::PayPartStartNotification> for pb::PayPartStartNotification {
+ fn from(c: notifications::PayPartStartNotification) -> Self {
+ Self {
+ attempt_msat: Some(c.attempt_msat.into()), // Rule #2 for type msat
+ groupid: c.groupid, // Rule #2 for type u64
+ // Field: pay_part_start.hops[]
+ hops: c.hops.into_iter().map(|i| i.into()).collect(), // Rule #3 for type PayPartStartHops
+ partid: c.partid, // Rule #2 for type u64
+ payment_hash: <Sha256 as AsRef<[u8]>>::as_ref(&c.payment_hash).to_vec(), // Rule #2 for type hash
+ total_payment_msat: Some(c.total_payment_msat.into()), // Rule #2 for type msat
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<requests::GetinfoRequest> for pb::GetinfoRequest {
fn from(c: requests::GetinfoRequest) -> Self {
@@ -6486,6 +6810,14 @@ impl From<requests::CurrencyrateRequest> for pb::CurrencyrateRequest {
}
}
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamBalanceSnapshotRequest> for pb::StreamBalanceSnapshotRequest {
+ fn from(c: notifications::requests::StreamBalanceSnapshotRequest) -> Self {
+ Self {
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<notifications::requests::StreamBlockAddedRequest> for pb::StreamBlockAddedRequest {
fn from(c: notifications::requests::StreamBlockAddedRequest) -> Self {
@@ -6510,6 +6842,14 @@ impl From<notifications::requests::StreamChannelOpenedRequest> for pb::StreamCha
}
}
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamChannelStateChangedRequest> for pb::StreamChannelStateChangedRequest {
+ fn from(c: notifications::requests::StreamChannelStateChangedRequest) -> Self {
+ Self {
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<notifications::requests::StreamConnectRequest> for pb::StreamConnectRequest {
fn from(c: notifications::requests::StreamConnectRequest) -> Self {
@@ -6518,6 +6858,14 @@ impl From<notifications::requests::StreamConnectRequest> for pb::StreamConnectRe
}
}
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamCoinMovementRequest> for pb::StreamCoinMovementRequest {
+ fn from(c: notifications::requests::StreamCoinMovementRequest) -> Self {
+ Self {
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<notifications::requests::StreamCustomMsgRequest> for pb::StreamCustomMsgRequest {
fn from(c: notifications::requests::StreamCustomMsgRequest) -> Self {
@@ -6527,8 +6875,128 @@ impl From<notifications::requests::StreamCustomMsgRequest> for pb::StreamCustomM
}
#[allow(unused_variables)]
-impl From<notifications::requests::StreamChannelStateChangedRequest> for pb::StreamChannelStateChangedRequest {
- fn from(c: notifications::requests::StreamChannelStateChangedRequest) -> Self {
+impl From<notifications::requests::StreamDeprecatedOneshotRequest> for pb::StreamDeprecatedOneshotRequest {
+ fn from(c: notifications::requests::StreamDeprecatedOneshotRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamDisconnectRequest> for pb::StreamDisconnectRequest {
+ fn from(c: notifications::requests::StreamDisconnectRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamForwardEventRequest> for pb::StreamForwardEventRequest {
+ fn from(c: notifications::requests::StreamForwardEventRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamInvoiceCreationRequest> for pb::StreamInvoiceCreationRequest {
+ fn from(c: notifications::requests::StreamInvoiceCreationRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamInvoicePaymentRequest> for pb::StreamInvoicePaymentRequest {
+ fn from(c: notifications::requests::StreamInvoicePaymentRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamLogRequest> for pb::StreamLogRequest {
+ fn from(c: notifications::requests::StreamLogRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamOnionMessageForwardFailRequest> for pb::StreamOnionMessageForwardFailRequest {
+ fn from(c: notifications::requests::StreamOnionMessageForwardFailRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamOpenChannelPeerSigsRequest> for pb::StreamOpenChannelPeerSigsRequest {
+ fn from(c: notifications::requests::StreamOpenChannelPeerSigsRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamPluginStartedRequest> for pb::StreamPluginStartedRequest {
+ fn from(c: notifications::requests::StreamPluginStartedRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamPluginStoppedRequest> for pb::StreamPluginStoppedRequest {
+ fn from(c: notifications::requests::StreamPluginStoppedRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamSendPayFailureRequest> for pb::StreamSendPayFailureRequest {
+ fn from(c: notifications::requests::StreamSendPayFailureRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamSendPaySuccessRequest> for pb::StreamSendPaySuccessRequest {
+ fn from(c: notifications::requests::StreamSendPaySuccessRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamShutdownRequest> for pb::StreamShutdownRequest {
+ fn from(c: notifications::requests::StreamShutdownRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamWarningRequest> for pb::StreamWarningRequest {
+ fn from(c: notifications::requests::StreamWarningRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamPayPartEndRequest> for pb::StreamPayPartEndRequest {
+ fn from(c: notifications::requests::StreamPayPartEndRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<notifications::requests::StreamPayPartStartRequest> for pb::StreamPayPartStartRequest {
+ fn from(c: notifications::requests::StreamPayPartStartRequest) -> Self {
Self {
}
}
@@ -8292,6 +8760,14 @@ impl From<pb::CurrencyrateRequest> for requests::CurrencyrateRequest {
}
}
+#[allow(unused_variables)]
+impl From<pb::StreamBalanceSnapshotRequest> for notifications::requests::StreamBalanceSnapshotRequest {
+ fn from(c: pb::StreamBalanceSnapshotRequest) -> Self {
+ Self {
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<pb::StreamBlockAddedRequest> for notifications::requests::StreamBlockAddedRequest {
fn from(c: pb::StreamBlockAddedRequest) -> Self {
@@ -8316,6 +8792,14 @@ impl From<pb::StreamChannelOpenedRequest> for notifications::requests::StreamCha
}
}
+#[allow(unused_variables)]
+impl From<pb::StreamChannelStateChangedRequest> for notifications::requests::StreamChannelStateChangedRequest {
+ fn from(c: pb::StreamChannelStateChangedRequest) -> Self {
+ Self {
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<pb::StreamConnectRequest> for notifications::requests::StreamConnectRequest {
fn from(c: pb::StreamConnectRequest) -> Self {
@@ -8324,6 +8808,14 @@ impl From<pb::StreamConnectRequest> for notifications::requests::StreamConnectRe
}
}
+#[allow(unused_variables)]
+impl From<pb::StreamCoinMovementRequest> for notifications::requests::StreamCoinMovementRequest {
+ fn from(c: pb::StreamCoinMovementRequest) -> Self {
+ Self {
+ }
+ }
+}
+
#[allow(unused_variables)]
impl From<pb::StreamCustomMsgRequest> for notifications::requests::StreamCustomMsgRequest {
fn from(c: pb::StreamCustomMsgRequest) -> Self {
@@ -8333,8 +8825,128 @@ impl From<pb::StreamCustomMsgRequest> for notifications::requests::StreamCustomM
}
#[allow(unused_variables)]
-impl From<pb::StreamChannelStateChangedRequest> for notifications::requests::StreamChannelStateChangedRequest {
- fn from(c: pb::StreamChannelStateChangedRequest) -> Self {
+impl From<pb::StreamDeprecatedOneshotRequest> for notifications::requests::StreamDeprecatedOneshotRequest {
+ fn from(c: pb::StreamDeprecatedOneshotRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamDisconnectRequest> for notifications::requests::StreamDisconnectRequest {
+ fn from(c: pb::StreamDisconnectRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamForwardEventRequest> for notifications::requests::StreamForwardEventRequest {
+ fn from(c: pb::StreamForwardEventRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamInvoiceCreationRequest> for notifications::requests::StreamInvoiceCreationRequest {
+ fn from(c: pb::StreamInvoiceCreationRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamInvoicePaymentRequest> for notifications::requests::StreamInvoicePaymentRequest {
+ fn from(c: pb::StreamInvoicePaymentRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamLogRequest> for notifications::requests::StreamLogRequest {
+ fn from(c: pb::StreamLogRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamOnionMessageForwardFailRequest> for notifications::requests::StreamOnionMessageForwardFailRequest {
+ fn from(c: pb::StreamOnionMessageForwardFailRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamOpenChannelPeerSigsRequest> for notifications::requests::StreamOpenChannelPeerSigsRequest {
+ fn from(c: pb::StreamOpenChannelPeerSigsRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamPluginStartedRequest> for notifications::requests::StreamPluginStartedRequest {
+ fn from(c: pb::StreamPluginStartedRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamPluginStoppedRequest> for notifications::requests::StreamPluginStoppedRequest {
+ fn from(c: pb::StreamPluginStoppedRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamSendPayFailureRequest> for notifications::requests::StreamSendPayFailureRequest {
+ fn from(c: pb::StreamSendPayFailureRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamSendPaySuccessRequest> for notifications::requests::StreamSendPaySuccessRequest {
+ fn from(c: pb::StreamSendPaySuccessRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamShutdownRequest> for notifications::requests::StreamShutdownRequest {
+ fn from(c: pb::StreamShutdownRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamWarningRequest> for notifications::requests::StreamWarningRequest {
+ fn from(c: pb::StreamWarningRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamPayPartEndRequest> for notifications::requests::StreamPayPartEndRequest {
+ fn from(c: pb::StreamPayPartEndRequest) -> Self {
+ Self {
+ }
+ }
+}
+
+#[allow(unused_variables)]
+impl From<pb::StreamPayPartStartRequest> for notifications::requests::StreamPayPartStartRequest {
+ fn from(c: pb::StreamPayPartStartRequest) -> Self {
Self {
}
}
diff --git a/cln-grpc/src/server.rs b/cln-grpc/src/server.rs
index dad67858..b9605889 100644
--- a/cln-grpc/src/server.rs
+++ b/cln-grpc/src/server.rs
@@ -4724,6 +4724,31 @@ impl Node for Server
+ type SubscribeBalanceSnapshotStream = NotificationStream<pb::BalanceSnapshotNotification>;
+
+ async fn subscribe_balance_snapshot(
+ &self,
+ _request : tonic::Request<pb::StreamBalanceSnapshotRequest>
+ ) -> Result<tonic::Response<Self::SubscribeBalanceSnapshotStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::BalanceSnapshot(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
type SubscribeBlockAddedStream = NotificationStream<pb::BlockAddedNotification>;
async fn subscribe_block_added(
@@ -4799,6 +4824,31 @@ impl Node for Server
}
+ type SubscribeChannelStateChangedStream = NotificationStream<pb::ChannelStateChangedNotification>;
+
+ async fn subscribe_channel_state_changed(
+ &self,
+ _request : tonic::Request<pb::StreamChannelStateChangedRequest>
+ ) -> Result<tonic::Response<Self::SubscribeChannelStateChangedStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::ChannelStateChanged(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
type SubscribeConnectStream = NotificationStream<pb::PeerConnectNotification>;
async fn subscribe_connect(
@@ -4824,6 +4874,31 @@ impl Node for Server
}
+ type SubscribeCoinMovementStream = NotificationStream<pb::CoinMovementNotification>;
+
+ async fn subscribe_coin_movement(
+ &self,
+ _request : tonic::Request<pb::StreamCoinMovementRequest>
+ ) -> Result<tonic::Response<Self::SubscribeCoinMovementStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::CoinMovement(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
type SubscribeCustomMsgStream = NotificationStream<pb::CustomMsgNotification>;
async fn subscribe_custom_msg(
@@ -4849,12 +4924,12 @@ impl Node for Server
}
- type SubscribeChannelStateChangedStream = NotificationStream<pb::ChannelStateChangedNotification>;
+ type SubscribeDeprecatedOneshotStream = NotificationStream<pb::DeprecatedOneshotNotification>;
- async fn subscribe_channel_state_changed(
+ async fn subscribe_deprecated_oneshot(
&self,
- _request : tonic::Request<pb::StreamChannelStateChangedRequest>
- ) -> Result<tonic::Response<Self::SubscribeChannelStateChangedStream>, tonic::Status> {
+ _request : tonic::Request<pb::StreamDeprecatedOneshotRequest>
+ ) -> Result<tonic::Response<Self::SubscribeDeprecatedOneshotStream>, tonic::Status> {
let receiver = self.events.subscribe();
let stream = BroadcastStream::new(receiver);
let boxed = Box::pin(stream);
@@ -4863,7 +4938,382 @@ impl Node for Server
inner : boxed,
fn_filter_map : |x| {
match x {
- Notification::ChannelStateChanged(x) => {
+ Notification::DeprecatedOneshot(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeDisconnectStream = NotificationStream<pb::DisconnectNotification>;
+
+ async fn subscribe_disconnect(
+ &self,
+ _request : tonic::Request<pb::StreamDisconnectRequest>
+ ) -> Result<tonic::Response<Self::SubscribeDisconnectStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::Disconnect(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeForwardEventStream = NotificationStream<pb::ForwardEventNotification>;
+
+ async fn subscribe_forward_event(
+ &self,
+ _request : tonic::Request<pb::StreamForwardEventRequest>
+ ) -> Result<tonic::Response<Self::SubscribeForwardEventStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::ForwardEvent(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeInvoiceCreationStream = NotificationStream<pb::InvoiceCreationNotification>;
+
+ async fn subscribe_invoice_creation(
+ &self,
+ _request : tonic::Request<pb::StreamInvoiceCreationRequest>
+ ) -> Result<tonic::Response<Self::SubscribeInvoiceCreationStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::InvoiceCreation(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeInvoicePaymentStream = NotificationStream<pb::InvoicePaymentNotification>;
+
+ async fn subscribe_invoice_payment(
+ &self,
+ _request : tonic::Request<pb::StreamInvoicePaymentRequest>
+ ) -> Result<tonic::Response<Self::SubscribeInvoicePaymentStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::InvoicePayment(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeLogStream = NotificationStream<pb::LogNotification>;
+
+ async fn subscribe_log(
+ &self,
+ _request : tonic::Request<pb::StreamLogRequest>
+ ) -> Result<tonic::Response<Self::SubscribeLogStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::Log(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeOnionMessageForwardFailStream = NotificationStream<pb::OnionMessageForwardFailNotification>;
+
+ async fn subscribe_onion_message_forward_fail(
+ &self,
+ _request : tonic::Request<pb::StreamOnionMessageForwardFailRequest>
+ ) -> Result<tonic::Response<Self::SubscribeOnionMessageForwardFailStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::OnionMessageForwardFail(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeOpenChannelPeerSigsStream = NotificationStream<pb::OpenChannelPeerSigsNotification>;
+
+ async fn subscribe_open_channel_peer_sigs(
+ &self,
+ _request : tonic::Request<pb::StreamOpenChannelPeerSigsRequest>
+ ) -> Result<tonic::Response<Self::SubscribeOpenChannelPeerSigsStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::OpenChannelPeerSigs(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribePluginStartedStream = NotificationStream<pb::PluginStartedNotification>;
+
+ async fn subscribe_plugin_started(
+ &self,
+ _request : tonic::Request<pb::StreamPluginStartedRequest>
+ ) -> Result<tonic::Response<Self::SubscribePluginStartedStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::PluginStarted(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribePluginStoppedStream = NotificationStream<pb::PluginStoppedNotification>;
+
+ async fn subscribe_plugin_stopped(
+ &self,
+ _request : tonic::Request<pb::StreamPluginStoppedRequest>
+ ) -> Result<tonic::Response<Self::SubscribePluginStoppedStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::PluginStopped(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeSendPayFailureStream = NotificationStream<pb::SendPayFailureNotification>;
+
+ async fn subscribe_send_pay_failure(
+ &self,
+ _request : tonic::Request<pb::StreamSendPayFailureRequest>
+ ) -> Result<tonic::Response<Self::SubscribeSendPayFailureStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::SendPayFailure(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeSendPaySuccessStream = NotificationStream<pb::SendPaySuccessNotification>;
+
+ async fn subscribe_send_pay_success(
+ &self,
+ _request : tonic::Request<pb::StreamSendPaySuccessRequest>
+ ) -> Result<tonic::Response<Self::SubscribeSendPaySuccessStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::SendPaySuccess(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeShutdownStream = NotificationStream<pb::ShutdownNotification>;
+
+ async fn subscribe_shutdown(
+ &self,
+ _request : tonic::Request<pb::StreamShutdownRequest>
+ ) -> Result<tonic::Response<Self::SubscribeShutdownStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::Shutdown(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribeWarningStream = NotificationStream<pb::WarningNotification>;
+
+ async fn subscribe_warning(
+ &self,
+ _request : tonic::Request<pb::StreamWarningRequest>
+ ) -> Result<tonic::Response<Self::SubscribeWarningStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::Warning(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribePayPartEndStream = NotificationStream<pb::PayPartEndNotification>;
+
+ async fn subscribe_pay_part_end(
+ &self,
+ _request : tonic::Request<pb::StreamPayPartEndRequest>
+ ) -> Result<tonic::Response<Self::SubscribePayPartEndStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::PayPartEnd(x) => {
+ Some(x.into())
+ }
+ _ => None
+ }
+ }
+ };
+ Ok(tonic::Response::new(result))
+ }
+
+
+ type SubscribePayPartStartStream = NotificationStream<pb::PayPartStartNotification>;
+
+ async fn subscribe_pay_part_start(
+ &self,
+ _request : tonic::Request<pb::StreamPayPartStartRequest>
+ ) -> Result<tonic::Response<Self::SubscribePayPartStartStream>, tonic::Status> {
+ let receiver = self.events.subscribe();
+ let stream = BroadcastStream::new(receiver);
+ let boxed = Box::pin(stream);
+
+ let result = NotificationStream {
+ inner : boxed,
+ fn_filter_map : |x| {
+ match x {
+ Notification::PayPartStart(x) => {
Some(x.into())
}
_ => None
diff --git a/cln-rpc/src/notifications.rs b/cln-rpc/src/notifications.rs
index a68dda57..82f5f16e 100644
--- a/cln-rpc/src/notifications.rs
+++ b/cln-rpc/src/notifications.rs
@@ -7,20 +7,71 @@ use crate::primitives::*;
use serde::{Serialize, Deserialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum Notification {
+ #[serde(rename = "balance_snapshot")]
+ BalanceSnapshot(BalanceSnapshotNotification),
#[serde(rename = "block_added")]
BlockAdded(BlockAddedNotification),
#[serde(rename = "channel_open_failed")]
ChannelOpenFailed(ChannelOpenFailedNotification),
#[serde(rename = "channel_opened")]
ChannelOpened(ChannelOpenedNotification),
+ #[serde(rename = "channel_state_changed")]
+ ChannelStateChanged(ChannelStateChangedNotification),
#[serde(rename = "connect")]
Connect(ConnectNotification),
+ #[serde(rename = "coin_movement")]
+ CoinMovement(CoinMovementNotification),
#[serde(rename = "custommsg")]
CustomMsg(CustomMsgNotification),
- #[serde(rename = "channel_state_changed")]
- ChannelStateChanged(ChannelStateChangedNotification),
+ #[serde(rename = "deprecated_oneshot")]
+ DeprecatedOneshot(DeprecatedOneshotNotification),
+ #[serde(rename = "disconnect")]
+ Disconnect(DisconnectNotification),
+ #[serde(rename = "forward_event")]
+ ForwardEvent(ForwardEventNotification),
+ #[serde(rename = "invoice_creation")]
+ InvoiceCreation(InvoiceCreationNotification),
+ #[serde(rename = "invoice_payment")]
+ InvoicePayment(InvoicePaymentNotification),
+ #[serde(rename = "log")]
+ Log(LogNotification),
+ #[serde(rename = "onionmessage_forward_fail")]
+ OnionMessageForwardFail(OnionMessageForwardFailNotification),
+ #[serde(rename = "openchannel_peer_sigs")]
+ OpenChannelPeerSigs(OpenChannelPeerSigsNotification),
+ #[serde(rename = "plugin_started")]
+ PluginStarted(PluginStartedNotification),
+ #[serde(rename = "plugin_stopped")]
+ PluginStopped(PluginStoppedNotification),
+ #[serde(rename = "sendpay_failure")]
+ SendPayFailure(SendPayFailureNotification),
+ #[serde(rename = "sendpay_success")]
+ SendPaySuccess(SendPaySuccessNotification),
+ #[serde(rename = "shutdown")]
+ Shutdown(ShutdownNotification),
+ #[serde(rename = "warning")]
+ Warning(WarningNotification),
+ #[serde(rename = "pay_part_end")]
+ PayPartEnd(PayPartEndNotification),
+ #[serde(rename = "pay_part_start")]
+ PayPartStart(PayPartStartNotification),
+}
+
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct BalanceSnapshotAccounts {
+ pub account_id: String,
+ pub balance_msat: Amount,
+ pub coin_type: String,
}
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct BalanceSnapshotNotification {
+ pub accounts: Vec<BalanceSnapshotAccounts>,
+ pub blockheight: u32,
+ pub node_id: PublicKey,
+ pub timestamp: u32,
+}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct BlockAddedNotification {
@@ -41,6 +92,69 @@ pub struct ChannelOpenedNotification {
pub id: PublicKey,
}
+/// ['The cause of the state change.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum ChannelStateChangedCause {
+ #[serde(rename = "unknown")]
+ UNKNOWN = 0,
+ #[serde(rename = "local")]
+ LOCAL = 1,
+ #[serde(rename = "user")]
+ USER = 2,
+ #[serde(rename = "remote")]
+ REMOTE = 3,
+ #[serde(rename = "protocol")]
+ PROTOCOL = 4,
+ #[serde(rename = "onchain")]
+ ONCHAIN = 5,
+}
+
+impl TryFrom<i32> for ChannelStateChangedCause {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<ChannelStateChangedCause, anyhow::Error> {
+ match c {
+ 0 => Ok(ChannelStateChangedCause::UNKNOWN),
+ 1 => Ok(ChannelStateChangedCause::LOCAL),
+ 2 => Ok(ChannelStateChangedCause::USER),
+ 3 => Ok(ChannelStateChangedCause::REMOTE),
+ 4 => Ok(ChannelStateChangedCause::PROTOCOL),
+ 5 => Ok(ChannelStateChangedCause::ONCHAIN),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum ChannelStateChangedCause", o)),
+ }
+ }
+}
+
+impl ToString for ChannelStateChangedCause {
+ fn to_string(&self) -> String {
+ match self {
+ ChannelStateChangedCause::UNKNOWN => "UNKNOWN",
+ ChannelStateChangedCause::LOCAL => "LOCAL",
+ ChannelStateChangedCause::USER => "USER",
+ ChannelStateChangedCause::REMOTE => "REMOTE",
+ ChannelStateChangedCause::PROTOCOL => "PROTOCOL",
+ ChannelStateChangedCause::ONCHAIN => "ONCHAIN",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct ChannelStateChangedNotification {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub message: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub old_state: Option<ChannelState>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub short_channel_id: Option<ShortChannelId>,
+ // Path `channel_state_changed.cause`
+ pub cause: ChannelStateChangedCause,
+ // Path `channel_state_changed.new_state`
+ pub new_state: ChannelState,
+ pub channel_id: Sha256,
+ pub peer_id: PublicKey,
+ pub timestamp: String,
+}
+
/// ['Direction of the connection']
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[allow(non_camel_case_types)]
@@ -138,78 +252,697 @@ pub struct ConnectNotification {
pub id: PublicKey,
}
+/// ['The primary movement tag.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum CoinMovementPrimaryTag {
+ #[serde(rename = "deposit")]
+ DEPOSIT = 0,
+ #[serde(rename = "withdrawal")]
+ WITHDRAWAL = 1,
+ #[serde(rename = "penalty")]
+ PENALTY = 2,
+ #[serde(rename = "channel_open")]
+ CHANNEL_OPEN = 3,
+ #[serde(rename = "channel_close")]
+ CHANNEL_CLOSE = 4,
+ #[serde(rename = "delayed_to_us")]
+ DELAYED_TO_US = 5,
+ #[serde(rename = "htlc_tx")]
+ HTLC_TX = 6,
+ #[serde(rename = "htlc_timeout")]
+ HTLC_TIMEOUT = 7,
+ #[serde(rename = "htlc_fulfill")]
+ HTLC_FULFILL = 8,
+ #[serde(rename = "to_wallet")]
+ TO_WALLET = 9,
+ #[serde(rename = "anchor")]
+ ANCHOR = 10,
+ #[serde(rename = "to_them")]
+ TO_THEM = 11,
+ #[serde(rename = "penalized")]
+ PENALIZED = 12,
+ #[serde(rename = "stolen")]
+ STOLEN = 13,
+ #[serde(rename = "ignored")]
+ IGNORED = 14,
+ #[serde(rename = "to_miner")]
+ TO_MINER = 15,
+ #[serde(rename = "invoice")]
+ INVOICE = 16,
+ #[serde(rename = "routed")]
+ ROUTED = 17,
+ #[serde(rename = "pushed")]
+ PUSHED = 18,
+ #[serde(rename = "lease_fee")]
+ LEASE_FEE = 19,
+ #[serde(rename = "channel_proposed")]
+ CHANNEL_PROPOSED = 20,
+ #[serde(rename = "penalty_adj")]
+ PENALTY_ADJ = 21,
+ #[serde(rename = "journal_entry")]
+ JOURNAL_ENTRY = 22,
+}
+
+impl TryFrom<i32> for CoinMovementPrimaryTag {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<CoinMovementPrimaryTag, anyhow::Error> {
+ match c {
+ 0 => Ok(CoinMovementPrimaryTag::DEPOSIT),
+ 1 => Ok(CoinMovementPrimaryTag::WITHDRAWAL),
+ 2 => Ok(CoinMovementPrimaryTag::PENALTY),
+ 3 => Ok(CoinMovementPrimaryTag::CHANNEL_OPEN),
+ 4 => Ok(CoinMovementPrimaryTag::CHANNEL_CLOSE),
+ 5 => Ok(CoinMovementPrimaryTag::DELAYED_TO_US),
+ 6 => Ok(CoinMovementPrimaryTag::HTLC_TX),
+ 7 => Ok(CoinMovementPrimaryTag::HTLC_TIMEOUT),
+ 8 => Ok(CoinMovementPrimaryTag::HTLC_FULFILL),
+ 9 => Ok(CoinMovementPrimaryTag::TO_WALLET),
+ 10 => Ok(CoinMovementPrimaryTag::ANCHOR),
+ 11 => Ok(CoinMovementPrimaryTag::TO_THEM),
+ 12 => Ok(CoinMovementPrimaryTag::PENALIZED),
+ 13 => Ok(CoinMovementPrimaryTag::STOLEN),
+ 14 => Ok(CoinMovementPrimaryTag::IGNORED),
+ 15 => Ok(CoinMovementPrimaryTag::TO_MINER),
+ 16 => Ok(CoinMovementPrimaryTag::INVOICE),
+ 17 => Ok(CoinMovementPrimaryTag::ROUTED),
+ 18 => Ok(CoinMovementPrimaryTag::PUSHED),
+ 19 => Ok(CoinMovementPrimaryTag::LEASE_FEE),
+ 20 => Ok(CoinMovementPrimaryTag::CHANNEL_PROPOSED),
+ 21 => Ok(CoinMovementPrimaryTag::PENALTY_ADJ),
+ 22 => Ok(CoinMovementPrimaryTag::JOURNAL_ENTRY),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum CoinMovementPrimaryTag", o)),
+ }
+ }
+}
+
+impl ToString for CoinMovementPrimaryTag {
+ fn to_string(&self) -> String {
+ match self {
+ CoinMovementPrimaryTag::DEPOSIT => "DEPOSIT",
+ CoinMovementPrimaryTag::WITHDRAWAL => "WITHDRAWAL",
+ CoinMovementPrimaryTag::PENALTY => "PENALTY",
+ CoinMovementPrimaryTag::CHANNEL_OPEN => "CHANNEL_OPEN",
+ CoinMovementPrimaryTag::CHANNEL_CLOSE => "CHANNEL_CLOSE",
+ CoinMovementPrimaryTag::DELAYED_TO_US => "DELAYED_TO_US",
+ CoinMovementPrimaryTag::HTLC_TX => "HTLC_TX",
+ CoinMovementPrimaryTag::HTLC_TIMEOUT => "HTLC_TIMEOUT",
+ CoinMovementPrimaryTag::HTLC_FULFILL => "HTLC_FULFILL",
+ CoinMovementPrimaryTag::TO_WALLET => "TO_WALLET",
+ CoinMovementPrimaryTag::ANCHOR => "ANCHOR",
+ CoinMovementPrimaryTag::TO_THEM => "TO_THEM",
+ CoinMovementPrimaryTag::PENALIZED => "PENALIZED",
+ CoinMovementPrimaryTag::STOLEN => "STOLEN",
+ CoinMovementPrimaryTag::IGNORED => "IGNORED",
+ CoinMovementPrimaryTag::TO_MINER => "TO_MINER",
+ CoinMovementPrimaryTag::INVOICE => "INVOICE",
+ CoinMovementPrimaryTag::ROUTED => "ROUTED",
+ CoinMovementPrimaryTag::PUSHED => "PUSHED",
+ CoinMovementPrimaryTag::LEASE_FEE => "LEASE_FEE",
+ CoinMovementPrimaryTag::CHANNEL_PROPOSED => "CHANNEL_PROPOSED",
+ CoinMovementPrimaryTag::PENALTY_ADJ => "PENALTY_ADJ",
+ CoinMovementPrimaryTag::JOURNAL_ENTRY => "JOURNAL_ENTRY",
+ }.to_string()
+ }
+}
+
+/// ['Whether this is a channel or chain movement.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum CoinMovementType {
+ #[serde(rename = "channel_mvt")]
+ CHANNEL_MVT = 0,
+ #[serde(rename = "chain_mvt")]
+ CHAIN_MVT = 1,
+}
+
+impl TryFrom<i32> for CoinMovementType {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<CoinMovementType, anyhow::Error> {
+ match c {
+ 0 => Ok(CoinMovementType::CHANNEL_MVT),
+ 1 => Ok(CoinMovementType::CHAIN_MVT),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum CoinMovementType", o)),
+ }
+ }
+}
+
+impl ToString for CoinMovementType {
+ fn to_string(&self) -> String {
+ match self {
+ CoinMovementType::CHANNEL_MVT => "CHANNEL_MVT",
+ CoinMovementType::CHAIN_MVT => "CHAIN_MVT",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct CoinMovementNotification {
+ #[deprecated]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub txid: Option<String>,
+ #[deprecated]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub utxo_txid: Option<String>,
+ #[deprecated]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub vout: Option<u32>,
+ #[deprecated]
+ #[serde(skip_serializing_if = "crate::is_none_or_empty")]
+ pub tags: Option<Vec<String>>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub blockheight: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub created_index: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fees_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub group_id: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub originating_account: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub output_count: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub output_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub part_id: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub payment_hash: Option<Sha256>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub peer_id: Option<PublicKey>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub primary_tag: Option<CoinMovementPrimaryTag>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub spending_txid: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub utxo: Option<Outpoint>,
+ #[serde(skip_serializing_if = "crate::is_none_or_empty")]
+ pub extra_tags: Option<Vec<String>>,
+ // Path `coin_movement.type`
+ #[serde(rename = "type")]
+ pub item_type: CoinMovementType,
+ pub account_id: String,
+ pub coin_type: String,
+ pub credit_msat: Amount,
+ pub debit_msat: Amount,
+ pub node_id: PublicKey,
+ pub timestamp: u64,
+ pub version: u32,
+}
+
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CustomMsgNotification {
pub payload: String,
pub peer_id: PublicKey,
}
-/// ['The cause of the state change.']
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct DeprecatedOneshotNotification {
+ pub deprecated_ok: bool,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct DisconnectNotification {
+ pub id: PublicKey,
+}
+
+/// ['The onion format used for the forward, if known.']
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[allow(non_camel_case_types)]
-pub enum ChannelStateChangedCause {
- #[serde(rename = "unknown")]
- UNKNOWN = 0,
- #[serde(rename = "local")]
- LOCAL = 1,
- #[serde(rename = "user")]
- USER = 2,
- #[serde(rename = "remote")]
- REMOTE = 3,
- #[serde(rename = "protocol")]
- PROTOCOL = 4,
- #[serde(rename = "onchain")]
- ONCHAIN = 5,
+pub enum ForwardEventStyle {
+ #[serde(rename = "legacy")]
+ LEGACY = 0,
+ #[serde(rename = "tlv")]
+ TLV = 1,
}
-impl TryFrom<i32> for ChannelStateChangedCause {
+impl TryFrom<i32> for ForwardEventStyle {
type Error = anyhow::Error;
- fn try_from(c: i32) -> Result<ChannelStateChangedCause, anyhow::Error> {
+ fn try_from(c: i32) -> Result<ForwardEventStyle, anyhow::Error> {
match c {
- 0 => Ok(ChannelStateChangedCause::UNKNOWN),
- 1 => Ok(ChannelStateChangedCause::LOCAL),
- 2 => Ok(ChannelStateChangedCause::USER),
- 3 => Ok(ChannelStateChangedCause::REMOTE),
- 4 => Ok(ChannelStateChangedCause::PROTOCOL),
- 5 => Ok(ChannelStateChangedCause::ONCHAIN),
- o => Err(anyhow::anyhow!("Unknown variant {} for enum ChannelStateChangedCause", o)),
+ 0 => Ok(ForwardEventStyle::LEGACY),
+ 1 => Ok(ForwardEventStyle::TLV),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum ForwardEventStyle", o)),
}
}
}
-impl ToString for ChannelStateChangedCause {
+impl ToString for ForwardEventStyle {
fn to_string(&self) -> String {
match self {
- ChannelStateChangedCause::UNKNOWN => "UNKNOWN",
- ChannelStateChangedCause::LOCAL => "LOCAL",
- ChannelStateChangedCause::USER => "USER",
- ChannelStateChangedCause::REMOTE => "REMOTE",
- ChannelStateChangedCause::PROTOCOL => "PROTOCOL",
- ChannelStateChangedCause::ONCHAIN => "ONCHAIN",
+ ForwardEventStyle::LEGACY => "LEGACY",
+ ForwardEventStyle::TLV => "TLV",
+ }.to_string()
+ }
+}
+
+/// ['The current forwarding status.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum ForwardEventStatus {
+ #[serde(rename = "offered")]
+ OFFERED = 0,
+ #[serde(rename = "settled")]
+ SETTLED = 1,
+ #[serde(rename = "local_failed")]
+ LOCAL_FAILED = 2,
+ #[serde(rename = "failed")]
+ FAILED = 3,
+}
+
+impl TryFrom<i32> for ForwardEventStatus {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<ForwardEventStatus, anyhow::Error> {
+ match c {
+ 0 => Ok(ForwardEventStatus::OFFERED),
+ 1 => Ok(ForwardEventStatus::SETTLED),
+ 2 => Ok(ForwardEventStatus::LOCAL_FAILED),
+ 3 => Ok(ForwardEventStatus::FAILED),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum ForwardEventStatus", o)),
+ }
+ }
+}
+
+impl ToString for ForwardEventStatus {
+ fn to_string(&self) -> String {
+ match self {
+ ForwardEventStatus::OFFERED => "OFFERED",
+ ForwardEventStatus::SETTLED => "SETTLED",
+ ForwardEventStatus::LOCAL_FAILED => "LOCAL_FAILED",
+ ForwardEventStatus::FAILED => "FAILED",
}.to_string()
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
-pub struct ChannelStateChangedNotification {
+pub struct ForwardEventNotification {
#[serde(skip_serializing_if = "Option::is_none")]
- pub message: Option<String>,
+ pub failcode: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
- pub old_state: Option<ChannelState>,
+ pub failreason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
- pub short_channel_id: Option<ShortChannelId>,
- // Path `channel_state_changed.cause`
- pub cause: ChannelStateChangedCause,
- // Path `channel_state_changed.new_state`
- pub new_state: ChannelState,
+ pub fee_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub out_channel: Option<ShortChannelId>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub out_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub resolved_time: Option<f64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub style: Option<ForwardEventStyle>,
+ // Path `forward_event.status`
+ pub status: ForwardEventStatus,
+ pub in_channel: ShortChannelId,
+ pub in_msat: Amount,
+ pub payment_hash: Sha256,
+ pub received_time: f64,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct InvoiceCreationNotification {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub msat: Option<Amount>,
+ pub label: String,
+ pub preimage: Secret,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct InvoicePaymentNotification {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub outpoint: Option<Outpoint>,
+ pub label: String,
+ pub msat: Amount,
+ pub preimage: Secret,
+}
+
+/// ['The log level of the emitted message.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum LogLevel {
+ #[serde(rename = "io")]
+ IO = 0,
+ #[serde(rename = "trace")]
+ TRACE = 1,
+ #[serde(rename = "debug")]
+ DEBUG = 2,
+ #[serde(rename = "info")]
+ INFO = 3,
+ #[serde(rename = "unusual")]
+ UNUSUAL = 4,
+ #[serde(rename = "broken")]
+ BROKEN = 5,
+}
+
+impl TryFrom<i32> for LogLevel {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<LogLevel, anyhow::Error> {
+ match c {
+ 0 => Ok(LogLevel::IO),
+ 1 => Ok(LogLevel::TRACE),
+ 2 => Ok(LogLevel::DEBUG),
+ 3 => Ok(LogLevel::INFO),
+ 4 => Ok(LogLevel::UNUSUAL),
+ 5 => Ok(LogLevel::BROKEN),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum LogLevel", o)),
+ }
+ }
+}
+
+impl ToString for LogLevel {
+ fn to_string(&self) -> String {
+ match self {
+ LogLevel::IO => "IO",
+ LogLevel::TRACE => "TRACE",
+ LogLevel::DEBUG => "DEBUG",
+ LogLevel::INFO => "INFO",
+ LogLevel::UNUSUAL => "UNUSUAL",
+ LogLevel::BROKEN => "BROKEN",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct LogNotification {
+ // Path `log.level`
+ pub level: LogLevel,
+ pub log: String,
+ pub source: String,
+ pub time: String,
+ pub timestamp: String,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct OnionMessageForwardFailNotification {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub next_node_id: Option<PublicKey>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub next_short_channel_id_dir: Option<ShortChannelIdDir>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub outgoing: Option<String>,
+ pub incoming: String,
+ pub path_key: PublicKey,
+ pub source: PublicKey,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct OpenChannelPeerSigsNotification {
pub channel_id: Sha256,
- pub peer_id: PublicKey,
+ pub signed_psbt: String,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct PluginStartedNotification {
+ pub methods: Vec<String>,
+ pub plugin_name: String,
+ pub plugin_path: String,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct PluginStoppedNotification {
+ pub methods: Vec<String>,
+ pub plugin_name: String,
+ pub plugin_path: String,
+}
+
+/// ['The terminal status for a failed sendpay notification.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum SendpayFailureDataStatus {
+ #[serde(rename = "failed")]
+ FAILED = 0,
+ #[serde(rename = "pending")]
+ PENDING = 1,
+ #[serde(rename = "complete")]
+ COMPLETE = 2,
+}
+
+impl TryFrom<i32> for SendpayFailureDataStatus {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<SendpayFailureDataStatus, anyhow::Error> {
+ match c {
+ 0 => Ok(SendpayFailureDataStatus::FAILED),
+ 1 => Ok(SendpayFailureDataStatus::PENDING),
+ 2 => Ok(SendpayFailureDataStatus::COMPLETE),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum SendpayFailureDataStatus", o)),
+ }
+ }
+}
+
+impl ToString for SendpayFailureDataStatus {
+ fn to_string(&self) -> String {
+ match self {
+ SendpayFailureDataStatus::FAILED => "FAILED",
+ SendpayFailureDataStatus::PENDING => "PENDING",
+ SendpayFailureDataStatus::COMPLETE => "COMPLETE",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct SendpayFailureData {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub amount_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub amount_sent_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub bolt11: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub bolt12: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub completed_at: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub created_at: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub created_index: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub destination: Option<PublicKey>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub erring_channel: Option<ShortChannelId>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub erring_direction: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub erring_index: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub erring_node: Option<PublicKey>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub erroronion: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub failcode: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub failcodename: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub groupid: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub id: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub label: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub onionreply: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub partid: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub payment_hash: Option<Sha256>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub payment_preimage: Option<Secret>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub raw_message: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub status: Option<SendpayFailureDataStatus>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub updated_index: Option<u64>,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct SendPayFailureNotification {
+ pub code: i64,
+ pub data: SendpayFailureData,
+ pub message: String,
+}
+
+/// ['The terminal status for a successful sendpay notification.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum SendpaySuccessStatus {
+ #[serde(rename = "complete")]
+ COMPLETE = 0,
+}
+
+impl TryFrom<i32> for SendpaySuccessStatus {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<SendpaySuccessStatus, anyhow::Error> {
+ match c {
+ 0 => Ok(SendpaySuccessStatus::COMPLETE),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum SendpaySuccessStatus", o)),
+ }
+ }
+}
+
+impl ToString for SendpaySuccessStatus {
+ fn to_string(&self) -> String {
+ match self {
+ SendpaySuccessStatus::COMPLETE => "COMPLETE",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct SendPaySuccessNotification {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub amount_msat: Option<Amount>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub bolt11: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub bolt12: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub completed_at: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub destination: Option<PublicKey>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub erroronion: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub label: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub partid: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub payment_preimage: Option<Secret>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub updated_index: Option<u64>,
+ // Path `sendpay_success.status`
+ pub status: SendpaySuccessStatus,
+ pub amount_sent_msat: Amount,
+ pub created_at: u64,
+ pub created_index: u64,
+ pub groupid: u64,
+ pub id: u64,
+ pub payment_hash: Sha256,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct ShutdownNotification {
+}
+
+/// ['The log level of the warning notification.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum WarningLevel {
+ #[serde(rename = "warn")]
+ WARN = 0,
+ #[serde(rename = "error")]
+ ERROR = 1,
+}
+
+impl TryFrom<i32> for WarningLevel {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<WarningLevel, anyhow::Error> {
+ match c {
+ 0 => Ok(WarningLevel::WARN),
+ 1 => Ok(WarningLevel::ERROR),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum WarningLevel", o)),
+ }
+ }
+}
+
+impl ToString for WarningLevel {
+ fn to_string(&self) -> String {
+ match self {
+ WarningLevel::WARN => "WARN",
+ WarningLevel::ERROR => "ERROR",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct WarningNotification {
+ // Path `warning.level`
+ pub level: WarningLevel,
+ pub log: String,
+ pub source: String,
+ pub time: String,
pub timestamp: String,
}
+/// ['Whether the payment part succeeded or failed.']
+#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[allow(non_camel_case_types)]
+pub enum PayPartEndStatus {
+ #[serde(rename = "success")]
+ SUCCESS = 0,
+ #[serde(rename = "failure")]
+ FAILURE = 1,
+}
+
+impl TryFrom<i32> for PayPartEndStatus {
+ type Error = anyhow::Error;
+ fn try_from(c: i32) -> Result<PayPartEndStatus, anyhow::Error> {
+ match c {
+ 0 => Ok(PayPartEndStatus::SUCCESS),
+ 1 => Ok(PayPartEndStatus::FAILURE),
+ o => Err(anyhow::anyhow!("Unknown variant {} for enum PayPartEndStatus", o)),
+ }
+ }
+}
+
+impl ToString for PayPartEndStatus {
+ fn to_string(&self) -> String {
+ match self {
+ PayPartEndStatus::SUCCESS => "SUCCESS",
+ PayPartEndStatus::FAILURE => "FAILURE",
+ }.to_string()
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct PayPartEndNotification {
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub error_code: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub error_message: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub failed_direction: Option<u32>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub failed_msg: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub failed_node_id: Option<PublicKey>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub failed_short_channel_id: Option<ShortChannelId>,
+ // Path `pay_part_end.status`
+ pub status: PayPartEndStatus,
+ pub duration: f64,
+ pub groupid: u64,
+ pub partid: u64,
+ pub payment_hash: Sha256,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct PayPartStartHops {
+ pub channel_in_msat: Amount,
+ pub channel_out_msat: Amount,
+ pub direction: u32,
+ pub next_node: PublicKey,
+ pub short_channel_id: ShortChannelId,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct PayPartStartNotification {
+ pub attempt_msat: Amount,
+ pub groupid: u64,
+ pub hops: Vec<PayPartStartHops>,
+ pub partid: u64,
+ pub payment_hash: Sha256,
+ pub total_payment_msat: Amount,
+}
+
pub mod requests{
use serde::{Serialize, Deserialize};
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamBalanceSnapshotRequest {
+ }
+
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct StreamBlockAddedRequest {
}
@@ -222,16 +955,84 @@ use serde::{Serialize, Deserialize};
pub struct StreamChannelOpenedRequest {
}
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamChannelStateChangedRequest {
+ }
+
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct StreamConnectRequest {
}
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamCoinMovementRequest {
+ }
+
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct StreamCustomMsgRequest {
}
#[derive(Clone, Debug, Deserialize, Serialize)]
- pub struct StreamChannelStateChangedRequest {
+ pub struct StreamDeprecatedOneshotRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamDisconnectRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamForwardEventRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamInvoiceCreationRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamInvoicePaymentRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamLogRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamOnionMessageForwardFailRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamOpenChannelPeerSigsRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamPluginStartedRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamPluginStoppedRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamSendPayFailureRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamSendPaySuccessRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamShutdownRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamWarningRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamPayPartEndRequest {
+ }
+
+ #[derive(Clone, Debug, Deserialize, Serialize)]
+ pub struct StreamPayPartStartRequest {
}
}
diff --git a/cln-rpc/src/primitives.rs b/cln-rpc/src/primitives.rs
index cc9de9c6..c99c94d7 100644
--- a/cln-rpc/src/primitives.rs
+++ b/cln-rpc/src/primitives.rs
@@ -29,6 +29,7 @@ pub enum ChannelState {
CHANNELD_AWAITING_SPLICE = 11,
DUALOPEND_OPEN_COMMITTED = 12,
DUALOPEND_OPEN_COMMIT_READY = 13,
+ CLOSED = 14,
}
/// ['The first 10 states are for `out`, the next 10 are for `in`.']
@@ -461,6 +462,7 @@ impl TryFrom<i32> for ChannelState {
11 => Ok(ChannelState::CHANNELD_AWAITING_SPLICE),
12 => Ok(ChannelState::DUALOPEND_OPEN_COMMITTED),
13 => Ok(ChannelState::DUALOPEND_OPEN_COMMIT_READY),
+ 14 => Ok(ChannelState::CLOSED),
_ => Err(anyhow!("Invalid channel state {}", value)),
}
}
@@ -483,6 +485,7 @@ impl Display for ChannelState {
ChannelState::CHANNELD_AWAITING_SPLICE => write!(f, "CHANNELD_AWAITING_SPLICE"),
ChannelState::DUALOPEND_OPEN_COMMITTED => write!(f, "DUALOPEND_OPEN_COMMITTED"),
ChannelState::DUALOPEND_OPEN_COMMIT_READY => write!(f, "DUALOPEND_OPEN_COMMIT_READY"),
+ ChannelState::CLOSED => write!(f, "CLOSED"),
}
}
}
diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json
index c8323e51..e1f02594 100644
--- a/contrib/msggen/msggen/schema.json
+++ b/contrib/msggen/msggen/schema.json
@@ -37867,6 +37867,92 @@
}
},
"notifications": {
+ "balance_snapshot.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "balance_snapshot",
+ "title": "Notification for balance snapshots",
+ "description": [
+ "The **balance_snapshot** notification informs whenever lightningd emits a balance snapshot for bookkeeping."
+ ],
+ "added": "v24.11",
+ "request": {
+ "added": "v24.11"
+ },
+ "response": {
+ "added": "v24.11",
+ "required": [
+ "node_id",
+ "blockheight",
+ "timestamp",
+ "accounts"
+ ],
+ "properties": {
+ "node_id": {
+ "type": "pubkey",
+ "description": [
+ "The node id the snapshot was taken for."
+ ],
+ "added": "v24.11"
+ },
+ "blockheight": {
+ "type": "u32",
+ "description": [
+ "The blockheight at which the snapshot was taken."
+ ],
+ "added": "v24.11"
+ },
+ "timestamp": {
+ "type": "u32",
+ "description": [
+ "The snapshot time as seconds since epoch."
+ ],
+ "added": "v24.11"
+ },
+ "accounts": {
+ "type": "array",
+ "description": [
+ "The balances for each tracked account at the snapshot time."
+ ],
+ "added": "v24.11",
+ "items": {
+ "type": "object",
+ "added": "v24.11",
+ "additionalProperties": false,
+ "required": [
+ "account_id",
+ "balance_msat",
+ "coin_type"
+ ],
+ "properties": {
+ "account_id": {
+ "type": "string",
+ "description": [
+ "The account identifier for the balance."
+ ],
+ "added": "v24.11"
+ },
+ "balance_msat": {
+ "type": "msat",
+ "description": [
+ "The account balance in millisatoshis."
+ ],
+ "added": "v24.11"
+ },
+ "coin_type": {
+ "type": "string",
+ "description": [
+ "The BIP173 coin type name for the balance."
+ ],
+ "added": "v24.11"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"block_added.json": {
"$schema": "../../rpc-schema-draft.json",
"type": "object",
@@ -38099,172 +38185,1732 @@
}
}
},
- "connect.json": {
+ "coin_movement.json": {
"$schema": "../../rpc-schema-draft.json",
"type": "object",
- "notification": "connect",
- "title": "Notification for connection with a peer",
+ "additionalProperties": false,
+ "notification": "coin_movement",
+ "title": "Notification for coin movements",
"description": [
- "The **connect** informs whenever the node is connected to a peer."
+ "The **coin_movement** notification informs whenever lightningd records a finalized ledger movement."
],
- "additionalProperties": false,
"added": "pre-v0.10.1",
- "request": {},
+ "request": {
+ "added": "pre-v0.10.1"
+ },
"response": {
+ "added": "pre-v0.10.1",
"required": [
- "id",
- "direction",
- "address"
+ "version",
+ "coin_type",
+ "node_id",
+ "type",
+ "created_index",
+ "account_id",
+ "credit_msat",
+ "debit_msat",
+ "timestamp",
+ "primary_tag"
],
"properties": {
- "id": {
+ "version": {
+ "type": "u32",
+ "description": [
+ "The coin movement schema version."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "coin_type": {
+ "type": "string",
+ "description": [
+ "The BIP173 coin type name."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "node_id": {
"type": "pubkey",
"description": [
- "The id of the peer which sent the custom message"
+ "The node id that emitted the notification."
],
"added": "pre-v0.10.1"
},
- "direction": {
+ "type": {
"type": "string",
"enum": [
- "in",
- "out"
+ "channel_mvt",
+ "chain_mvt"
],
"description": [
- "Direction of the connection"
+ "Whether this is a channel or chain movement."
],
"added": "pre-v0.10.1"
},
- "address": {
- "type": "object",
+ "created_index": {
+ "type": "u64",
"description": [
- "Address information (mainly useful if **direction** is *out*)"
+ "1-based index indicating order this move was created in."
],
- "added": "pre-v0.10.1",
- "additionalProperties": true,
- "required": [
- "type"
+ "added": "v25.09"
+ },
+ "account_id": {
+ "type": "string",
+ "description": [
+ "The account identifier for the movement."
],
- "properties": {
- "type": {
- "type": "string",
- "added": "pre-v0.10.1",
- "enum": [
- "local socket",
- "ipv4",
- "ipv6",
- "torv2",
- "torv3",
- "websocket"
- ],
- "description": [
- "Type of connection (*torv2*/*torv3* only if **direction** is *out*)"
- ]
- }
- },
- "allOf": [
- {
- "if": {
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "local socket"
- ]
- }
- }
- },
- "then": {
- "additionalProperties": false,
- "required": [
- "socket"
- ],
- "properties": {
- "type": {},
- "socket": {
- "type": "string",
- "added": "pre-v0.10.1",
- "description": [
- "Socket filename"
- ]
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "ipv4",
- "ipv6",
- "torv2",
- "torv3"
- ]
- }
- }
- },
- "then": {
- "additionalProperties": false,
- "required": [
- "address",
- "port"
- ],
- "properties": {
- "type": {},
- "address": {
- "type": "string",
- "added": "pre-v0.10.1",
- "description": [
- "Address in expected format for **type**"
- ]
- },
- "port": {
- "type": "u16",
- "added": "pre-v0.10.1",
- "description": [
- "Port number"
- ]
- }
- }
- }
- }
- ]
- }
- }
- }
- },
- "custommsg.json": {
- "$schema": "../../rpc-schema-draft.json",
- "type": "object",
- "additionalProperties": false,
- "notification": "custommsg",
- "title": "Notification for custom messages",
- "description": [
- "The **custommsg** notifies whenever the node receives a custom message from a peer."
- ],
- "added": "v24.02",
- "request": {},
- "response": {
- "required": [
- "peer_id",
- "payload"
- ],
- "properties": {
- "peer_id": {
- "type": "pubkey",
+ "added": "pre-v0.10.1"
+ },
+ "credit_msat": {
+ "type": "msat",
"description": [
- "The id of the peer which sent the custom message"
+ "Amount credited to the account."
],
- "added": "v24.02"
+ "added": "pre-v0.10.1"
},
- "payload": {
- "type": "hex",
+ "debit_msat": {
+ "type": "msat",
"description": [
- "The hex-encoded payload. The first 2 bytes represent the BOLT-8 message type followed by the message content"
+ "Amount debited from the account."
],
- "added": "v24.02"
+ "added": "pre-v0.10.1"
+ },
+ "timestamp": {
+ "type": "u64",
+ "description": [
+ "The UNIX timestamp when the movement was recorded."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "tags": {
+ "type": "array",
+ "description": [
+ "Deprecated legacy combined tag array, emitted only for deprecated output compatibility."
+ ],
+ "added": "pre-v0.10.1",
+ "deprecated": [
+ "v25.09",
+ "v26.09"
+ ],
+ "items": {
+ "type": "string",
+ "added": "pre-v0.10.1",
+ "description": [
+ "A legacy movement tag."
+ ]
+ }
+ },
+ "primary_tag": {
+ "type": "string",
+ "enum": [
+ "deposit",
+ "withdrawal",
+ "penalty",
+ "channel_open",
+ "channel_close",
+ "delayed_to_us",
+ "htlc_tx",
+ "htlc_timeout",
+ "htlc_fulfill",
+ "to_wallet",
+ "anchor",
+ "to_them",
+ "penalized",
+ "stolen",
+ "ignored",
+ "to_miner",
+ "invoice",
+ "routed",
+ "pushed",
+ "lease_fee",
+ "channel_proposed",
+ "penalty_adj",
+ "journal_entry"
+ ],
+ "description": [
+ "The primary movement tag."
+ ],
+ "added": "v25.09"
+ },
+ "extra_tags": {
+ "type": "array",
+ "description": [
+ "Additional movement tags."
+ ],
+ "added": "v25.09",
+ "items": {
+ "type": "string",
+ "added": "v25.09",
+ "description": [
+ "An additional movement tag."
+ ]
+ }
+ },
+ "payment_hash": {
+ "type": "hash",
+ "description": [
+ "The payment hash associated with the movement, if any."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "part_id": {
+ "type": "u64",
+ "description": [
+ "The part id for a multi-part channel payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "group_id": {
+ "type": "u64",
+ "description": [
+ "The group id for a multi-part channel payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "fees_msat": {
+ "type": "msat",
+ "description": [
+ "The fees associated with a channel movement."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "utxo": {
+ "type": "outpoint",
+ "description": [
+ "The outpoint for a chain movement."
+ ],
+ "added": "v25.09"
+ },
+ "peer_id": {
+ "type": "pubkey",
+ "description": [
+ "The peer associated with a chain movement, if any."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "originating_account": {
+ "type": "string",
+ "description": [
+ "The originating account for an external chain movement, if any."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "txid": {
+ "type": "txid",
+ "description": [
+ "Deprecated legacy field for the spending transaction id."
+ ],
+ "added": "pre-v0.10.1",
+ "deprecated": [
+ "v25.09",
+ "v26.09"
+ ]
+ },
+ "spending_txid": {
+ "type": "txid",
+ "description": [
+ "The spending transaction id for a chain movement, if any."
+ ],
+ "added": "v25.09"
+ },
+ "utxo_txid": {
+ "type": "txid",
+ "description": [
+ "Deprecated legacy field for the outpoint transaction id."
+ ],
+ "added": "pre-v0.10.1",
+ "deprecated": [
+ "v25.09",
+ "v26.09"
+ ]
+ },
+ "vout": {
+ "type": "u32",
+ "description": [
+ "Deprecated legacy field for the outpoint output index."
+ ],
+ "added": "pre-v0.10.1",
+ "deprecated": [
+ "v25.09",
+ "v26.09"
+ ]
+ },
+ "output_msat": {
+ "type": "msat",
+ "description": [
+ "The output amount for a chain movement."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "output_count": {
+ "type": "u32",
+ "description": [
+ "The number of outputs in the spending transaction, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "blockheight": {
+ "type": "u32",
+ "description": [
+ "The blockheight for a chain movement."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ },
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "channel_mvt"
+ ]
+ }
+ }
+ },
+ "then": {
+ "required": [
+ "fees_msat"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "chain_mvt"
+ ]
+ }
+ }
+ },
+ "then": {
+ "required": [
+ "utxo",
+ "output_msat",
+ "blockheight"
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "connect.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "notification": "connect",
+ "title": "Notification for connection with a peer",
+ "description": [
+ "The **connect** informs whenever the node is connected to a peer."
+ ],
+ "additionalProperties": false,
+ "added": "pre-v0.10.1",
+ "request": {},
+ "response": {
+ "required": [
+ "id",
+ "direction",
+ "address"
+ ],
+ "properties": {
+ "id": {
+ "type": "pubkey",
+ "description": [
+ "The id of the peer which sent the custom message"
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "direction": {
+ "type": "string",
+ "enum": [
+ "in",
+ "out"
+ ],
+ "description": [
+ "Direction of the connection"
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "address": {
+ "type": "object",
+ "description": [
+ "Address information (mainly useful if **direction** is *out*)"
+ ],
+ "added": "pre-v0.10.1",
+ "additionalProperties": true,
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "added": "pre-v0.10.1",
+ "enum": [
+ "local socket",
+ "ipv4",
+ "ipv6",
+ "torv2",
+ "torv3",
+ "websocket"
+ ],
+ "description": [
+ "Type of connection (*torv2*/*torv3* only if **direction** is *out*)"
+ ]
+ }
+ },
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "local socket"
+ ]
+ }
+ }
+ },
+ "then": {
+ "additionalProperties": false,
+ "required": [
+ "socket"
+ ],
+ "properties": {
+ "type": {},
+ "socket": {
+ "type": "string",
+ "added": "pre-v0.10.1",
+ "description": [
+ "Socket filename"
+ ]
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "ipv4",
+ "ipv6",
+ "torv2",
+ "torv3"
+ ]
+ }
+ }
+ },
+ "then": {
+ "additionalProperties": false,
+ "required": [
+ "address",
+ "port"
+ ],
+ "properties": {
+ "type": {},
+ "address": {
+ "type": "string",
+ "added": "pre-v0.10.1",
+ "description": [
+ "Address in expected format for **type**"
+ ]
+ },
+ "port": {
+ "type": "u16",
+ "added": "pre-v0.10.1",
+ "description": [
+ "Port number"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "custommsg.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "custommsg",
+ "title": "Notification for custom messages",
+ "description": [
+ "The **custommsg** notifies whenever the node receives a custom message from a peer."
+ ],
+ "added": "v24.02",
+ "request": {},
+ "response": {
+ "required": [
+ "peer_id",
+ "payload"
+ ],
+ "properties": {
+ "peer_id": {
+ "type": "pubkey",
+ "description": [
+ "The id of the peer which sent the custom message"
+ ],
+ "added": "v24.02"
+ },
+ "payload": {
+ "type": "hex",
+ "description": [
+ "The hex-encoded payload. The first 2 bytes represent the BOLT-8 message type followed by the message content"
+ ],
+ "added": "v24.02"
+ }
+ }
+ }
+ },
+ "deprecated_oneshot.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "deprecated_oneshot",
+ "title": "Notification for per-command deprecation settings",
+ "description": [
+ "The **deprecated_oneshot** notification informs a plugin that the immediately following command uses different deprecation handling than the global setting."
+ ],
+ "added": "v24.02",
+ "request": {
+ "added": "v24.02"
+ },
+ "response": {
+ "added": "v24.02",
+ "required": [
+ "deprecated_ok"
+ ],
+ "properties": {
+ "deprecated_ok": {
+ "type": "boolean",
+ "description": [
+ "Whether deprecated APIs are allowed for the immediately following command."
+ ],
+ "added": "v24.02"
+ }
+ }
+ }
+ },
+ "disconnect.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "disconnect",
+ "title": "Notification for peer disconnection",
+ "description": [
+ "The **disconnect** notification informs whenever the node disconnects from a peer."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "id"
+ ],
+ "properties": {
+ "id": {
+ "type": "pubkey",
+ "description": [
+ "The id of the peer that disconnected."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "forward_event.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "forward_event",
+ "title": "Notification for forwarding events",
+ "description": [
+ "The **forward_event** notification informs whenever the status of a forwarded HTLC changes."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "payment_hash",
+ "in_channel",
+ "in_msat",
+ "status",
+ "received_time"
+ ],
+ "properties": {
+ "payment_hash": {
+ "type": "hash",
+ "description": [
+ "The payment hash for the forwarded HTLC."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "in_channel": {
+ "type": "short_channel_id",
+ "description": [
+ "The inbound channel that received the HTLC."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "out_channel": {
+ "type": "short_channel_id",
+ "description": [
+ "The outbound channel used for the forward, if one was selected."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "in_msat": {
+ "type": "msat",
+ "description": [
+ "The amount of the incoming HTLC."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "out_msat": {
+ "type": "msat",
+ "description": [
+ "The amount forwarded to the outbound channel, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "fee_msat": {
+ "type": "msat",
+ "description": [
+ "The fee earned on the forward, if an outbound amount is known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "offered",
+ "settled",
+ "local_failed",
+ "failed"
+ ],
+ "description": [
+ "The current forwarding status."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "failcode": {
+ "type": "u32",
+ "description": [
+ "The BOLT 4 failcode when the forward failed locally."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "failreason": {
+ "type": "string",
+ "description": [
+ "The symbolic failcode name when the forward failed locally."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "style": {
+ "type": "string",
+ "enum": [
+ "legacy",
+ "tlv"
+ ],
+ "description": [
+ "The onion format used for the forward, if known."
+ ],
+ "added": "v23.11"
+ },
+ "received_time": {
+ "type": "number",
+ "description": [
+ "The UNIX timestamp when the HTLC was received."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "resolved_time": {
+ "type": "number",
+ "description": [
+ "The UNIX timestamp when the HTLC was resolved, if it has been resolved."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "invoice_creation.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "invoice_creation",
+ "title": "Notification for invoice creation",
+ "description": [
+ "The **invoice_creation** notification informs whenever a new invoice is created."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "preimage",
+ "label"
+ ],
+ "properties": {
+ "msat": {
+ "type": "msat",
+ "description": [
+ "The invoice amount, if the invoice amount was specified at creation time."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "preimage": {
+ "type": "secret",
+ "description": [
+ "The payment preimage for the created invoice."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "label": {
+ "type": "string",
+ "description": [
+ "The label of the created invoice."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "invoice_payment.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "invoice_payment",
+ "title": "Notification for invoice payment",
+ "description": [
+ "The **invoice_payment** notification informs whenever an invoice is paid."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "msat",
+ "preimage",
+ "label"
+ ],
+ "properties": {
+ "msat": {
+ "type": "msat",
+ "description": [
+ "The amount paid for the invoice."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "preimage": {
+ "type": "secret",
+ "description": [
+ "The payment preimage for the invoice."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "outpoint": {
+ "type": "outpoint",
+ "description": [
+ "The onchain outpoint for a dual-funded or onchain invoice payment, if present."
+ ],
+ "added": "v23.11"
+ },
+ "label": {
+ "type": "string",
+ "description": [
+ "The label of the paid invoice."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "log.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "log",
+ "title": "Notification for log events",
+ "description": [
+ "The **log** notification informs whenever lightningd emits a log message and exposes the same payload shape as **warning**."
+ ],
+ "added": "v24.02",
+ "request": {
+ "added": "v24.02"
+ },
+ "response": {
+ "added": "v24.02",
+ "required": [
+ "level",
+ "time",
+ "timestamp",
+ "source",
+ "log"
+ ],
+ "properties": {
+ "level": {
+ "type": "string",
+ "enum": [
+ "io",
+ "trace",
+ "debug",
+ "info",
+ "unusual",
+ "broken"
+ ],
+ "description": [
+ "The log level of the emitted message."
+ ],
+ "added": "v24.02"
+ },
+ "time": {
+ "type": "string",
+ "description": [
+ "The event time as seconds since epoch with subsecond precision."
+ ],
+ "added": "v24.02"
+ },
+ "timestamp": {
+ "type": "string",
+ "description": [
+ "The event time in ISO 8601 format."
+ ],
+ "added": "v24.02"
+ },
+ "source": {
+ "type": "string",
+ "description": [
+ "The source component that emitted the log entry."
+ ],
+ "added": "v24.02"
+ },
+ "log": {
+ "type": "string",
+ "description": [
+ "The original log message."
+ ],
+ "added": "v24.02"
+ }
+ }
+ }
+ },
+ "onionmessage_forward_fail.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "onionmessage_forward_fail",
+ "title": "Notification for onion message forwarding failures",
+ "description": [
+ "The **onionmessage_forward_fail** notification informs whenever lightningd cannot forward an onion message."
+ ],
+ "added": "v24.11",
+ "request": {
+ "added": "v24.11"
+ },
+ "response": {
+ "added": "v24.11",
+ "required": [
+ "source",
+ "incoming",
+ "path_key"
+ ],
+ "properties": {
+ "source": {
+ "type": "pubkey",
+ "description": [
+ "The node that sent the incoming onion message."
+ ],
+ "added": "v24.11"
+ },
+ "incoming": {
+ "type": "hex",
+ "description": [
+ "The incoming onion message payload."
+ ],
+ "added": "v24.11"
+ },
+ "path_key": {
+ "type": "pubkey",
+ "description": [
+ "The path key used for the attempted forward."
+ ],
+ "added": "v24.11"
+ },
+ "outgoing": {
+ "type": "hex",
+ "description": [
+ "The outgoing onion message payload if a next hop had already been selected."
+ ],
+ "added": "v24.11"
+ },
+ "next_node_id": {
+ "type": "pubkey",
+ "description": [
+ "The next node id for the attempted forward when the next hop is a node."
+ ],
+ "added": "v24.11"
+ },
+ "next_short_channel_id_dir": {
+ "type": "short_channel_id_dir",
+ "description": [
+ "The next short_channel_id_dir for the attempted forward when the next hop is a channel."
+ ],
+ "added": "v24.11"
+ }
+ }
+ }
+ },
+ "openchannel_peer_sigs.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "openchannel_peer_sigs",
+ "title": "Notification for peer channel signatures",
+ "description": [
+ "The **openchannel_peer_sigs** notification informs whenever a peer provides signatures for an in-progress channel open."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "channel_id",
+ "signed_psbt"
+ ],
+ "properties": {
+ "channel_id": {
+ "type": "hash",
+ "description": [
+ "The channel id for the channel open attempt."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "signed_psbt": {
+ "type": "string",
+ "description": [
+ "The signed PSBT from the peer."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "plugin_started.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "plugin_started",
+ "title": "Notification for plugin start",
+ "description": [
+ "The **plugin_started** notification informs whenever a plugin has started and registered its methods."
+ ],
+ "added": "v25.02",
+ "request": {
+ "added": "v25.02"
+ },
+ "response": {
+ "added": "v25.02",
+ "required": [
+ "plugin_name",
+ "plugin_path",
+ "methods"
+ ],
+ "properties": {
+ "plugin_name": {
+ "type": "string",
+ "description": [
+ "The short name of the plugin."
+ ],
+ "added": "v25.02"
+ },
+ "plugin_path": {
+ "type": "string",
+ "description": [
+ "The executable path of the plugin."
+ ],
+ "added": "v25.02"
+ },
+ "methods": {
+ "type": "array",
+ "description": [
+ "The RPC methods registered by the plugin."
+ ],
+ "added": "v25.02",
+ "items": {
+ "type": "string",
+ "description": [
+ "A method registered by the plugin."
+ ],
+ "added": "v25.02"
+ }
+ }
+ }
+ }
+ },
+ "plugin_stopped.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "plugin_stopped",
+ "title": "Notification for plugin stop",
+ "description": [
+ "The **plugin_stopped** notification informs whenever a plugin stops and exposes the same payload shape as **plugin_started**."
+ ],
+ "added": "v25.02",
+ "request": {
+ "added": "v25.02"
+ },
+ "response": {
+ "added": "v25.02",
+ "required": [
+ "plugin_name",
+ "plugin_path",
+ "methods"
+ ],
+ "properties": {
+ "plugin_name": {
+ "type": "string",
+ "description": [
+ "The short name of the plugin."
+ ],
+ "added": "v25.02"
+ },
+ "plugin_path": {
+ "type": "string",
+ "description": [
+ "The executable path of the plugin."
+ ],
+ "added": "v25.02"
+ },
+ "methods": {
+ "type": "array",
+ "description": [
+ "The RPC methods registered by the plugin."
+ ],
+ "added": "v25.02",
+ "items": {
+ "type": "string",
+ "description": [
+ "A method registered by the plugin."
+ ],
+ "added": "v25.02"
+ }
+ }
+ }
+ }
+ },
+ "sendpay_failure.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "sendpay_failure",
+ "title": "Notification for failed sendpay completion",
+ "description": [
+ "The **sendpay_failure** notification informs whenever a payment attempt completes with failed status."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "code",
+ "message",
+ "data"
+ ],
+ "properties": {
+ "code": {
+ "type": "integer",
+ "description": [
+ "The JSON-RPC error code for the payment failure."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "message": {
+ "type": "string",
+ "description": [
+ "The human-readable payment failure message."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "data": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": [
+ "The structured payment failure details."
+ ],
+ "added": "pre-v0.10.1",
+ "properties": {
+ "created_index": {
+ "type": "u64",
+ "description": [
+ "1-based index indicating order this payment was created in."
+ ],
+ "added": "v23.11"
+ },
+ "id": {
+ "type": "u64",
+ "description": [
+ "Old synonym for created_index."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "payment_hash": {
+ "type": "hash",
+ "description": [
+ "The hash of the payment preimage."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "groupid": {
+ "type": "u64",
+ "description": [
+ "Grouping key for multiple attempts on the same payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "updated_index": {
+ "type": "u64",
+ "description": [
+ "1-based index indicating order this payment was updated in."
+ ],
+ "added": "v23.11"
+ },
+ "partid": {
+ "type": "u64",
+ "description": [
+ "Part number for a multi-part payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "destination": {
+ "type": "pubkey",
+ "description": [
+ "The final destination of the payment, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "amount_msat": {
+ "type": "msat",
+ "description": [
+ "The amount intended for the destination, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "amount_sent_msat": {
+ "type": "msat",
+ "description": [
+ "The total amount sent including fees."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "created_at": {
+ "type": "u64",
+ "description": [
+ "The UNIX timestamp when this payment was initiated."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "completed_at": {
+ "type": "u64",
+ "description": [
+ "The UNIX timestamp when this payment completed."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "failed",
+ "pending",
+ "complete"
+ ],
+ "description": [
+ "The terminal status for a failed sendpay notification."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "payment_preimage": {
+ "type": "secret",
+ "description": [
+ "The payment preimage, if the payment later completed through another path."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "label": {
+ "type": "string",
+ "description": [
+ "The optional label associated with the payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "bolt11": {
+ "type": "string",
+ "description": [
+ "The bolt11 invoice string, if present."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "bolt12": {
+ "type": "string",
+ "description": [
+ "The bolt12 invoice or offer string, if present."
+ ],
+ "added": "v24.02"
+ },
+ "description": {
+ "type": "string",
+ "description": [
+ "The description associated with the payment, if present."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "erroronion": {
+ "type": "hex",
+ "description": [
+ "The raw error onion if one was retained for the payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "onionreply": {
+ "type": "hex",
+ "description": [
+ "The onion reply for an unparseable onion failure."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "erring_index": {
+ "type": "u32",
+ "description": [
+ "The position in the route where the failure occurred."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "failcode": {
+ "type": "u32",
+ "description": [
+ "The BOLT 4 failcode."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "failcodename": {
+ "type": "string",
+ "description": [
+ "The symbolic name for the failcode, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "erring_node": {
+ "type": "pubkey",
+ "description": [
+ "The node that produced the failure, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "erring_channel": {
+ "type": "short_channel_id",
+ "description": [
+ "The channel that produced the failure, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "erring_direction": {
+ "type": "u32",
+ "description": [
+ "The direction within the erring channel."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "raw_message": {
+ "type": "hex",
+ "description": [
+ "The raw failure message payload, if present."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "sendpay_success.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "sendpay_success",
+ "title": "Notification for successful sendpay completion",
+ "description": [
+ "The **sendpay_success** notification informs whenever a payment attempt completes successfully."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "created_index",
+ "id",
+ "payment_hash",
+ "groupid",
+ "created_at",
+ "amount_sent_msat",
+ "status"
+ ],
+ "properties": {
+ "created_index": {
+ "type": "u64",
+ "description": [
+ "1-based index indicating order this payment was created in."
+ ],
+ "added": "v23.11"
+ },
+ "id": {
+ "type": "u64",
+ "description": [
+ "Old synonym for created_index."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "payment_hash": {
+ "type": "hash",
+ "description": [
+ "The hash of the payment preimage."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "groupid": {
+ "type": "u64",
+ "description": [
+ "Grouping key for multiple attempts on the same payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "updated_index": {
+ "type": "u64",
+ "description": [
+ "1-based index indicating order this payment was updated in."
+ ],
+ "added": "v23.11"
+ },
+ "partid": {
+ "type": "u64",
+ "description": [
+ "Part number for a multi-part payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "destination": {
+ "type": "pubkey",
+ "description": [
+ "The final destination of the payment, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "amount_msat": {
+ "type": "msat",
+ "description": [
+ "The amount delivered to the destination, if known."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "amount_sent_msat": {
+ "type": "msat",
+ "description": [
+ "The total amount sent including fees."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "created_at": {
+ "type": "u64",
+ "description": [
+ "The UNIX timestamp when this payment was initiated."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "completed_at": {
+ "type": "u64",
+ "description": [
+ "The UNIX timestamp when this payment completed."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "complete"
+ ],
+ "description": [
+ "The terminal status for a successful sendpay notification."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "payment_preimage": {
+ "type": "secret",
+ "description": [
+ "The payment preimage proving success."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "label": {
+ "type": "string",
+ "description": [
+ "The optional label associated with the payment."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "bolt11": {
+ "type": "string",
+ "description": [
+ "The bolt11 invoice string, if present."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "bolt12": {
+ "type": "string",
+ "description": [
+ "The bolt12 invoice or offer string, if present."
+ ],
+ "added": "v24.02"
+ },
+ "description": {
+ "type": "string",
+ "description": [
+ "The description associated with the payment, if present."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "erroronion": {
+ "type": "hex",
+ "description": [
+ "The raw error onion if one was retained for the payment."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "shutdown.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "shutdown",
+ "title": "Notification for plugin shutdown",
+ "description": [
+ "The **shutdown** notification informs a plugin that lightningd is shutting down."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "properties": {}
+ }
+ },
+ "warning.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "warning",
+ "title": "Notification for warning-level log events",
+ "description": [
+ "The **warning** notification informs whenever lightningd emits a warning or error level event that should be surfaced to plugins."
+ ],
+ "added": "pre-v0.10.1",
+ "request": {
+ "added": "pre-v0.10.1"
+ },
+ "response": {
+ "added": "pre-v0.10.1",
+ "required": [
+ "level",
+ "time",
+ "timestamp",
+ "source",
+ "log"
+ ],
+ "properties": {
+ "level": {
+ "type": "string",
+ "enum": [
+ "warn",
+ "error"
+ ],
+ "description": [
+ "The log level of the warning notification."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "time": {
+ "type": "string",
+ "description": [
+ "The event time as seconds since epoch with subsecond precision."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "timestamp": {
+ "type": "string",
+ "description": [
+ "The event time in ISO 8601 format."
+ ],
+ "added": "v24.02"
+ },
+ "source": {
+ "type": "string",
+ "description": [
+ "The source component that emitted the log entry."
+ ],
+ "added": "pre-v0.10.1"
+ },
+ "log": {
+ "type": "string",
+ "description": [
+ "The original log message."
+ ],
+ "added": "pre-v0.10.1"
+ }
+ }
+ }
+ },
+ "xpay_pay_part_end.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "pay_part_end",
+ "title": "Notification for xpay part end",
+ "description": [
+ "The **pay_part_end** notification is emitted by the xpay plugin when a payment part completes."
+ ],
+ "added": "v25.09",
+ "request": {
+ "added": "v25.09"
+ },
+ "response": {
+ "added": "v25.09",
+ "required": [
+ "status",
+ "duration",
+ "payment_hash",
+ "groupid",
+ "partid"
+ ],
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": [
+ "success",
+ "failure"
+ ],
+ "description": [
+ "Whether the payment part succeeded or failed."
+ ],
+ "added": "v25.09"
+ },
+ "duration": {
+ "type": "number",
+ "description": [
+ "The time in seconds from send to result."
+ ],
+ "added": "v25.09"
+ },
+ "payment_hash": {
+ "type": "hash",
+ "description": [
+ "The payment hash for the xpay invocation."
+ ],
+ "added": "v25.09"
+ },
+ "groupid": {
+ "type": "u64",
+ "description": [
+ "The xpay group identifier for the payment attempt."
+ ],
+ "added": "v25.09"
+ },
+ "partid": {
+ "type": "u64",
+ "description": [
+ "The identifier for this payment part."
+ ],
+ "added": "v25.09"
+ },
+ "failed_msg": {
+ "type": "hex",
+ "description": [
+ "The decrypted onion error message, if available."
+ ],
+ "added": "v25.09"
+ },
+ "failed_node_id": {
+ "type": "pubkey",
+ "description": [
+ "The node that generated the failure, if known."
+ ],
+ "added": "v25.09"
+ },
+ "failed_short_channel_id": {
+ "type": "short_channel_id",
+ "description": [
+ "The short channel id complained about, if known."
+ ],
+ "added": "v25.09"
+ },
+ "failed_direction": {
+ "type": "u32",
+ "description": [
+ "The direction within the failed short channel id, if known."
+ ],
+ "added": "v25.09"
+ },
+ "error_code": {
+ "type": "u32",
+ "description": [
+ "The xpay error code, if known."
+ ],
+ "added": "v25.09"
+ },
+ "error_message": {
+ "type": "string",
+ "description": [
+ "The human-readable xpay error message."
+ ],
+ "added": "v25.09"
+ }
+ }
+ }
+ },
+ "xpay_pay_part_start.json": {
+ "$schema": "../../rpc-schema-draft.json",
+ "type": "object",
+ "additionalProperties": false,
+ "notification": "pay_part_start",
+ "title": "Notification for xpay part start",
+ "description": [
+ "The **pay_part_start** notification is emitted by the xpay plugin when a payment part begins."
+ ],
+ "added": "v25.09",
+ "request": {
+ "added": "v25.09"
+ },
+ "response": {
+ "added": "v25.09",
+ "required": [
+ "payment_hash",
+ "groupid",
+ "partid",
+ "total_payment_msat",
+ "attempt_msat",
+ "hops"
+ ],
+ "properties": {
+ "payment_hash": {
+ "type": "hash",
+ "description": [
+ "The payment hash for the xpay invocation."
+ ],
+ "added": "v25.09"
+ },
+ "groupid": {
+ "type": "u64",
+ "description": [
+ "The xpay group identifier for the payment attempt."
+ ],
+ "added": "v25.09"
+ },
+ "partid": {
+ "type": "u64",
+ "description": [
+ "The identifier for this payment part."
+ ],
+ "added": "v25.09"
+ },
+ "total_payment_msat": {
+ "type": "msat",
+ "description": [
+ "The total payment amount for the xpay invocation."
+ ],
+ "added": "v25.09"
+ },
+ "attempt_msat": {
+ "type": "msat",
+ "description": [
+ "The amount this payment part attempts to deliver."
+ ],
+ "added": "v25.09"
+ },
+ "hops": {
+ "type": "array",
+ "description": [
+ "The route hops for this payment part."
+ ],
+ "added": "v25.09",
+ "items": {
+ "type": "object",
+ "added": "v25.09",
+ "additionalProperties": false,
+ "required": [
+ "next_node",
+ "short_channel_id",
+ "direction",
+ "channel_in_msat",
+ "channel_out_msat"
+ ],
+ "properties": {
+ "next_node": {
+ "type": "pubkey",
+ "description": [
+ "The next node for this hop."
+ ],
+ "added": "v25.09"
+ },
+ "short_channel_id": {
+ "type": "short_channel_id",
+ "description": [
+ "The short channel id used for this hop."
+ ],
+ "added": "v25.09"
+ },
+ "direction": {
+ "type": "u32",
+ "description": [
+ "The direction within the short channel id."
+ ],
+ "added": "v25.09"
+ },
+ "channel_in_msat": {
+ "type": "msat",
+ "description": [
+ "The amount entering the hop."
+ ],
+ "added": "v25.09"
+ },
+ "channel_out_msat": {
+ "type": "msat",
+ "description": [
+ "The amount leaving the hop."
+ ],
+ "added": "v25.09"
+ }
+ }
+ }
}
}
}
diff --git a/contrib/msggen/msggen/utils/utils.py b/contrib/msggen/msggen/utils/utils.py
index 1b51913b..56c993a2 100644
--- a/contrib/msggen/msggen/utils/utils.py
+++ b/contrib/msggen/msggen/utils/utils.py
@@ -1,9 +1,10 @@
-import json
-from pathlib import Path
-from importlib import resources
-from msggen.model import Method, CompositeField, Service, Notification, TypeName
import functools
+import json
from collections import OrderedDict
+from importlib import resources
+from pathlib import Path
+
+from msggen.model import CompositeField, Method, Notification, Service, TypeName
grpc_method_names = [
"Getinfo",
@@ -157,30 +158,38 @@ grpc_method_names = [
]
grpc_notification_names = [
+ {"name": "balance_snapshot", "typename": "BalanceSnapshot"},
+ {"name": "block_added", "typename": "BlockAdded"},
+ {"name": "channel_open_failed", "typename": "ChannelOpenFailed"},
+ {"name": "channel_opened", "typename": "ChannelOpened"},
+ {"name": "channel_state_changed", "typename": "ChannelStateChanged"},
+ {"name": "connect", "typename": "Connect"},
+ {"name": "coin_movement", "typename": "CoinMovement"},
+ {"name": "custommsg", "typename": "CustomMsg"},
+ {"name": "deprecated_oneshot", "typename": "DeprecatedOneshot"},
+ {"name": "disconnect", "typename": "Disconnect"},
+ {"name": "forward_event", "typename": "ForwardEvent"},
+ {"name": "invoice_creation", "typename": "InvoiceCreation"},
+ {"name": "invoice_payment", "typename": "InvoicePayment"},
+ {"name": "log", "typename": "Log"},
+ {"name": "onionmessage_forward_fail", "typename": "OnionMessageForwardFail"},
+ {"name": "openchannel_peer_sigs", "typename": "OpenChannelPeerSigs"},
+ {"name": "plugin_started", "typename": "PluginStarted"},
+ {"name": "plugin_stopped", "typename": "PluginStopped"},
+ {"name": "sendpay_failure", "typename": "SendPayFailure"},
+ {"name": "sendpay_success", "typename": "SendPaySuccess"},
+ {"name": "shutdown", "typename": "Shutdown"},
+ {"name": "warning", "typename": "Warning"},
{
- "name": "block_added",
- "typename": "BlockAdded"
+ "name": "pay_part_end",
+ "schema_name": "xpay_pay_part_end",
+ "typename": "PayPartEnd",
},
{
- "name": "channel_open_failed",
- "typename": "ChannelOpenFailed"
+ "name": "pay_part_start",
+ "schema_name": "xpay_pay_part_start",
+ "typename": "PayPartStart",
},
- {
- "name": "channel_opened",
- "typename": "ChannelOpened"
- },
- {
- "name": "connect",
- "typename": "Connect"
- },
- {
- "name": "custommsg",
- "typename": "CustomMsg"
- },
- {
- "name": "channel_state_changed",
- "typename": "ChannelStateChanged"
- }
]
@@ -209,7 +218,7 @@ def combine_schemas(schema_dir: Path, dest: Path):
bundle["methods"] = methods
bundle["notifications"] = notifications
- with dest.open(mode='w') as f:
+ with dest.open(mode="w") as f:
json.dump(
bundle,
f,
@@ -229,8 +238,7 @@ def get_schema_bundle():
def check_missing():
- """Check for missing gRPC commands in the schema.
- """
+ """Check for missing gRPC commands in the schema."""
schema = get_schema_bundle()
command_names = set(
full_name.replace(".json", "") for full_name in schema["methods"].keys()
@@ -240,16 +248,17 @@ def check_missing():
def load_jsonrpc_method(name):
- """Load a method based on the file naming conventions for the JSON-RPC.
- """
+ """Load a method based on the file naming conventions for the JSON-RPC."""
schema = get_schema_bundle()
rpc_name = f"{name.lower()}.json"
- root_added = schema["methods"][rpc_name].get('added', None)
- root_deprecated = schema["methods"][rpc_name].get('deprecated', None)
+ root_added = schema["methods"][rpc_name].get("added", None)
+ root_deprecated = schema["methods"][rpc_name].get("deprecated", None)
- request = CompositeField.from_js(schema["methods"][rpc_name]['request'], path=name)
- response = CompositeField.from_js(schema["methods"][rpc_name]['response'], path=name)
+ request = CompositeField.from_js(schema["methods"][rpc_name]["request"], path=name)
+ response = CompositeField.from_js(
+ schema["methods"][rpc_name]["response"], path=name
+ )
if request.added is None:
request.added = root_added
@@ -272,19 +281,20 @@ def load_jsonrpc_method(name):
)
-def load_notification(name, typename: TypeName):
- """Load a notification that can be received by a plug-in
- """
+def load_notification(name, typename: TypeName, schema_name=None):
+ """Load a notification that can be received by a plug-in"""
typename = str(typename)
notifications = get_schema_bundle()["notifications"]
- notif_name = f"{name.lower()}.json"
+ if schema_name is None:
+ schema_name = name
+ notif_name = f"{schema_name.lower()}.json"
- root_added = notifications[notif_name].get('added', None)
- root_deprecated = notifications[notif_name].get('deprecated', None)
+ root_added = notifications[notif_name].get("added", None)
+ root_deprecated = notifications[notif_name].get("deprecated", None)
- request = CompositeField.from_js(notifications[notif_name]['request'], path=name)
- response = CompositeField.from_js(notifications[notif_name]['response'], path=name)
+ request = CompositeField.from_js(notifications[notif_name]["request"], path=name)
+ response = CompositeField.from_js(notifications[notif_name]["response"], path=name)
if request.added is None:
request.added = root_added
@@ -303,7 +313,16 @@ def load_notification(name, typename: TypeName):
def load_jsonrpc_service():
methods = [load_jsonrpc_method(name) for name in grpc_method_names]
- notifications = [load_notification(name=names["name"], typename=names["typename"]) for names in grpc_notification_names]
+ notifications = [
+ load_notification(
+ name=names["name"],
+ typename=names["typename"],
+ schema_name=names.get("schema_name"),
+ )
+ for names in grpc_notification_names
+ ]
service = Service(name="Node", methods=methods, notifications=notifications)
- service.includes = ['primitives.proto'] # Make sure we have the primitives included.
+ service.includes = [
+ "primitives.proto"
+ ] # Make sure we have the primitives included.
return service
diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py
index 9d172d1f..214b697c 100644
--- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py
+++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
from pyln.grpc import primitives_pb2 as primitives__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\\\n\x0cSendpayRoute\x12\n\n\x02id\x18\x02 \x01(\x0c\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\x12\x0f\n\x07\x63hannel\x18\x04 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xac\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1c\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"3\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\x93\x04\n\nPayRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rmaxfeepercent\x18\x04 \x01(\x01H\x01\x88\x01\x01\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x03\x88\x01\x01\x12#\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nriskfactor\x18\x08 \x01(\x01H\x05\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\n \x03(\t\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0c \x01(\tH\x07\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0e \x01(\x0cH\t\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xfb\x02\n\x0bPayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x18\n\x0b\x64\x65stination\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\ncreated_at\x18\x04 \x01(\x01\x12\r\n\x05parts\x18\x05 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\x1awarning_partial_completion\x18\x08 \x01(\tH\x01\x88\x01\x01\x12*\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatus\"2\n\tPayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb9\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12!\n\x07satoshi\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xaf\x03\n\x0eKeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rmaxfeepercent\x18\x04 \x01(\x01H\x01\x88\x01\x01\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x03\x88\x01\x01\x12#\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12+\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListH\x05\x88\x01\x01\x12&\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamH\x06\x88\x01\x01\x12 \n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\xf2\x02\n\x0fKeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x18\n\x0b\x64\x65stination\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\ncreated_at\x18\x04 \x01(\x01\x12\r\n\x05parts\x18\x05 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\x1awarning_partial_completion\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x32\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatus\"\x1d\n\rKeysendStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa4\x03\n\x0f\x46undpsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa0\x03\n\x0fUtxopsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xf4\x19\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x01\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\t\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\n\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\x0c\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\r\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0e\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x0f\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x14\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x15\x88\x01\x01\x12\x30\n\x16max_total_htlc_in_msat\x18\x1e \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x42\x0f\n\r_scratch_txidB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x19\n\x17_max_total_htlc_in_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\xWhy this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.