walletrpc: add output leases RPCs

This commit is contained in:
Wilmer Paulino 2020-05-20 15:34:16 -07:00
parent ae7335ce3b
commit 9dcaf4fbc6
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F
4 changed files with 496 additions and 99 deletions

@ -132,6 +132,178 @@ func (WitnessType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{0}
}
type LeaseOutputRequest struct {
//
//An ID of 32 random bytes that must be unique for each distinct application
//using this RPC which will be used to bound the output lease to.
Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// The identifying outpoint of the output being leased.
Outpoint *lnrpc.OutPoint `protobuf:"bytes,2,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
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}
}
func (m *LeaseOutputRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LeaseOutputRequest.Unmarshal(m, b)
}
func (m *LeaseOutputRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_LeaseOutputRequest.Marshal(b, m, deterministic)
}
func (m *LeaseOutputRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_LeaseOutputRequest.Merge(m, src)
}
func (m *LeaseOutputRequest) XXX_Size() int {
return xxx_messageInfo_LeaseOutputRequest.Size(m)
}
func (m *LeaseOutputRequest) XXX_DiscardUnknown() {
xxx_messageInfo_LeaseOutputRequest.DiscardUnknown(m)
}
var xxx_messageInfo_LeaseOutputRequest proto.InternalMessageInfo
func (m *LeaseOutputRequest) GetId() []byte {
if m != nil {
return m.Id
}
return nil
}
func (m *LeaseOutputRequest) GetOutpoint() *lnrpc.OutPoint {
if m != nil {
return m.Outpoint
}
return nil
}
type LeaseOutputResponse struct {
//
//The absolute expiration of the output lease represented as a unix timestamp.
Expiration uint64 `protobuf:"varint,1,opt,name=expiration,proto3" json:"expiration,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
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}
}
func (m *LeaseOutputResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LeaseOutputResponse.Unmarshal(m, b)
}
func (m *LeaseOutputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_LeaseOutputResponse.Marshal(b, m, deterministic)
}
func (m *LeaseOutputResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_LeaseOutputResponse.Merge(m, src)
}
func (m *LeaseOutputResponse) XXX_Size() int {
return xxx_messageInfo_LeaseOutputResponse.Size(m)
}
func (m *LeaseOutputResponse) XXX_DiscardUnknown() {
xxx_messageInfo_LeaseOutputResponse.DiscardUnknown(m)
}
var xxx_messageInfo_LeaseOutputResponse proto.InternalMessageInfo
func (m *LeaseOutputResponse) GetExpiration() uint64 {
if m != nil {
return m.Expiration
}
return 0
}
type ReleaseOutputRequest struct {
// The unique ID that was used to lock the output.
Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// The identifying outpoint of the output being released.
Outpoint *lnrpc.OutPoint `protobuf:"bytes,2,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
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}
}
func (m *ReleaseOutputRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReleaseOutputRequest.Unmarshal(m, b)
}
func (m *ReleaseOutputRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReleaseOutputRequest.Marshal(b, m, deterministic)
}
func (m *ReleaseOutputRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReleaseOutputRequest.Merge(m, src)
}
func (m *ReleaseOutputRequest) XXX_Size() int {
return xxx_messageInfo_ReleaseOutputRequest.Size(m)
}
func (m *ReleaseOutputRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ReleaseOutputRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ReleaseOutputRequest proto.InternalMessageInfo
func (m *ReleaseOutputRequest) GetId() []byte {
if m != nil {
return m.Id
}
return nil
}
func (m *ReleaseOutputRequest) GetOutpoint() *lnrpc.OutPoint {
if m != nil {
return m.Outpoint
}
return nil
}
type ReleaseOutputResponse struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
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}
}
func (m *ReleaseOutputResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReleaseOutputResponse.Unmarshal(m, b)
}
func (m *ReleaseOutputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReleaseOutputResponse.Marshal(b, m, deterministic)
}
func (m *ReleaseOutputResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReleaseOutputResponse.Merge(m, src)
}
func (m *ReleaseOutputResponse) XXX_Size() int {
return xxx_messageInfo_ReleaseOutputResponse.Size(m)
}
func (m *ReleaseOutputResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ReleaseOutputResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ReleaseOutputResponse proto.InternalMessageInfo
type KeyReq struct {
//
//Is the key finger print of the root pubkey that this request is targeting.
@ -151,7 +323,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{0}
return fileDescriptor_6cc6942ac78249e5, []int{4}
}
func (m *KeyReq) XXX_Unmarshal(b []byte) error {
@ -196,7 +368,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{1}
return fileDescriptor_6cc6942ac78249e5, []int{5}
}
func (m *AddrRequest) XXX_Unmarshal(b []byte) error {
@ -230,7 +402,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{2}
return fileDescriptor_6cc6942ac78249e5, []int{6}
}
func (m *AddrResponse) XXX_Unmarshal(b []byte) error {
@ -274,7 +446,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{3}
return fileDescriptor_6cc6942ac78249e5, []int{7}
}
func (m *Transaction) XXX_Unmarshal(b []byte) error {
@ -326,7 +498,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{4}
return fileDescriptor_6cc6942ac78249e5, []int{8}
}
func (m *PublishResponse) XXX_Unmarshal(b []byte) error {
@ -373,7 +545,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{5}
return fileDescriptor_6cc6942ac78249e5, []int{9}
}
func (m *SendOutputsRequest) XXX_Unmarshal(b []byte) error {
@ -428,7 +600,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{6}
return fileDescriptor_6cc6942ac78249e5, []int{10}
}
func (m *SendOutputsResponse) XXX_Unmarshal(b []byte) error {
@ -469,7 +641,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{7}
return fileDescriptor_6cc6942ac78249e5, []int{11}
}
func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error {
@ -511,7 +683,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{8}
return fileDescriptor_6cc6942ac78249e5, []int{12}
}
func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error {
@ -574,7 +746,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{9}
return fileDescriptor_6cc6942ac78249e5, []int{13}
}
func (m *PendingSweep) XXX_Unmarshal(b []byte) error {
@ -668,7 +840,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{10}
return fileDescriptor_6cc6942ac78249e5, []int{14}
}
func (m *PendingSweepsRequest) XXX_Unmarshal(b []byte) error {
@ -702,7 +874,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{11}
return fileDescriptor_6cc6942ac78249e5, []int{15}
}
func (m *PendingSweepsResponse) XXX_Unmarshal(b []byte) error {
@ -752,7 +924,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{12}
return fileDescriptor_6cc6942ac78249e5, []int{16}
}
func (m *BumpFeeRequest) XXX_Unmarshal(b []byte) error {
@ -811,7 +983,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{13}
return fileDescriptor_6cc6942ac78249e5, []int{17}
}
func (m *BumpFeeResponse) XXX_Unmarshal(b []byte) error {
@ -846,7 +1018,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{14}
return fileDescriptor_6cc6942ac78249e5, []int{18}
}
func (m *ListSweepsRequest) XXX_Unmarshal(b []byte) error {
@ -888,7 +1060,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{15}
return fileDescriptor_6cc6942ac78249e5, []int{19}
}
func (m *ListSweepsResponse) XXX_Unmarshal(b []byte) error {
@ -969,7 +1141,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{15, 0}
return fileDescriptor_6cc6942ac78249e5, []int{19, 0}
}
func (m *ListSweepsResponse_TransactionIDs) XXX_Unmarshal(b []byte) error {
@ -1013,7 +1185,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{16}
return fileDescriptor_6cc6942ac78249e5, []int{20}
}
func (m *LabelTransactionRequest) XXX_Unmarshal(b []byte) error {
@ -1065,7 +1237,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{17}
return fileDescriptor_6cc6942ac78249e5, []int{21}
}
func (m *LabelTransactionResponse) XXX_Unmarshal(b []byte) error {
@ -1088,6 +1260,10 @@ var xxx_messageInfo_LabelTransactionResponse proto.InternalMessageInfo
func init() {
proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value)
proto.RegisterType((*LeaseOutputRequest)(nil), "walletrpc.LeaseOutputRequest")
proto.RegisterType((*LeaseOutputResponse)(nil), "walletrpc.LeaseOutputResponse")
proto.RegisterType((*ReleaseOutputRequest)(nil), "walletrpc.ReleaseOutputRequest")
proto.RegisterType((*ReleaseOutputResponse)(nil), "walletrpc.ReleaseOutputResponse")
proto.RegisterType((*KeyReq)(nil), "walletrpc.KeyReq")
proto.RegisterType((*AddrRequest)(nil), "walletrpc.AddrRequest")
proto.RegisterType((*AddrResponse)(nil), "walletrpc.AddrResponse")
@ -1112,86 +1288,92 @@ func init() {
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
var fileDescriptor_6cc6942ac78249e5 = []byte{
// 1255 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6d, 0x6f, 0xda, 0x56,
0x14, 0x6e, 0x42, 0x20, 0x70, 0x78, 0x09, 0x39, 0xe4, 0x85, 0xd2, 0x74, 0xc9, 0x5c, 0x6d, 0x8b,
0xb6, 0x96, 0x68, 0xa9, 0x36, 0xad, 0x9d, 0x34, 0x2d, 0x01, 0x47, 0x44, 0x10, 0x9c, 0xd9, 0x6e,
0xa3, 0x6e, 0x1f, 0x2c, 0x83, 0x6f, 0x89, 0x15, 0x62, 0xbb, 0xd7, 0x97, 0x02, 0xdf, 0xf6, 0x2b,
0x26, 0xf5, 0xef, 0xed, 0x97, 0x4c, 0xbe, 0x7e, 0xe1, 0x1a, 0x9a, 0x4a, 0xfb, 0x84, 0xef, 0x39,
0xcf, 0x79, 0xce, 0x2b, 0xe7, 0x5e, 0x78, 0x3c, 0x35, 0xc7, 0x63, 0xc2, 0xa8, 0x37, 0x3c, 0x09,
0xbf, 0xee, 0x6c, 0xd6, 0xf4, 0xa8, 0xcb, 0x5c, 0x2c, 0x24, 0xaa, 0x46, 0x81, 0x7a, 0xc3, 0x50,
0xda, 0xd8, 0xf1, 0xed, 0x91, 0x13, 0xc0, 0x83, 0x5f, 0x42, 0x43, 0xa9, 0xf4, 0x07, 0xe4, 0xba,
0x64, 0xae, 0x92, 0x0f, 0x78, 0x0c, 0xd5, 0x3b, 0x32, 0x37, 0xde, 0xdb, 0xce, 0x88, 0x50, 0xc3,
0xa3, 0xb6, 0xc3, 0xea, 0x6b, 0x47, 0x6b, 0xc7, 0x59, 0xb5, 0x72, 0x47, 0xe6, 0x17, 0x5c, 0x7c,
0x1d, 0x48, 0xf1, 0x29, 0x00, 0x47, 0x9a, 0xf7, 0xf6, 0x78, 0x5e, 0x5f, 0xe7, 0x98, 0x42, 0x80,
0xe1, 0x02, 0xa9, 0x0c, 0xc5, 0x33, 0xcb, 0xa2, 0x2a, 0xf9, 0x30, 0x21, 0x3e, 0x93, 0x24, 0x28,
0x85, 0x47, 0xdf, 0x73, 0x1d, 0x9f, 0x20, 0xc2, 0x86, 0x69, 0x59, 0x94, 0x73, 0x17, 0x54, 0xfe,
0x2d, 0xbd, 0x86, 0xa2, 0x4e, 0x4d, 0xc7, 0x37, 0x87, 0xcc, 0x76, 0x1d, 0xdc, 0x85, 0x1c, 0x9b,
0x19, 0xb7, 0x64, 0xc6, 0x41, 0x25, 0x35, 0xcb, 0x66, 0x1d, 0x32, 0xc3, 0x1d, 0xc8, 0x8e, 0xcd,
0x01, 0x19, 0x73, 0x97, 0x05, 0x35, 0x3c, 0x48, 0x3f, 0xc3, 0xd6, 0xf5, 0x64, 0x30, 0xb6, 0xfd,
0xdb, 0xc4, 0xc5, 0x33, 0x28, 0x7b, 0xa1, 0xc8, 0x20, 0x94, 0xba, 0xb1, 0xaf, 0x52, 0x24, 0x94,
0x03, 0x99, 0x44, 0x01, 0x35, 0xe2, 0x58, 0xca, 0x84, 0x79, 0x13, 0xe6, 0x47, 0xd1, 0xe2, 0x01,
0x80, 0x6f, 0x32, 0xc3, 0x23, 0xd4, 0xb8, 0x9b, 0x72, 0xbb, 0x8c, 0x9a, 0xf7, 0x4d, 0x76, 0x4d,
0x68, 0x77, 0x8a, 0xc7, 0xb0, 0xe9, 0x86, 0xf8, 0xfa, 0xfa, 0x51, 0xe6, 0xb8, 0x78, 0x5a, 0x69,
0x46, 0x55, 0x6d, 0xea, 0x33, 0x65, 0xc2, 0xd4, 0x58, 0xbd, 0x88, 0x35, 0x23, 0xc6, 0xfa, 0x1c,
0x6a, 0x29, 0x9f, 0x51, 0xbc, 0xbb, 0x90, 0xa3, 0xe6, 0xd4, 0x60, 0x49, 0xbe, 0xd4, 0x9c, 0xea,
0x33, 0xe9, 0x27, 0x40, 0xd9, 0x67, 0xf6, 0xbd, 0xc9, 0xc8, 0x05, 0x21, 0x71, 0x84, 0x87, 0x50,
0x1c, 0xba, 0xce, 0x7b, 0x83, 0x99, 0x74, 0x44, 0xe2, 0x16, 0x41, 0x20, 0xd2, 0xb9, 0x44, 0x7a,
0x09, 0xb5, 0x94, 0x59, 0xe4, 0xe4, 0x8b, 0x99, 0x49, 0x9f, 0x32, 0x50, 0xba, 0x26, 0x8e, 0x65,
0x3b, 0x23, 0x6d, 0x4a, 0x88, 0x87, 0x3f, 0x40, 0x3e, 0xc8, 0xc5, 0x8d, 0xc7, 0xa0, 0x78, 0xba,
0xd5, 0x1c, 0xf3, 0x4c, 0x95, 0x09, 0xbb, 0x0e, 0xc4, 0x6a, 0x02, 0xc0, 0x57, 0x50, 0x9a, 0xda,
0xcc, 0x21, 0xbe, 0x6f, 0xb0, 0xb9, 0x47, 0x78, 0x83, 0x2a, 0xa7, 0x7b, 0xcd, 0x64, 0x10, 0x9b,
0x37, 0xa1, 0x5a, 0x9f, 0x7b, 0x44, 0x2d, 0x4e, 0x17, 0x87, 0x60, 0x98, 0xcc, 0x7b, 0x77, 0xe2,
0x30, 0xc3, 0x37, 0x19, 0xaf, 0x56, 0x59, 0x2d, 0x84, 0x12, 0xcd, 0x64, 0x78, 0x04, 0xa5, 0x38,
0xea, 0xc1, 0x9c, 0x91, 0xfa, 0x06, 0x07, 0x40, 0x18, 0xf7, 0xf9, 0x9c, 0x11, 0x7c, 0x01, 0x38,
0xa0, 0xae, 0x69, 0x0d, 0x4d, 0x9f, 0x19, 0x26, 0x63, 0xe4, 0xde, 0x63, 0x7e, 0x3d, 0xcb, 0x71,
0xdb, 0x89, 0xe6, 0x2c, 0x52, 0xe0, 0x29, 0xec, 0x3a, 0x64, 0xc6, 0x8c, 0x85, 0xcd, 0x2d, 0xb1,
0x47, 0xb7, 0xac, 0x9e, 0xe3, 0x16, 0xb5, 0x40, 0x79, 0x1e, 0xeb, 0x3a, 0x5c, 0x15, 0xd8, 0xd0,
0xb0, 0xfa, 0xc4, 0x32, 0xc4, 0xe2, 0xe7, 0x43, 0x9b, 0x44, 0xd9, 0x4a, 0xba, 0x80, 0x2f, 0x61,
0x6f, 0x61, 0x93, 0x4a, 0xa1, 0xb0, 0x64, 0xa4, 0x2d, 0x72, 0xd9, 0x81, 0xec, 0x7b, 0x97, 0x0e,
0x49, 0x7d, 0xf3, 0x68, 0xed, 0x38, 0xaf, 0x86, 0x07, 0x69, 0x0f, 0x76, 0xc4, 0xd6, 0xc4, 0xb3,
0x2a, 0xdd, 0xc0, 0xee, 0x92, 0x3c, 0x6a, 0xf5, 0x6f, 0x50, 0xf1, 0x42, 0x85, 0xe1, 0x73, 0x4d,
0x7d, 0x8d, 0x4f, 0xeb, 0xbe, 0xd0, 0x10, 0xd1, 0x52, 0x2d, 0x7b, 0x22, 0x8f, 0xf4, 0xcf, 0x1a,
0x54, 0xce, 0x27, 0xf7, 0x9e, 0x30, 0x75, 0xff, 0x6b, 0x1c, 0x0e, 0xa1, 0x18, 0x16, 0x88, 0x17,
0x8b, 0x4f, 0x43, 0x59, 0x85, 0x50, 0x14, 0x94, 0x68, 0xa5, 0xab, 0x99, 0x95, 0xae, 0x26, 0x95,
0xd8, 0x10, 0x2b, 0xb1, 0x0d, 0x5b, 0x49, 0x5c, 0x61, 0xae, 0xd2, 0x0b, 0xd8, 0xee, 0xd9, 0x3e,
0x4b, 0x55, 0x06, 0xeb, 0xb0, 0xf9, 0x91, 0xd0, 0x81, 0xeb, 0x13, 0x1e, 0x6c, 0x5e, 0x8d, 0x8f,
0xd2, 0xdf, 0xeb, 0x80, 0x22, 0x3e, 0xaa, 0x58, 0x0f, 0x6a, 0x6c, 0xb1, 0x80, 0x0c, 0x8b, 0x30,
0xd3, 0x1e, 0xfb, 0x51, 0xa6, 0x8f, 0xa3, 0x4c, 0x85, 0x15, 0xd5, 0x0e, 0x01, 0x9d, 0x47, 0x2a,
0xb2, 0x15, 0x29, 0xde, 0xc0, 0x96, 0xc8, 0x66, 0x5b, 0x3e, 0xaf, 0x41, 0xf1, 0xf4, 0xb9, 0xd0,
0x80, 0xd5, 0x28, 0x44, 0x07, 0x97, 0xed, 0x80, 0xbc, 0x22, 0xd0, 0x5c, 0x5a, 0x7e, 0xe3, 0x15,
0x54, 0xd2, 0x18, 0xfc, 0x6e, 0xd5, 0x55, 0xd0, 0xeb, 0xc2, 0xb2, 0xe9, 0x79, 0x1e, 0x72, 0xe1,
0x2c, 0x48, 0x26, 0xec, 0xf7, 0x82, 0x6d, 0x24, 0x30, 0xc5, 0x75, 0x43, 0xd8, 0x60, 0x33, 0xdb,
0x8a, 0xd6, 0x10, 0xff, 0xfe, 0xfc, 0xd6, 0xc5, 0x03, 0x28, 0xb8, 0x1f, 0x09, 0x9d, 0x52, 0x3b,
0x6a, 0x5f, 0x5e, 0x5d, 0x08, 0xa4, 0x06, 0xd4, 0x57, 0x5d, 0x84, 0x49, 0x7e, 0xff, 0x29, 0x03,
0x45, 0x61, 0x1b, 0x60, 0x0d, 0xb6, 0xde, 0xf4, 0xbb, 0x7d, 0xe5, 0xa6, 0x6f, 0xdc, 0x5c, 0xea,
0x7d, 0x59, 0xd3, 0xaa, 0x8f, 0xb0, 0x0e, 0x3b, 0x2d, 0xe5, 0xea, 0xea, 0x52, 0xbf, 0x92, 0xfb,
0xba, 0xa1, 0x5f, 0x5e, 0xc9, 0x46, 0x4f, 0x69, 0x75, 0xab, 0x6b, 0xb8, 0x0f, 0x35, 0x41, 0xd3,
0x57, 0x8c, 0xb6, 0xdc, 0x3b, 0x7b, 0x57, 0x5d, 0xc7, 0x5d, 0xd8, 0x16, 0x14, 0xaa, 0xfc, 0x56,
0xe9, 0xca, 0xd5, 0x4c, 0x80, 0xef, 0xe8, 0xbd, 0x96, 0xa1, 0x5c, 0x5c, 0xc8, 0xaa, 0xdc, 0x8e,
0x15, 0x1b, 0x81, 0x0b, 0xae, 0x38, 0x6b, 0xb5, 0xe4, 0x6b, 0x7d, 0xa1, 0xc9, 0xe2, 0x37, 0xf0,
0x75, 0xca, 0x24, 0x70, 0xaf, 0xbc, 0xd1, 0x0d, 0x4d, 0x6e, 0x29, 0xfd, 0xb6, 0xd1, 0x93, 0xdf,
0xca, 0xbd, 0x6a, 0x0e, 0xbf, 0x05, 0x29, 0x4d, 0xa0, 0xbd, 0x69, 0xb5, 0x64, 0x4d, 0x4b, 0xe3,
0x36, 0xf1, 0x10, 0x9e, 0x2c, 0x45, 0x70, 0xa5, 0xe8, 0x72, 0xcc, 0x5a, 0xcd, 0xe3, 0x11, 0x1c,
0x2c, 0x47, 0xc2, 0x11, 0x11, 0x5f, 0xb5, 0x80, 0x07, 0x50, 0xe7, 0x08, 0x91, 0x39, 0x8e, 0x17,
0x70, 0x07, 0xaa, 0x51, 0xe5, 0x8c, 0xae, 0xfc, 0xce, 0xe8, 0x9c, 0x69, 0x9d, 0x6a, 0x11, 0x9f,
0xc0, 0x7e, 0x5f, 0xd6, 0x02, 0xba, 0x15, 0x65, 0x69, 0xa9, 0x58, 0x67, 0xfd, 0x56, 0x47, 0x51,
0xab, 0xe5, 0xd3, 0x7f, 0xb3, 0x50, 0xb8, 0xe1, 0x13, 0xda, 0xb5, 0x19, 0xbe, 0x86, 0x72, 0x9b,
0x50, 0xfb, 0x23, 0xe9, 0x93, 0x19, 0xeb, 0x92, 0x39, 0x6e, 0x0b, 0xe3, 0x1b, 0xbe, 0x1a, 0x1a,
0x7b, 0xc9, 0x05, 0xd8, 0x25, 0xf3, 0x36, 0xf1, 0x87, 0xd4, 0xf6, 0x98, 0x4b, 0xf1, 0x17, 0x28,
0x84, 0xb6, 0x81, 0x5d, 0x4d, 0x04, 0xf5, 0xdc, 0xa1, 0xc9, 0x5c, 0xfa, 0xa0, 0xe5, 0xaf, 0x90,
0x0f, 0xfc, 0x05, 0x6f, 0x06, 0x14, 0x6f, 0x10, 0xe1, 0x4d, 0xd1, 0xd8, 0x5f, 0x91, 0x47, 0xff,
0xe3, 0x0e, 0x60, 0xf4, 0x18, 0x10, 0xdf, 0x13, 0x22, 0x8d, 0x20, 0x6f, 0x34, 0xc4, 0x7d, 0xb8,
0xf4, 0x86, 0xe8, 0x41, 0x51, 0xb8, 0xaa, 0xf1, 0xa9, 0x00, 0x5d, 0x7d, 0x36, 0x34, 0xbe, 0x7a,
0x48, 0xbd, 0x60, 0x13, 0xee, 0xe4, 0x14, 0xdb, 0xea, 0x15, 0x9f, 0x62, 0xfb, 0xdc, 0x55, 0xae,
0x42, 0x39, 0xb5, 0xf8, 0xf1, 0xf0, 0x81, 0xc5, 0x9e, 0xc4, 0x77, 0xf4, 0x30, 0x20, 0xe2, 0xfc,
0x1d, 0x36, 0xa3, 0xd5, 0x8a, 0x8f, 0x05, 0x70, 0xfa, 0x1a, 0x48, 0x55, 0x6c, 0x69, 0x13, 0xe3,
0x25, 0xc0, 0x62, 0xa7, 0xe1, 0xc1, 0x03, 0xab, 0x2e, 0xe4, 0x79, 0xfa, 0xc5, 0x45, 0x88, 0x7f,
0x41, 0x75, 0x79, 0x7f, 0xa0, 0x24, 0x9a, 0x7c, 0x7e, 0x7f, 0x35, 0x9e, 0x7d, 0x11, 0x13, 0x92,
0x9f, 0xff, 0xf8, 0xe7, 0xc9, 0xc8, 0x66, 0xb7, 0x93, 0x41, 0x73, 0xe8, 0xde, 0x9f, 0x8c, 0x83,
0x1b, 0xde, 0xb1, 0x9d, 0x91, 0x43, 0xd8, 0xd4, 0xa5, 0x77, 0x27, 0x63, 0xc7, 0x3a, 0xe1, 0xfb,
0xfe, 0x24, 0xe1, 0x1a, 0xe4, 0xf8, 0x63, 0xf9, 0xe5, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb5,
0xeb, 0x99, 0xb8, 0x75, 0x0b, 0x00, 0x00,
// 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,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1206,6 +1388,18 @@ 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 {
//
//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
//successive invocations of this RPC. Outputs can be unlocked before their
//expiration through `ReleaseOutput`.
LeaseOutput(ctx context.Context, in *LeaseOutputRequest, opts ...grpc.CallOption) (*LeaseOutputResponse, error)
//
//ReleaseOutput unlocks an output, allowing it to be available for coin
//selection if it remains unspent. The ID should match the one used to
//originally lock the output.
ReleaseOutput(ctx context.Context, in *ReleaseOutputRequest, opts ...grpc.CallOption) (*ReleaseOutputResponse, error)
//
//DeriveNextKey attempts to derive the *next* key within the key family
//(account in BIP43) specified. This method should return the next external
@ -1292,6 +1486,24 @@ func NewWalletKitClient(cc *grpc.ClientConn) WalletKitClient {
return &walletKitClient{cc}
}
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...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *walletKitClient) ReleaseOutput(ctx context.Context, in *ReleaseOutputRequest, opts ...grpc.CallOption) (*ReleaseOutputResponse, error) {
out := new(ReleaseOutputResponse)
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ReleaseOutput", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *walletKitClient) DeriveNextKey(ctx context.Context, in *KeyReq, opts ...grpc.CallOption) (*signrpc.KeyDescriptor, error) {
out := new(signrpc.KeyDescriptor)
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/DeriveNextKey", in, out, opts...)
@ -1384,6 +1596,18 @@ func (c *walletKitClient) LabelTransaction(ctx context.Context, in *LabelTransac
// WalletKitServer is the server API for WalletKit service.
type WalletKitServer interface {
//
//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
//successive invocations of this RPC. Outputs can be unlocked before their
//expiration through `ReleaseOutput`.
LeaseOutput(context.Context, *LeaseOutputRequest) (*LeaseOutputResponse, error)
//
//ReleaseOutput unlocks an output, allowing it to be available for coin
//selection if it remains unspent. The ID should match the one used to
//originally lock the output.
ReleaseOutput(context.Context, *ReleaseOutputRequest) (*ReleaseOutputResponse, error)
//
//DeriveNextKey attempts to derive the *next* key within the key family
//(account in BIP43) specified. This method should return the next external
@ -1466,6 +1690,42 @@ func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) {
s.RegisterService(&_WalletKit_serviceDesc, srv)
}
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 {
return nil, err
}
if interceptor == nil {
return srv.(WalletKitServer).LeaseOutput(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/walletrpc.WalletKit/LeaseOutput",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WalletKitServer).LeaseOutput(ctx, req.(*LeaseOutputRequest))
}
return interceptor(ctx, in, info, handler)
}
func _WalletKit_ReleaseOutput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ReleaseOutputRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WalletKitServer).ReleaseOutput(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/walletrpc.WalletKit/ReleaseOutput",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WalletKitServer).ReleaseOutput(ctx, req.(*ReleaseOutputRequest))
}
return interceptor(ctx, in, info, handler)
}
func _WalletKit_DeriveNextKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(KeyReq)
if err := dec(in); err != nil {
@ -1650,6 +1910,14 @@ var _WalletKit_serviceDesc = grpc.ServiceDesc{
ServiceName: "walletrpc.WalletKit",
HandlerType: (*WalletKitServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "LeaseOutput",
Handler: _WalletKit_LeaseOutput_Handler,
},
{
MethodName: "ReleaseOutput",
Handler: _WalletKit_ReleaseOutput_Handler,
},
{
MethodName: "DeriveNextKey",
Handler: _WalletKit_DeriveNextKey_Handler,

@ -10,6 +10,22 @@ 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 {
/*
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
successive invocations of this RPC. Outputs can be unlocked before their
expiration through `ReleaseOutput`.
*/
rpc LeaseOutput (LeaseOutputRequest) returns (LeaseOutputResponse);
/*
ReleaseOutput unlocks an output, allowing it to be available for coin
selection if it remains unspent. The ID should match the one used to
originally lock the output.
*/
rpc ReleaseOutput (ReleaseOutputRequest) returns (ReleaseOutputResponse);
/*
DeriveNextKey attempts to derive the *next* key within the key family
(account in BIP43) specified. This method should return the next external
@ -108,6 +124,35 @@ service WalletKit {
returns (LabelTransactionResponse);
}
message LeaseOutputRequest {
/*
An ID of 32 random bytes that must be unique for each distinct application
using this RPC which will be used to bound the output lease to.
*/
bytes id = 1;
// The identifying outpoint of the output being leased.
lnrpc.OutPoint outpoint = 2;
}
message LeaseOutputResponse {
/*
The absolute expiration of the output lease represented as a unix timestamp.
*/
uint64 expiration = 1;
}
message ReleaseOutputRequest {
// The unique ID that was used to lock the output.
bytes id = 1;
// The identifying outpoint of the output being released.
lnrpc.OutPoint outpoint = 2;
}
message ReleaseOutputResponse {
}
message KeyReq {
/*
Is the key finger print of the root pubkey that this request is targeting.

@ -181,6 +181,16 @@
"walletrpcLabelTransactionResponse": {
"type": "object"
},
"walletrpcLeaseOutputResponse": {
"type": "object",
"properties": {
"expiration": {
"type": "string",
"format": "uint64",
"description": "The absolute expiration of the output lease represented as a unix timestamp."
}
}
},
"walletrpcListSweepsResponse": {
"type": "object",
"properties": {
@ -261,6 +271,9 @@
}
}
},
"walletrpcReleaseOutputResponse": {
"type": "object"
},
"walletrpcSendOutputsResponse": {
"type": "object",
"properties": {

@ -14,6 +14,7 @@ import (
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcwallet/wtxmgr"
"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/labels"
@ -98,6 +99,14 @@ var (
Entity: "onchain",
Action: "write",
}},
"/walletrpc.WalletKit/LeaseOutput": {{
Entity: "onchain",
Action: "write",
}},
"/walletrpc.WalletKit/ReleaseOutput": {{
Entity: "onchain",
Action: "write",
}},
}
// DefaultWalletKitMacFilename is the default name of the wallet kit
@ -204,6 +213,68 @@ func (w *WalletKit) RegisterWithRootServer(grpcServer *grpc.Server) error {
return 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
// successive invocations of this call. Outputs can be unlocked before their
// expiration through `ReleaseOutput`.
//
// If the output is not known, wtxmgr.ErrUnknownOutput is returned. If the
// output has already been locked to a different ID, then
// wtxmgr.ErrOutputAlreadyLocked is returned.
func (w *WalletKit) LeaseOutput(ctx context.Context,
req *LeaseOutputRequest) (*LeaseOutputResponse, error) {
if len(req.Id) != 32 {
return nil, errors.New("id must be 32 random bytes")
}
var lockID wtxmgr.LockID
copy(lockID[:], req.Id)
// Don't allow ID's of 32 bytes, but all zeros.
if lockID == (wtxmgr.LockID{}) {
return nil, errors.New("id must be 32 random bytes")
}
op, err := unmarshallOutPoint(req.Outpoint)
if err != nil {
return nil, err
}
expiration, err := w.cfg.Wallet.LeaseOutput(lockID, *op)
if err != nil {
return nil, err
}
return &LeaseOutputResponse{
Expiration: uint64(expiration.Unix()),
}, nil
}
// ReleaseOutput unlocks an output, allowing it to be available for coin
// selection if it remains unspent. The ID should match the one used to
// originally lock the output.
func (w *WalletKit) ReleaseOutput(ctx context.Context,
req *ReleaseOutputRequest) (*ReleaseOutputResponse, error) {
if len(req.Id) != 32 {
return nil, errors.New("id must be 32 random bytes")
}
var lockID wtxmgr.LockID
copy(lockID[:], req.Id)
op, err := unmarshallOutPoint(req.Outpoint)
if err != nil {
return nil, err
}
if err := w.cfg.Wallet.ReleaseOutput(lockID, *op); err != nil {
return nil, err
}
return &ReleaseOutputResponse{}, nil
}
// DeriveNextKey attempts to derive the *next* key within the key family
// (account in BIP43) specified. This method should return the next external
// child within this branch.