walletrpc: add ListLeases

This commit is contained in:
Joost Jager 2021-03-12 09:26:24 +01:00
parent b8e54fffbf
commit 9398220568
10 changed files with 411 additions and 123 deletions

@ -47,6 +47,7 @@ func walletCommands() []cli.Command {
listSweepsCommand,
labelTxCommand,
releaseOutputCommand,
listLeasesCommand,
psbtCommand,
},
},
@ -599,14 +600,7 @@ func fundPsbt(ctx *cli.Context) error {
return err
}
jsonLocks := make([]*utxoLease, len(response.LockedUtxos))
for idx, lock := range response.LockedUtxos {
jsonLocks[idx] = &utxoLease{
ID: hex.EncodeToString(lock.Id),
OutPoint: NewOutPointFromProto(lock.Outpoint),
Expiration: lock.Expiration,
}
}
jsonLocks := marshallLocks(response.LockedUtxos)
printJSON(&fundPsbtResponse{
Psbt: base64.StdEncoding.EncodeToString(
@ -619,6 +613,21 @@ func fundPsbt(ctx *cli.Context) error {
return nil
}
// marshallLocks converts the rpc lease information to a more json-friendly
// format.
func marshallLocks(lockedUtxos []*walletrpc.UtxoLease) []*utxoLease {
jsonLocks := make([]*utxoLease, len(lockedUtxos))
for idx, lock := range lockedUtxos {
jsonLocks[idx] = &utxoLease{
ID: hex.EncodeToString(lock.Id),
OutPoint: NewOutPointFromProto(lock.Outpoint),
Expiration: lock.Expiration,
}
}
return jsonLocks
}
// finalizePsbtResponse is a struct that contains JSON annotations for nice
// result serialization.
type finalizePsbtResponse struct {
@ -757,3 +766,25 @@ func releaseOutput(ctx *cli.Context) error {
return nil
}
var listLeasesCommand = cli.Command{
Name: "listleases",
Usage: "Return a list of currently held leases.",
Action: actionDecorator(listLeases),
}
func listLeases(ctx *cli.Context) error {
req := &walletrpc.ListLeasesRequest{}
walletClient, cleanUp := getWalletClient(ctx)
defer cleanUp()
response, err := walletClient.ListLeases(context.Background(), req)
if err != nil {
return err
}
printJSON(marshallLocks(response.LockedUtxos))
return nil
}

@ -260,6 +260,8 @@ http:
- selector: walletrpc.WalletKit.ReleaseOutput
post: "/v2/wallet/utxos/release"
body: "*"
- selector: walletrpc.WalletKit.ListLeases
post: "/v2/wallet/utxos/leases"
- selector: walletrpc.WalletKit.DeriveNextKey
post: "/v2/wallet/key/next"
body: "*"

@ -1773,6 +1773,77 @@ func (m *FinalizePsbtResponse) GetRawFinalTx() []byte {
return nil
}
type ListLeasesRequest struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListLeasesRequest) Reset() { *m = ListLeasesRequest{} }
func (m *ListLeasesRequest) String() string { return proto.CompactTextString(m) }
func (*ListLeasesRequest) ProtoMessage() {}
func (*ListLeasesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{30}
}
func (m *ListLeasesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListLeasesRequest.Unmarshal(m, b)
}
func (m *ListLeasesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListLeasesRequest.Marshal(b, m, deterministic)
}
func (m *ListLeasesRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListLeasesRequest.Merge(m, src)
}
func (m *ListLeasesRequest) XXX_Size() int {
return xxx_messageInfo_ListLeasesRequest.Size(m)
}
func (m *ListLeasesRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ListLeasesRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ListLeasesRequest proto.InternalMessageInfo
type ListLeasesResponse struct {
// The list of currently leased utxos.
LockedUtxos []*UtxoLease `protobuf:"bytes,1,rep,name=locked_utxos,json=lockedUtxos,proto3" json:"locked_utxos,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListLeasesResponse) Reset() { *m = ListLeasesResponse{} }
func (m *ListLeasesResponse) String() string { return proto.CompactTextString(m) }
func (*ListLeasesResponse) ProtoMessage() {}
func (*ListLeasesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{31}
}
func (m *ListLeasesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListLeasesResponse.Unmarshal(m, b)
}
func (m *ListLeasesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListLeasesResponse.Marshal(b, m, deterministic)
}
func (m *ListLeasesResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListLeasesResponse.Merge(m, src)
}
func (m *ListLeasesResponse) XXX_Size() int {
return xxx_messageInfo_ListLeasesResponse.Size(m)
}
func (m *ListLeasesResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ListLeasesResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ListLeasesResponse proto.InternalMessageInfo
func (m *ListLeasesResponse) GetLockedUtxos() []*UtxoLease {
if m != nil {
return m.LockedUtxos
}
return nil
}
func init() {
proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value)
proto.RegisterType((*ListUnspentRequest)(nil), "walletrpc.ListUnspentRequest")
@ -1807,126 +1878,130 @@ func init() {
proto.RegisterType((*UtxoLease)(nil), "walletrpc.UtxoLease")
proto.RegisterType((*FinalizePsbtRequest)(nil), "walletrpc.FinalizePsbtRequest")
proto.RegisterType((*FinalizePsbtResponse)(nil), "walletrpc.FinalizePsbtResponse")
proto.RegisterType((*ListLeasesRequest)(nil), "walletrpc.ListLeasesRequest")
proto.RegisterType((*ListLeasesResponse)(nil), "walletrpc.ListLeasesResponse")
}
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
var fileDescriptor_6cc6942ac78249e5 = []byte{
// 1817 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xef, 0x6e, 0x22, 0xc9,
0x11, 0x5f, 0x0c, 0xc6, 0x50, 0x80, 0x8d, 0x1b, 0xbc, 0x66, 0x59, 0xef, 0xd9, 0x3b, 0x97, 0xe4,
0x9c, 0xdc, 0x1d, 0x56, 0xbc, 0xba, 0xcb, 0x9e, 0x13, 0x45, 0xb1, 0xf1, 0x58, 0x58, 0x60, 0x70,
0x1a, 0xbc, 0xd6, 0x26, 0x1f, 0x46, 0x03, 0xd3, 0xb6, 0x47, 0x86, 0x99, 0xb9, 0x99, 0xc6, 0x40,
0x3e, 0xdd, 0x53, 0x44, 0x3a, 0x29, 0xef, 0x70, 0x2f, 0x90, 0x07, 0xca, 0x63, 0x44, 0xfd, 0x87,
0x99, 0x1e, 0xc0, 0x7b, 0x8a, 0x72, 0x9f, 0xcc, 0xd4, 0xaf, 0xea, 0xd7, 0xd5, 0x55, 0xd5, 0x5d,
0xd5, 0x86, 0x57, 0x13, 0x73, 0x38, 0x24, 0xd4, 0xf7, 0x06, 0x47, 0xe2, 0xd7, 0xa3, 0x4d, 0x6b,
0x9e, 0xef, 0x52, 0x17, 0x65, 0x43, 0xa8, 0x9a, 0xf5, 0xbd, 0x81, 0x90, 0x56, 0xcb, 0x81, 0x7d,
0xef, 0x30, 0x75, 0xf6, 0x97, 0xf8, 0x42, 0xaa, 0xb5, 0x01, 0xb5, 0xec, 0x80, 0xde, 0x38, 0x81,
0x47, 0x1c, 0x8a, 0xc9, 0xf7, 0x63, 0x12, 0x50, 0xf4, 0x1a, 0xb2, 0x23, 0xdb, 0x31, 0x06, 0xae,
0x73, 0x17, 0x54, 0x12, 0x07, 0x89, 0xc3, 0x75, 0x9c, 0x19, 0xd9, 0x4e, 0x9d, 0x7d, 0x73, 0xd0,
0x9c, 0x4a, 0x70, 0x4d, 0x82, 0xe6, 0x94, 0x83, 0xda, 0x7b, 0x28, 0xc5, 0xf8, 0x02, 0xcf, 0x75,
0x02, 0x82, 0xde, 0xc2, 0xfa, 0x98, 0x4e, 0x5d, 0x46, 0x96, 0x3c, 0xcc, 0x1d, 0xe7, 0x6a, 0x43,
0xe6, 0x4a, 0xed, 0x86, 0x4e, 0x5d, 0x2c, 0x10, 0xed, 0x87, 0x04, 0xa0, 0x16, 0x31, 0x03, 0xd2,
0x19, 0x53, 0x6f, 0x1c, 0xba, 0xb2, 0x09, 0x6b, 0xb6, 0xc5, 0x7d, 0xc8, 0xe3, 0x35, 0xdb, 0x42,
0x5f, 0x42, 0xc6, 0x1d, 0x53, 0xcf, 0xb5, 0x1d, 0xca, 0x17, 0xcf, 0x1d, 0x6f, 0x49, 0xb2, 0xce,
0x98, 0x5e, 0x33, 0x31, 0x0e, 0x15, 0xd0, 0xd7, 0x80, 0xc8, 0xd4, 0xb3, 0x7d, 0x93, 0xda, 0xae,
0x63, 0x04, 0x64, 0xe0, 0x3a, 0x56, 0x50, 0x49, 0x1e, 0x24, 0x0e, 0x53, 0x78, 0x3b, 0x42, 0xba,
0x02, 0xd0, 0xbe, 0x81, 0x52, 0xcc, 0x03, 0xe9, 0xfc, 0x67, 0x00, 0x91, 0x2e, 0x77, 0x25, 0x85,
0x15, 0x89, 0xd6, 0x85, 0x32, 0x26, 0xc3, 0x5f, 0xd6, 0x75, 0x6d, 0x17, 0x76, 0x16, 0x48, 0x85,
0x37, 0xda, 0x5f, 0x21, 0xdd, 0x24, 0x33, 0x4c, 0xbe, 0x47, 0x87, 0x50, 0x7c, 0x24, 0x33, 0xe3,
0xce, 0x76, 0xee, 0x89, 0x6f, 0x78, 0x3e, 0xe3, 0x15, 0xc9, 0xda, 0x7c, 0x24, 0xb3, 0x0b, 0x2e,
0xbe, 0x66, 0x52, 0xf4, 0x06, 0x80, 0x6b, 0x9a, 0x23, 0x7b, 0x38, 0x93, 0x39, 0xcb, 0x32, 0x1d,
0x2e, 0xd0, 0x0a, 0x90, 0x3b, 0xb5, 0x2c, 0x5f, 0xfa, 0xad, 0x69, 0x90, 0x17, 0x9f, 0x72, 0xff,
0x08, 0x52, 0xa6, 0x65, 0xf9, 0x9c, 0x3b, 0x8b, 0xf9, 0x6f, 0xed, 0x04, 0x72, 0x3d, 0xdf, 0x74,
0x02, 0x73, 0xc0, 0x42, 0x80, 0x76, 0x20, 0x4d, 0xa7, 0xc6, 0x03, 0x99, 0xca, 0xed, 0xae, 0xd3,
0x69, 0x83, 0x4c, 0x51, 0x19, 0xd6, 0x87, 0x66, 0x9f, 0x0c, 0xf9, 0x92, 0x59, 0x2c, 0x3e, 0xb4,
0x6f, 0x61, 0xeb, 0x7a, 0xdc, 0x1f, 0xda, 0xc1, 0x43, 0xb8, 0xc4, 0xe7, 0x50, 0xf0, 0x84, 0xc8,
0x20, 0xbe, 0xef, 0xce, 0xd7, 0xca, 0x4b, 0xa1, 0xce, 0x64, 0xda, 0xbf, 0x13, 0x80, 0xba, 0xc4,
0xb1, 0x44, 0x40, 0x82, 0x79, 0x98, 0xf7, 0x00, 0x02, 0x93, 0x1a, 0x1e, 0xf1, 0x8d, 0xc7, 0x09,
0x37, 0x4c, 0xe2, 0x4c, 0x60, 0xd2, 0x6b, 0xe2, 0x37, 0x27, 0xe8, 0x10, 0x36, 0x5c, 0xa1, 0x5f,
0x59, 0xe3, 0xb5, 0xb7, 0x59, 0x93, 0x07, 0xa1, 0xd6, 0x9b, 0x76, 0xc6, 0x14, 0xcf, 0xe1, 0xc8,
0xd9, 0xa4, 0xe2, 0x6c, 0xfc, 0x28, 0xa4, 0x16, 0x8e, 0xc2, 0x97, 0xb0, 0xcd, 0xea, 0xdc, 0x32,
0xc6, 0x0e, 0x53, 0xb0, 0xfd, 0x11, 0xb1, 0x2a, 0xeb, 0x07, 0x89, 0xc3, 0x0c, 0x2e, 0x72, 0xe0,
0x26, 0x92, 0x6b, 0x5f, 0x41, 0x29, 0xe6, 0xbd, 0xdc, 0xfa, 0x0e, 0xa4, 0x7d, 0x73, 0x62, 0xd0,
0x30, 0x74, 0xbe, 0x39, 0xe9, 0x4d, 0xb5, 0x6f, 0x00, 0xe9, 0x01, 0xb5, 0x47, 0x26, 0x25, 0x17,
0x84, 0xcc, 0xf7, 0xba, 0x0f, 0x39, 0x46, 0x68, 0x50, 0xd3, 0xbf, 0x27, 0xf3, 0x6c, 0x03, 0x13,
0xf5, 0xb8, 0x44, 0x7b, 0x07, 0xa5, 0x98, 0x99, 0x5c, 0xe4, 0x93, 0x31, 0xd2, 0x7e, 0x4c, 0x42,
0xfe, 0x9a, 0x38, 0x96, 0xed, 0xdc, 0x77, 0x27, 0x84, 0x78, 0xb1, 0x4a, 0x4d, 0xfc, 0xdc, 0x21,
0xfb, 0x0e, 0xf2, 0x13, 0x9b, 0x3a, 0x24, 0x08, 0x0c, 0x3a, 0xf3, 0x08, 0xcf, 0xf5, 0xe6, 0xf1,
0xcb, 0x5a, 0x78, 0x0b, 0xd5, 0x6e, 0x05, 0xdc, 0x9b, 0x79, 0x04, 0xe7, 0x26, 0xd1, 0x07, 0xab,
0x4b, 0x73, 0xe4, 0x8e, 0x1d, 0x6a, 0x04, 0x26, 0xe5, 0x71, 0x2f, 0xe0, 0xac, 0x90, 0x74, 0x4d,
0x8a, 0x0e, 0x20, 0x3f, 0xf7, 0xba, 0x3f, 0xa3, 0x84, 0x87, 0xbf, 0x80, 0x41, 0xf8, 0x7d, 0x36,
0xa3, 0x84, 0x1d, 0xf0, 0xbe, 0xef, 0x9a, 0xd6, 0xc0, 0x0c, 0xa8, 0x61, 0x52, 0x4a, 0x46, 0x1e,
0x0d, 0x78, 0x06, 0x0a, 0x78, 0x3b, 0x44, 0x4e, 0x25, 0x80, 0x8e, 0x61, 0xc7, 0x21, 0x53, 0x6a,
0x44, 0x36, 0x0f, 0xc4, 0xbe, 0x7f, 0xa0, 0x95, 0x34, 0xb7, 0x28, 0x31, 0xf0, 0x6c, 0x8e, 0x35,
0x38, 0xc4, 0x6c, 0x7c, 0x11, 0x7d, 0x62, 0x19, 0x6a, 0xf0, 0x33, 0xc2, 0x26, 0x04, 0xeb, 0x61,
0x16, 0xd0, 0x3b, 0x78, 0x19, 0xd9, 0xc4, 0xb6, 0x90, 0x5d, 0x30, 0xea, 0x46, 0x7b, 0x29, 0xc3,
0xfa, 0x9d, 0xeb, 0x0f, 0x48, 0x65, 0x83, 0x17, 0x90, 0xf8, 0xd0, 0x5e, 0x42, 0x59, 0x4d, 0xcd,
0xbc, 0xea, 0xb5, 0x5b, 0xd8, 0x59, 0x90, 0xcb, 0x54, 0xff, 0x19, 0x36, 0x3d, 0x01, 0x18, 0x01,
0x47, 0xe4, 0x9d, 0xbb, 0xab, 0x24, 0x44, 0xb5, 0xc4, 0x05, 0x4f, 0xe5, 0xd1, 0xfe, 0x99, 0x80,
0xcd, 0xb3, 0xf1, 0xc8, 0x53, 0xaa, 0xee, 0x7f, 0x2a, 0x87, 0x7d, 0xc8, 0x89, 0x00, 0xf1, 0x60,
0xf1, 0x6a, 0x28, 0x60, 0x10, 0x22, 0x16, 0xa2, 0xa5, 0xac, 0x26, 0x97, 0xb2, 0x1a, 0x46, 0x22,
0xa5, 0x46, 0x62, 0x1b, 0xb6, 0x42, 0xbf, 0xe4, 0x5d, 0xf8, 0x35, 0x6c, 0xb3, 0x6e, 0x13, 0x8b,
0x0c, 0xaa, 0xc0, 0xc6, 0x13, 0xf1, 0xfb, 0x6e, 0x40, 0xb8, 0xb3, 0x19, 0x3c, 0xff, 0xd4, 0x7e,
0x58, 0x13, 0xdd, 0x6e, 0x21, 0x62, 0x2d, 0x28, 0xd1, 0xe8, 0x2e, 0x33, 0x2c, 0x42, 0x4d, 0x7b,
0x18, 0xc8, 0x9d, 0xbe, 0x92, 0x3b, 0x55, 0x6e, 0xbb, 0x73, 0xa1, 0xd0, 0x78, 0x81, 0x11, 0x5d,
0x92, 0xa2, 0x5b, 0xd8, 0x52, 0xd9, 0x6c, 0x2b, 0x90, 0x97, 0xfd, 0x57, 0x4a, 0x02, 0x96, 0xbd,
0x50, 0x17, 0xb8, 0x3c, 0x67, 0xe4, 0x9b, 0x0a, 0xcd, 0xa5, 0x15, 0x54, 0xbf, 0x83, 0xcd, 0xb8,
0x0e, 0xfa, 0x62, 0x79, 0x29, 0x96, 0xeb, 0xec, 0xa2, 0xe9, 0x59, 0x06, 0xd2, 0xa2, 0x16, 0x34,
0x13, 0x76, 0x5b, 0xec, 0x5e, 0x53, 0x98, 0xe6, 0x71, 0x43, 0x90, 0xa2, 0xd3, 0xb0, 0x61, 0xf1,
0xdf, 0xab, 0x2f, 0x70, 0xb4, 0x07, 0x59, 0xf7, 0x89, 0xf8, 0x13, 0xdf, 0x96, 0xe9, 0xcb, 0xe0,
0x48, 0xa0, 0x55, 0xa1, 0xb2, 0xbc, 0x84, 0x4c, 0xd8, 0x4f, 0x09, 0xd8, 0xba, 0x18, 0x3b, 0xd6,
0x75, 0xd0, 0x0f, 0xdb, 0x64, 0x19, 0x52, 0x5e, 0xd0, 0x17, 0x95, 0x95, 0x6f, 0xbc, 0xc0, 0xfc,
0x0b, 0xfd, 0x16, 0x92, 0xbe, 0x39, 0x91, 0xa1, 0xdb, 0x51, 0x42, 0xd7, 0x9b, 0xf6, 0xc8, 0xc8,
0x1b, 0x9a, 0x94, 0x34, 0x5e, 0x60, 0xa6, 0x83, 0xde, 0xc6, 0x2b, 0x8e, 0xd7, 0x53, 0x23, 0x11,
0xab, 0xb9, 0x5f, 0x41, 0x61, 0x5e, 0x73, 0x4f, 0xd1, 0x55, 0xd2, 0x48, 0xe0, 0x9c, 0x28, 0xbb,
0x0f, 0x4c, 0x78, 0x06, 0x90, 0xa1, 0x92, 0xfb, 0x2c, 0x0d, 0xa9, 0x3b, 0x42, 0x02, 0xed, 0x5f,
0x09, 0x28, 0x46, 0x1e, 0xcb, 0x8a, 0xd9, 0x87, 0xdc, 0xdd, 0xd8, 0xb1, 0x88, 0x65, 0x44, 0x9e,
0x63, 0x10, 0x22, 0xa6, 0x88, 0x6a, 0x50, 0x1a, 0x3c, 0x98, 0xce, 0x3d, 0x31, 0x44, 0x77, 0x31,
0x6c, 0xc7, 0x22, 0x53, 0xd9, 0x79, 0xb7, 0x05, 0x24, 0x1a, 0xc1, 0x25, 0x03, 0xd0, 0x1f, 0x20,
0x3f, 0x74, 0x07, 0x8f, 0xc4, 0x32, 0xc4, 0x98, 0x94, 0xe4, 0x47, 0xb6, 0xac, 0x6c, 0x9b, 0x8d,
0x4a, 0x7c, 0x38, 0xc1, 0x39, 0xa1, 0x79, 0xc3, 0xa7, 0xa6, 0x9f, 0x12, 0x00, 0x51, 0x44, 0xd0,
0x17, 0x90, 0xb6, 0x1d, 0xde, 0xec, 0xc4, 0xa1, 0x5f, 0x3a, 0xa7, 0x12, 0x46, 0x7f, 0x5a, 0x6c,
0x8b, 0xda, 0xca, 0x10, 0xd7, 0x64, 0xb7, 0xd2, 0x1d, 0xea, 0xcf, 0xc2, 0x56, 0x59, 0x3d, 0x81,
0xbc, 0x0a, 0xa0, 0x22, 0x24, 0x1f, 0xc9, 0x4c, 0x36, 0x6d, 0xf6, 0x93, 0x15, 0xce, 0x93, 0x39,
0x1c, 0x8b, 0x6e, 0x90, 0xc2, 0xe2, 0xe3, 0x64, 0xed, 0x7d, 0x42, 0x7b, 0x80, 0x6c, 0xb8, 0x97,
0xff, 0x6f, 0xba, 0x8b, 0xcf, 0x65, 0xc9, 0xa5, 0xb9, 0xec, 0x5b, 0x28, 0x5d, 0xd8, 0x8e, 0x39,
0xb4, 0xff, 0x41, 0xd4, 0x7a, 0xfb, 0xb9, 0xe4, 0x69, 0x1f, 0xa1, 0x1c, 0xb7, 0x8b, 0xb2, 0xce,
0x67, 0xe7, 0xb8, 0xa1, 0x10, 0xf1, 0xac, 0x1f, 0x40, 0x9e, 0xb5, 0xf2, 0x3b, 0x66, 0xcc, 0x1a,
0xfa, 0x9a, 0xd0, 0xf0, 0xcd, 0x09, 0xe7, 0xeb, 0x4d, 0x7f, 0xf7, 0x63, 0x12, 0x72, 0x4a, 0x37,
0x44, 0x25, 0xd8, 0xba, 0x69, 0x37, 0xdb, 0x9d, 0xdb, 0xb6, 0x71, 0x7b, 0xd9, 0x6b, 0xeb, 0xdd,
0x6e, 0xf1, 0x05, 0xaa, 0x40, 0xb9, 0xde, 0xb9, 0xba, 0xba, 0xec, 0x5d, 0xe9, 0xed, 0x9e, 0xd1,
0xbb, 0xbc, 0xd2, 0x8d, 0x56, 0xa7, 0xde, 0x2c, 0x26, 0xd0, 0x2e, 0x94, 0x14, 0xa4, 0xdd, 0x31,
0xce, 0xf5, 0xd6, 0xe9, 0xc7, 0xe2, 0x1a, 0xda, 0x81, 0x6d, 0x05, 0xc0, 0xfa, 0x87, 0x4e, 0x53,
0x2f, 0x26, 0x99, 0x7e, 0xa3, 0xd7, 0xaa, 0x1b, 0x9d, 0x8b, 0x0b, 0x1d, 0xeb, 0xe7, 0x73, 0x20,
0xc5, 0x96, 0xe0, 0xc0, 0x69, 0xbd, 0xae, 0x5f, 0xf7, 0x22, 0x64, 0x1d, 0xfd, 0x1a, 0xde, 0xc6,
0x4c, 0xd8, 0xf2, 0x9d, 0x9b, 0x9e, 0xd1, 0xd5, 0xeb, 0x9d, 0xf6, 0xb9, 0xd1, 0xd2, 0x3f, 0xe8,
0xad, 0x62, 0x1a, 0xfd, 0x06, 0xb4, 0x38, 0x41, 0xf7, 0xa6, 0x5e, 0xd7, 0xbb, 0xdd, 0xb8, 0xde,
0x06, 0xda, 0x87, 0xd7, 0x0b, 0x1e, 0x5c, 0x75, 0x7a, 0xfa, 0x9c, 0xb5, 0x98, 0x41, 0x07, 0xb0,
0xb7, 0xe8, 0x09, 0xd7, 0x90, 0x7c, 0xc5, 0x2c, 0xda, 0x83, 0x0a, 0xd7, 0x50, 0x99, 0xe7, 0xfe,
0x02, 0x2a, 0x43, 0x51, 0x46, 0xce, 0x68, 0xea, 0x1f, 0x8d, 0xc6, 0x69, 0xb7, 0x51, 0xcc, 0xa1,
0xd7, 0xb0, 0xdb, 0xd6, 0xbb, 0x8c, 0x6e, 0x09, 0xcc, 0x2f, 0x04, 0xeb, 0xb4, 0x5d, 0x6f, 0x74,
0x70, 0xb1, 0x70, 0xfc, 0x9f, 0x0c, 0x64, 0x6f, 0xf9, 0x19, 0x68, 0xda, 0x14, 0xb5, 0x20, 0xa7,
0x3c, 0x64, 0xd0, 0x9b, 0x85, 0xcb, 0x3b, 0xfe, 0x60, 0xaa, 0x7e, 0xf6, 0x1c, 0x1c, 0xb6, 0x98,
0x9c, 0xf2, 0xb2, 0x88, 0xb3, 0x2d, 0x3d, 0x1c, 0xe2, 0x6c, 0x2b, 0x1e, 0x24, 0x18, 0x0a, 0xb1,
0xb7, 0x01, 0xda, 0x57, 0x0c, 0x56, 0x3d, 0x45, 0xaa, 0x07, 0xcf, 0x2b, 0x48, 0xce, 0x13, 0x28,
0x9c, 0x13, 0xdf, 0x7e, 0x22, 0x6d, 0x32, 0xa5, 0x4d, 0x32, 0x43, 0xdb, 0x8a, 0x89, 0x78, 0x70,
0x54, 0x5f, 0x86, 0xa3, 0x73, 0x93, 0xcc, 0xce, 0x49, 0x30, 0xf0, 0x6d, 0x8f, 0xba, 0x3e, 0x7a,
0x0f, 0x59, 0x61, 0xcb, 0xec, 0x4a, 0xaa, 0x52, 0xcb, 0x1d, 0x98, 0xd4, 0xf5, 0x9f, 0xb5, 0xfc,
0x23, 0x64, 0xd8, 0x7a, 0xec, 0xb9, 0x81, 0xd4, 0x89, 0x51, 0x79, 0x8e, 0x54, 0x77, 0x97, 0xe4,
0xd2, 0xe5, 0x06, 0x20, 0xf9, 0x8e, 0x50, 0x9f, 0x22, 0x2a, 0x8d, 0x22, 0xaf, 0x56, 0xd5, 0xf9,
0x67, 0xe1, 0xf9, 0xd1, 0x82, 0x9c, 0x32, 0x9a, 0xc7, 0xd2, 0xb3, 0xfc, 0xe0, 0x88, 0xa5, 0x67,
0xd5, 0x44, 0xdf, 0x82, 0x9c, 0x32, 0x83, 0xc7, 0xd8, 0x96, 0x47, 0xfa, 0x18, 0xdb, 0xaa, 0xd1,
0x1d, 0x43, 0x21, 0x36, 0xe8, 0xc5, 0x92, 0xbd, 0x6a, 0x34, 0x8c, 0x25, 0x7b, 0xf5, 0x8c, 0xf8,
0x17, 0xd8, 0x90, 0xa3, 0x14, 0x7a, 0xa5, 0x28, 0xc7, 0xc7, 0xbe, 0x58, 0xc4, 0x16, 0x26, 0x2f,
0x74, 0x09, 0x10, 0xcd, 0x30, 0x68, 0xef, 0x99, 0xd1, 0x46, 0xf0, 0xbc, 0xf9, 0xe4, 0xe0, 0x83,
0xfe, 0x0e, 0xc5, 0xc5, 0x79, 0x01, 0xa9, 0xdd, 0xe8, 0x99, 0x79, 0xa5, 0xfa, 0xf9, 0x27, 0x75,
0x24, 0x79, 0x1d, 0x32, 0xf3, 0xee, 0x8d, 0xd4, 0xfd, 0x2c, 0x0c, 0x21, 0xd5, 0xd7, 0x2b, 0x31,
0x49, 0xd2, 0x81, 0xbc, 0xda, 0x10, 0x90, 0x9a, 0xb2, 0x15, 0x1d, 0xa6, 0xba, 0xff, 0x2c, 0x2e,
0x08, 0xcf, 0x7e, 0xff, 0xb7, 0xa3, 0x7b, 0x9b, 0x3e, 0x8c, 0xfb, 0xb5, 0x81, 0x3b, 0x3a, 0x1a,
0xb2, 0x77, 0x86, 0x63, 0x3b, 0xf7, 0x0e, 0xa1, 0x13, 0xd7, 0x7f, 0x3c, 0x1a, 0x3a, 0xd6, 0x11,
0xef, 0x7a, 0x47, 0x21, 0x4f, 0x3f, 0xcd, 0xff, 0x5f, 0xf3, 0xee, 0xbf, 0x01, 0x00, 0x00, 0xff,
0xff, 0x32, 0x3b, 0xa2, 0xdf, 0xf8, 0x11, 0x00, 0x00,
// 1851 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x5f, 0x73, 0xe2, 0xc8,
0x11, 0x5f, 0x0c, 0xc6, 0xd0, 0x80, 0x8d, 0x07, 0xbc, 0x66, 0x59, 0xef, 0xd9, 0xab, 0x4b, 0x72,
0x4e, 0xee, 0x0e, 0x57, 0xbc, 0x75, 0x97, 0x3d, 0x27, 0x95, 0x8a, 0x8d, 0xe5, 0xc2, 0x05, 0x06,
0x67, 0xc0, 0xeb, 0xda, 0xe4, 0x41, 0x25, 0xd0, 0xd8, 0x56, 0x19, 0x24, 0x9d, 0x34, 0x18, 0xc8,
0xd3, 0x7d, 0x8a, 0x54, 0x5d, 0x55, 0xbe, 0xc3, 0x3d, 0xe4, 0x35, 0x1f, 0x2e, 0x35, 0x7f, 0x10,
0x23, 0x81, 0x6f, 0x93, 0x4a, 0x9e, 0xd0, 0xf4, 0xaf, 0xbb, 0xa7, 0xa7, 0xbb, 0x67, 0xba, 0x1b,
0x78, 0x35, 0x31, 0x87, 0x43, 0x42, 0x7d, 0x6f, 0x70, 0x24, 0xbe, 0x1e, 0x6d, 0x5a, 0xf3, 0x7c,
0x97, 0xba, 0x28, 0x1b, 0x42, 0xd5, 0xac, 0xef, 0x0d, 0x04, 0xb5, 0x5a, 0x0e, 0xec, 0x7b, 0x87,
0xb1, 0xb3, 0x5f, 0xe2, 0x0b, 0xaa, 0xd6, 0x06, 0xd4, 0xb2, 0x03, 0x7a, 0xe3, 0x04, 0x1e, 0x71,
0x28, 0x26, 0xdf, 0x8f, 0x49, 0x40, 0xd1, 0x6b, 0xc8, 0x8e, 0x6c, 0xc7, 0x18, 0xb8, 0xce, 0x5d,
0x50, 0x49, 0x1c, 0x24, 0x0e, 0xd7, 0x71, 0x66, 0x64, 0x3b, 0x75, 0xb6, 0xe6, 0xa0, 0x39, 0x95,
0xe0, 0x9a, 0x04, 0xcd, 0x29, 0x07, 0xb5, 0xf7, 0x50, 0x8a, 0xe8, 0x0b, 0x3c, 0xd7, 0x09, 0x08,
0x7a, 0x0b, 0xeb, 0x63, 0x3a, 0x75, 0x99, 0xb2, 0xe4, 0x61, 0xee, 0x38, 0x57, 0x1b, 0x32, 0x53,
0x6a, 0x37, 0x74, 0xea, 0x62, 0x81, 0x68, 0x3f, 0x24, 0x00, 0xb5, 0x88, 0x19, 0x90, 0xce, 0x98,
0x7a, 0xe3, 0xd0, 0x94, 0x4d, 0x58, 0xb3, 0x2d, 0x6e, 0x43, 0x1e, 0xaf, 0xd9, 0x16, 0xfa, 0x12,
0x32, 0xee, 0x98, 0x7a, 0xae, 0xed, 0x50, 0xbe, 0x79, 0xee, 0x78, 0x4b, 0x2a, 0xeb, 0x8c, 0xe9,
0x35, 0x23, 0xe3, 0x90, 0x01, 0x7d, 0x0d, 0x88, 0x4c, 0x3d, 0xdb, 0x37, 0xa9, 0xed, 0x3a, 0x46,
0x40, 0x06, 0xae, 0x63, 0x05, 0x95, 0xe4, 0x41, 0xe2, 0x30, 0x85, 0xb7, 0x17, 0x48, 0x57, 0x00,
0xda, 0x37, 0x50, 0x8a, 0x58, 0x20, 0x8d, 0xff, 0x0c, 0x60, 0xc1, 0xcb, 0x4d, 0x49, 0x61, 0x85,
0xa2, 0x75, 0xa1, 0x8c, 0xc9, 0xf0, 0xff, 0x6b, 0xba, 0xb6, 0x0b, 0x3b, 0x31, 0xa5, 0xc2, 0x1a,
0xed, 0xcf, 0x90, 0x6e, 0x92, 0x19, 0x26, 0xdf, 0xa3, 0x43, 0x28, 0x3e, 0x92, 0x99, 0x71, 0x67,
0x3b, 0xf7, 0xc4, 0x37, 0x3c, 0x9f, 0xe9, 0x15, 0xc1, 0xda, 0x7c, 0x24, 0xb3, 0x0b, 0x4e, 0xbe,
0x66, 0x54, 0xf4, 0x06, 0x80, 0x73, 0x9a, 0x23, 0x7b, 0x38, 0x93, 0x31, 0xcb, 0x32, 0x1e, 0x4e,
0xd0, 0x0a, 0x90, 0x3b, 0xb5, 0x2c, 0x5f, 0xda, 0xad, 0x69, 0x90, 0x17, 0x4b, 0x79, 0x7e, 0x04,
0x29, 0xd3, 0xb2, 0x7c, 0xae, 0x3b, 0x8b, 0xf9, 0xb7, 0x76, 0x02, 0xb9, 0x9e, 0x6f, 0x3a, 0x81,
0x39, 0x60, 0x2e, 0x40, 0x3b, 0x90, 0xa6, 0x53, 0xe3, 0x81, 0x4c, 0xe5, 0x71, 0xd7, 0xe9, 0xb4,
0x41, 0xa6, 0xa8, 0x0c, 0xeb, 0x43, 0xb3, 0x4f, 0x86, 0x7c, 0xcb, 0x2c, 0x16, 0x0b, 0xed, 0x5b,
0xd8, 0xba, 0x1e, 0xf7, 0x87, 0x76, 0xf0, 0x10, 0x6e, 0xf1, 0x39, 0x14, 0x3c, 0x41, 0x32, 0x88,
0xef, 0xbb, 0xf3, 0xbd, 0xf2, 0x92, 0xa8, 0x33, 0x9a, 0xf6, 0xaf, 0x04, 0xa0, 0x2e, 0x71, 0x2c,
0xe1, 0x90, 0x60, 0xee, 0xe6, 0x3d, 0x80, 0xc0, 0xa4, 0x86, 0x47, 0x7c, 0xe3, 0x71, 0xc2, 0x05,
0x93, 0x38, 0x13, 0x98, 0xf4, 0x9a, 0xf8, 0xcd, 0x09, 0x3a, 0x84, 0x0d, 0x57, 0xf0, 0x57, 0xd6,
0x78, 0xee, 0x6d, 0xd6, 0xe4, 0x45, 0xa8, 0xf5, 0xa6, 0x9d, 0x31, 0xc5, 0x73, 0x78, 0x61, 0x6c,
0x52, 0x31, 0x36, 0x7a, 0x15, 0x52, 0xb1, 0xab, 0xf0, 0x25, 0x6c, 0xb3, 0x3c, 0xb7, 0x8c, 0xb1,
0xc3, 0x18, 0x6c, 0x7f, 0x44, 0xac, 0xca, 0xfa, 0x41, 0xe2, 0x30, 0x83, 0x8b, 0x1c, 0xb8, 0x59,
0xd0, 0xb5, 0xaf, 0xa0, 0x14, 0xb1, 0x5e, 0x1e, 0x7d, 0x07, 0xd2, 0xbe, 0x39, 0x31, 0x68, 0xe8,
0x3a, 0xdf, 0x9c, 0xf4, 0xa6, 0xda, 0x37, 0x80, 0xf4, 0x80, 0xda, 0x23, 0x93, 0x92, 0x0b, 0x42,
0xe6, 0x67, 0xdd, 0x87, 0x1c, 0x53, 0x68, 0x50, 0xd3, 0xbf, 0x27, 0xf3, 0x68, 0x03, 0x23, 0xf5,
0x38, 0x45, 0x7b, 0x07, 0xa5, 0x88, 0x98, 0xdc, 0xe4, 0x67, 0x7d, 0xa4, 0xfd, 0x98, 0x84, 0xfc,
0x35, 0x71, 0x2c, 0xdb, 0xb9, 0xef, 0x4e, 0x08, 0xf1, 0x22, 0x99, 0x9a, 0xf8, 0xd4, 0x25, 0xfb,
0x0e, 0xf2, 0x13, 0x9b, 0x3a, 0x24, 0x08, 0x0c, 0x3a, 0xf3, 0x08, 0x8f, 0xf5, 0xe6, 0xf1, 0xcb,
0x5a, 0xf8, 0x0a, 0xd5, 0x6e, 0x05, 0xdc, 0x9b, 0x79, 0x04, 0xe7, 0x26, 0x8b, 0x05, 0xcb, 0x4b,
0x73, 0xe4, 0x8e, 0x1d, 0x6a, 0x04, 0x26, 0xe5, 0x7e, 0x2f, 0xe0, 0xac, 0xa0, 0x74, 0x4d, 0x8a,
0x0e, 0x20, 0x3f, 0xb7, 0xba, 0x3f, 0xa3, 0x84, 0xbb, 0xbf, 0x80, 0x41, 0xd8, 0x7d, 0x36, 0xa3,
0x84, 0x5d, 0xf0, 0xbe, 0xef, 0x9a, 0xd6, 0xc0, 0x0c, 0xa8, 0x61, 0x52, 0x4a, 0x46, 0x1e, 0x0d,
0x78, 0x04, 0x0a, 0x78, 0x3b, 0x44, 0x4e, 0x25, 0x80, 0x8e, 0x61, 0xc7, 0x21, 0x53, 0x6a, 0x2c,
0x64, 0x1e, 0x88, 0x7d, 0xff, 0x40, 0x2b, 0x69, 0x2e, 0x51, 0x62, 0xe0, 0xd9, 0x1c, 0x6b, 0x70,
0x88, 0xc9, 0xf8, 0xc2, 0xfb, 0xc4, 0x32, 0x54, 0xe7, 0x67, 0x84, 0x4c, 0x08, 0xd6, 0xc3, 0x28,
0xa0, 0x77, 0xf0, 0x72, 0x21, 0x13, 0x39, 0x42, 0x36, 0x26, 0xd4, 0x5d, 0x9c, 0xa5, 0x0c, 0xeb,
0x77, 0xae, 0x3f, 0x20, 0x95, 0x0d, 0x9e, 0x40, 0x62, 0xa1, 0xbd, 0x84, 0xb2, 0x1a, 0x9a, 0x79,
0xd6, 0x6b, 0xb7, 0xb0, 0x13, 0xa3, 0xcb, 0x50, 0xff, 0x11, 0x36, 0x3d, 0x01, 0x18, 0x01, 0x47,
0xe4, 0x9b, 0xbb, 0xab, 0x04, 0x44, 0x95, 0xc4, 0x05, 0x4f, 0xd5, 0xa3, 0xfd, 0x3d, 0x01, 0x9b,
0x67, 0xe3, 0x91, 0xa7, 0x64, 0xdd, 0x7f, 0x95, 0x0e, 0xfb, 0x90, 0x13, 0x0e, 0xe2, 0xce, 0xe2,
0xd9, 0x50, 0xc0, 0x20, 0x48, 0xcc, 0x45, 0x4b, 0x51, 0x4d, 0x2e, 0x45, 0x35, 0xf4, 0x44, 0x4a,
0xf5, 0xc4, 0x36, 0x6c, 0x85, 0x76, 0xc9, 0xb7, 0xf0, 0x6b, 0xd8, 0x66, 0xd5, 0x26, 0xe2, 0x19,
0x54, 0x81, 0x8d, 0x27, 0xe2, 0xf7, 0xdd, 0x80, 0x70, 0x63, 0x33, 0x78, 0xbe, 0xd4, 0x7e, 0x58,
0x13, 0xd5, 0x2e, 0xe6, 0xb1, 0x16, 0x94, 0xe8, 0xe2, 0x2d, 0x33, 0x2c, 0x42, 0x4d, 0x7b, 0x18,
0xc8, 0x93, 0xbe, 0x92, 0x27, 0x55, 0x5e, 0xbb, 0x73, 0xc1, 0xd0, 0x78, 0x81, 0x11, 0x5d, 0xa2,
0xa2, 0x5b, 0xd8, 0x52, 0xb5, 0xd9, 0x56, 0x20, 0x1f, 0xfb, 0xaf, 0x94, 0x00, 0x2c, 0x5b, 0xa1,
0x6e, 0x70, 0x79, 0xce, 0x94, 0x6f, 0x2a, 0x6a, 0x2e, 0xad, 0xa0, 0xfa, 0x1d, 0x6c, 0x46, 0x79,
0xd0, 0x17, 0xcb, 0x5b, 0xb1, 0x58, 0x67, 0xe3, 0xa2, 0x67, 0x19, 0x48, 0x8b, 0x5c, 0xd0, 0x4c,
0xd8, 0x6d, 0xb1, 0x77, 0x4d, 0xd1, 0x34, 0xf7, 0x1b, 0x82, 0x14, 0x9d, 0x86, 0x05, 0x8b, 0x7f,
0xaf, 0x7e, 0xc0, 0xd1, 0x1e, 0x64, 0xdd, 0x27, 0xe2, 0x4f, 0x7c, 0x5b, 0x86, 0x2f, 0x83, 0x17,
0x04, 0xad, 0x0a, 0x95, 0xe5, 0x2d, 0x64, 0xc0, 0x7e, 0x4a, 0xc0, 0xd6, 0xc5, 0xd8, 0xb1, 0xae,
0x83, 0x7e, 0x58, 0x26, 0xcb, 0x90, 0xf2, 0x82, 0xbe, 0xc8, 0xac, 0x7c, 0xe3, 0x05, 0xe6, 0x2b,
0xf4, 0x6b, 0x48, 0xfa, 0xe6, 0x44, 0xba, 0x6e, 0x47, 0x71, 0x5d, 0x6f, 0xda, 0x23, 0x23, 0x6f,
0x68, 0x52, 0xd2, 0x78, 0x81, 0x19, 0x0f, 0x7a, 0x1b, 0xcd, 0x38, 0x9e, 0x4f, 0x8d, 0x44, 0x24,
0xe7, 0x7e, 0x01, 0x85, 0x79, 0xce, 0x3d, 0x2d, 0x9e, 0x92, 0x46, 0x02, 0xe7, 0x44, 0xda, 0x7d,
0x60, 0xc4, 0x33, 0x80, 0x0c, 0x95, 0xba, 0xcf, 0xd2, 0x90, 0xba, 0x23, 0x24, 0xd0, 0xfe, 0x91,
0x80, 0xe2, 0xc2, 0x62, 0x99, 0x31, 0xfb, 0x90, 0xbb, 0x1b, 0x3b, 0x16, 0xb1, 0x8c, 0x85, 0xe5,
0x18, 0x04, 0x89, 0x31, 0xa2, 0x1a, 0x94, 0x06, 0x0f, 0xa6, 0x73, 0x4f, 0x0c, 0x51, 0x5d, 0x0c,
0xdb, 0xb1, 0xc8, 0x54, 0x56, 0xde, 0x6d, 0x01, 0x89, 0x42, 0x70, 0xc9, 0x00, 0xf4, 0x3b, 0xc8,
0x0f, 0xdd, 0xc1, 0x23, 0xb1, 0x0c, 0xd1, 0x26, 0x25, 0xf9, 0x95, 0x2d, 0x2b, 0xc7, 0x66, 0xad,
0x12, 0x6f, 0x4e, 0x70, 0x4e, 0x70, 0xde, 0xf0, 0xae, 0xe9, 0xa7, 0x04, 0xc0, 0xc2, 0x23, 0xe8,
0x0b, 0x48, 0xdb, 0x0e, 0x2f, 0x76, 0xe2, 0xd2, 0x2f, 0xdd, 0x53, 0x09, 0xa3, 0x3f, 0xc4, 0xcb,
0xa2, 0xb6, 0xd2, 0xc5, 0x35, 0x59, 0xad, 0x74, 0x87, 0xfa, 0xb3, 0xb0, 0x54, 0x56, 0x4f, 0x20,
0xaf, 0x02, 0xa8, 0x08, 0xc9, 0x47, 0x32, 0x93, 0x45, 0x9b, 0x7d, 0xb2, 0xc4, 0x79, 0x32, 0x87,
0x63, 0x51, 0x0d, 0x52, 0x58, 0x2c, 0x4e, 0xd6, 0xde, 0x27, 0xb4, 0x07, 0xc8, 0x86, 0x67, 0xf9,
0xdf, 0xba, 0xbb, 0x68, 0x5f, 0x96, 0x5c, 0xea, 0xcb, 0xbe, 0x85, 0xd2, 0x85, 0xed, 0x98, 0x43,
0xfb, 0x6f, 0x44, 0xcd, 0xb7, 0x4f, 0x05, 0x4f, 0xfb, 0x08, 0xe5, 0xa8, 0xdc, 0x22, 0xea, 0xbc,
0x77, 0x8e, 0x0a, 0x0a, 0x12, 0x8f, 0xfa, 0x01, 0xe4, 0x59, 0x29, 0xbf, 0x63, 0xc2, 0xac, 0xa0,
0xaf, 0x09, 0x0e, 0xdf, 0x9c, 0x70, 0x7d, 0xbd, 0xa9, 0x56, 0x12, 0x0f, 0x16, 0x3f, 0x7c, 0xf8,
0x94, 0x5f, 0x89, 0x57, 0x69, 0x4e, 0x94, 0xbb, 0xc5, 0x53, 0x22, 0xf1, 0x1f, 0xa6, 0xc4, 0x6f,
0x7e, 0x4c, 0x42, 0x4e, 0xa9, 0xb8, 0xa8, 0x04, 0x5b, 0x37, 0xed, 0x66, 0xbb, 0x73, 0xdb, 0x36,
0x6e, 0x2f, 0x7b, 0x6d, 0xbd, 0xdb, 0x2d, 0xbe, 0x40, 0x15, 0x28, 0xd7, 0x3b, 0x57, 0x57, 0x97,
0xbd, 0x2b, 0xbd, 0xdd, 0x33, 0x7a, 0x97, 0x57, 0xba, 0xd1, 0xea, 0xd4, 0x9b, 0xc5, 0x04, 0xda,
0x85, 0x92, 0x82, 0xb4, 0x3b, 0xc6, 0xb9, 0xde, 0x3a, 0xfd, 0x58, 0x5c, 0x43, 0x3b, 0xb0, 0xad,
0x00, 0x58, 0xff, 0xd0, 0x69, 0xea, 0xc5, 0x24, 0xe3, 0x6f, 0xf4, 0x5a, 0x75, 0xa3, 0x73, 0x71,
0xa1, 0x63, 0xfd, 0x7c, 0x0e, 0xa4, 0xd8, 0x16, 0x1c, 0x38, 0xad, 0xd7, 0xf5, 0xeb, 0xde, 0x02,
0x59, 0x47, 0xbf, 0x84, 0xb7, 0x11, 0x11, 0xb6, 0x7d, 0xe7, 0xa6, 0x67, 0x74, 0xf5, 0x7a, 0xa7,
0x7d, 0x6e, 0xb4, 0xf4, 0x0f, 0x7a, 0xab, 0x98, 0x46, 0xbf, 0x02, 0x2d, 0xaa, 0xa0, 0x7b, 0x53,
0xaf, 0xeb, 0xdd, 0x6e, 0x94, 0x6f, 0x03, 0xed, 0xc3, 0xeb, 0x98, 0x05, 0x57, 0x9d, 0x9e, 0x3e,
0xd7, 0x5a, 0xcc, 0xa0, 0x03, 0xd8, 0x8b, 0x5b, 0xc2, 0x39, 0xa4, 0xbe, 0x62, 0x16, 0xed, 0x41,
0x85, 0x73, 0xa8, 0x9a, 0xe7, 0xf6, 0x02, 0x2a, 0x43, 0x51, 0x7a, 0xce, 0x68, 0xea, 0x1f, 0x8d,
0xc6, 0x69, 0xb7, 0x51, 0xcc, 0xa1, 0xd7, 0xb0, 0xdb, 0xd6, 0xbb, 0x4c, 0xdd, 0x12, 0x98, 0x8f,
0x39, 0xeb, 0xb4, 0x5d, 0x6f, 0x74, 0x70, 0xb1, 0x70, 0xfc, 0xcf, 0x2c, 0x64, 0x6f, 0x79, 0x00,
0x9b, 0x36, 0x45, 0x2d, 0xc8, 0x29, 0xc3, 0x12, 0x7a, 0x13, 0x2b, 0x10, 0xd1, 0xa1, 0xac, 0xfa,
0xd9, 0x73, 0x70, 0x58, 0xc6, 0x72, 0xca, 0xf4, 0x12, 0xd5, 0xb6, 0x34, 0x9c, 0x44, 0xb5, 0xad,
0x18, 0x7a, 0x30, 0x14, 0x22, 0xf3, 0x07, 0xda, 0x57, 0x04, 0x56, 0x8d, 0x3b, 0xd5, 0x83, 0xe7,
0x19, 0xa4, 0xce, 0x4b, 0x80, 0x45, 0xa2, 0xa3, 0xbd, 0xd8, 0x79, 0x22, 0x97, 0xa2, 0xfa, 0xe6,
0x19, 0x54, 0xaa, 0x3a, 0x81, 0xc2, 0x39, 0xf1, 0xed, 0x27, 0xd2, 0x26, 0x53, 0xda, 0x24, 0x33,
0xb4, 0xad, 0xf0, 0x8b, 0xf9, 0xa8, 0xfa, 0x32, 0xec, 0xf4, 0x9b, 0x64, 0x76, 0x4e, 0x82, 0x81,
0x6f, 0x7b, 0xd4, 0xf5, 0xd1, 0x7b, 0xc8, 0x0a, 0x59, 0x26, 0x57, 0x52, 0x99, 0x5a, 0xee, 0xc0,
0xa4, 0xae, 0xff, 0xac, 0xe4, 0xef, 0x21, 0xc3, 0xf6, 0x63, 0xd3, 0x11, 0x52, 0x1b, 0x5c, 0x65,
0x7a, 0xaa, 0xee, 0x2e, 0xd1, 0xa5, 0xc9, 0x0d, 0x40, 0x72, 0xec, 0x51, 0x27, 0x27, 0x55, 0x8d,
0x42, 0xaf, 0x56, 0xd5, 0x76, 0x2d, 0x36, 0x2d, 0xb5, 0x20, 0xa7, 0x4c, 0x12, 0x91, 0x48, 0x2f,
0xcf, 0x47, 0x91, 0x48, 0xaf, 0x1a, 0x40, 0x5a, 0x90, 0x53, 0x46, 0x86, 0x88, 0xb6, 0xe5, 0x09,
0x24, 0xa2, 0x6d, 0xd5, 0xa4, 0x81, 0xa1, 0x10, 0xe9, 0x4b, 0x23, 0x79, 0xb3, 0xaa, 0x93, 0x8d,
0xe4, 0xcd, 0xea, 0x96, 0xf6, 0x4f, 0xb0, 0x21, 0x3b, 0x3f, 0xf4, 0x4a, 0x61, 0x8e, 0x76, 0xa9,
0x11, 0x8f, 0xc5, 0x1a, 0xc5, 0x79, 0xe6, 0x49, 0x93, 0xf6, 0x9e, 0xe9, 0xc4, 0x56, 0x67, 0x5e,
0xcc, 0x98, 0xbf, 0x42, 0x31, 0xde, 0xde, 0x20, 0xb5, 0x78, 0x3e, 0xd3, 0x5e, 0x55, 0x3f, 0xff,
0x59, 0x1e, 0xa9, 0xbc, 0x0e, 0x99, 0x79, 0xb3, 0x81, 0xd4, 0xf3, 0xc4, 0x7a, 0xa6, 0xea, 0xeb,
0x95, 0x98, 0x54, 0xd2, 0x81, 0xbc, 0x5a, 0xbf, 0x90, 0x1a, 0xb2, 0x15, 0x05, 0xb1, 0xba, 0xff,
0x2c, 0x2e, 0x14, 0x9e, 0xfd, 0xf6, 0x2f, 0x47, 0xf7, 0x36, 0x7d, 0x18, 0xf7, 0x6b, 0x03, 0x77,
0x74, 0x34, 0x64, 0x63, 0x91, 0x63, 0x3b, 0xf7, 0x0e, 0xa1, 0x13, 0xd7, 0x7f, 0x3c, 0x1a, 0x3a,
0xd6, 0x11, 0x2f, 0xd2, 0x47, 0xa1, 0x9e, 0x7e, 0x9a, 0xff, 0xbd, 0xf4, 0xee, 0xdf, 0x01, 0x00,
0x00, 0xff, 0xff, 0xad, 0x1e, 0xe8, 0xf0, 0xa7, 0x12, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1958,6 +2033,9 @@ type WalletKitClient interface {
//originally lock the output.
ReleaseOutput(ctx context.Context, in *ReleaseOutputRequest, opts ...grpc.CallOption) (*ReleaseOutputResponse, error)
//
//ListLeases lists all currently locked utxos.
ListLeases(ctx context.Context, in *ListLeasesRequest, opts ...grpc.CallOption) (*ListLeasesResponse, error)
//
//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.
@ -2103,6 +2181,15 @@ func (c *walletKitClient) ReleaseOutput(ctx context.Context, in *ReleaseOutputRe
return out, nil
}
func (c *walletKitClient) ListLeases(ctx context.Context, in *ListLeasesRequest, opts ...grpc.CallOption) (*ListLeasesResponse, error) {
out := new(ListLeasesResponse)
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ListLeases", 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...)
@ -2230,6 +2317,9 @@ type WalletKitServer interface {
//originally lock the output.
ReleaseOutput(context.Context, *ReleaseOutputRequest) (*ReleaseOutputResponse, error)
//
//ListLeases lists all currently locked utxos.
ListLeases(context.Context, *ListLeasesRequest) (*ListLeasesResponse, error)
//
//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.
@ -2353,6 +2443,9 @@ func (*UnimplementedWalletKitServer) LeaseOutput(ctx context.Context, req *Lease
func (*UnimplementedWalletKitServer) ReleaseOutput(ctx context.Context, req *ReleaseOutputRequest) (*ReleaseOutputResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReleaseOutput not implemented")
}
func (*UnimplementedWalletKitServer) ListLeases(ctx context.Context, req *ListLeasesRequest) (*ListLeasesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListLeases not implemented")
}
func (*UnimplementedWalletKitServer) DeriveNextKey(ctx context.Context, req *KeyReq) (*signrpc.KeyDescriptor, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeriveNextKey not implemented")
}
@ -2448,6 +2541,24 @@ func _WalletKit_ReleaseOutput_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
func _WalletKit_ListLeases_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListLeasesRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WalletKitServer).ListLeases(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/walletrpc.WalletKit/ListLeases",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WalletKitServer).ListLeases(ctx, req.(*ListLeasesRequest))
}
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 {
@ -2680,6 +2791,10 @@ var _WalletKit_serviceDesc = grpc.ServiceDesc{
MethodName: "ReleaseOutput",
Handler: _WalletKit_ReleaseOutput_Handler,
},
{
MethodName: "ListLeases",
Handler: _WalletKit_ListLeases_Handler,
},
{
MethodName: "DeriveNextKey",
Handler: _WalletKit_DeriveNextKey_Handler,

@ -133,6 +133,24 @@ func local_request_WalletKit_ReleaseOutput_0(ctx context.Context, marshaler runt
}
func request_WalletKit_ListLeases_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListLeasesRequest
var metadata runtime.ServerMetadata
msg, err := client.ListLeases(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_ListLeases_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListLeasesRequest
var metadata runtime.ServerMetadata
msg, err := server.ListLeases(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_DeriveNextKey_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq KeyReq
var metadata runtime.ServerMetadata
@ -609,6 +627,26 @@ func RegisterWalletKitHandlerServer(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("POST", pattern_WalletKit_ListLeases_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_ListLeases_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ListLeases_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_DeriveNextKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -950,6 +988,26 @@ func RegisterWalletKitHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("POST", pattern_WalletKit_ListLeases_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_ListLeases_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ListLeases_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_DeriveNextKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1200,6 +1258,8 @@ var (
pattern_WalletKit_ReleaseOutput_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "utxos", "release"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_ListLeases_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "utxos", "leases"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_DeriveNextKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "key", "next"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_DeriveKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "key"}, "", runtime.AssumeColonVerbOpt(true)))
@ -1232,6 +1292,8 @@ var (
forward_WalletKit_ReleaseOutput_0 = runtime.ForwardResponseMessage
forward_WalletKit_ListLeases_0 = runtime.ForwardResponseMessage
forward_WalletKit_DeriveNextKey_0 = runtime.ForwardResponseMessage
forward_WalletKit_DeriveKey_0 = runtime.ForwardResponseMessage

@ -32,6 +32,11 @@ service WalletKit {
*/
rpc ReleaseOutput (ReleaseOutputRequest) returns (ReleaseOutputResponse);
/*
ListLeases lists all currently locked utxos.
*/
rpc ListLeases (ListLeasesRequest) returns (ListLeasesResponse);
/*
DeriveNextKey attempts to derive the *next* key within the key family
(account in BIP43) specified. This method should return the next external
@ -603,3 +608,11 @@ message FinalizePsbtResponse {
// The fully signed and finalized transaction in the raw wire format.
bytes raw_final_tx = 2;
}
message ListLeasesRequest {
}
message ListLeasesResponse {
// The list of currently leased utxos.
repeated UtxoLease locked_utxos = 1;
}

@ -457,6 +457,29 @@
]
}
},
"/v2/wallet/utxos/leases": {
"post": {
"summary": "ListLeases lists all currently locked utxos.",
"operationId": "ListLeases",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcListLeasesResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/utxos/release": {
"post": {
"summary": "ReleaseOutput unlocks an output, allowing it to be available for coin\nselection if it remains unspent. The ID should match the one used to\noriginally lock the output.",
@ -894,6 +917,18 @@
}
}
},
"walletrpcListLeasesResponse": {
"type": "object",
"properties": {
"locked_utxos": {
"type": "array",
"items": {
"$ref": "#/definitions/walletrpcUtxoLease"
},
"description": "The list of currently leased utxos."
}
}
},
"walletrpcListSweepsResponse": {
"type": "object",
"properties": {

@ -112,6 +112,10 @@ var (
Entity: "onchain",
Action: "write",
}},
"/walletrpc.WalletKit/ListLeases": {{
Entity: "onchain",
Action: "read",
}},
"/walletrpc.WalletKit/ListUnspent": {{
Entity: "onchain",
Action: "read",
@ -421,6 +425,20 @@ func (w *WalletKit) ReleaseOutput(ctx context.Context,
return &ReleaseOutputResponse{}, nil
}
// ListLeases returns a list of all currently locked utxos.
func (w *WalletKit) ListLeases(ctx context.Context,
req *ListLeasesRequest) (*ListLeasesResponse, error) {
leases, err := w.cfg.Wallet.ListLeasedOutputs()
if err != nil {
return nil, err
}
return &ListLeasesResponse{
LockedUtxos: marshallLeases(leases),
}, 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.

@ -142,6 +142,10 @@ func (w *WalletController) ReleaseOutput(wtxmgr.LockID, wire.OutPoint) error {
return nil
}
func (w *WalletController) ListLeasedOutputs() ([]*wtxmgr.LockedOutput, error) {
return nil, nil
}
// FundPsbt currently does nothing.
func (w *WalletController) FundPsbt(_ *psbt.Packet,
_ chainfee.SatPerKWeight) (int32, error) {

@ -405,6 +405,11 @@ func (b *BtcWallet) LeaseOutput(id wtxmgr.LockID, op wire.OutPoint,
return b.wallet.LeaseOutput(id, op, duration)
}
// ListLeasedOutputs returns a list of all currently locked outputs.
func (b *BtcWallet) ListLeasedOutputs() ([]*wtxmgr.LockedOutput, error) {
return b.wallet.ListLeasedOutputs()
}
// 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.

@ -260,6 +260,9 @@ type WalletController interface {
// NOTE: This method requires the global coin selection lock to be held.
ReleaseOutput(id wtxmgr.LockID, op wire.OutPoint) error
// ListLeasedOutputs returns a list of all currently locked outputs.
ListLeasedOutputs() ([]*wtxmgr.LockedOutput, error)
// PublishTransaction performs cursory validation (dust checks, etc),
// then finally broadcasts the passed transaction to the Bitcoin network.
// If the transaction is rejected because it is conflicting with an