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 AutoCleanInvoice(AutocleaninvoiceRequest) returns (AutocleaninvoiceResponse) {}
	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 DelExpiredInvoice(DelexpiredinvoiceRequest) returns (DelexpiredinvoiceResponse) {}
	rpc DelInvoice(DelinvoiceRequest) returns (DelinvoiceResponse) {}
	rpc Invoice(InvoiceRequest) returns (InvoiceResponse) {}
	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 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 DecodePay(DecodepayRequest) returns (DecodepayResponse) {}
	rpc Decode(DecodeRequest) returns (DecodeResponse) {}
	rpc Disconnect(DisconnectRequest) returns (DisconnectResponse) {}
	rpc Feerates(FeeratesRequest) returns (FeeratesResponse) {}
	rpc FetchInvoice(FetchinvoiceRequest) returns (FetchinvoiceResponse) {}
	rpc FundChannel(FundchannelRequest) returns (FundchannelResponse) {}
	rpc GetRoute(GetrouteRequest) returns (GetrouteResponse) {}
	rpc ListForwards(ListforwardsRequest) returns (ListforwardsResponse) {}
	rpc ListPays(ListpaysRequest) returns (ListpaysResponse) {}
	rpc ListHtlcs(ListhtlcsRequest) returns (ListhtlcsResponse) {}
	rpc Ping(PingRequest) returns (PingResponse) {}
	rpc SendCustomMsg(SendcustommsgRequest) returns (SendcustommsgResponse) {}
	rpc SetChannel(SetchannelRequest) returns (SetchannelResponse) {}
	rpc SignInvoice(SigninvoiceRequest) returns (SigninvoiceResponse) {}
	rpc SignMessage(SignmessageRequest) returns (SignmessageResponse) {}
	rpc WaitBlockHeight(WaitblockheightRequest) returns (WaitblockheightResponse) {}
	rpc Wait(WaitRequest) returns (WaitResponse) {}
	rpc Stop(StopRequest) returns (StopResponse) {}
	rpc PreApproveKeysend(PreapprovekeysendRequest) returns (PreapprovekeysendResponse) {}
	rpc PreApproveInvoice(PreapproveinvoiceRequest) returns (PreapproveinvoiceResponse) {}
	rpc StaticBackup(StaticbackupRequest) returns (StaticbackupResponse) {}
}

message GetinfoRequest {
}

message GetinfoResponse {
	bytes id = 1;
	optional 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 GetinfoOur_features 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 GetinfoOur_features {
	bytes init = 1;
	bytes node = 2;
	bytes channel = 3;
	bytes invoice = 4;
}

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;
		WEBSOCKET = 5;
		IPV4 = 1;
		IPV6 = 2;
		TORV2 = 3;
		TORV3 = 4;
	}
	GetinfoBindingType item_type = 1;
	optional string address = 2;
	optional uint32 port = 3;
	optional string socket = 4;
}

message ListpeersRequest {
	optional bytes id = 1;
	optional string level = 2;
}

message ListpeersResponse {
	repeated ListpeersPeers peers = 1;
}

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

