lnrpc: split off channel info from ListPeers into new ListChannels RPC

This commit extracts the channel information that was previously
returned within the ListPeers command to a new RPC command:
ListChannels. Additionally, any pending HTLC’s within the open channel
are also displayed.
This commit is contained in:
Olaoluwa Osuntokun 2016-09-25 20:02:33 -07:00
parent 0b841ec686
commit 68c4f0432e
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
2 changed files with 221 additions and 164 deletions

@ -23,6 +23,8 @@ It has these top-level messages:
ConnectPeerResponse ConnectPeerResponse
HTLC HTLC
ActiveChannel ActiveChannel
ListChannelsRequest
ListChannelsResponse
Peer Peer
ListPeersRequest ListPeersRequest
ListPeersResponse ListPeersResponse
@ -251,10 +253,11 @@ func (*ConnectPeerResponse) ProtoMessage() {}
func (*ConnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (*ConnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
type HTLC struct { type HTLC struct {
Id int64 `protobuf:"varint,1,opt,name=id" json:"id,omitempty"` Incoming bool `protobuf:"varint,1,opt,name=incoming" json:"incoming,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"` Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"`
HashLock []byte `protobuf:"bytes,3,opt,name=hash_lock,proto3" json:"hash_lock,omitempty"` HashLock []byte `protobuf:"bytes,3,opt,name=hash_lock,proto3" json:"hash_lock,omitempty"`
ToUs bool `protobuf:"varint,4,opt,name=to_us" json:"to_us,omitempty"` ExpirationHeight uint32 `protobuf:"varint,4,opt,name=expiration_height" json:"expiration_height,omitempty"`
RevocationDelay uint32 `protobuf:"varint,5,opt,name=revocation_delay" json:"revocation_delay,omitempty"`
} }
func (m *HTLC) Reset() { *m = HTLC{} } func (m *HTLC) Reset() { *m = HTLC{} }
@ -263,13 +266,12 @@ func (*HTLC) ProtoMessage() {}
func (*HTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (*HTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
type ActiveChannel struct { type ActiveChannel struct {
// TODO(roasbeef): make channel points a string everywhere in rpc? RemotePubkey string `protobuf:"bytes,1,opt,name=remote_pubkey" json:"remote_pubkey,omitempty"`
RemoteId string `protobuf:"bytes,1,opt,name=remote_id" json:"remote_id,omitempty"`
ChannelPoint string `protobuf:"bytes,2,opt,name=channel_point" json:"channel_point,omitempty"` ChannelPoint string `protobuf:"bytes,2,opt,name=channel_point" json:"channel_point,omitempty"`
Capacity int64 `protobuf:"varint,3,opt,name=capacity" json:"capacity,omitempty"` Capacity int64 `protobuf:"varint,3,opt,name=capacity" json:"capacity,omitempty"`
LocalBalance int64 `protobuf:"varint,4,opt,name=local_balance" json:"local_balance,omitempty"` LocalBalance int64 `protobuf:"varint,4,opt,name=local_balance" json:"local_balance,omitempty"`
RemoteBalance int64 `protobuf:"varint,5,opt,name=remote_balance" json:"remote_balance,omitempty"` RemoteBalance int64 `protobuf:"varint,5,opt,name=remote_balance" json:"remote_balance,omitempty"`
UnsettledBelance int64 `protobuf:"varint,6,opt,name=unsettled_belance" json:"unsettled_belance,omitempty"` UnsettledBalance int64 `protobuf:"varint,6,opt,name=unsettled_balance" json:"unsettled_balance,omitempty"`
PendingHtlcs []*HTLC `protobuf:"bytes,7,rep,name=pending_htlcs" json:"pending_htlcs,omitempty"` PendingHtlcs []*HTLC `protobuf:"bytes,7,rep,name=pending_htlcs" json:"pending_htlcs,omitempty"`
NumUpdates uint64 `protobuf:"varint,8,opt,name=num_updates" json:"num_updates,omitempty"` NumUpdates uint64 `protobuf:"varint,8,opt,name=num_updates" json:"num_updates,omitempty"`
} }
@ -286,6 +288,30 @@ func (m *ActiveChannel) GetPendingHtlcs() []*HTLC {
return nil return nil
} }
type ListChannelsRequest struct {
}
func (m *ListChannelsRequest) Reset() { *m = ListChannelsRequest{} }
func (m *ListChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ListChannelsRequest) ProtoMessage() {}
func (*ListChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
type ListChannelsResponse struct {
Channels []*ActiveChannel `protobuf:"bytes,9,rep,name=channels" json:"channels,omitempty"`
}
func (m *ListChannelsResponse) Reset() { *m = ListChannelsResponse{} }
func (m *ListChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ListChannelsResponse) ProtoMessage() {}
func (*ListChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (m *ListChannelsResponse) GetChannels() []*ActiveChannel {
if m != nil {
return m.Channels
}
return nil
}
type Peer struct { type Peer struct {
LightningId string `protobuf:"bytes,1,opt,name=lightning_id" json:"lightning_id,omitempty"` LightningId string `protobuf:"bytes,1,opt,name=lightning_id" json:"lightning_id,omitempty"`
PeerId int32 `protobuf:"varint,2,opt,name=peer_id" json:"peer_id,omitempty"` PeerId int32 `protobuf:"varint,2,opt,name=peer_id" json:"peer_id,omitempty"`
@ -295,21 +321,12 @@ type Peer struct {
SatSent int64 `protobuf:"varint,6,opt,name=sat_sent" json:"sat_sent,omitempty"` SatSent int64 `protobuf:"varint,6,opt,name=sat_sent" json:"sat_sent,omitempty"`
SatRecv int64 `protobuf:"varint,7,opt,name=sat_recv" json:"sat_recv,omitempty"` SatRecv int64 `protobuf:"varint,7,opt,name=sat_recv" json:"sat_recv,omitempty"`
Inbound bool `protobuf:"varint,8,opt,name=inbound" json:"inbound,omitempty"` Inbound bool `protobuf:"varint,8,opt,name=inbound" json:"inbound,omitempty"`
// TODO(roasbeef): add pending channels
Channels []*ActiveChannel `protobuf:"bytes,9,rep,name=channels" json:"channels,omitempty"`
} }
func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) Reset() { *m = Peer{} }
func (m *Peer) String() string { return proto.CompactTextString(m) } func (m *Peer) String() string { return proto.CompactTextString(m) }
func (*Peer) ProtoMessage() {} func (*Peer) ProtoMessage() {}
func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (m *Peer) GetChannels() []*ActiveChannel {
if m != nil {
return m.Channels
}
return nil
}
type ListPeersRequest struct { type ListPeersRequest struct {
} }
@ -317,7 +334,7 @@ type ListPeersRequest struct {
func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} } func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} }
func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) } func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) }
func (*ListPeersRequest) ProtoMessage() {} func (*ListPeersRequest) ProtoMessage() {}
func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
type ListPeersResponse struct { type ListPeersResponse struct {
Peers []*Peer `protobuf:"bytes,1,rep,name=peers" json:"peers,omitempty"` Peers []*Peer `protobuf:"bytes,1,rep,name=peers" json:"peers,omitempty"`
@ -326,7 +343,7 @@ type ListPeersResponse struct {
func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} } func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} }
func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) } func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) }
func (*ListPeersResponse) ProtoMessage() {} func (*ListPeersResponse) ProtoMessage() {}
func (*ListPeersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (*ListPeersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (m *ListPeersResponse) GetPeers() []*Peer { func (m *ListPeersResponse) GetPeers() []*Peer {
if m != nil { if m != nil {
@ -341,7 +358,7 @@ type GetInfoRequest struct {
func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} } func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} }
func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) } func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) }
func (*GetInfoRequest) ProtoMessage() {} func (*GetInfoRequest) ProtoMessage() {}
func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
type GetInfoResponse struct { type GetInfoResponse struct {
LightningId string `protobuf:"bytes,1,opt,name=lightning_id" json:"lightning_id,omitempty"` LightningId string `protobuf:"bytes,1,opt,name=lightning_id" json:"lightning_id,omitempty"`
@ -355,7 +372,7 @@ type GetInfoResponse struct {
func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} } func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} }
func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) } func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) }
func (*GetInfoResponse) ProtoMessage() {} func (*GetInfoResponse) ProtoMessage() {}
func (*GetInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (*GetInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
type ConfirmationUpdate struct { type ConfirmationUpdate struct {
BlockSha []byte `protobuf:"bytes,1,opt,name=block_sha,proto3" json:"block_sha,omitempty"` BlockSha []byte `protobuf:"bytes,1,opt,name=block_sha,proto3" json:"block_sha,omitempty"`
@ -366,7 +383,7 @@ type ConfirmationUpdate struct {
func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} } func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} }
func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) } func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) }
func (*ConfirmationUpdate) ProtoMessage() {} func (*ConfirmationUpdate) ProtoMessage() {}
func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
type ChannelOpenUpdate struct { type ChannelOpenUpdate struct {
ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point" json:"channel_point,omitempty"` ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point" json:"channel_point,omitempty"`
@ -375,7 +392,7 @@ type ChannelOpenUpdate struct {
func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} } func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} }
func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelOpenUpdate) ProtoMessage() {} func (*ChannelOpenUpdate) ProtoMessage() {}
func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (m *ChannelOpenUpdate) GetChannelPoint() *ChannelPoint { func (m *ChannelOpenUpdate) GetChannelPoint() *ChannelPoint {
if m != nil { if m != nil {
@ -392,7 +409,7 @@ type ChannelCloseUpdate struct {
func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} } func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} }
func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseUpdate) ProtoMessage() {} func (*ChannelCloseUpdate) ProtoMessage() {}
func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
type CloseChannelRequest struct { type CloseChannelRequest struct {
ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point" json:"channel_point,omitempty"` ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point" json:"channel_point,omitempty"`
@ -403,7 +420,7 @@ type CloseChannelRequest struct {
func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} } func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} }
func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) } func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) }
func (*CloseChannelRequest) ProtoMessage() {} func (*CloseChannelRequest) ProtoMessage() {}
func (*CloseChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (*CloseChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (m *CloseChannelRequest) GetChannelPoint() *ChannelPoint { func (m *CloseChannelRequest) GetChannelPoint() *ChannelPoint {
if m != nil { if m != nil {
@ -423,7 +440,7 @@ type CloseStatusUpdate struct {
func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} } func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} }
func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) } func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*CloseStatusUpdate) ProtoMessage() {} func (*CloseStatusUpdate) ProtoMessage() {}
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
type isCloseStatusUpdate_Update interface { type isCloseStatusUpdate_Update interface {
isCloseStatusUpdate_Update() isCloseStatusUpdate_Update()
@ -571,7 +588,7 @@ type PendingUpdate struct {
func (m *PendingUpdate) Reset() { *m = PendingUpdate{} } func (m *PendingUpdate) Reset() { *m = PendingUpdate{} }
func (m *PendingUpdate) String() string { return proto.CompactTextString(m) } func (m *PendingUpdate) String() string { return proto.CompactTextString(m) }
func (*PendingUpdate) ProtoMessage() {} func (*PendingUpdate) ProtoMessage() {}
func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
type OpenChannelRequest struct { type OpenChannelRequest struct {
TargetPeerId int32 `protobuf:"varint,1,opt,name=target_peer_id" json:"target_peer_id,omitempty"` TargetPeerId int32 `protobuf:"varint,1,opt,name=target_peer_id" json:"target_peer_id,omitempty"`
@ -585,7 +602,7 @@ type OpenChannelRequest struct {
func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} } func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) } func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) }
func (*OpenChannelRequest) ProtoMessage() {} func (*OpenChannelRequest) ProtoMessage() {}
func (*OpenChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (*OpenChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
type OpenStatusUpdate struct { type OpenStatusUpdate struct {
// Types that are valid to be assigned to Update: // Types that are valid to be assigned to Update:
@ -598,7 +615,7 @@ type OpenStatusUpdate struct {
func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} } func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} }
func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) } func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*OpenStatusUpdate) ProtoMessage() {} func (*OpenStatusUpdate) ProtoMessage() {}
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
type isOpenStatusUpdate_Update interface { type isOpenStatusUpdate_Update interface {
isOpenStatusUpdate_Update() isOpenStatusUpdate_Update()
@ -746,7 +763,7 @@ type PendingChannelRequest struct {
func (m *PendingChannelRequest) Reset() { *m = PendingChannelRequest{} } func (m *PendingChannelRequest) Reset() { *m = PendingChannelRequest{} }
func (m *PendingChannelRequest) String() string { return proto.CompactTextString(m) } func (m *PendingChannelRequest) String() string { return proto.CompactTextString(m) }
func (*PendingChannelRequest) ProtoMessage() {} func (*PendingChannelRequest) ProtoMessage() {}
func (*PendingChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (*PendingChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
type PendingChannelResponse struct { type PendingChannelResponse struct {
PendingChannels []*PendingChannelResponse_PendingChannel `protobuf:"bytes,1,rep,name=pending_channels" json:"pending_channels,omitempty"` PendingChannels []*PendingChannelResponse_PendingChannel `protobuf:"bytes,1,rep,name=pending_channels" json:"pending_channels,omitempty"`
@ -755,7 +772,7 @@ type PendingChannelResponse struct {
func (m *PendingChannelResponse) Reset() { *m = PendingChannelResponse{} } func (m *PendingChannelResponse) Reset() { *m = PendingChannelResponse{} }
func (m *PendingChannelResponse) String() string { return proto.CompactTextString(m) } func (m *PendingChannelResponse) String() string { return proto.CompactTextString(m) }
func (*PendingChannelResponse) ProtoMessage() {} func (*PendingChannelResponse) ProtoMessage() {}
func (*PendingChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (*PendingChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *PendingChannelResponse) GetPendingChannels() []*PendingChannelResponse_PendingChannel { func (m *PendingChannelResponse) GetPendingChannels() []*PendingChannelResponse_PendingChannel {
if m != nil { if m != nil {
@ -779,7 +796,7 @@ func (m *PendingChannelResponse_PendingChannel) Reset() { *m = PendingCh
func (m *PendingChannelResponse_PendingChannel) String() string { return proto.CompactTextString(m) } func (m *PendingChannelResponse_PendingChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelResponse_PendingChannel) ProtoMessage() {} func (*PendingChannelResponse_PendingChannel) ProtoMessage() {}
func (*PendingChannelResponse_PendingChannel) Descriptor() ([]byte, []int) { func (*PendingChannelResponse_PendingChannel) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{28, 0} return fileDescriptor0, []int{30, 0}
} }
type WalletBalanceRequest struct { type WalletBalanceRequest struct {
@ -789,7 +806,7 @@ type WalletBalanceRequest struct {
func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} } func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} }
func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceRequest) ProtoMessage() {} func (*WalletBalanceRequest) ProtoMessage() {}
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
type WalletBalanceResponse struct { type WalletBalanceResponse struct {
Balance float64 `protobuf:"fixed64,1,opt,name=balance" json:"balance,omitempty"` Balance float64 `protobuf:"fixed64,1,opt,name=balance" json:"balance,omitempty"`
@ -798,7 +815,7 @@ type WalletBalanceResponse struct {
func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} } func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) } func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceResponse) ProtoMessage() {} func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
type ChannelBalanceRequest struct { type ChannelBalanceRequest struct {
} }
@ -806,7 +823,7 @@ type ChannelBalanceRequest struct {
func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} } func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} }
func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceRequest) ProtoMessage() {} func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
type ChannelBalanceResponse struct { type ChannelBalanceResponse struct {
Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"` Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"`
@ -815,7 +832,7 @@ type ChannelBalanceResponse struct {
func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{} } func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{} }
func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) } func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceResponse) ProtoMessage() {} func (*ChannelBalanceResponse) ProtoMessage() {}
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
type RoutingTableLink struct { type RoutingTableLink struct {
Id1 string `protobuf:"bytes,1,opt,name=id1" json:"id1,omitempty"` Id1 string `protobuf:"bytes,1,opt,name=id1" json:"id1,omitempty"`
@ -828,7 +845,7 @@ type RoutingTableLink struct {
func (m *RoutingTableLink) Reset() { *m = RoutingTableLink{} } func (m *RoutingTableLink) Reset() { *m = RoutingTableLink{} }
func (m *RoutingTableLink) String() string { return proto.CompactTextString(m) } func (m *RoutingTableLink) String() string { return proto.CompactTextString(m) }
func (*RoutingTableLink) ProtoMessage() {} func (*RoutingTableLink) ProtoMessage() {}
func (*RoutingTableLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (*RoutingTableLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
type ShowRoutingTableRequest struct { type ShowRoutingTableRequest struct {
} }
@ -836,7 +853,7 @@ type ShowRoutingTableRequest struct {
func (m *ShowRoutingTableRequest) Reset() { *m = ShowRoutingTableRequest{} } func (m *ShowRoutingTableRequest) Reset() { *m = ShowRoutingTableRequest{} }
func (m *ShowRoutingTableRequest) String() string { return proto.CompactTextString(m) } func (m *ShowRoutingTableRequest) String() string { return proto.CompactTextString(m) }
func (*ShowRoutingTableRequest) ProtoMessage() {} func (*ShowRoutingTableRequest) ProtoMessage() {}
func (*ShowRoutingTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } func (*ShowRoutingTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
type ShowRoutingTableResponse struct { type ShowRoutingTableResponse struct {
Channels []*RoutingTableLink `protobuf:"bytes,1,rep,name=channels" json:"channels,omitempty"` Channels []*RoutingTableLink `protobuf:"bytes,1,rep,name=channels" json:"channels,omitempty"`
@ -845,7 +862,7 @@ type ShowRoutingTableResponse struct {
func (m *ShowRoutingTableResponse) Reset() { *m = ShowRoutingTableResponse{} } func (m *ShowRoutingTableResponse) Reset() { *m = ShowRoutingTableResponse{} }
func (m *ShowRoutingTableResponse) String() string { return proto.CompactTextString(m) } func (m *ShowRoutingTableResponse) String() string { return proto.CompactTextString(m) }
func (*ShowRoutingTableResponse) ProtoMessage() {} func (*ShowRoutingTableResponse) ProtoMessage() {}
func (*ShowRoutingTableResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } func (*ShowRoutingTableResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
func (m *ShowRoutingTableResponse) GetChannels() []*RoutingTableLink { func (m *ShowRoutingTableResponse) GetChannels() []*RoutingTableLink {
if m != nil { if m != nil {
@ -866,7 +883,7 @@ type Invoice struct {
func (m *Invoice) Reset() { *m = Invoice{} } func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) } func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {} func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
type AddInvoiceResponse struct { type AddInvoiceResponse struct {
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"` RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
@ -875,7 +892,7 @@ type AddInvoiceResponse struct {
func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} } func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {} func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
type PaymentHash struct { type PaymentHash struct {
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"` RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
@ -884,7 +901,7 @@ type PaymentHash struct {
func (m *PaymentHash) Reset() { *m = PaymentHash{} } func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) } func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {} func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
type ListInvoiceRequest struct { type ListInvoiceRequest struct {
PendingOnly bool `protobuf:"varint,1,opt,name=pending_only" json:"pending_only,omitempty"` PendingOnly bool `protobuf:"varint,1,opt,name=pending_only" json:"pending_only,omitempty"`
@ -893,7 +910,7 @@ type ListInvoiceRequest struct {
func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} } func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {} func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
type ListInvoiceResponse struct { type ListInvoiceResponse struct {
Invoices []*Invoice `protobuf:"bytes,1,rep,name=invoices" json:"invoices,omitempty"` Invoices []*Invoice `protobuf:"bytes,1,rep,name=invoices" json:"invoices,omitempty"`
@ -902,7 +919,7 @@ type ListInvoiceResponse struct {
func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} } func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {} func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
func (m *ListInvoiceResponse) GetInvoices() []*Invoice { func (m *ListInvoiceResponse) GetInvoices() []*Invoice {
if m != nil { if m != nil {
@ -926,6 +943,8 @@ func init() {
proto.RegisterType((*ConnectPeerResponse)(nil), "lnrpc.ConnectPeerResponse") proto.RegisterType((*ConnectPeerResponse)(nil), "lnrpc.ConnectPeerResponse")
proto.RegisterType((*HTLC)(nil), "lnrpc.HTLC") proto.RegisterType((*HTLC)(nil), "lnrpc.HTLC")
proto.RegisterType((*ActiveChannel)(nil), "lnrpc.ActiveChannel") proto.RegisterType((*ActiveChannel)(nil), "lnrpc.ActiveChannel")
proto.RegisterType((*ListChannelsRequest)(nil), "lnrpc.ListChannelsRequest")
proto.RegisterType((*ListChannelsResponse)(nil), "lnrpc.ListChannelsResponse")
proto.RegisterType((*Peer)(nil), "lnrpc.Peer") proto.RegisterType((*Peer)(nil), "lnrpc.Peer")
proto.RegisterType((*ListPeersRequest)(nil), "lnrpc.ListPeersRequest") proto.RegisterType((*ListPeersRequest)(nil), "lnrpc.ListPeersRequest")
proto.RegisterType((*ListPeersResponse)(nil), "lnrpc.ListPeersResponse") proto.RegisterType((*ListPeersResponse)(nil), "lnrpc.ListPeersResponse")
@ -980,6 +999,7 @@ type LightningClient interface {
OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error) OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error)
CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error) CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error)
PendingChannels(ctx context.Context, in *PendingChannelRequest, opts ...grpc.CallOption) (*PendingChannelResponse, error) PendingChannels(ctx context.Context, in *PendingChannelRequest, opts ...grpc.CallOption) (*PendingChannelResponse, error)
ListChannels(ctx context.Context, in *ListChannelsRequest, opts ...grpc.CallOption) (*ListChannelsResponse, error)
SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error)
AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error) AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error)
LookupInvoice(ctx context.Context, in *PaymentHash, opts ...grpc.CallOption) (*Invoice, error) LookupInvoice(ctx context.Context, in *PaymentHash, opts ...grpc.CallOption) (*Invoice, error)
@ -1140,6 +1160,15 @@ func (c *lightningClient) PendingChannels(ctx context.Context, in *PendingChanne
return out, nil return out, nil
} }
func (c *lightningClient) ListChannels(ctx context.Context, in *ListChannelsRequest, opts ...grpc.CallOption) (*ListChannelsResponse, error) {
out := new(ListChannelsResponse)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/ListChannels", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) { func (c *lightningClient) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Lightning_serviceDesc.Streams[2], c.cc, "/lnrpc.Lightning/SendPayment", opts...) stream, err := grpc.NewClientStream(ctx, &_Lightning_serviceDesc.Streams[2], c.cc, "/lnrpc.Lightning/SendPayment", opts...)
if err != nil { if err != nil {
@ -1221,6 +1250,7 @@ type LightningServer interface {
OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error
CloseChannel(*CloseChannelRequest, Lightning_CloseChannelServer) error CloseChannel(*CloseChannelRequest, Lightning_CloseChannelServer) error
PendingChannels(context.Context, *PendingChannelRequest) (*PendingChannelResponse, error) PendingChannels(context.Context, *PendingChannelRequest) (*PendingChannelResponse, error)
ListChannels(context.Context, *ListChannelsRequest) (*ListChannelsResponse, error)
SendPayment(Lightning_SendPaymentServer) error SendPayment(Lightning_SendPaymentServer) error
AddInvoice(context.Context, *Invoice) (*AddInvoiceResponse, error) AddInvoice(context.Context, *Invoice) (*AddInvoiceResponse, error)
LookupInvoice(context.Context, *PaymentHash) (*Invoice, error) LookupInvoice(context.Context, *PaymentHash) (*Invoice, error)
@ -1436,6 +1466,24 @@ func _Lightning_PendingChannels_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Lightning_ListChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListChannelsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).ListChannels(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/ListChannels",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).ListChannels(ctx, req.(*ListChannelsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_SendPayment_Handler(srv interface{}, stream grpc.ServerStream) error { func _Lightning_SendPayment_Handler(srv interface{}, stream grpc.ServerStream) error {
return srv.(LightningServer).SendPayment(&lightningSendPaymentServer{stream}) return srv.(LightningServer).SendPayment(&lightningSendPaymentServer{stream})
} }
@ -1574,6 +1622,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "PendingChannels", MethodName: "PendingChannels",
Handler: _Lightning_PendingChannels_Handler, Handler: _Lightning_PendingChannels_Handler,
}, },
{
MethodName: "ListChannels",
Handler: _Lightning_ListChannels_Handler,
},
{ {
MethodName: "AddInvoice", MethodName: "AddInvoice",
Handler: _Lightning_AddInvoice_Handler, Handler: _Lightning_AddInvoice_Handler,
@ -1615,113 +1667,117 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 1727 bytes of a gzipped FileDescriptorProto // 1781 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0xeb, 0x6e, 0x13, 0xd7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0xdd, 0x6e, 0x13, 0xd7,
0x16, 0xc6, 0xb1, 0x1d, 0xdb, 0xcb, 0x97, 0x38, 0x3b, 0x37, 0xc7, 0x90, 0x73, 0x38, 0x23, 0x40, 0x16, 0xc6, 0xb1, 0x1d, 0xdb, 0xcb, 0x3f, 0x71, 0x76, 0xfe, 0x1c, 0x43, 0xce, 0xe1, 0x8c, 0x00,
0x01, 0x41, 0x00, 0x73, 0x24, 0x10, 0xe8, 0x70, 0x14, 0x42, 0x4a, 0x52, 0x42, 0x92, 0xe2, 0x20, 0x05, 0x04, 0x01, 0xcc, 0x91, 0x40, 0xa0, 0xc3, 0x51, 0x08, 0x29, 0x49, 0x31, 0x49, 0x8a, 0x83,
0xd4, 0x5f, 0xd3, 0xf1, 0x78, 0x27, 0x1e, 0x65, 0x3c, 0xe3, 0x7a, 0xb6, 0x13, 0xdc, 0x07, 0xe8, 0x50, 0xaf, 0xa6, 0x93, 0xf1, 0x4e, 0x3c, 0xca, 0x78, 0x66, 0xea, 0xd9, 0x4e, 0x70, 0x1f, 0xa0,
0x33, 0xf4, 0x11, 0xaa, 0xaa, 0xaa, 0xfa, 0x0e, 0xfd, 0x55, 0x55, 0xea, 0x33, 0x75, 0xed, 0xdb, 0x0f, 0xd0, 0xab, 0x4a, 0x7d, 0x81, 0xaa, 0xaa, 0xaa, 0xbe, 0x47, 0xef, 0xfa, 0x44, 0x5d, 0xfb,
0x5c, 0x1d, 0xa4, 0xfe, 0xe8, 0x2f, 0x6b, 0xd6, 0x5e, 0x7b, 0x5d, 0xbe, 0xbd, 0xf6, 0xb7, 0xd6, 0x67, 0xfe, 0x27, 0x48, 0xbd, 0xe8, 0x95, 0x35, 0x6b, 0xaf, 0xbd, 0xfe, 0xf6, 0xb7, 0xbf, 0xb5,
0x36, 0x54, 0xc6, 0x23, 0x7b, 0x6b, 0x34, 0xf6, 0x99, 0x4f, 0x8a, 0xae, 0x87, 0x1f, 0xc6, 0x57, 0xb6, 0xa1, 0x36, 0xf1, 0xcc, 0x2d, 0x6f, 0xe2, 0x32, 0x97, 0x94, 0x6d, 0x07, 0x3f, 0xb4, 0xaf,
0x50, 0xed, 0x52, 0xaf, 0xff, 0x9e, 0x7e, 0x3b, 0xa1, 0x01, 0x23, 0x35, 0x28, 0xf4, 0xf1, 0xb7, 0xa0, 0x3e, 0xa0, 0xce, 0xf0, 0x3d, 0xfd, 0x76, 0x4a, 0x7d, 0x46, 0x1a, 0x50, 0x1a, 0xe2, 0x6f,
0x95, 0xbb, 0x99, 0xdb, 0xac, 0x91, 0x2a, 0xe4, 0xad, 0x21, 0x6b, 0xcd, 0xe1, 0x47, 0x9e, 0x2c, 0xa7, 0x70, 0xb3, 0xb0, 0xd9, 0x20, 0x75, 0x28, 0x1a, 0x63, 0xd6, 0x99, 0xc3, 0x8f, 0x22, 0x59,
0x43, 0x6d, 0x64, 0x4d, 0x87, 0xd4, 0x63, 0xe6, 0xc0, 0x0a, 0x06, 0xad, 0xbc, 0x50, 0x59, 0x84, 0x86, 0x86, 0x67, 0xcc, 0xc6, 0xd4, 0x61, 0xfa, 0xc8, 0xf0, 0x47, 0x9d, 0xa2, 0x50, 0x59, 0x84,
0xca, 0xa9, 0x15, 0x30, 0x33, 0x40, 0x23, 0xad, 0x02, 0x8a, 0xca, 0x46, 0x03, 0x6a, 0xd2, 0x64, 0xda, 0xa9, 0xe1, 0x33, 0xdd, 0x47, 0x23, 0x9d, 0x12, 0x8a, 0xaa, 0x5a, 0x0b, 0x1a, 0xd2, 0xa4,
0x30, 0xf2, 0xbd, 0x80, 0x1a, 0xcf, 0xa1, 0xb6, 0x33, 0xb0, 0x3c, 0x8f, 0xba, 0xc7, 0xbe, 0xe3, 0xef, 0xb9, 0x8e, 0x4f, 0xb5, 0xe7, 0xd0, 0xd8, 0x19, 0x19, 0x8e, 0x43, 0xed, 0x23, 0xd7, 0x72,
0x31, 0x6e, 0xe8, 0x74, 0xe2, 0xf5, 0x1d, 0xef, 0xcc, 0x64, 0x9f, 0x9c, 0xbe, 0xf2, 0x85, 0x52, 0x18, 0x37, 0x74, 0x3a, 0x75, 0x86, 0x96, 0x73, 0xa6, 0xb3, 0x4f, 0xd6, 0x50, 0xf9, 0x42, 0xa9,
0x7f, 0xc2, 0x46, 0x13, 0x66, 0x3a, 0x5e, 0x9f, 0x7e, 0x12, 0x4e, 0xeb, 0xc6, 0x7f, 0xa1, 0x79, 0x3b, 0x65, 0xde, 0x94, 0xe9, 0x96, 0x33, 0xa4, 0x9f, 0x84, 0xd3, 0xa6, 0xf6, 0x5f, 0x68, 0xf7,
0xe0, 0x9c, 0x0d, 0x98, 0x87, 0xda, 0xdb, 0xfd, 0xfe, 0x98, 0x06, 0x01, 0x21, 0x00, 0xa3, 0x49, 0xad, 0xb3, 0x11, 0x73, 0x50, 0x7b, 0x7b, 0x38, 0x9c, 0x50, 0xdf, 0x27, 0x04, 0xc0, 0x9b, 0x9e,
0xef, 0x2d, 0x9d, 0xee, 0xf1, 0x30, 0xf8, 0xee, 0x0a, 0x8f, 0x7b, 0xe0, 0x07, 0x32, 0xd4, 0x8a, 0xbc, 0xa5, 0xb3, 0x3d, 0x1e, 0x06, 0xdf, 0x5d, 0xe3, 0x71, 0x8f, 0x5c, 0x5f, 0x86, 0x5a, 0xd3,
0xf1, 0x7d, 0x0e, 0x16, 0x78, 0x08, 0xef, 0x2c, 0x6f, 0xaa, 0x33, 0x7b, 0x09, 0x35, 0x6e, 0xe0, 0xbe, 0x2f, 0xc0, 0x02, 0x0f, 0xe1, 0x9d, 0xe1, 0xcc, 0x82, 0xcc, 0x5e, 0x42, 0x83, 0x1b, 0x38,
0xc4, 0xdf, 0x1e, 0xfa, 0x13, 0x8f, 0x67, 0x98, 0xdf, 0xac, 0x76, 0x36, 0xb7, 0x04, 0x0c, 0x5b, 0x76, 0xb7, 0xc7, 0xee, 0xd4, 0xe1, 0x19, 0x16, 0x37, 0xeb, 0xbd, 0xcd, 0x2d, 0x51, 0x86, 0xad,
0x29, 0xed, 0xad, 0xb8, 0xea, 0xae, 0xc7, 0xc6, 0xd3, 0xf6, 0x13, 0x58, 0xcc, 0x08, 0x39, 0x40, 0x94, 0xf6, 0x56, 0x5c, 0x75, 0xd7, 0x61, 0x93, 0x59, 0xf7, 0x09, 0x2c, 0x66, 0x84, 0xbc, 0x40,
0xe7, 0x74, 0xaa, 0x62, 0xa8, 0x43, 0xf1, 0xc2, 0x72, 0x27, 0x54, 0xe2, 0xf5, 0x7c, 0xee, 0x59, 0xe7, 0x74, 0xa6, 0x62, 0x68, 0x42, 0xf9, 0xc2, 0xb0, 0xa7, 0x54, 0xd6, 0xeb, 0xf9, 0xdc, 0xb3,
0xce, 0xb8, 0x09, 0xcd, 0xc8, 0xb2, 0x84, 0x83, 0x87, 0x1a, 0xa6, 0x5d, 0x31, 0x1e, 0x49, 0x8d, 0x82, 0x76, 0x13, 0xda, 0x91, 0x65, 0x59, 0x0e, 0x1e, 0x6a, 0x98, 0x76, 0x4d, 0x7b, 0x24, 0x35,
0x1d, 0x44, 0x26, 0x88, 0x1d, 0x82, 0x85, 0xae, 0x94, 0xd9, 0x06, 0xcc, 0x5b, 0x32, 0x64, 0x61, 0x76, 0xb0, 0x32, 0x7e, 0xec, 0x10, 0x0c, 0x74, 0xa5, 0xcc, 0xb6, 0x60, 0xde, 0x90, 0x21, 0x0b,
0xd7, 0xf8, 0x0f, 0x2c, 0xc6, 0x76, 0xcc, 0x34, 0xfa, 0x43, 0x0e, 0x16, 0x0f, 0xe9, 0xa5, 0x02, 0xbb, 0xda, 0x7f, 0x60, 0x31, 0xb6, 0x23, 0xd7, 0xe8, 0x8f, 0x05, 0x58, 0x3c, 0xa0, 0x97, 0xaa,
0x4c, 0x9b, 0xed, 0xa0, 0xce, 0x74, 0x44, 0x85, 0x4e, 0xa3, 0x73, 0x4b, 0x65, 0x9e, 0xd1, 0xdb, 0x60, 0x81, 0xd9, 0x1e, 0xea, 0xcc, 0x3c, 0x2a, 0x74, 0x5a, 0xbd, 0x5b, 0x2a, 0xf3, 0x8c, 0xde,
0x52, 0x9f, 0x27, 0xa8, 0x6b, 0x1c, 0x41, 0x35, 0xf6, 0x49, 0xd6, 0x60, 0xe9, 0xe3, 0xfe, 0xc9, 0x96, 0xfa, 0x3c, 0x46, 0x5d, 0xed, 0x10, 0xea, 0xb1, 0x4f, 0xb2, 0x06, 0x4b, 0x1f, 0xf7, 0x8f,
0xe1, 0x6e, 0xb7, 0x6b, 0x1e, 0x7f, 0x78, 0xf5, 0x76, 0xf7, 0x6b, 0x73, 0x6f, 0xbb, 0xbb, 0xd7, 0x0f, 0x76, 0x07, 0x03, 0xfd, 0xe8, 0xc3, 0xab, 0xb7, 0xbb, 0x5f, 0xeb, 0x7b, 0xdb, 0x83, 0xbd,
0xbc, 0x46, 0x56, 0x81, 0xa0, 0xf4, 0x64, 0xf7, 0x75, 0x42, 0x9e, 0x23, 0x0b, 0x50, 0x8d, 0x0b, 0xf6, 0x35, 0xb2, 0x0a, 0x04, 0xa5, 0xc7, 0xbb, 0xaf, 0x13, 0xf2, 0x02, 0x59, 0x80, 0x7a, 0x5c,
0xe6, 0x8c, 0xdb, 0xa8, 0x18, 0xf3, 0xa8, 0xc2, 0x5f, 0x80, 0x92, 0x25, 0x45, 0x2a, 0x83, 0x17, 0x30, 0xa7, 0xdd, 0x46, 0xc5, 0x98, 0x47, 0x15, 0xfe, 0x02, 0x54, 0x0c, 0x29, 0x52, 0x19, 0xbc,
0x40, 0x76, 0x7c, 0x2c, 0x19, 0x9b, 0x1d, 0x53, 0x3a, 0xd6, 0x19, 0xdc, 0x8e, 0x01, 0x53, 0xed, 0x00, 0xb2, 0xe3, 0x22, 0x64, 0x4c, 0x76, 0x44, 0xe9, 0x24, 0xc8, 0xe0, 0x76, 0xac, 0x30, 0xf5,
0xac, 0xa9, 0x0c, 0xd2, 0x05, 0x62, 0xdc, 0x81, 0xa5, 0xc4, 0xe6, 0xc8, 0xc9, 0x08, 0xbf, 0x4d, 0xde, 0x9a, 0xca, 0x20, 0x0d, 0x10, 0xed, 0x0e, 0x2c, 0x25, 0x36, 0x47, 0x4e, 0x3c, 0xfc, 0xd6,
0x05, 0x53, 0xd1, 0x78, 0x0d, 0x85, 0xbd, 0x93, 0x83, 0x1d, 0xac, 0xa7, 0x39, 0x25, 0xcb, 0xa7, 0x55, 0x99, 0xca, 0x9a, 0x07, 0xa5, 0xbd, 0xe3, 0xfe, 0x0e, 0x69, 0x43, 0xd5, 0x72, 0x4c, 0x77,
0xd1, 0xe6, 0xf5, 0xcd, 0xab, 0xdd, 0x74, 0x7d, 0xfb, 0x5c, 0x95, 0x3c, 0x9e, 0x33, 0xf3, 0xcd, 0x8c, 0x26, 0xc4, 0x4a, 0x35, 0x5d, 0x73, 0x8e, 0x72, 0x8e, 0x79, 0xdd, 0x76, 0xcd, 0x73, 0x05,
0x49, 0xa0, 0xca, 0xfd, 0xcf, 0x1c, 0xd4, 0xb7, 0x6d, 0xe6, 0x5c, 0x50, 0x55, 0xe5, 0x7c, 0xcf, 0xfc, 0x75, 0x58, 0xa4, 0x9f, 0x3c, 0x6b, 0x62, 0x30, 0xcb, 0x75, 0xf4, 0x11, 0xe5, 0x41, 0x88,
0x98, 0x0e, 0x7d, 0x46, 0xb5, 0xab, 0x0a, 0x59, 0x81, 0xba, 0x2d, 0x57, 0xcd, 0x11, 0xbf, 0x04, 0x0b, 0xd0, 0x24, 0x1d, 0x68, 0x4f, 0xe8, 0x85, 0x6b, 0xca, 0xa5, 0x21, 0xb5, 0x8d, 0x59, 0xa7,
0xb2, 0x50, 0x49, 0x13, 0xca, 0xb6, 0x35, 0xb2, 0x6c, 0x87, 0x4d, 0x85, 0xf1, 0x3c, 0x57, 0x44, 0x2c, 0xe0, 0xfc, 0x67, 0x01, 0x9a, 0xdb, 0x26, 0xb3, 0x2e, 0xa8, 0xba, 0x11, 0x64, 0x05, 0x9a,
0x57, 0x96, 0x6b, 0xf6, 0x2c, 0xd7, 0xf2, 0x6c, 0x2a, 0x9c, 0xe4, 0x11, 0xdf, 0x86, 0x32, 0xa9, 0x13, 0x3a, 0x76, 0x19, 0xd5, 0x11, 0xd3, 0x11, 0x96, 0x50, 0x6c, 0x4a, 0x0d, 0xdd, 0xe3, 0x97,
0xe5, 0x45, 0x21, 0x5f, 0x87, 0xc5, 0x09, 0xe6, 0xc6, 0x98, 0x4b, 0xfb, 0x66, 0x8f, 0xca, 0xa5, 0x46, 0x02, 0x9b, 0x47, 0x6a, 0x1a, 0x9e, 0x61, 0x5a, 0x6c, 0x26, 0xc2, 0x28, 0x72, 0x45, 0x0c,
0x79, 0xb1, 0x64, 0x40, 0x7d, 0x44, 0xe5, 0x35, 0x1b, 0x30, 0xd7, 0x0e, 0x5a, 0x25, 0x51, 0xf1, 0xca, 0xb0, 0xf5, 0x13, 0xc3, 0x36, 0x1c, 0x93, 0x8a, 0x10, 0x8a, 0x78, 0x1e, 0x2d, 0x65, 0x36,
0x55, 0x85, 0x9a, 0xc8, 0x7c, 0x09, 0xaa, 0xde, 0x64, 0x68, 0x4e, 0x46, 0x7d, 0x8b, 0xd1, 0xa0, 0x90, 0x97, 0x85, 0x1c, 0xa3, 0x9e, 0x62, 0x2d, 0x18, 0xb3, 0xe9, 0x30, 0x5c, 0x9a, 0x17, 0x4b,
0x55, 0xc6, 0x8d, 0x05, 0xe3, 0xb7, 0x1c, 0x14, 0x38, 0x70, 0xfc, 0x4a, 0xba, 0x1a, 0xdb, 0x28, 0x1a, 0x34, 0x3d, 0x2a, 0xaf, 0xe5, 0x88, 0xd9, 0xa6, 0xdf, 0xa9, 0x88, 0x1b, 0x52, 0x57, 0x55,
0x95, 0x18, 0x8c, 0x3c, 0x89, 0x62, 0xfc, 0xf0, 0xf2, 0x42, 0x03, 0x01, 0xed, 0x4d, 0xd1, 0x1e, 0x16, 0x95, 0x5a, 0x82, 0xba, 0x33, 0x1d, 0xeb, 0x53, 0x6f, 0x68, 0x30, 0xea, 0x77, 0xaa, 0xb8,
0x27, 0x05, 0x26, 0x12, 0x28, 0x44, 0xb2, 0x31, 0xb5, 0x2f, 0x44, 0xf0, 0x05, 0x9e, 0x7d, 0x60, 0xb1, 0xa4, 0xad, 0xc0, 0x52, 0xdf, 0xf2, 0x99, 0xca, 0x28, 0x80, 0x91, 0xf6, 0x12, 0x96, 0x93,
0x31, 0xa9, 0x25, 0x63, 0x56, 0x12, 0xa1, 0x53, 0x12, 0x12, 0x34, 0xee, 0x78, 0x3d, 0x3c, 0x90, 0x62, 0x75, 0x0c, 0x77, 0x30, 0x07, 0x25, 0xeb, 0xd4, 0x84, 0x8b, 0x65, 0xe5, 0x22, 0x51, 0x19,
0xbe, 0x88, 0xae, 0x4c, 0xee, 0x20, 0x64, 0x12, 0xc9, 0xa0, 0x55, 0x11, 0x19, 0x2d, 0xab, 0x8c, 0xed, 0xa7, 0x02, 0x94, 0xf8, 0xf9, 0x71, 0x66, 0xb0, 0x83, 0x23, 0x0e, 0x0e, 0xaf, 0x16, 0x3f,
0x12, 0x87, 0x60, 0x10, 0xce, 0x1c, 0x81, 0xa8, 0x00, 0x5d, 0xd9, 0xc6, 0x43, 0x58, 0x8c, 0xc9, 0x4d, 0x5e, 0x9b, 0x72, 0x1c, 0x43, 0x45, 0xa1, 0x81, 0x3c, 0x71, 0x32, 0xc3, 0x30, 0x39, 0x37,
0x54, 0x59, 0xb4, 0xa1, 0xc8, 0xf3, 0x09, 0x14, 0x23, 0x68, 0x7c, 0xb8, 0x92, 0xd1, 0x84, 0xc6, 0xc9, 0xa3, 0x29, 0x45, 0xb2, 0x09, 0x35, 0x2f, 0x44, 0x4d, 0x4a, 0xbc, 0xa8, 0xbe, 0xc1, 0xa4,
0x1b, 0xca, 0xf6, 0xbd, 0x53, 0x5f, 0x9b, 0xf8, 0x11, 0xa9, 0x25, 0x14, 0x29, 0x0b, 0xb3, 0x71, 0x96, 0x2c, 0x85, 0x92, 0x08, 0x9d, 0x8a, 0x90, 0xa0, 0x71, 0xcb, 0x39, 0x41, 0x44, 0x0c, 0x45,
0x6a, 0x41, 0xd3, 0xe9, 0x63, 0x6a, 0x78, 0xb6, 0xa6, 0xc6, 0x47, 0x9e, 0xfa, 0x1a, 0x2c, 0x84, 0xd2, 0x55, 0x8d, 0x70, 0x62, 0xf2, 0x05, 0xc0, 0xc2, 0x8c, 0x1f, 0xc2, 0x62, 0x4c, 0xa6, 0xd2,
0x2b, 0xc8, 0x64, 0x9c, 0x41, 0x24, 0x70, 0x37, 0x60, 0x99, 0x1f, 0x87, 0x3e, 0xb6, 0x30, 0x4f, 0xed, 0x42, 0x99, 0xc7, 0xe9, 0x2b, 0xc2, 0x09, 0xca, 0xc9, 0x95, 0xb4, 0x36, 0xb4, 0xde, 0x50,
0x0e, 0x61, 0x9d, 0x5c, 0x87, 0x25, 0xbe, 0x6a, 0x89, 0x34, 0xa3, 0xc5, 0xa2, 0x58, 0xc4, 0x9a, 0xb6, 0xef, 0x9c, 0xba, 0x81, 0x89, 0x9f, 0x91, 0xb9, 0x42, 0x91, 0xb2, 0x90, 0x9f, 0x3f, 0x82,
0x93, 0x5b, 0x79, 0x26, 0xf3, 0x82, 0x3b, 0x3f, 0x88, 0x3b, 0x74, 0xea, 0x8c, 0x87, 0x16, 0x73, 0xcc, 0x1a, 0x62, 0xc8, 0x08, 0x05, 0x3d, 0xc8, 0x5b, 0x82, 0x64, 0x0d, 0x16, 0xc2, 0x15, 0x05,
0x7c, 0xef, 0x83, 0x38, 0x64, 0xae, 0xd8, 0xe3, 0xc5, 0x6c, 0x06, 0x03, 0x2b, 0xa2, 0x5e, 0x29, 0x2a, 0x59, 0x90, 0x1b, 0xb0, 0xcc, 0x4f, 0x2f, 0x38, 0xe5, 0xf0, 0x14, 0x24, 0x6a, 0xaf, 0xc3,
0x1a, 0x50, 0x9e, 0x86, 0x3a, 0x56, 0x2c, 0x39, 0x6e, 0xd1, 0x46, 0x13, 0x81, 0xe9, 0xd2, 0x53, 0x12, 0x5f, 0x35, 0xc4, 0x21, 0x44, 0x8b, 0x02, 0xb8, 0xfc, 0x02, 0xc8, 0xad, 0x3c, 0x93, 0x79,
0x26, 0x82, 0xac, 0x1b, 0xff, 0x87, 0x45, 0x85, 0xf1, 0x11, 0x06, 0xaa, 0xac, 0xde, 0x4b, 0xd7, 0x81, 0xe5, 0x0f, 0xe2, 0x8a, 0x9e, 0x5a, 0x93, 0xb1, 0xc0, 0xf9, 0x07, 0x81, 0x09, 0xae, 0x78,
0xb7, 0xbc, 0xa2, 0x4b, 0x0a, 0xcc, 0x38, 0xff, 0x8b, 0xbb, 0x2d, 0xbf, 0x77, 0x5c, 0x3f, 0xa0, 0xc2, 0x6f, 0x89, 0xee, 0x8f, 0x8c, 0x88, 0xd9, 0xa5, 0x48, 0x5d, 0x12, 0x79, 0x5c, 0x88, 0x50,
0xca, 0x02, 0x06, 0x61, 0xe3, 0x67, 0xaa, 0x2b, 0xe0, 0xf1, 0x07, 0x13, 0xdb, 0xd6, 0xd8, 0x95, 0x6e, 0xd1, 0x44, 0x13, 0xbe, 0x6e, 0xd3, 0x53, 0x26, 0x82, 0x6c, 0x6a, 0xff, 0x87, 0x45, 0x85,
0x8d, 0x3e, 0xde, 0x6d, 0xbe, 0x4b, 0x59, 0xd0, 0xcc, 0xf0, 0x37, 0xfc, 0xf3, 0x52, 0x64, 0xce, 0x80, 0x43, 0x0c, 0x54, 0x59, 0xbd, 0x97, 0xbe, 0x0e, 0x92, 0x01, 0x96, 0x54, 0x31, 0xe3, 0xed,
0x90, 0x9a, 0xae, 0x33, 0x74, 0xf4, 0x35, 0xc7, 0x3b, 0x7d, 0xea, 0x8f, 0xf1, 0xee, 0xe4, 0x85, 0x45, 0x50, 0x87, 0xfc, 0xde, 0xb1, 0x5d, 0x9f, 0x2a, 0x0b, 0x18, 0x84, 0x89, 0x9f, 0xa9, 0xa6,
0x97, 0x5f, 0x91, 0x40, 0x85, 0x9b, 0x2e, 0xb3, 0xd8, 0x24, 0x50, 0x21, 0x3e, 0x40, 0x27, 0x5c, 0x83, 0xc7, 0xea, 0x4f, 0x4d, 0x33, 0xa8, 0x5d, 0x55, 0x1b, 0x22, 0x75, 0xf0, 0x5d, 0xca, 0x42,
0xa8, 0x0f, 0x48, 0x39, 0x59, 0x0e, 0x2b, 0x46, 0x48, 0xa5, 0xf2, 0xde, 0x35, 0xf2, 0x18, 0x33, 0x40, 0x3c, 0x7f, 0xc3, 0x3f, 0x87, 0x18, 0xb3, 0xc6, 0x54, 0xb7, 0xad, 0xb1, 0x15, 0xf0, 0x07,
0x8a, 0xe1, 0x2f, 0x3c, 0x55, 0x3b, 0xeb, 0x3a, 0xa4, 0xcc, 0xd1, 0xe0, 0x96, 0x87, 0x00, 0x3c, 0xb6, 0x86, 0x53, 0x77, 0x82, 0x57, 0xad, 0x28, 0xbc, 0xfc, 0x8e, 0xfc, 0x2c, 0xdc, 0x0c, 0x98,
0x0d, 0x53, 0xb8, 0x11, 0xb1, 0xc4, 0x36, 0x64, 0x30, 0xdb, 0xbb, 0xf6, 0xaa, 0x0c, 0xf3, 0xf2, 0xc1, 0xa6, 0xbe, 0x0a, 0xf1, 0x01, 0x3a, 0xe1, 0xc2, 0xe0, 0x80, 0x94, 0x93, 0xe5, 0x10, 0x31,
0xf2, 0x1a, 0x1b, 0x50, 0x4f, 0x04, 0x90, 0x68, 0x09, 0x35, 0xe3, 0xa7, 0x1c, 0x10, 0x7e, 0x5e, 0x42, 0x2a, 0x95, 0xf7, 0xae, 0x91, 0xc7, 0x98, 0x51, 0xac, 0xfe, 0xc2, 0x53, 0xbd, 0xb7, 0x1e,
0x29, 0xdc, 0xf0, 0x90, 0x99, 0x35, 0x3e, 0xa3, 0xcc, 0x4c, 0x50, 0x23, 0x27, 0x06, 0x25, 0xf7, 0x84, 0x94, 0x39, 0x1a, 0xdc, 0xf2, 0x10, 0x80, 0xa7, 0xa1, 0x0b, 0x37, 0x22, 0x96, 0xd8, 0x86,
0xfc, 0xbe, 0xec, 0x68, 0x35, 0x5e, 0x9e, 0x92, 0x9b, 0x74, 0xfb, 0x56, 0x4c, 0x29, 0x99, 0x6b, 0x4c, 0xcd, 0xf6, 0xae, 0xbd, 0xaa, 0xc2, 0xbc, 0xbc, 0xeb, 0xda, 0x06, 0x34, 0x13, 0x01, 0x24,
0x03, 0x56, 0x14, 0x45, 0xa5, 0x96, 0x25, 0x83, 0x61, 0xd1, 0xdb, 0xfe, 0x70, 0xe8, 0x04, 0x01, 0x3a, 0x4e, 0x43, 0xfb, 0xa5, 0x00, 0x84, 0x9f, 0x57, 0xaa, 0x6e, 0x78, 0xc8, 0xcc, 0x98, 0x9c,
0x26, 0x6c, 0x06, 0xce, 0x77, 0x9a, 0xc2, 0x54, 0xe5, 0x8a, 0x3a, 0x53, 0x95, 0xfb, 0x73, 0x0e, 0x51, 0xa6, 0x27, 0x98, 0x97, 0xf3, 0x88, 0x92, 0x3b, 0xee, 0x50, 0x36, 0xcc, 0x06, 0x87, 0xa7,
0x9a, 0x3c, 0xd8, 0x04, 0xfa, 0xf7, 0x11, 0x4e, 0x8e, 0xcd, 0x3f, 0x06, 0xfe, 0x03, 0xa8, 0x08, 0xa4, 0xb2, 0x60, 0x3a, 0x50, 0x14, 0x2c, 0x89, 0x6e, 0x03, 0x56, 0x14, 0xa3, 0xa5, 0x96, 0x25,
0x07, 0x3e, 0x7a, 0x50, 0xd8, 0xb7, 0x92, 0xd8, 0x47, 0x05, 0x9f, 0x80, 0xfe, 0x7f, 0xb0, 0xa2, 0xe1, 0x21, 0xe8, 0x91, 0xc1, 0xc7, 0x96, 0xef, 0x73, 0xce, 0xf5, 0xad, 0xef, 0x02, 0xc6, 0x53,
0xdc, 0xa7, 0xd0, 0xbd, 0x05, 0xf3, 0x81, 0x48, 0x41, 0xf5, 0xdc, 0xe5, 0xa4, 0x39, 0x99, 0x9e, 0xc8, 0x15, 0x38, 0x53, 0xc8, 0xfd, 0xb5, 0x00, 0x6d, 0x1e, 0x6c, 0xa2, 0xfa, 0xf7, 0xb1, 0x9c,
0xf1, 0xcb, 0x1c, 0xac, 0xa6, 0xf7, 0x2b, 0x66, 0xf9, 0x02, 0x9a, 0x19, 0x32, 0x90, 0x34, 0x75, 0xbc, 0x36, 0xff, 0x58, 0xf1, 0x1f, 0x40, 0x4d, 0x38, 0x70, 0xd1, 0x83, 0xaa, 0x7d, 0x27, 0x59,
0x3f, 0x99, 0x77, 0x6a, 0x63, 0x4a, 0xdc, 0xfe, 0x23, 0x07, 0x8d, 0xa4, 0x28, 0xd3, 0x0d, 0x33, 0xfb, 0x08, 0xf0, 0x89, 0xd2, 0xff, 0x0f, 0x56, 0x94, 0xfb, 0x54, 0x75, 0x6f, 0xc1, 0xbc, 0x2f,
0x2c, 0x36, 0x37, 0xbb, 0x71, 0xe5, 0x33, 0x8d, 0xab, 0x30, 0xbb, 0x71, 0x15, 0xaf, 0x68, 0x5c, 0x52, 0x50, 0x2d, 0x7d, 0x39, 0x69, 0x4e, 0xa6, 0xa7, 0xfd, 0x36, 0x07, 0xab, 0xe9, 0xfd, 0x8a,
0xf3, 0x7a, 0x9a, 0x4c, 0x5c, 0xf7, 0x92, 0x30, 0x1b, 0x01, 0x56, 0xfe, 0x0c, 0x60, 0xf7, 0x61, 0x59, 0xbe, 0x80, 0x76, 0x86, 0x0c, 0x24, 0x4d, 0xdd, 0x4f, 0xe6, 0x9d, 0xda, 0x98, 0x12, 0x77,
0xf9, 0xa3, 0xe5, 0xba, 0x94, 0xbd, 0x92, 0x26, 0x35, 0xdc, 0x68, 0xf3, 0xd2, 0x61, 0x1e, 0x92, 0xff, 0x28, 0x40, 0x2b, 0x29, 0xca, 0x34, 0xdb, 0x0c, 0x8b, 0xcd, 0xe5, 0xf7, 0xb9, 0x62, 0xa6,
0x85, 0xe9, 0x7b, 0xae, 0x1c, 0xcb, 0xca, 0xc6, 0x26, 0xac, 0xa4, 0xb4, 0xa3, 0x79, 0x40, 0xc7, 0xcf, 0x95, 0xf2, 0xfb, 0x5c, 0xf9, 0x8a, 0x3e, 0x37, 0x1f, 0x0c, 0xab, 0x89, 0xeb, 0x5e, 0x11,
0xc4, 0x35, 0x73, 0xc6, 0x1a, 0xac, 0x28, 0x47, 0x49, 0xc3, 0xc6, 0x5d, 0x58, 0x4d, 0x2f, 0xcc, 0x66, 0xa3, 0x82, 0x55, 0x3f, 0x53, 0xb0, 0xfb, 0xb0, 0xfc, 0xd1, 0xb0, 0x6d, 0xca, 0x5e, 0x49,
0xb6, 0x91, 0x37, 0xbe, 0x81, 0xe6, 0x7b, 0x9c, 0x63, 0x31, 0xaf, 0x13, 0xab, 0xe7, 0xd2, 0x03, 0x93, 0x41, 0xb9, 0xd1, 0xe6, 0xa5, 0xc5, 0x1c, 0x24, 0x0b, 0xdd, 0x75, 0x6c, 0xd9, 0xa9, 0xab,
0xc7, 0x3b, 0xe7, 0x53, 0xa2, 0xd3, 0x7f, 0xac, 0xda, 0x82, 0xf8, 0xe8, 0x44, 0xfd, 0x9f, 0x0f, 0xda, 0x26, 0xac, 0xa4, 0xb4, 0xa3, 0x71, 0x23, 0x88, 0x89, 0x6b, 0x16, 0xb4, 0x35, 0x58, 0x51,
0xbd, 0x9f, 0x05, 0x16, 0x27, 0x92, 0x4b, 0xc9, 0xcb, 0x45, 0x11, 0xe5, 0x3a, 0xac, 0x75, 0x07, 0x8e, 0x92, 0x86, 0xb5, 0xbb, 0xb0, 0x9a, 0x5e, 0xc8, 0xb7, 0x51, 0xd4, 0xbe, 0x81, 0xf6, 0x7b,
0xfe, 0x65, 0xdc, 0x8b, 0x8e, 0x73, 0x17, 0x5a, 0xd9, 0x25, 0x15, 0xe9, 0xdd, 0x58, 0xdf, 0x94, 0x1c, 0x93, 0x31, 0xaf, 0x63, 0xe3, 0xc4, 0xa6, 0x7d, 0xcb, 0x39, 0xe7, 0x43, 0xa8, 0x35, 0x7c,
0x25, 0xa4, 0xe7, 0xa7, 0x74, 0xbc, 0x86, 0x0b, 0xa5, 0x7d, 0xef, 0xc2, 0x77, 0x6c, 0x41, 0x22, 0xac, 0xda, 0x82, 0xf8, 0xe8, 0x45, 0xe3, 0x02, 0x9f, 0xa9, 0x3f, 0x5b, 0x58, 0x1c, 0x75, 0x2e,
0x43, 0x3c, 0xbe, 0xa8, 0xf5, 0x63, 0x6b, 0xa6, 0xce, 0x88, 0x29, 0x46, 0x40, 0x2a, 0x1d, 0x9b, 0x25, 0x2f, 0x97, 0x45, 0x94, 0xeb, 0xb0, 0x36, 0x18, 0xb9, 0x97, 0x71, 0x2f, 0x41, 0x9c, 0xbb,
0xa3, 0x31, 0x75, 0x86, 0xd6, 0x19, 0x55, 0xe3, 0x11, 0xc6, 0x3b, 0x96, 0x2f, 0x84, 0x82, 0x1e, 0xd0, 0xc9, 0x2e, 0xa9, 0x48, 0xef, 0xc6, 0xba, 0xba, 0x84, 0x50, 0x30, 0x9e, 0xa5, 0xe3, 0xd5,
0x97, 0xe4, 0x58, 0x5c, 0xd4, 0x0d, 0x5d, 0xcd, 0x2b, 0xa2, 0x12, 0xca, 0xc6, 0x2d, 0x20, 0x38, 0x6c, 0xa8, 0xec, 0x3b, 0x17, 0xae, 0x65, 0x0a, 0x12, 0x19, 0xe3, 0xf1, 0x45, 0x2d, 0x1d, 0x5b,
0xb8, 0x29, 0x87, 0x61, 0xb8, 0x91, 0x15, 0xc9, 0x5f, 0x1b, 0x38, 0x48, 0xca, 0xd7, 0x07, 0x9f, 0x2e, 0xb5, 0x3c, 0xa6, 0x18, 0x01, 0xa9, 0x74, 0xa2, 0x7b, 0x13, 0x6a, 0x8d, 0x8d, 0x33, 0xaa,
0xfa, 0x33, 0xcb, 0xf7, 0x80, 0xf0, 0xce, 0x1e, 0x5a, 0x09, 0x0b, 0x42, 0x5f, 0x9f, 0x58, 0x41, 0xe6, 0x2e, 0x8c, 0x77, 0x22, 0x1f, 0x20, 0x25, 0xf1, 0x1d, 0x4e, 0xdd, 0xe5, 0xa0, 0x51, 0xab,
0x3c, 0x85, 0xa5, 0x84, 0xae, 0xf2, 0x78, 0x13, 0xca, 0x8e, 0x14, 0x69, 0x80, 0x1a, 0x0a, 0x20, 0xf1, 0x46, 0x20, 0xa1, 0xaa, 0xdd, 0x02, 0x82, 0x73, 0xa1, 0x72, 0x18, 0x86, 0x1b, 0x59, 0x91,
0xa5, 0x79, 0xaf, 0x03, 0xf5, 0x44, 0x21, 0x92, 0x12, 0xe4, 0xb7, 0x0f, 0x0e, 0x70, 0xfc, 0xad, 0xfc, 0xb5, 0x81, 0x73, 0xaa, 0x7c, 0xdc, 0xf0, 0x47, 0x45, 0x66, 0xf9, 0x1e, 0x10, 0xde, 0xd9,
0x42, 0xe9, 0xe8, 0x78, 0xf7, 0x70, 0xff, 0xf0, 0x0d, 0xce, 0xbc, 0xf8, 0xb1, 0x73, 0x70, 0xd4, 0x43, 0x2b, 0x21, 0x20, 0x82, 0xeb, 0x13, 0x03, 0xc4, 0x53, 0x39, 0x0e, 0xa5, 0x3d, 0xde, 0xe4,
0xe5, 0x1f, 0x73, 0x9d, 0xdf, 0xcb, 0x50, 0x09, 0x07, 0x54, 0xf2, 0x25, 0xd4, 0x13, 0xb5, 0x48, 0x43, 0xa6, 0x10, 0x05, 0x05, 0x6a, 0xa9, 0x02, 0x29, 0xcd, 0x7b, 0x3d, 0x68, 0x26, 0x80, 0x48,
0xae, 0x2b, 0x17, 0xb3, 0xea, 0xb9, 0x7d, 0x63, 0xf6, 0xa2, 0x8a, 0xf7, 0x1d, 0x34, 0x92, 0x45, 0x2a, 0x50, 0xdc, 0xee, 0xf7, 0x71, 0xba, 0xae, 0x43, 0xe5, 0xf0, 0x68, 0xf7, 0x60, 0xff, 0xe0,
0x49, 0x6e, 0x24, 0x6f, 0x4b, 0xca, 0xda, 0xc6, 0x15, 0xab, 0xca, 0xdc, 0x0b, 0x28, 0xeb, 0xa7, 0x0d, 0x8e, 0xd4, 0xf8, 0xb1, 0xd3, 0x3f, 0x1c, 0xf0, 0x8f, 0xb9, 0xde, 0x0f, 0x35, 0xa8, 0x85,
0x0a, 0x59, 0x9d, 0xfd, 0x2a, 0x6a, 0xaf, 0x65, 0xe4, 0x6a, 0xf3, 0x4b, 0xa8, 0x84, 0x6f, 0x12, 0xf3, 0x2f, 0xf9, 0x12, 0x9a, 0x09, 0x2c, 0x92, 0xeb, 0xca, 0x45, 0x1e, 0x9e, 0xbb, 0x37, 0xf2,
0x12, 0xd7, 0x8a, 0xbf, 0x6b, 0xda, 0xad, 0xec, 0x82, 0xda, 0xbf, 0x0d, 0x10, 0xbd, 0x0a, 0x48, 0x17, 0x55, 0xbc, 0xef, 0xa0, 0x95, 0x04, 0x25, 0xb9, 0x91, 0xbc, 0x2d, 0x29, 0x6b, 0x1b, 0x57,
0xeb, 0xaa, 0xa7, 0x49, 0x7b, 0x7d, 0xc6, 0x8a, 0x32, 0xf1, 0x1a, 0xaa, 0xb1, 0xa1, 0x9f, 0xc4, 0xac, 0x2a, 0x73, 0x2f, 0xa0, 0x1a, 0xbc, 0x84, 0xc8, 0x6a, 0xfe, 0xa3, 0xab, 0xbb, 0x96, 0x91,
0x98, 0x3e, 0xf5, 0x8a, 0x68, 0xb7, 0x67, 0x2d, 0x45, 0x89, 0x84, 0x13, 0x22, 0x89, 0x1e, 0x18, 0xab, 0xcd, 0x2f, 0xa1, 0x16, 0x3e, 0x79, 0x48, 0x5c, 0x2b, 0xfe, 0x6c, 0xea, 0x76, 0xb2, 0x0b,
0xc9, 0x39, 0x32, 0x4c, 0x24, 0x3b, 0x4c, 0x3e, 0x83, 0x92, 0x9a, 0x0e, 0xc9, 0x8a, 0x52, 0x4a, 0x6a, 0xff, 0x36, 0x40, 0xf4, 0xe8, 0x20, 0x9d, 0xab, 0x5e, 0x3e, 0xdd, 0xf5, 0x9c, 0x15, 0x65,
0x0e, 0x90, 0xed, 0xd5, 0xb4, 0x58, 0xed, 0xdc, 0x81, 0x6a, 0xac, 0x3f, 0x87, 0xf1, 0x67, 0x7b, 0xe2, 0x35, 0xd4, 0x63, 0x6f, 0x0a, 0x12, 0x63, 0xfa, 0xd4, 0x23, 0xa5, 0xdb, 0xcd, 0x5b, 0x8a,
0x76, 0x78, 0x0a, 0xe9, 0x0e, 0xf9, 0x28, 0x87, 0xfd, 0xa2, 0x16, 0x9f, 0x8e, 0x48, 0x98, 0x6a, 0x12, 0x09, 0x27, 0x44, 0x12, 0xbd, 0x5f, 0x92, 0x73, 0x64, 0x98, 0x48, 0x76, 0x98, 0x7c, 0x06,
0x76, 0x64, 0x0a, 0x93, 0xc8, 0xcc, 0x39, 0x68, 0xe7, 0x10, 0x16, 0x92, 0xed, 0x22, 0x08, 0x8b, 0x15, 0x35, 0x1d, 0x92, 0x15, 0xa5, 0x94, 0x1c, 0x20, 0xbb, 0xab, 0x69, 0xb1, 0xda, 0xb9, 0x03,
0x6b, 0x66, 0xa7, 0x0b, 0x8b, 0xeb, 0x8a, 0x3e, 0xf6, 0x5c, 0xfe, 0xcb, 0xa0, 0x6e, 0x30, 0x21, 0xf5, 0x58, 0x7f, 0x0e, 0xe3, 0xcf, 0xf6, 0xec, 0xf0, 0x14, 0xd2, 0x1d, 0xf2, 0x51, 0x01, 0xfb,
0xb1, 0x42, 0xd0, 0x16, 0x96, 0x12, 0x32, 0xb9, 0x6f, 0x33, 0x87, 0xb1, 0x3c, 0x05, 0x88, 0xf8, 0x45, 0x23, 0x3e, 0x1d, 0x91, 0x30, 0xd5, 0xec, 0xc8, 0x14, 0x26, 0x91, 0x99, 0x73, 0xd0, 0xce,
0x81, 0xa4, 0xee, 0x64, 0x58, 0x11, 0x33, 0x28, 0xe4, 0x09, 0xd4, 0x0f, 0x7c, 0xff, 0x7c, 0x32, 0x01, 0x2c, 0x24, 0xdb, 0x85, 0x1f, 0x82, 0x2b, 0xb7, 0xd3, 0x85, 0xe0, 0xba, 0xa2, 0x8f, 0xbd,
0xd2, 0x7b, 0xb5, 0xdb, 0x18, 0x91, 0xb4, 0x53, 0xf6, 0xc8, 0x2e, 0xd4, 0x62, 0xe4, 0x10, 0x84, 0x81, 0x46, 0xfc, 0xa9, 0x11, 0xc6, 0x95, 0xf3, 0x2c, 0xe9, 0x5e, 0xcf, 0x5d, 0x53, 0x86, 0x9e,
0xe7, 0x90, 0x65, 0x97, 0xb0, 0x8e, 0x66, 0x91, 0x49, 0x17, 0x9f, 0xf5, 0x29, 0x26, 0x26, 0xff, 0xcb, 0x7f, 0x43, 0x14, 0x15, 0x10, 0x12, 0x43, 0x54, 0xb0, 0x7f, 0x29, 0x21, 0x93, 0xfb, 0x36,
0xd2, 0x19, 0xce, 0x66, 0xef, 0xf6, 0xbf, 0xaf, 0x5c, 0x97, 0x46, 0x7b, 0xf3, 0xe2, 0x9f, 0x9b, 0x0b, 0x98, 0xd4, 0x53, 0x80, 0x88, 0x68, 0x48, 0xea, 0x72, 0x87, 0xd0, 0xca, 0xe1, 0xa2, 0x27,
0x27, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x25, 0x2a, 0x5e, 0xc6, 0x11, 0x00, 0x00, 0xd0, 0xec, 0xbb, 0xee, 0xf9, 0xd4, 0x0b, 0xf6, 0x06, 0x6e, 0x63, 0x8c, 0xd4, 0x4d, 0xd9, 0x23,
0xbb, 0x32, 0x65, 0xf5, 0xe9, 0x87, 0x07, 0x9a, 0xa5, 0xa9, 0x6e, 0x37, 0x6f, 0x49, 0xf9, 0x1e,
0x40, 0x3b, 0x4d, 0xe9, 0xe4, 0x5f, 0x41, 0x86, 0xf9, 0x6d, 0xa0, 0xfb, 0xef, 0x2b, 0xd7, 0xa5,
0xd1, 0x93, 0x79, 0xf1, 0x0f, 0xd3, 0x93, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x24, 0x8f, 0x46,
0x46, 0x6e, 0x12, 0x00, 0x00,
} }

@ -16,7 +16,9 @@ service Lightning {
rpc OpenChannel(OpenChannelRequest) returns (stream OpenStatusUpdate); rpc OpenChannel(OpenChannelRequest) returns (stream OpenStatusUpdate);
rpc CloseChannel(CloseChannelRequest) returns (stream CloseStatusUpdate); rpc CloseChannel(CloseChannelRequest) returns (stream CloseStatusUpdate);
rpc PendingChannels(PendingChannelRequest) returns (PendingChannelResponse); rpc PendingChannels(PendingChannelRequest) returns (PendingChannelResponse);
rpc ListChannels(ListChannelsRequest) returns (ListChannelsResponse);
rpc SendPayment(stream SendRequest) returns (stream SendResponse); rpc SendPayment(stream SendRequest) returns (stream SendResponse);
@ -84,31 +86,33 @@ message ConnectPeerResponse {
} }
message HTLC { message HTLC {
int64 id = 1; bool incoming = 1;
int64 amount = 2; int64 amount = 2;
bytes hash_lock = 3; bytes hash_lock = 3;
uint32 expiration_height = 4;
bool to_us = 4; uint32 revocation_delay = 5;
} }
message ActiveChannel { message ActiveChannel {
// TODO(roasbeef): make channel points a string everywhere in rpc? string remote_pubkey = 1;
string remote_id = 1;
string channel_point = 2; string channel_point = 2;
int64 capacity = 3; int64 capacity = 3;
int64 local_balance = 4; int64 local_balance = 4;
int64 remote_balance = 5; int64 remote_balance = 5;
int64 unsettled_belance = 6; int64 unsettled_balance = 6;
repeated HTLC pending_htlcs = 7; repeated HTLC pending_htlcs = 7;
uint64 num_updates = 8; uint64 num_updates = 8;
// TODO(roasbeef): other stuffs // TODO(roasbeef): other stuffs
} }
message ListChannelsRequest {}
message ListChannelsResponse {
repeated ActiveChannel channels = 9;
}
message Peer { message Peer {
string lightning_id = 1; string lightning_id = 1;
int32 peer_id = 2; int32 peer_id = 2;
@ -121,9 +125,6 @@ message Peer {
int64 sat_recv = 7; int64 sat_recv = 7;
bool inbound = 8; bool inbound = 8;
// TODO(roasbeef): add pending channels
repeated ActiveChannel channels = 9;
} }
message ListPeersRequest {} message ListPeersRequest {}