allowed for multiple DB types to be used in the fund indexer

This commit is contained in:
StephenButtolph 2020-05-31 15:43:01 -04:00
parent 07656c7c23
commit f6244aaca4
4 changed files with 23 additions and 4 deletions

View File

@ -13,6 +13,7 @@ import (
"github.com/ava-labs/gecko/snow"
"github.com/ava-labs/gecko/snow/engine/common"
"github.com/ava-labs/gecko/utils/crypto"
"github.com/ava-labs/gecko/utils/hashing"
"github.com/ava-labs/gecko/utils/logging"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/codec"
@ -245,6 +246,16 @@ func TestIssueExportTx(t *testing.T) {
if _, err := state.AVMUTXO(utxoID); err != nil {
t.Fatal(err)
}
addrID := ids.NewID(hashing.ComputeHash256Array(key.PublicKey().Address().Bytes()))
utxoIDs, err := state.AVMFunds(addrID)
if err != nil {
t.Fatal(err)
}
if len(utxoIDs) != 1 {
t.Fatalf("wrong number of utxoIDs %d", len(utxoIDs))
}
}
// Test force accepting an import transaction.

View File

@ -119,7 +119,7 @@ func (s *State) SetStatus(id ids.ID, status choices.Status) error {
// IDs returns a slice of IDs from storage
func (s *State) IDs(id ids.ID) ([]ids.ID, error) {
idSlice := []ids.ID(nil)
iter := prefixdb.New(id.Bytes(), s.DB).NewIterator()
iter := prefixdb.NewNested(id.Bytes(), s.DB).NewIterator()
defer iter.Release()
for iter.Next() {
@ -138,7 +138,7 @@ func (s *State) AddID(id ids.ID, key ids.ID) error {
if key.IsZero() {
return errZeroID
}
db := prefixdb.New(id.Bytes(), s.DB)
db := prefixdb.NewNested(id.Bytes(), s.DB)
return db.Put(key.Bytes(), nil)
}
@ -147,6 +147,6 @@ func (s *State) RemoveID(id ids.ID, key ids.ID) error {
if key.IsZero() {
return errZeroID
}
db := prefixdb.New(id.Bytes(), s.DB)
db := prefixdb.NewNested(id.Bytes(), s.DB)
return db.Delete(key.Bytes())
}

View File

@ -37,6 +37,7 @@ var (
errDSCantValidate = errors.New("new blockchain can't be validated by default Subnet")
errNilSigner = errors.New("nil ShortID 'signer' is not valid")
errNilTo = errors.New("nil ShortID 'to' is not valid")
errNoFunds = errors.New("no spendable funds were found")
)
// Service defines the API calls that can be made to the platform chain
@ -987,6 +988,10 @@ func (service *Service) ImportAVA(_ *http.Request, args *ImportAVAArgs, response
keys = append(keys, signers)
}
if amount == 0 {
return errNoFunds
}
ava.SortTransferableInputsWithSigners(ins, keys)
// Create the transaction

View File

@ -837,7 +837,10 @@ func (vm *VM) GetAtomicUTXOs(addrs ids.Set) ([]*ava.UTXO, error) {
utxoIDs := ids.Set{}
for _, addr := range addrs.List() {
utxos, _ := state.AVMFunds(addr)
utxos, err := state.AVMFunds(addr)
if err != nil {
return nil, err
}
utxoIDs.Add(utxos...)
}