message ListpeersPeersLog {
	// ListPeers.peers[].log[].type
	enum ListpeersPeersLogType {
		SKIPPED = 0;
		BROKEN = 1;
		UNUSUAL = 2;
		INFO = 3;
		DEBUG = 4;
		IO_IN = 5;
		IO_OUT = 6;
	}
	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 ListpeersPeersChannels {
	// ListPeers.peers[].channels[].state
	enum ListpeersPeersChannelsState {
		OPENINGD = 0;
		CHANNELD_AWAITING_LOCKIN = 1;
		CHANNELD_NORMAL = 2;
		CHANNELD_SHUTTING_DOWN = 3;
		CLOSINGD_SIGEXCHANGE = 4;
		CLOSINGD_COMPLETE = 5;
		AWAITING_UNILATERAL = 6;
		FUNDING_SPEND_SEEN = 7;
		ONCHAIN = 8;
		DUALOPEND_OPEN_INIT = 9;
		DUALOPEND_AWAITING_LOCKIN = 10;
		DUALOPEND_OPEN_COMMITTED = 11;
		DUALOPEND_OPEN_COMMIT_READY = 12;
	}
	ListpeersPeersChannelsState state = 1;
	optional bytes scratch_txid = 2;
	optional ListpeersPeersChannelsFeerate feerate = 3;
	optional string owner = 4;
	optional string short_channel_id = 5;
	optional bytes channel_id = 6;
	optional bytes funding_txid = 7;
	optional uint32 funding_outnum = 8;
	optional string initial_feerate = 9;
	optional string last_feerate = 10;
	optional string next_feerate = 11;
	optional uint32 next_fee_step = 12;
	repeated ListpeersPeersChannelsInflight inflight = 13;
	optional bytes close_to = 14;
	optional bool private = 15;
	ChannelSide opener = 16;
	optional ChannelSide closer = 17;
	repeated string features = 18;
	optional ListpeersPeersChannelsFunding funding = 19;
	optional Amount to_us_msat = 20;
	optional Amount min_to_us_msat = 21;
	optional Amount max_to_us_msat = 22;
	optional Amount total_msat = 23;
	optional Amount fee_base_msat = 24;
	optional uint32 fee_proportional_millionths = 25;
	optional Amount dust_limit_msat = 26;
	optional Amount max_total_htlc_in_msat = 27;
	optional Amount their_reserve_msat = 28;
	optional Amount our_reserve_msat = 29;
	optional Amount spendable_msat = 30;
	optional Amount receivable_msat = 31;
	optional Amount minimum_htlc_in_msat = 32;
	optional Amount minimum_htlc_out_msat = 48;
	optional Amount maximum_htlc_out_msat = 49;
	optional uint32 their_to_self_delay = 33;
	optional uint32 our_to_self_delay = 34;
	optional uint32 max_accepted_htlcs = 35;
	optional ListpeersPeersChannelsAlias alias = 50;
	repeated string status = 37;
	optional uint64 in_payments_offered = 38;
	optional Amount in_offered_msat = 39;
	optional uint64 in_payments_fulfilled = 40;
	optional Amount in_fulfilled_msat = 41;
	optional uint64 out_payments_offered = 42;
	optional Amount out_offered_msat = 43;
	optional uint64 out_payments_fulfilled = 44;
	optional Amount out_fulfilled_msat = 45;
	repeated ListpeersPeersChannelsHtlcs htlcs = 46;
	optional string close_to_addr = 47;
}

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

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

message ListpeersPeersChannelsFunding {
	optional Amount pushed_msat = 3;
	Amount local_funds_msat = 4;
	Amount remote_funds_msat = 7;
	optional Amount fee_paid_msat = 5;
	optional Amount fee_rcvd_msat = 6;
}

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

message ListpeersPeersChannelsHtlcs {
	// ListPeers.peers[].channels[].htlcs[].direction
	enum ListpeersPeersChannelsHtlcsDirection {
		IN = 0;
		OUT = 1;
	}
	ListpeersPeersChannelsHtlcsDirection 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 ListfundsRequest {
	optional bool spent = 1;
}

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

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;
	bool reserved = 9;
	optional uint32 blockheight = 8;
}

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 bytes channel_id = 9;
	optional string short_channel_id = 8;
}

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

message SendpayResponse {
	// SendPay.status
	enum SendpayStatus {
		PENDING = 0;
		COMPLETE = 1;
	}
	optional uint64 created_index = 16;
	optional uint64 updated_index = 17;
	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;
	optional uint64 completed_at = 15;
	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;
}

message SendpayRoute {
	Amount amount_msat = 5;
	bytes id = 2;
	uint32 delay = 3;
	string channel = 4;
}

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;
	uint32 direction = 16;
	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;
}

message AddgossipRequest {
	bytes message = 1;
}

message AddgossipResponse {
}

message AutocleaninvoiceRequest {
	optional uint64 expired_by = 1;
	optional uint64 cycle_seconds = 2;
}

message AutocleaninvoiceResponse {
	bool enabled = 1;
	optional uint64 expired_by = 2;
	optional uint64 cycle_seconds = 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;
	optional bytes tx = 2;
	optional bytes txid = 3;
}

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 created_index = 16;
	optional uint64 pay_index = 9;
	optional Amount amount_received_msat = 10;
	optional uint64 paid_at = 11;
	optional CreateinvoicePaid_outpoint paid_outpoint = 17;
	optional bytes payment_preimage = 12;
	optional bytes local_offer_id = 13;
	optional string invreq_payer_note = 15;
}

