walletrpc: add ListUnspent RPC

This commit is contained in:
Wilmer Paulino 2020-05-20 16:12:51 -07:00
parent 7616a3dc7f
commit acfd432602
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F
6 changed files with 362 additions and 109 deletions

View File

@ -3,6 +3,7 @@
package walletrpc
import (
"github.com/btcsuite/btcd/chaincfg"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
@ -48,4 +49,7 @@ type Config struct {
// Chain is an interface that the WalletKit will use to determine state
// about the backing chain of the wallet.
Chain lnwallet.BlockChainIO
// ChainParams are the parameters of the wallet's backing chain.
ChainParams *chaincfg.Params
}

View File

@ -132,6 +132,95 @@ func (WitnessType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{0}
}
type ListUnspentRequest struct {
// The minimum number of confirmations to be included.
MinConfs int32 `protobuf:"varint,1,opt,name=min_confs,json=minConfs,proto3" json:"min_confs,omitempty"`
// The maximum number of confirmations to be included.
MaxConfs int32 `protobuf:"varint,2,opt,name=max_confs,json=maxConfs,proto3" json:"max_confs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListUnspentRequest) Reset() { *m = ListUnspentRequest{} }
func (m *ListUnspentRequest) String() string { return proto.CompactTextString(m) }
func (*ListUnspentRequest) ProtoMessage() {}
func (*ListUnspentRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{0}
}
func (m *ListUnspentRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListUnspentRequest.Unmarshal(m, b)
}
func (m *ListUnspentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListUnspentRequest.Marshal(b, m, deterministic)
}
func (m *ListUnspentRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListUnspentRequest.Merge(m, src)
}
func (m *ListUnspentRequest) XXX_Size() int {
return xxx_messageInfo_ListUnspentRequest.Size(m)
}
func (m *ListUnspentRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ListUnspentRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ListUnspentRequest proto.InternalMessageInfo
func (m *ListUnspentRequest) GetMinConfs() int32 {
if m != nil {
return m.MinConfs
}
return 0
}
func (m *ListUnspentRequest) GetMaxConfs() int32 {
if m != nil {
return m.MaxConfs
}
return 0
}
type ListUnspentResponse struct {
// A list of utxos satisfying the specified number of confirmations.
Utxos []*lnrpc.Utxo `protobuf:"bytes,1,rep,name=utxos,proto3" json:"utxos,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListUnspentResponse) Reset() { *m = ListUnspentResponse{} }
func (m *ListUnspentResponse) String() string { return proto.CompactTextString(m) }
func (*ListUnspentResponse) ProtoMessage() {}
func (*ListUnspentResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{1}
}
func (m *ListUnspentResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListUnspentResponse.Unmarshal(m, b)
}
func (m *ListUnspentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListUnspentResponse.Marshal(b, m, deterministic)
}
func (m *ListUnspentResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListUnspentResponse.Merge(m, src)
}
func (m *ListUnspentResponse) XXX_Size() int {
return xxx_messageInfo_ListUnspentResponse.Size(m)
}
func (m *ListUnspentResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ListUnspentResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ListUnspentResponse proto.InternalMessageInfo
func (m *ListUnspentResponse) GetUtxos() []*lnrpc.Utxo {
if m != nil {
return m.Utxos
}
return nil
}
type LeaseOutputRequest struct {
//
//An ID of 32 random bytes that must be unique for each distinct application
@ -148,7 +237,7 @@ func (m *LeaseOutputRequest) Reset() { *m = LeaseOutputRequest{} }
func (m *LeaseOutputRequest) String() string { return proto.CompactTextString(m) }
func (*LeaseOutputRequest) ProtoMessage() {}
func (*LeaseOutputRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{0}
return fileDescriptor_6cc6942ac78249e5, []int{2}
}
func (m *LeaseOutputRequest) XXX_Unmarshal(b []byte) error {
@ -196,7 +285,7 @@ func (m *LeaseOutputResponse) Reset() { *m = LeaseOutputResponse{} }
func (m *LeaseOutputResponse) String() string { return proto.CompactTextString(m) }
func (*LeaseOutputResponse) ProtoMessage() {}
func (*LeaseOutputResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{1}
return fileDescriptor_6cc6942ac78249e5, []int{3}
}
func (m *LeaseOutputResponse) XXX_Unmarshal(b []byte) error {
@ -238,7 +327,7 @@ func (m *ReleaseOutputRequest) Reset() { *m = ReleaseOutputRequest{} }
func (m *ReleaseOutputRequest) String() string { return proto.CompactTextString(m) }
func (*ReleaseOutputRequest) ProtoMessage() {}
func (*ReleaseOutputRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{2}
return fileDescriptor_6cc6942ac78249e5, []int{4}
}
func (m *ReleaseOutputRequest) XXX_Unmarshal(b []byte) error {
@ -283,7 +372,7 @@ func (m *ReleaseOutputResponse) Reset() { *m = ReleaseOutputResponse{} }
func (m *ReleaseOutputResponse) String() string { return proto.CompactTextString(m) }
func (*ReleaseOutputResponse) ProtoMessage() {}
func (*ReleaseOutputResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{3}
return fileDescriptor_6cc6942ac78249e5, []int{5}
}
func (m *ReleaseOutputResponse) XXX_Unmarshal(b []byte) error {
@ -323,7 +412,7 @@ func (m *KeyReq) Reset() { *m = KeyReq{} }
func (m *KeyReq) String() string { return proto.CompactTextString(m) }
func (*KeyReq) ProtoMessage() {}
func (*KeyReq) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{4}
return fileDescriptor_6cc6942ac78249e5, []int{6}
}
func (m *KeyReq) XXX_Unmarshal(b []byte) error {
@ -368,7 +457,7 @@ func (m *AddrRequest) Reset() { *m = AddrRequest{} }
func (m *AddrRequest) String() string { return proto.CompactTextString(m) }
func (*AddrRequest) ProtoMessage() {}
func (*AddrRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{5}
return fileDescriptor_6cc6942ac78249e5, []int{7}
}
func (m *AddrRequest) XXX_Unmarshal(b []byte) error {
@ -402,7 +491,7 @@ func (m *AddrResponse) Reset() { *m = AddrResponse{} }
func (m *AddrResponse) String() string { return proto.CompactTextString(m) }
func (*AddrResponse) ProtoMessage() {}
func (*AddrResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{6}
return fileDescriptor_6cc6942ac78249e5, []int{8}
}
func (m *AddrResponse) XXX_Unmarshal(b []byte) error {
@ -446,7 +535,7 @@ func (m *Transaction) Reset() { *m = Transaction{} }
func (m *Transaction) String() string { return proto.CompactTextString(m) }
func (*Transaction) ProtoMessage() {}
func (*Transaction) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{7}
return fileDescriptor_6cc6942ac78249e5, []int{9}
}
func (m *Transaction) XXX_Unmarshal(b []byte) error {
@ -498,7 +587,7 @@ func (m *PublishResponse) Reset() { *m = PublishResponse{} }
func (m *PublishResponse) String() string { return proto.CompactTextString(m) }
func (*PublishResponse) ProtoMessage() {}
func (*PublishResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{8}
return fileDescriptor_6cc6942ac78249e5, []int{10}
}
func (m *PublishResponse) XXX_Unmarshal(b []byte) error {
@ -545,7 +634,7 @@ func (m *SendOutputsRequest) Reset() { *m = SendOutputsRequest{} }
func (m *SendOutputsRequest) String() string { return proto.CompactTextString(m) }
func (*SendOutputsRequest) ProtoMessage() {}
func (*SendOutputsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{9}
return fileDescriptor_6cc6942ac78249e5, []int{11}
}
func (m *SendOutputsRequest) XXX_Unmarshal(b []byte) error {
@ -600,7 +689,7 @@ func (m *SendOutputsResponse) Reset() { *m = SendOutputsResponse{} }
func (m *SendOutputsResponse) String() string { return proto.CompactTextString(m) }
func (*SendOutputsResponse) ProtoMessage() {}
func (*SendOutputsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{10}
return fileDescriptor_6cc6942ac78249e5, []int{12}
}
func (m *SendOutputsResponse) XXX_Unmarshal(b []byte) error {
@ -641,7 +730,7 @@ func (m *EstimateFeeRequest) Reset() { *m = EstimateFeeRequest{} }
func (m *EstimateFeeRequest) String() string { return proto.CompactTextString(m) }
func (*EstimateFeeRequest) ProtoMessage() {}
func (*EstimateFeeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{11}
return fileDescriptor_6cc6942ac78249e5, []int{13}
}
func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error {
@ -683,7 +772,7 @@ func (m *EstimateFeeResponse) Reset() { *m = EstimateFeeResponse{} }
func (m *EstimateFeeResponse) String() string { return proto.CompactTextString(m) }
func (*EstimateFeeResponse) ProtoMessage() {}
func (*EstimateFeeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{12}
return fileDescriptor_6cc6942ac78249e5, []int{14}
}
func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error {
@ -746,7 +835,7 @@ func (m *PendingSweep) Reset() { *m = PendingSweep{} }
func (m *PendingSweep) String() string { return proto.CompactTextString(m) }
func (*PendingSweep) ProtoMessage() {}
func (*PendingSweep) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{13}
return fileDescriptor_6cc6942ac78249e5, []int{15}
}
func (m *PendingSweep) XXX_Unmarshal(b []byte) error {
@ -840,7 +929,7 @@ func (m *PendingSweepsRequest) Reset() { *m = PendingSweepsRequest{} }
func (m *PendingSweepsRequest) String() string { return proto.CompactTextString(m) }
func (*PendingSweepsRequest) ProtoMessage() {}
func (*PendingSweepsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{14}
return fileDescriptor_6cc6942ac78249e5, []int{16}
}
func (m *PendingSweepsRequest) XXX_Unmarshal(b []byte) error {
@ -874,7 +963,7 @@ func (m *PendingSweepsResponse) Reset() { *m = PendingSweepsResponse{} }
func (m *PendingSweepsResponse) String() string { return proto.CompactTextString(m) }
func (*PendingSweepsResponse) ProtoMessage() {}
func (*PendingSweepsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{15}
return fileDescriptor_6cc6942ac78249e5, []int{17}
}
func (m *PendingSweepsResponse) XXX_Unmarshal(b []byte) error {
@ -924,7 +1013,7 @@ func (m *BumpFeeRequest) Reset() { *m = BumpFeeRequest{} }
func (m *BumpFeeRequest) String() string { return proto.CompactTextString(m) }
func (*BumpFeeRequest) ProtoMessage() {}
func (*BumpFeeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{16}
return fileDescriptor_6cc6942ac78249e5, []int{18}
}
func (m *BumpFeeRequest) XXX_Unmarshal(b []byte) error {
@ -983,7 +1072,7 @@ func (m *BumpFeeResponse) Reset() { *m = BumpFeeResponse{} }
func (m *BumpFeeResponse) String() string { return proto.CompactTextString(m) }
func (*BumpFeeResponse) ProtoMessage() {}
func (*BumpFeeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{17}
return fileDescriptor_6cc6942ac78249e5, []int{19}
}
func (m *BumpFeeResponse) XXX_Unmarshal(b []byte) error {
@ -1018,7 +1107,7 @@ func (m *ListSweepsRequest) Reset() { *m = ListSweepsRequest{} }
func (m *ListSweepsRequest) String() string { return proto.CompactTextString(m) }
func (*ListSweepsRequest) ProtoMessage() {}
func (*ListSweepsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{18}
return fileDescriptor_6cc6942ac78249e5, []int{20}
}
func (m *ListSweepsRequest) XXX_Unmarshal(b []byte) error {
@ -1060,7 +1149,7 @@ func (m *ListSweepsResponse) Reset() { *m = ListSweepsResponse{} }
func (m *ListSweepsResponse) String() string { return proto.CompactTextString(m) }
func (*ListSweepsResponse) ProtoMessage() {}
func (*ListSweepsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{19}
return fileDescriptor_6cc6942ac78249e5, []int{21}
}
func (m *ListSweepsResponse) XXX_Unmarshal(b []byte) error {
@ -1141,7 +1230,7 @@ func (m *ListSweepsResponse_TransactionIDs) Reset() { *m = ListSweepsRes
func (m *ListSweepsResponse_TransactionIDs) String() string { return proto.CompactTextString(m) }
func (*ListSweepsResponse_TransactionIDs) ProtoMessage() {}
func (*ListSweepsResponse_TransactionIDs) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{19, 0}
return fileDescriptor_6cc6942ac78249e5, []int{21, 0}
}
func (m *ListSweepsResponse_TransactionIDs) XXX_Unmarshal(b []byte) error {
@ -1185,7 +1274,7 @@ func (m *LabelTransactionRequest) Reset() { *m = LabelTransactionRequest
func (m *LabelTransactionRequest) String() string { return proto.CompactTextString(m) }
func (*LabelTransactionRequest) ProtoMessage() {}
func (*LabelTransactionRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{20}
return fileDescriptor_6cc6942ac78249e5, []int{22}
}
func (m *LabelTransactionRequest) XXX_Unmarshal(b []byte) error {
@ -1237,7 +1326,7 @@ func (m *LabelTransactionResponse) Reset() { *m = LabelTransactionRespon
func (m *LabelTransactionResponse) String() string { return proto.CompactTextString(m) }
func (*LabelTransactionResponse) ProtoMessage() {}
func (*LabelTransactionResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{21}
return fileDescriptor_6cc6942ac78249e5, []int{23}
}
func (m *LabelTransactionResponse) XXX_Unmarshal(b []byte) error {
@ -1260,6 +1349,8 @@ var xxx_messageInfo_LabelTransactionResponse proto.InternalMessageInfo
func init() {
proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value)
proto.RegisterType((*ListUnspentRequest)(nil), "walletrpc.ListUnspentRequest")
proto.RegisterType((*ListUnspentResponse)(nil), "walletrpc.ListUnspentResponse")
proto.RegisterType((*LeaseOutputRequest)(nil), "walletrpc.LeaseOutputRequest")
proto.RegisterType((*LeaseOutputResponse)(nil), "walletrpc.LeaseOutputResponse")
proto.RegisterType((*ReleaseOutputRequest)(nil), "walletrpc.ReleaseOutputRequest")
@ -1288,92 +1379,97 @@ func init() {
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
var fileDescriptor_6cc6942ac78249e5 = []byte{
// 1358 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdf, 0x6f, 0x1a, 0xc7,
0x13, 0x0f, 0xc6, 0x60, 0x18, 0x7e, 0x18, 0x2f, 0xd8, 0x26, 0xc4, 0x89, 0xf9, 0x5e, 0xf4, 0x6d,
0xad, 0x36, 0xc1, 0xaa, 0xa3, 0x54, 0x4d, 0x2a, 0x55, 0xb5, 0xe1, 0x2c, 0x2c, 0x30, 0x38, 0x77,
0x97, 0x58, 0x69, 0x1f, 0x4e, 0x07, 0xb7, 0xc1, 0x27, 0xe3, 0xbb, 0xcb, 0xde, 0x12, 0xe0, 0xad,
0x0f, 0xfd, 0x1b, 0x2a, 0xe5, 0xbf, 0xad, 0x76, 0xef, 0x07, 0x7b, 0x80, 0x5d, 0x55, 0xea, 0x93,
0x6f, 0x3f, 0x33, 0xf3, 0x99, 0xd9, 0x99, 0x61, 0x76, 0x0c, 0x8f, 0xa7, 0xc6, 0x78, 0x8c, 0x29,
0x71, 0x87, 0xc7, 0xfe, 0xd7, 0xad, 0x45, 0x1b, 0x2e, 0x71, 0xa8, 0x83, 0xb2, 0x91, 0xa8, 0x96,
0x25, 0xee, 0xd0, 0x47, 0x6b, 0x15, 0xcf, 0x1a, 0xd9, 0x4c, 0x9d, 0xfd, 0xc5, 0xc4, 0x47, 0xa5,
0x77, 0x80, 0xba, 0xd8, 0xf0, 0x70, 0x7f, 0x42, 0xdd, 0x09, 0x55, 0xf0, 0xe7, 0x09, 0xf6, 0x28,
0x2a, 0xc2, 0x86, 0x65, 0x56, 0x13, 0xf5, 0xc4, 0x51, 0x5e, 0xd9, 0xb0, 0x4c, 0xf4, 0x3d, 0x64,
0x9c, 0x09, 0x75, 0x1d, 0xcb, 0xa6, 0xd5, 0x8d, 0x7a, 0xe2, 0x28, 0x77, 0xb2, 0xdd, 0x18, 0x33,
0xb2, 0x46, 0x7f, 0x42, 0xaf, 0x18, 0xac, 0x44, 0x0a, 0xd2, 0x6b, 0x28, 0xc7, 0x28, 0x3d, 0xd7,
0xb1, 0x3d, 0x8c, 0x9e, 0x01, 0xe0, 0x99, 0x6b, 0x11, 0x83, 0x5a, 0x8e, 0xcd, 0xb9, 0x37, 0x15,
0x01, 0x91, 0x54, 0xa8, 0x28, 0x78, 0xfc, 0x1f, 0xc7, 0xb2, 0x0f, 0xbb, 0x4b, 0xa4, 0x7e, 0x34,
0xd2, 0x3b, 0x48, 0x77, 0xf0, 0x5c, 0xc1, 0x9f, 0xd1, 0x11, 0x94, 0x6e, 0xf1, 0x5c, 0xff, 0x64,
0xd9, 0x23, 0x4c, 0x74, 0x97, 0x30, 0x5e, 0xe6, 0x2d, 0xa5, 0x14, 0x6f, 0xf1, 0xfc, 0x9c, 0xc3,
0x57, 0x0c, 0x45, 0x4f, 0x01, 0xb8, 0xa6, 0x71, 0x67, 0x8d, 0xe7, 0xdc, 0x77, 0x4a, 0xc9, 0x32,
0x1d, 0x0e, 0x48, 0x05, 0xc8, 0x9d, 0x9a, 0x26, 0x09, 0xe2, 0x96, 0x24, 0xc8, 0xfb, 0xc7, 0xe0,
0xfe, 0x08, 0x36, 0x0d, 0xd3, 0x24, 0x9c, 0x3b, 0xab, 0xf0, 0x6f, 0xe9, 0x2d, 0xe4, 0x34, 0x62,
0xd8, 0x9e, 0x31, 0x64, 0x29, 0x40, 0xbb, 0x90, 0xa6, 0x33, 0xfd, 0x06, 0xcf, 0x82, 0xeb, 0xa6,
0xe8, 0xac, 0x8d, 0x67, 0xa8, 0x02, 0xa9, 0xb1, 0x31, 0xc0, 0x63, 0xee, 0x32, 0xab, 0xf8, 0x07,
0xe9, 0x47, 0xd8, 0xbe, 0x9a, 0x0c, 0xc6, 0x96, 0x77, 0x13, 0xb9, 0x78, 0x0e, 0x05, 0xd7, 0x87,
0x74, 0x4c, 0x88, 0x13, 0xfa, 0xca, 0x07, 0xa0, 0xcc, 0x30, 0x89, 0x00, 0x52, 0xb1, 0x6d, 0xfa,
0xf9, 0xf0, 0xc2, 0x2c, 0x1f, 0x00, 0x78, 0x06, 0xd5, 0x5d, 0x4c, 0xf4, 0xdb, 0x29, 0xb7, 0x4b,
0x2a, 0x19, 0xcf, 0xa0, 0x57, 0x98, 0x74, 0xa6, 0xe8, 0x08, 0xb6, 0x1c, 0x5f, 0xbf, 0xba, 0x51,
0x4f, 0x1e, 0xe5, 0x4e, 0x8a, 0x8d, 0xa0, 0x9b, 0x1a, 0xda, 0xac, 0x3f, 0xa1, 0x4a, 0x28, 0x5e,
0xc4, 0x9a, 0x14, 0x63, 0x7d, 0x01, 0xe5, 0x98, 0xcf, 0x20, 0xde, 0x5d, 0x48, 0x13, 0x63, 0xaa,
0xd3, 0xe8, 0xbe, 0xc4, 0x98, 0x6a, 0x33, 0xe9, 0x35, 0x20, 0xd9, 0xa3, 0xd6, 0x9d, 0x41, 0xf1,
0x39, 0xc6, 0x61, 0x84, 0x87, 0x90, 0x1b, 0x3a, 0xf6, 0x27, 0x9d, 0x1a, 0x64, 0x84, 0xc3, 0x12,
0x01, 0x83, 0x34, 0x8e, 0x48, 0xaf, 0xa0, 0x1c, 0x33, 0x0b, 0x9c, 0x3c, 0x78, 0x33, 0xe9, 0x6b,
0x12, 0xf2, 0x57, 0xd8, 0x36, 0x2d, 0x7b, 0xa4, 0x4e, 0x31, 0x76, 0x63, 0xed, 0x95, 0xf8, 0x87,
0xf6, 0x42, 0x6f, 0x20, 0x3f, 0xb5, 0xa8, 0x8d, 0x3d, 0x4f, 0xa7, 0x73, 0x17, 0xf3, 0x02, 0x15,
0x4f, 0xf6, 0x1a, 0xd1, 0x0f, 0xb0, 0x71, 0xed, 0x8b, 0xb5, 0xb9, 0x8b, 0x95, 0xdc, 0x74, 0x71,
0x60, 0xcd, 0x64, 0xdc, 0x39, 0x13, 0x9b, 0xea, 0x9e, 0x41, 0x79, 0xb6, 0x0a, 0x4a, 0xd6, 0x47,
0x54, 0x83, 0xa2, 0x3a, 0xe4, 0xc3, 0xa8, 0x07, 0x73, 0x8a, 0xab, 0x9b, 0x5c, 0x01, 0xfc, 0xb8,
0xcf, 0xe6, 0x14, 0xa3, 0x97, 0x80, 0x06, 0xc4, 0x31, 0xcc, 0xa1, 0xe1, 0x51, 0xdd, 0xa0, 0x14,
0xdf, 0xb9, 0xd4, 0xab, 0xa6, 0xb8, 0xde, 0x4e, 0x24, 0x39, 0x0d, 0x04, 0xe8, 0x04, 0x76, 0x6d,
0x3c, 0xa3, 0xfa, 0xc2, 0xe6, 0x06, 0x5b, 0xa3, 0x1b, 0x5a, 0x4d, 0x73, 0x8b, 0x32, 0x13, 0x9e,
0x85, 0xb2, 0x36, 0x17, 0x31, 0x1b, 0xe2, 0x67, 0x1f, 0x9b, 0xba, 0x98, 0xfc, 0x8c, 0x6f, 0x13,
0x09, 0x9b, 0x51, 0x15, 0xd0, 0x2b, 0xd8, 0x5b, 0xd8, 0xc4, 0xae, 0x90, 0x5d, 0x32, 0x52, 0x17,
0x77, 0xa9, 0x40, 0xea, 0x93, 0x43, 0x86, 0xb8, 0xba, 0x55, 0x4f, 0x1c, 0x65, 0x14, 0xff, 0x20,
0xed, 0x41, 0x45, 0x2c, 0x4d, 0xd8, 0xab, 0xd2, 0x35, 0xec, 0x2e, 0xe1, 0x41, 0xa9, 0x7f, 0x81,
0xa2, 0xeb, 0x0b, 0x74, 0x8f, 0x4b, 0xaa, 0x09, 0xde, 0xad, 0xfb, 0x42, 0x41, 0x44, 0x4b, 0xa5,
0xe0, 0x8a, 0x3c, 0xd2, 0x5f, 0x09, 0x28, 0x9e, 0x4d, 0xee, 0x5c, 0xa1, 0xeb, 0xfe, 0x55, 0x3b,
0x1c, 0x42, 0xce, 0x4f, 0x10, 0x4f, 0x16, 0xef, 0x86, 0x82, 0x02, 0x3e, 0xc4, 0x52, 0xb4, 0x52,
0xd5, 0xe4, 0x4a, 0x55, 0xa3, 0x4c, 0x6c, 0x8a, 0x99, 0xd8, 0x81, 0xed, 0x28, 0xae, 0x60, 0x80,
0xbd, 0x84, 0x9d, 0xae, 0xe5, 0xd1, 0x58, 0x66, 0x50, 0x15, 0xb6, 0xbe, 0x60, 0x32, 0x70, 0x3c,
0xcc, 0x83, 0xcd, 0x28, 0xe1, 0x51, 0xfa, 0x63, 0x03, 0x90, 0xa8, 0x1f, 0x64, 0xac, 0x0b, 0x65,
0xba, 0x18, 0x40, 0xba, 0x89, 0xa9, 0x61, 0x8d, 0xbd, 0xe0, 0xa6, 0x8f, 0x83, 0x9b, 0x0a, 0x23,
0xaa, 0xe5, 0x2b, 0xb4, 0x1f, 0x29, 0x88, 0xae, 0xa0, 0xe8, 0x1a, 0xb6, 0x45, 0x36, 0xcb, 0xf4,
0x82, 0x09, 0xfd, 0x42, 0x28, 0xc0, 0x6a, 0x14, 0xa2, 0x83, 0x8b, 0x16, 0x23, 0x2f, 0x0a, 0x34,
0x17, 0xa6, 0x57, 0x7b, 0x03, 0xc5, 0xb8, 0x0e, 0xfa, 0x76, 0xd5, 0x15, 0xab, 0x75, 0x76, 0xd9,
0xf4, 0x2c, 0x03, 0x69, 0xbf, 0x17, 0x24, 0x03, 0xf6, 0xbb, 0x6c, 0x1a, 0x09, 0x4c, 0x61, 0xde,
0x10, 0x6c, 0xd2, 0x59, 0xf4, 0xca, 0xf0, 0xef, 0xf5, 0x53, 0x17, 0x1d, 0x40, 0xd6, 0xf9, 0x82,
0xc9, 0x94, 0x58, 0x41, 0xf9, 0x32, 0xca, 0x02, 0x90, 0x6a, 0x50, 0x5d, 0x75, 0xe1, 0x5f, 0xf2,
0xbb, 0xaf, 0x49, 0xc8, 0x09, 0xd3, 0x00, 0x95, 0x61, 0xfb, 0x7d, 0xaf, 0xd3, 0xeb, 0x5f, 0xf7,
0xf4, 0xeb, 0x0b, 0xad, 0x27, 0xab, 0x6a, 0xe9, 0x11, 0xaa, 0x42, 0xa5, 0xd9, 0xbf, 0xbc, 0xbc,
0xd0, 0x2e, 0xe5, 0x9e, 0xa6, 0x6b, 0x17, 0x97, 0xb2, 0xde, 0xed, 0x37, 0x3b, 0xa5, 0x04, 0xda,
0x87, 0xb2, 0x20, 0xe9, 0xf5, 0xf5, 0x96, 0xdc, 0x3d, 0xfd, 0x58, 0xda, 0x40, 0xbb, 0xb0, 0x23,
0x08, 0x14, 0xf9, 0x43, 0xbf, 0x23, 0x97, 0x92, 0x4c, 0xbf, 0xad, 0x75, 0x9b, 0x7a, 0xff, 0xfc,
0x5c, 0x56, 0xe4, 0x56, 0x28, 0xd8, 0x64, 0x2e, 0xb8, 0xe0, 0xb4, 0xd9, 0x94, 0xaf, 0xb4, 0x85,
0x24, 0x85, 0xfe, 0x0f, 0xff, 0x8b, 0x99, 0x30, 0xf7, 0xfd, 0xf7, 0x9a, 0xae, 0xca, 0xcd, 0x7e,
0xaf, 0xa5, 0x77, 0xe5, 0x0f, 0x72, 0xb7, 0x94, 0x46, 0xdf, 0x80, 0x14, 0x27, 0x50, 0xdf, 0x37,
0x9b, 0xb2, 0xaa, 0xc6, 0xf5, 0xb6, 0xd0, 0x21, 0x3c, 0x59, 0x8a, 0xe0, 0xb2, 0xaf, 0xc9, 0x21,
0x6b, 0x29, 0x83, 0xea, 0x70, 0xb0, 0x1c, 0x09, 0xd7, 0x08, 0xf8, 0x4a, 0x59, 0x74, 0x00, 0x55,
0xae, 0x21, 0x32, 0x87, 0xf1, 0x02, 0xaa, 0x40, 0x29, 0xc8, 0x9c, 0xde, 0x91, 0x3f, 0xea, 0xed,
0x53, 0xb5, 0x5d, 0xca, 0xa1, 0x27, 0xb0, 0xdf, 0x93, 0x55, 0x46, 0xb7, 0x22, 0xcc, 0x2f, 0x25,
0xeb, 0xb4, 0xd7, 0x6c, 0xf7, 0x95, 0x52, 0xe1, 0xe4, 0xcf, 0x2d, 0xc8, 0x5e, 0xf3, 0x0e, 0xed,
0x58, 0x14, 0x75, 0x21, 0x27, 0x2c, 0x30, 0xe8, 0xa9, 0xd8, 0xbc, 0x2b, 0xfb, 0x49, 0xed, 0xd9,
0x7d, 0xe2, 0xe0, 0x27, 0xa6, 0x40, 0x21, 0xb6, 0x82, 0xa0, 0x43, 0xc1, 0x60, 0xdd, 0xc6, 0x53,
0xab, 0xdf, 0xaf, 0x10, 0x70, 0xbe, 0x85, 0x42, 0x0b, 0x13, 0xeb, 0x0b, 0xee, 0xe1, 0x19, 0xed,
0xe0, 0x39, 0xda, 0x11, 0x4c, 0xfc, 0xbd, 0xa6, 0xb6, 0x17, 0x3d, 0xd1, 0x1d, 0x3c, 0x6f, 0x61,
0x6f, 0x48, 0x2c, 0x97, 0x3a, 0x04, 0xfd, 0x04, 0x59, 0xdf, 0x96, 0xd9, 0x95, 0x45, 0xa5, 0xae,
0x33, 0x34, 0xa8, 0x43, 0xee, 0xb5, 0xfc, 0x19, 0x32, 0xcc, 0x1f, 0xdb, 0x6a, 0x90, 0xf8, 0xc6,
0x09, 0x5b, 0x4f, 0x6d, 0x7f, 0x05, 0x0f, 0x42, 0x6e, 0x03, 0x0a, 0xd6, 0x15, 0x71, 0xe3, 0x11,
0x69, 0x04, 0xbc, 0x56, 0x13, 0x27, 0xf6, 0xd2, 0x96, 0xd3, 0x85, 0x9c, 0xb0, 0x4c, 0xc4, 0xca,
0xb3, 0xba, 0xd8, 0xc4, 0xca, 0xb3, 0x6e, 0x07, 0xe9, 0x42, 0x4e, 0xd8, 0x1a, 0x62, 0x6c, 0xab,
0x4b, 0x48, 0x8c, 0x6d, 0xdd, 0xb2, 0xa1, 0x40, 0x21, 0xf6, 0x34, 0xc5, 0x8a, 0xbd, 0xee, 0x31,
0x8b, 0x15, 0x7b, 0xfd, 0xab, 0xf6, 0x2b, 0x6c, 0x05, 0xc3, 0x1f, 0x3d, 0x16, 0x94, 0xe3, 0x0f,
0x55, 0x2c, 0x63, 0x4b, 0x6f, 0x05, 0xba, 0x00, 0x58, 0x4c, 0x5d, 0x74, 0x70, 0xcf, 0x30, 0xf6,
0x79, 0x9e, 0x3e, 0x38, 0xaa, 0xd1, 0xef, 0x50, 0x5a, 0x9e, 0x70, 0x48, 0x12, 0x4d, 0xd6, 0x4f,
0xd8, 0xda, 0xf3, 0x07, 0x75, 0x7c, 0xf2, 0xb3, 0x1f, 0x7e, 0x3b, 0x1e, 0x59, 0xf4, 0x66, 0x32,
0x68, 0x0c, 0x9d, 0xbb, 0xe3, 0x31, 0xdb, 0x41, 0x6c, 0xcb, 0x1e, 0xd9, 0x98, 0x4e, 0x1d, 0x72,
0x7b, 0x3c, 0xb6, 0xcd, 0x63, 0xfe, 0x22, 0x1d, 0x47, 0x5c, 0x83, 0x34, 0xff, 0x37, 0xe6, 0xd5,
0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xea, 0x15, 0x92, 0x8b, 0x0f, 0x0d, 0x00, 0x00,
// 1428 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xff, 0x6f, 0xda, 0xc8,
0x12, 0x6f, 0xbe, 0x40, 0x60, 0x0c, 0x84, 0x2c, 0x24, 0xa1, 0x34, 0x6d, 0x52, 0x57, 0xef, 0xbd,
0xe8, 0xbd, 0x96, 0xe8, 0xa5, 0xea, 0xa9, 0xed, 0x49, 0xa7, 0x4b, 0xc0, 0x11, 0x11, 0x04, 0x52,
0x43, 0x1a, 0xf5, 0xee, 0x07, 0xcb, 0xe0, 0x2d, 0xb1, 0x02, 0xb6, 0xbb, 0x5e, 0x8a, 0xf9, 0xed,
0xfe, 0x8a, 0x93, 0xfa, 0x6f, 0xdd, 0x5f, 0x74, 0xda, 0x5d, 0x63, 0xd6, 0x40, 0x7a, 0x3a, 0xe9,
0x7e, 0x8a, 0x77, 0x3e, 0x33, 0x9f, 0x99, 0x9d, 0x99, 0xcc, 0x0e, 0xf0, 0x78, 0x62, 0x0e, 0x87,
0x98, 0x12, 0xaf, 0x7f, 0x22, 0xbe, 0xee, 0x6d, 0x5a, 0xf1, 0x88, 0x4b, 0x5d, 0x94, 0x8e, 0xa0,
0x72, 0x9a, 0x78, 0x7d, 0x21, 0x2d, 0x17, 0x7d, 0x7b, 0xe0, 0x30, 0x75, 0xf6, 0x17, 0x13, 0x21,
0x55, 0x5b, 0x80, 0x9a, 0xb6, 0x4f, 0x6f, 0x1c, 0xdf, 0xc3, 0x0e, 0xd5, 0xf1, 0x97, 0x31, 0xf6,
0x29, 0x7a, 0x02, 0xe9, 0x91, 0xed, 0x18, 0x7d, 0xd7, 0xf9, 0xec, 0x97, 0xd6, 0x8e, 0xd6, 0x8e,
0x13, 0x7a, 0x6a, 0x64, 0x3b, 0x55, 0x76, 0xe6, 0xa0, 0x19, 0x84, 0xe0, 0x7a, 0x08, 0x9a, 0x01,
0x07, 0xd5, 0xb7, 0x50, 0x88, 0xf1, 0xf9, 0x9e, 0xeb, 0xf8, 0x18, 0x3d, 0x87, 0xc4, 0x98, 0x06,
0x2e, 0x23, 0xdb, 0x38, 0x56, 0x4e, 0x95, 0xca, 0x90, 0x85, 0x52, 0xb9, 0xa1, 0x81, 0xab, 0x0b,
0x44, 0xfd, 0x00, 0xa8, 0x89, 0x4d, 0x1f, 0xb7, 0xc7, 0xd4, 0x1b, 0x47, 0x91, 0xe4, 0x60, 0xdd,
0xb6, 0x78, 0x08, 0x19, 0x7d, 0xdd, 0xb6, 0xd0, 0xff, 0x20, 0xe5, 0x8e, 0xa9, 0xe7, 0xda, 0x0e,
0xe5, 0xbe, 0x95, 0xd3, 0xed, 0x90, 0xab, 0x3d, 0xa6, 0xd7, 0x4c, 0xac, 0x47, 0x0a, 0xea, 0x1b,
0x28, 0xc4, 0x28, 0xc3, 0x60, 0x9e, 0x01, 0xe0, 0xc0, 0xb3, 0x89, 0x49, 0x6d, 0xd7, 0xe1, 0xdc,
0x9b, 0xba, 0x24, 0x51, 0x3b, 0x50, 0xd4, 0xf1, 0xf0, 0x1f, 0x8e, 0x65, 0x1f, 0x76, 0x17, 0x48,
0x45, 0x34, 0xea, 0x07, 0x48, 0x36, 0xf0, 0x54, 0xc7, 0x5f, 0xd0, 0x31, 0xe4, 0xef, 0xf1, 0xd4,
0xf8, 0x6c, 0x3b, 0x03, 0x4c, 0x0c, 0x8f, 0x30, 0x5e, 0x91, 0xfc, 0xdc, 0x3d, 0x9e, 0x5e, 0x70,
0xf1, 0x35, 0x93, 0xa2, 0xa7, 0x00, 0x5c, 0xd3, 0x1c, 0xd9, 0xc3, 0x69, 0x58, 0x83, 0x34, 0xd3,
0xe1, 0x02, 0x35, 0x0b, 0xca, 0x99, 0x65, 0x91, 0x30, 0x6e, 0x55, 0x85, 0x8c, 0x38, 0x86, 0xf7,
0x47, 0xb0, 0x69, 0x5a, 0x16, 0xe1, 0xdc, 0x69, 0x9d, 0x7f, 0xab, 0xef, 0x41, 0xe9, 0x12, 0xd3,
0xf1, 0xcd, 0x3e, 0x4b, 0x01, 0xda, 0x85, 0x24, 0x0d, 0x8c, 0x3b, 0x1c, 0x84, 0xd7, 0x4d, 0xd0,
0xa0, 0x8e, 0x03, 0x54, 0x84, 0xc4, 0xd0, 0xec, 0xe1, 0x21, 0x77, 0x99, 0xd6, 0xc5, 0x41, 0xfd,
0x01, 0xb6, 0xaf, 0xc7, 0xbd, 0xa1, 0xed, 0xdf, 0x45, 0x2e, 0x5e, 0x40, 0xd6, 0x13, 0x22, 0x03,
0x13, 0xe2, 0xce, 0x7c, 0x65, 0x42, 0xa1, 0xc6, 0x64, 0x2a, 0x01, 0xd4, 0xc1, 0x8e, 0x25, 0xf2,
0xe1, 0xcf, 0xb2, 0x7c, 0x00, 0xe0, 0x9b, 0xd4, 0xf0, 0x30, 0x31, 0xee, 0x27, 0xdc, 0x6e, 0x43,
0x4f, 0xf9, 0x26, 0xbd, 0xc6, 0xa4, 0x31, 0x41, 0xc7, 0xb0, 0xe5, 0x0a, 0xfd, 0xd2, 0x3a, 0x6f,
0xa5, 0x5c, 0x25, 0xec, 0xeb, 0x4a, 0x37, 0x68, 0x8f, 0xa9, 0x3e, 0x83, 0xe7, 0xb1, 0x6e, 0xc8,
0xb1, 0xbe, 0x84, 0x42, 0xcc, 0x67, 0x18, 0xef, 0x2e, 0x24, 0x89, 0x39, 0x31, 0x68, 0x74, 0x5f,
0x62, 0x4e, 0xba, 0x81, 0xfa, 0x06, 0x90, 0xe6, 0x53, 0x7b, 0x64, 0x52, 0x7c, 0x81, 0xf1, 0x2c,
0xc2, 0x43, 0x50, 0x58, 0xf3, 0x1b, 0xd4, 0x24, 0x03, 0x3c, 0x2b, 0x11, 0x30, 0x51, 0x97, 0x4b,
0xd4, 0xd7, 0x50, 0x88, 0x99, 0x85, 0x4e, 0xbe, 0x7b, 0x33, 0xf5, 0xdb, 0x06, 0x64, 0xae, 0xb1,
0x63, 0xd9, 0xce, 0xa0, 0x33, 0xc1, 0xd8, 0x8b, 0xb5, 0xd7, 0xda, 0x5f, 0xb4, 0x17, 0x7a, 0x07,
0x99, 0x89, 0x4d, 0x1d, 0xec, 0xfb, 0x06, 0x9d, 0x7a, 0x98, 0x17, 0x28, 0x77, 0xba, 0x57, 0x89,
0x46, 0x41, 0xe5, 0x56, 0xc0, 0xdd, 0xa9, 0x87, 0x75, 0x65, 0x32, 0x3f, 0xb0, 0x66, 0x32, 0x47,
0xee, 0xd8, 0xa1, 0x86, 0x6f, 0x52, 0x9e, 0xad, 0xac, 0x9e, 0x16, 0x92, 0x8e, 0x49, 0xd1, 0x11,
0x64, 0x66, 0x51, 0xf7, 0xa6, 0x14, 0x97, 0x36, 0xb9, 0x02, 0x88, 0xb8, 0xcf, 0xa7, 0x14, 0xa3,
0x57, 0x80, 0x7a, 0xc4, 0x35, 0xad, 0xbe, 0xe9, 0x53, 0xc3, 0xa4, 0x14, 0x8f, 0x3c, 0xea, 0x97,
0x12, 0x5c, 0x6f, 0x27, 0x42, 0xce, 0x42, 0x00, 0x9d, 0xc2, 0xae, 0x83, 0x03, 0x6a, 0xcc, 0x6d,
0xee, 0xb0, 0x3d, 0xb8, 0xa3, 0xa5, 0x24, 0xb7, 0x28, 0x30, 0xf0, 0x7c, 0x86, 0xd5, 0x39, 0xc4,
0x6c, 0x88, 0xc8, 0x3e, 0xb6, 0x0c, 0x39, 0xf9, 0x29, 0x61, 0x13, 0x81, 0xd5, 0xa8, 0x0a, 0xe8,
0x35, 0xec, 0xcd, 0x6d, 0x62, 0x57, 0x48, 0x2f, 0x18, 0x75, 0xe6, 0x77, 0x29, 0x42, 0xe2, 0xb3,
0x4b, 0xfa, 0xb8, 0xb4, 0x75, 0xb4, 0x76, 0x9c, 0xd2, 0xc5, 0x41, 0xdd, 0x83, 0xa2, 0x5c, 0x9a,
0x59, 0xaf, 0xaa, 0xb7, 0xb0, 0xbb, 0x20, 0x0f, 0x4b, 0xfd, 0x13, 0xe4, 0x3c, 0x01, 0x18, 0x3e,
0x47, 0xc2, 0xc1, 0xb7, 0x2f, 0x15, 0x44, 0xb6, 0xd4, 0xb3, 0x9e, 0xcc, 0xa3, 0xfe, 0xbe, 0x06,
0xb9, 0xf3, 0xf1, 0xc8, 0x93, 0xba, 0xee, 0x6f, 0xb5, 0xc3, 0x21, 0x28, 0x22, 0x41, 0x3c, 0x59,
0xbc, 0x1b, 0xb2, 0x3a, 0x08, 0x11, 0x4b, 0xd1, 0x52, 0x55, 0x37, 0x96, 0xaa, 0x1a, 0x65, 0x62,
0x53, 0xce, 0xc4, 0x0e, 0x6c, 0x47, 0x71, 0x85, 0x03, 0xec, 0x15, 0xec, 0xb0, 0x91, 0x1f, 0xcb,
0x0c, 0x2a, 0xc1, 0xd6, 0x57, 0x4c, 0x7a, 0xae, 0x8f, 0x79, 0xb0, 0x29, 0x7d, 0x76, 0x54, 0x7f,
0x5b, 0x17, 0x4f, 0xce, 0x42, 0xc6, 0x9a, 0x50, 0xa0, 0xf3, 0x01, 0x64, 0x58, 0x98, 0x9a, 0xf6,
0xd0, 0x0f, 0x6f, 0xfa, 0x38, 0xbc, 0xa9, 0x34, 0xa2, 0x6a, 0x42, 0xa1, 0xfe, 0x48, 0x47, 0x74,
0x49, 0x8a, 0x6e, 0x61, 0x5b, 0x66, 0xb3, 0x2d, 0x3f, 0x9c, 0xd0, 0x2f, 0xa5, 0x02, 0x2c, 0x47,
0x21, 0x3b, 0xb8, 0xac, 0x31, 0xf2, 0x9c, 0x44, 0x73, 0x69, 0xf9, 0xe5, 0x77, 0x90, 0x8b, 0xeb,
0xa0, 0xff, 0x2c, 0xbb, 0x62, 0xb5, 0x4e, 0x2f, 0x9a, 0x9e, 0xa7, 0x20, 0x29, 0x7a, 0x41, 0x35,
0x61, 0xbf, 0xc9, 0xa6, 0x91, 0xc4, 0x34, 0xcb, 0x1b, 0x82, 0x4d, 0x1a, 0x44, 0xaf, 0x0c, 0xff,
0x5e, 0x3d, 0x75, 0xd1, 0x01, 0xa4, 0xdd, 0xaf, 0x98, 0x4c, 0x88, 0x1d, 0x96, 0x2f, 0xa5, 0xcf,
0x05, 0x6a, 0x19, 0x4a, 0xcb, 0x2e, 0xc4, 0x25, 0xff, 0xfb, 0x6d, 0x03, 0x14, 0x69, 0x1a, 0xa0,
0x02, 0x6c, 0xdf, 0xb4, 0x1a, 0xad, 0xf6, 0x6d, 0xcb, 0xb8, 0xbd, 0xec, 0xb6, 0xb4, 0x4e, 0x27,
0xff, 0x08, 0x95, 0xa0, 0x58, 0x6d, 0x5f, 0x5d, 0x5d, 0x76, 0xaf, 0xb4, 0x56, 0xd7, 0xe8, 0x5e,
0x5e, 0x69, 0x46, 0xb3, 0x5d, 0x6d, 0xe4, 0xd7, 0xd0, 0x3e, 0x14, 0x24, 0xa4, 0xd5, 0x36, 0x6a,
0x5a, 0xf3, 0xec, 0x53, 0x7e, 0x1d, 0xed, 0xc2, 0x8e, 0x04, 0xe8, 0xda, 0xc7, 0x76, 0x43, 0xcb,
0x6f, 0x30, 0xfd, 0x7a, 0xb7, 0x59, 0x35, 0xda, 0x17, 0x17, 0x9a, 0xae, 0xd5, 0x66, 0xc0, 0x26,
0x73, 0xc1, 0x81, 0xb3, 0x6a, 0x55, 0xbb, 0xee, 0xce, 0x91, 0x04, 0xfa, 0x17, 0x3c, 0x8f, 0x99,
0x30, 0xf7, 0xed, 0x9b, 0xae, 0xd1, 0xd1, 0xaa, 0xed, 0x56, 0xcd, 0x68, 0x6a, 0x1f, 0xb5, 0x66,
0x3e, 0x89, 0xfe, 0x0d, 0x6a, 0x9c, 0xa0, 0x73, 0x53, 0xad, 0x6a, 0x9d, 0x4e, 0x5c, 0x6f, 0x0b,
0x1d, 0xc2, 0x93, 0x85, 0x08, 0xae, 0xda, 0x5d, 0x6d, 0xc6, 0x9a, 0x4f, 0xa1, 0x23, 0x38, 0x58,
0x8c, 0x84, 0x6b, 0x84, 0x7c, 0xf9, 0x34, 0x3a, 0x80, 0x12, 0xd7, 0x90, 0x99, 0x67, 0xf1, 0x02,
0x2a, 0x42, 0x3e, 0xcc, 0x9c, 0xd1, 0xd0, 0x3e, 0x19, 0xf5, 0xb3, 0x4e, 0x3d, 0xaf, 0xa0, 0x27,
0xb0, 0xdf, 0xd2, 0x3a, 0x8c, 0x6e, 0x09, 0xcc, 0x2c, 0x24, 0xeb, 0xac, 0x55, 0xad, 0xb7, 0xf5,
0x7c, 0xf6, 0xf4, 0x8f, 0x2d, 0x48, 0xdf, 0xf2, 0x0e, 0x6d, 0xd8, 0x14, 0x35, 0x41, 0x91, 0xb6,
0x29, 0xf4, 0x74, 0xa1, 0x79, 0xe3, 0x5b, 0x5b, 0xf9, 0xd9, 0x43, 0x70, 0xf4, 0x2f, 0xa6, 0x48,
0xeb, 0x50, 0x9c, 0x6d, 0x69, 0xdb, 0x89, 0xb3, 0xad, 0xd8, 0xa2, 0x74, 0xc8, 0xc6, 0x16, 0x1a,
0x74, 0x28, 0x19, 0xac, 0xda, 0x9f, 0xca, 0x47, 0x0f, 0x2b, 0x84, 0x9c, 0xef, 0x21, 0x5b, 0xc3,
0xc4, 0xfe, 0x8a, 0x5b, 0x38, 0xa0, 0x0d, 0x3c, 0x45, 0x3b, 0x92, 0x89, 0xd8, 0x92, 0xca, 0x7b,
0xd1, 0x83, 0xdf, 0xc0, 0xd3, 0x1a, 0xf6, 0xfb, 0xc4, 0xf6, 0xa8, 0x4b, 0xd0, 0x5b, 0x48, 0x0b,
0x5b, 0x66, 0x57, 0x90, 0x95, 0x9a, 0x6e, 0xdf, 0xa4, 0x2e, 0x79, 0xd0, 0xf2, 0x47, 0x48, 0x31,
0x7f, 0x6c, 0x47, 0x42, 0xf2, 0x8b, 0x29, 0xed, 0x50, 0xe5, 0xfd, 0x25, 0x79, 0x18, 0x72, 0x1d,
0x50, 0xb8, 0xfc, 0xc8, 0xfb, 0x93, 0x4c, 0x23, 0xc9, 0xcb, 0x65, 0x79, 0xfe, 0x2f, 0xec, 0x4c,
0x4d, 0x50, 0xa4, 0xd5, 0x24, 0x56, 0x9e, 0xe5, 0x35, 0x29, 0x56, 0x9e, 0x55, 0x1b, 0x4d, 0x13,
0x14, 0x69, 0x07, 0x89, 0xb1, 0x2d, 0xaf, 0x34, 0x31, 0xb6, 0x55, 0xab, 0x8b, 0x0e, 0xd9, 0xd8,
0x43, 0x17, 0x2b, 0xf6, 0xaa, 0xa7, 0x31, 0x56, 0xec, 0xd5, 0x6f, 0xe4, 0xcf, 0xb0, 0x15, 0x3e,
0x25, 0xe8, 0xb1, 0xa4, 0x1c, 0x7f, 0xf6, 0x62, 0x19, 0x5b, 0x78, 0x79, 0xd0, 0x25, 0xc0, 0x7c,
0x86, 0xa3, 0x83, 0x07, 0x46, 0xbb, 0xe0, 0x79, 0xfa, 0xdd, 0xc1, 0x8f, 0x7e, 0x85, 0xfc, 0xe2,
0xbc, 0x44, 0xaa, 0x6c, 0xb2, 0x7a, 0x5e, 0x97, 0x5f, 0x7c, 0x57, 0x47, 0x90, 0x9f, 0xff, 0xff,
0x97, 0x93, 0x81, 0x4d, 0xef, 0xc6, 0xbd, 0x4a, 0xdf, 0x1d, 0x9d, 0x0c, 0xd9, 0x46, 0xe3, 0xd8,
0xce, 0xc0, 0xc1, 0x74, 0xe2, 0x92, 0xfb, 0x93, 0xa1, 0x63, 0x9d, 0xf0, 0xf7, 0xed, 0x24, 0xe2,
0xea, 0x25, 0xf9, 0xcf, 0xb3, 0xd7, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x01, 0xb2, 0xa4, 0x25,
0xe7, 0x0d, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1388,6 +1484,10 @@ const _ = grpc.SupportPackageIsVersion4
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type WalletKitClient interface {
//
//ListUnspent returns a list of all utxos spendable by the wallet with a
//number of confirmations between the specified minimum and maximum.
ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error)
//
//LeaseOutput locks an output to the given ID, preventing it from being
//available for any future coin selection attempts. The absolute time of the
@ -1486,6 +1586,15 @@ func NewWalletKitClient(cc *grpc.ClientConn) WalletKitClient {
return &walletKitClient{cc}
}
func (c *walletKitClient) ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error) {
out := new(ListUnspentResponse)
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ListUnspent", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *walletKitClient) LeaseOutput(ctx context.Context, in *LeaseOutputRequest, opts ...grpc.CallOption) (*LeaseOutputResponse, error) {
out := new(LeaseOutputResponse)
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/LeaseOutput", in, out, opts...)
@ -1596,6 +1705,10 @@ func (c *walletKitClient) LabelTransaction(ctx context.Context, in *LabelTransac
// WalletKitServer is the server API for WalletKit service.
type WalletKitServer interface {
//
//ListUnspent returns a list of all utxos spendable by the wallet with a
//number of confirmations between the specified minimum and maximum.
ListUnspent(context.Context, *ListUnspentRequest) (*ListUnspentResponse, error)
//
//LeaseOutput locks an output to the given ID, preventing it from being
//available for any future coin selection attempts. The absolute time of the
@ -1690,6 +1803,24 @@ func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) {
s.RegisterService(&_WalletKit_serviceDesc, srv)
}
func _WalletKit_ListUnspent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListUnspentRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WalletKitServer).ListUnspent(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/walletrpc.WalletKit/ListUnspent",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WalletKitServer).ListUnspent(ctx, req.(*ListUnspentRequest))
}
return interceptor(ctx, in, info, handler)
}
func _WalletKit_LeaseOutput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LeaseOutputRequest)
if err := dec(in); err != nil {
@ -1910,6 +2041,10 @@ var _WalletKit_serviceDesc = grpc.ServiceDesc{
ServiceName: "walletrpc.WalletKit",
HandlerType: (*WalletKitServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "ListUnspent",
Handler: _WalletKit_ListUnspent_Handler,
},
{
MethodName: "LeaseOutput",
Handler: _WalletKit_LeaseOutput_Handler,

View File

@ -10,6 +10,12 @@ option go_package = "github.com/lightningnetwork/lnd/lnrpc/walletrpc";
// WalletKit is a service that gives access to the core functionalities of the
// daemon's wallet.
service WalletKit {
/*
ListUnspent returns a list of all utxos spendable by the wallet with a
number of confirmations between the specified minimum and maximum.
*/
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse);
/*
LeaseOutput locks an output to the given ID, preventing it from being
available for any future coin selection attempts. The absolute time of the
@ -124,6 +130,19 @@ service WalletKit {
returns (LabelTransactionResponse);
}
message ListUnspentRequest {
// The minimum number of confirmations to be included.
int32 min_confs = 1;
// The maximum number of confirmations to be included.
int32 max_confs = 2;
}
message ListUnspentResponse {
// A list of utxos satisfying the specified number of confirmations.
repeated lnrpc.Utxo utxos = 1;
}
message LeaseOutputRequest {
/*
An ID of 32 random bytes that must be unique for each distinct application

View File

@ -28,6 +28,18 @@
}
}
},
"lnrpcAddressType": {
"type": "string",
"enum": [
"WITNESS_PUBKEY_HASH",
"NESTED_PUBKEY_HASH",
"UNUSED_WITNESS_PUBKEY_HASH",
"UNUSED_NESTED_PUBKEY_HASH"
],
"default": "WITNESS_PUBKEY_HASH",
"description": "- `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)\n- `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)",
"title": "`AddressType` has to be one of:"
},
"lnrpcOutPoint": {
"type": "object",
"properties": {
@ -112,6 +124,37 @@
}
}
},
"lnrpcUtxo": {
"type": "object",
"properties": {
"address_type": {
"$ref": "#/definitions/lnrpcAddressType",
"title": "The type of address"
},
"address": {
"type": "string",
"title": "The address"
},
"amount_sat": {
"type": "string",
"format": "int64",
"title": "The value of the unspent coin in satoshis"
},
"pk_script": {
"type": "string",
"title": "The pkscript in hex"
},
"outpoint": {
"$ref": "#/definitions/lnrpcOutPoint",
"title": "The outpoint in format txid:n"
},
"confirmations": {
"type": "string",
"format": "int64",
"title": "The number of confirmations for the Utxo"
}
}
},
"signrpcKeyDescriptor": {
"type": "object",
"properties": {
@ -202,6 +245,18 @@
}
}
},
"walletrpcListUnspentResponse": {
"type": "object",
"properties": {
"utxos": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcUtxo"
},
"description": "A list of utxos satisfying the specified number of confirmations."
}
}
},
"walletrpcPendingSweep": {
"type": "object",
"properties": {

View File

@ -107,6 +107,10 @@ var (
Entity: "onchain",
Action: "write",
}},
"/walletrpc.WalletKit/ListUnspent": {{
Entity: "onchain",
Action: "read",
}},
}
// DefaultWalletKitMacFilename is the default name of the wallet kit
@ -213,6 +217,39 @@ func (w *WalletKit) RegisterWithRootServer(grpcServer *grpc.Server) error {
return nil
}
// ListUnspent returns useful information about each unspent output owned by the
// wallet, as reported by the underlying `ListUnspentWitness`; the information
// returned is: outpoint, amount in satoshis, address, address type,
// scriptPubKey in hex and number of confirmations. The result is filtered to
// contain outputs whose number of confirmations is between a
// minimum and maximum number of confirmations specified by the user, with 0
// meaning unconfirmed.
func (w *WalletKit) ListUnspent(ctx context.Context,
req *ListUnspentRequest) (*ListUnspentResponse, error) {
// Validate the confirmation arguments.
minConfs, maxConfs, err := lnrpc.ParseConfs(req.MinConfs, req.MaxConfs)
if err != nil {
return nil, err
}
// With our arguments validated, we'll query the internal wallet for
// the set of UTXOs that match our query.
utxos, err := w.cfg.Wallet.ListUnspentWitness(minConfs, maxConfs)
if err != nil {
return nil, err
}
rpcUtxos, err := lnrpc.MarshalUtxos(utxos, w.cfg.ChainParams)
if err != nil {
return nil, err
}
return &ListUnspentResponse{
Utxos: rpcUtxos,
}, nil
}
// LeaseOutput locks an output to the given ID, preventing it from being
// available for any future coin selection attempts. The absolute time of the
// lock's expiration is returned. The expiration of the lock can be extended by

View File

@ -162,6 +162,9 @@ func (s *subRPCServerConfigs) PopulateDependencies(cfg *Config, cc *chainControl
subCfgValue.FieldByName("Chain").Set(
reflect.ValueOf(cc.chainIO),
)
subCfgValue.FieldByName("ChainParams").Set(
reflect.ValueOf(activeNetParams),
)
case *autopilotrpc.Config:
subCfgValue := extractReflectValue(subCfg)