syntax = "proto3";
package cln;

// This file was automatically derived from the JSON-RPC schemas in
// `doc/schemas`. Do not edit this file manually as it would get
// overwritten.

import "primitives.proto";

service Node {
	rpc Getinfo(GetinfoRequest) returns (GetinfoResponse) {}
	rpc ListPeers(ListpeersRequest) returns (ListpeersResponse) {}
	rpc ListFunds(ListfundsRequest) returns (ListfundsResponse) {}
	rpc SendPay(SendpayRequest) returns (SendpayResponse) {}
	rpc ListChannels(ListchannelsRequest) returns (ListchannelsResponse) {}
	rpc AddGossip(AddgossipRequest) returns (AddgossipResponse) {}
	rpc AddPsbtOutput(AddpsbtoutputRequest) returns (AddpsbtoutputResponse) {}
	rpc AutoCleanOnce(AutocleanonceRequest) returns (AutocleanonceResponse) {}
	rpc AutoCleanStatus(AutocleanstatusRequest) returns (AutocleanstatusResponse) {}
	rpc CheckMessage(CheckmessageRequest) returns (CheckmessageResponse) {}
	rpc Close(CloseRequest) returns (CloseResponse) {}
	rpc ConnectPeer(ConnectRequest) returns (ConnectResponse) {}
	rpc CreateInvoice(CreateinvoiceRequest) returns (CreateinvoiceResponse) {}
	rpc Datastore(DatastoreRequest) returns (DatastoreResponse) {}
	rpc DatastoreUsage(DatastoreusageRequest) returns (DatastoreusageResponse) {}
	rpc CreateOnion(CreateonionRequest) returns (CreateonionResponse) {}
	rpc DelDatastore(DeldatastoreRequest) returns (DeldatastoreResponse) {}
	rpc DelInvoice(DelinvoiceRequest) returns (DelinvoiceResponse) {}
	rpc DevForgetChannel(DevforgetchannelRequest) returns (DevforgetchannelResponse) {}
	rpc EmergencyRecover(EmergencyrecoverRequest) returns (EmergencyrecoverResponse) {}
	rpc GetEmergencyRecoverData(GetemergencyrecoverdataRequest) returns (GetemergencyrecoverdataResponse) {}
	rpc ExposeSecret(ExposesecretRequest) returns (ExposesecretResponse) {}
	rpc Recover(RecoverRequest) returns (RecoverResponse) {}
	rpc RecoverChannel(RecoverchannelRequest) returns (RecoverchannelResponse) {}
	rpc Invoice(InvoiceRequest) returns (InvoiceResponse) {}
	rpc CreateInvoiceRequest(InvoicerequestRequest) returns (InvoicerequestResponse) {}
	rpc DisableInvoiceRequest(DisableinvoicerequestRequest) returns (DisableinvoicerequestResponse) {}
	rpc ListInvoiceRequests(ListinvoicerequestsRequest) returns (ListinvoicerequestsResponse) {}
	rpc ListDatastore(ListdatastoreRequest) returns (ListdatastoreResponse) {}
	rpc ListInvoices(ListinvoicesRequest) returns (ListinvoicesResponse) {}
	rpc SendOnion(SendonionRequest) returns (SendonionResponse) {}
	rpc ListSendPays(ListsendpaysRequest) returns (ListsendpaysResponse) {}
	rpc ListTransactions(ListtransactionsRequest) returns (ListtransactionsResponse) {}
	rpc MakeSecret(MakesecretRequest) returns (MakesecretResponse) {}
	rpc Pay(PayRequest) returns (PayResponse) {}
	rpc ListNodes(ListnodesRequest) returns (ListnodesResponse) {}
	rpc WaitAnyInvoice(WaitanyinvoiceRequest) returns (WaitanyinvoiceResponse) {}
	rpc WaitInvoice(WaitinvoiceRequest) returns (WaitinvoiceResponse) {}
	rpc WaitSendPay(WaitsendpayRequest) returns (WaitsendpayResponse) {}
	rpc NewAddr(NewaddrRequest) returns (NewaddrResponse) {}
	rpc Withdraw(WithdrawRequest) returns (WithdrawResponse) {}
	rpc KeySend(KeysendRequest) returns (KeysendResponse) {}
	rpc FundPsbt(FundpsbtRequest) returns (FundpsbtResponse) {}
	rpc SendPsbt(SendpsbtRequest) returns (SendpsbtResponse) {}
	rpc SignPsbt(SignpsbtRequest) returns (SignpsbtResponse) {}
	rpc UtxoPsbt(UtxopsbtRequest) returns (UtxopsbtResponse) {}
	rpc TxDiscard(TxdiscardRequest) returns (TxdiscardResponse) {}
	rpc TxPrepare(TxprepareRequest) returns (TxprepareResponse) {}
	rpc TxSend(TxsendRequest) returns (TxsendResponse) {}
	rpc ListPeerChannels(ListpeerchannelsRequest) returns (ListpeerchannelsResponse) {}
	rpc ListClosedChannels(ListclosedchannelsRequest) returns (ListclosedchannelsResponse) {}
	rpc Decode(DecodeRequest) returns (DecodeResponse) {}
	rpc DelPay(DelpayRequest) returns (DelpayResponse) {}
	rpc DelForward(DelforwardRequest) returns (DelforwardResponse) {}
	rpc DisableOffer(DisableofferRequest) returns (DisableofferResponse) {}
	rpc EnableOffer(EnableofferRequest) returns (EnableofferResponse) {}
	rpc Disconnect(DisconnectRequest) returns (DisconnectResponse) {}
	rpc Feerates(FeeratesRequest) returns (FeeratesResponse) {}
	rpc FetchBip353(Fetchbip353Request) returns (Fetchbip353Response) {}
	rpc FetchInvoice(FetchinvoiceRequest) returns (FetchinvoiceResponse) {}
	rpc CancelRecurringInvoice(CancelrecurringinvoiceRequest) returns (CancelrecurringinvoiceResponse) {}
	rpc FundChannelCancel(FundchannelCancelRequest) returns (FundchannelCancelResponse) {}
	rpc FundChannelComplete(FundchannelCompleteRequest) returns (FundchannelCompleteResponse) {}
	rpc FundChannel(FundchannelRequest) returns (FundchannelResponse) {}
	rpc FundChannelStart(FundchannelStartRequest) returns (FundchannelStartResponse) {}
	rpc GetLog(GetlogRequest) returns (GetlogResponse) {}
	rpc FunderUpdate(FunderupdateRequest) returns (FunderupdateResponse) {}
	rpc GetRoute(GetrouteRequest) returns (GetrouteResponse) {}
	rpc ListAddresses(ListaddressesRequest) returns (ListaddressesResponse) {}
	rpc ListForwards(ListforwardsRequest) returns (ListforwardsResponse) {}
	rpc ListOffers(ListoffersRequest) returns (ListoffersResponse) {}
	rpc ListPays(ListpaysRequest) returns (ListpaysResponse) {}
	rpc ListHtlcs(ListhtlcsRequest) returns (ListhtlcsResponse) {}
	rpc MultiFundChannel(MultifundchannelRequest) returns (MultifundchannelResponse) {}
	rpc MultiWithdraw(MultiwithdrawRequest) returns (MultiwithdrawResponse) {}
	rpc Offer(OfferRequest) returns (OfferResponse) {}
	rpc OpenChannelAbort(OpenchannelAbortRequest) returns (OpenchannelAbortResponse) {}
	rpc OpenChannelBump(OpenchannelBumpRequest) returns (OpenchannelBumpResponse) {}
	rpc OpenChannelInit(OpenchannelInitRequest) returns (OpenchannelInitResponse) {}
	rpc OpenChannelSigned(OpenchannelSignedRequest) returns (OpenchannelSignedResponse) {}
	rpc OpenChannelUpdate(OpenchannelUpdateRequest) returns (OpenchannelUpdateResponse) {}
	rpc Ping(PingRequest) returns (PingResponse) {}
	rpc Plugin(PluginRequest) returns (PluginResponse) {}
	rpc RenePayStatus(RenepaystatusRequest) returns (RenepaystatusResponse) {}
	rpc RenePay(RenepayRequest) returns (RenepayResponse) {}
	rpc ReserveInputs(ReserveinputsRequest) returns (ReserveinputsResponse) {}
	rpc SendCustomMsg(SendcustommsgRequest) returns (SendcustommsgResponse) {}
	rpc SendInvoice(SendinvoiceRequest) returns (SendinvoiceResponse) {}
	rpc SetChannel(SetchannelRequest) returns (SetchannelResponse) {}
	rpc SetConfig(SetconfigRequest) returns (SetconfigResponse) {}
	rpc SetPsbtVersion(SetpsbtversionRequest) returns (SetpsbtversionResponse) {}
	rpc SignInvoice(SigninvoiceRequest) returns (SigninvoiceResponse) {}
	rpc SignMessage(SignmessageRequest) returns (SignmessageResponse) {}
	rpc SpliceInit(SpliceInitRequest) returns (SpliceInitResponse) {}
	rpc SpliceSigned(SpliceSignedRequest) returns (SpliceSignedResponse) {}
	rpc SpliceUpdate(SpliceUpdateRequest) returns (SpliceUpdateResponse) {}
	rpc SpliceIn(SpliceinRequest) returns (SpliceinResponse) {}
	rpc SpliceOut(SpliceoutRequest) returns (SpliceoutResponse) {}
	rpc DevSplice(DevspliceRequest) returns (DevspliceResponse) {}
	rpc UnreserveInputs(UnreserveinputsRequest) returns (UnreserveinputsResponse) {}
	rpc UpgradeWallet(UpgradewalletRequest) returns (UpgradewalletResponse) {}
	rpc WaitBlockHeight(WaitblockheightRequest) returns (WaitblockheightResponse) {}
	rpc Wait(WaitRequest) returns (WaitResponse) {}
	rpc ListConfigs(ListconfigsRequest) returns (ListconfigsResponse) {}
	rpc Stop(StopRequest) returns (StopResponse) {}
	rpc Help(HelpRequest) returns (HelpResponse) {}
	rpc PreApproveKeysend(PreapprovekeysendRequest) returns (PreapprovekeysendResponse) {}
	rpc PreApproveInvoice(PreapproveinvoiceRequest) returns (PreapproveinvoiceResponse) {}
	rpc StaticBackup(StaticbackupRequest) returns (StaticbackupResponse) {}
	rpc BkprChannelsApy(BkprchannelsapyRequest) returns (BkprchannelsapyResponse) {}
	rpc BkprDumpIncomeCsv(BkprdumpincomecsvRequest) returns (BkprdumpincomecsvResponse) {}
	rpc BkprInspect(BkprinspectRequest) returns (BkprinspectResponse) {}
	rpc BkprListAccountEvents(BkprlistaccounteventsRequest) returns (BkprlistaccounteventsResponse) {}
	rpc BkprListBalances(BkprlistbalancesRequest) returns (BkprlistbalancesResponse) {}
	rpc BkprListIncome(BkprlistincomeRequest) returns (BkprlistincomeResponse) {}
	rpc BkprEditDescriptionByPaymentId(BkpreditdescriptionbypaymentidRequest) returns (BkpreditdescriptionbypaymentidResponse) {}
	rpc BkprEditDescriptionByOutpoint(BkpreditdescriptionbyoutpointRequest) returns (BkpreditdescriptionbyoutpointResponse) {}
	rpc BkprReport(BkprreportRequest) returns (BkprreportResponse) {}
	rpc BlacklistRune(BlacklistruneRequest) returns (BlacklistruneResponse) {}
	rpc CheckRune(CheckruneRequest) returns (CheckruneResponse) {}
	rpc CreateRune(CreateruneRequest) returns (CreateruneResponse) {}
	rpc ShowRunes(ShowrunesRequest) returns (ShowrunesResponse) {}
	rpc AskReneUnreserve(AskreneunreserveRequest) returns (AskreneunreserveResponse) {}
	rpc AskReneListLayers(AskrenelistlayersRequest) returns (AskrenelistlayersResponse) {}
	rpc AskReneCreateLayer(AskrenecreatelayerRequest) returns (AskrenecreatelayerResponse) {}
	rpc AskReneRemoveLayer(AskreneremovelayerRequest) returns (AskreneremovelayerResponse) {}
	rpc AskReneRemoveChannelUpdate(AskreneremovechannelupdateRequest) returns (AskreneremovechannelupdateResponse) {}
	rpc AskReneReserve(AskrenereserveRequest) returns (AskrenereserveResponse) {}
	rpc AskReneAge(AskreneageRequest) returns (AskreneageResponse) {}
	rpc GetRoutes(GetroutesRequest) returns (GetroutesResponse) {}
	rpc AskReneDisableNode(AskrenedisablenodeRequest) returns (AskrenedisablenodeResponse) {}
	rpc AskReneInformChannel(AskreneinformchannelRequest) returns (AskreneinformchannelResponse) {}
	rpc AskReneCreateChannel(AskrenecreatechannelRequest) returns (AskrenecreatechannelResponse) {}
	rpc AskReneUpdateChannel(AskreneupdatechannelRequest) returns (AskreneupdatechannelResponse) {}
	rpc AskReneBiasChannel(AskrenebiaschannelRequest) returns (AskrenebiaschannelResponse) {}
	rpc AskreneBiasNode(AskrenebiasnodeRequest) returns (AskrenebiasnodeResponse) {}
	rpc AskReneListReservations(AskrenelistreservationsRequest) returns (AskrenelistreservationsResponse) {}
	rpc InjectPaymentOnion(InjectpaymentonionRequest) returns (InjectpaymentonionResponse) {}
	rpc InjectOnionMessage(InjectonionmessageRequest) returns (InjectonionmessageResponse) {}
	rpc Xpay(XpayRequest) returns (XpayResponse) {}
	rpc SignMessageWithKey(SignmessagewithkeyRequest) returns (SignmessagewithkeyResponse) {}
	rpc ListChannelMoves(ListchannelmovesRequest) returns (ListchannelmovesResponse) {}
	rpc ListChainMoves(ListchainmovesRequest) returns (ListchainmovesResponse) {}
	rpc ListNetworkEvents(ListnetworkeventsRequest) returns (ListnetworkeventsResponse) {}
	rpc DelNetworkEvent(DelnetworkeventRequest) returns (DelnetworkeventResponse) {}
	rpc ClnrestRegisterPath(ClnrestregisterpathRequest) returns (ClnrestregisterpathResponse) {}
	rpc ListCurrencyRates(ListcurrencyratesRequest) returns (ListcurrencyratesResponse) {}
	rpc CurrencyConvert(CurrencyconvertRequest) returns (CurrencyconvertResponse) {}
	rpc CurrencyRate(CurrencyrateRequest) returns (CurrencyrateResponse) {}
	rpc SendAmount(SendamountRequest) returns (SendamountResponse) {}
	rpc CreateProof(CreateproofRequest) returns (CreateproofResponse) {}
	rpc Xkeysend(XkeysendRequest) returns (XkeysendResponse) {}
	rpc Graceful(GracefulRequest) returns (GracefulResponse) {}

	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 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 {
}

message GetinfoResponse {
	bytes id = 1;
	string alias = 2;
	bytes color = 3;
	uint32 num_peers = 4;
	uint32 num_pending_channels = 5;
	uint32 num_active_channels = 6;
	uint32 num_inactive_channels = 7;
	string version = 8;
	string lightning_dir = 9;
	optional GetinfoOurFeatures our_features = 10;
	uint32 blockheight = 11;
	string network = 12;
	Amount fees_collected_msat = 13;
	repeated GetinfoAddress address = 14;
	repeated GetinfoBinding binding = 15;
	optional string warning_bitcoind_sync = 16;
	optional string warning_lightningd_sync = 17;
}

message GetinfoAddress {
	// Getinfo.address[].type
	enum GetinfoAddressType {
		DNS = 0;
		IPV4 = 1;
		IPV6 = 2;
		TORV2 = 3;
		TORV3 = 4;
	}
	GetinfoAddressType item_type = 1;
	uint32 port = 2;
	optional string address = 3;
}

message GetinfoBinding {
	// Getinfo.binding[].type
	enum GetinfoBindingType {
		LOCAL_SOCKET = 0;
		IPV4 = 1;
		IPV6 = 2;
		TORV2 = 3;
		TORV3 = 4;
		WEBSOCKET = 5;
	}
	GetinfoBindingType item_type = 1;
	optional string address = 2;
	optional uint32 port = 3;
	optional string socket = 4;
	optional string subtype = 5;
}

message GetinfoOurFeatures {
	bytes init = 1;
	bytes node = 2;
	bytes channel = 3;
	bytes invoice = 4;
}

message ListpeersRequest {
	// ListPeers.level
	enum ListpeersLevel {
		IO = 0;
		DEBUG = 1;
		INFO = 2;
		UNUSUAL = 3;
		TRACE = 4;
	}
	optional bytes id = 1;
	optional ListpeersLevel level = 2;
}

message ListpeersResponse {
	repeated ListpeersPeers peers = 1;
}

message ListpeersPeers {
	bytes id = 1;
	bool connected = 2;
	repeated ListpeersPeersLog log = 3;
	repeated string netaddr = 5;
	optional bytes features = 6;
	optional string remote_addr = 7;
	uint32 num_channels = 8;
}

message ListpeersPeersLog {
	// ListPeers.peers[].log[].type
	enum ListpeersPeersLogType {
		SKIPPED = 0;
		BROKEN = 1;
		UNUSUAL = 2;
		INFO = 3;
		DEBUG = 4;
		IO_IN = 5;
		IO_OUT = 6;
		TRACE = 7;
	}
	ListpeersPeersLogType item_type = 1;
	optional uint32 num_skipped = 2;
	optional string time = 3;
	optional string source = 4;
	optional string log = 5;
	optional bytes node_id = 6;
	optional bytes data = 7;
}

message ListfundsRequest {
	optional bool spent = 1;
}

message ListfundsResponse {
	repeated ListfundsOutputs outputs = 1;
	repeated ListfundsChannels channels = 2;
}

message ListfundsChannels {
	bytes peer_id = 1;
	Amount our_amount_msat = 2;
	Amount amount_msat = 3;
	bytes funding_txid = 4;
	uint32 funding_output = 5;
	bool connected = 6;
	ChannelState state = 7;
	optional string short_channel_id = 8;
	bytes channel_id = 9;
}

message ListfundsOutputs {
	// ListFunds.outputs[].status
	enum ListfundsOutputsStatus {
		UNCONFIRMED = 0;
		CONFIRMED = 1;
		SPENT = 2;
		IMMATURE = 3;
	}
	bytes txid = 1;
	uint32 output = 2;
	Amount amount_msat = 3;
	bytes scriptpubkey = 4;
	optional string address = 5;
	optional bytes redeemscript = 6;
	ListfundsOutputsStatus status = 7;
	optional uint32 blockheight = 8;
	bool reserved = 9;
	optional uint32 reserved_to_block = 10;
}

message SendpayRequest {
	repeated SendpayRoute route = 1;
	bytes payment_hash = 2;
	optional string label = 3;
	optional string bolt11 = 5;
	optional bytes payment_secret = 6;
	optional uint64 partid = 7;
	optional uint64 groupid = 9;
	optional Amount amount_msat = 10;
	optional bytes localinvreqid = 11;
	optional bytes payment_metadata = 12;
	optional string description = 13;
}

message SendpayResponse {
	// SendPay.status
	enum SendpayStatus {
		PENDING = 0;
		COMPLETE = 1;
	}
	uint64 id = 1;
	optional uint64 groupid = 2;
	bytes payment_hash = 3;
	SendpayStatus status = 4;
	optional Amount amount_msat = 5;
	optional bytes destination = 6;
	uint64 created_at = 7;
	Amount amount_sent_msat = 8;
	optional string label = 9;
	optional uint64 partid = 10;
	optional string bolt11 = 11;
	optional string bolt12 = 12;
	optional bytes payment_preimage = 13;
	optional string message = 14;
	optional uint64 completed_at = 15;
	uint64 created_index = 16;
	optional uint64 updated_index = 17;
}

message SendpayRoute {
	optional bytes id = 2;
	optional uint32 delay = 3;
	optional string channel = 4;
	optional Amount amount_msat = 5;
	optional string short_channel_id_dir = 6;
	optional bytes node_id_out = 7;
	optional Amount amount_out_msat = 8;
	optional uint32 cltv_out = 9;
}

message ListchannelsRequest {
	optional string short_channel_id = 1;
	optional bytes source = 2;
	optional bytes destination = 3;
}

message ListchannelsResponse {
	repeated ListchannelsChannels channels = 1;
}

message ListchannelsChannels {
	bytes source = 1;
	bytes destination = 2;
	string short_channel_id = 3;
	bool public = 4;
	Amount amount_msat = 5;
	uint32 message_flags = 6;
	uint32 channel_flags = 7;
	bool active = 8;
	uint32 last_update = 9;
	uint32 base_fee_millisatoshi = 10;
	uint32 fee_per_millionth = 11;
	uint32 delay = 12;
	Amount htlc_minimum_msat = 13;
	optional Amount htlc_maximum_msat = 14;
	bytes features = 15;
	uint32 direction = 16;
}

message AddgossipRequest {
	bytes message = 1;
}

message AddgossipResponse {
}

message AddpsbtoutputRequest {
	Amount satoshi = 1;
	optional uint32 locktime = 2;
	optional string initialpsbt = 3;
	optional string destination = 4;
}

message AddpsbtoutputResponse {
	string psbt = 1;
	uint32 estimated_added_weight = 2;
	uint32 outnum = 3;
}

message AutocleanonceRequest {
	AutocleanSubsystem subsystem = 1;
	uint64 age = 2;
}

message AutocleanonceResponse {
	AutocleanonceAutoclean autoclean = 1;
}

message AutocleanonceAutoclean {
	optional AutocleanonceAutocleanSucceededforwards succeededforwards = 1;
	optional AutocleanonceAutocleanFailedforwards failedforwards = 2;
	optional AutocleanonceAutocleanSucceededpays succeededpays = 3;
	optional AutocleanonceAutocleanFailedpays failedpays = 4;
	optional AutocleanonceAutocleanPaidinvoices paidinvoices = 5;
	optional AutocleanonceAutocleanExpiredinvoices expiredinvoices = 6;
	optional AutocleanonceAutocleanNetworkevents networkevents = 7;
}

message AutocleanonceAutocleanExpiredinvoices {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanonceAutocleanFailedforwards {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanonceAutocleanFailedpays {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanonceAutocleanNetworkevents {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanonceAutocleanPaidinvoices {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanonceAutocleanSucceededforwards {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanonceAutocleanSucceededpays {
	uint64 cleaned = 1;
	uint64 uncleaned = 2;
}

message AutocleanstatusRequest {
	optional AutocleanSubsystem subsystem = 1;
}

message AutocleanstatusResponse {
	AutocleanstatusAutoclean autoclean = 1;
}

message AutocleanstatusAutoclean {
	optional AutocleanstatusAutocleanSucceededforwards succeededforwards = 1;
	optional AutocleanstatusAutocleanFailedforwards failedforwards = 2;
	optional AutocleanstatusAutocleanSucceededpays succeededpays = 3;
	optional AutocleanstatusAutocleanFailedpays failedpays = 4;
	optional AutocleanstatusAutocleanPaidinvoices paidinvoices = 5;
	optional AutocleanstatusAutocleanExpiredinvoices expiredinvoices = 6;
	optional AutocleanstatusAutocleanNetworkevents networkevents = 7;
}

message AutocleanstatusAutocleanExpiredinvoices {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message AutocleanstatusAutocleanFailedforwards {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message AutocleanstatusAutocleanFailedpays {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message AutocleanstatusAutocleanNetworkevents {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message AutocleanstatusAutocleanPaidinvoices {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message AutocleanstatusAutocleanSucceededforwards {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message AutocleanstatusAutocleanSucceededpays {
	bool enabled = 1;
	uint64 cleaned = 2;
	optional uint64 age = 3;
}

message CheckmessageRequest {
	string message = 1;
	string zbase = 2;
	optional bytes pubkey = 3;
}

message CheckmessageResponse {
	bool verified = 1;
	bytes pubkey = 2;
}

message CloseRequest {
	string id = 1;
	optional uint32 unilateraltimeout = 2;
	optional string destination = 3;
	optional string fee_negotiation_step = 4;
	optional Outpoint wrong_funding = 5;
	optional bool force_lease_closed = 6;
	repeated Feerate feerange = 7;
}

message CloseResponse {
	// Close.type
	enum CloseType {
		MUTUAL = 0;
		UNILATERAL = 1;
		UNOPENED = 2;
	}
	CloseType item_type = 1;
	repeated bytes txs = 4;
	repeated bytes txids = 5;
}

message ConnectRequest {
	string id = 1;
	optional string host = 2;
	optional uint32 port = 3;
}

message ConnectResponse {
	// Connect.direction
	enum ConnectDirection {
		IN = 0;
		OUT = 1;
	}
	bytes id = 1;
	bytes features = 2;
	ConnectDirection direction = 3;
	ConnectAddress address = 4;
}

message ConnectAddress {
	// Connect.address.type
	enum ConnectAddressType {
		LOCAL_SOCKET = 0;
		IPV4 = 1;
		IPV6 = 2;
		TORV2 = 3;
		TORV3 = 4;
	}
	ConnectAddressType item_type = 1;
	optional string socket = 2;
	optional string address = 3;
	optional uint32 port = 4;
}

message CreateinvoiceRequest {
	string invstring = 1;
	string label = 2;
	bytes preimage = 3;
}

message CreateinvoiceResponse {
	// CreateInvoice.status
	enum CreateinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
		UNPAID = 2;
	}
	string label = 1;
	optional string bolt11 = 2;
	optional string bolt12 = 3;
	bytes payment_hash = 4;
	optional Amount amount_msat = 5;
	CreateinvoiceStatus status = 6;
	string description = 7;
	uint64 expires_at = 8;
	optional uint64 pay_index = 9;
	optional Amount amount_received_msat = 10;
	optional uint64 paid_at = 11;
	optional bytes payment_preimage = 12;
	optional bytes local_offer_id = 13;
	optional string invreq_payer_note = 15;
	uint64 created_index = 16;
	optional CreateinvoicePaidOutpoint paid_outpoint = 17;
}

message CreateinvoicePaidOutpoint {
	bytes txid = 1;
	uint32 outnum = 2;
}

message DatastoreRequest {
	// Datastore.mode
	enum DatastoreMode {
		MUST_CREATE = 0;
		MUST_REPLACE = 1;
		CREATE_OR_REPLACE = 2;
		MUST_APPEND = 3;
		CREATE_OR_APPEND = 4;
	}
	optional bytes hex = 2;
	optional DatastoreMode mode = 3;
	optional uint64 generation = 4;
	repeated string key = 5;
	optional string string = 6;
}

message DatastoreResponse {
	optional uint64 generation = 2;
	optional bytes hex = 3;
	optional string string = 4;
	repeated string key = 5;
}

message DatastoreusageRequest {
	repeated string key = 1;
}

message DatastoreusageResponse {
	DatastoreusageDatastoreusage datastoreusage = 1;
}

message DatastoreusageDatastoreusage {
	string key = 1;
	uint64 total_bytes = 2;
}

message CreateonionRequest {
	repeated CreateonionHops hops = 1;
	bytes assocdata = 2;
	optional bytes session_key = 3;
	optional uint32 onion_size = 4;
}

message CreateonionResponse {
	bytes onion = 1;
	repeated bytes shared_secrets = 2;
}

message CreateonionHops {
	bytes pubkey = 1;
	bytes payload = 2;
}

message DeldatastoreRequest {
	optional uint64 generation = 2;
	repeated string key = 3;
}

message DeldatastoreResponse {
	optional uint64 generation = 2;
	optional bytes hex = 3;
	optional string string = 4;
	repeated string key = 5;
}

message DelinvoiceRequest {
	// DelInvoice.status
	enum DelinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
		UNPAID = 2;
	}
	string label = 1;
	DelinvoiceStatus status = 2;
	optional bool desconly = 3;
}

message DelinvoiceResponse {
	// DelInvoice.status
	enum DelinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
		UNPAID = 2;
	}
	string label = 1;
	optional string bolt11 = 2;
	optional string bolt12 = 3;
	optional Amount amount_msat = 4;
	optional string description = 5;
	bytes payment_hash = 6;
	DelinvoiceStatus status = 7;
	uint64 expires_at = 8;
	optional bytes local_offer_id = 9;
	optional string invreq_payer_note = 11;
	uint64 created_index = 12;
	optional uint64 updated_index = 13;
	optional uint64 pay_index = 14;
	optional Amount amount_received_msat = 15;
	optional uint64 paid_at = 16;
	optional bytes payment_preimage = 17;
}

message DevforgetchannelRequest {
	bytes id = 1;
	optional string short_channel_id = 2;
	optional bytes channel_id = 3;
	optional bool force = 4;
}

message DevforgetchannelResponse {
	bool forced = 1;
	bool funding_unspent = 2;
	bytes funding_txid = 3;
}

message EmergencyrecoverRequest {
}

message EmergencyrecoverResponse {
	repeated bytes stubs = 1;
}

message GetemergencyrecoverdataRequest {
}

message GetemergencyrecoverdataResponse {
	bytes filedata = 1;
	optional bool can_create_penalty = 2;
	repeated bytes backed_up_channel_ids = 3;
}

message ExposesecretRequest {
	string passphrase = 1;
	optional string identifier = 2;
}

message ExposesecretResponse {
	string identifier = 1;
	string codex32 = 2;
	optional string mnemonic = 3;
}

message RecoverRequest {
	string hsmsecret = 1;
}

message RecoverResponse {
	// Recover.result
	enum RecoverResult {
		RECOVERY_RESTART_IN_PROGRESS = 0;
	}
	RecoverResult result = 1;
}

message RecoverchannelRequest {
	repeated bytes scb = 1;
}

message RecoverchannelResponse {
	repeated string stubs = 1;
}

message InvoiceRequest {
	string description = 2;
	string label = 3;
	repeated string fallbacks = 4;
	optional bytes preimage = 5;
	optional uint32 cltv = 6;
	optional uint64 expiry = 7;
	repeated string exposeprivatechannels = 8;
	optional bool deschashonly = 9;
	AmountOrAny amount_msat = 10;
}

message InvoiceResponse {
	string bolt11 = 1;
	bytes payment_hash = 2;
	bytes payment_secret = 3;
	uint64 expires_at = 4;
	optional string warning_capacity = 5;
	optional string warning_offline = 6;
	optional string warning_deadends = 7;
	optional string warning_private_unused = 8;
	optional string warning_mpp = 9;
	uint64 created_index = 10;
}

message InvoicerequestRequest {
	Amount amount = 1;
	string description = 2;
	optional string issuer = 3;
	optional string label = 4;
	optional uint64 absolute_expiry = 5;
	optional bool single_use = 6;
}

message InvoicerequestResponse {
	bytes invreq_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	optional string label = 6;
}

message DisableinvoicerequestRequest {
	string invreq_id = 1;
}

message DisableinvoicerequestResponse {
	bytes invreq_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	optional string label = 6;
}

message ListinvoicerequestsRequest {
	optional string invreq_id = 1;
	optional bool active_only = 2;
}

message ListinvoicerequestsResponse {
	repeated ListinvoicerequestsInvoicerequests invoicerequests = 1;
}

message ListinvoicerequestsInvoicerequests {
	bytes invreq_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	optional string label = 6;
}

message ListdatastoreRequest {
	repeated string key = 2;
}

message ListdatastoreResponse {
	repeated ListdatastoreDatastore datastore = 1;
}

message ListdatastoreDatastore {
	repeated string key = 1;
	optional uint64 generation = 2;
	optional bytes hex = 3;
	optional string string = 4;
}

message ListinvoicesRequest {
	// ListInvoices.index
	enum ListinvoicesIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	optional string label = 1;
	optional string invstring = 2;
	optional bytes payment_hash = 3;
	optional string offer_id = 4;
	optional ListinvoicesIndex index = 5;
	optional uint64 start = 6;
	optional uint32 limit = 7;
}

message ListinvoicesResponse {
	repeated ListinvoicesInvoices invoices = 1;
}

message ListinvoicesInvoices {
	// ListInvoices.invoices[].status
	enum ListinvoicesInvoicesStatus {
		UNPAID = 0;
		PAID = 1;
		EXPIRED = 2;
	}
	string label = 1;
	optional string description = 2;
	bytes payment_hash = 3;
	ListinvoicesInvoicesStatus status = 4;
	uint64 expires_at = 5;
	optional Amount amount_msat = 6;
	optional string bolt11 = 7;
	optional string bolt12 = 8;
	optional bytes local_offer_id = 9;
	optional uint64 pay_index = 11;
	optional Amount amount_received_msat = 12;
	optional uint64 paid_at = 13;
	optional bytes payment_preimage = 14;
	optional string invreq_payer_note = 15;
	uint64 created_index = 16;
	optional uint64 updated_index = 17;
	optional ListinvoicesInvoicesPaidOutpoint paid_outpoint = 18;
}

message ListinvoicesInvoicesPaidOutpoint {
	bytes txid = 1;
	uint32 outnum = 2;
}

message SendonionRequest {
	bytes onion = 1;
	SendonionFirstHop first_hop = 2;
	bytes payment_hash = 3;
	optional string label = 4;
	repeated bytes shared_secrets = 5;
	optional uint32 partid = 6;
	optional string bolt11 = 7;
	optional bytes destination = 9;
	optional uint64 groupid = 11;
	optional Amount amount_msat = 12;
	optional bytes localinvreqid = 13;
	optional string description = 14;
	optional Amount total_amount_msat = 15;
}

message SendonionResponse {
	// SendOnion.status
	enum SendonionStatus {
		PENDING = 0;
		COMPLETE = 1;
	}
	uint64 id = 1;
	bytes payment_hash = 2;
	SendonionStatus status = 3;
	optional Amount amount_msat = 4;
	optional bytes destination = 5;
	uint64 created_at = 6;
	Amount amount_sent_msat = 7;
	optional string label = 8;
	optional string bolt11 = 9;
	optional string bolt12 = 10;
	optional bytes payment_preimage = 11;
	optional string message = 12;
	optional uint64 partid = 13;
	uint64 created_index = 14;
	optional uint64 updated_index = 15;
}

message SendonionFirstHop {
	bytes id = 1;
	Amount amount_msat = 2;
	uint32 delay = 3;
}

message ListsendpaysRequest {
	// ListSendPays.index
	enum ListsendpaysIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	// ListSendPays.status
	enum ListsendpaysStatus {
		PENDING = 0;
		COMPLETE = 1;
		FAILED = 2;
	}
	optional string bolt11 = 1;
	optional bytes payment_hash = 2;
	optional ListsendpaysStatus status = 3;
	optional ListsendpaysIndex index = 4;
	optional uint64 start = 5;
	optional uint32 limit = 6;
}

message ListsendpaysResponse {
	repeated ListsendpaysPayments payments = 1;
}

message ListsendpaysPayments {
	// ListSendPays.payments[].status
	enum ListsendpaysPaymentsStatus {
		PENDING = 0;
		FAILED = 1;
		COMPLETE = 2;
	}
	uint64 id = 1;
	uint64 groupid = 2;
	bytes payment_hash = 3;
	ListsendpaysPaymentsStatus status = 4;
	optional Amount amount_msat = 5;
	optional bytes destination = 6;
	uint64 created_at = 7;
	Amount amount_sent_msat = 8;
	optional string label = 9;
	optional string bolt11 = 10;
	optional string bolt12 = 11;
	optional bytes payment_preimage = 12;
	optional bytes erroronion = 13;
	optional string description = 14;
	optional uint64 partid = 15;
	uint64 created_index = 16;
	optional uint64 updated_index = 17;
	optional uint64 completed_at = 18;
}

message ListtransactionsRequest {
}

message ListtransactionsResponse {
	repeated ListtransactionsTransactions transactions = 1;
}

message ListtransactionsTransactions {
	bytes hash = 1;
	bytes rawtx = 2;
	uint32 blockheight = 3;
	uint32 txindex = 4;
	uint32 locktime = 7;
	uint32 version = 8;
	repeated ListtransactionsTransactionsInputs inputs = 9;
	repeated ListtransactionsTransactionsOutputs outputs = 10;
}

message ListtransactionsTransactionsInputs {
	bytes txid = 1;
	uint32 index = 2;
	uint32 sequence = 3;
}

message ListtransactionsTransactionsOutputs {
	uint32 index = 1;
	bytes scriptPubKey = 3;
	Amount amount_msat = 6;
}

message MakesecretRequest {
	optional bytes hex = 1;
	optional string string = 2;
}

message MakesecretResponse {
	bytes secret = 1;
}

message PayRequest {
	string bolt11 = 1 [deprecated = true];
	optional string label = 3 [deprecated = true];
	optional double maxfeepercent = 4 [deprecated = true];
	optional uint32 retry_for = 5 [deprecated = true];
	optional uint32 maxdelay = 6 [deprecated = true];
	optional Amount exemptfee = 7 [deprecated = true];
	optional double riskfactor = 8 [deprecated = true];
	repeated string exclude = 10 [deprecated = true];
	optional Amount maxfee = 11 [deprecated = true];
	optional string description = 12 [deprecated = true];
	optional Amount amount_msat = 13 [deprecated = true];
	optional bytes localinvreqid = 14 [deprecated = true];
	optional Amount partial_msat = 15 [deprecated = true];
}

message PayResponse {
	// Pay.status
	enum PayStatus {
		COMPLETE = 0 [deprecated = true];
		PENDING = 1 [deprecated = true];
		FAILED = 2 [deprecated = true];
	}
	bytes payment_preimage = 1 [deprecated = true];
	optional bytes destination = 2 [deprecated = true];
	bytes payment_hash = 3 [deprecated = true];
	double created_at = 4 [deprecated = true];
	uint32 parts = 5 [deprecated = true];
	Amount amount_msat = 6 [deprecated = true];
	Amount amount_sent_msat = 7 [deprecated = true];
	optional string warning_partial_completion = 8 [deprecated = true];
	PayStatus status = 9 [deprecated = true];
}

message ListnodesRequest {
	optional bytes id = 1;
}

message ListnodesResponse {
	repeated ListnodesNodes nodes = 1;
}

message ListnodesNodes {
	bytes nodeid = 1;
	optional uint32 last_timestamp = 2;
	optional string alias = 3;
	optional bytes color = 4;
	optional bytes features = 5;
	repeated ListnodesNodesAddresses addresses = 6;
	optional ListnodesNodesOptionWillFund option_will_fund = 7;
}

message ListnodesNodesAddresses {
	// ListNodes.nodes[].addresses[].type
	enum ListnodesNodesAddressesType {
		DNS = 0;
		IPV4 = 1;
		IPV6 = 2;
		TORV2 = 3;
		TORV3 = 4;
	}
	ListnodesNodesAddressesType item_type = 1;
	uint32 port = 2;
	optional string address = 3;
}

message ListnodesNodesOptionWillFund {
	Amount lease_fee_base_msat = 1;
	uint32 lease_fee_basis = 2;
	uint32 funding_weight = 3;
	Amount channel_fee_max_base_msat = 4;
	uint32 channel_fee_max_proportional_thousandths = 5;
	bytes compact_lease = 6;
}

message WaitanyinvoiceRequest {
	optional uint64 lastpay_index = 1;
	optional uint64 timeout = 2;
}

message WaitanyinvoiceResponse {
	// WaitAnyInvoice.status
	enum WaitanyinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
	}
	string label = 1;
	optional string description = 2;
	bytes payment_hash = 3;
	WaitanyinvoiceStatus status = 4;
	uint64 expires_at = 5;
	optional Amount amount_msat = 6;
	optional string bolt11 = 7;
	optional string bolt12 = 8;
	optional uint64 pay_index = 9;
	optional Amount amount_received_msat = 10;
	optional uint64 paid_at = 11;
	optional bytes payment_preimage = 12;
	uint64 created_index = 13;
	optional uint64 updated_index = 14;
	optional WaitanyinvoicePaidOutpoint paid_outpoint = 15;
}

message WaitanyinvoicePaidOutpoint {
	bytes txid = 1;
	uint32 outnum = 2;
}

message WaitinvoiceRequest {
	string label = 1;
}

message WaitinvoiceResponse {
	// WaitInvoice.status
	enum WaitinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
	}
	string label = 1;
	optional string description = 2;
	bytes payment_hash = 3;
	WaitinvoiceStatus status = 4;
	uint64 expires_at = 5;
	optional Amount amount_msat = 6;
	optional string bolt11 = 7;
	optional string bolt12 = 8;
	optional uint64 pay_index = 9;
	optional Amount amount_received_msat = 10;
	optional uint64 paid_at = 11;
	optional bytes payment_preimage = 12;
	uint64 created_index = 13;
	optional uint64 updated_index = 14;
	optional WaitinvoicePaidOutpoint paid_outpoint = 15;
}

message WaitinvoicePaidOutpoint {
	bytes txid = 1;
	uint32 outnum = 2;
}

message WaitsendpayRequest {
	bytes payment_hash = 1;
	optional uint64 partid = 2;
	optional uint32 timeout = 3;
	optional uint64 groupid = 4;
}

message WaitsendpayResponse {
	// WaitSendPay.status
	enum WaitsendpayStatus {
		COMPLETE = 0;
	}
	uint64 id = 1;
	optional uint64 groupid = 2;
	bytes payment_hash = 3;
	WaitsendpayStatus status = 4;
	optional Amount amount_msat = 5;
	optional bytes destination = 6;
	uint64 created_at = 7;
	Amount amount_sent_msat = 8;
	optional string label = 9;
	optional uint64 partid = 10;
	optional string bolt11 = 11;
	optional string bolt12 = 12;
	optional bytes payment_preimage = 13;
	optional double completed_at = 14;
	uint64 created_index = 15;
	optional uint64 updated_index = 16;
}

message NewaddrRequest {
	// NewAddr.addresstype
	enum NewaddrAddresstype {
		BECH32 = 0;
		ALL = 2;
		P2TR = 3;
	}
	optional NewaddrAddresstype addresstype = 1;
}

message NewaddrResponse {
	optional string bech32 = 1;
	optional string p2tr = 3;
}

message WithdrawRequest {
	string destination = 1;
	AmountOrAll satoshi = 2;
	optional uint32 minconf = 3;
	repeated Outpoint utxos = 4;
	optional Feerate feerate = 5;
}

message WithdrawResponse {
	bytes tx = 1;
	bytes txid = 2;
	string psbt = 3;
}

message KeysendRequest {
	bytes destination = 1 [deprecated = true];
	optional string label = 3 [deprecated = true];
	optional double maxfeepercent = 4 [deprecated = true];
	optional uint32 retry_for = 5 [deprecated = true];
	optional uint32 maxdelay = 6 [deprecated = true];
	optional Amount exemptfee = 7 [deprecated = true];
	optional RoutehintList routehints = 8 [deprecated = true];
	optional TlvStream extratlvs = 9 [deprecated = true];
	Amount amount_msat = 10 [deprecated = true];
	optional Amount maxfee = 11 [deprecated = true];
}

message KeysendResponse {
	// KeySend.status
	enum KeysendStatus {
		COMPLETE = 0 [deprecated = true];
	}
	bytes payment_preimage = 1 [deprecated = true];
	optional bytes destination = 2 [deprecated = true];
	bytes payment_hash = 3 [deprecated = true];
	double created_at = 4 [deprecated = true];
	uint32 parts = 5 [deprecated = true];
	Amount amount_msat = 6 [deprecated = true];
	Amount amount_sent_msat = 7 [deprecated = true];
	optional string warning_partial_completion = 8 [deprecated = true];
	KeysendStatus status = 9 [deprecated = true];
}

message FundpsbtRequest {
	AmountOrAll satoshi = 1;
	Feerate feerate = 2;
	uint32 startweight = 3;
	optional uint32 minconf = 4;
	optional uint32 reserve = 5;
	optional uint32 locktime = 6;
	optional uint32 min_witness_weight = 7;
	optional bool excess_as_change = 8;
	optional bool nonwrapped = 9;
	optional bool opening_anchor_channel = 10;
}

message FundpsbtResponse {
	string psbt = 1;
	uint32 feerate_per_kw = 2;
	uint32 estimated_final_weight = 3;
	Amount excess_msat = 4;
	optional uint32 change_outnum = 5;
	repeated FundpsbtReservations reservations = 6;
}

message FundpsbtReservations {
	bytes txid = 1;
	uint32 vout = 2;
	bool was_reserved = 3;
	bool reserved = 4;
	uint32 reserved_to_block = 5;
}

message SendpsbtRequest {
	string psbt = 1;
	optional uint32 reserve = 2;
}

message SendpsbtResponse {
	bytes tx = 1;
	bytes txid = 2;
}

message SignpsbtRequest {
	string psbt = 1;
	repeated uint32 signonly = 2;
}

message SignpsbtResponse {
	string signed_psbt = 1;
}

message UtxopsbtRequest {
	AmountOrAll satoshi = 1;
	Feerate feerate = 2;
	uint32 startweight = 3;
	repeated Outpoint utxos = 4;
	optional uint32 reserve = 5;
	optional uint32 locktime = 6;
	optional uint32 min_witness_weight = 7;
	optional bool reservedok = 8;
	optional bool excess_as_change = 9;
	optional bool opening_anchor_channel = 10;
}

message UtxopsbtResponse {
	string psbt = 1;
	uint32 feerate_per_kw = 2;
	uint32 estimated_final_weight = 3;
	Amount excess_msat = 4;
	optional uint32 change_outnum = 5;
	repeated UtxopsbtReservations reservations = 6;
}

message UtxopsbtReservations {
	bytes txid = 1;
	uint32 vout = 2;
	bool was_reserved = 3;
	bool reserved = 4;
	uint32 reserved_to_block = 5;
}

message TxdiscardRequest {
	bytes txid = 1;
}

message TxdiscardResponse {
	bytes unsigned_tx = 1;
	bytes txid = 2;
}

message TxprepareRequest {
	optional Feerate feerate = 2;
	optional uint32 minconf = 3;
	repeated Outpoint utxos = 4;
	repeated OutputDesc outputs = 5;
}

message TxprepareResponse {
	string psbt = 1;
	bytes unsigned_tx = 2;
	bytes txid = 3;
}

message TxsendRequest {
	bytes txid = 1;
}

message TxsendResponse {
	string psbt = 1;
	bytes tx = 2;
	bytes txid = 3;
}

message ListpeerchannelsRequest {
	optional bytes id = 1;
	optional string short_channel_id = 2;
	optional bytes channel_id = 3;
}

message ListpeerchannelsResponse {
	repeated ListpeerchannelsChannels channels = 1;
}

message ListpeerchannelsChannels {
	bytes peer_id = 1;
	bool peer_connected = 2;
	ChannelState state = 3;
	optional bytes scratch_txid = 4;
	optional ListpeerchannelsChannelsChannelType channel_type = 5;
	optional ListpeerchannelsChannelsFeerate feerate = 6;
	optional string owner = 7;
	optional string short_channel_id = 8;
	optional bytes channel_id = 9;
	optional bytes funding_txid = 10;
	optional uint32 funding_outnum = 11;
	optional string initial_feerate = 12;
	optional string last_feerate = 13;
	optional string next_feerate = 14;
	optional uint32 next_fee_step = 15;
	repeated ListpeerchannelsChannelsInflight inflight = 16;
	optional bytes close_to = 17;
	optional bool private = 18;
	ChannelSide opener = 19;
	optional ChannelSide closer = 20;
	optional ListpeerchannelsChannelsFunding funding = 22;
	optional Amount to_us_msat = 23;
	optional Amount min_to_us_msat = 24;
	optional Amount max_to_us_msat = 25;
	optional Amount total_msat = 26;
	optional Amount fee_base_msat = 27;
	optional uint32 fee_proportional_millionths = 28;
	optional Amount dust_limit_msat = 29;
	optional Amount their_reserve_msat = 31;
	optional Amount our_reserve_msat = 32;
	optional Amount spendable_msat = 33;
	optional Amount receivable_msat = 34;
	optional Amount minimum_htlc_in_msat = 35;
	optional Amount minimum_htlc_out_msat = 36;
	optional Amount maximum_htlc_out_msat = 37;
	optional uint32 their_to_self_delay = 38;
	optional uint32 our_to_self_delay = 39;
	optional uint32 max_accepted_htlcs = 40;
	optional ListpeerchannelsChannelsAlias alias = 41;
	repeated ListpeerchannelsChannelsStateChanges state_changes = 42;
	repeated string status = 43;
	optional uint64 in_payments_offered = 44;
	optional Amount in_offered_msat = 45;
	optional uint64 in_payments_fulfilled = 46;
	optional Amount in_fulfilled_msat = 47;
	optional uint64 out_payments_offered = 48;
	optional Amount out_offered_msat = 49;
	optional uint64 out_payments_fulfilled = 50;
	optional Amount out_fulfilled_msat = 51;
	repeated ListpeerchannelsChannelsHtlcs htlcs = 52;
	optional string close_to_addr = 53;
	optional bool ignore_fee_limits = 54;
	optional ListpeerchannelsChannelsUpdates updates = 55;
	optional uint64 last_stable_connection = 56;
	optional bool lost_state = 57;
	optional bool reestablished = 58;
	optional Amount last_tx_fee_msat = 59;
	optional uint32 direction = 60;
	optional Amount their_max_htlc_value_in_flight_msat = 61;
	optional Amount our_max_htlc_value_in_flight_msat = 62;
	repeated string features = 63;
}

message ListpeerchannelsChannelsAlias {
	optional string local = 1;
	optional string remote = 2;
}

message ListpeerchannelsChannelsChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message ListpeerchannelsChannelsFeerate {
	uint32 perkw = 1;
	uint32 perkb = 2;
}

message ListpeerchannelsChannelsFunding {
	optional Amount pushed_msat = 1;
	Amount local_funds_msat = 2;
	Amount remote_funds_msat = 3;
	optional Amount fee_paid_msat = 4;
	optional Amount fee_rcvd_msat = 5;
	optional string psbt = 6;
	optional bool withheld = 7;
}

message ListpeerchannelsChannelsHtlcs {
	// ListPeerChannels.channels[].htlcs[].direction
	enum ListpeerchannelsChannelsHtlcsDirection {
		IN = 0;
		OUT = 1;
	}
	ListpeerchannelsChannelsHtlcsDirection direction = 1;
	uint64 id = 2;
	Amount amount_msat = 3;
	uint32 expiry = 4;
	bytes payment_hash = 5;
	optional bool local_trimmed = 6;
	optional string status = 7;
	HtlcState state = 8;
}

message ListpeerchannelsChannelsInflight {
	bytes funding_txid = 1;
	uint32 funding_outnum = 2;
	string feerate = 3;
	Amount total_funding_msat = 4;
	Amount our_funding_msat = 5;
	optional bytes scratch_txid = 6;
	sint64 splice_amount = 7;
}

message ListpeerchannelsChannelsStateChanges {
	// ListPeerChannels.channels[].state_changes[].cause
	enum ListpeerchannelsChannelsStateChangesCause {
		UNKNOWN = 0;
		LOCAL = 1;
		USER = 2;
		REMOTE = 3;
		PROTOCOL = 4;
		ONCHAIN = 5;
	}
	string timestamp = 1;
	ChannelState old_state = 2;
	ChannelState new_state = 3;
	ListpeerchannelsChannelsStateChangesCause cause = 4;
	string message = 5;
}

message ListpeerchannelsChannelsUpdates {
	ListpeerchannelsChannelsUpdatesLocal local = 1;
	optional ListpeerchannelsChannelsUpdatesRemote remote = 2;
}

message ListpeerchannelsChannelsUpdatesLocal {
	Amount htlc_minimum_msat = 1;
	Amount htlc_maximum_msat = 2;
	uint32 cltv_expiry_delta = 3;
	Amount fee_base_msat = 4;
	uint32 fee_proportional_millionths = 5;
}

message ListpeerchannelsChannelsUpdatesRemote {
	Amount htlc_minimum_msat = 1;
	Amount htlc_maximum_msat = 2;
	uint32 cltv_expiry_delta = 3;
	Amount fee_base_msat = 4;
	uint32 fee_proportional_millionths = 5;
}

message ListclosedchannelsRequest {
	optional bytes id = 1;
}

message ListclosedchannelsResponse {
	repeated ListclosedchannelsClosedchannels closedchannels = 1;
}

message ListclosedchannelsClosedchannels {
	// ListClosedChannels.closedchannels[].close_cause
	enum ListclosedchannelsClosedchannelsCloseCause {
		UNKNOWN = 0;
		LOCAL = 1;
		USER = 2;
		REMOTE = 3;
		PROTOCOL = 4;
		ONCHAIN = 5;
	}
	optional bytes peer_id = 1;
	bytes channel_id = 2;
	optional string short_channel_id = 3;
	optional ListclosedchannelsClosedchannelsAlias alias = 4;
	ChannelSide opener = 5;
	optional ChannelSide closer = 6;
	bool private = 7;
	optional ListclosedchannelsClosedchannelsChannelType channel_type = 8;
	uint64 total_local_commitments = 9;
	uint64 total_remote_commitments = 10;
	uint64 total_htlcs_sent = 11;
	bytes funding_txid = 12;
	uint32 funding_outnum = 13;
	bool leased = 14;
	optional Amount funding_fee_paid_msat = 15;
	optional Amount funding_fee_rcvd_msat = 16;
	optional Amount funding_pushed_msat = 17;
	Amount total_msat = 18;
	Amount final_to_us_msat = 19;
	Amount min_to_us_msat = 20;
	Amount max_to_us_msat = 21;
	optional bytes last_commitment_txid = 22;
	optional Amount last_commitment_fee_msat = 23;
	ListclosedchannelsClosedchannelsCloseCause close_cause = 24;
	optional uint64 last_stable_connection = 25;
	optional string funding_psbt = 26;
	optional bool funding_withheld = 27;
}

message ListclosedchannelsClosedchannelsAlias {
	optional string local = 1;
	optional string remote = 2;
}

message ListclosedchannelsClosedchannelsChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message DecodeRequest {
	string string = 1;
}

message DecodeResponse {
	// Decode.type
	enum DecodeType {
		BOLT12_OFFER = 0;
		BOLT12_INVOICE = 1;
		BOLT12_INVOICE_REQUEST = 2;
		BOLT11_INVOICE = 3;
		RUNE = 4;
		EMERGENCY_RECOVER = 5;
		BOLT12_PAYER_PROOF = 6;
	}
	DecodeType item_type = 1;
	bool valid = 2;
	optional bytes offer_id = 3;
	repeated bytes offer_chains = 4;
	optional bytes offer_metadata = 5;
	optional string offer_currency = 6;
	optional string warning_unknown_offer_currency = 7;
	optional uint32 currency_minor_unit = 8;
	optional uint64 offer_amount = 9;
	optional Amount offer_amount_msat = 10;
	optional string offer_description = 11;
	optional string offer_issuer = 12;
	optional bytes offer_features = 13;
	optional uint64 offer_absolute_expiry = 14;
	optional uint64 offer_quantity_max = 15;
	repeated DecodeOfferPaths offer_paths = 16;
	optional DecodeOfferRecurrence offer_recurrence = 18;
	repeated DecodeUnknownOfferTlvs unknown_offer_tlvs = 19;
	optional string warning_invalid_offer_description = 21;
	optional string warning_missing_offer_description = 22;
	optional string warning_invalid_offer_currency = 23;
	optional string warning_invalid_offer_issuer = 24;
	optional bytes invreq_metadata = 25;
	optional bytes invreq_payer_id = 26;
	optional bytes invreq_chain = 27;
	optional Amount invreq_amount_msat = 28;
	optional bytes invreq_features = 29;
	optional uint64 invreq_quantity = 30;
	optional string invreq_payer_note = 31;
	optional uint32 invreq_recurrence_counter = 32;
	optional uint32 invreq_recurrence_start = 33;
	repeated DecodeUnknownInvoiceRequestTlvs unknown_invoice_request_tlvs = 34;
	optional string warning_missing_invreq_metadata = 35;
	optional string warning_missing_invreq_payer_id = 36;
	optional string warning_invalid_invreq_payer_note = 37;
	optional string warning_missing_invoice_request_signature = 38;
	optional string warning_invalid_invoice_request_signature = 39;
	repeated DecodeInvoicePaths invoice_paths = 40;
	optional uint64 invoice_created_at = 41;
	optional uint32 invoice_relative_expiry = 42;
	optional bytes invoice_payment_hash = 43;
	optional Amount invoice_amount_msat = 44;
	repeated DecodeInvoiceFallbacks invoice_fallbacks = 45;
	optional bytes invoice_features = 46;
	optional bytes invoice_node_id = 47;
	optional uint64 invoice_recurrence_basetime = 48;
	repeated DecodeUnknownInvoiceTlvs unknown_invoice_tlvs = 49;
	optional string warning_missing_invoice_paths = 50;
	optional string warning_missing_invoice_blindedpay = 51;
	optional string warning_missing_invoice_created_at = 52;
	optional string warning_missing_invoice_payment_hash = 53;
	optional string warning_missing_invoice_amount = 54;
	optional string warning_missing_invoice_recurrence_basetime = 55;
	optional string warning_missing_invoice_node_id = 56;
	optional string warning_missing_invoice_signature = 57;
	optional string warning_invalid_invoice_signature = 58;
	repeated DecodeFallbacks fallbacks = 59;
	optional uint64 created_at = 60;
	optional uint64 expiry = 61;
	optional bytes payee = 62;
	optional bytes payment_hash = 63;
	optional bytes description_hash = 64;
	optional uint32 min_final_cltv_expiry = 65;
	optional bytes payment_secret = 66;
	optional bytes payment_metadata = 67;
	repeated DecodeExtra extra = 69;
	optional string unique_id = 70;
	optional string version = 71;
	optional string string = 72;
	repeated DecodeRestrictions restrictions = 73;
	optional string warning_rune_invalid_utf8 = 74;
	optional bytes hex = 75;
	optional bytes decrypted = 76;
	optional string signature = 77;
	optional string currency = 78;
	optional Amount amount_msat = 79;
	optional string description = 80;
	optional bytes features = 81;
	optional DecodeRoutehintList routes = 82;
	optional bytes offer_issuer_id = 83;
	optional string warning_missing_offer_issuer_id = 84;
	repeated DecodeInvreqPaths invreq_paths = 85;
	optional string warning_empty_blinded_path = 86;
	optional DecodeInvreqBip353Name invreq_bip_353_name = 87;
	optional string warning_invreq_bip_353_name_name_invalid = 88;
	optional string warning_invreq_bip_353_name_domain_invalid = 89;
	optional bool invreq_recurrence_cancel = 90;
	optional string warning_invreq_recurrence_cancel_without_counter = 91;
	optional string warning_invreq_recurrence_cancel_with_zero_counter = 92;
	optional bytes proof_preimage = 93;
	repeated uint64 proof_omitted_tlvs = 94;
	repeated bytes proof_missing_hashes = 95;
	repeated bytes proof_leaf_hashes = 96;
	optional string proof_note = 97;
	optional string proof_signature = 98;
	repeated DecodeUnknownPayerProofTlvs unknown_payer_proof_tlvs = 99;
}

message DecodeExtra {
	string tag = 1;
	string data = 2;
}

message DecodeFallbacks {
	// Decode.fallbacks[].type
	enum DecodeFallbacksType {
		P2PKH = 0;
		P2SH = 1;
		P2WPKH = 2;
		P2WSH = 3;
		P2TR = 4;
	}
	DecodeFallbacksType item_type = 2;
	optional string addr = 3;
	bytes hex = 4;
}

message DecodeInvoiceFallbacks {
	uint32 version = 1;
	bytes hex = 2;
	optional string address = 3;
}

message DecodeInvoicePaths {
	repeated DecodeInvoicePathsPath path = 1;
	DecodeInvoicePathsPayinfo payinfo = 2;
	optional bytes first_node_id = 3;
	optional bytes first_path_key = 4;
	optional uint32 first_scid_dir = 5;
	optional string first_scid = 6;
}

message DecodeInvoicePathsPath {
	bytes blinded_node_id = 1;
	bytes encrypted_recipient_data = 2;
}

message DecodeInvoicePathsPayinfo {
	optional Amount htlc_minimum_msat = 1;
	bytes features = 2;
	Amount fee_base_msat = 3;
	uint32 fee_proportional_millionths = 4;
	optional Amount htlc_maximum_msat = 5;
	uint32 cltv_expiry_delta = 6;
}

message DecodeInvreqBip353Name {
	optional string name = 1;
	optional string domain = 2;
}

message DecodeInvreqPaths {
	optional uint32 first_scid_dir = 1;
	optional bytes first_node_id = 3;
	optional string first_scid = 4;
	repeated DecodeInvreqPathsPath path = 5;
	optional bytes first_path_key = 6;
}

message DecodeInvreqPathsPath {
	bytes blinded_node_id = 1;
	bytes encrypted_recipient_data = 2;
}

message DecodeOfferPaths {
	optional bytes first_node_id = 1;
	repeated DecodeOfferPathsPath path = 3;
	optional uint32 first_scid_dir = 4;
	optional string first_scid = 5;
	optional bytes first_path_key = 6;
}

message DecodeOfferPathsPath {
	bytes blinded_node_id = 1;
	bytes encrypted_recipient_data = 2;
}

message DecodeOfferRecurrence {
	uint32 time_unit = 1;
	optional bool compulsory_field = 2;
	optional string time_unit_name = 3;
	uint32 period = 4;
	optional uint64 basetime = 5;
	optional DecodeOfferRecurrencePaywindow paywindow = 6;
	optional uint32 limit = 7;
}

message DecodeOfferRecurrencePaywindow {
	uint32 seconds_before = 1;
	uint32 seconds_after = 2;
	optional bool proportional_amount = 3;
}

message DecodeRestrictions {
	repeated string alternatives = 1;
	string summary = 2;
}

message DecodeUnknownInvoiceRequestTlvs {
	uint64 item_type = 1;
	uint64 length = 2;
	bytes value = 3;
}

message DecodeUnknownInvoiceTlvs {
	uint64 item_type = 1;
	uint64 length = 2;
	bytes value = 3;
}

message DecodeUnknownOfferTlvs {
	uint64 item_type = 1;
	uint64 length = 2;
	bytes value = 3;
}

message DecodeUnknownPayerProofTlvs {
	uint64 item_type = 1;
	uint64 length = 2;
	bytes value = 3;
}

message DelpayRequest {
	// DelPay.status
	enum DelpayStatus {
		COMPLETE = 0;
		FAILED = 1;
	}
	bytes payment_hash = 1;
	DelpayStatus status = 2;
	optional uint64 partid = 3;
	optional uint64 groupid = 4;
}

message DelpayResponse {
	repeated DelpayPayments payments = 1;
}

message DelpayPayments {
	// DelPay.payments[].status
	enum DelpayPaymentsStatus {
		PENDING = 0;
		FAILED = 1;
		COMPLETE = 2;
	}
	uint64 created_index = 1;
	uint64 id = 2;
	bytes payment_hash = 3;
	DelpayPaymentsStatus status = 4;
	Amount amount_sent_msat = 5;
	optional uint64 partid = 6;
	optional bytes destination = 7;
	optional Amount amount_msat = 8;
	uint64 created_at = 9;
	optional uint64 updated_index = 10;
	optional uint64 completed_at = 11;
	optional uint64 groupid = 12;
	optional bytes payment_preimage = 13;
	optional string label = 14;
	optional string bolt11 = 15;
	optional string bolt12 = 16;
	optional bytes erroronion = 17;
}

message DelforwardRequest {
	// DelForward.status
	enum DelforwardStatus {
		SETTLED = 0;
		LOCAL_FAILED = 1;
		FAILED = 2;
	}
	string in_channel = 1;
	uint64 in_htlc_id = 2;
	DelforwardStatus status = 3;
}

message DelforwardResponse {
}

message DisableofferRequest {
	bytes offer_id = 1;
}

message DisableofferResponse {
	bytes offer_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	optional string label = 6;
	optional string description = 7;
	optional bool force_paths = 8;
}

message EnableofferRequest {
	bytes offer_id = 1;
}

message EnableofferResponse {
	bytes offer_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	optional string label = 6;
	optional string description = 7;
	optional bool force_paths = 8;
}

message DisconnectRequest {
	bytes id = 1;
	optional bool force = 2;
}

message DisconnectResponse {
}

message FeeratesRequest {
	// Feerates.style
	enum FeeratesStyle {
		PERKB = 0;
		PERKW = 1;
	}
	FeeratesStyle style = 1;
}

message FeeratesResponse {
	optional string warning_missing_feerates = 1;
	optional FeeratesPerkb perkb = 2;
	optional FeeratesPerkw perkw = 3;
	optional FeeratesOnchainFeeEstimates onchain_fee_estimates = 4;
}

message FeeratesOnchainFeeEstimates {
	uint64 opening_channel_satoshis = 1;
	uint64 mutual_close_satoshis = 2;
	uint64 unilateral_close_satoshis = 3;
	uint64 htlc_timeout_satoshis = 4;
	uint64 htlc_success_satoshis = 5;
	optional uint64 unilateral_close_nonanchor_satoshis = 6;
}

message FeeratesPerkb {
	uint32 min_acceptable = 1;
	uint32 max_acceptable = 2;
	optional uint32 opening = 3;
	optional uint32 mutual_close = 4;
	optional uint32 unilateral_close = 5;
	optional uint32 penalty = 8;
	repeated FeeratesPerkbEstimates estimates = 9;
	uint32 floor = 10;
	optional uint32 unilateral_anchor_close = 11;
	optional uint32 splice = 12;
}

message FeeratesPerkbEstimates {
	uint32 blockcount = 1;
	uint32 feerate = 2;
	uint32 smoothed_feerate = 3;
}

message FeeratesPerkw {
	uint32 min_acceptable = 1;
	uint32 max_acceptable = 2;
	optional uint32 opening = 3;
	optional uint32 mutual_close = 4;
	optional uint32 unilateral_close = 5;
	optional uint32 penalty = 8;
	repeated FeeratesPerkwEstimates estimates = 9;
	uint32 floor = 10;
	optional uint32 unilateral_anchor_close = 11;
	optional uint32 splice = 12;
}

message FeeratesPerkwEstimates {
	uint32 blockcount = 1;
	uint32 feerate = 2;
	uint32 smoothed_feerate = 3;
}

message Fetchbip353Request {
	string address = 1;
}

message Fetchbip353Response {
	string proof = 1;
	repeated Fetchbip353Instructions instructions = 2;
}

message Fetchbip353Instructions {
	optional string description = 1;
	optional string offer = 2;
	optional string onchain = 3;
	optional uint64 offchain_amount_msat = 4;
	optional uint64 onchain_amount_sat = 5;
}

message FetchinvoiceRequest {
	string offer = 1;
	optional Amount amount_msat = 2;
	optional uint64 quantity = 3;
	optional uint64 recurrence_counter = 4;
	optional double recurrence_start = 5;
	optional string recurrence_label = 6;
	optional double timeout = 7;
	optional string payer_note = 8;
	optional string payer_metadata = 9;
	optional string bip353 = 10;
}

message FetchinvoiceResponse {
	string invoice = 1;
	FetchinvoiceChanges changes = 2;
	optional FetchinvoiceNextPeriod next_period = 3;
}

message FetchinvoiceChanges {
	optional string description_appended = 1;
	optional string description = 2;
	optional string vendor_removed = 3;
	optional string vendor = 4;
	optional Amount amount_msat = 5;
}

message FetchinvoiceNextPeriod {
	uint64 counter = 1;
	uint64 starttime = 2;
	uint64 endtime = 3;
	uint64 paywindow_start = 4;
	uint64 paywindow_end = 5;
}

message CancelrecurringinvoiceRequest {
	string offer = 1;
	uint64 recurrence_counter = 2;
	string recurrence_label = 3;
	optional double recurrence_start = 4;
	optional string payer_note = 5;
	optional string bip353 = 6;
}

message CancelrecurringinvoiceResponse {
	string bolt12 = 1;
}

message FundchannelCancelRequest {
	bytes id = 1;
}

message FundchannelCancelResponse {
	string cancelled = 1;
}

message FundchannelCompleteRequest {
	bytes id = 1;
	string psbt = 2;
	optional bool withhold = 3;
}

message FundchannelCompleteResponse {
	bytes channel_id = 1;
	bool commitments_secured = 2;
}

message FundchannelRequest {
	AmountOrAll amount = 1;
	optional Feerate feerate = 2;
	optional bool announce = 3;
	optional Amount push_msat = 5;
	optional string close_to = 6;
	optional Amount request_amt = 7;
	optional string compact_lease = 8;
	bytes id = 9;
	optional uint32 minconf = 10;
	repeated Outpoint utxos = 11;
	optional uint32 mindepth = 12;
	optional Amount reserve = 13;
	repeated uint32 channel_type = 14;
}

message FundchannelResponse {
	bytes tx = 1;
	bytes txid = 2;
	uint32 outnum = 3;
	bytes channel_id = 4;
	optional bytes close_to = 5;
	optional uint32 mindepth = 6;
	FundchannelChannelType channel_type = 7;
}

message FundchannelChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message FundchannelStartRequest {
	bytes id = 1;
	Amount amount = 2;
	optional Feerate feerate = 3;
	optional bool announce = 4;
	optional string close_to = 5;
	optional Amount push_msat = 6;
	optional uint32 mindepth = 7;
	optional Amount reserve = 8;
	repeated uint32 channel_type = 9;
}

message FundchannelStartResponse {
	string funding_address = 1;
	bytes scriptpubkey = 2;
	optional FundchannelStartChannelType channel_type = 3;
	optional bytes close_to = 4;
	string warning_usage = 5;
	optional uint32 mindepth = 6;
}

message FundchannelStartChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message GetlogRequest {
	// GetLog.level
	enum GetlogLevel {
		BROKEN = 0;
		UNUSUAL = 1;
		INFO = 2;
		DEBUG = 3;
		IO = 4;
		TRACE = 5;
	}
	optional GetlogLevel level = 1;
}

message GetlogResponse {
	string created_at = 1;
	uint32 bytes_used = 2;
	uint32 bytes_max = 3;
	repeated GetlogLog log = 4;
}

message GetlogLog {
	// GetLog.log[].type
	enum GetlogLogType {
		SKIPPED = 0;
		BROKEN = 1;
		UNUSUAL = 2;
		INFO = 3;
		DEBUG = 4;
		IO_IN = 5;
		IO_OUT = 6;
		TRACE = 7;
	}
	GetlogLogType item_type = 1;
	optional uint32 num_skipped = 2;
	optional string time = 3;
	optional string source = 4;
	optional string log = 5;
	optional bytes node_id = 6;
	optional bytes data = 7;
}

message FunderupdateRequest {
	// FunderUpdate.policy
	enum FunderupdatePolicy {
		MATCH = 0;
		AVAILABLE = 1;
		FIXED = 2;
	}
	optional FunderupdatePolicy policy = 1;
	optional Amount policy_mod = 2;
	optional bool leases_only = 3;
	optional Amount min_their_funding_msat = 4;
	optional Amount max_their_funding_msat = 5;
	optional Amount per_channel_min_msat = 6;
	optional Amount per_channel_max_msat = 7;
	optional Amount reserve_tank_msat = 8;
	optional uint32 fuzz_percent = 9;
	optional uint32 fund_probability = 10;
	optional Amount lease_fee_base_msat = 11;
	optional uint32 lease_fee_basis = 12;
	optional uint32 funding_weight = 13;
	optional Amount channel_fee_max_base_msat = 14;
	optional uint32 channel_fee_max_proportional_thousandths = 15;
	optional bytes compact_lease = 16;
}

message FunderupdateResponse {
	// FunderUpdate.policy
	enum FunderupdatePolicy {
		MATCH = 0;
		AVAILABLE = 1;
		FIXED = 2;
	}
	string summary = 1;
	FunderupdatePolicy policy = 2;
	uint32 policy_mod = 3;
	bool leases_only = 4;
	Amount min_their_funding_msat = 5;
	Amount max_their_funding_msat = 6;
	Amount per_channel_min_msat = 7;
	Amount per_channel_max_msat = 8;
	Amount reserve_tank_msat = 9;
	uint32 fuzz_percent = 10;
	uint32 fund_probability = 11;
	optional Amount lease_fee_base_msat = 12;
	optional uint32 lease_fee_basis = 13;
	optional uint32 funding_weight = 14;
	optional Amount channel_fee_max_base_msat = 15;
	optional uint32 channel_fee_max_proportional_thousandths = 16;
	optional bytes compact_lease = 17;
}

message GetrouteRequest {
	bytes id = 1 [deprecated = true];
	uint64 riskfactor = 3 [deprecated = true];
	optional uint32 cltv = 4 [deprecated = true];
	optional bytes fromid = 5 [deprecated = true];
	optional uint32 fuzzpercent = 6 [deprecated = true];
	repeated string exclude = 7 [deprecated = true];
	optional uint32 maxhops = 8 [deprecated = true];
	Amount amount_msat = 9 [deprecated = true];
}

message GetrouteResponse {
	repeated GetrouteRoute route = 1 [deprecated = true];
}

message GetrouteRoute {
	// GetRoute.route[].style
	enum GetrouteRouteStyle {
		TLV = 0 [deprecated = true];
	}
	bytes id = 1 [deprecated = true];
	string channel = 2 [deprecated = true];
	uint32 direction = 3 [deprecated = true];
	Amount amount_msat = 4 [deprecated = true];
	uint32 delay = 5 [deprecated = true];
	GetrouteRouteStyle style = 6 [deprecated = true];
}

message ListaddressesRequest {
	optional string address = 1;
	optional uint64 start = 2;
	optional uint32 limit = 3;
}

message ListaddressesResponse {
	repeated ListaddressesAddresses addresses = 1;
}

message ListaddressesAddresses {
	uint64 keyidx = 1;
	optional string bech32 = 2;
	optional string p2tr = 3;
}

message ListforwardsRequest {
	// ListForwards.index
	enum ListforwardsIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	// ListForwards.status
	enum ListforwardsStatus {
		OFFERED = 0;
		SETTLED = 1;
		LOCAL_FAILED = 2;
		FAILED = 3;
	}
	optional ListforwardsStatus status = 1;
	optional string in_channel = 2;
	optional string out_channel = 3;
	optional ListforwardsIndex index = 4;
	optional uint64 start = 5;
	optional uint32 limit = 6;
}

message ListforwardsResponse {
	repeated ListforwardsForwards forwards = 1;
}

message ListforwardsForwards {
	// ListForwards.forwards[].status
	enum ListforwardsForwardsStatus {
		OFFERED = 0;
		SETTLED = 1;
		LOCAL_FAILED = 2;
		FAILED = 3;
	}
	// ListForwards.forwards[].style
	enum ListforwardsForwardsStyle {
		LEGACY = 0;
		TLV = 1;
	}
	string in_channel = 1;
	Amount in_msat = 2;
	ListforwardsForwardsStatus status = 3;
	double received_time = 4;
	optional string out_channel = 5;
	optional Amount fee_msat = 7;
	optional Amount out_msat = 8;
	optional ListforwardsForwardsStyle style = 9;
	optional uint64 in_htlc_id = 10;
	optional uint64 out_htlc_id = 11;
	uint64 created_index = 12;
	optional uint64 updated_index = 13;
	optional double resolved_time = 14;
	optional uint32 failcode = 15;
	optional string failreason = 16;
}

message ListoffersRequest {
	optional bytes offer_id = 1;
	optional bool active_only = 2;
}

message ListoffersResponse {
	repeated ListoffersOffers offers = 1;
}

message ListoffersOffers {
	bytes offer_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	optional string label = 6;
	optional string description = 7;
	optional bool force_paths = 8;
}

message ListpaysRequest {
	// ListPays.index
	enum ListpaysIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	// ListPays.status
	enum ListpaysStatus {
		PENDING = 0;
		COMPLETE = 1;
		FAILED = 2;
	}
	optional string bolt11 = 1;
	optional bytes payment_hash = 2;
	optional ListpaysStatus status = 3;
	optional ListpaysIndex index = 4;
	optional uint64 start = 5;
	optional uint32 limit = 6;
}

message ListpaysResponse {
	repeated ListpaysPays pays = 1;
}

message ListpaysPays {
	// ListPays.pays[].status
	enum ListpaysPaysStatus {
		PENDING = 0;
		FAILED = 1;
		COMPLETE = 2;
	}
	bytes payment_hash = 1;
	ListpaysPaysStatus status = 2;
	optional bytes destination = 3;
	uint64 created_at = 4;
	optional string label = 5;
	optional string bolt11 = 6;
	optional string bolt12 = 7;
	optional Amount amount_msat = 8;
	optional Amount amount_sent_msat = 9;
	optional bytes erroronion = 10;
	optional string description = 11;
	optional uint64 completed_at = 12;
	optional bytes preimage = 13;
	optional uint64 number_of_parts = 14;
	optional uint64 created_index = 15;
	optional uint64 updated_index = 16;
}

message ListhtlcsRequest {
	// ListHtlcs.index
	enum ListhtlcsIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	optional string id = 1;
	optional ListhtlcsIndex index = 2;
	optional uint64 start = 3;
	optional uint32 limit = 4;
}

message ListhtlcsResponse {
	repeated ListhtlcsHtlcs htlcs = 1;
}

message ListhtlcsHtlcs {
	// ListHtlcs.htlcs[].direction
	enum ListhtlcsHtlcsDirection {
		OUT = 0;
		IN = 1;
	}
	string short_channel_id = 1;
	uint64 id = 2;
	uint32 expiry = 3;
	Amount amount_msat = 4;
	ListhtlcsHtlcsDirection direction = 5;
	bytes payment_hash = 6;
	HtlcState state = 7;
	optional uint64 created_index = 8;
	optional uint64 updated_index = 9;
}

message MultifundchannelRequest {
	repeated MultifundchannelDestinations destinations = 1;
	optional Feerate feerate = 2;
	optional sint64 minconf = 3;
	repeated Outpoint utxos = 4;
	optional sint64 minchannels = 5;
	optional Feerate commitment_feerate = 6;
}

message MultifundchannelResponse {
	bytes tx = 1;
	bytes txid = 2;
	repeated MultifundchannelChannelIds channel_ids = 3;
	repeated MultifundchannelFailed failed = 4;
}

message MultifundchannelDestinations {
	string id = 1;
	AmountOrAll amount = 2;
	optional bool announce = 3;
	optional Amount push_msat = 4;
	optional string close_to = 5;
	optional Amount request_amt = 6;
	optional string compact_lease = 7;
	optional uint32 mindepth = 8;
	optional Amount reserve = 9;
}

message MultifundchannelChannelIds {
	bytes id = 1;
	uint32 outnum = 2;
	bytes channel_id = 3;
	MultifundchannelChannelIdsChannelType channel_type = 4;
	optional bytes close_to = 5;
}

message MultifundchannelChannelIdsChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message MultifundchannelFailed {
	// MultiFundChannel.failed[].method
	enum MultifundchannelFailedMethod {
		CONNECT = 0;
		OPENCHANNEL_INIT = 1;
		FUNDCHANNEL_START = 2;
		FUNDCHANNEL_COMPLETE = 3;
	}
	bytes id = 1;
	MultifundchannelFailedMethod method = 2;
	MultifundchannelFailedError error = 3;
}

message MultifundchannelFailedError {
	sint64 code = 1;
	string message = 2;
}

message MultiwithdrawRequest {
	repeated OutputDesc outputs = 1;
	optional Feerate feerate = 2;
	optional uint32 minconf = 3;
	repeated Outpoint utxos = 4;
}

message MultiwithdrawResponse {
	bytes tx = 1;
	bytes txid = 2;
}

message OfferRequest {
	string amount = 1;
	optional string description = 2;
	optional string issuer = 3;
	optional string label = 4;
	optional uint64 quantity_max = 5;
	optional uint64 absolute_expiry = 6;
	optional string recurrence = 7;
	optional string recurrence_base = 8;
	optional string recurrence_paywindow = 9;
	optional uint32 recurrence_limit = 10;
	optional bool single_use = 11;
	optional bool proportional_amount = 13;
	optional bool optional_recurrence = 14;
	repeated bytes fronting_nodes = 15;
}

message OfferResponse {
	bytes offer_id = 1;
	bool active = 2;
	bool single_use = 3;
	string bolt12 = 4;
	bool used = 5;
	bool created = 6;
	optional string label = 7;
	optional bool force_paths = 8;
}

message OpenchannelAbortRequest {
	bytes channel_id = 1;
}

message OpenchannelAbortResponse {
	bytes channel_id = 1;
	bool channel_canceled = 2;
	string reason = 3;
}

message OpenchannelBumpRequest {
	bytes channel_id = 1;
	string initialpsbt = 2;
	optional Feerate funding_feerate = 3;
	Amount amount = 4;
}

message OpenchannelBumpResponse {
	bytes channel_id = 1;
	OpenchannelBumpChannelType channel_type = 2;
	string psbt = 3;
	bool commitments_secured = 4;
	uint64 funding_serial = 5;
	optional bool requires_confirmed_inputs = 6;
}

message OpenchannelBumpChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message OpenchannelInitRequest {
	bytes id = 1;
	string initialpsbt = 2;
	optional Feerate commitment_feerate = 3;
	optional Feerate funding_feerate = 4;
	optional bool announce = 5;
	optional string close_to = 6;
	optional Amount request_amt = 7;
	optional bytes compact_lease = 8;
	repeated uint32 channel_type = 9;
	Amount amount = 10;
}

message OpenchannelInitResponse {
	bytes channel_id = 1;
	string psbt = 2;
	OpenchannelInitChannelType channel_type = 3;
	bool commitments_secured = 4;
	uint64 funding_serial = 5;
	optional bool requires_confirmed_inputs = 6;
}

message OpenchannelInitChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message OpenchannelSignedRequest {
	bytes channel_id = 1;
	string signed_psbt = 2;
}

message OpenchannelSignedResponse {
	bytes channel_id = 1;
	bytes tx = 2;
	bytes txid = 3;
}

message OpenchannelUpdateRequest {
	bytes channel_id = 1;
	string psbt = 2;
}

message OpenchannelUpdateResponse {
	bytes channel_id = 1;
	OpenchannelUpdateChannelType channel_type = 2;
	string psbt = 3;
	bool commitments_secured = 4;
	uint32 funding_outnum = 5;
	optional bytes close_to = 6;
	optional bool requires_confirmed_inputs = 7;
}

message OpenchannelUpdateChannelType {
	repeated uint32 bits = 1;
	repeated ChannelTypeName names = 2;
}

message PingRequest {
	bytes id = 1;
	optional uint32 len = 2;
	optional uint32 pongbytes = 3;
}

message PingResponse {
	uint32 totlen = 1;
}

message PluginRequest {
	PluginSubcommand subcommand = 1;
	optional string plugin = 2;
	optional string directory = 3;
	repeated string options = 4;
}

message PluginResponse {
	PluginSubcommand command = 1;
	repeated PluginPlugins plugins = 2;
	optional string result = 3;
}

message PluginPlugins {
	string name = 1;
	bool active = 2;
	bool dynamic = 3;
}

message RenepaystatusRequest {
	optional string invstring = 1 [deprecated = true];
}

message RenepaystatusResponse {
	repeated RenepaystatusPaystatus paystatus = 1 [deprecated = true];
}

message RenepaystatusPaystatus {
	// RenePayStatus.paystatus[].status
	enum RenepaystatusPaystatusStatus {
		COMPLETE = 0 [deprecated = true];
		PENDING = 1 [deprecated = true];
		FAILED = 2 [deprecated = true];
	}
	string bolt11 = 1 [deprecated = true];
	optional bytes payment_preimage = 2 [deprecated = true];
	bytes payment_hash = 3 [deprecated = true];
	double created_at = 4 [deprecated = true];
	uint32 groupid = 5 [deprecated = true];
	optional uint32 parts = 6 [deprecated = true];
	Amount amount_msat = 7 [deprecated = true];
	optional Amount amount_sent_msat = 8 [deprecated = true];
	RenepaystatusPaystatusStatus status = 9 [deprecated = true];
	optional bytes destination = 10 [deprecated = true];
	repeated string notes = 11 [deprecated = true];
}

message RenepayRequest {
	string invstring = 1 [deprecated = true];
	optional Amount amount_msat = 2 [deprecated = true];
	optional Amount maxfee = 3 [deprecated = true];
	optional uint32 maxdelay = 4 [deprecated = true];
	optional uint32 retry_for = 5 [deprecated = true];
	optional string description = 6 [deprecated = true];
	optional string label = 7 [deprecated = true];
	optional bool dev_use_shadow = 8 [deprecated = true];
	repeated string exclude = 9 [deprecated = true];
}

message RenepayResponse {
	// RenePay.status
	enum RenepayStatus {
		COMPLETE = 0 [deprecated = true];
		PENDING = 1 [deprecated = true];
		FAILED = 2 [deprecated = true];
	}
	bytes payment_preimage = 1 [deprecated = true];
	bytes payment_hash = 2 [deprecated = true];
	double created_at = 3 [deprecated = true];
	uint32 parts = 4 [deprecated = true];
	Amount amount_msat = 5 [deprecated = true];
	Amount amount_sent_msat = 6 [deprecated = true];
	RenepayStatus status = 7 [deprecated = true];
	optional bytes destination = 8 [deprecated = true];
	optional string bolt11 = 9 [deprecated = true];
	optional string bolt12 = 10 [deprecated = true];
	optional uint64 groupid = 11 [deprecated = true];
}

message ReserveinputsRequest {
	string psbt = 1;
	optional bool exclusive = 2;
	optional uint32 reserve = 3;
}

message ReserveinputsResponse {
	repeated ReserveinputsReservations reservations = 1;
}

message ReserveinputsReservations {
	bytes txid = 1;
	uint32 vout = 2;
	bool was_reserved = 3;
	bool reserved = 4;
	uint32 reserved_to_block = 5;
}

message SendcustommsgRequest {
	bytes node_id = 1;
	bytes msg = 2;
}

message SendcustommsgResponse {
	string status = 1;
}

message SendinvoiceRequest {
	string invreq = 1;
	string label = 2;
	optional Amount amount_msat = 3;
	optional uint32 timeout = 4;
	optional uint64 quantity = 5;
}

message SendinvoiceResponse {
	// SendInvoice.status
	enum SendinvoiceStatus {
		UNPAID = 0;
		PAID = 1;
		EXPIRED = 2;
	}
	string label = 1;
	string description = 2;
	bytes payment_hash = 3;
	SendinvoiceStatus status = 4;
	uint64 expires_at = 5;
	optional Amount amount_msat = 6;
	optional string bolt12 = 7;
	uint64 created_index = 8;
	optional uint64 updated_index = 9;
	optional uint64 pay_index = 10;
	optional Amount amount_received_msat = 11;
	optional uint64 paid_at = 12;
	optional bytes payment_preimage = 13;
}

message SetchannelRequest {
	string id = 1;
	optional Amount feebase = 2;
	optional uint32 feeppm = 3;
	optional Amount htlcmin = 4;
	optional Amount htlcmax = 5;
	optional uint32 enforcedelay = 6;
	optional bool ignorefeelimits = 7;
}

message SetchannelResponse {
	repeated SetchannelChannels channels = 1;
}

message SetchannelChannels {
	bytes peer_id = 1;
	bytes channel_id = 2;
	optional string short_channel_id = 3;
	Amount fee_base_msat = 4;
	uint32 fee_proportional_millionths = 5;
	Amount minimum_htlc_out_msat = 6;
	optional string warning_htlcmin_too_low = 7;
	Amount maximum_htlc_out_msat = 8;
	optional string warning_htlcmax_too_high = 9;
	bool ignore_fee_limits = 10;
}

message SetconfigRequest {
	string config = 1;
	optional string val = 2;
	optional bool transient = 3;
}

message SetconfigResponse {
	SetconfigConfig config = 1;
}

message SetconfigConfig {
	string config = 1;
	optional string source = 2;
	optional string plugin = 3;
	bool dynamic = 4;
	optional bool set = 5;
	optional string value_str = 6;
	optional Amount value_msat = 7;
	optional sint64 value_int = 8;
	optional bool value_bool = 9;
	repeated string sources = 10;
	repeated string values_str = 11;
}

message SetpsbtversionRequest {
	string psbt = 1;
	uint32 version = 2;
}

message SetpsbtversionResponse {
	string psbt = 1;
}

message SigninvoiceRequest {
	string invstring = 1;
}

message SigninvoiceResponse {
	string bolt11 = 1;
}

message SignmessageRequest {
	string message = 1;
}

message SignmessageResponse {
	bytes signature = 1;
	bytes recid = 2;
	string zbase = 3;
}

message SpliceInitRequest {
	bytes channel_id = 1;
	sint64 relative_amount = 2;
	optional string initialpsbt = 3;
	optional uint32 feerate_per_kw = 4;
	optional bool force_feerate = 5;
}

message SpliceInitResponse {
	string psbt = 1;
}

message SpliceSignedRequest {
	bytes channel_id = 1;
	string psbt = 2;
	optional bool sign_first = 3;
}

message SpliceSignedResponse {
	bytes tx = 1;
	bytes txid = 2;
	optional uint32 outnum = 3;
	string psbt = 4;
}

message SpliceUpdateRequest {
	bytes channel_id = 1;
	string psbt = 2;
}

message SpliceUpdateResponse {
	string psbt = 1;
	bool commitments_secured = 2;
	optional bool signatures_secured = 3;
}

message SpliceinRequest {
	string channel = 1;
	string amount = 2;
}

message SpliceinResponse {
	optional string psbt = 1;
	optional string tx = 2;
	optional string txid = 3;
}

message SpliceoutRequest {
	string channel = 1;
	string amount = 2;
	optional string destination = 3;
	optional bool force_feerate = 4;
}

message SpliceoutResponse {
	optional string psbt = 1;
	optional string tx = 2;
	optional string txid = 3;
}

message DevspliceRequest {
	string script_or_json = 1;
	optional bool dryrun = 2;
	optional bool force_feerate = 3;
	optional bool debug_log = 4;
	optional bool dev_wetrun = 5;
}

message DevspliceResponse {
	repeated string dryrun = 1;
	optional string psbt = 2;
	optional string tx = 3;
	optional string txid = 4;
	repeated string log = 5;
}

message UnreserveinputsRequest {
	string psbt = 1;
	optional uint32 reserve = 2;
}

message UnreserveinputsResponse {
	repeated UnreserveinputsReservations reservations = 1;
}

message UnreserveinputsReservations {
	bytes txid = 1;
	uint32 vout = 2;
	bool was_reserved = 3;
	bool reserved = 4;
	optional uint32 reserved_to_block = 5;
}

message UpgradewalletRequest {
	optional Feerate feerate = 1;
	optional bool reservedok = 2;
}

message UpgradewalletResponse {
	uint64 upgraded_outs = 1;
	optional string psbt = 2;
	optional bytes tx = 3;
	optional bytes txid = 4;
}

message WaitblockheightRequest {
	uint32 blockheight = 1;
	optional uint32 timeout = 2;
}

message WaitblockheightResponse {
	uint32 blockheight = 1;
}

message WaitRequest {
	// Wait.indexname
	enum WaitIndexname {
		CREATED = 0;
		UPDATED = 1;
		DELETED = 2;
	}
	// Wait.subsystem
	enum WaitSubsystem {
		INVOICES = 0;
		FORWARDS = 1;
		SENDPAYS = 2;
		HTLCS = 3;
		CHAINMOVES = 4;
		CHANNELMOVES = 5;
		NETWORKEVENTS = 6;
	}
	WaitSubsystem subsystem = 1;
	WaitIndexname indexname = 2;
	uint64 nextvalue = 3;
}

message WaitResponse {
	// Wait.subsystem
	enum WaitSubsystem {
		INVOICES = 0;
		FORWARDS = 1;
		SENDPAYS = 2;
		HTLCS = 3;
		CHAINMOVES = 4;
		CHANNELMOVES = 5;
		NETWORKEVENTS = 6;
	}
	WaitSubsystem subsystem = 1;
	optional uint64 created = 2;
	optional uint64 updated = 3;
	optional uint64 deleted = 4;
	optional WaitDetails details = 5 [deprecated = true];
	optional WaitForwards forwards = 6;
	optional WaitInvoices invoices = 7;
	optional WaitSendpays sendpays = 8;
	optional WaitHtlcs htlcs = 9;
	optional WaitChainmoves chainmoves = 10;
	optional WaitChannelmoves channelmoves = 11;
	optional WaitNetworkevents networkevents = 12;
}

message WaitChainmoves {
	string account = 1;
	Amount credit_msat = 2;
	Amount debit_msat = 3;
}

message WaitChannelmoves {
	string account = 1;
	Amount credit_msat = 2;
	Amount debit_msat = 3;
}

message WaitDetails {
	// Wait.details.status
	enum WaitDetailsStatus {
		UNPAID = 0 [deprecated = true];
		PAID = 1 [deprecated = true];
		EXPIRED = 2 [deprecated = true];
		PENDING = 3 [deprecated = true];
		FAILED = 4 [deprecated = true];
		COMPLETE = 5 [deprecated = true];
		OFFERED = 6 [deprecated = true];
		SETTLED = 7 [deprecated = true];
		LOCAL_FAILED = 8 [deprecated = true];
	}
	optional WaitDetailsStatus status = 1 [deprecated = true];
	optional string label = 2 [deprecated = true];
	optional string description = 3 [deprecated = true];
	optional string bolt11 = 4 [deprecated = true];
	optional string bolt12 = 5 [deprecated = true];
	optional uint64 partid = 6 [deprecated = true];
	optional uint64 groupid = 7 [deprecated = true];
	optional bytes payment_hash = 8 [deprecated = true];
	optional string in_channel = 9 [deprecated = true];
	optional uint64 in_htlc_id = 10 [deprecated = true];
	optional Amount in_msat = 11 [deprecated = true];
	optional string out_channel = 12 [deprecated = true];
}

message WaitForwards {
	// Wait.forwards.status
	enum WaitForwardsStatus {
		OFFERED = 0;
		SETTLED = 1;
		FAILED = 2;
		LOCAL_FAILED = 3;
	}
	optional WaitForwardsStatus status = 1;
	optional string in_channel = 2;
	optional uint64 in_htlc_id = 3;
	optional Amount in_msat = 4;
	optional string out_channel = 5;
}

message WaitHtlcs {
	// Wait.htlcs.direction
	enum WaitHtlcsDirection {
		OUT = 0;
		IN = 1;
	}
	optional HtlcState state = 1;
	optional uint64 htlc_id = 2;
	optional string short_channel_id = 3;
	optional uint32 cltv_expiry = 4;
	optional Amount amount_msat = 5;
	optional WaitHtlcsDirection direction = 6;
	optional bytes payment_hash = 7;
}

message WaitInvoices {
	// Wait.invoices.status
	enum WaitInvoicesStatus {
		UNPAID = 0;
		PAID = 1;
		EXPIRED = 2;
	}
	optional WaitInvoicesStatus status = 1;
	optional string label = 2;
	optional string description = 3;
	optional string bolt11 = 4;
	optional string bolt12 = 5;
}

message WaitNetworkevents {
	// Wait.networkevents.type
	enum WaitNetworkeventsType {
		CONNECT = 0;
		CONNECT_FAIL = 1;
		PING = 2;
		DISCONNECT = 3;
	}
	optional uint64 created_index = 1;
	optional WaitNetworkeventsType item_type = 2;
	optional bytes peer_id = 3;
}

message WaitSendpays {
	// Wait.sendpays.status
	enum WaitSendpaysStatus {
		PENDING = 0;
		FAILED = 1;
		COMPLETE = 2;
	}
	optional WaitSendpaysStatus status = 1;
	optional uint64 partid = 2;
	optional uint64 groupid = 3;
	optional bytes payment_hash = 4;
}

message ListconfigsRequest {
	optional string config = 1;
}

message ListconfigsResponse {
	optional ListconfigsConfigs configs = 1;
}

message ListconfigsConfigs {
	optional ListconfigsConfigsConf conf = 1;
	optional ListconfigsConfigsDeveloper developer = 2;
	optional ListconfigsConfigsClearplugins clear_plugins = 3;
	optional ListconfigsConfigsDisablempp disable_mpp = 4;
	optional ListconfigsConfigsMainnet mainnet = 5;
	optional ListconfigsConfigsRegtest regtest = 6;
	optional ListconfigsConfigsSignet signet = 7;
	optional ListconfigsConfigsTestnet testnet = 8;
	optional ListconfigsConfigsImportantplugin important_plugin = 9;
	optional ListconfigsConfigsPlugin plugin = 10;
	optional ListconfigsConfigsPlugindir plugin_dir = 11;
	optional ListconfigsConfigsLightningdir lightning_dir = 12;
	optional ListconfigsConfigsNetwork network = 13;
	optional ListconfigsConfigsAllowdeprecatedapis allow_deprecated_apis = 14;
	optional ListconfigsConfigsRpcfile rpc_file = 15;
	optional ListconfigsConfigsDisableplugin disable_plugin = 16;
	optional ListconfigsConfigsAlwaysuseproxy always_use_proxy = 17;
	optional ListconfigsConfigsDaemon daemon = 18;
	optional ListconfigsConfigsWallet wallet = 19;
	optional ListconfigsConfigsLargechannels large_channels = 20;
	optional ListconfigsConfigsExperimentaldualfund experimental_dual_fund = 21;
	optional ListconfigsConfigsExperimentalsplicing experimental_splicing = 22 [deprecated = true];
	optional ListconfigsConfigsExperimentalshutdownwrongfunding experimental_shutdown_wrong_funding = 25;
	optional ListconfigsConfigsExperimentalpeerstorage experimental_peer_storage = 26;
	optional ListconfigsConfigsExperimentalanchors experimental_anchors = 27;
	optional ListconfigsConfigsDatabaseupgrade database_upgrade = 28;
	optional ListconfigsConfigsRgb rgb = 29;
	optional ListconfigsConfigsAlias alias = 30;
	optional ListconfigsConfigsPidfile pid_file = 31;
	optional ListconfigsConfigsIgnorefeelimits ignore_fee_limits = 32;
	optional ListconfigsConfigsWatchtimeblocks watchtime_blocks = 33;
	optional ListconfigsConfigsFundingconfirms funding_confirms = 35;
	optional ListconfigsConfigsCltvdelta cltv_delta = 36;
	optional ListconfigsConfigsCltvfinal cltv_final = 37;
	optional ListconfigsConfigsCommittime commit_time = 38;
	optional ListconfigsConfigsFeebase fee_base = 39;
	optional ListconfigsConfigsRescan rescan = 40;
	optional ListconfigsConfigsFeepersatoshi fee_per_satoshi = 41;
	optional ListconfigsConfigsMaxconcurrenthtlcs max_concurrent_htlcs = 42;
	optional ListconfigsConfigsHtlcminimummsat htlc_minimum_msat = 43;
	optional ListconfigsConfigsHtlcmaximummsat htlc_maximum_msat = 44;
	optional ListconfigsConfigsMaxdusthtlcexposuremsat max_dust_htlc_exposure_msat = 45;
	optional ListconfigsConfigsMincapacitysat min_capacity_sat = 46;
	optional ListconfigsConfigsAddr addr = 47;
	optional ListconfigsConfigsAnnounceaddr announce_addr = 48;
	optional ListconfigsConfigsBindaddr bind_addr = 49;
	optional ListconfigsConfigsOffline offline = 50;
	optional ListconfigsConfigsAutolisten autolisten = 51;
	optional ListconfigsConfigsProxy proxy = 52;
	optional ListconfigsConfigsDisabledns disable_dns = 53;
	optional ListconfigsConfigsAnnounceaddrdiscovered announce_addr_discovered = 54;
	optional ListconfigsConfigsAnnounceaddrdiscoveredport announce_addr_discovered_port = 55;
	optional ListconfigsConfigsEncryptedhsm encrypted_hsm = 56;
	optional ListconfigsConfigsRpcfilemode rpc_file_mode = 57;
	optional ListconfigsConfigsLoglevel log_level = 58;
	optional ListconfigsConfigsLogprefix log_prefix = 59;
	optional ListconfigsConfigsLogfile log_file = 60;
	optional ListconfigsConfigsLogtimestamps log_timestamps = 61;
	optional ListconfigsConfigsForcefeerates force_feerates = 62;
	optional ListconfigsConfigsSubdaemon subdaemon = 63;
	optional ListconfigsConfigsFetchinvoicenoconnect fetchinvoice_noconnect = 64;
	optional ListconfigsConfigsTorservicepassword tor_service_password = 66;
	optional ListconfigsConfigsAnnounceaddrdns announce_addr_dns = 67;
	optional ListconfigsConfigsRequireconfirmedinputs require_confirmed_inputs = 68;
	optional ListconfigsConfigsCommitfee commit_fee = 69;
	optional ListconfigsConfigsCommitfeerateoffset commit_feerate_offset = 70;
	optional ListconfigsConfigsAutoconnectseekerpeers autoconnect_seeker_peers = 71;
	optional ListconfigsConfigsCurrencyrateaddsource currencyrate_add_source = 74;
	optional ListconfigsConfigsCurrencyratedisablesource currencyrate_disable_source = 75;
}

message ListconfigsConfigsAddr {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsAlias {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsAllowdeprecatedapis {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsAlwaysuseproxy {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsAnnounceaddr {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsAnnounceaddrdiscovered {
	// ListConfigs.configs.announce-addr-discovered.value_str
	enum ListconfigsConfigsAnnounceaddrdiscoveredValueStr {
		TRUE = 0;
		FALSE = 1;
		AUTO = 2;
	}
	ListconfigsConfigsAnnounceaddrdiscoveredValueStr value_str = 1;
	string source = 2;
}

message ListconfigsConfigsAnnounceaddrdiscoveredport {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsAnnounceaddrdns {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsAutoconnectseekerpeers {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsAutolisten {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsBindaddr {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsClearplugins {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsCltvdelta {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsCltvfinal {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsCommitfee {
	uint64 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsCommitfeerateoffset {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsCommittime {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsConf {
	// ListConfigs.configs.conf.source
	enum ListconfigsConfigsConfSource {
		CMDLINE = 0;
	}
	string value_str = 1;
	ListconfigsConfigsConfSource source = 2;
}

message ListconfigsConfigsCurrencyrateaddsource {
	repeated string values_str = 1;
	repeated string sources = 2;
	optional string plugin = 3;
}

message ListconfigsConfigsCurrencyratedisablesource {
	repeated string values_str = 1;
	repeated string sources = 2;
	optional string plugin = 3;
}

message ListconfigsConfigsDaemon {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsDatabaseupgrade {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsDeveloper {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsDisabledns {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsDisablempp {
	bool set = 1;
	string source = 2;
	optional string plugin = 3;
}

message ListconfigsConfigsDisableplugin {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsEncryptedhsm {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsExperimentalanchors {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsExperimentaldualfund {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsExperimentalpeerstorage {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsExperimentalshutdownwrongfunding {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsExperimentalsplicing {
	bool set = 1 [deprecated = true];
	string source = 2 [deprecated = true];
}

message ListconfigsConfigsFeebase {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsFeepersatoshi {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsFetchinvoicenoconnect {
	bool set = 1;
	string source = 2;
	optional string plugin = 3;
}

message ListconfigsConfigsForcefeerates {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsFundingconfirms {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsHtlcmaximummsat {
	Amount value_msat = 1;
	string source = 2;
}

message ListconfigsConfigsHtlcminimummsat {
	Amount value_msat = 1;
	string source = 2;
}

message ListconfigsConfigsIgnorefeelimits {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsImportantplugin {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsLargechannels {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsLightningdir {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsLogfile {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsLoglevel {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsLogprefix {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsLogtimestamps {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsMainnet {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsMaxconcurrenthtlcs {
	uint32 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsMaxdusthtlcexposuremsat {
	Amount value_msat = 1;
	string source = 2;
}

message ListconfigsConfigsMincapacitysat {
	uint64 value_int = 1;
	string source = 2;
	optional bool dynamic = 3;
}

message ListconfigsConfigsNetwork {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsOffline {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsPidfile {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsPlugin {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsPlugindir {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsProxy {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsRegtest {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsRequireconfirmedinputs {
	bool value_bool = 1;
	string source = 2;
}

message ListconfigsConfigsRescan {
	sint64 value_int = 1;
	string source = 2;
}

message ListconfigsConfigsRgb {
	bytes value_str = 1;
	string source = 2;
}

message ListconfigsConfigsRpcfile {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsRpcfilemode {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsSignet {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsSubdaemon {
	repeated string values_str = 1;
	repeated string sources = 2;
}

message ListconfigsConfigsTestnet {
	bool set = 1;
	string source = 2;
}

message ListconfigsConfigsTorservicepassword {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsWallet {
	string value_str = 1;
	string source = 2;
}

message ListconfigsConfigsWatchtimeblocks {
	uint32 value_int = 1;
	string source = 2;
}

message StopRequest {
}

message StopResponse {
	// Stop.result
	enum StopResult {
		SHUTDOWN_COMPLETE = 0;
	}
	StopResult result = 1;
}

message HelpRequest {
	optional string command = 1;
}

message HelpResponse {
	// Help.format-hint
	enum HelpFormathint {
		SIMPLE = 0;
	}
	repeated HelpHelp help = 1;
	optional HelpFormathint format_hint = 2;
}

message HelpHelp {
	string command = 1;
}

message PreapprovekeysendRequest {
	bytes destination = 1;
	bytes payment_hash = 2;
	Amount amount_msat = 3;
}

message PreapprovekeysendResponse {
}

message PreapproveinvoiceRequest {
	string bolt11 = 1;
}

message PreapproveinvoiceResponse {
}

message StaticbackupRequest {
}

message StaticbackupResponse {
	repeated bytes scb = 1;
}

message BkprchannelsapyRequest {
	optional uint64 start_time = 1;
	optional uint64 end_time = 2;
}

message BkprchannelsapyResponse {
	repeated BkprchannelsapyChannelsApy channels_apy = 1;
}

message BkprchannelsapyChannelsApy {
	string account = 1;
	Amount routed_out_msat = 2;
	Amount routed_in_msat = 3;
	Amount lease_fee_paid_msat = 4;
	Amount lease_fee_earned_msat = 5;
	Amount pushed_out_msat = 6;
	Amount pushed_in_msat = 7;
	Amount our_start_balance_msat = 8;
	Amount channel_start_balance_msat = 9;
	Amount fees_out_msat = 10;
	optional Amount fees_in_msat = 11;
	string utilization_out = 12;
	optional string utilization_out_initial = 13;
	string utilization_in = 14;
	optional string utilization_in_initial = 15;
	string apy_out = 16;
	optional string apy_out_initial = 17;
	string apy_in = 18;
	optional string apy_in_initial = 19;
	string apy_total = 20;
	optional string apy_total_initial = 21;
	optional string apy_lease = 22;
}

message BkprdumpincomecsvRequest {
	string csv_format = 1;
	optional string csv_file = 2;
	optional bool consolidate_fees = 3;
	optional uint64 start_time = 4;
	optional uint64 end_time = 5;
}

message BkprdumpincomecsvResponse {
	// Bkpr-DumpIncomeCsv.csv_format
	enum BkprdumpincomecsvCsvFormat {
		COINTRACKER = 0;
		KOINLY = 1;
		HARMONY = 2;
		QUICKBOOKS = 3;
	}
	string csv_file = 1;
	BkprdumpincomecsvCsvFormat csv_format = 2;
}

message BkprinspectRequest {
	string account = 1;
}

message BkprinspectResponse {
	repeated BkprinspectTxs txs = 1;
}

message BkprinspectTxs {
	bytes txid = 1;
	optional uint32 blockheight = 2;
	Amount fees_paid_msat = 3;
	repeated BkprinspectTxsOutputs outputs = 4;
}

message BkprinspectTxsOutputs {
	string account = 1;
	uint32 outnum = 2;
	Amount output_value_msat = 3;
	string currency = 4;
	optional Amount credit_msat = 5;
	optional Amount debit_msat = 6;
	optional string originating_account = 7;
	optional string output_tag = 8;
	optional string spend_tag = 9;
	optional bytes spending_txid = 10;
	optional bytes payment_id = 11;
}

message BkprlistaccounteventsRequest {
	optional string account = 1;
	optional string payment_id = 2;
}

message BkprlistaccounteventsResponse {
	repeated BkprlistaccounteventsEvents events = 1;
}

message BkprlistaccounteventsEvents {
	// Bkpr-ListAccountEvents.events[].type
	enum BkprlistaccounteventsEventsType {
		ONCHAIN_FEE = 0;
		CHAIN = 1;
		CHANNEL = 2;
	}
	string account = 1;
	BkprlistaccounteventsEventsType item_type = 2;
	string tag = 3;
	Amount credit_msat = 4;
	Amount debit_msat = 5;
	string currency = 6;
	uint32 timestamp = 7;
	optional string outpoint = 8;
	optional uint32 blockheight = 9;
	optional string origin = 10;
	optional bytes payment_id = 11;
	optional bytes txid = 12;
	optional string description = 13;
	optional Amount fees_msat = 14;
	optional bool is_rebalance = 15;
	optional uint32 part_id = 16;
	optional double currencyrate = 17;
}

message BkprlistbalancesRequest {
}

message BkprlistbalancesResponse {
	repeated BkprlistbalancesAccounts accounts = 1;
}

message BkprlistbalancesAccounts {
	string account = 1;
	repeated BkprlistbalancesAccountsBalances balances = 2;
	optional bytes peer_id = 3;
	optional bool we_opened = 4;
	optional bool account_closed = 5;
	optional bool account_resolved = 6;
	optional uint32 resolved_at_block = 7;
}

message BkprlistbalancesAccountsBalances {
	Amount balance_msat = 1;
	string coin_type = 2;
}

message BkprlistincomeRequest {
	optional bool consolidate_fees = 1;
	optional uint32 start_time = 2;
	optional uint32 end_time = 3;
}

message BkprlistincomeResponse {
	repeated BkprlistincomeIncomeEvents income_events = 1;
}

message BkprlistincomeIncomeEvents {
	string account = 1;
	string tag = 2;
	Amount credit_msat = 3;
	Amount debit_msat = 4;
	string currency = 5;
	uint32 timestamp = 6;
	optional string description = 7;
	optional string outpoint = 8;
	optional bytes txid = 9;
	optional bytes payment_id = 10;
}

message BkpreditdescriptionbypaymentidRequest {
	string payment_id = 1;
	string description = 2;
}

message BkpreditdescriptionbypaymentidResponse {
	repeated BkpreditdescriptionbypaymentidUpdated updated = 1;
}

message BkpreditdescriptionbypaymentidUpdated {
	// Bkpr-EditDescriptionByPaymentId.updated[].type
	enum BkpreditdescriptionbypaymentidUpdatedType {
		CHAIN = 0;
		CHANNEL = 1;
	}
	string account = 1;
	BkpreditdescriptionbypaymentidUpdatedType item_type = 2;
	string tag = 3;
	Amount credit_msat = 4;
	Amount debit_msat = 5;
	string currency = 6;
	uint32 timestamp = 7;
	string description = 8;
	optional string outpoint = 9;
	optional uint32 blockheight = 10;
	optional string origin = 11;
	optional bytes payment_id = 12;
	optional bytes txid = 13;
	optional Amount fees_msat = 14;
	optional bool is_rebalance = 15;
	optional uint32 part_id = 16;
}

message BkpreditdescriptionbyoutpointRequest {
	string outpoint = 1;
	string description = 2;
}

message BkpreditdescriptionbyoutpointResponse {
	repeated BkpreditdescriptionbyoutpointUpdated updated = 1;
}

message BkpreditdescriptionbyoutpointUpdated {
	// Bkpr-EditDescriptionByOutpoint.updated[].type
	enum BkpreditdescriptionbyoutpointUpdatedType {
		CHAIN = 0;
		CHANNEL = 1;
	}
	string account = 1;
	BkpreditdescriptionbyoutpointUpdatedType item_type = 2;
	string tag = 3;
	Amount credit_msat = 4;
	Amount debit_msat = 5;
	string currency = 6;
	uint32 timestamp = 7;
	string description = 8;
	optional string outpoint = 9;
	optional uint32 blockheight = 10;
	optional string origin = 11;
	optional bytes payment_id = 12;
	optional bytes txid = 13;
	optional Amount fees_msat = 14;
	optional bool is_rebalance = 15;
	optional uint32 part_id = 16;
}

message BkprreportRequest {
	optional string format = 1;
	repeated string headers = 2;
	optional string escape = 3;
	optional uint32 start_time = 4;
	optional uint32 end_time = 5;
}

message BkprreportResponse {
	repeated string report = 1;
}

message BlacklistruneRequest {
	optional uint64 start = 1;
	optional uint64 end = 2;
	optional bool relist = 3;
}

message BlacklistruneResponse {
	repeated BlacklistruneBlacklist blacklist = 1;
}

message BlacklistruneBlacklist {
	uint64 start = 1;
	uint64 end = 2;
}

message CheckruneRequest {
	string rune = 1;
	optional string nodeid = 2;
	optional string method = 3;
	repeated string params = 4;
}

message CheckruneResponse {
	bool valid = 1;
}

message CreateruneRequest {
	optional string rune = 1;
	repeated string restrictions = 2;
}

message CreateruneResponse {
	string rune = 1;
	string unique_id = 2;
	optional string warning_unrestricted_rune = 3;
}

message ShowrunesRequest {
	optional string rune = 1;
}

message ShowrunesResponse {
	repeated ShowrunesRunes runes = 1;
}

message ShowrunesRunes {
	string rune = 1;
	string unique_id = 2;
	repeated ShowrunesRunesRestrictions restrictions = 3;
	string restrictions_as_english = 4;
	optional bool stored = 5;
	optional bool blacklisted = 6;
	optional double last_used = 7;
	optional bool our_rune = 8;
}

message ShowrunesRunesRestrictions {
	repeated ShowrunesRunesRestrictionsAlternatives alternatives = 1;
	string english = 2;
}

message ShowrunesRunesRestrictionsAlternatives {
	string fieldname = 1;
	string value = 2;
	string condition = 3;
	string english = 4;
}

message AskreneunreserveRequest {
	repeated AskreneunreservePath path = 1;
	optional bool dev_remove_all = 2;
}

message AskreneunreserveResponse {
}

message AskreneunreservePath {
	Amount amount_msat = 3;
	string short_channel_id_dir = 4;
	optional string layer = 5;
}

message AskrenelistlayersRequest {
	optional string layer = 1;
}

message AskrenelistlayersResponse {
	repeated AskrenelistlayersLayers layers = 1;
}

message AskrenelistlayersLayers {
	string layer = 1;
	repeated bytes disabled_nodes = 2;
	repeated AskrenelistlayersLayersCreatedChannels created_channels = 3;
	repeated AskrenelistlayersLayersConstraints constraints = 4;
	bool persistent = 5;
	repeated string disabled_channels = 6;
	repeated AskrenelistlayersLayersChannelUpdates channel_updates = 7;
	repeated AskrenelistlayersLayersBiases biases = 8;
	repeated AskrenelistlayersLayersNodeBiases node_biases = 9;
}

message AskrenelistlayersLayersBiases {
	string short_channel_id_dir = 1;
	sint64 bias = 2;
	optional string description = 3;
	optional uint64 timestamp = 4;
}

message AskrenelistlayersLayersChannelUpdates {
	string short_channel_id_dir = 1;
	optional bool enabled = 2;
	optional Amount htlc_minimum_msat = 3;
	optional Amount htlc_maximum_msat = 4;
	optional Amount fee_base_msat = 5;
	optional uint32 fee_proportional_millionths = 6;
	optional uint32 cltv_expiry_delta = 7;
}

message AskrenelistlayersLayersConstraints {
	optional Amount maximum_msat = 3;
	optional Amount minimum_msat = 4;
	string short_channel_id_dir = 5;
	optional uint64 timestamp = 6;
}

message AskrenelistlayersLayersCreatedChannels {
	bytes source = 1;
	bytes destination = 2;
	string short_channel_id = 3;
	Amount capacity_msat = 4;
}

message AskrenelistlayersLayersNodeBiases {
	bytes node = 1;
	sint64 in_bias = 2;
	sint64 out_bias = 3;
	optional string description = 4;
	uint64 timestamp = 5;
}

message AskrenecreatelayerRequest {
	string layer = 1;
	optional bool persistent = 2;
}

message AskrenecreatelayerResponse {
	repeated AskrenecreatelayerLayers layers = 1;
}

message AskrenecreatelayerLayers {
	string layer = 1;
	bool persistent = 2;
	repeated bytes disabled_nodes = 3;
	repeated string disabled_channels = 4;
	repeated AskrenecreatelayerLayersCreatedChannels created_channels = 5;
	repeated AskrenecreatelayerLayersChannelUpdates channel_updates = 6;
	repeated AskrenecreatelayerLayersConstraints constraints = 7;
	repeated AskrenecreatelayerLayersBiases biases = 8;
	repeated AskrenecreatelayerLayersNodeBiases node_biases = 9;
}

message AskrenecreatelayerLayersBiases {
	string short_channel_id_dir = 1;
	sint64 bias = 2;
	optional string description = 3;
	optional uint64 timestamp = 4;
}

message AskrenecreatelayerLayersChannelUpdates {
	optional Amount htlc_minimum_msat = 1;
	optional Amount htlc_maximum_msat = 2;
	optional Amount fee_base_msat = 3;
	optional uint32 fee_proportional_millionths = 4;
	optional uint32 delay = 5;
}

message AskrenecreatelayerLayersConstraints {
	string short_channel_id = 1;
	uint32 direction = 2;
	optional Amount maximum_msat = 3;
	optional Amount minimum_msat = 4;
}

message AskrenecreatelayerLayersCreatedChannels {
	bytes source = 1;
	bytes destination = 2;
	string short_channel_id = 3;
	Amount capacity_msat = 4;
}

message AskrenecreatelayerLayersNodeBiases {
	bytes node = 1;
	sint64 in_bias = 2;
	sint64 out_bias = 3;
	optional string description = 4;
	uint64 timestamp = 5;
}

message AskreneremovelayerRequest {
	string layer = 1;
}

message AskreneremovelayerResponse {
}

message AskreneremovechannelupdateRequest {
	string layer = 1;
	string short_channel_id_dir = 2;
}

message AskreneremovechannelupdateResponse {
}

message AskrenereserveRequest {
	repeated AskrenereservePath path = 1;
}

message AskrenereserveResponse {
}

message AskrenereservePath {
	Amount amount_msat = 3;
	string short_channel_id_dir = 4;
	optional string layer = 5;
}

message AskreneageRequest {
	string layer = 1;
	uint64 cutoff = 2;
}

message AskreneageResponse {
	string layer = 1;
	uint64 num_removed = 2;
}

message GetroutesRequest {
	bytes source = 1;
	bytes destination = 2;
	Amount amount_msat = 3;
	repeated string layers = 4;
	Amount maxfee_msat = 5;
	uint32 final_cltv = 7;
	optional uint32 maxdelay = 8;
	optional uint32 maxparts = 9;
}

message GetroutesResponse {
	uint64 probability_ppm = 1;
	repeated GetroutesRoutes routes = 2;
}

message GetroutesRoutes {
	uint64 probability_ppm = 1;
	Amount amount_msat = 2;
	repeated GetroutesRoutesPath path = 3;
	uint32 final_cltv = 4;
}

message GetroutesRoutesPath {
	optional Amount amount_msat = 3 [deprecated = true];
	optional bytes next_node_id = 4 [deprecated = true];
	optional uint32 delay = 5 [deprecated = true];
	string short_channel_id_dir = 6;
	optional Amount amount_in_msat = 7;
	optional Amount amount_out_msat = 8;
	optional bytes node_id_in = 9;
	optional bytes node_id_out = 10;
	optional uint32 cltv_in = 11;
	optional uint32 cltv_out = 12;
}

message AskrenedisablenodeRequest {
	string layer = 1;
	bytes node = 2;
}

message AskrenedisablenodeResponse {
}

message AskreneinformchannelRequest {
	// AskRene-Inform-Channel.inform
	enum AskreneinformchannelInform {
		CONSTRAINED = 0;
		UNCONSTRAINED = 1;
		SUCCEEDED = 2;
	}
	string layer = 1;
	string short_channel_id_dir = 6;
	Amount amount_msat = 7;
	AskreneinformchannelInform inform = 8;
}

message AskreneinformchannelResponse {
	repeated AskreneinformchannelConstraints constraints = 2;
}

message AskreneinformchannelConstraints {
	string short_channel_id_dir = 1;
	string layer = 2;
	uint64 timestamp = 3;
	optional Amount maximum_msat = 4;
	optional Amount minimum_msat = 5;
}

message AskrenecreatechannelRequest {
	string layer = 1;
	bytes source = 2;
	bytes destination = 3;
	string short_channel_id = 4;
	Amount capacity_msat = 5;
}

message AskrenecreatechannelResponse {
}

message AskreneupdatechannelRequest {
	string layer = 1;
	string short_channel_id_dir = 2;
	optional bool enabled = 3;
	optional Amount htlc_minimum_msat = 4;
	optional Amount htlc_maximum_msat = 5;
	optional Amount fee_base_msat = 6;
	optional uint32 fee_proportional_millionths = 7;
	optional uint32 cltv_expiry_delta = 8;
}

message AskreneupdatechannelResponse {
}

message AskrenebiaschannelRequest {
	string layer = 1;
	string short_channel_id_dir = 2;
	sint64 bias = 3;
	optional string description = 4;
	optional bool relative = 5;
}

message AskrenebiaschannelResponse {
	repeated AskrenebiaschannelBiases biases = 1;
}

message AskrenebiaschannelBiases {
	string layer = 1;
	string short_channel_id_dir = 2;
	sint64 bias = 3;
	optional string description = 4;
	optional uint64 timestamp = 5;
}

message AskrenebiasnodeRequest {
	string layer = 1;
	bytes node = 2;
	string direction = 3;
	sint64 bias = 4;
	optional string description = 5;
	optional bool relative = 6;
}

message AskrenebiasnodeResponse {
	repeated AskrenebiasnodeNodeBiases node_biases = 1;
}

message AskrenebiasnodeNodeBiases {
	string layer = 1;
	bytes node = 2;
	sint64 in_bias = 3;
	sint64 out_bias = 4;
	optional string description = 5;
	uint64 timestamp = 6;
}

message AskrenelistreservationsRequest {
}

message AskrenelistreservationsResponse {
	repeated AskrenelistreservationsReservations reservations = 1;
}

message AskrenelistreservationsReservations {
	string short_channel_id_dir = 1;
	Amount amount_msat = 2;
	uint64 age_in_seconds = 3;
	string command_id = 4;
}

message InjectpaymentonionRequest {
	bytes onion = 1;
	bytes payment_hash = 2;
	Amount amount_msat = 3;
	uint32 cltv_expiry = 4;
	uint64 partid = 5;
	uint64 groupid = 6;
	optional string label = 7;
	optional string invstring = 8;
	optional bytes localinvreqid = 9;
	optional Amount destination_msat = 10;
	optional bytes destination = 11;
}

message InjectpaymentonionResponse {
	uint64 created_at = 1;
	uint64 completed_at = 2;
	uint64 created_index = 3;
	bytes payment_preimage = 4;
}

message InjectonionmessageRequest {
	bytes path_key = 1;
	bytes message = 2;
}

message InjectonionmessageResponse {
}

message XpayRequest {
	string invstring = 1;
	optional Amount amount_msat = 2;
	optional Amount maxfee = 3;
	repeated string layers = 4;
	optional uint32 retry_for = 5;
	optional Amount partial_msat = 6;
	optional uint32 maxdelay = 7;
	optional string payer_note = 8;
	optional string label = 9;
	optional bytes localinvreqid = 10;
	optional bool dev_use_shadow = 11;
}

message XpayResponse {
	bytes payment_preimage = 1;
	uint64 failed_parts = 2;
	uint64 successful_parts = 3;
	Amount amount_msat = 4;
	Amount amount_sent_msat = 5;
}

message SignmessagewithkeyRequest {
	string message = 1;
	string address = 2;
}

message SignmessagewithkeyResponse {
	string address = 1;
	bytes pubkey = 2;
	bytes signature = 3;
	string base64 = 4;
}

message ListchannelmovesRequest {
	// ListChannelMoves.index
	enum ListchannelmovesIndex {
		CREATED = 0;
	}
	optional ListchannelmovesIndex index = 1;
	optional uint64 start = 2;
	optional uint32 limit = 3;
}

message ListchannelmovesResponse {
	repeated ListchannelmovesChannelmoves channelmoves = 1;
}

message ListchannelmovesChannelmoves {
	// ListChannelMoves.channelmoves[].primary_tag
	enum ListchannelmovesChannelmovesPrimaryTag {
		INVOICE = 0;
		ROUTED = 1;
		PUSHED = 2;
		LEASE_FEE = 3;
		CHANNEL_PROPOSED = 4;
		PENALTY_ADJ = 5;
		JOURNAL_ENTRY = 6;
	}
	uint64 created_index = 1;
	string account_id = 2;
	Amount credit_msat = 3;
	Amount debit_msat = 4;
	uint64 timestamp = 5;
	ListchannelmovesChannelmovesPrimaryTag primary_tag = 6;
	optional bytes payment_hash = 7;
	optional uint64 part_id = 8;
	optional uint64 group_id = 9;
	Amount fees_msat = 10;
}

message ListchainmovesRequest {
	// ListChainMoves.index
	enum ListchainmovesIndex {
		CREATED = 0;
	}
	optional ListchainmovesIndex index = 1;
	optional uint64 start = 2;
	optional uint32 limit = 3;
}

message ListchainmovesResponse {
	repeated ListchainmovesChainmoves chainmoves = 1;
}

message ListchainmovesChainmoves {
	// ListChainMoves.chainmoves[].primary_tag
	enum ListchainmovesChainmovesPrimaryTag {
		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;
	}
	uint64 created_index = 1;
	string account_id = 2;
	Amount credit_msat = 3;
	Amount debit_msat = 4;
	uint64 timestamp = 5;
	ListchainmovesChainmovesPrimaryTag primary_tag = 6;
	optional bytes peer_id = 8;
	optional string originating_account = 9;
	optional bytes spending_txid = 10;
	Outpoint utxo = 11;
	optional bytes payment_hash = 12;
	Amount output_msat = 13;
	optional uint32 output_count = 14;
	uint32 blockheight = 15;
	repeated string extra_tags = 16;
}

message ListnetworkeventsRequest {
	// ListNetworkEvents.index
	enum ListnetworkeventsIndex {
		CREATED = 0;
	}
	optional string id = 1;
	optional ListnetworkeventsIndex index = 2;
	optional uint64 start = 3;
	optional uint32 limit = 4;
}

message ListnetworkeventsResponse {
	repeated ListnetworkeventsNetworkevents networkevents = 1;
}

message ListnetworkeventsNetworkevents {
	uint64 created_index = 1;
	uint64 timestamp = 2;
	bytes peer_id = 3;
	string item_type = 4;
	optional string reason = 5;
	optional uint64 duration_nsec = 6;
	optional bool connect_attempted = 7;
}

message DelnetworkeventRequest {
	uint64 created_index = 1;
}

message DelnetworkeventResponse {
}

message ClnrestregisterpathRequest {
	string path = 1;
	string rpc_method = 2;
	optional ClnrestregisterpathRuneRestrictions rune_restrictions = 3;
	optional bool rune_required = 4;
	optional string http_method = 5;
}

message ClnrestregisterpathResponse {
}

message ClnrestregisterpathRuneRestrictions {
	optional string nodeid = 1;
	optional string method = 2;
	map<string, string> params = 3;
}

message ListcurrencyratesRequest {
	string currency = 1;
}

message ListcurrencyratesResponse {
	repeated ListcurrencyratesCurrencyrates currencyrates = 1;
}

message ListcurrencyratesCurrencyrates {
	string source = 1;
	double amount = 2;
}

message CurrencyconvertRequest {
	double amount = 1;
	string currency = 2;
}

message CurrencyconvertResponse {
	Amount msat = 1;
}

message CurrencyrateRequest {
	string currency = 1;
	optional string source = 2;
}

message CurrencyrateResponse {
	double rate = 1;
}

message SendamountRequest {
	string invstring = 1;
	Amount amount_msat = 2;
	optional Amount maxfee = 3;
	repeated string layers = 4;
	optional uint32 retry_for = 5;
	optional uint32 maxdelay = 6;
	optional string payer_note = 7;
	optional string label = 8;
}

message SendamountResponse {
	bytes payment_preimage = 1;
	uint64 failed_parts = 2;
	uint64 successful_parts = 3;
	Amount amount_msat = 4;
	Amount amount_sent_msat = 5;
}

message CreateproofRequest {
	string invstring = 1;
	optional string note = 2;
	repeated ProofField include = 3;
}

message CreateproofResponse {
	repeated CreateproofProofs proofs = 1;
}

message CreateproofProofs {
	string bolt12 = 1;
	repeated ProofField offer_fields_included = 2;
	repeated ProofField invreq_fields_included = 3;
	repeated ProofField invoice_fields_included = 4;
}

message XkeysendRequest {
	bytes destination = 1;
	Amount amount_msat = 2;
	optional string label = 3;
	optional Amount maxfee = 4;
	repeated string layers = 5;
	optional uint32 retry_for = 6;
	optional uint32 maxdelay = 7;
	map<string, string> extratlvs = 8;
}

message XkeysendResponse {
	bytes payment_preimage = 1;
	uint64 failed_parts = 2;
	uint64 successful_parts = 3;
	Amount amount_msat = 4;
	Amount amount_sent_msat = 5;
}

message GracefulRequest {
	optional uint32 timeout = 1;
}

message GracefulResponse {
	repeated uint32 pending_htlc_expiries = 1;
	repeated bytes pending_peers = 2;
}

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 {
}

message BlockAddedNotification {
	bytes hash = 1;
	uint32 height = 2;
}

message StreamChannelOpenFailedRequest {
}

message ChannelOpenFailedNotification {
	bytes channel_id = 1;
}

message StreamChannelOpenedRequest {
}

message ChannelOpenedNotification {
	bytes id = 1;
	Amount funding_msat = 2;
	bytes funding_txid = 3;
	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 {
}

message PeerConnectNotification {
	// connect.direction
	enum PeerConnectDirection {
		IN = 0;
		OUT = 1;
	}
	bytes id = 1;
	PeerConnectDirection direction = 2;
	PeerConnectAddress address = 3;
}

message PeerConnectAddress {
	// connect.address.type
	enum PeerConnectAddressType {
		LOCAL_SOCKET = 0;
		IPV4 = 1;
		IPV6 = 2;
		TORV2 = 3;
		TORV3 = 4;
		WEBSOCKET = 5;
	}
	PeerConnectAddressType item_type = 1;
	optional string socket = 2;
	optional string address = 3;
	optional uint32 port = 4;
}

message StreamCoinMovementRequest {
}

message CoinMovementNotification {
	// 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;
	}
	// coin_movement.type
	enum CoinMovementType {
		CHANNEL_MVT = 0;
		CHAIN_MVT = 1;
	}
	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 [deprecated = true];
	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 [deprecated = true];
	optional bytes spending_txid = 21;
	optional bytes utxo_txid = 22 [deprecated = true];
	optional uint32 vout = 23 [deprecated = true];
	optional Amount output_msat = 24;
	optional uint32 output_count = 25;
	optional uint32 blockheight = 26;
}

message StreamCustomMsgRequest {
}

message CustomMsgNotification {
	bytes peer_id = 1;
	bytes payload = 2;
}

message StreamDeprecatedOneshotRequest {
}

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;
	}
	// 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;
}