message CreateinvoicePaid_outpoint {
	optional bytes txid = 1;
	optional 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;
	}
	repeated string key = 5;
	optional string string = 6;
	optional bytes hex = 2;
	optional DatastoreMode mode = 3;
	optional uint64 generation = 4;
}

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

message DatastoreusageRequest {
}

message DatastoreusageResponse {
	optional DatastoreusageDatastoreusage datastoreusage = 1;
}

message DatastoreusageDatastoreusage {
	optional string key = 1;
	optional 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 {
	repeated string key = 3;
	optional uint64 generation = 2;
}

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

message DelexpiredinvoiceRequest {
	optional uint64 maxexpirytime = 1;
}

message DelexpiredinvoiceResponse {
}

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;
	optional uint64 created_index = 12;
	optional uint64 updated_index = 13;
	DelinvoiceStatus status = 7;
	uint64 expires_at = 8;
	optional bytes local_offer_id = 9;
	optional string invreq_payer_note = 11;
}

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

message InvoiceResponse {
	string bolt11 = 1;
	bytes payment_hash = 2;
	bytes payment_secret = 3;
	uint64 expires_at = 4;
	optional uint64 created_index = 10;
	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;
}

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 string invreq_payer_note = 15;
	optional uint64 created_index = 16;
	optional uint64 updated_index = 17;
	optional uint64 pay_index = 11;
	optional Amount amount_received_msat = 12;
	optional uint64 paid_at = 13;
	optional ListinvoicesInvoicesPaid_outpoint paid_outpoint = 18;
	optional bytes payment_preimage = 14;
}

message ListinvoicesInvoicesPaid_outpoint {
	optional bytes txid = 1;
	optional uint32 outnum = 2;
}

message SendonionRequest {
	bytes onion = 1;
	SendonionFirst_hop 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 Amount amount_msat = 12;
	optional bytes destination = 9;
	optional bytes localinvreqid = 13;
	optional uint64 groupid = 11;
}

message SendonionResponse {
	// SendOnion.status
	enum SendonionStatus {
		PENDING = 0;
		COMPLETE = 1;
	}
	optional uint64 created_index = 14;
	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 uint64 partid = 13;
	optional uint64 updated_index = 15;
	optional bytes payment_preimage = 11;
	optional string message = 12;
}

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

message ListsendpaysRequest {
	// ListSendPays.status
	enum ListsendpaysStatus {
		PENDING = 0;
		COMPLETE = 1;
		FAILED = 2;
	}
	// ListSendPays.index
	enum ListsendpaysIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	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;
	}
	optional uint64 created_index = 16;
	uint64 id = 1;
	uint64 groupid = 2;
	optional uint64 partid = 15;
	bytes payment_hash = 3;
	optional uint64 updated_index = 17;
	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 description = 14;
	optional string bolt12 = 11;
	optional bytes payment_preimage = 12;
	optional bytes erroronion = 13;
}

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;
	Amount amount_msat = 6;
	bytes scriptPubKey = 3;
}

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

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

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

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 WaitanyinvoiceRequest {
	optional uint64 lastpay_index = 1;
	optional uint64 timeout = 2;
}

message WaitanyinvoiceResponse {
	// WaitAnyInvoice.status
	enum WaitanyinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
	}
	string label = 1;
	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 created_index = 13;
	optional uint64 updated_index = 14;
	optional uint64 pay_index = 9;
	optional Amount amount_received_msat = 10;
	optional uint64 paid_at = 11;
	optional WaitanyinvoicePaid_outpoint paid_outpoint = 15;
	optional bytes payment_preimage = 12;
}

message WaitanyinvoicePaid_outpoint {
	optional bytes txid = 1;
	optional uint32 outnum = 2;
}

message WaitinvoiceRequest {
	string label = 1;
}

message WaitinvoiceResponse {
	// WaitInvoice.status
	enum WaitinvoiceStatus {
		PAID = 0;
		EXPIRED = 1;
	}
	string label = 1;
	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 created_index = 13;
	optional uint64 updated_index = 14;
	optional uint64 pay_index = 9;
	optional Amount amount_received_msat = 10;
	optional uint64 paid_at = 11;
	optional WaitinvoicePaid_outpoint paid_outpoint = 15;
	optional bytes payment_preimage = 12;
}

