diff --git a/app/appmessage/error.go b/app/appmessage/error.go index e6d13f074..1ec7e1fef 100644 --- a/app/appmessage/error.go +++ b/app/appmessage/error.go @@ -38,6 +38,10 @@ type RPCError struct { Message string } +func (err RPCError) Error() string { + return err.Message +} + // RPCErrorf formats according to a format specifier and returns the string // as an RPCError. func RPCErrorf(format string, args ...interface{}) *RPCError { diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 0e34d0f8b..064fcc7eb 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -150,6 +150,8 @@ const ( CmdNotifyVirtualDaaScoreChangedRequestMessage CmdNotifyVirtualDaaScoreChangedResponseMessage CmdVirtualDaaScoreChangedNotificationMessage + CmdGetBalancesByAddressesRequestMessage + CmdGetBalancesByAddressesResponseMessage ) // ProtocolMessageCommandToString maps all MessageCommands to their string representation @@ -274,6 +276,8 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdNotifyVirtualDaaScoreChangedRequestMessage: "NotifyVirtualDaaScoreChangedRequest", CmdNotifyVirtualDaaScoreChangedResponseMessage: "NotifyVirtualDaaScoreChangedResponse", CmdVirtualDaaScoreChangedNotificationMessage: "VirtualDaaScoreChangedNotification", + CmdGetBalancesByAddressesRequestMessage: "GetBalancesByAddressesRequest", + CmdGetBalancesByAddressesResponseMessage: "GetBalancesByAddressesResponse", } // Message is an interface that describes a kaspa message. A type that diff --git a/app/appmessage/rpc_get_balances_by_addresses.go b/app/appmessage/rpc_get_balances_by_addresses.go new file mode 100644 index 000000000..7a58b56bb --- /dev/null +++ b/app/appmessage/rpc_get_balances_by_addresses.go @@ -0,0 +1,47 @@ +package appmessage + +// GetBalancesByAddressesRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetBalancesByAddressesRequestMessage struct { + baseMessage + Addresses []string +} + +// Command returns the protocol command string for the message +func (msg *GetBalancesByAddressesRequestMessage) Command() MessageCommand { + return CmdGetBalancesByAddressesRequestMessage +} + +// NewGetBalancesByAddressesRequest returns a instance of the message +func NewGetBalancesByAddressesRequest(addresses []string) *GetBalancesByAddressesRequestMessage { + return &GetBalancesByAddressesRequestMessage{ + Addresses: addresses, + } +} + +// BalancesByAddressesEntry represents the balance of some address +type BalancesByAddressesEntry struct { + Address string + Balance uint64 +} + +// GetBalancesByAddressesResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetBalancesByAddressesResponseMessage struct { + baseMessage + Entries []*BalancesByAddressesEntry + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetBalancesByAddressesResponseMessage) Command() MessageCommand { + return CmdGetBalancesByAddressesResponseMessage +} + +// NewGetBalancesByAddressesResponse returns an instance of the message +func NewGetBalancesByAddressesResponse(entries []*BalancesByAddressesEntry) *GetBalancesByAddressesResponseMessage { + return &GetBalancesByAddressesResponseMessage{ + Entries: entries, + } +} diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 3bd78af3f..f4f7da3bd 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -38,6 +38,7 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdNotifyUTXOsChangedRequestMessage: rpchandlers.HandleNotifyUTXOsChanged, appmessage.CmdStopNotifyingUTXOsChangedRequestMessage: rpchandlers.HandleStopNotifyingUTXOsChanged, appmessage.CmdGetUTXOsByAddressesRequestMessage: rpchandlers.HandleGetUTXOsByAddresses, + appmessage.CmdGetBalancesByAddressesRequestMessage: rpchandlers.HandleGetBalancesByAddresses, appmessage.CmdGetVirtualSelectedParentBlueScoreRequestMessage: rpchandlers.HandleGetVirtualSelectedParentBlueScore, appmessage.CmdNotifyVirtualSelectedParentBlueScoreChangedRequestMessage: rpchandlers.HandleNotifyVirtualSelectedParentBlueScoreChanged, appmessage.CmdBanRequestMessage: rpchandlers.HandleBan, diff --git a/app/rpc/rpchandlers/get_balance_by_address.go b/app/rpc/rpchandlers/get_balance_by_address.go index 67f295960..ace958132 100644 --- a/app/rpc/rpchandlers/get_balance_by_address.go +++ b/app/rpc/rpchandlers/get_balance_by_address.go @@ -6,6 +6,7 @@ import ( "github.com/kaspanet/kaspad/domain/consensus/utils/txscript" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" "github.com/kaspanet/kaspad/util" + "github.com/pkg/errors" ) // HandleGetBalanceByAddress handles the respectively named RPC command @@ -18,30 +19,39 @@ func HandleGetBalanceByAddress(context *rpccontext.Context, _ *router.Router, re getBalanceByAddressRequest := request.(*appmessage.GetBalanceByAddressRequestMessage) - var balance uint64 = 0 - addressString := getBalanceByAddressRequest.Address - - address, err := util.DecodeAddress(addressString, context.Config.ActiveNetParams.Prefix) + balance, err := getBalanceByAddress(context, getBalanceByAddressRequest.Address) if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, rpcError) { + return nil, err + } errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could decode address '%s': %s", addressString, err) + errorMessage.Error = rpcError return errorMessage, nil } - scriptPublicKey, err := txscript.PayToAddrScript(address) - if err != nil { - errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not create a scriptPublicKey for address '%s': %s", addressString, err) - return errorMessage, nil - } - utxoOutpointEntryPairs, err := context.UTXOIndex.UTXOs(scriptPublicKey) - if err != nil { - return nil, err - } - for _, utxoOutpointEntryPair := range utxoOutpointEntryPairs { - balance += utxoOutpointEntryPair.Amount() - } - response := appmessage.NewGetBalanceByAddressResponse(balance) return response, nil } + +func getBalanceByAddress(context *rpccontext.Context, addressString string) (uint64, error) { + address, err := util.DecodeAddress(addressString, context.Config.ActiveNetParams.Prefix) + if err != nil { + return 0, appmessage.RPCErrorf("Couldn't decode address '%s': %s", addressString, err) + } + + scriptPublicKey, err := txscript.PayToAddrScript(address) + if err != nil { + return 0, appmessage.RPCErrorf("Could not create a scriptPublicKey for address '%s': %s", addressString, err) + } + utxoOutpointEntryPairs, err := context.UTXOIndex.UTXOs(scriptPublicKey) + if err != nil { + return 0, err + } + + balance := uint64(0) + for _, utxoOutpointEntryPair := range utxoOutpointEntryPairs { + balance += utxoOutpointEntryPair.Amount() + } + return balance, nil +} diff --git a/app/rpc/rpchandlers/get_balances_by_addresses.go b/app/rpc/rpchandlers/get_balances_by_addresses.go new file mode 100644 index 000000000..27e37ecfd --- /dev/null +++ b/app/rpc/rpchandlers/get_balances_by_addresses.go @@ -0,0 +1,41 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + "github.com/pkg/errors" +) + +// HandleGetBalancesByAddresses handles the respectively named RPC command +func HandleGetBalancesByAddresses(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.UTXOIndex { + errorMessage := &appmessage.GetBalancesByAddressesResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --utxoindex") + return errorMessage, nil + } + + getBalancesByAddressesRequest := request.(*appmessage.GetBalancesByAddressesRequestMessage) + + allEntries := make([]*appmessage.BalancesByAddressesEntry, len(getBalancesByAddressesRequest.Addresses)) + for i, address := range getBalancesByAddressesRequest.Addresses { + balance, err := getBalanceByAddress(context, address) + + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, rpcError) { + return nil, err + } + errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + allEntries[i] = &appmessage.BalancesByAddressesEntry{ + Address: address, + Balance: balance, + } + } + + response := appmessage.NewGetBalancesByAddressesResponse(allEntries) + return response, nil +} diff --git a/cmd/kaspawallet/daemon/server/balance.go b/cmd/kaspawallet/daemon/server/balance.go index 608d9b854..5ba109c97 100644 --- a/cmd/kaspawallet/daemon/server/balance.go +++ b/cmd/kaspawallet/daemon/server/balance.go @@ -2,6 +2,7 @@ package server import ( "context" + "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/pb" "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet" ) @@ -21,7 +22,7 @@ func (s *server) GetBalance(_ context.Context, _ *pb.GetBalanceRequest) (*pb.Get maturity := s.params.BlockCoinbaseMaturity balancesMap := make(balancesMapType, 0) - for _, entry := range s.utxos { + for _, entry := range s.utxosSortedByAmount { amount := entry.UTXOEntry.Amount() address := entry.address balances, ok := balancesMap[address] diff --git a/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go b/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go index da1377fdb..68e6364ef 100644 --- a/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go +++ b/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go @@ -2,6 +2,7 @@ package server import ( "context" + "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/pb" "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet" "github.com/kaspanet/kaspad/domain/consensus/utils/constants" @@ -17,7 +18,7 @@ func (s *server) CreateUnsignedTransaction(_ context.Context, request *pb.Create return nil, errors.New("server is not synced") } - err := s.refreshExistingUTXOs() + err := s.refreshUTXOs() if err != nil { return nil, err } @@ -66,7 +67,7 @@ func (s *server) selectUTXOs(spendAmount uint64, feePerInput uint64) ( return nil, 0, err } - for _, utxo := range s.utxos { + for _, utxo := range s.utxosSortedByAmount { if !isUTXOSpendable(utxo, dagInfo.VirtualDAAScore, s.params.BlockCoinbaseMaturity) { continue } diff --git a/cmd/kaspawallet/daemon/server/server.go b/cmd/kaspawallet/daemon/server/server.go index dc5f4efc9..d9fe25462 100644 --- a/cmd/kaspawallet/daemon/server/server.go +++ b/cmd/kaspawallet/daemon/server/server.go @@ -2,15 +2,15 @@ package server import ( "fmt" - "github.com/kaspanet/kaspad/util/profiling" "net" "os" "sync" "time" + "github.com/kaspanet/kaspad/util/profiling" + "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/pb" "github.com/kaspanet/kaspad/cmd/kaspawallet/keys" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/dagconfig" "github.com/kaspanet/kaspad/infrastructure/network/rpcclient" "github.com/kaspanet/kaspad/infrastructure/os/signal" @@ -26,11 +26,12 @@ type server struct { rpcClient *rpcclient.RPCClient params *dagconfig.Params - lock sync.RWMutex - utxos map[externalapi.DomainOutpoint]*walletUTXO - nextSyncStartIndex uint32 - keysFile *keys.File - shutdown chan struct{} + lock sync.RWMutex + utxosSortedByAmount []*walletUTXO + nextSyncStartIndex uint32 + keysFile *keys.File + shutdown chan struct{} + addressSet walletAddressSet } // Start starts the kaspawalletd server @@ -61,12 +62,13 @@ func Start(params *dagconfig.Params, listen, rpcServer string, keysFilePath stri } serverInstance := &server{ - rpcClient: rpcClient, - params: params, - utxos: make(map[externalapi.DomainOutpoint]*walletUTXO), - nextSyncStartIndex: 0, - keysFile: keysFile, - shutdown: make(chan struct{}), + rpcClient: rpcClient, + params: params, + utxosSortedByAmount: []*walletUTXO{}, + nextSyncStartIndex: 0, + keysFile: keysFile, + shutdown: make(chan struct{}), + addressSet: make(walletAddressSet), } spawn("serverInstance.sync", func() { diff --git a/cmd/kaspawallet/daemon/server/sync.go b/cmd/kaspawallet/daemon/server/sync.go index 03a4dd112..00fdef1cc 100644 --- a/cmd/kaspawallet/daemon/server/sync.go +++ b/cmd/kaspawallet/daemon/server/sync.go @@ -1,12 +1,12 @@ package server import ( + "sort" "time" "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet" "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/pkg/errors" ) @@ -27,17 +27,18 @@ func (s *server) sync() error { defer ticker.Stop() for range ticker.C { - err := s.collectUTXOsFromRecentAddresses() + err := s.collectRecentAddresses() if err != nil { return err } - err = s.collectUTXOsFromFarAddresses() + err = s.collectFarAddresses() if err != nil { return err } err = s.refreshExistingUTXOsWithLock() + if err != nil { return err } @@ -74,12 +75,12 @@ func (s *server) addressesToQuery(start, end uint32) (walletAddressSet, error) { return addresses, nil } -// collectUTXOsFromFarAddresses collects numIndexesToQuery UTXOs +// collectFarAddresses collects numIndexesToQuery addresses // from the last point it stopped in the previous call. -func (s *server) collectUTXOsFromFarAddresses() error { +func (s *server) collectFarAddresses() error { s.lock.Lock() defer s.lock.Unlock() - err := s.collectUTXOs(s.nextSyncStartIndex, s.nextSyncStartIndex+numIndexesToQuery) + err := s.collectAddresses(s.nextSyncStartIndex, s.nextSyncStartIndex+numIndexesToQuery) if err != nil { return err } @@ -100,14 +101,14 @@ func (s *server) maxUsedIndex() uint32 { return maxUsedIndex } -// collectUTXOsFromRecentAddresses collects UTXOs from used addresses until +// collectRecentAddresses collects addresses from used addresses until // the address with the index of the last used address + 1000. -// collectUTXOsFromRecentAddresses scans addresses in batches of numIndexesToQuery, +// collectRecentAddresses scans addresses in batches of numIndexesToQuery, // and releases the lock between scans. -func (s *server) collectUTXOsFromRecentAddresses() error { +func (s *server) collectRecentAddresses() error { maxUsedIndex := s.maxUsedIndex() for i := uint32(0); i < maxUsedIndex+1000; i += numIndexesToQuery { - err := s.collectUTXOsWithLock(i, i+numIndexesToQuery) + err := s.collectAddressesWithLock(i, i+numIndexesToQuery) if err != nil { return err } @@ -116,30 +117,25 @@ func (s *server) collectUTXOsFromRecentAddresses() error { return nil } -func (s *server) collectUTXOsWithLock(start, end uint32) error { +func (s *server) collectAddressesWithLock(start, end uint32) error { s.lock.Lock() defer s.lock.Unlock() - return s.collectUTXOs(start, end) + return s.collectAddresses(start, end) } -func (s *server) collectUTXOs(start, end uint32) error { +func (s *server) collectAddresses(start, end uint32) error { addressSet, err := s.addressesToQuery(start, end) if err != nil { return err } - getUTXOsByAddressesResponse, err := s.rpcClient.GetUTXOsByAddresses(addressSet.strings()) + getBalancesByAddressesResponse, err := s.rpcClient.GetBalancesByAddresses(addressSet.strings()) if err != nil { return err } - err = s.updateLastUsedIndexes(addressSet, getUTXOsByAddressesResponse) - if err != nil { - return err - } - - err = s.updateUTXOs(addressSet, getUTXOsByAddressesResponse) + err = s.updateAddressesAndLastUsedIndexes(addressSet, getBalancesByAddressesResponse) if err != nil { return err } @@ -147,35 +143,28 @@ func (s *server) collectUTXOs(start, end uint32) error { return nil } -func (s *server) updateUTXOs(addressSet walletAddressSet, - getUTXOsByAddressesResponse *appmessage.GetUTXOsByAddressesResponseMessage) error { - - for _, entry := range getUTXOsByAddressesResponse.Entries { - err := s.addEntryToUTXOSet(entry, addressSet) - if err != nil { - return err - } - } - - return nil -} - -func (s *server) updateLastUsedIndexes(addressSet walletAddressSet, - getUTXOsByAddressesResponse *appmessage.GetUTXOsByAddressesResponseMessage) error { +func (s *server) updateAddressesAndLastUsedIndexes(requestedAddressSet walletAddressSet, + getBalancesByAddressesResponse *appmessage.GetBalancesByAddressesResponseMessage) error { lastUsedExternalIndex := s.keysFile.LastUsedExternalIndex() lastUsedInternalIndex := s.keysFile.LastUsedInternalIndex() - for _, entry := range getUTXOsByAddressesResponse.Entries { - walletAddress, ok := addressSet[entry.Address] + for _, entry := range getBalancesByAddressesResponse.Entries { + walletAddress, ok := requestedAddressSet[entry.Address] if !ok { return errors.Errorf("Got result from address %s even though it wasn't requested", entry.Address) } + if entry.Balance == 0 { + continue + } + if walletAddress.cosignerIndex != s.keysFile.CosignerIndex { continue } + s.addressSet[entry.Address] = walletAddress + if walletAddress.keyChain == libkaspawallet.ExternalKeychain { if walletAddress.index > lastUsedExternalIndex { lastUsedExternalIndex = walletAddress.index @@ -200,58 +189,49 @@ func (s *server) refreshExistingUTXOsWithLock() error { s.lock.Lock() defer s.lock.Unlock() - return s.refreshExistingUTXOs() + return s.refreshUTXOs() } -func (s *server) addEntryToUTXOSet(entry *appmessage.UTXOsByAddressesEntry, addressSet walletAddressSet) error { - outpoint, err := appmessage.RPCOutpointToDomainOutpoint(entry.Outpoint) - if err != nil { - return err - } +// updateUTXOSet clears the current UTXO set, and re-fills it with the given entries +func (s *server) updateUTXOSet(entries []*appmessage.UTXOsByAddressesEntry) error { + utxos := make([]*walletUTXO, len(entries)) - utxoEntry, err := appmessage.RPCUTXOEntryToUTXOEntry(entry.UTXOEntry) - if err != nil { - return err - } - - address, ok := addressSet[entry.Address] - if !ok { - return errors.Errorf("Got result from address %s even though it wasn't requested", entry.Address) - } - - s.utxos[*outpoint] = &walletUTXO{ - Outpoint: outpoint, - UTXOEntry: utxoEntry, - address: address, - } - - return nil -} - -func (s *server) refreshExistingUTXOs() error { - addressSet := make(walletAddressSet, len(s.utxos)) - for _, utxo := range s.utxos { - addressString, err := s.walletAddressString(utxo.address) + for i, entry := range entries { + outpoint, err := appmessage.RPCOutpointToDomainOutpoint(entry.Outpoint) if err != nil { return err } - addressSet[addressString] = utxo.address + utxoEntry, err := appmessage.RPCUTXOEntryToUTXOEntry(entry.UTXOEntry) + if err != nil { + return err + } + + address, ok := s.addressSet[entry.Address] + if !ok { + return errors.Errorf("Got result from address %s even though it wasn't requested", entry.Address) + } + utxos[i] = &walletUTXO{ + Outpoint: outpoint, + UTXOEntry: utxoEntry, + address: address, + } } - getUTXOsByAddressesResponse, err := s.rpcClient.GetUTXOsByAddresses(addressSet.strings()) + sort.Slice(utxos, func(i, j int) bool { return utxos[i].UTXOEntry.Amount() > utxos[j].UTXOEntry.Amount() }) + + s.utxosSortedByAmount = utxos + + return nil +} + +func (s *server) refreshUTXOs() error { + getUTXOsByAddressesResponse, err := s.rpcClient.GetUTXOsByAddresses(s.addressSet.strings()) if err != nil { return err } - s.utxos = make(map[externalapi.DomainOutpoint]*walletUTXO, len(getUTXOsByAddressesResponse.Entries)) - for _, entry := range getUTXOsByAddressesResponse.Entries { - err := s.addEntryToUTXOSet(entry, addressSet) - if err != nil { - return err - } - } - return nil + return s.updateUTXOSet(getUTXOsByAddressesResponse.Entries) } func (s *server) isSynced() bool { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index 416a04f18..6305e555f 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 +// protoc-gen-go v1.26.0 // protoc v3.12.3 // source: messages.proto package protowire import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type KaspadMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -148,6 +143,8 @@ type KaspadMessage struct { // *KaspadMessage_VirtualDaaScoreChangedNotification // *KaspadMessage_GetBalanceByAddressRequest // *KaspadMessage_GetBalanceByAddressResponse + // *KaspadMessage_GetBalancesByAddressesRequest + // *KaspadMessage_GetBalancesByAddressesResponse Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1009,6 +1006,20 @@ func (x *KaspadMessage) GetGetBalanceByAddressResponse() *GetBalanceByAddressRes return nil } +func (x *KaspadMessage) GetGetBalancesByAddressesRequest() *GetBalancesByAddressesRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetBalancesByAddressesRequest); ok { + return x.GetBalancesByAddressesRequest + } + return nil +} + +func (x *KaspadMessage) GetGetBalancesByAddressesResponse() *GetBalancesByAddressesResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetBalancesByAddressesResponse); ok { + return x.GetBalancesByAddressesResponse + } + return nil +} + type isKaspadMessage_Payload interface { isKaspadMessage_Payload() } @@ -1481,6 +1492,14 @@ type KaspadMessage_GetBalanceByAddressResponse struct { GetBalanceByAddressResponse *GetBalanceByAddressResponseMessage `protobuf:"bytes,1078,opt,name=getBalanceByAddressResponse,proto3,oneof"` } +type KaspadMessage_GetBalancesByAddressesRequest struct { + GetBalancesByAddressesRequest *GetBalancesByAddressesRequestMessage `protobuf:"bytes,1079,opt,name=getBalancesByAddressesRequest,proto3,oneof"` +} + +type KaspadMessage_GetBalancesByAddressesResponse struct { + GetBalancesByAddressesResponse *GetBalancesByAddressesResponseMessage `protobuf:"bytes,1080,opt,name=getBalancesByAddressesResponse,proto3,oneof"` +} + func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} func (*KaspadMessage_Block) isKaspadMessage_Payload() {} @@ -1715,13 +1734,17 @@ func (*KaspadMessage_GetBalanceByAddressRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetBalanceByAddressResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetBalancesByAddressesRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetBalancesByAddressesResponse) isKaspadMessage_Payload() {} + var File_messages_proto protoreflect.FileDescriptor var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xb8, 0x61, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x6f, 0x22, 0xaf, 0x63, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, @@ -2500,20 +2523,36 @@ var file_messages_proto_rawDesc = []byte{ 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, - 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, - 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xb7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, + 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x67, + 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xb8, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, + 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2647,6 +2686,8 @@ var file_messages_proto_goTypes = []interface{}{ (*VirtualDaaScoreChangedNotificationMessage)(nil), // 114: protowire.VirtualDaaScoreChangedNotificationMessage (*GetBalanceByAddressRequestMessage)(nil), // 115: protowire.GetBalanceByAddressRequestMessage (*GetBalanceByAddressResponseMessage)(nil), // 116: protowire.GetBalanceByAddressResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 117: protowire.GetBalancesByAddressesRequestMessage + (*GetBalancesByAddressesResponseMessage)(nil), // 118: protowire.GetBalancesByAddressesResponseMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -2766,15 +2807,17 @@ var file_messages_proto_depIdxs = []int32{ 114, // 114: protowire.KaspadMessage.virtualDaaScoreChangedNotification:type_name -> protowire.VirtualDaaScoreChangedNotificationMessage 115, // 115: protowire.KaspadMessage.getBalanceByAddressRequest:type_name -> protowire.GetBalanceByAddressRequestMessage 116, // 116: protowire.KaspadMessage.getBalanceByAddressResponse:type_name -> protowire.GetBalanceByAddressResponseMessage - 0, // 117: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 118: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 119: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 120: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 119, // [119:121] is the sub-list for method output_type - 117, // [117:119] is the sub-list for method input_type - 117, // [117:117] is the sub-list for extension type_name - 117, // [117:117] is the sub-list for extension extendee - 0, // [0:117] is the sub-list for field type_name + 117, // 117: protowire.KaspadMessage.getBalancesByAddressesRequest:type_name -> protowire.GetBalancesByAddressesRequestMessage + 118, // 118: protowire.KaspadMessage.getBalancesByAddressesResponse:type_name -> protowire.GetBalancesByAddressesResponseMessage + 0, // 119: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 120: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 121: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 122: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 121, // [121:123] is the sub-list for method output_type + 119, // [119:121] is the sub-list for method input_type + 119, // [119:119] is the sub-list for extension type_name + 119, // [119:119] is the sub-list for extension extendee + 0, // [0:119] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -2916,6 +2959,8 @@ func file_messages_proto_init() { (*KaspadMessage_VirtualDaaScoreChangedNotification)(nil), (*KaspadMessage_GetBalanceByAddressRequest)(nil), (*KaspadMessage_GetBalanceByAddressResponse)(nil), + (*KaspadMessage_GetBalancesByAddressesRequest)(nil), + (*KaspadMessage_GetBalancesByAddressesResponse)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index a960dbb64..8f99f9330 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -126,6 +126,8 @@ message KaspadMessage { VirtualDaaScoreChangedNotificationMessage virtualDaaScoreChangedNotification = 1076; GetBalanceByAddressRequestMessage getBalanceByAddressRequest = 1077; GetBalanceByAddressResponseMessage getBalanceByAddressResponse = 1078; + GetBalancesByAddressesRequestMessage getBalancesByAddressesRequest = 1079; + GetBalancesByAddressesResponseMessage getBalancesByAddressesResponse = 1080; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages_grpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages_grpc.pb.go index 102e61cfd..09653ed68 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages_grpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages_grpc.pb.go @@ -11,7 +11,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 // P2PClient is the client API for P2P service. // @@ -29,7 +30,7 @@ func NewP2PClient(cc grpc.ClientConnInterface) P2PClient { } func (c *p2PClient) MessageStream(ctx context.Context, opts ...grpc.CallOption) (P2P_MessageStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_P2P_serviceDesc.Streams[0], "/protowire.P2P/MessageStream", opts...) + stream, err := c.cc.NewStream(ctx, &P2P_ServiceDesc.Streams[0], "/protowire.P2P/MessageStream", opts...) if err != nil { return nil, err } @@ -71,13 +72,20 @@ type P2PServer interface { type UnimplementedP2PServer struct { } -func (*UnimplementedP2PServer) MessageStream(P2P_MessageStreamServer) error { +func (UnimplementedP2PServer) MessageStream(P2P_MessageStreamServer) error { return status.Errorf(codes.Unimplemented, "method MessageStream not implemented") } -func (*UnimplementedP2PServer) mustEmbedUnimplementedP2PServer() {} +func (UnimplementedP2PServer) mustEmbedUnimplementedP2PServer() {} -func RegisterP2PServer(s *grpc.Server, srv P2PServer) { - s.RegisterService(&_P2P_serviceDesc, srv) +// UnsafeP2PServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to P2PServer will +// result in compilation errors. +type UnsafeP2PServer interface { + mustEmbedUnimplementedP2PServer() +} + +func RegisterP2PServer(s grpc.ServiceRegistrar, srv P2PServer) { + s.RegisterService(&P2P_ServiceDesc, srv) } func _P2P_MessageStream_Handler(srv interface{}, stream grpc.ServerStream) error { @@ -106,7 +114,10 @@ func (x *p2PMessageStreamServer) Recv() (*KaspadMessage, error) { return m, nil } -var _P2P_serviceDesc = grpc.ServiceDesc{ +// P2P_ServiceDesc is the grpc.ServiceDesc for P2P service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var P2P_ServiceDesc = grpc.ServiceDesc{ ServiceName: "protowire.P2P", HandlerType: (*P2PServer)(nil), Methods: []grpc.MethodDesc{}, @@ -137,7 +148,7 @@ func NewRPCClient(cc grpc.ClientConnInterface) RPCClient { } func (c *rPCClient) MessageStream(ctx context.Context, opts ...grpc.CallOption) (RPC_MessageStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_RPC_serviceDesc.Streams[0], "/protowire.RPC/MessageStream", opts...) + stream, err := c.cc.NewStream(ctx, &RPC_ServiceDesc.Streams[0], "/protowire.RPC/MessageStream", opts...) if err != nil { return nil, err } @@ -179,13 +190,20 @@ type RPCServer interface { type UnimplementedRPCServer struct { } -func (*UnimplementedRPCServer) MessageStream(RPC_MessageStreamServer) error { +func (UnimplementedRPCServer) MessageStream(RPC_MessageStreamServer) error { return status.Errorf(codes.Unimplemented, "method MessageStream not implemented") } -func (*UnimplementedRPCServer) mustEmbedUnimplementedRPCServer() {} +func (UnimplementedRPCServer) mustEmbedUnimplementedRPCServer() {} -func RegisterRPCServer(s *grpc.Server, srv RPCServer) { - s.RegisterService(&_RPC_serviceDesc, srv) +// UnsafeRPCServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RPCServer will +// result in compilation errors. +type UnsafeRPCServer interface { + mustEmbedUnimplementedRPCServer() +} + +func RegisterRPCServer(s grpc.ServiceRegistrar, srv RPCServer) { + s.RegisterService(&RPC_ServiceDesc, srv) } func _RPC_MessageStream_Handler(srv interface{}, stream grpc.ServerStream) error { @@ -214,7 +232,10 @@ func (x *rPCMessageStreamServer) Recv() (*KaspadMessage, error) { return m, nil } -var _RPC_serviceDesc = grpc.ServiceDesc{ +// RPC_ServiceDesc is the grpc.ServiceDesc for RPC service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var RPC_ServiceDesc = grpc.ServiceDesc{ ServiceName: "protowire.RPC", HandlerType: (*RPCServer)(nil), Methods: []grpc.MethodDesc{}, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p.pb.go index 30691c3ad..bb5365e5a 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 +// protoc-gen-go v1.26.0 // protoc v3.12.3 // source: p2p.proto package protowire import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type RequestAddressesMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 687bbe400..e19dd9c36 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -10,14 +10,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 +// protoc-gen-go v1.26.0 // protoc v3.12.3 // source: rpc.proto package protowire import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -31,10 +30,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type SubmitBlockResponseMessage_RejectReason int32 const ( @@ -4349,6 +4344,171 @@ func (x *GetBalanceByAddressResponseMessage) GetError() *RPCError { return nil } +type GetBalancesByAddressesRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` +} + +func (x *GetBalancesByAddressesRequestMessage) Reset() { + *x = GetBalancesByAddressesRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBalancesByAddressesRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBalancesByAddressesRequestMessage) ProtoMessage() {} + +func (x *GetBalancesByAddressesRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[75] + 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 GetBalancesByAddressesRequestMessage.ProtoReflect.Descriptor instead. +func (*GetBalancesByAddressesRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{75} +} + +func (x *GetBalancesByAddressesRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +type BalancesByAddressEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Balance uint64 `protobuf:"varint,2,opt,name=balance,proto3" json:"balance,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *BalancesByAddressEntry) Reset() { + *x = BalancesByAddressEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BalancesByAddressEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BalancesByAddressEntry) ProtoMessage() {} + +func (x *BalancesByAddressEntry) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[76] + 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 BalancesByAddressEntry.ProtoReflect.Descriptor instead. +func (*BalancesByAddressEntry) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{76} +} + +func (x *BalancesByAddressEntry) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *BalancesByAddressEntry) GetBalance() uint64 { + if x != nil { + return x.Balance + } + return 0 +} + +func (x *BalancesByAddressEntry) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetBalancesByAddressesResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entries []*BalancesByAddressEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetBalancesByAddressesResponseMessage) Reset() { + *x = GetBalancesByAddressesResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBalancesByAddressesResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBalancesByAddressesResponseMessage) ProtoMessage() {} + +func (x *GetBalancesByAddressesResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[77] + 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 GetBalancesByAddressesResponseMessage.ProtoReflect.Descriptor instead. +func (*GetBalancesByAddressesResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{77} +} + +func (x *GetBalancesByAddressesResponseMessage) GetEntries() []*BalancesByAddressEntry { + if x != nil { + return x.Entries + } + return nil +} + +func (x *GetBalancesByAddressesResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + // GetVirtualSelectedParentBlueScoreRequestMessage requests the blue score of the current selected parent // of the virtual block. type GetVirtualSelectedParentBlueScoreRequestMessage struct { @@ -4360,7 +4520,7 @@ type GetVirtualSelectedParentBlueScoreRequestMessage struct { func (x *GetVirtualSelectedParentBlueScoreRequestMessage) Reset() { *x = GetVirtualSelectedParentBlueScoreRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[75] + mi := &file_rpc_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4373,7 +4533,7 @@ func (x *GetVirtualSelectedParentBlueScoreRequestMessage) String() string { func (*GetVirtualSelectedParentBlueScoreRequestMessage) ProtoMessage() {} func (x *GetVirtualSelectedParentBlueScoreRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[75] + mi := &file_rpc_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4386,7 +4546,7 @@ func (x *GetVirtualSelectedParentBlueScoreRequestMessage) ProtoReflect() protore // Deprecated: Use GetVirtualSelectedParentBlueScoreRequestMessage.ProtoReflect.Descriptor instead. func (*GetVirtualSelectedParentBlueScoreRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{75} + return file_rpc_proto_rawDescGZIP(), []int{78} } type GetVirtualSelectedParentBlueScoreResponseMessage struct { @@ -4401,7 +4561,7 @@ type GetVirtualSelectedParentBlueScoreResponseMessage struct { func (x *GetVirtualSelectedParentBlueScoreResponseMessage) Reset() { *x = GetVirtualSelectedParentBlueScoreResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[76] + mi := &file_rpc_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4414,7 +4574,7 @@ func (x *GetVirtualSelectedParentBlueScoreResponseMessage) String() string { func (*GetVirtualSelectedParentBlueScoreResponseMessage) ProtoMessage() {} func (x *GetVirtualSelectedParentBlueScoreResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[76] + mi := &file_rpc_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4427,7 +4587,7 @@ func (x *GetVirtualSelectedParentBlueScoreResponseMessage) ProtoReflect() protor // Deprecated: Use GetVirtualSelectedParentBlueScoreResponseMessage.ProtoReflect.Descriptor instead. func (*GetVirtualSelectedParentBlueScoreResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{76} + return file_rpc_proto_rawDescGZIP(), []int{79} } func (x *GetVirtualSelectedParentBlueScoreResponseMessage) GetBlueScore() uint64 { @@ -4457,7 +4617,7 @@ type NotifyVirtualSelectedParentBlueScoreChangedRequestMessage struct { func (x *NotifyVirtualSelectedParentBlueScoreChangedRequestMessage) Reset() { *x = NotifyVirtualSelectedParentBlueScoreChangedRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[77] + mi := &file_rpc_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4470,7 +4630,7 @@ func (x *NotifyVirtualSelectedParentBlueScoreChangedRequestMessage) String() str func (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage) ProtoMessage() {} func (x *NotifyVirtualSelectedParentBlueScoreChangedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[77] + mi := &file_rpc_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4483,7 +4643,7 @@ func (x *NotifyVirtualSelectedParentBlueScoreChangedRequestMessage) ProtoReflect // Deprecated: Use NotifyVirtualSelectedParentBlueScoreChangedRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{77} + return file_rpc_proto_rawDescGZIP(), []int{80} } type NotifyVirtualSelectedParentBlueScoreChangedResponseMessage struct { @@ -4497,7 +4657,7 @@ type NotifyVirtualSelectedParentBlueScoreChangedResponseMessage struct { func (x *NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) Reset() { *x = NotifyVirtualSelectedParentBlueScoreChangedResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[78] + mi := &file_rpc_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4510,7 +4670,7 @@ func (x *NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) String() st func (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) ProtoMessage() {} func (x *NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[78] + mi := &file_rpc_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4523,7 +4683,7 @@ func (x *NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) ProtoReflec // Deprecated: Use NotifyVirtualSelectedParentBlueScoreChangedResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{78} + return file_rpc_proto_rawDescGZIP(), []int{81} } func (x *NotifyVirtualSelectedParentBlueScoreChangedResponseMessage) GetError() *RPCError { @@ -4548,7 +4708,7 @@ type VirtualSelectedParentBlueScoreChangedNotificationMessage struct { func (x *VirtualSelectedParentBlueScoreChangedNotificationMessage) Reset() { *x = VirtualSelectedParentBlueScoreChangedNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[79] + mi := &file_rpc_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4561,7 +4721,7 @@ func (x *VirtualSelectedParentBlueScoreChangedNotificationMessage) String() stri func (*VirtualSelectedParentBlueScoreChangedNotificationMessage) ProtoMessage() {} func (x *VirtualSelectedParentBlueScoreChangedNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[79] + mi := &file_rpc_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4574,7 +4734,7 @@ func (x *VirtualSelectedParentBlueScoreChangedNotificationMessage) ProtoReflect( // Deprecated: Use VirtualSelectedParentBlueScoreChangedNotificationMessage.ProtoReflect.Descriptor instead. func (*VirtualSelectedParentBlueScoreChangedNotificationMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{79} + return file_rpc_proto_rawDescGZIP(), []int{82} } func (x *VirtualSelectedParentBlueScoreChangedNotificationMessage) GetVirtualSelectedParentBlueScore() uint64 { @@ -4597,7 +4757,7 @@ type NotifyVirtualDaaScoreChangedRequestMessage struct { func (x *NotifyVirtualDaaScoreChangedRequestMessage) Reset() { *x = NotifyVirtualDaaScoreChangedRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[80] + mi := &file_rpc_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4610,7 +4770,7 @@ func (x *NotifyVirtualDaaScoreChangedRequestMessage) String() string { func (*NotifyVirtualDaaScoreChangedRequestMessage) ProtoMessage() {} func (x *NotifyVirtualDaaScoreChangedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[80] + mi := &file_rpc_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4623,7 +4783,7 @@ func (x *NotifyVirtualDaaScoreChangedRequestMessage) ProtoReflect() protoreflect // Deprecated: Use NotifyVirtualDaaScoreChangedRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyVirtualDaaScoreChangedRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{80} + return file_rpc_proto_rawDescGZIP(), []int{83} } type NotifyVirtualDaaScoreChangedResponseMessage struct { @@ -4637,7 +4797,7 @@ type NotifyVirtualDaaScoreChangedResponseMessage struct { func (x *NotifyVirtualDaaScoreChangedResponseMessage) Reset() { *x = NotifyVirtualDaaScoreChangedResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[81] + mi := &file_rpc_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4650,7 +4810,7 @@ func (x *NotifyVirtualDaaScoreChangedResponseMessage) String() string { func (*NotifyVirtualDaaScoreChangedResponseMessage) ProtoMessage() {} func (x *NotifyVirtualDaaScoreChangedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[81] + mi := &file_rpc_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4663,7 +4823,7 @@ func (x *NotifyVirtualDaaScoreChangedResponseMessage) ProtoReflect() protoreflec // Deprecated: Use NotifyVirtualDaaScoreChangedResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyVirtualDaaScoreChangedResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{81} + return file_rpc_proto_rawDescGZIP(), []int{84} } func (x *NotifyVirtualDaaScoreChangedResponseMessage) GetError() *RPCError { @@ -4688,7 +4848,7 @@ type VirtualDaaScoreChangedNotificationMessage struct { func (x *VirtualDaaScoreChangedNotificationMessage) Reset() { *x = VirtualDaaScoreChangedNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[82] + mi := &file_rpc_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4701,7 +4861,7 @@ func (x *VirtualDaaScoreChangedNotificationMessage) String() string { func (*VirtualDaaScoreChangedNotificationMessage) ProtoMessage() {} func (x *VirtualDaaScoreChangedNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[82] + mi := &file_rpc_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4714,7 +4874,7 @@ func (x *VirtualDaaScoreChangedNotificationMessage) ProtoReflect() protoreflect. // Deprecated: Use VirtualDaaScoreChangedNotificationMessage.ProtoReflect.Descriptor instead. func (*VirtualDaaScoreChangedNotificationMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{82} + return file_rpc_proto_rawDescGZIP(), []int{85} } func (x *VirtualDaaScoreChangedNotificationMessage) GetVirtualDaaScore() uint64 { @@ -4739,7 +4899,7 @@ type NotifyPruningPointUTXOSetOverrideRequestMessage struct { func (x *NotifyPruningPointUTXOSetOverrideRequestMessage) Reset() { *x = NotifyPruningPointUTXOSetOverrideRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[83] + mi := &file_rpc_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4752,7 +4912,7 @@ func (x *NotifyPruningPointUTXOSetOverrideRequestMessage) String() string { func (*NotifyPruningPointUTXOSetOverrideRequestMessage) ProtoMessage() {} func (x *NotifyPruningPointUTXOSetOverrideRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[83] + mi := &file_rpc_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4765,7 +4925,7 @@ func (x *NotifyPruningPointUTXOSetOverrideRequestMessage) ProtoReflect() protore // Deprecated: Use NotifyPruningPointUTXOSetOverrideRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyPruningPointUTXOSetOverrideRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{83} + return file_rpc_proto_rawDescGZIP(), []int{86} } type NotifyPruningPointUTXOSetOverrideResponseMessage struct { @@ -4779,7 +4939,7 @@ type NotifyPruningPointUTXOSetOverrideResponseMessage struct { func (x *NotifyPruningPointUTXOSetOverrideResponseMessage) Reset() { *x = NotifyPruningPointUTXOSetOverrideResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[84] + mi := &file_rpc_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4792,7 +4952,7 @@ func (x *NotifyPruningPointUTXOSetOverrideResponseMessage) String() string { func (*NotifyPruningPointUTXOSetOverrideResponseMessage) ProtoMessage() {} func (x *NotifyPruningPointUTXOSetOverrideResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[84] + mi := &file_rpc_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4805,7 +4965,7 @@ func (x *NotifyPruningPointUTXOSetOverrideResponseMessage) ProtoReflect() protor // Deprecated: Use NotifyPruningPointUTXOSetOverrideResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyPruningPointUTXOSetOverrideResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{84} + return file_rpc_proto_rawDescGZIP(), []int{87} } func (x *NotifyPruningPointUTXOSetOverrideResponseMessage) GetError() *RPCError { @@ -4828,7 +4988,7 @@ type PruningPointUTXOSetOverrideNotificationMessage struct { func (x *PruningPointUTXOSetOverrideNotificationMessage) Reset() { *x = PruningPointUTXOSetOverrideNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[85] + mi := &file_rpc_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4841,7 +5001,7 @@ func (x *PruningPointUTXOSetOverrideNotificationMessage) String() string { func (*PruningPointUTXOSetOverrideNotificationMessage) ProtoMessage() {} func (x *PruningPointUTXOSetOverrideNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[85] + mi := &file_rpc_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4854,7 +5014,7 @@ func (x *PruningPointUTXOSetOverrideNotificationMessage) ProtoReflect() protoref // Deprecated: Use PruningPointUTXOSetOverrideNotificationMessage.ProtoReflect.Descriptor instead. func (*PruningPointUTXOSetOverrideNotificationMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{85} + return file_rpc_proto_rawDescGZIP(), []int{88} } // StopNotifyingPruningPointUTXOSetOverrideRequestMessage unregisters this connection for @@ -4872,7 +5032,7 @@ type StopNotifyingPruningPointUTXOSetOverrideRequestMessage struct { func (x *StopNotifyingPruningPointUTXOSetOverrideRequestMessage) Reset() { *x = StopNotifyingPruningPointUTXOSetOverrideRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[86] + mi := &file_rpc_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4885,7 +5045,7 @@ func (x *StopNotifyingPruningPointUTXOSetOverrideRequestMessage) String() string func (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage) ProtoMessage() {} func (x *StopNotifyingPruningPointUTXOSetOverrideRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[86] + mi := &file_rpc_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4898,7 +5058,7 @@ func (x *StopNotifyingPruningPointUTXOSetOverrideRequestMessage) ProtoReflect() // Deprecated: Use StopNotifyingPruningPointUTXOSetOverrideRequestMessage.ProtoReflect.Descriptor instead. func (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{86} + return file_rpc_proto_rawDescGZIP(), []int{89} } type StopNotifyingPruningPointUTXOSetOverrideResponseMessage struct { @@ -4912,7 +5072,7 @@ type StopNotifyingPruningPointUTXOSetOverrideResponseMessage struct { func (x *StopNotifyingPruningPointUTXOSetOverrideResponseMessage) Reset() { *x = StopNotifyingPruningPointUTXOSetOverrideResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[87] + mi := &file_rpc_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4925,7 +5085,7 @@ func (x *StopNotifyingPruningPointUTXOSetOverrideResponseMessage) String() strin func (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage) ProtoMessage() {} func (x *StopNotifyingPruningPointUTXOSetOverrideResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[87] + mi := &file_rpc_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4938,7 +5098,7 @@ func (x *StopNotifyingPruningPointUTXOSetOverrideResponseMessage) ProtoReflect() // Deprecated: Use StopNotifyingPruningPointUTXOSetOverrideResponseMessage.ProtoReflect.Descriptor instead. func (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{87} + return file_rpc_proto_rawDescGZIP(), []int{90} } func (x *StopNotifyingPruningPointUTXOSetOverrideResponseMessage) GetError() *RPCError { @@ -4960,7 +5120,7 @@ type BanRequestMessage struct { func (x *BanRequestMessage) Reset() { *x = BanRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[88] + mi := &file_rpc_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4973,7 +5133,7 @@ func (x *BanRequestMessage) String() string { func (*BanRequestMessage) ProtoMessage() {} func (x *BanRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[88] + mi := &file_rpc_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4986,7 +5146,7 @@ func (x *BanRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BanRequestMessage.ProtoReflect.Descriptor instead. func (*BanRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{88} + return file_rpc_proto_rawDescGZIP(), []int{91} } func (x *BanRequestMessage) GetIp() string { @@ -5007,7 +5167,7 @@ type BanResponseMessage struct { func (x *BanResponseMessage) Reset() { *x = BanResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[89] + mi := &file_rpc_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5020,7 +5180,7 @@ func (x *BanResponseMessage) String() string { func (*BanResponseMessage) ProtoMessage() {} func (x *BanResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[89] + mi := &file_rpc_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5033,7 +5193,7 @@ func (x *BanResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BanResponseMessage.ProtoReflect.Descriptor instead. func (*BanResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{89} + return file_rpc_proto_rawDescGZIP(), []int{92} } func (x *BanResponseMessage) GetError() *RPCError { @@ -5055,7 +5215,7 @@ type UnbanRequestMessage struct { func (x *UnbanRequestMessage) Reset() { *x = UnbanRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[90] + mi := &file_rpc_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5068,7 +5228,7 @@ func (x *UnbanRequestMessage) String() string { func (*UnbanRequestMessage) ProtoMessage() {} func (x *UnbanRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[90] + mi := &file_rpc_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5081,7 +5241,7 @@ func (x *UnbanRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use UnbanRequestMessage.ProtoReflect.Descriptor instead. func (*UnbanRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{90} + return file_rpc_proto_rawDescGZIP(), []int{93} } func (x *UnbanRequestMessage) GetIp() string { @@ -5102,7 +5262,7 @@ type UnbanResponseMessage struct { func (x *UnbanResponseMessage) Reset() { *x = UnbanResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[91] + mi := &file_rpc_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5115,7 +5275,7 @@ func (x *UnbanResponseMessage) String() string { func (*UnbanResponseMessage) ProtoMessage() {} func (x *UnbanResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[91] + mi := &file_rpc_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5128,7 +5288,7 @@ func (x *UnbanResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use UnbanResponseMessage.ProtoReflect.Descriptor instead. func (*UnbanResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{91} + return file_rpc_proto_rawDescGZIP(), []int{94} } func (x *UnbanResponseMessage) GetError() *RPCError { @@ -5148,7 +5308,7 @@ type GetInfoRequestMessage struct { func (x *GetInfoRequestMessage) Reset() { *x = GetInfoRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[92] + mi := &file_rpc_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5161,7 +5321,7 @@ func (x *GetInfoRequestMessage) String() string { func (*GetInfoRequestMessage) ProtoMessage() {} func (x *GetInfoRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[92] + mi := &file_rpc_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5174,7 +5334,7 @@ func (x *GetInfoRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetInfoRequestMessage.ProtoReflect.Descriptor instead. func (*GetInfoRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{92} + return file_rpc_proto_rawDescGZIP(), []int{95} } type GetInfoResponseMessage struct { @@ -5191,7 +5351,7 @@ type GetInfoResponseMessage struct { func (x *GetInfoResponseMessage) Reset() { *x = GetInfoResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[93] + mi := &file_rpc_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5204,7 +5364,7 @@ func (x *GetInfoResponseMessage) String() string { func (*GetInfoResponseMessage) ProtoMessage() {} func (x *GetInfoResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[93] + mi := &file_rpc_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5217,7 +5377,7 @@ func (x *GetInfoResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetInfoResponseMessage.ProtoReflect.Descriptor instead. func (*GetInfoResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{93} + return file_rpc_proto_rawDescGZIP(), []int{96} } func (x *GetInfoResponseMessage) GetP2PId() string { @@ -5260,7 +5420,7 @@ type EstimateNetworkHashesPerSecondRequestMessage struct { func (x *EstimateNetworkHashesPerSecondRequestMessage) Reset() { *x = EstimateNetworkHashesPerSecondRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[94] + mi := &file_rpc_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5273,7 +5433,7 @@ func (x *EstimateNetworkHashesPerSecondRequestMessage) String() string { func (*EstimateNetworkHashesPerSecondRequestMessage) ProtoMessage() {} func (x *EstimateNetworkHashesPerSecondRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[94] + mi := &file_rpc_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5286,7 +5446,7 @@ func (x *EstimateNetworkHashesPerSecondRequestMessage) ProtoReflect() protorefle // Deprecated: Use EstimateNetworkHashesPerSecondRequestMessage.ProtoReflect.Descriptor instead. func (*EstimateNetworkHashesPerSecondRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{94} + return file_rpc_proto_rawDescGZIP(), []int{97} } func (x *EstimateNetworkHashesPerSecondRequestMessage) GetWindowSize() uint32 { @@ -5315,7 +5475,7 @@ type EstimateNetworkHashesPerSecondResponseMessage struct { func (x *EstimateNetworkHashesPerSecondResponseMessage) Reset() { *x = EstimateNetworkHashesPerSecondResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[95] + mi := &file_rpc_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5328,7 +5488,7 @@ func (x *EstimateNetworkHashesPerSecondResponseMessage) String() string { func (*EstimateNetworkHashesPerSecondResponseMessage) ProtoMessage() {} func (x *EstimateNetworkHashesPerSecondResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[95] + mi := &file_rpc_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5341,7 +5501,7 @@ func (x *EstimateNetworkHashesPerSecondResponseMessage) ProtoReflect() protorefl // Deprecated: Use EstimateNetworkHashesPerSecondResponseMessage.ProtoReflect.Descriptor instead. func (*EstimateNetworkHashesPerSecondResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{95} + return file_rpc_proto_rawDescGZIP(), []int{98} } func (x *EstimateNetworkHashesPerSecondResponseMessage) GetNetworkHashesPerSecond() uint64 { @@ -5923,118 +6083,139 @@ var file_rpc_proto_rawDesc = []byte{ 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x31, - 0x0a, 0x2f, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x7c, 0x0a, 0x30, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x44, + 0x0a, 0x24, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 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, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x90, + 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x31, 0x0a, 0x2f, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x3b, 0x0a, 0x39, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x7c, 0x0a, 0x30, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x39, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x68, 0x0a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x68, 0x0a, 0x3a, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x38, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1e, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x2c, 0x0a, 0x2a, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x29, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x31, 0x0a, 0x2f, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5e, - 0x0a, 0x30, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x38, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1e, + 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x2c, + 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x59, 0x0a, 0x2b, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x29, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x31, + 0x0a, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x30, - 0x0a, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, - 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x38, 0x0a, 0x36, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, - 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, - 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x65, 0x0a, 0x37, 0x53, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, + 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x5e, 0x0a, 0x30, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x40, 0x0a, 0x12, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, + 0x72, 0x22, 0x30, 0x0a, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, 0x36, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x65, 0x0a, + 0x37, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, + 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x40, 0x0a, 0x12, 0x42, 0x61, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x13, 0x55, + 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x70, 0x22, 0x42, 0x0a, 0x14, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0xa2, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x32, + 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x22, 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x61, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, - 0x42, 0x0a, 0x14, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x01, 0x0a, - 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, - 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, + 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6050,7 +6231,7 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 96) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 99) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason (*RPCError)(nil), // 1: protowire.RPCError @@ -6128,27 +6309,30 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetUtxosByAddressesResponseMessage)(nil), // 73: protowire.GetUtxosByAddressesResponseMessage (*GetBalanceByAddressRequestMessage)(nil), // 74: protowire.GetBalanceByAddressRequestMessage (*GetBalanceByAddressResponseMessage)(nil), // 75: protowire.GetBalanceByAddressResponseMessage - (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 76: protowire.GetVirtualSelectedParentBlueScoreRequestMessage - (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 77: protowire.GetVirtualSelectedParentBlueScoreResponseMessage - (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 78: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage - (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 79: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage - (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 80: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage - (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 81: protowire.NotifyVirtualDaaScoreChangedRequestMessage - (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 82: protowire.NotifyVirtualDaaScoreChangedResponseMessage - (*VirtualDaaScoreChangedNotificationMessage)(nil), // 83: protowire.VirtualDaaScoreChangedNotificationMessage - (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 84: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage - (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 85: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage - (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 86: protowire.PruningPointUTXOSetOverrideNotificationMessage - (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 87: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage - (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 88: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage - (*BanRequestMessage)(nil), // 89: protowire.BanRequestMessage - (*BanResponseMessage)(nil), // 90: protowire.BanResponseMessage - (*UnbanRequestMessage)(nil), // 91: protowire.UnbanRequestMessage - (*UnbanResponseMessage)(nil), // 92: protowire.UnbanResponseMessage - (*GetInfoRequestMessage)(nil), // 93: protowire.GetInfoRequestMessage - (*GetInfoResponseMessage)(nil), // 94: protowire.GetInfoResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 95: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 96: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 76: protowire.GetBalancesByAddressesRequestMessage + (*BalancesByAddressEntry)(nil), // 77: protowire.BalancesByAddressEntry + (*GetBalancesByAddressesResponseMessage)(nil), // 78: protowire.GetBalancesByAddressesResponseMessage + (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 79: protowire.GetVirtualSelectedParentBlueScoreRequestMessage + (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreResponseMessage + (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 81: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage + (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage + (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 83: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage + (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 84: protowire.NotifyVirtualDaaScoreChangedRequestMessage + (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedResponseMessage + (*VirtualDaaScoreChangedNotificationMessage)(nil), // 86: protowire.VirtualDaaScoreChangedNotificationMessage + (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 87: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage + (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage + (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 89: protowire.PruningPointUTXOSetOverrideNotificationMessage + (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 90: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage + (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage + (*BanRequestMessage)(nil), // 92: protowire.BanRequestMessage + (*BanResponseMessage)(nil), // 93: protowire.BanResponseMessage + (*UnbanRequestMessage)(nil), // 94: protowire.UnbanRequestMessage + (*UnbanResponseMessage)(nil), // 95: protowire.UnbanResponseMessage + (*GetInfoRequestMessage)(nil), // 96: protowire.GetInfoRequestMessage + (*GetInfoResponseMessage)(nil), // 97: protowire.GetInfoResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 98: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 99: protowire.EstimateNetworkHashesPerSecondResponseMessage } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -6207,20 +6391,23 @@ var file_rpc_proto_depIdxs = []int32{ 69, // 53: protowire.GetUtxosByAddressesResponseMessage.entries:type_name -> protowire.UtxosByAddressesEntry 1, // 54: protowire.GetUtxosByAddressesResponseMessage.error:type_name -> protowire.RPCError 1, // 55: protowire.GetBalanceByAddressResponseMessage.error:type_name -> protowire.RPCError - 1, // 56: protowire.GetVirtualSelectedParentBlueScoreResponseMessage.error:type_name -> protowire.RPCError - 1, // 57: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage.error:type_name -> protowire.RPCError - 1, // 58: protowire.NotifyVirtualDaaScoreChangedResponseMessage.error:type_name -> protowire.RPCError - 1, // 59: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError - 1, // 60: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError - 1, // 61: protowire.BanResponseMessage.error:type_name -> protowire.RPCError - 1, // 62: protowire.UnbanResponseMessage.error:type_name -> protowire.RPCError - 1, // 63: protowire.GetInfoResponseMessage.error:type_name -> protowire.RPCError - 1, // 64: protowire.EstimateNetworkHashesPerSecondResponseMessage.error:type_name -> protowire.RPCError - 65, // [65:65] is the sub-list for method output_type - 65, // [65:65] is the sub-list for method input_type - 65, // [65:65] is the sub-list for extension type_name - 65, // [65:65] is the sub-list for extension extendee - 0, // [0:65] is the sub-list for field type_name + 1, // 56: protowire.BalancesByAddressEntry.error:type_name -> protowire.RPCError + 77, // 57: protowire.GetBalancesByAddressesResponseMessage.entries:type_name -> protowire.BalancesByAddressEntry + 1, // 58: protowire.GetBalancesByAddressesResponseMessage.error:type_name -> protowire.RPCError + 1, // 59: protowire.GetVirtualSelectedParentBlueScoreResponseMessage.error:type_name -> protowire.RPCError + 1, // 60: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage.error:type_name -> protowire.RPCError + 1, // 61: protowire.NotifyVirtualDaaScoreChangedResponseMessage.error:type_name -> protowire.RPCError + 1, // 62: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError + 1, // 63: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError + 1, // 64: protowire.BanResponseMessage.error:type_name -> protowire.RPCError + 1, // 65: protowire.UnbanResponseMessage.error:type_name -> protowire.RPCError + 1, // 66: protowire.GetInfoResponseMessage.error:type_name -> protowire.RPCError + 1, // 67: protowire.EstimateNetworkHashesPerSecondResponseMessage.error:type_name -> protowire.RPCError + 68, // [68:68] is the sub-list for method output_type + 68, // [68:68] 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_rpc_proto_init() } @@ -7130,7 +7317,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVirtualSelectedParentBlueScoreRequestMessage); i { + switch v := v.(*GetBalancesByAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -7142,7 +7329,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVirtualSelectedParentBlueScoreResponseMessage); i { + switch v := v.(*BalancesByAddressEntry); i { case 0: return &v.state case 1: @@ -7154,7 +7341,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage); i { + switch v := v.(*GetBalancesByAddressesResponseMessage); i { case 0: return &v.state case 1: @@ -7166,7 +7353,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage); i { + switch v := v.(*GetVirtualSelectedParentBlueScoreRequestMessage); i { case 0: return &v.state case 1: @@ -7178,7 +7365,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualSelectedParentBlueScoreChangedNotificationMessage); i { + switch v := v.(*GetVirtualSelectedParentBlueScoreResponseMessage); i { case 0: return &v.state case 1: @@ -7190,7 +7377,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualDaaScoreChangedRequestMessage); i { + switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage); i { case 0: return &v.state case 1: @@ -7202,7 +7389,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualDaaScoreChangedResponseMessage); i { + switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage); i { case 0: return &v.state case 1: @@ -7214,7 +7401,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualDaaScoreChangedNotificationMessage); i { + switch v := v.(*VirtualSelectedParentBlueScoreChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -7226,7 +7413,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyPruningPointUTXOSetOverrideRequestMessage); i { + switch v := v.(*NotifyVirtualDaaScoreChangedRequestMessage); i { case 0: return &v.state case 1: @@ -7238,7 +7425,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyPruningPointUTXOSetOverrideResponseMessage); i { + switch v := v.(*NotifyVirtualDaaScoreChangedResponseMessage); i { case 0: return &v.state case 1: @@ -7250,7 +7437,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PruningPointUTXOSetOverrideNotificationMessage); i { + switch v := v.(*VirtualDaaScoreChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -7262,7 +7449,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideRequestMessage); i { + switch v := v.(*NotifyPruningPointUTXOSetOverrideRequestMessage); i { case 0: return &v.state case 1: @@ -7274,7 +7461,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideResponseMessage); i { + switch v := v.(*NotifyPruningPointUTXOSetOverrideResponseMessage); i { case 0: return &v.state case 1: @@ -7286,7 +7473,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BanRequestMessage); i { + switch v := v.(*PruningPointUTXOSetOverrideNotificationMessage); i { case 0: return &v.state case 1: @@ -7298,7 +7485,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BanResponseMessage); i { + switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideRequestMessage); i { case 0: return &v.state case 1: @@ -7310,7 +7497,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbanRequestMessage); i { + switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideResponseMessage); i { case 0: return &v.state case 1: @@ -7322,7 +7509,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbanResponseMessage); i { + switch v := v.(*BanRequestMessage); i { case 0: return &v.state case 1: @@ -7334,7 +7521,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetInfoRequestMessage); i { + switch v := v.(*BanResponseMessage); i { case 0: return &v.state case 1: @@ -7346,7 +7533,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetInfoResponseMessage); i { + switch v := v.(*UnbanRequestMessage); i { case 0: return &v.state case 1: @@ -7358,7 +7545,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateNetworkHashesPerSecondRequestMessage); i { + switch v := v.(*UnbanResponseMessage); i { case 0: return &v.state case 1: @@ -7370,6 +7557,42 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetInfoRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetInfoResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EstimateNetworkHashesPerSecondRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EstimateNetworkHashesPerSecondResponseMessage); i { case 0: return &v.state @@ -7388,7 +7611,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 96, + NumMessages: 99, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index f17f1e7d4..b1dd4a861 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -512,6 +512,23 @@ message GetBalanceByAddressResponseMessage { RPCError error = 1000; } +message GetBalancesByAddressesRequestMessage { + repeated string addresses = 1; +} + +message BalancesByAddressEntry{ + string address = 1; + uint64 balance = 2; + + RPCError error = 1000; +} + +message GetBalancesByAddressesResponseMessage { + repeated BalancesByAddressEntry entries = 1; + + RPCError error = 1000; +} + // GetVirtualSelectedParentBlueScoreRequestMessage requests the blue score of the current selected parent // of the virtual block. message GetVirtualSelectedParentBlueScoreRequestMessage { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_balances_by_addresses.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_balances_by_addresses.go new file mode 100644 index 000000000..7b7d23c05 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_balances_by_addresses.go @@ -0,0 +1,99 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetBalancesByAddressesRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetBalanceByAddressRequest is nil") + } + return x.GetBalancesByAddressesRequest.toAppMessage() +} + +func (x *KaspadMessage_GetBalancesByAddressesRequest) fromAppMessage(message *appmessage.GetBalancesByAddressesRequestMessage) error { + x.GetBalancesByAddressesRequest = &GetBalancesByAddressesRequestMessage{ + Addresses: message.Addresses, + } + return nil +} + +func (x *GetBalancesByAddressesRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetBalanceByAddressRequest is nil") + } + return &appmessage.GetBalancesByAddressesRequestMessage{ + Addresses: x.Addresses, + }, nil +} + +func (x *KaspadMessage_GetBalancesByAddressesResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetBalanceByAddressResponse is nil") + } + return x.GetBalancesByAddressesResponse.toAppMessage() +} + +func (x *KaspadMessage_GetBalancesByAddressesResponse) fromAppMessage(message *appmessage.GetBalancesByAddressesResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + entries := make([]*BalancesByAddressEntry, len(message.Entries)) + for i, entry := range message.Entries { + entries[i] = &BalancesByAddressEntry{} + entries[i].fromAppMessage(entry) + } + x.GetBalancesByAddressesResponse = &GetBalancesByAddressesResponseMessage{ + Entries: entries, + Error: err, + } + return nil +} + +func (x *GetBalancesByAddressesResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetBalancesByAddressesResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && len(x.Entries) != 0 { + return nil, errors.New("GetBalancesByAddressesResponseMessage contains both an error and a response") + } + + entries := make([]*appmessage.BalancesByAddressesEntry, len(x.Entries)) + for i, entry := range x.Entries { + entryAsAppMessage, err := entry.toAppMessage() + if err != nil { + return nil, err + } + entries[i] = entryAsAppMessage + } + + return &appmessage.GetBalancesByAddressesResponseMessage{ + Entries: entries, + Error: rpcErr, + }, nil +} + +func (x *BalancesByAddressEntry) toAppMessage() (*appmessage.BalancesByAddressesEntry, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "BalancesByAddressesEntry is nil") + } + return &appmessage.BalancesByAddressesEntry{ + Address: x.Address, + Balance: x.Balance, + }, nil +} + +func (x *BalancesByAddressEntry) fromAppMessage(message *appmessage.BalancesByAddressesEntry) { + *x = BalancesByAddressEntry{ + Address: message.Address, + Balance: message.Balance, + } +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index b090e2692..277980e4e 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -877,6 +877,20 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil + case *appmessage.GetBalancesByAddressesRequestMessage: + payload := new(KaspadMessage_GetBalancesByAddressesRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetBalancesByAddressesResponseMessage: + payload := new(KaspadMessage_GetBalancesByAddressesResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil default: return nil, nil } diff --git a/infrastructure/network/rpcclient/rpc_get_balances_by_addresses.go b/infrastructure/network/rpcclient/rpc_get_balances_by_addresses.go new file mode 100644 index 000000000..f852065e9 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_balances_by_addresses.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetBalancesByAddresses sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetBalancesByAddresses(addresses []string) (*appmessage.GetBalancesByAddressesResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetBalancesByAddressesRequest(addresses)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetBalancesByAddressesResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getBalancesByAddressesResponse := response.(*appmessage.GetBalancesByAddressesResponseMessage) + if getBalancesByAddressesResponse.Error != nil { + return nil, c.convertRPCError(getBalancesByAddressesResponse.Error) + } + return getBalancesByAddressesResponse, nil +}