diff --git a/boltzrpc/autoswaprpc/autoswaprpc.pb.go b/boltzrpc/autoswaprpc/autoswaprpc.pb.go index b66294a2..829df231 100644 --- a/boltzrpc/autoswaprpc/autoswaprpc.pb.go +++ b/boltzrpc/autoswaprpc/autoswaprpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 +// protoc-gen-go v1.30.0 // protoc v5.26.0 // source: autoswaprpc/autoswaprpc.proto @@ -8,10 +8,10 @@ package autoswaprpc import ( boltzrpc "github.com/BoltzExchange/boltz-client/boltzrpc" + empty "github.com/golang/protobuf/ptypes/empty" + field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" reflect "reflect" sync "sync" ) @@ -651,9 +651,9 @@ type UpdateLightningConfigRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Config *LightningConfig `protobuf:"bytes,1,opt,name=config,proto3,oneof" json:"config,omitempty"` - FieldMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` - Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` + Config *LightningConfig `protobuf:"bytes,1,opt,name=config,proto3,oneof" json:"config,omitempty"` + FieldMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` + Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` } func (x *UpdateLightningConfigRequest) Reset() { @@ -695,7 +695,7 @@ func (x *UpdateLightningConfigRequest) GetConfig() *LightningConfig { return nil } -func (x *UpdateLightningConfigRequest) GetFieldMask() *fieldmaskpb.FieldMask { +func (x *UpdateLightningConfigRequest) GetFieldMask() *field_mask.FieldMask { if x != nil { return x.FieldMask } @@ -714,9 +714,9 @@ type UpdateChainConfigRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Config *ChainConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - FieldMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3,oneof" json:"field_mask,omitempty"` - Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` + Config *ChainConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + FieldMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3,oneof" json:"field_mask,omitempty"` + Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` } func (x *UpdateChainConfigRequest) Reset() { @@ -758,7 +758,7 @@ func (x *UpdateChainConfigRequest) GetConfig() *ChainConfig { return nil } -func (x *UpdateChainConfigRequest) GetFieldMask() *fieldmaskpb.FieldMask { +func (x *UpdateChainConfigRequest) GetFieldMask() *field_mask.FieldMask { if x != nil { return x.FieldMask } @@ -1392,9 +1392,9 @@ var file_autoswaprpc_autoswaprpc_proto_goTypes = []interface{}{ (*boltzrpc.LightningChannel)(nil), // 17: boltzrpc.LightningChannel (*boltzrpc.Balance)(nil), // 18: boltzrpc.Balance (*boltzrpc.SwapStats)(nil), // 19: boltzrpc.SwapStats - (*fieldmaskpb.FieldMask)(nil), // 20: google.protobuf.FieldMask + (*field_mask.FieldMask)(nil), // 20: google.protobuf.FieldMask (boltzrpc.Currency)(0), // 21: boltzrpc.Currency - (*emptypb.Empty)(nil), // 22: google.protobuf.Empty + (*empty.Empty)(nil), // 22: google.protobuf.Empty } var file_autoswaprpc_autoswaprpc_proto_depIdxs = []int32{ 16, // 0: autoswaprpc.LightningSwap.type:type_name -> boltzrpc.SwapType diff --git a/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go b/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go index 2027aced..ce85fb01 100644 --- a/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go +++ b/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go @@ -8,10 +8,10 @@ package autoswaprpc import ( context "context" + empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" ) // This is a compile-time assertion to ensure that this generated file @@ -48,7 +48,7 @@ type AutoSwapClient interface { GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*Config, error) // //Reloads the configuration from disk. - ReloadConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*Config, error) + ReloadConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Config, error) } type autoSwapClient struct { @@ -104,7 +104,7 @@ func (c *autoSwapClient) GetConfig(ctx context.Context, in *GetConfigRequest, op return out, nil } -func (c *autoSwapClient) ReloadConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*Config, error) { +func (c *autoSwapClient) ReloadConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Config, error) { out := new(Config) err := c.cc.Invoke(ctx, AutoSwap_ReloadConfig_FullMethodName, in, out, opts...) if err != nil { @@ -133,7 +133,7 @@ type AutoSwapServer interface { GetConfig(context.Context, *GetConfigRequest) (*Config, error) // //Reloads the configuration from disk. - ReloadConfig(context.Context, *emptypb.Empty) (*Config, error) + ReloadConfig(context.Context, *empty.Empty) (*Config, error) mustEmbedUnimplementedAutoSwapServer() } @@ -156,7 +156,7 @@ func (UnimplementedAutoSwapServer) UpdateChainConfig(context.Context, *UpdateCha func (UnimplementedAutoSwapServer) GetConfig(context.Context, *GetConfigRequest) (*Config, error) { return nil, status.Errorf(codes.Unimplemented, "method GetConfig not implemented") } -func (UnimplementedAutoSwapServer) ReloadConfig(context.Context, *emptypb.Empty) (*Config, error) { +func (UnimplementedAutoSwapServer) ReloadConfig(context.Context, *empty.Empty) (*Config, error) { return nil, status.Errorf(codes.Unimplemented, "method ReloadConfig not implemented") } func (UnimplementedAutoSwapServer) mustEmbedUnimplementedAutoSwapServer() {} @@ -263,7 +263,7 @@ func _AutoSwap_GetConfig_Handler(srv interface{}, ctx context.Context, dec func( } func _AutoSwap_ReloadConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) + in := new(empty.Empty) if err := dec(in); err != nil { return nil, err } @@ -275,7 +275,7 @@ func _AutoSwap_ReloadConfig_Handler(srv interface{}, ctx context.Context, dec fu FullMethod: AutoSwap_ReloadConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AutoSwapServer).ReloadConfig(ctx, req.(*emptypb.Empty)) + return srv.(AutoSwapServer).ReloadConfig(ctx, req.(*empty.Empty)) } return interceptor(ctx, in, info, handler) } diff --git a/boltzrpc/boltzrpc.pb.go b/boltzrpc/boltzrpc.pb.go index d344d341..0ad89ab3 100644 --- a/boltzrpc/boltzrpc.pb.go +++ b/boltzrpc/boltzrpc.pb.go @@ -1,15 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 +// protoc-gen-go v1.30.0 // protoc v5.26.0 // source: boltzrpc.proto package boltzrpc import ( + empty "github.com/golang/protobuf/ptypes/empty" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" reflect "reflect" sync "sync" ) @@ -273,6 +273,58 @@ func (IncludeSwaps) EnumDescriptor() ([]byte, []int) { return file_boltzrpc_proto_rawDescGZIP(), []int{4} } +type TransactionType int32 + +const ( + TransactionType_UNKNOWN TransactionType = 0 + TransactionType_LOCKUP TransactionType = 1 + TransactionType_REFUND TransactionType = 2 + TransactionType_CLAIM TransactionType = 3 +) + +// Enum value maps for TransactionType. +var ( + TransactionType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "LOCKUP", + 2: "REFUND", + 3: "CLAIM", + } + TransactionType_value = map[string]int32{ + "UNKNOWN": 0, + "LOCKUP": 1, + "REFUND": 2, + "CLAIM": 3, + } +) + +func (x TransactionType) Enum() *TransactionType { + p := new(TransactionType) + *p = x + return p +} + +func (x TransactionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TransactionType) Descriptor() protoreflect.EnumDescriptor { + return file_boltzrpc_proto_enumTypes[5].Descriptor() +} + +func (TransactionType) Type() protoreflect.EnumType { + return &file_boltzrpc_proto_enumTypes[5] +} + +func (x TransactionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TransactionType.Descriptor instead. +func (TransactionType) EnumDescriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{5} +} + type CreateTenantRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4763,6 +4815,380 @@ func (x *GetWalletRequest) GetId() uint64 { return 0 } +type ListWalletTransactionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ExcludeSwapRelated *bool `protobuf:"varint,2,opt,name=exclude_swap_related,json=excludeSwapRelated,proto3,oneof" json:"exclude_swap_related,omitempty"` +} + +func (x *ListWalletTransactionsRequest) Reset() { + *x = ListWalletTransactionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListWalletTransactionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListWalletTransactionsRequest) ProtoMessage() {} + +func (x *ListWalletTransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListWalletTransactionsRequest.ProtoReflect.Descriptor instead. +func (*ListWalletTransactionsRequest) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{60} +} + +func (x *ListWalletTransactionsRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ListWalletTransactionsRequest) GetExcludeSwapRelated() bool { + if x != nil && x.ExcludeSwapRelated != nil { + return *x.ExcludeSwapRelated + } + return false +} + +type WalletTransaction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // sum of all outputs which are controlled by the wallet + NetBalanceChange int64 `protobuf:"varint,2,opt,name=net_balance_change,json=netBalanceChange,proto3" json:"net_balance_change,omitempty"` + Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Outputs []*TransactionOutput `protobuf:"bytes,4,rep,name=outputs,proto3" json:"outputs,omitempty"` + BlockHeight uint32 `protobuf:"varint,6,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + // swaps which are related to this transaction + Swaps []*TransactionSwap `protobuf:"bytes,7,rep,name=swaps,proto3" json:"swaps,omitempty"` +} + +func (x *WalletTransaction) Reset() { + *x = WalletTransaction{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WalletTransaction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WalletTransaction) ProtoMessage() {} + +func (x *WalletTransaction) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WalletTransaction.ProtoReflect.Descriptor instead. +func (*WalletTransaction) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{61} +} + +func (x *WalletTransaction) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *WalletTransaction) GetNetBalanceChange() int64 { + if x != nil { + return x.NetBalanceChange + } + return 0 +} + +func (x *WalletTransaction) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *WalletTransaction) GetOutputs() []*TransactionOutput { + if x != nil { + return x.Outputs + } + return nil +} + +func (x *WalletTransaction) GetBlockHeight() uint32 { + if x != nil { + return x.BlockHeight + } + return 0 +} + +func (x *WalletTransaction) GetSwaps() []*TransactionSwap { + if x != nil { + return x.Swaps + } + return nil +} + +type TransactionSwap struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Type TransactionType `protobuf:"varint,2,opt,name=type,proto3,enum=boltzrpc.TransactionType" json:"type,omitempty"` +} + +func (x *TransactionSwap) Reset() { + *x = TransactionSwap{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransactionSwap) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionSwap) ProtoMessage() {} + +func (x *TransactionSwap) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionSwap.ProtoReflect.Descriptor instead. +func (*TransactionSwap) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{62} +} + +func (x *TransactionSwap) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TransactionSwap) GetType() TransactionType { + if x != nil { + return x.Type + } + return TransactionType_UNKNOWN +} + +type TransactionInput struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxId string `protobuf:"bytes,1,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"` + Index uint32 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` + // Denotes if the outpoint is controlled by the internal wallet. + IsOurOutput bool `protobuf:"varint,3,opt,name=is_our_output,json=isOurOutput,proto3" json:"is_our_output,omitempty"` +} + +func (x *TransactionInput) Reset() { + *x = TransactionInput{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransactionInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionInput) ProtoMessage() {} + +func (x *TransactionInput) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionInput.ProtoReflect.Descriptor instead. +func (*TransactionInput) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{63} +} + +func (x *TransactionInput) GetTxId() string { + if x != nil { + return x.TxId + } + return "" +} + +func (x *TransactionInput) GetIndex() uint32 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *TransactionInput) GetIsOurOutput() bool { + if x != nil { + return x.IsOurOutput + } + return false +} + +type TransactionOutput struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Amount uint64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + // wether the address is controlled by the wallet + IsOurAddress bool `protobuf:"varint,3,opt,name=is_our_address,json=isOurAddress,proto3" json:"is_our_address,omitempty"` +} + +func (x *TransactionOutput) Reset() { + *x = TransactionOutput{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransactionOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionOutput) ProtoMessage() {} + +func (x *TransactionOutput) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[64] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionOutput.ProtoReflect.Descriptor instead. +func (*TransactionOutput) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{64} +} + +func (x *TransactionOutput) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *TransactionOutput) GetAmount() uint64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *TransactionOutput) GetIsOurAddress() bool { + if x != nil { + return x.IsOurAddress + } + return false +} + +type ListWalletTransactionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Transactions []*WalletTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` +} + +func (x *ListWalletTransactionsResponse) Reset() { + *x = ListWalletTransactionsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListWalletTransactionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListWalletTransactionsResponse) ProtoMessage() {} + +func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[65] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListWalletTransactionsResponse.ProtoReflect.Descriptor instead. +func (*ListWalletTransactionsResponse) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{65} +} + +func (x *ListWalletTransactionsResponse) GetTransactions() []*WalletTransaction { + if x != nil { + return x.Transactions + } + return nil +} + type GetWalletCredentialsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4775,7 +5201,7 @@ type GetWalletCredentialsRequest struct { func (x *GetWalletCredentialsRequest) Reset() { *x = GetWalletCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[60] + mi := &file_boltzrpc_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4788,7 +5214,7 @@ func (x *GetWalletCredentialsRequest) String() string { func (*GetWalletCredentialsRequest) ProtoMessage() {} func (x *GetWalletCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[60] + mi := &file_boltzrpc_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4801,7 +5227,7 @@ func (x *GetWalletCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletCredentialsRequest.ProtoReflect.Descriptor instead. func (*GetWalletCredentialsRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{60} + return file_boltzrpc_proto_rawDescGZIP(), []int{66} } func (x *GetWalletCredentialsRequest) GetId() uint64 { @@ -4829,7 +5255,7 @@ type RemoveWalletRequest struct { func (x *RemoveWalletRequest) Reset() { *x = RemoveWalletRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[61] + mi := &file_boltzrpc_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4842,7 +5268,7 @@ func (x *RemoveWalletRequest) String() string { func (*RemoveWalletRequest) ProtoMessage() {} func (x *RemoveWalletRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[61] + mi := &file_boltzrpc_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4855,7 +5281,7 @@ func (x *RemoveWalletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveWalletRequest.ProtoReflect.Descriptor instead. func (*RemoveWalletRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{61} + return file_boltzrpc_proto_rawDescGZIP(), []int{67} } func (x *RemoveWalletRequest) GetId() uint64 { @@ -4880,7 +5306,7 @@ type WalletSendRequest struct { func (x *WalletSendRequest) Reset() { *x = WalletSendRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[62] + mi := &file_boltzrpc_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4893,7 +5319,7 @@ func (x *WalletSendRequest) String() string { func (*WalletSendRequest) ProtoMessage() {} func (x *WalletSendRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[62] + mi := &file_boltzrpc_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4906,7 +5332,7 @@ func (x *WalletSendRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletSendRequest.ProtoReflect.Descriptor instead. func (*WalletSendRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{62} + return file_boltzrpc_proto_rawDescGZIP(), []int{68} } func (x *WalletSendRequest) GetId() uint64 { @@ -4948,7 +5374,7 @@ type WalletSendResponse struct { func (x *WalletSendResponse) Reset() { *x = WalletSendResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[63] + mi := &file_boltzrpc_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4961,7 +5387,7 @@ func (x *WalletSendResponse) String() string { func (*WalletSendResponse) ProtoMessage() {} func (x *WalletSendResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[63] + mi := &file_boltzrpc_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4974,7 +5400,7 @@ func (x *WalletSendResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletSendResponse.ProtoReflect.Descriptor instead. func (*WalletSendResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{63} + return file_boltzrpc_proto_rawDescGZIP(), []int{69} } func (x *WalletSendResponse) GetTxId() string { @@ -4995,7 +5421,7 @@ type WalletReceiveRequest struct { func (x *WalletReceiveRequest) Reset() { *x = WalletReceiveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[64] + mi := &file_boltzrpc_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5008,7 +5434,7 @@ func (x *WalletReceiveRequest) String() string { func (*WalletReceiveRequest) ProtoMessage() {} func (x *WalletReceiveRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[64] + mi := &file_boltzrpc_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5021,7 +5447,7 @@ func (x *WalletReceiveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletReceiveRequest.ProtoReflect.Descriptor instead. func (*WalletReceiveRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{64} + return file_boltzrpc_proto_rawDescGZIP(), []int{70} } func (x *WalletReceiveRequest) GetId() uint64 { @@ -5042,7 +5468,7 @@ type WalletReceiveResponse struct { func (x *WalletReceiveResponse) Reset() { *x = WalletReceiveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[65] + mi := &file_boltzrpc_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5055,7 +5481,7 @@ func (x *WalletReceiveResponse) String() string { func (*WalletReceiveResponse) ProtoMessage() {} func (x *WalletReceiveResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[65] + mi := &file_boltzrpc_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5068,7 +5494,7 @@ func (x *WalletReceiveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletReceiveResponse.ProtoReflect.Descriptor instead. func (*WalletReceiveResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{65} + return file_boltzrpc_proto_rawDescGZIP(), []int{71} } func (x *WalletReceiveResponse) GetAddress() string { @@ -5094,7 +5520,7 @@ type Wallet struct { func (x *Wallet) Reset() { *x = Wallet{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[66] + mi := &file_boltzrpc_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5107,7 +5533,7 @@ func (x *Wallet) String() string { func (*Wallet) ProtoMessage() {} func (x *Wallet) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[66] + mi := &file_boltzrpc_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5120,7 +5546,7 @@ func (x *Wallet) ProtoReflect() protoreflect.Message { // Deprecated: Use Wallet.ProtoReflect.Descriptor instead. func (*Wallet) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{66} + return file_boltzrpc_proto_rawDescGZIP(), []int{72} } func (x *Wallet) GetId() uint64 { @@ -5176,7 +5602,7 @@ type Wallets struct { func (x *Wallets) Reset() { *x = Wallets{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[67] + mi := &file_boltzrpc_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5189,7 +5615,7 @@ func (x *Wallets) String() string { func (*Wallets) ProtoMessage() {} func (x *Wallets) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[67] + mi := &file_boltzrpc_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5202,7 +5628,7 @@ func (x *Wallets) ProtoReflect() protoreflect.Message { // Deprecated: Use Wallets.ProtoReflect.Descriptor instead. func (*Wallets) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{67} + return file_boltzrpc_proto_rawDescGZIP(), []int{73} } func (x *Wallets) GetWallets() []*Wallet { @@ -5225,7 +5651,7 @@ type Balance struct { func (x *Balance) Reset() { *x = Balance{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[68] + mi := &file_boltzrpc_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5238,7 +5664,7 @@ func (x *Balance) String() string { func (*Balance) ProtoMessage() {} func (x *Balance) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[68] + mi := &file_boltzrpc_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5251,7 +5677,7 @@ func (x *Balance) ProtoReflect() protoreflect.Message { // Deprecated: Use Balance.ProtoReflect.Descriptor instead. func (*Balance) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{68} + return file_boltzrpc_proto_rawDescGZIP(), []int{74} } func (x *Balance) GetTotal() uint64 { @@ -5288,7 +5714,7 @@ type Subaccount struct { func (x *Subaccount) Reset() { *x = Subaccount{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[69] + mi := &file_boltzrpc_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5301,7 +5727,7 @@ func (x *Subaccount) String() string { func (*Subaccount) ProtoMessage() {} func (x *Subaccount) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[69] + mi := &file_boltzrpc_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5314,7 +5740,7 @@ func (x *Subaccount) ProtoReflect() protoreflect.Message { // Deprecated: Use Subaccount.ProtoReflect.Descriptor instead. func (*Subaccount) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{69} + return file_boltzrpc_proto_rawDescGZIP(), []int{75} } func (x *Subaccount) GetBalance() *Balance { @@ -5347,7 +5773,7 @@ type RemoveWalletResponse struct { func (x *RemoveWalletResponse) Reset() { *x = RemoveWalletResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[70] + mi := &file_boltzrpc_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5360,7 +5786,7 @@ func (x *RemoveWalletResponse) String() string { func (*RemoveWalletResponse) ProtoMessage() {} func (x *RemoveWalletResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[70] + mi := &file_boltzrpc_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5373,7 +5799,7 @@ func (x *RemoveWalletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveWalletResponse.ProtoReflect.Descriptor instead. func (*RemoveWalletResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{70} + return file_boltzrpc_proto_rawDescGZIP(), []int{76} } type UnlockRequest struct { @@ -5387,7 +5813,7 @@ type UnlockRequest struct { func (x *UnlockRequest) Reset() { *x = UnlockRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[71] + mi := &file_boltzrpc_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5400,7 +5826,7 @@ func (x *UnlockRequest) String() string { func (*UnlockRequest) ProtoMessage() {} func (x *UnlockRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[71] + mi := &file_boltzrpc_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5413,7 +5839,7 @@ func (x *UnlockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlockRequest.ProtoReflect.Descriptor instead. func (*UnlockRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{71} + return file_boltzrpc_proto_rawDescGZIP(), []int{77} } func (x *UnlockRequest) GetPassword() string { @@ -5434,7 +5860,7 @@ type VerifyWalletPasswordRequest struct { func (x *VerifyWalletPasswordRequest) Reset() { *x = VerifyWalletPasswordRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[72] + mi := &file_boltzrpc_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5447,7 +5873,7 @@ func (x *VerifyWalletPasswordRequest) String() string { func (*VerifyWalletPasswordRequest) ProtoMessage() {} func (x *VerifyWalletPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[72] + mi := &file_boltzrpc_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5460,7 +5886,7 @@ func (x *VerifyWalletPasswordRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyWalletPasswordRequest.ProtoReflect.Descriptor instead. func (*VerifyWalletPasswordRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{72} + return file_boltzrpc_proto_rawDescGZIP(), []int{78} } func (x *VerifyWalletPasswordRequest) GetPassword() string { @@ -5481,7 +5907,7 @@ type VerifyWalletPasswordResponse struct { func (x *VerifyWalletPasswordResponse) Reset() { *x = VerifyWalletPasswordResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[73] + mi := &file_boltzrpc_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5494,7 +5920,7 @@ func (x *VerifyWalletPasswordResponse) String() string { func (*VerifyWalletPasswordResponse) ProtoMessage() {} func (x *VerifyWalletPasswordResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[73] + mi := &file_boltzrpc_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5507,7 +5933,7 @@ func (x *VerifyWalletPasswordResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyWalletPasswordResponse.ProtoReflect.Descriptor instead. func (*VerifyWalletPasswordResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{73} + return file_boltzrpc_proto_rawDescGZIP(), []int{79} } func (x *VerifyWalletPasswordResponse) GetCorrect() bool { @@ -5529,7 +5955,7 @@ type ChangeWalletPasswordRequest struct { func (x *ChangeWalletPasswordRequest) Reset() { *x = ChangeWalletPasswordRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[74] + mi := &file_boltzrpc_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5542,7 +5968,7 @@ func (x *ChangeWalletPasswordRequest) String() string { func (*ChangeWalletPasswordRequest) ProtoMessage() {} func (x *ChangeWalletPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[74] + mi := &file_boltzrpc_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5555,7 +5981,7 @@ func (x *ChangeWalletPasswordRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeWalletPasswordRequest.ProtoReflect.Descriptor instead. func (*ChangeWalletPasswordRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{74} + return file_boltzrpc_proto_rawDescGZIP(), []int{80} } func (x *ChangeWalletPasswordRequest) GetOld() string { @@ -6290,251 +6716,310 @@ var file_boltzrpc_proto_rawDesc = []byte{ 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x22, - 0x5b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, - 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x25, 0x0a, 0x13, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x90, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, - 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0d, 0x73, - 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, 0x79, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x61, 0x74, 0x50, 0x65, 0x72, 0x56, 0x62, 0x79, 0x74, - 0x65, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x76, 0x62, 0x79, 0x74, 0x65, 0x22, 0x29, 0x0a, 0x12, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, 0x05, - 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x64, 0x22, 0x26, 0x0a, 0x14, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc2, 0x01, 0x0a, - 0x06, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, - 0x64, 0x22, 0x35, 0x0a, 0x07, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, - 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5f, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x0a, 0x53, 0x75, 0x62, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x55, 0x6e, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x39, 0x0a, 0x1b, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x22, 0x41, 0x0a, 0x1b, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6f, - 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x2a, - 0x25, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, - 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x62, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x46, 0x55, 0x4c, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, - 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x46, 0x55, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x41, - 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x1d, 0x0a, 0x08, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x54, 0x43, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x4c, 0x42, 0x54, 0x43, 0x10, 0x01, 0x2a, 0x31, 0x0a, 0x08, 0x53, 0x77, 0x61, - 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x4d, 0x41, 0x52, 0x49, - 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, - 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x0c, - 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x07, 0x0a, 0x03, - 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x10, - 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x32, 0x9f, 0x13, 0x0a, 0x05, - 0x42, 0x6f, 0x6c, 0x74, 0x7a, 0x12, 0x3e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x18, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, - 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x62, - 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x3e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x44, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x1a, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x77, 0x61, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x52, 0x65, 0x66, - 0x75, 0x6e, 0x64, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, - 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, - 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, - 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x07, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x18, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, - 0x01, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, - 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, - 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, - 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1e, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5c, - 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, - 0x77, 0x61, 0x70, 0x12, 0x22, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, - 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0f, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x12, - 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0c, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x49, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x45, 0x0a, 0x0d, 0x53, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, - 0x5a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x7f, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x35, 0x0a, 0x14, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x77, 0x61, 0x70, + 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, + 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x22, 0xfa, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x5f, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x35, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2f, 0x0a, 0x05, + 0x73, 0x77, 0x61, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x22, 0x50, 0x0a, + 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x61, 0x70, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x61, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, + 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x6f, 0x75, 0x72, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x4f, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x22, 0x6b, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, + 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x69, 0x73, 0x4f, 0x75, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x61, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x5b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1f, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x88, + 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, + 0x25, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x90, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, + 0x0a, 0x0d, 0x73, 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, 0x79, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x61, 0x74, 0x50, 0x65, 0x72, 0x56, + 0x62, 0x79, 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x61, 0x74, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, 0x79, 0x74, 0x65, 0x22, 0x29, 0x0a, 0x12, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x78, 0x49, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x15, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0xc2, 0x01, 0x0a, 0x06, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, + 0x0a, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x12, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x52, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x07, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, + 0x2a, 0x0a, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5f, 0x0a, 0x07, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x0a, + 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, + 0x0d, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x39, 0x0a, 0x1b, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x22, + 0x41, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x6c, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, + 0x65, 0x77, 0x2a, 0x25, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x62, 0x0a, 0x09, 0x53, 0x77, 0x61, + 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, + 0x47, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x46, 0x55, + 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, + 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x46, 0x55, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, + 0x0a, 0x09, 0x41, 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x1d, 0x0a, + 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x54, 0x43, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x42, 0x54, 0x43, 0x10, 0x01, 0x2a, 0x31, 0x0a, 0x08, + 0x53, 0x77, 0x61, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x4d, + 0x41, 0x52, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, + 0x53, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, + 0x2d, 0x0a, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, 0x55, + 0x41, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x2a, 0x41, + 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x4c, 0x4f, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, + 0x46, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, + 0x03, 0x32, 0x8c, 0x14, 0x0a, 0x05, 0x42, 0x6f, 0x6c, 0x74, 0x7a, 0x12, 0x3e, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, + 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, + 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x77, + 0x61, 0x70, 0x73, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, + 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, + 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, + 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x43, 0x0a, 0x07, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x18, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x52, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x03, 0x88, 0x02, 0x01, 0x12, 0x5c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, 0x22, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, + 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x53, 0x77, 0x61, 0x70, 0x12, 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x4d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, + 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x0c, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, + 0x12, 0x45, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x6b, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x27, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4d, + 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1d, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, + 0x0a, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, - 0x06, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x55, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, - 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, - 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4d, - 0x0a, 0x0c, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x12, 0x1d, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, - 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, - 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, - 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x30, 0x5a, - 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x6f, 0x6c, 0x74, - 0x7a, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2f, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x2d, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x39, 0x0a, 0x06, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x17, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x14, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x55, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x0c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x12, 0x4d, 0x0a, 0x0c, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, + 0x6e, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6b, + 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6b, 0x65, + 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, + 0x6f, 0x6c, 0x74, 0x7a, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2f, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6549,227 +7034,240 @@ func file_boltzrpc_proto_rawDescGZIP() []byte { return file_boltzrpc_proto_rawDescData } -var file_boltzrpc_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_boltzrpc_proto_msgTypes = make([]protoimpl.MessageInfo, 75) +var file_boltzrpc_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_boltzrpc_proto_msgTypes = make([]protoimpl.MessageInfo, 81) var file_boltzrpc_proto_goTypes = []interface{}{ - (MacaroonAction)(0), // 0: boltzrpc.MacaroonAction - (SwapState)(0), // 1: boltzrpc.SwapState - (Currency)(0), // 2: boltzrpc.Currency - (SwapType)(0), // 3: boltzrpc.SwapType - (IncludeSwaps)(0), // 4: boltzrpc.IncludeSwaps - (*CreateTenantRequest)(nil), // 5: boltzrpc.CreateTenantRequest - (*ListTenantsRequest)(nil), // 6: boltzrpc.ListTenantsRequest - (*ListTenantsResponse)(nil), // 7: boltzrpc.ListTenantsResponse - (*GetTenantRequest)(nil), // 8: boltzrpc.GetTenantRequest - (*Tenant)(nil), // 9: boltzrpc.Tenant - (*MacaroonPermissions)(nil), // 10: boltzrpc.MacaroonPermissions - (*BakeMacaroonRequest)(nil), // 11: boltzrpc.BakeMacaroonRequest - (*BakeMacaroonResponse)(nil), // 12: boltzrpc.BakeMacaroonResponse - (*Pair)(nil), // 13: boltzrpc.Pair - (*SwapInfo)(nil), // 14: boltzrpc.SwapInfo - (*GetPairInfoRequest)(nil), // 15: boltzrpc.GetPairInfoRequest - (*PairInfo)(nil), // 16: boltzrpc.PairInfo - (*ChannelCreationInfo)(nil), // 17: boltzrpc.ChannelCreationInfo - (*CombinedChannelSwapInfo)(nil), // 18: boltzrpc.CombinedChannelSwapInfo - (*ReverseSwapInfo)(nil), // 19: boltzrpc.ReverseSwapInfo - (*BlockHeights)(nil), // 20: boltzrpc.BlockHeights - (*GetInfoRequest)(nil), // 21: boltzrpc.GetInfoRequest - (*GetInfoResponse)(nil), // 22: boltzrpc.GetInfoResponse - (*Limits)(nil), // 23: boltzrpc.Limits - (*SwapFees)(nil), // 24: boltzrpc.SwapFees - (*GetPairsResponse)(nil), // 25: boltzrpc.GetPairsResponse - (*MinerFees)(nil), // 26: boltzrpc.MinerFees - (*Fees)(nil), // 27: boltzrpc.Fees - (*GetServiceInfoRequest)(nil), // 28: boltzrpc.GetServiceInfoRequest - (*GetServiceInfoResponse)(nil), // 29: boltzrpc.GetServiceInfoResponse - (*AnySwapInfo)(nil), // 30: boltzrpc.AnySwapInfo - (*ListSwapsRequest)(nil), // 31: boltzrpc.ListSwapsRequest - (*ListSwapsResponse)(nil), // 32: boltzrpc.ListSwapsResponse - (*GetStatsRequest)(nil), // 33: boltzrpc.GetStatsRequest - (*GetStatsResponse)(nil), // 34: boltzrpc.GetStatsResponse - (*RefundSwapRequest)(nil), // 35: boltzrpc.RefundSwapRequest - (*ClaimSwapsRequest)(nil), // 36: boltzrpc.ClaimSwapsRequest - (*ClaimSwapsResponse)(nil), // 37: boltzrpc.ClaimSwapsResponse - (*GetSwapInfoRequest)(nil), // 38: boltzrpc.GetSwapInfoRequest - (*GetSwapInfoResponse)(nil), // 39: boltzrpc.GetSwapInfoResponse - (*DepositRequest)(nil), // 40: boltzrpc.DepositRequest - (*DepositResponse)(nil), // 41: boltzrpc.DepositResponse - (*CreateSwapRequest)(nil), // 42: boltzrpc.CreateSwapRequest - (*CreateSwapResponse)(nil), // 43: boltzrpc.CreateSwapResponse - (*CreateChannelRequest)(nil), // 44: boltzrpc.CreateChannelRequest - (*CreateReverseSwapRequest)(nil), // 45: boltzrpc.CreateReverseSwapRequest - (*CreateReverseSwapResponse)(nil), // 46: boltzrpc.CreateReverseSwapResponse - (*CreateChainSwapRequest)(nil), // 47: boltzrpc.CreateChainSwapRequest - (*ChainSwapInfo)(nil), // 48: boltzrpc.ChainSwapInfo - (*ChainSwapData)(nil), // 49: boltzrpc.ChainSwapData - (*ChannelId)(nil), // 50: boltzrpc.ChannelId - (*LightningChannel)(nil), // 51: boltzrpc.LightningChannel - (*SwapStats)(nil), // 52: boltzrpc.SwapStats - (*Budget)(nil), // 53: boltzrpc.Budget - (*WalletCredentials)(nil), // 54: boltzrpc.WalletCredentials - (*WalletParams)(nil), // 55: boltzrpc.WalletParams - (*ImportWalletRequest)(nil), // 56: boltzrpc.ImportWalletRequest - (*CreateWalletRequest)(nil), // 57: boltzrpc.CreateWalletRequest - (*CreateWalletResponse)(nil), // 58: boltzrpc.CreateWalletResponse - (*SetSubaccountRequest)(nil), // 59: boltzrpc.SetSubaccountRequest - (*GetSubaccountsRequest)(nil), // 60: boltzrpc.GetSubaccountsRequest - (*GetSubaccountsResponse)(nil), // 61: boltzrpc.GetSubaccountsResponse - (*ImportWalletResponse)(nil), // 62: boltzrpc.ImportWalletResponse - (*GetWalletsRequest)(nil), // 63: boltzrpc.GetWalletsRequest - (*GetWalletRequest)(nil), // 64: boltzrpc.GetWalletRequest - (*GetWalletCredentialsRequest)(nil), // 65: boltzrpc.GetWalletCredentialsRequest - (*RemoveWalletRequest)(nil), // 66: boltzrpc.RemoveWalletRequest - (*WalletSendRequest)(nil), // 67: boltzrpc.WalletSendRequest - (*WalletSendResponse)(nil), // 68: boltzrpc.WalletSendResponse - (*WalletReceiveRequest)(nil), // 69: boltzrpc.WalletReceiveRequest - (*WalletReceiveResponse)(nil), // 70: boltzrpc.WalletReceiveResponse - (*Wallet)(nil), // 71: boltzrpc.Wallet - (*Wallets)(nil), // 72: boltzrpc.Wallets - (*Balance)(nil), // 73: boltzrpc.Balance - (*Subaccount)(nil), // 74: boltzrpc.Subaccount - (*RemoveWalletResponse)(nil), // 75: boltzrpc.RemoveWalletResponse - (*UnlockRequest)(nil), // 76: boltzrpc.UnlockRequest - (*VerifyWalletPasswordRequest)(nil), // 77: boltzrpc.VerifyWalletPasswordRequest - (*VerifyWalletPasswordResponse)(nil), // 78: boltzrpc.VerifyWalletPasswordResponse - (*ChangeWalletPasswordRequest)(nil), // 79: boltzrpc.ChangeWalletPasswordRequest - (*emptypb.Empty)(nil), // 80: google.protobuf.Empty + (MacaroonAction)(0), // 0: boltzrpc.MacaroonAction + (SwapState)(0), // 1: boltzrpc.SwapState + (Currency)(0), // 2: boltzrpc.Currency + (SwapType)(0), // 3: boltzrpc.SwapType + (IncludeSwaps)(0), // 4: boltzrpc.IncludeSwaps + (TransactionType)(0), // 5: boltzrpc.TransactionType + (*CreateTenantRequest)(nil), // 6: boltzrpc.CreateTenantRequest + (*ListTenantsRequest)(nil), // 7: boltzrpc.ListTenantsRequest + (*ListTenantsResponse)(nil), // 8: boltzrpc.ListTenantsResponse + (*GetTenantRequest)(nil), // 9: boltzrpc.GetTenantRequest + (*Tenant)(nil), // 10: boltzrpc.Tenant + (*MacaroonPermissions)(nil), // 11: boltzrpc.MacaroonPermissions + (*BakeMacaroonRequest)(nil), // 12: boltzrpc.BakeMacaroonRequest + (*BakeMacaroonResponse)(nil), // 13: boltzrpc.BakeMacaroonResponse + (*Pair)(nil), // 14: boltzrpc.Pair + (*SwapInfo)(nil), // 15: boltzrpc.SwapInfo + (*GetPairInfoRequest)(nil), // 16: boltzrpc.GetPairInfoRequest + (*PairInfo)(nil), // 17: boltzrpc.PairInfo + (*ChannelCreationInfo)(nil), // 18: boltzrpc.ChannelCreationInfo + (*CombinedChannelSwapInfo)(nil), // 19: boltzrpc.CombinedChannelSwapInfo + (*ReverseSwapInfo)(nil), // 20: boltzrpc.ReverseSwapInfo + (*BlockHeights)(nil), // 21: boltzrpc.BlockHeights + (*GetInfoRequest)(nil), // 22: boltzrpc.GetInfoRequest + (*GetInfoResponse)(nil), // 23: boltzrpc.GetInfoResponse + (*Limits)(nil), // 24: boltzrpc.Limits + (*SwapFees)(nil), // 25: boltzrpc.SwapFees + (*GetPairsResponse)(nil), // 26: boltzrpc.GetPairsResponse + (*MinerFees)(nil), // 27: boltzrpc.MinerFees + (*Fees)(nil), // 28: boltzrpc.Fees + (*GetServiceInfoRequest)(nil), // 29: boltzrpc.GetServiceInfoRequest + (*GetServiceInfoResponse)(nil), // 30: boltzrpc.GetServiceInfoResponse + (*AnySwapInfo)(nil), // 31: boltzrpc.AnySwapInfo + (*ListSwapsRequest)(nil), // 32: boltzrpc.ListSwapsRequest + (*ListSwapsResponse)(nil), // 33: boltzrpc.ListSwapsResponse + (*GetStatsRequest)(nil), // 34: boltzrpc.GetStatsRequest + (*GetStatsResponse)(nil), // 35: boltzrpc.GetStatsResponse + (*RefundSwapRequest)(nil), // 36: boltzrpc.RefundSwapRequest + (*ClaimSwapsRequest)(nil), // 37: boltzrpc.ClaimSwapsRequest + (*ClaimSwapsResponse)(nil), // 38: boltzrpc.ClaimSwapsResponse + (*GetSwapInfoRequest)(nil), // 39: boltzrpc.GetSwapInfoRequest + (*GetSwapInfoResponse)(nil), // 40: boltzrpc.GetSwapInfoResponse + (*DepositRequest)(nil), // 41: boltzrpc.DepositRequest + (*DepositResponse)(nil), // 42: boltzrpc.DepositResponse + (*CreateSwapRequest)(nil), // 43: boltzrpc.CreateSwapRequest + (*CreateSwapResponse)(nil), // 44: boltzrpc.CreateSwapResponse + (*CreateChannelRequest)(nil), // 45: boltzrpc.CreateChannelRequest + (*CreateReverseSwapRequest)(nil), // 46: boltzrpc.CreateReverseSwapRequest + (*CreateReverseSwapResponse)(nil), // 47: boltzrpc.CreateReverseSwapResponse + (*CreateChainSwapRequest)(nil), // 48: boltzrpc.CreateChainSwapRequest + (*ChainSwapInfo)(nil), // 49: boltzrpc.ChainSwapInfo + (*ChainSwapData)(nil), // 50: boltzrpc.ChainSwapData + (*ChannelId)(nil), // 51: boltzrpc.ChannelId + (*LightningChannel)(nil), // 52: boltzrpc.LightningChannel + (*SwapStats)(nil), // 53: boltzrpc.SwapStats + (*Budget)(nil), // 54: boltzrpc.Budget + (*WalletCredentials)(nil), // 55: boltzrpc.WalletCredentials + (*WalletParams)(nil), // 56: boltzrpc.WalletParams + (*ImportWalletRequest)(nil), // 57: boltzrpc.ImportWalletRequest + (*CreateWalletRequest)(nil), // 58: boltzrpc.CreateWalletRequest + (*CreateWalletResponse)(nil), // 59: boltzrpc.CreateWalletResponse + (*SetSubaccountRequest)(nil), // 60: boltzrpc.SetSubaccountRequest + (*GetSubaccountsRequest)(nil), // 61: boltzrpc.GetSubaccountsRequest + (*GetSubaccountsResponse)(nil), // 62: boltzrpc.GetSubaccountsResponse + (*ImportWalletResponse)(nil), // 63: boltzrpc.ImportWalletResponse + (*GetWalletsRequest)(nil), // 64: boltzrpc.GetWalletsRequest + (*GetWalletRequest)(nil), // 65: boltzrpc.GetWalletRequest + (*ListWalletTransactionsRequest)(nil), // 66: boltzrpc.ListWalletTransactionsRequest + (*WalletTransaction)(nil), // 67: boltzrpc.WalletTransaction + (*TransactionSwap)(nil), // 68: boltzrpc.TransactionSwap + (*TransactionInput)(nil), // 69: boltzrpc.TransactionInput + (*TransactionOutput)(nil), // 70: boltzrpc.TransactionOutput + (*ListWalletTransactionsResponse)(nil), // 71: boltzrpc.ListWalletTransactionsResponse + (*GetWalletCredentialsRequest)(nil), // 72: boltzrpc.GetWalletCredentialsRequest + (*RemoveWalletRequest)(nil), // 73: boltzrpc.RemoveWalletRequest + (*WalletSendRequest)(nil), // 74: boltzrpc.WalletSendRequest + (*WalletSendResponse)(nil), // 75: boltzrpc.WalletSendResponse + (*WalletReceiveRequest)(nil), // 76: boltzrpc.WalletReceiveRequest + (*WalletReceiveResponse)(nil), // 77: boltzrpc.WalletReceiveResponse + (*Wallet)(nil), // 78: boltzrpc.Wallet + (*Wallets)(nil), // 79: boltzrpc.Wallets + (*Balance)(nil), // 80: boltzrpc.Balance + (*Subaccount)(nil), // 81: boltzrpc.Subaccount + (*RemoveWalletResponse)(nil), // 82: boltzrpc.RemoveWalletResponse + (*UnlockRequest)(nil), // 83: boltzrpc.UnlockRequest + (*VerifyWalletPasswordRequest)(nil), // 84: boltzrpc.VerifyWalletPasswordRequest + (*VerifyWalletPasswordResponse)(nil), // 85: boltzrpc.VerifyWalletPasswordResponse + (*ChangeWalletPasswordRequest)(nil), // 86: boltzrpc.ChangeWalletPasswordRequest + (*empty.Empty)(nil), // 87: google.protobuf.Empty } var file_boltzrpc_proto_depIdxs = []int32{ - 9, // 0: boltzrpc.ListTenantsResponse.tenants:type_name -> boltzrpc.Tenant - 0, // 1: boltzrpc.MacaroonPermissions.action:type_name -> boltzrpc.MacaroonAction - 10, // 2: boltzrpc.BakeMacaroonRequest.permissions:type_name -> boltzrpc.MacaroonPermissions - 2, // 3: boltzrpc.Pair.from:type_name -> boltzrpc.Currency - 2, // 4: boltzrpc.Pair.to:type_name -> boltzrpc.Currency - 13, // 5: boltzrpc.SwapInfo.pair:type_name -> boltzrpc.Pair - 1, // 6: boltzrpc.SwapInfo.state:type_name -> boltzrpc.SwapState - 50, // 7: boltzrpc.SwapInfo.chan_ids:type_name -> boltzrpc.ChannelId - 3, // 8: boltzrpc.GetPairInfoRequest.type:type_name -> boltzrpc.SwapType - 13, // 9: boltzrpc.GetPairInfoRequest.pair:type_name -> boltzrpc.Pair - 13, // 10: boltzrpc.PairInfo.pair:type_name -> boltzrpc.Pair - 24, // 11: boltzrpc.PairInfo.fees:type_name -> boltzrpc.SwapFees - 23, // 12: boltzrpc.PairInfo.limits:type_name -> boltzrpc.Limits - 14, // 13: boltzrpc.CombinedChannelSwapInfo.swap:type_name -> boltzrpc.SwapInfo - 17, // 14: boltzrpc.CombinedChannelSwapInfo.channel_creation:type_name -> boltzrpc.ChannelCreationInfo - 1, // 15: boltzrpc.ReverseSwapInfo.state:type_name -> boltzrpc.SwapState - 13, // 16: boltzrpc.ReverseSwapInfo.pair:type_name -> boltzrpc.Pair - 50, // 17: boltzrpc.ReverseSwapInfo.chan_ids:type_name -> boltzrpc.ChannelId - 20, // 18: boltzrpc.GetInfoResponse.block_heights:type_name -> boltzrpc.BlockHeights - 9, // 19: boltzrpc.GetInfoResponse.tenant:type_name -> boltzrpc.Tenant - 16, // 20: boltzrpc.GetPairsResponse.submarine:type_name -> boltzrpc.PairInfo - 16, // 21: boltzrpc.GetPairsResponse.reverse:type_name -> boltzrpc.PairInfo - 16, // 22: boltzrpc.GetPairsResponse.chain:type_name -> boltzrpc.PairInfo - 26, // 23: boltzrpc.Fees.miner:type_name -> boltzrpc.MinerFees - 27, // 24: boltzrpc.GetServiceInfoResponse.fees:type_name -> boltzrpc.Fees - 23, // 25: boltzrpc.GetServiceInfoResponse.limits:type_name -> boltzrpc.Limits - 3, // 26: boltzrpc.AnySwapInfo.type:type_name -> boltzrpc.SwapType - 13, // 27: boltzrpc.AnySwapInfo.pair:type_name -> boltzrpc.Pair - 1, // 28: boltzrpc.AnySwapInfo.state:type_name -> boltzrpc.SwapState - 2, // 29: boltzrpc.ListSwapsRequest.from:type_name -> boltzrpc.Currency - 2, // 30: boltzrpc.ListSwapsRequest.to:type_name -> boltzrpc.Currency - 1, // 31: boltzrpc.ListSwapsRequest.state:type_name -> boltzrpc.SwapState - 4, // 32: boltzrpc.ListSwapsRequest.include:type_name -> boltzrpc.IncludeSwaps - 14, // 33: boltzrpc.ListSwapsResponse.swaps:type_name -> boltzrpc.SwapInfo - 18, // 34: boltzrpc.ListSwapsResponse.channel_creations:type_name -> boltzrpc.CombinedChannelSwapInfo - 19, // 35: boltzrpc.ListSwapsResponse.reverse_swaps:type_name -> boltzrpc.ReverseSwapInfo - 48, // 36: boltzrpc.ListSwapsResponse.chain_swaps:type_name -> boltzrpc.ChainSwapInfo - 30, // 37: boltzrpc.ListSwapsResponse.all_swaps:type_name -> boltzrpc.AnySwapInfo - 4, // 38: boltzrpc.GetStatsRequest.include:type_name -> boltzrpc.IncludeSwaps - 52, // 39: boltzrpc.GetStatsResponse.stats:type_name -> boltzrpc.SwapStats - 14, // 40: boltzrpc.GetSwapInfoResponse.swap:type_name -> boltzrpc.SwapInfo - 17, // 41: boltzrpc.GetSwapInfoResponse.channel_creation:type_name -> boltzrpc.ChannelCreationInfo - 19, // 42: boltzrpc.GetSwapInfoResponse.reverse_swap:type_name -> boltzrpc.ReverseSwapInfo - 48, // 43: boltzrpc.GetSwapInfoResponse.chain_swap:type_name -> boltzrpc.ChainSwapInfo - 13, // 44: boltzrpc.CreateSwapRequest.pair:type_name -> boltzrpc.Pair - 13, // 45: boltzrpc.CreateReverseSwapRequest.pair:type_name -> boltzrpc.Pair - 13, // 46: boltzrpc.CreateChainSwapRequest.pair:type_name -> boltzrpc.Pair - 13, // 47: boltzrpc.ChainSwapInfo.pair:type_name -> boltzrpc.Pair - 1, // 48: boltzrpc.ChainSwapInfo.state:type_name -> boltzrpc.SwapState - 49, // 49: boltzrpc.ChainSwapInfo.from_data:type_name -> boltzrpc.ChainSwapData - 49, // 50: boltzrpc.ChainSwapInfo.to_data:type_name -> boltzrpc.ChainSwapData - 2, // 51: boltzrpc.ChainSwapData.currency:type_name -> boltzrpc.Currency - 50, // 52: boltzrpc.LightningChannel.id:type_name -> boltzrpc.ChannelId - 2, // 53: boltzrpc.WalletParams.currency:type_name -> boltzrpc.Currency - 54, // 54: boltzrpc.ImportWalletRequest.credentials:type_name -> boltzrpc.WalletCredentials - 55, // 55: boltzrpc.ImportWalletRequest.params:type_name -> boltzrpc.WalletParams - 55, // 56: boltzrpc.CreateWalletRequest.params:type_name -> boltzrpc.WalletParams - 71, // 57: boltzrpc.CreateWalletResponse.wallet:type_name -> boltzrpc.Wallet - 74, // 58: boltzrpc.GetSubaccountsResponse.subaccounts:type_name -> boltzrpc.Subaccount - 2, // 59: boltzrpc.GetWalletsRequest.currency:type_name -> boltzrpc.Currency - 2, // 60: boltzrpc.Wallet.currency:type_name -> boltzrpc.Currency - 73, // 61: boltzrpc.Wallet.balance:type_name -> boltzrpc.Balance - 71, // 62: boltzrpc.Wallets.wallets:type_name -> boltzrpc.Wallet - 73, // 63: boltzrpc.Subaccount.balance:type_name -> boltzrpc.Balance - 21, // 64: boltzrpc.Boltz.GetInfo:input_type -> boltzrpc.GetInfoRequest - 28, // 65: boltzrpc.Boltz.GetServiceInfo:input_type -> boltzrpc.GetServiceInfoRequest - 15, // 66: boltzrpc.Boltz.GetPairInfo:input_type -> boltzrpc.GetPairInfoRequest - 80, // 67: boltzrpc.Boltz.GetPairs:input_type -> google.protobuf.Empty - 31, // 68: boltzrpc.Boltz.ListSwaps:input_type -> boltzrpc.ListSwapsRequest - 33, // 69: boltzrpc.Boltz.GetStats:input_type -> boltzrpc.GetStatsRequest - 35, // 70: boltzrpc.Boltz.RefundSwap:input_type -> boltzrpc.RefundSwapRequest - 36, // 71: boltzrpc.Boltz.ClaimSwaps:input_type -> boltzrpc.ClaimSwapsRequest - 38, // 72: boltzrpc.Boltz.GetSwapInfo:input_type -> boltzrpc.GetSwapInfoRequest - 38, // 73: boltzrpc.Boltz.GetSwapInfoStream:input_type -> boltzrpc.GetSwapInfoRequest - 40, // 74: boltzrpc.Boltz.Deposit:input_type -> boltzrpc.DepositRequest - 42, // 75: boltzrpc.Boltz.CreateSwap:input_type -> boltzrpc.CreateSwapRequest - 44, // 76: boltzrpc.Boltz.CreateChannel:input_type -> boltzrpc.CreateChannelRequest - 45, // 77: boltzrpc.Boltz.CreateReverseSwap:input_type -> boltzrpc.CreateReverseSwapRequest - 47, // 78: boltzrpc.Boltz.CreateChainSwap:input_type -> boltzrpc.CreateChainSwapRequest - 57, // 79: boltzrpc.Boltz.CreateWallet:input_type -> boltzrpc.CreateWalletRequest - 56, // 80: boltzrpc.Boltz.ImportWallet:input_type -> boltzrpc.ImportWalletRequest - 59, // 81: boltzrpc.Boltz.SetSubaccount:input_type -> boltzrpc.SetSubaccountRequest - 60, // 82: boltzrpc.Boltz.GetSubaccounts:input_type -> boltzrpc.GetSubaccountsRequest - 63, // 83: boltzrpc.Boltz.GetWallets:input_type -> boltzrpc.GetWalletsRequest - 64, // 84: boltzrpc.Boltz.GetWallet:input_type -> boltzrpc.GetWalletRequest - 65, // 85: boltzrpc.Boltz.GetWalletCredentials:input_type -> boltzrpc.GetWalletCredentialsRequest - 66, // 86: boltzrpc.Boltz.RemoveWallet:input_type -> boltzrpc.RemoveWalletRequest - 67, // 87: boltzrpc.Boltz.WalletSend:input_type -> boltzrpc.WalletSendRequest - 69, // 88: boltzrpc.Boltz.WalletReceive:input_type -> boltzrpc.WalletReceiveRequest - 80, // 89: boltzrpc.Boltz.Stop:input_type -> google.protobuf.Empty - 76, // 90: boltzrpc.Boltz.Unlock:input_type -> boltzrpc.UnlockRequest - 77, // 91: boltzrpc.Boltz.VerifyWalletPassword:input_type -> boltzrpc.VerifyWalletPasswordRequest - 79, // 92: boltzrpc.Boltz.ChangeWalletPassword:input_type -> boltzrpc.ChangeWalletPasswordRequest - 5, // 93: boltzrpc.Boltz.CreateTenant:input_type -> boltzrpc.CreateTenantRequest - 6, // 94: boltzrpc.Boltz.ListTenants:input_type -> boltzrpc.ListTenantsRequest - 8, // 95: boltzrpc.Boltz.GetTenant:input_type -> boltzrpc.GetTenantRequest - 11, // 96: boltzrpc.Boltz.BakeMacaroon:input_type -> boltzrpc.BakeMacaroonRequest - 22, // 97: boltzrpc.Boltz.GetInfo:output_type -> boltzrpc.GetInfoResponse - 29, // 98: boltzrpc.Boltz.GetServiceInfo:output_type -> boltzrpc.GetServiceInfoResponse - 16, // 99: boltzrpc.Boltz.GetPairInfo:output_type -> boltzrpc.PairInfo - 25, // 100: boltzrpc.Boltz.GetPairs:output_type -> boltzrpc.GetPairsResponse - 32, // 101: boltzrpc.Boltz.ListSwaps:output_type -> boltzrpc.ListSwapsResponse - 34, // 102: boltzrpc.Boltz.GetStats:output_type -> boltzrpc.GetStatsResponse - 39, // 103: boltzrpc.Boltz.RefundSwap:output_type -> boltzrpc.GetSwapInfoResponse - 37, // 104: boltzrpc.Boltz.ClaimSwaps:output_type -> boltzrpc.ClaimSwapsResponse - 39, // 105: boltzrpc.Boltz.GetSwapInfo:output_type -> boltzrpc.GetSwapInfoResponse - 39, // 106: boltzrpc.Boltz.GetSwapInfoStream:output_type -> boltzrpc.GetSwapInfoResponse - 41, // 107: boltzrpc.Boltz.Deposit:output_type -> boltzrpc.DepositResponse - 43, // 108: boltzrpc.Boltz.CreateSwap:output_type -> boltzrpc.CreateSwapResponse - 43, // 109: boltzrpc.Boltz.CreateChannel:output_type -> boltzrpc.CreateSwapResponse - 46, // 110: boltzrpc.Boltz.CreateReverseSwap:output_type -> boltzrpc.CreateReverseSwapResponse - 48, // 111: boltzrpc.Boltz.CreateChainSwap:output_type -> boltzrpc.ChainSwapInfo - 58, // 112: boltzrpc.Boltz.CreateWallet:output_type -> boltzrpc.CreateWalletResponse - 71, // 113: boltzrpc.Boltz.ImportWallet:output_type -> boltzrpc.Wallet - 74, // 114: boltzrpc.Boltz.SetSubaccount:output_type -> boltzrpc.Subaccount - 61, // 115: boltzrpc.Boltz.GetSubaccounts:output_type -> boltzrpc.GetSubaccountsResponse - 72, // 116: boltzrpc.Boltz.GetWallets:output_type -> boltzrpc.Wallets - 71, // 117: boltzrpc.Boltz.GetWallet:output_type -> boltzrpc.Wallet - 54, // 118: boltzrpc.Boltz.GetWalletCredentials:output_type -> boltzrpc.WalletCredentials - 75, // 119: boltzrpc.Boltz.RemoveWallet:output_type -> boltzrpc.RemoveWalletResponse - 68, // 120: boltzrpc.Boltz.WalletSend:output_type -> boltzrpc.WalletSendResponse - 70, // 121: boltzrpc.Boltz.WalletReceive:output_type -> boltzrpc.WalletReceiveResponse - 80, // 122: boltzrpc.Boltz.Stop:output_type -> google.protobuf.Empty - 80, // 123: boltzrpc.Boltz.Unlock:output_type -> google.protobuf.Empty - 78, // 124: boltzrpc.Boltz.VerifyWalletPassword:output_type -> boltzrpc.VerifyWalletPasswordResponse - 80, // 125: boltzrpc.Boltz.ChangeWalletPassword:output_type -> google.protobuf.Empty - 9, // 126: boltzrpc.Boltz.CreateTenant:output_type -> boltzrpc.Tenant - 7, // 127: boltzrpc.Boltz.ListTenants:output_type -> boltzrpc.ListTenantsResponse - 9, // 128: boltzrpc.Boltz.GetTenant:output_type -> boltzrpc.Tenant - 12, // 129: boltzrpc.Boltz.BakeMacaroon:output_type -> boltzrpc.BakeMacaroonResponse - 97, // [97:130] is the sub-list for method output_type - 64, // [64:97] is the sub-list for method input_type - 64, // [64:64] is the sub-list for extension type_name - 64, // [64:64] is the sub-list for extension extendee - 0, // [0:64] is the sub-list for field type_name + 10, // 0: boltzrpc.ListTenantsResponse.tenants:type_name -> boltzrpc.Tenant + 0, // 1: boltzrpc.MacaroonPermissions.action:type_name -> boltzrpc.MacaroonAction + 11, // 2: boltzrpc.BakeMacaroonRequest.permissions:type_name -> boltzrpc.MacaroonPermissions + 2, // 3: boltzrpc.Pair.from:type_name -> boltzrpc.Currency + 2, // 4: boltzrpc.Pair.to:type_name -> boltzrpc.Currency + 14, // 5: boltzrpc.SwapInfo.pair:type_name -> boltzrpc.Pair + 1, // 6: boltzrpc.SwapInfo.state:type_name -> boltzrpc.SwapState + 51, // 7: boltzrpc.SwapInfo.chan_ids:type_name -> boltzrpc.ChannelId + 3, // 8: boltzrpc.GetPairInfoRequest.type:type_name -> boltzrpc.SwapType + 14, // 9: boltzrpc.GetPairInfoRequest.pair:type_name -> boltzrpc.Pair + 14, // 10: boltzrpc.PairInfo.pair:type_name -> boltzrpc.Pair + 25, // 11: boltzrpc.PairInfo.fees:type_name -> boltzrpc.SwapFees + 24, // 12: boltzrpc.PairInfo.limits:type_name -> boltzrpc.Limits + 15, // 13: boltzrpc.CombinedChannelSwapInfo.swap:type_name -> boltzrpc.SwapInfo + 18, // 14: boltzrpc.CombinedChannelSwapInfo.channel_creation:type_name -> boltzrpc.ChannelCreationInfo + 1, // 15: boltzrpc.ReverseSwapInfo.state:type_name -> boltzrpc.SwapState + 14, // 16: boltzrpc.ReverseSwapInfo.pair:type_name -> boltzrpc.Pair + 51, // 17: boltzrpc.ReverseSwapInfo.chan_ids:type_name -> boltzrpc.ChannelId + 21, // 18: boltzrpc.GetInfoResponse.block_heights:type_name -> boltzrpc.BlockHeights + 10, // 19: boltzrpc.GetInfoResponse.tenant:type_name -> boltzrpc.Tenant + 17, // 20: boltzrpc.GetPairsResponse.submarine:type_name -> boltzrpc.PairInfo + 17, // 21: boltzrpc.GetPairsResponse.reverse:type_name -> boltzrpc.PairInfo + 17, // 22: boltzrpc.GetPairsResponse.chain:type_name -> boltzrpc.PairInfo + 27, // 23: boltzrpc.Fees.miner:type_name -> boltzrpc.MinerFees + 28, // 24: boltzrpc.GetServiceInfoResponse.fees:type_name -> boltzrpc.Fees + 24, // 25: boltzrpc.GetServiceInfoResponse.limits:type_name -> boltzrpc.Limits + 3, // 26: boltzrpc.AnySwapInfo.type:type_name -> boltzrpc.SwapType + 14, // 27: boltzrpc.AnySwapInfo.pair:type_name -> boltzrpc.Pair + 1, // 28: boltzrpc.AnySwapInfo.state:type_name -> boltzrpc.SwapState + 2, // 29: boltzrpc.ListSwapsRequest.from:type_name -> boltzrpc.Currency + 2, // 30: boltzrpc.ListSwapsRequest.to:type_name -> boltzrpc.Currency + 1, // 31: boltzrpc.ListSwapsRequest.state:type_name -> boltzrpc.SwapState + 4, // 32: boltzrpc.ListSwapsRequest.include:type_name -> boltzrpc.IncludeSwaps + 15, // 33: boltzrpc.ListSwapsResponse.swaps:type_name -> boltzrpc.SwapInfo + 19, // 34: boltzrpc.ListSwapsResponse.channel_creations:type_name -> boltzrpc.CombinedChannelSwapInfo + 20, // 35: boltzrpc.ListSwapsResponse.reverse_swaps:type_name -> boltzrpc.ReverseSwapInfo + 49, // 36: boltzrpc.ListSwapsResponse.chain_swaps:type_name -> boltzrpc.ChainSwapInfo + 31, // 37: boltzrpc.ListSwapsResponse.all_swaps:type_name -> boltzrpc.AnySwapInfo + 4, // 38: boltzrpc.GetStatsRequest.include:type_name -> boltzrpc.IncludeSwaps + 53, // 39: boltzrpc.GetStatsResponse.stats:type_name -> boltzrpc.SwapStats + 15, // 40: boltzrpc.GetSwapInfoResponse.swap:type_name -> boltzrpc.SwapInfo + 18, // 41: boltzrpc.GetSwapInfoResponse.channel_creation:type_name -> boltzrpc.ChannelCreationInfo + 20, // 42: boltzrpc.GetSwapInfoResponse.reverse_swap:type_name -> boltzrpc.ReverseSwapInfo + 49, // 43: boltzrpc.GetSwapInfoResponse.chain_swap:type_name -> boltzrpc.ChainSwapInfo + 14, // 44: boltzrpc.CreateSwapRequest.pair:type_name -> boltzrpc.Pair + 14, // 45: boltzrpc.CreateReverseSwapRequest.pair:type_name -> boltzrpc.Pair + 14, // 46: boltzrpc.CreateChainSwapRequest.pair:type_name -> boltzrpc.Pair + 14, // 47: boltzrpc.ChainSwapInfo.pair:type_name -> boltzrpc.Pair + 1, // 48: boltzrpc.ChainSwapInfo.state:type_name -> boltzrpc.SwapState + 50, // 49: boltzrpc.ChainSwapInfo.from_data:type_name -> boltzrpc.ChainSwapData + 50, // 50: boltzrpc.ChainSwapInfo.to_data:type_name -> boltzrpc.ChainSwapData + 2, // 51: boltzrpc.ChainSwapData.currency:type_name -> boltzrpc.Currency + 51, // 52: boltzrpc.LightningChannel.id:type_name -> boltzrpc.ChannelId + 2, // 53: boltzrpc.WalletParams.currency:type_name -> boltzrpc.Currency + 55, // 54: boltzrpc.ImportWalletRequest.credentials:type_name -> boltzrpc.WalletCredentials + 56, // 55: boltzrpc.ImportWalletRequest.params:type_name -> boltzrpc.WalletParams + 56, // 56: boltzrpc.CreateWalletRequest.params:type_name -> boltzrpc.WalletParams + 78, // 57: boltzrpc.CreateWalletResponse.wallet:type_name -> boltzrpc.Wallet + 81, // 58: boltzrpc.GetSubaccountsResponse.subaccounts:type_name -> boltzrpc.Subaccount + 2, // 59: boltzrpc.GetWalletsRequest.currency:type_name -> boltzrpc.Currency + 70, // 60: boltzrpc.WalletTransaction.outputs:type_name -> boltzrpc.TransactionOutput + 68, // 61: boltzrpc.WalletTransaction.swaps:type_name -> boltzrpc.TransactionSwap + 5, // 62: boltzrpc.TransactionSwap.type:type_name -> boltzrpc.TransactionType + 67, // 63: boltzrpc.ListWalletTransactionsResponse.transactions:type_name -> boltzrpc.WalletTransaction + 2, // 64: boltzrpc.Wallet.currency:type_name -> boltzrpc.Currency + 80, // 65: boltzrpc.Wallet.balance:type_name -> boltzrpc.Balance + 78, // 66: boltzrpc.Wallets.wallets:type_name -> boltzrpc.Wallet + 80, // 67: boltzrpc.Subaccount.balance:type_name -> boltzrpc.Balance + 22, // 68: boltzrpc.Boltz.GetInfo:input_type -> boltzrpc.GetInfoRequest + 29, // 69: boltzrpc.Boltz.GetServiceInfo:input_type -> boltzrpc.GetServiceInfoRequest + 16, // 70: boltzrpc.Boltz.GetPairInfo:input_type -> boltzrpc.GetPairInfoRequest + 87, // 71: boltzrpc.Boltz.GetPairs:input_type -> google.protobuf.Empty + 32, // 72: boltzrpc.Boltz.ListSwaps:input_type -> boltzrpc.ListSwapsRequest + 34, // 73: boltzrpc.Boltz.GetStats:input_type -> boltzrpc.GetStatsRequest + 36, // 74: boltzrpc.Boltz.RefundSwap:input_type -> boltzrpc.RefundSwapRequest + 37, // 75: boltzrpc.Boltz.ClaimSwaps:input_type -> boltzrpc.ClaimSwapsRequest + 39, // 76: boltzrpc.Boltz.GetSwapInfo:input_type -> boltzrpc.GetSwapInfoRequest + 39, // 77: boltzrpc.Boltz.GetSwapInfoStream:input_type -> boltzrpc.GetSwapInfoRequest + 41, // 78: boltzrpc.Boltz.Deposit:input_type -> boltzrpc.DepositRequest + 43, // 79: boltzrpc.Boltz.CreateSwap:input_type -> boltzrpc.CreateSwapRequest + 45, // 80: boltzrpc.Boltz.CreateChannel:input_type -> boltzrpc.CreateChannelRequest + 46, // 81: boltzrpc.Boltz.CreateReverseSwap:input_type -> boltzrpc.CreateReverseSwapRequest + 48, // 82: boltzrpc.Boltz.CreateChainSwap:input_type -> boltzrpc.CreateChainSwapRequest + 58, // 83: boltzrpc.Boltz.CreateWallet:input_type -> boltzrpc.CreateWalletRequest + 57, // 84: boltzrpc.Boltz.ImportWallet:input_type -> boltzrpc.ImportWalletRequest + 60, // 85: boltzrpc.Boltz.SetSubaccount:input_type -> boltzrpc.SetSubaccountRequest + 61, // 86: boltzrpc.Boltz.GetSubaccounts:input_type -> boltzrpc.GetSubaccountsRequest + 64, // 87: boltzrpc.Boltz.GetWallets:input_type -> boltzrpc.GetWalletsRequest + 65, // 88: boltzrpc.Boltz.GetWallet:input_type -> boltzrpc.GetWalletRequest + 66, // 89: boltzrpc.Boltz.ListWalletTransactions:input_type -> boltzrpc.ListWalletTransactionsRequest + 72, // 90: boltzrpc.Boltz.GetWalletCredentials:input_type -> boltzrpc.GetWalletCredentialsRequest + 73, // 91: boltzrpc.Boltz.RemoveWallet:input_type -> boltzrpc.RemoveWalletRequest + 74, // 92: boltzrpc.Boltz.WalletSend:input_type -> boltzrpc.WalletSendRequest + 76, // 93: boltzrpc.Boltz.WalletReceive:input_type -> boltzrpc.WalletReceiveRequest + 87, // 94: boltzrpc.Boltz.Stop:input_type -> google.protobuf.Empty + 83, // 95: boltzrpc.Boltz.Unlock:input_type -> boltzrpc.UnlockRequest + 84, // 96: boltzrpc.Boltz.VerifyWalletPassword:input_type -> boltzrpc.VerifyWalletPasswordRequest + 86, // 97: boltzrpc.Boltz.ChangeWalletPassword:input_type -> boltzrpc.ChangeWalletPasswordRequest + 6, // 98: boltzrpc.Boltz.CreateTenant:input_type -> boltzrpc.CreateTenantRequest + 7, // 99: boltzrpc.Boltz.ListTenants:input_type -> boltzrpc.ListTenantsRequest + 9, // 100: boltzrpc.Boltz.GetTenant:input_type -> boltzrpc.GetTenantRequest + 12, // 101: boltzrpc.Boltz.BakeMacaroon:input_type -> boltzrpc.BakeMacaroonRequest + 23, // 102: boltzrpc.Boltz.GetInfo:output_type -> boltzrpc.GetInfoResponse + 30, // 103: boltzrpc.Boltz.GetServiceInfo:output_type -> boltzrpc.GetServiceInfoResponse + 17, // 104: boltzrpc.Boltz.GetPairInfo:output_type -> boltzrpc.PairInfo + 26, // 105: boltzrpc.Boltz.GetPairs:output_type -> boltzrpc.GetPairsResponse + 33, // 106: boltzrpc.Boltz.ListSwaps:output_type -> boltzrpc.ListSwapsResponse + 35, // 107: boltzrpc.Boltz.GetStats:output_type -> boltzrpc.GetStatsResponse + 40, // 108: boltzrpc.Boltz.RefundSwap:output_type -> boltzrpc.GetSwapInfoResponse + 38, // 109: boltzrpc.Boltz.ClaimSwaps:output_type -> boltzrpc.ClaimSwapsResponse + 40, // 110: boltzrpc.Boltz.GetSwapInfo:output_type -> boltzrpc.GetSwapInfoResponse + 40, // 111: boltzrpc.Boltz.GetSwapInfoStream:output_type -> boltzrpc.GetSwapInfoResponse + 42, // 112: boltzrpc.Boltz.Deposit:output_type -> boltzrpc.DepositResponse + 44, // 113: boltzrpc.Boltz.CreateSwap:output_type -> boltzrpc.CreateSwapResponse + 44, // 114: boltzrpc.Boltz.CreateChannel:output_type -> boltzrpc.CreateSwapResponse + 47, // 115: boltzrpc.Boltz.CreateReverseSwap:output_type -> boltzrpc.CreateReverseSwapResponse + 49, // 116: boltzrpc.Boltz.CreateChainSwap:output_type -> boltzrpc.ChainSwapInfo + 59, // 117: boltzrpc.Boltz.CreateWallet:output_type -> boltzrpc.CreateWalletResponse + 78, // 118: boltzrpc.Boltz.ImportWallet:output_type -> boltzrpc.Wallet + 81, // 119: boltzrpc.Boltz.SetSubaccount:output_type -> boltzrpc.Subaccount + 62, // 120: boltzrpc.Boltz.GetSubaccounts:output_type -> boltzrpc.GetSubaccountsResponse + 79, // 121: boltzrpc.Boltz.GetWallets:output_type -> boltzrpc.Wallets + 78, // 122: boltzrpc.Boltz.GetWallet:output_type -> boltzrpc.Wallet + 71, // 123: boltzrpc.Boltz.ListWalletTransactions:output_type -> boltzrpc.ListWalletTransactionsResponse + 55, // 124: boltzrpc.Boltz.GetWalletCredentials:output_type -> boltzrpc.WalletCredentials + 82, // 125: boltzrpc.Boltz.RemoveWallet:output_type -> boltzrpc.RemoveWalletResponse + 75, // 126: boltzrpc.Boltz.WalletSend:output_type -> boltzrpc.WalletSendResponse + 77, // 127: boltzrpc.Boltz.WalletReceive:output_type -> boltzrpc.WalletReceiveResponse + 87, // 128: boltzrpc.Boltz.Stop:output_type -> google.protobuf.Empty + 87, // 129: boltzrpc.Boltz.Unlock:output_type -> google.protobuf.Empty + 85, // 130: boltzrpc.Boltz.VerifyWalletPassword:output_type -> boltzrpc.VerifyWalletPasswordResponse + 87, // 131: boltzrpc.Boltz.ChangeWalletPassword:output_type -> google.protobuf.Empty + 10, // 132: boltzrpc.Boltz.CreateTenant:output_type -> boltzrpc.Tenant + 8, // 133: boltzrpc.Boltz.ListTenants:output_type -> boltzrpc.ListTenantsResponse + 10, // 134: boltzrpc.Boltz.GetTenant:output_type -> boltzrpc.Tenant + 13, // 135: boltzrpc.Boltz.BakeMacaroon:output_type -> boltzrpc.BakeMacaroonResponse + 102, // [102:136] is the sub-list for method output_type + 68, // [68:102] is the sub-list for method input_type + 68, // [68:68] is the sub-list for extension type_name + 68, // [68:68] is the sub-list for extension extendee + 0, // [0:68] is the sub-list for field type_name } func init() { file_boltzrpc_proto_init() } @@ -7499,7 +7997,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetWalletCredentialsRequest); i { + switch v := v.(*ListWalletTransactionsRequest); i { case 0: return &v.state case 1: @@ -7511,7 +8009,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveWalletRequest); i { + switch v := v.(*WalletTransaction); i { case 0: return &v.state case 1: @@ -7523,7 +8021,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletSendRequest); i { + switch v := v.(*TransactionSwap); i { case 0: return &v.state case 1: @@ -7535,7 +8033,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletSendResponse); i { + switch v := v.(*TransactionInput); i { case 0: return &v.state case 1: @@ -7547,7 +8045,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletReceiveRequest); i { + switch v := v.(*TransactionOutput); i { case 0: return &v.state case 1: @@ -7559,7 +8057,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletReceiveResponse); i { + switch v := v.(*ListWalletTransactionsResponse); i { case 0: return &v.state case 1: @@ -7571,7 +8069,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Wallet); i { + switch v := v.(*GetWalletCredentialsRequest); i { case 0: return &v.state case 1: @@ -7583,7 +8081,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Wallets); i { + switch v := v.(*RemoveWalletRequest); i { case 0: return &v.state case 1: @@ -7595,7 +8093,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Balance); i { + switch v := v.(*WalletSendRequest); i { case 0: return &v.state case 1: @@ -7607,7 +8105,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subaccount); i { + switch v := v.(*WalletSendResponse); i { case 0: return &v.state case 1: @@ -7619,7 +8117,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveWalletResponse); i { + switch v := v.(*WalletReceiveRequest); i { case 0: return &v.state case 1: @@ -7631,7 +8129,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnlockRequest); i { + switch v := v.(*WalletReceiveResponse); i { case 0: return &v.state case 1: @@ -7643,7 +8141,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerifyWalletPasswordRequest); i { + switch v := v.(*Wallet); i { case 0: return &v.state case 1: @@ -7655,7 +8153,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerifyWalletPasswordResponse); i { + switch v := v.(*Wallets); i { case 0: return &v.state case 1: @@ -7667,6 +8165,78 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Balance); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Subaccount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveWalletResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnlockRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyWalletPasswordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyWalletPasswordResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChangeWalletPasswordRequest); i { case 0: return &v.state @@ -7707,14 +8277,15 @@ func file_boltzrpc_proto_init() { file_boltzrpc_proto_msgTypes[58].OneofWrappers = []interface{}{} file_boltzrpc_proto_msgTypes[59].OneofWrappers = []interface{}{} file_boltzrpc_proto_msgTypes[60].OneofWrappers = []interface{}{} - file_boltzrpc_proto_msgTypes[62].OneofWrappers = []interface{}{} + file_boltzrpc_proto_msgTypes[66].OneofWrappers = []interface{}{} + file_boltzrpc_proto_msgTypes[68].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_boltzrpc_proto_rawDesc, - NumEnums: 5, - NumMessages: 75, + NumEnums: 6, + NumMessages: 81, NumExtensions: 0, NumServices: 1, }, diff --git a/boltzrpc/boltzrpc.pb.gw.go b/boltzrpc/boltzrpc.pb.gw.go index 45c8d1b3..1d4d47c2 100644 --- a/boltzrpc/boltzrpc.pb.gw.go +++ b/boltzrpc/boltzrpc.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" @@ -21,7 +22,6 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/types/known/emptypb" ) // Suppress "imported and not used" errors @@ -69,7 +69,7 @@ func local_request_Boltz_GetServiceInfo_0(ctx context.Context, marshaler runtime } func request_Boltz_GetPairs_0(ctx context.Context, marshaler runtime.Marshaler, client BoltzClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty + var protoReq empty.Empty var metadata runtime.ServerMetadata msg, err := client.GetPairs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -78,7 +78,7 @@ func request_Boltz_GetPairs_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Boltz_GetPairs_0(ctx context.Context, marshaler runtime.Marshaler, server BoltzServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty + var protoReq empty.Empty var metadata runtime.ServerMetadata msg, err := server.GetPairs(ctx, &protoReq) diff --git a/boltzrpc/boltzrpc.proto b/boltzrpc/boltzrpc.proto index e44b9beb..7810c2b6 100644 --- a/boltzrpc/boltzrpc.proto +++ b/boltzrpc/boltzrpc.proto @@ -122,6 +122,11 @@ service Boltz { */ rpc GetWallet (GetWalletRequest) returns (Wallet); + /* + Returns recent transactions from a wallet. + */ + rpc ListWalletTransactions (ListWalletTransactionsRequest) returns (ListWalletTransactionsResponse); + /* Returns the credentials of a wallet. The password will be required if the wallet is encrypted. */ @@ -733,6 +738,47 @@ message GetWalletRequest { optional uint64 id = 2; } +message ListWalletTransactionsRequest { + uint64 id = 1; + optional bool exclude_swap_related = 2; +} + +enum TransactionType { + UNKNOWN = 0; + LOCKUP = 1; + REFUND = 2; + CLAIM = 3; +} + +message WalletTransaction { + string id = 1; + // balance change of the wallet in satoshis. + // its the sum of all output values minus the sum of all input values which are controlled by the wallet. + // positive values indicate incoming transactions, negative values outgoing transactions + int64 balance_change = 2; + int64 timestamp = 3; + repeated TransactionOutput outputs = 4; + uint32 block_height = 6; + // swaps which are related to this transaction + repeated TransactionSwap swaps = 7; +} + +message TransactionSwap { + string id = 1; + TransactionType type = 2; +} + +message TransactionOutput { + string address = 1; + uint64 amount = 2; + // wether the address is controlled by the wallet + bool is_our_address = 3; +} + +message ListWalletTransactionsResponse { + repeated WalletTransaction transactions = 1; +} + message GetWalletCredentialsRequest { uint64 id = 1; optional string password = 2; diff --git a/boltzrpc/boltzrpc_grpc.pb.go b/boltzrpc/boltzrpc_grpc.pb.go index 0a0ed524..bc436b15 100644 --- a/boltzrpc/boltzrpc_grpc.pb.go +++ b/boltzrpc/boltzrpc_grpc.pb.go @@ -8,10 +8,10 @@ package boltzrpc import ( context "context" + empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" ) // This is a compile-time assertion to ensure that this generated file @@ -20,39 +20,40 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Boltz_GetInfo_FullMethodName = "/boltzrpc.Boltz/GetInfo" - Boltz_GetServiceInfo_FullMethodName = "/boltzrpc.Boltz/GetServiceInfo" - Boltz_GetPairInfo_FullMethodName = "/boltzrpc.Boltz/GetPairInfo" - Boltz_GetPairs_FullMethodName = "/boltzrpc.Boltz/GetPairs" - Boltz_ListSwaps_FullMethodName = "/boltzrpc.Boltz/ListSwaps" - Boltz_GetStats_FullMethodName = "/boltzrpc.Boltz/GetStats" - Boltz_RefundSwap_FullMethodName = "/boltzrpc.Boltz/RefundSwap" - Boltz_ClaimSwaps_FullMethodName = "/boltzrpc.Boltz/ClaimSwaps" - Boltz_GetSwapInfo_FullMethodName = "/boltzrpc.Boltz/GetSwapInfo" - Boltz_GetSwapInfoStream_FullMethodName = "/boltzrpc.Boltz/GetSwapInfoStream" - Boltz_Deposit_FullMethodName = "/boltzrpc.Boltz/Deposit" - Boltz_CreateSwap_FullMethodName = "/boltzrpc.Boltz/CreateSwap" - Boltz_CreateChannel_FullMethodName = "/boltzrpc.Boltz/CreateChannel" - Boltz_CreateReverseSwap_FullMethodName = "/boltzrpc.Boltz/CreateReverseSwap" - Boltz_CreateChainSwap_FullMethodName = "/boltzrpc.Boltz/CreateChainSwap" - Boltz_CreateWallet_FullMethodName = "/boltzrpc.Boltz/CreateWallet" - Boltz_ImportWallet_FullMethodName = "/boltzrpc.Boltz/ImportWallet" - Boltz_SetSubaccount_FullMethodName = "/boltzrpc.Boltz/SetSubaccount" - Boltz_GetSubaccounts_FullMethodName = "/boltzrpc.Boltz/GetSubaccounts" - Boltz_GetWallets_FullMethodName = "/boltzrpc.Boltz/GetWallets" - Boltz_GetWallet_FullMethodName = "/boltzrpc.Boltz/GetWallet" - Boltz_GetWalletCredentials_FullMethodName = "/boltzrpc.Boltz/GetWalletCredentials" - Boltz_RemoveWallet_FullMethodName = "/boltzrpc.Boltz/RemoveWallet" - Boltz_WalletSend_FullMethodName = "/boltzrpc.Boltz/WalletSend" - Boltz_WalletReceive_FullMethodName = "/boltzrpc.Boltz/WalletReceive" - Boltz_Stop_FullMethodName = "/boltzrpc.Boltz/Stop" - Boltz_Unlock_FullMethodName = "/boltzrpc.Boltz/Unlock" - Boltz_VerifyWalletPassword_FullMethodName = "/boltzrpc.Boltz/VerifyWalletPassword" - Boltz_ChangeWalletPassword_FullMethodName = "/boltzrpc.Boltz/ChangeWalletPassword" - Boltz_CreateTenant_FullMethodName = "/boltzrpc.Boltz/CreateTenant" - Boltz_ListTenants_FullMethodName = "/boltzrpc.Boltz/ListTenants" - Boltz_GetTenant_FullMethodName = "/boltzrpc.Boltz/GetTenant" - Boltz_BakeMacaroon_FullMethodName = "/boltzrpc.Boltz/BakeMacaroon" + Boltz_GetInfo_FullMethodName = "/boltzrpc.Boltz/GetInfo" + Boltz_GetServiceInfo_FullMethodName = "/boltzrpc.Boltz/GetServiceInfo" + Boltz_GetPairInfo_FullMethodName = "/boltzrpc.Boltz/GetPairInfo" + Boltz_GetPairs_FullMethodName = "/boltzrpc.Boltz/GetPairs" + Boltz_ListSwaps_FullMethodName = "/boltzrpc.Boltz/ListSwaps" + Boltz_GetStats_FullMethodName = "/boltzrpc.Boltz/GetStats" + Boltz_RefundSwap_FullMethodName = "/boltzrpc.Boltz/RefundSwap" + Boltz_ClaimSwaps_FullMethodName = "/boltzrpc.Boltz/ClaimSwaps" + Boltz_GetSwapInfo_FullMethodName = "/boltzrpc.Boltz/GetSwapInfo" + Boltz_GetSwapInfoStream_FullMethodName = "/boltzrpc.Boltz/GetSwapInfoStream" + Boltz_Deposit_FullMethodName = "/boltzrpc.Boltz/Deposit" + Boltz_CreateSwap_FullMethodName = "/boltzrpc.Boltz/CreateSwap" + Boltz_CreateChannel_FullMethodName = "/boltzrpc.Boltz/CreateChannel" + Boltz_CreateReverseSwap_FullMethodName = "/boltzrpc.Boltz/CreateReverseSwap" + Boltz_CreateChainSwap_FullMethodName = "/boltzrpc.Boltz/CreateChainSwap" + Boltz_CreateWallet_FullMethodName = "/boltzrpc.Boltz/CreateWallet" + Boltz_ImportWallet_FullMethodName = "/boltzrpc.Boltz/ImportWallet" + Boltz_SetSubaccount_FullMethodName = "/boltzrpc.Boltz/SetSubaccount" + Boltz_GetSubaccounts_FullMethodName = "/boltzrpc.Boltz/GetSubaccounts" + Boltz_GetWallets_FullMethodName = "/boltzrpc.Boltz/GetWallets" + Boltz_GetWallet_FullMethodName = "/boltzrpc.Boltz/GetWallet" + Boltz_ListWalletTransactions_FullMethodName = "/boltzrpc.Boltz/ListWalletTransactions" + Boltz_GetWalletCredentials_FullMethodName = "/boltzrpc.Boltz/GetWalletCredentials" + Boltz_RemoveWallet_FullMethodName = "/boltzrpc.Boltz/RemoveWallet" + Boltz_WalletSend_FullMethodName = "/boltzrpc.Boltz/WalletSend" + Boltz_WalletReceive_FullMethodName = "/boltzrpc.Boltz/WalletReceive" + Boltz_Stop_FullMethodName = "/boltzrpc.Boltz/Stop" + Boltz_Unlock_FullMethodName = "/boltzrpc.Boltz/Unlock" + Boltz_VerifyWalletPassword_FullMethodName = "/boltzrpc.Boltz/VerifyWalletPassword" + Boltz_ChangeWalletPassword_FullMethodName = "/boltzrpc.Boltz/ChangeWalletPassword" + Boltz_CreateTenant_FullMethodName = "/boltzrpc.Boltz/CreateTenant" + Boltz_ListTenants_FullMethodName = "/boltzrpc.Boltz/ListTenants" + Boltz_GetTenant_FullMethodName = "/boltzrpc.Boltz/GetTenant" + Boltz_BakeMacaroon_FullMethodName = "/boltzrpc.Boltz/BakeMacaroon" ) // BoltzClient is the client API for Boltz service. @@ -69,7 +70,7 @@ type BoltzClient interface { // Fetches information about a specific pair for a chain swap. GetPairInfo(ctx context.Context, in *GetPairInfoRequest, opts ...grpc.CallOption) (*PairInfo, error) // Fetches all available pairs for submarine and reverse swaps. - GetPairs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) + GetPairs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) // Returns a list of all swaps, reverse swaps, and chain swaps in the database. ListSwaps(ctx context.Context, in *ListSwapsRequest, opts ...grpc.CallOption) (*ListSwapsResponse, error) // Returns stats of all swaps, reverse swaps, and chain swaps in the database. @@ -117,6 +118,8 @@ type BoltzClient interface { GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*Wallets, error) // Returns the current balance and subaccount of a wallet. GetWallet(ctx context.Context, in *GetWalletRequest, opts ...grpc.CallOption) (*Wallet, error) + // Returns recent transactions from a wallet. + ListWalletTransactions(ctx context.Context, in *ListWalletTransactionsRequest, opts ...grpc.CallOption) (*ListWalletTransactionsResponse, error) // Returns the credentials of a wallet. The password will be required if the wallet is encrypted. GetWalletCredentials(ctx context.Context, in *GetWalletCredentialsRequest, opts ...grpc.CallOption) (*WalletCredentials, error) // Removes a wallet. @@ -126,13 +129,13 @@ type BoltzClient interface { // Get a new address of the wallet. WalletReceive(ctx context.Context, in *WalletReceiveRequest, opts ...grpc.CallOption) (*WalletReceiveResponse, error) // Gracefully stops the daemon. - Stop(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) + Stop(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) // Unlocks the server. This will be required on startup if there are any encrypted wallets. - Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*empty.Empty, error) // Check if the password is correct. VerifyWalletPassword(ctx context.Context, in *VerifyWalletPasswordRequest, opts ...grpc.CallOption) (*VerifyWalletPasswordResponse, error) // Changes the password for wallet encryption. - ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*empty.Empty, error) // Creates a new tenant which can be used to bake restricted macaroons. CreateTenant(ctx context.Context, in *CreateTenantRequest, opts ...grpc.CallOption) (*Tenant, error) // Returns all tenants. @@ -182,7 +185,7 @@ func (c *boltzClient) GetPairInfo(ctx context.Context, in *GetPairInfoRequest, o return out, nil } -func (c *boltzClient) GetPairs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) { +func (c *boltzClient) GetPairs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) { out := new(GetPairsResponse) err := c.cc.Invoke(ctx, Boltz_GetPairs_FullMethodName, in, out, opts...) if err != nil { @@ -369,6 +372,15 @@ func (c *boltzClient) GetWallet(ctx context.Context, in *GetWalletRequest, opts return out, nil } +func (c *boltzClient) ListWalletTransactions(ctx context.Context, in *ListWalletTransactionsRequest, opts ...grpc.CallOption) (*ListWalletTransactionsResponse, error) { + out := new(ListWalletTransactionsResponse) + err := c.cc.Invoke(ctx, Boltz_ListWalletTransactions_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *boltzClient) GetWalletCredentials(ctx context.Context, in *GetWalletCredentialsRequest, opts ...grpc.CallOption) (*WalletCredentials, error) { out := new(WalletCredentials) err := c.cc.Invoke(ctx, Boltz_GetWalletCredentials_FullMethodName, in, out, opts...) @@ -405,8 +417,8 @@ func (c *boltzClient) WalletReceive(ctx context.Context, in *WalletReceiveReques return out, nil } -func (c *boltzClient) Stop(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) +func (c *boltzClient) Stop(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) err := c.cc.Invoke(ctx, Boltz_Stop_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -414,8 +426,8 @@ func (c *boltzClient) Stop(ctx context.Context, in *emptypb.Empty, opts ...grpc. return out, nil } -func (c *boltzClient) Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) +func (c *boltzClient) Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) err := c.cc.Invoke(ctx, Boltz_Unlock_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -432,8 +444,8 @@ func (c *boltzClient) VerifyWalletPassword(ctx context.Context, in *VerifyWallet return out, nil } -func (c *boltzClient) ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) +func (c *boltzClient) ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) err := c.cc.Invoke(ctx, Boltz_ChangeWalletPassword_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -491,7 +503,7 @@ type BoltzServer interface { // Fetches information about a specific pair for a chain swap. GetPairInfo(context.Context, *GetPairInfoRequest) (*PairInfo, error) // Fetches all available pairs for submarine and reverse swaps. - GetPairs(context.Context, *emptypb.Empty) (*GetPairsResponse, error) + GetPairs(context.Context, *empty.Empty) (*GetPairsResponse, error) // Returns a list of all swaps, reverse swaps, and chain swaps in the database. ListSwaps(context.Context, *ListSwapsRequest) (*ListSwapsResponse, error) // Returns stats of all swaps, reverse swaps, and chain swaps in the database. @@ -539,6 +551,8 @@ type BoltzServer interface { GetWallets(context.Context, *GetWalletsRequest) (*Wallets, error) // Returns the current balance and subaccount of a wallet. GetWallet(context.Context, *GetWalletRequest) (*Wallet, error) + // Returns recent transactions from a wallet. + ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) // Returns the credentials of a wallet. The password will be required if the wallet is encrypted. GetWalletCredentials(context.Context, *GetWalletCredentialsRequest) (*WalletCredentials, error) // Removes a wallet. @@ -548,13 +562,13 @@ type BoltzServer interface { // Get a new address of the wallet. WalletReceive(context.Context, *WalletReceiveRequest) (*WalletReceiveResponse, error) // Gracefully stops the daemon. - Stop(context.Context, *emptypb.Empty) (*emptypb.Empty, error) + Stop(context.Context, *empty.Empty) (*empty.Empty, error) // Unlocks the server. This will be required on startup if there are any encrypted wallets. - Unlock(context.Context, *UnlockRequest) (*emptypb.Empty, error) + Unlock(context.Context, *UnlockRequest) (*empty.Empty, error) // Check if the password is correct. VerifyWalletPassword(context.Context, *VerifyWalletPasswordRequest) (*VerifyWalletPasswordResponse, error) // Changes the password for wallet encryption. - ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*emptypb.Empty, error) + ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*empty.Empty, error) // Creates a new tenant which can be used to bake restricted macaroons. CreateTenant(context.Context, *CreateTenantRequest) (*Tenant, error) // Returns all tenants. @@ -582,7 +596,7 @@ func (UnimplementedBoltzServer) GetServiceInfo(context.Context, *GetServiceInfoR func (UnimplementedBoltzServer) GetPairInfo(context.Context, *GetPairInfoRequest) (*PairInfo, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPairInfo not implemented") } -func (UnimplementedBoltzServer) GetPairs(context.Context, *emptypb.Empty) (*GetPairsResponse, error) { +func (UnimplementedBoltzServer) GetPairs(context.Context, *empty.Empty) (*GetPairsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPairs not implemented") } func (UnimplementedBoltzServer) ListSwaps(context.Context, *ListSwapsRequest) (*ListSwapsResponse, error) { @@ -636,6 +650,9 @@ func (UnimplementedBoltzServer) GetWallets(context.Context, *GetWalletsRequest) func (UnimplementedBoltzServer) GetWallet(context.Context, *GetWalletRequest) (*Wallet, error) { return nil, status.Errorf(codes.Unimplemented, "method GetWallet not implemented") } +func (UnimplementedBoltzServer) ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListWalletTransactions not implemented") +} func (UnimplementedBoltzServer) GetWalletCredentials(context.Context, *GetWalletCredentialsRequest) (*WalletCredentials, error) { return nil, status.Errorf(codes.Unimplemented, "method GetWalletCredentials not implemented") } @@ -648,16 +665,16 @@ func (UnimplementedBoltzServer) WalletSend(context.Context, *WalletSendRequest) func (UnimplementedBoltzServer) WalletReceive(context.Context, *WalletReceiveRequest) (*WalletReceiveResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method WalletReceive not implemented") } -func (UnimplementedBoltzServer) Stop(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { +func (UnimplementedBoltzServer) Stop(context.Context, *empty.Empty) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Stop not implemented") } -func (UnimplementedBoltzServer) Unlock(context.Context, *UnlockRequest) (*emptypb.Empty, error) { +func (UnimplementedBoltzServer) Unlock(context.Context, *UnlockRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Unlock not implemented") } func (UnimplementedBoltzServer) VerifyWalletPassword(context.Context, *VerifyWalletPasswordRequest) (*VerifyWalletPasswordResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VerifyWalletPassword not implemented") } -func (UnimplementedBoltzServer) ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*emptypb.Empty, error) { +func (UnimplementedBoltzServer) ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ChangeWalletPassword not implemented") } func (UnimplementedBoltzServer) CreateTenant(context.Context, *CreateTenantRequest) (*Tenant, error) { @@ -740,7 +757,7 @@ func _Boltz_GetPairInfo_Handler(srv interface{}, ctx context.Context, dec func(i } func _Boltz_GetPairs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) + in := new(empty.Empty) if err := dec(in); err != nil { return nil, err } @@ -752,7 +769,7 @@ func _Boltz_GetPairs_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: Boltz_GetPairs_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BoltzServer).GetPairs(ctx, req.(*emptypb.Empty)) + return srv.(BoltzServer).GetPairs(ctx, req.(*empty.Empty)) } return interceptor(ctx, in, info, handler) } @@ -1066,6 +1083,24 @@ func _Boltz_GetWallet_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Boltz_ListWalletTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListWalletTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BoltzServer).ListWalletTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Boltz_ListWalletTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BoltzServer).ListWalletTransactions(ctx, req.(*ListWalletTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Boltz_GetWalletCredentials_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetWalletCredentialsRequest) if err := dec(in); err != nil { @@ -1139,7 +1174,7 @@ func _Boltz_WalletReceive_Handler(srv interface{}, ctx context.Context, dec func } func _Boltz_Stop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) + in := new(empty.Empty) if err := dec(in); err != nil { return nil, err } @@ -1151,7 +1186,7 @@ func _Boltz_Stop_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: Boltz_Stop_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BoltzServer).Stop(ctx, req.(*emptypb.Empty)) + return srv.(BoltzServer).Stop(ctx, req.(*empty.Empty)) } return interceptor(ctx, in, info, handler) } @@ -1369,6 +1404,10 @@ var Boltz_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetWallet", Handler: _Boltz_GetWallet_Handler, }, + { + MethodName: "ListWalletTransactions", + Handler: _Boltz_ListWalletTransactions_Handler, + }, { MethodName: "GetWalletCredentials", Handler: _Boltz_GetWalletCredentials_Handler, diff --git a/boltzrpc/client/client.go b/boltzrpc/client/client.go index 7a1d0916..66907d78 100644 --- a/boltzrpc/client/client.go +++ b/boltzrpc/client/client.go @@ -97,6 +97,10 @@ func (boltz *Boltz) GetWallets(currency *boltzrpc.Currency, includeReadonly bool return boltz.Client.GetWallets(boltz.Ctx, &boltzrpc.GetWalletsRequest{Currency: currency, IncludeReadonly: &includeReadonly}) } +func (boltz *Boltz) ListWalletTransactions(id uint64, excludeSwapRelated bool) (*boltzrpc.ListWalletTransactionsResponse, error) { + return boltz.Client.ListWalletTransactions(boltz.Ctx, &boltzrpc.ListWalletTransactionsRequest{Id: id, ExcludeSwapRelated: &excludeSwapRelated}) +} + func (boltz *Boltz) ImportWallet(params *boltzrpc.WalletParams, credentials *boltzrpc.WalletCredentials) (*boltzrpc.Wallet, error) { return boltz.Client.ImportWallet(boltz.Ctx, &boltzrpc.ImportWalletRequest{Params: params, Credentials: credentials}) } diff --git a/cln/cln.go b/cln/cln.go index 122713cd..7aa34d19 100755 --- a/cln/cln.go +++ b/cln/cln.go @@ -162,6 +162,10 @@ func (c *Cln) ListChannels() ([]*lightning.LightningChannel, error) { return results, nil } +func (c *Cln) GetTransactions() ([]*onchain.WalletTransaction, error) { + return nil, errors.New("not implemented for cln") +} + func (c *Cln) SanityCheck() (string, error) { info, err := c.Client.Getinfo(context.Background(), &protos.GetinfoRequest{}) if err != nil { diff --git a/cmd/boltzcli/commands.go b/cmd/boltzcli/commands.go index 56894725..a7d2fa15 100644 --- a/cmd/boltzcli/commands.go +++ b/cmd/boltzcli/commands.go @@ -1532,6 +1532,13 @@ var walletCommands = &cli.Command{ Action: listWallets, Flags: []cli.Flag{jsonFlag}, }, + { + Name: "transactions", + ArgsUsage: "name", + Usage: "Show the recent transaction history of a wallet", + Action: requireNArgs(1, listTransactions), + Flags: []cli.Flag{jsonFlag, &cli.BoolFlag{Name: "exclude-swap-related", Usage: "Exclude swap related transactions"}}, + }, { Name: "subaccount", Usage: "Select the subaccount for a wallet", @@ -1979,6 +1986,20 @@ func listWallets(ctx *cli.Context) error { return nil } +func listTransactions(ctx *cli.Context) error { + client := getClient(ctx) + walletId, err := getWalletId(ctx, ctx.Args().First()) + if err != nil { + return err + } + response, err := client.ListWalletTransactions(*walletId, ctx.Bool("exclude-swap-related")) + if err != nil { + return err + } + printJson(response) + return nil +} + var formatMacaroonCommand = &cli.Command{ Name: "formatmacaroon", Category: "Debug", diff --git a/database/any.go b/database/any.go index 83d22fe2..41d1cf67 100644 --- a/database/any.go +++ b/database/any.go @@ -3,24 +3,29 @@ package database import ( "database/sql" "fmt" + "strings" + "time" + "github.com/BoltzExchange/boltz-client/boltz" "github.com/BoltzExchange/boltz-client/boltzrpc" - "time" ) type AnySwap struct { - Id string - Type boltz.SwapType - Pair boltz.Pair - State boltzrpc.SwapState - Error string - Status boltz.SwapUpdateEvent - Amount uint64 - IsAuto bool - ServiceFee *uint64 - OnchainFee *uint64 - CreatedAt time.Time - TenantId Id + Id string + Type boltz.SwapType + Pair boltz.Pair + State boltzrpc.SwapState + Error string + Status boltz.SwapUpdateEvent + Amount uint64 + IsAuto bool + ServiceFee *uint64 + OnchainFee *uint64 + CreatedAt time.Time + LockupTransactionid string + ClaimTransactionid string + RefundTransactionid string + TenantId Id } func parseAnySwap(rows *sql.Rows) (*AnySwap, error) { @@ -32,19 +37,22 @@ func parseAnySwap(rows *sql.Rows) (*AnySwap, error) { err := scanRow( rows, map[string]interface{}{ - "id": &anySwap.Id, - "type": &anySwap.Type, - "amount": &anySwap.Amount, - "fromCurrency": &anySwap.Pair.From, - "toCurrency": &anySwap.Pair.To, - "state": &anySwap.State, - "error": &anySwap.Error, - "status": &status, - "isAuto": &anySwap.IsAuto, - "serviceFee": &serviceFee, - "onchainFee": &onchainFee, - "createdAt": &createdAt, - "tenantId": &anySwap.TenantId, + "id": &anySwap.Id, + "type": &anySwap.Type, + "amount": &anySwap.Amount, + "fromCurrency": &anySwap.Pair.From, + "toCurrency": &anySwap.Pair.To, + "state": &anySwap.State, + "error": &anySwap.Error, + "status": &status, + "isAuto": &anySwap.IsAuto, + "serviceFee": &serviceFee, + "onchainFee": &onchainFee, + "createdAt": &createdAt, + "claimTransactionId": &anySwap.ClaimTransactionid, + "lockupTransactionId": &anySwap.LockupTransactionid, + "refundTransactionId": &anySwap.RefundTransactionid, + "tenantId": &anySwap.TenantId, }, ) @@ -104,3 +112,20 @@ func (database *Database) QueryAllSwaps(args SwapQuery) ([]*AnySwap, error) { where, values := args.ToWhereClause() return database.queryAllSwaps("SELECT * FROM allSwaps"+where, values...) } + +func (database *Database) QuerySwapsByTransactions(args SwapQuery, transactionIds []string) ([]*AnySwap, error) { + var placeholders []string + for i, _ := range transactionIds { + placeholders = append(placeholders, fmt.Sprintf("$%d", i+1)) + } + placeholder := strings.Join(placeholders, ", ") + values := make([]any, len(transactionIds)) + for i, txId := range transactionIds { + values[i] = txId + } + where, values := args.ToWhereClauseWithExisting( + []string{fmt.Sprintf("lockupTransactionid IN (%s) OR claimTransactionid IN (%s) OR refundTransactionid IN (%s)", placeholder, placeholder, placeholder)}, + values, + ) + return database.queryAllSwaps("SELECT * FROM allSwaps"+where, values...) +} diff --git a/database/database.go b/database/database.go index df641d80..e46bf285 100644 --- a/database/database.go +++ b/database/database.go @@ -25,11 +25,11 @@ const createViews = ` DROP VIEW IF EXISTS allSwaps; CREATE VIEW allSwaps AS -SELECT data.id as id, +SELECT chainSwaps.id as id, fromCurrency, toCurrency, 'chain' AS type, - data.amount as amount, + fromData.amount as amount, state, error, status, @@ -37,9 +37,13 @@ SELECT data.id as id, onchainFee, serviceFee, isAuto, + toData.transactionId AS claimTransactionId, + fromData.lockupTransactionId AS lockupTransactionId, + fromData.transactionId AS refundTransactionId, tenantId FROM chainSwaps - JOIN chainSwapsData data ON chainSwaps.id = data.id AND chainSwaps.fromCurrency = data.currency + JOIN chainSwapsData fromData ON chainSwaps.id = fromData.id AND chainSwaps.fromCurrency = fromData.currency + JOIN chainSwapsData toData ON chainSwaps.id = toData.id AND chainSwaps.toCurrency = toData.currency UNION ALL SELECT id, fromCurrency, @@ -54,6 +58,9 @@ SELECT id, as onchainFee, serviceFee, isAuto, + claimTransactionId, + lockupTransactionId, + '' AS refundTransactionId, tenantId FROM reverseSwaps UNION ALL @@ -69,6 +76,9 @@ SELECT id, onchainFee, serviceFee, isAuto, + '' AS claimTransactionId, + lockupTransactionId, + refundTransactionId, tenantId FROM swaps; ` diff --git a/database/migration.go b/database/migration.go index 2acfe5c9..6a169893 100644 --- a/database/migration.go +++ b/database/migration.go @@ -17,7 +17,7 @@ type swapStatus struct { status string } -const latestSchemaVersion = 12 +const latestSchemaVersion = 13 func (database *Database) migrate() error { version, err := database.queryVersion() @@ -542,6 +542,11 @@ func (database *Database) performMigration(tx *Transaction, oldVersion int) erro } } + case 12: + if _, err := tx.Exec(createViews); err != nil { + return err + } + case latestSchemaVersion: logger.Info("database already at latest schema version: " + strconv.Itoa(latestSchemaVersion)) return nil diff --git a/docs/grpc.md b/docs/grpc.md index c9e1f415..d8ff8de4 100644 --- a/docs/grpc.md +++ b/docs/grpc.md @@ -181,6 +181,14 @@ Returns the current balance and subaccount of a wallet. | ------- | -------- | | [`GetWalletRequest`](#getwalletrequest) | [`Wallet`](#wallet) | +#### ListWalletTransactions + +Returns recent transactions from a wallet. + +| Request | Response | +| ------- | -------- | +| [`ListWalletTransactionsRequest`](#listwallettransactionsrequest) | [`ListWalletTransactionsResponse`](#listwallettransactionsresponse) | + #### GetWalletCredentials Returns the credentials of a wallet. The password will be required if the wallet is encrypted. @@ -1047,6 +1055,33 @@ Channel creations are an optional extension to a submarine swap in the data type +#### ListWalletTransactionsRequest + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `id` | [`uint64`](#uint64) | | | +| `exclude_swap_related` | [`bool`](#bool) | optional | | + + + + + +#### ListWalletTransactionsResponse + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `transactions` | [`WalletTransaction`](#wallettransaction) | repeated | | + + + + + #### MacaroonPermissions @@ -1287,6 +1322,50 @@ Channel creations are an optional extension to a submarine swap in the data type +#### TransactionInput + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `tx_id` | [`string`](#string) | | | +| `index` | [`uint32`](#uint32) | | | +| `is_our_output` | [`bool`](#bool) | | Denotes if the outpoint is controlled by the internal wallet. | + + + + + +#### TransactionOutput + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [`string`](#string) | | | +| `amount` | [`uint64`](#uint64) | | | +| `is_our_address` | [`bool`](#bool) | | wether the address is controlled by the wallet | + + + + + +#### TransactionSwap + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `id` | [`string`](#string) | | | +| `type` | [`TransactionType`](#transactiontype) | | | + + + + + #### UnlockRequest @@ -1430,6 +1509,24 @@ Channel creations are an optional extension to a submarine swap in the data type +#### WalletTransaction + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `id` | [`string`](#string) | | | +| `net_balance_change` | [`int64`](#int64) | | sum of all outputs which are controlled by the wallet | +| `timestamp` | [`int64`](#int64) | | | +| `outputs` | [`TransactionOutput`](#transactionoutput) | repeated | | +| `block_height` | [`uint32`](#uint32) | | | +| `swaps` | [`TransactionSwap`](#transactionswap) | repeated | swaps which are related to this transaction | + + + + + #### Wallets @@ -1504,6 +1601,18 @@ Channel creations are an optional extension to a submarine swap in the data type +#### TransactionType + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN | 0 | | +| LOCKUP | 1 | | +| REFUND | 2 | | +| CLAIM | 3 | | + + + diff --git a/lnd/lnd.go b/lnd/lnd.go index 498115d3..dfee221d 100644 --- a/lnd/lnd.go +++ b/lnd/lnd.go @@ -193,7 +193,6 @@ func (lnd *LND) ListChannels() ([]*lightning.LightningChannel, error) { if err != nil { return nil, err } - var results []*lightning.LightningChannel for _, channel := range channels.Channels { @@ -215,6 +214,10 @@ func (lnd *LND) ListChannels() ([]*lightning.LightningChannel, error) { return results, nil } +func (lnd *LND) GetTransactions() ([]*onchain.WalletTransaction, error) { + return nil, errors.New("not implemented for lnd") +} + func (lnd *LND) CreateInvoice(value uint64, preimage []byte, expiry int64, memo string) (*lightning.AddInvoiceResponse, error) { request := &lnrpc.Invoice{ Memo: memo, diff --git a/macaroons/permissions.go b/macaroons/permissions.go index 65cbce33..b2fefad2 100644 --- a/macaroons/permissions.go +++ b/macaroons/permissions.go @@ -153,6 +153,10 @@ var ( Entity: "wallet", Action: "read", }}, + "/boltzrpc.Boltz/ListWalletTransactions": {{ + Entity: "wallet", + Action: "read", + }}, "/boltzrpc.Boltz/GetWallet": {{ Entity: "wallet", Action: "read", diff --git a/mocks/github.com/BoltzExchange/boltz-client/lightning/LightningNode_mock.go b/mocks/github.com/BoltzExchange/boltz-client/lightning/LightningNode_mock.go index ec394d17..b7975a15 100644 --- a/mocks/github.com/BoltzExchange/boltz-client/lightning/LightningNode_mock.go +++ b/mocks/github.com/BoltzExchange/boltz-client/lightning/LightningNode_mock.go @@ -391,6 +391,63 @@ func (_c *MockLightningNode_GetInfo_Call) RunAndReturn(run func() (*lightning.Li return _c } +// GetTransactions provides a mock function with given fields: +func (_m *MockLightningNode) GetTransactions() ([]*onchain.WalletTransaction, error) { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetTransactions") + } + + var r0 []*onchain.WalletTransaction + var r1 error + if rf, ok := ret.Get(0).(func() ([]*onchain.WalletTransaction, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []*onchain.WalletTransaction); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*onchain.WalletTransaction) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockLightningNode_GetTransactions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetTransactions' +type MockLightningNode_GetTransactions_Call struct { + *mock.Call +} + +// GetTransactions is a helper method to define mock.On call +func (_e *MockLightningNode_Expecter) GetTransactions() *MockLightningNode_GetTransactions_Call { + return &MockLightningNode_GetTransactions_Call{Call: _e.mock.On("GetTransactions")} +} + +func (_c *MockLightningNode_GetTransactions_Call) Run(run func()) *MockLightningNode_GetTransactions_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockLightningNode_GetTransactions_Call) Return(_a0 []*onchain.WalletTransaction, _a1 error) *MockLightningNode_GetTransactions_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockLightningNode_GetTransactions_Call) RunAndReturn(run func() ([]*onchain.WalletTransaction, error)) *MockLightningNode_GetTransactions_Call { + _c.Call.Return(run) + return _c +} + // GetWalletInfo provides a mock function with given fields: func (_m *MockLightningNode) GetWalletInfo() onchain.WalletInfo { ret := _m.Called() diff --git a/mocks/github.com/BoltzExchange/boltz-client/onchain/Wallet_mock.go b/mocks/github.com/BoltzExchange/boltz-client/onchain/Wallet_mock.go index 83686a23..cdfa9e76 100644 --- a/mocks/github.com/BoltzExchange/boltz-client/onchain/Wallet_mock.go +++ b/mocks/github.com/BoltzExchange/boltz-client/onchain/Wallet_mock.go @@ -122,6 +122,63 @@ func (_c *MockWallet_GetBalance_Call) RunAndReturn(run func() (*onchain.Balance, return _c } +// GetTransactions provides a mock function with given fields: +func (_m *MockWallet) GetTransactions() ([]*onchain.WalletTransaction, error) { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetTransactions") + } + + var r0 []*onchain.WalletTransaction + var r1 error + if rf, ok := ret.Get(0).(func() ([]*onchain.WalletTransaction, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []*onchain.WalletTransaction); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*onchain.WalletTransaction) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockWallet_GetTransactions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetTransactions' +type MockWallet_GetTransactions_Call struct { + *mock.Call +} + +// GetTransactions is a helper method to define mock.On call +func (_e *MockWallet_Expecter) GetTransactions() *MockWallet_GetTransactions_Call { + return &MockWallet_GetTransactions_Call{Call: _e.mock.On("GetTransactions")} +} + +func (_c *MockWallet_GetTransactions_Call) Run(run func()) *MockWallet_GetTransactions_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockWallet_GetTransactions_Call) Return(_a0 []*onchain.WalletTransaction, _a1 error) *MockWallet_GetTransactions_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockWallet_GetTransactions_Call) RunAndReturn(run func() ([]*onchain.WalletTransaction, error)) *MockWallet_GetTransactions_Call { + _c.Call.Return(run) + return _c +} + // GetWalletInfo provides a mock function with given fields: func (_m *MockWallet) GetWalletInfo() onchain.WalletInfo { ret := _m.Called() diff --git a/onchain/onchain.go b/onchain/onchain.go index 413c1342..22f4cbf3 100644 --- a/onchain/onchain.go +++ b/onchain/onchain.go @@ -28,6 +28,20 @@ type Balance struct { Unconfirmed uint64 } +type TransactionOutput struct { + Address string + Amount uint64 + IsOurAddress bool +} + +type WalletTransaction struct { + Id string + Timestamp time.Time + Outputs []TransactionOutput + BlockHeight uint32 + BalanceChange int64 +} + type WalletInfo struct { Id Id Name string @@ -74,6 +88,7 @@ type Wallet interface { GetBalance() (*Balance, error) GetWalletInfo() WalletInfo Disconnect() error + GetTransactions() ([]*WalletTransaction, error) } type ElectrumOptions struct { diff --git a/onchain/wallet/wallet.go b/onchain/wallet/wallet.go index 0cf8caf1..9bf19160 100644 --- a/onchain/wallet/wallet.go +++ b/onchain/wallet/wallet.go @@ -23,6 +23,7 @@ import ( "slices" "strings" "sync" + "time" "unsafe" "github.com/BoltzExchange/boltz-client/logger" @@ -597,36 +598,17 @@ func (wallet *Wallet) GetBalance() (*onchain.Balance, error) { } func (wallet *Wallet) SearchOutput(txId, address string) (*onchain.Output, error) { - if wallet.subaccount == nil { - return nil, ErrSubAccountNotSet - } - params, free := toJson(map[string]any{ - "subaccount": *wallet.subaccount, - "first": 0, - "count": 30, - }) - defer free() - handler := new(AuthHandler) - var outputs struct { - Transactions []struct { - BlockHeight uint32 `json:"block_height"` - TxId string `json:"txhash"` - Outputs []struct { - Address string `json:"address"` - Satoshi uint64 `json:"satoshi"` - } - } `json:"transactions"` - } - if err := withAuthHandler(C.GA_get_transactions(wallet.session, params, handler), handler, &outputs); err != nil { + transactoins, err := wallet.GetTransactions() + if err != nil { return nil, err } - for _, tx := range outputs.Transactions { - if tx.TxId == txId || txId == "" { + for _, tx := range transactoins { + if tx.Id == txId || txId == "" { for _, output := range tx.Outputs { if output.Address == address { return &onchain.Output{ - TxId: tx.TxId, - Value: output.Satoshi, + TxId: tx.Id, + Value: output.Amount, }, nil } } @@ -786,6 +768,67 @@ func (wallet *Wallet) SetSpentOutputs(outputs []string) { } } +func (wallet *Wallet) GetTransactions() ([]*onchain.WalletTransaction, error) { + if wallet.subaccount == nil { + return nil, ErrSubAccountNotSet + } + params, free := toJson(map[string]any{ + "subaccount": *wallet.subaccount, + "first": 0, + "count": 30, + }) + defer free() + handler := new(AuthHandler) + var result struct { + Transactions []struct { + BlockHeight uint32 `json:"block_height"` + TxId string `json:"txhash"` + Inputs []struct { + Address string `json:"address"` + Satoshi uint64 `json:"satoshi"` + IsRelevant bool `json:"is_relevant"` + } + Outputs []struct { + Address string `json:"address"` + Satoshi uint64 `json:"satoshi"` + IsRelevant bool `json:"is_relevant"` + } + Timestamp int64 `json:"created_at_ts"` + Type string `json:"type"` + Satoshi map[string]int64 `json:"satoshi"` + } `json:"transactions"` + } + if err := withAuthHandler(C.GA_get_transactions(wallet.session, params, handler), handler, &result); err != nil { + return nil, err + } + + asset := "btc" + if wallet.Currency == boltz.CurrencyLiquid { + asset = config.Network.Liquid.AssetID + } + + var transactions []*onchain.WalletTransaction + for _, tx := range result.Transactions { + var outputs []onchain.TransactionOutput + for _, out := range tx.Outputs { + outputs = append(outputs, onchain.TransactionOutput{ + Address: out.Address, + Amount: out.Satoshi, + IsOurAddress: out.IsRelevant, + }) + } + transactions = append(transactions, &onchain.WalletTransaction{ + Id: tx.TxId, + Timestamp: time.UnixMicro(tx.Timestamp), + BlockHeight: tx.BlockHeight, + Outputs: outputs, + BalanceChange: tx.Satoshi[asset], + }) + } + + return transactions, nil +} + func (wallet *Wallet) Ready() bool { //return wallet.connected && wallet.subaccount != nil return wallet.connected diff --git a/rpcserver/router.go b/rpcserver/router.go index 1e63ec94..6d47ea53 100644 --- a/rpcserver/router.go +++ b/rpcserver/router.go @@ -9,6 +9,15 @@ import ( "encoding/hex" "errors" "fmt" + "math" + "net/url" + "regexp" + "slices" + "strconv" + "strings" + "sync" + "time" + "github.com/BoltzExchange/boltz-client/autoswap" "github.com/BoltzExchange/boltz-client/boltz" "github.com/BoltzExchange/boltz-client/boltzrpc" @@ -30,14 +39,6 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "math" - "net/url" - "regexp" - "slices" - "strconv" - "strings" - "sync" - "time" ) type serverState string @@ -1487,6 +1488,63 @@ func (server *routedBoltzServer) CreateWallet(ctx context.Context, request *bolt }, nil } +func (server *routedBoltzServer) ListWalletTransactions(ctx context.Context, request *boltzrpc.ListWalletTransactionsRequest) (*boltzrpc.ListWalletTransactionsResponse, error) { + wallet, err := server.getAnyWallet(ctx, onchain.WalletChecker{Id: &request.Id}) + if err != nil { + return nil, err + } + transactions, err := wallet.GetTransactions() + if err != nil { + return nil, err + } + var txIds []string + for _, tx := range transactions { + txIds = append(txIds, tx.Id) + } + swaps, err := server.database.QuerySwapsByTransactions(database.SwapQuery{TenantId: macaroons.TenantIdFromContext(ctx)}, txIds) + if err != nil { + return nil, err + } + response := &boltzrpc.ListWalletTransactionsResponse{} + for _, tx := range transactions { + result := &boltzrpc.WalletTransaction{ + Id: tx.Id, + Timestamp: tx.Timestamp.Unix(), + BlockHeight: tx.BlockHeight, + NetBalanceChange: tx.BalanceChange, + } + for _, output := range tx.Outputs { + result.Outputs = append(result.Outputs, &boltzrpc.TransactionOutput{ + Address: output.Address, + Amount: output.Amount, + IsOurAddress: output.IsOurAddress, + }) + } + i := slices.IndexFunc(swaps, func(swap *database.AnySwap) bool { + return swap.RefundTransactionid == tx.Id || swap.ClaimTransactionid == tx.Id || swap.LockupTransactionid == tx.Id + }) + if i >= 0 { + if request.GetExcludeSwapRelated() { + continue + } + swap := swaps[i] + txSwap := &boltzrpc.TransactionSwap{Id: swap.Id} + if swap.RefundTransactionid == tx.Id { + txSwap.Type = boltzrpc.TransactionType_REFUND + } + if swap.ClaimTransactionid == tx.Id { + txSwap.Type = boltzrpc.TransactionType_CLAIM + } + if swap.LockupTransactionid == tx.Id { + txSwap.Type = boltzrpc.TransactionType_LOCKUP + } + result.Swaps = append(result.Swaps, txSwap) + } + response.Transactions = append(response.Transactions, result) + } + return response, nil +} + func (server *routedBoltzServer) serializeWallet(wal onchain.Wallet) (*boltzrpc.Wallet, error) { info := wal.GetWalletInfo() result := &boltzrpc.Wallet{