message WaitinvoicePaid_outpoint {
	optional bytes txid = 1;
	optional uint32 outnum = 2;
}

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

message WaitsendpayResponse {
	// WaitSendPay.status
	enum WaitsendpayStatus {
		COMPLETE = 0;
	}
	optional uint64 created_index = 15;
	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;
	optional uint64 updated_index = 16;
	optional double completed_at = 14;
	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;
}

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

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

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

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

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

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

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 bool 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 {
	Amount satoshi = 1;
	Feerate feerate = 2;
	uint32 startweight = 3;
	repeated Outpoint utxos = 4;
	optional uint32 reserve = 5;
	optional bool reservedok = 8;
	optional uint32 locktime = 6;
	optional uint32 min_witness_weight = 7;
	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 {
	repeated OutputDesc outputs = 5;
	optional Feerate feerate = 2;
	optional uint32 minconf = 3;
	repeated Outpoint utxos = 4;
}

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

message ListpeerchannelsResponse {
	repeated ListpeerchannelsChannels channels = 1;
}

message ListpeerchannelsChannels {
	// ListPeerChannels.channels[].state
	enum ListpeerchannelsChannelsState {
		OPENINGD = 0;
		CHANNELD_AWAITING_LOCKIN = 1;
		CHANNELD_NORMAL = 2;
		CHANNELD_SHUTTING_DOWN = 3;
		CLOSINGD_SIGEXCHANGE = 4;
		CLOSINGD_COMPLETE = 5;
		AWAITING_UNILATERAL = 6;
		FUNDING_SPEND_SEEN = 7;
		ONCHAIN = 8;
		DUALOPEND_OPEN_INIT = 9;
		DUALOPEND_AWAITING_LOCKIN = 10;
		CHANNELD_AWAITING_SPLICE = 11;
		DUALOPEND_OPEN_COMMITTED = 12;
		DUALOPEND_OPEN_COMMIT_READY = 13;
	}
	optional bytes peer_id = 1;
	optional bool peer_connected = 2;
	optional ListpeerchannelsChannelsState state = 3;
	optional bytes scratch_txid = 4;
	optional bool ignore_fee_limits = 54;
	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;
	optional 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 max_total_htlc_in_msat = 30;
	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 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;
}

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

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

message ListpeerchannelsChannelsFunding {
	optional Amount pushed_msat = 1;
	optional Amount local_funds_msat = 2;
	optional Amount remote_funds_msat = 3;
	optional Amount fee_paid_msat = 4;
	optional Amount fee_rcvd_msat = 5;
}

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

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

message ListclosedchannelsRequest {
	optional bytes id = 1;
}

message ListclosedchannelsResponse {
	repeated ListclosedchannelsClosedchannels closedchannels = 1;
}

message ListclosedchannelsClosedchannels {
	// ListClosedChannels.closedchannels[].close_cause
	enum ListclosedchannelsClosedchannelsClose_cause {
		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;
	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;
	ListclosedchannelsClosedchannelsClose_cause close_cause = 24;
}

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

message DecodepayRequest {
	string bolt11 = 1;
	optional string description = 2;
}

message DecodepayResponse {
	string currency = 1;
	uint64 created_at = 2;
	uint64 expiry = 3;
	bytes payee = 4;
	optional Amount amount_msat = 5;
	bytes payment_hash = 6;
	string signature = 7;
	optional string description = 8;
	optional bytes description_hash = 9;
	uint32 min_final_cltv_expiry = 10;
	optional bytes payment_secret = 11;
	optional bytes features = 12;
	optional bytes payment_metadata = 13;
	repeated DecodepayFallbacks fallbacks = 14;
	repeated DecodepayExtra extra = 16;
}

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

message DecodepayExtra {
	string tag = 1;
	string data = 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;
	}
	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 DecodeOffer_paths offer_paths = 16;
	optional bytes offer_node_id = 17;
	optional string warning_missing_offer_node_id = 20;
	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;
	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;
	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 DecodeInvoice_fallbacks invoice_fallbacks = 45;
	optional bytes invoice_features = 46;
	optional bytes invoice_node_id = 47;
	optional uint64 invoice_recurrence_basetime = 48;
	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;
}

message DecodeOffer_paths {
	bytes first_node_id = 1;
	bytes blinding = 2;
}

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

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

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

message DecodeFallbacks {
	optional string warning_invoice_fallbacks_version_invalid = 1;
}

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

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

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 FeeratesOnchain_fee_estimates onchain_fee_estimates = 4;
}

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

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

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

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

