-
Notifications
You must be signed in to change notification settings - Fork 232
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make kaspawallet store the utxos sorted by amount (#1947)
* Make kaspawallet store the utxos sorted by amount, so that the bigger utxos are spent first - making it less likely a compound will be required * Start refactor addEntryToUTXOSet * Add GetUTXOsByBalances command to rpc * Store list of addresses, updated with the collectAddresses methods (replacing collectUTXOs methods) * Fix wrong commands in GetBalanceByAddress * Rename: refreshExistingUTXOs -> refreshUTXOs Co-authored-by: Ori Newman <[email protected]>
- Loading branch information
1 parent
f452531
commit be3a660
Showing
19 changed files
with
906 additions
and
379 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.