message FeeratesOnchain_fee_estimates {
	uint64 opening_channel_satoshis = 1;
	uint64 mutual_close_satoshis = 2;
	uint64 unilateral_close_satoshis = 3;
	optional uint64 unilateral_close_nonanchor_satoshis = 6;
	uint64 htlc_timeout_satoshis = 4;
	uint64 htlc_success_satoshis = 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;
}

message FetchinvoiceResponse {
	string invoice = 1;
	FetchinvoiceChanges changes = 2;
	optional FetchinvoiceNext_period 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 FetchinvoiceNext_period {
	uint64 counter = 1;
	uint64 starttime = 2;
	uint64 endtime = 3;
	uint64 paywindow_start = 4;
	uint64 paywindow_end = 5;
}

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

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

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

message GetrouteResponse {
	repeated GetrouteRoute route = 1;
}

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

message ListforwardsRequest {
	// ListForwards.status
	enum ListforwardsStatus {
		OFFERED = 0;
		SETTLED = 1;
		LOCAL_FAILED = 2;
		FAILED = 3;
	}
	// ListForwards.index
	enum ListforwardsIndex {
		CREATED = 0;
		UPDATED = 1;
	}
	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;
	}
	optional uint64 created_index = 12;
	string in_channel = 1;
	optional uint64 in_htlc_id = 10;
	Amount in_msat = 2;
	ListforwardsForwardsStatus status = 3;
	double received_time = 4;
	optional string out_channel = 5;
	optional uint64 out_htlc_id = 11;
	optional uint64 updated_index = 13;
	optional ListforwardsForwardsStyle style = 9;
	optional Amount fee_msat = 7;
	optional Amount out_msat = 8;
}

message ListpaysRequest {
	// ListPays.status
	enum ListpaysStatus {
		PENDING = 0;
		COMPLETE = 1;
		FAILED = 2;
	}
	optional string bolt11 = 1;
	optional bytes payment_hash = 2;
	optional ListpaysStatus status = 3;
}

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 uint64 completed_at = 12;
	optional string label = 5;
	optional string bolt11 = 6;
	optional string description = 11;
	optional string bolt12 = 7;
	optional Amount amount_msat = 8;
	optional Amount amount_sent_msat = 9;
	optional bytes preimage = 13;
	optional uint64 number_of_parts = 14;
	optional bytes erroronion = 10;
}

message ListhtlcsRequest {
	optional string id = 1;
}

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

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

message PingResponse {
	uint32 totlen = 1;
}

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

message SendcustommsgResponse {
	string status = 1;
}

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;
	optional bool ignore_fee_limits = 10;
	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;
}

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 WaitblockheightRequest {
	uint32 blockheight = 1;
	optional uint32 timeout = 2;
}

message WaitblockheightResponse {
	uint32 blockheight = 1;
}

message WaitRequest {
	// Wait.subsystem
	enum WaitSubsystem {
		INVOICES = 0;
		FORWARDS = 1;
		SENDPAYS = 2;
	}
	// Wait.indexname
	enum WaitIndexname {
		CREATED = 0;
		UPDATED = 1;
		DELETED = 2;
	}
	WaitSubsystem subsystem = 1;
	WaitIndexname indexname = 2;
	uint64 nextvalue = 3;
}

message WaitResponse {
	// Wait.subsystem
	enum WaitSubsystem {
		INVOICES = 0;
		FORWARDS = 1;
		SENDPAYS = 2;
	}
	WaitSubsystem subsystem = 1;
	optional uint64 created = 2;
	optional uint64 updated = 3;
	optional uint64 deleted = 4;
}

message StopRequest {
}

message StopResponse {
}

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

message PreapprovekeysendResponse {
}

message PreapproveinvoiceRequest {
	optional string bolt11 = 1;
}

message PreapproveinvoiceResponse {
}

message StaticbackupRequest {
}

message StaticbackupResponse {
	repeated bytes scb = 1;
}
