From 69065c50b54dbe92151438365b31fa5915818c61 Mon Sep 17 00:00:00 2001 From: StephenButtolph Date: Sun, 10 May 2020 19:26:39 -0400 Subject: [PATCH] Changed sk indexing, bumped version --- main/params.go | 2 +- networking/handshake_handlers.go | 4 ++-- vms/avm/service.go | 35 ++++++++++++++++++++++++-------- vms/avm/user_state.go | 11 +++++----- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/main/params.go b/main/params.go index a216720..f0fcec4 100644 --- a/main/params.go +++ b/main/params.go @@ -28,7 +28,7 @@ import ( ) const ( - dbVersion = "v0.2.0" + dbVersion = "v0.3.0" defaultDbDir = "~/.gecko/db" ) diff --git a/networking/handshake_handlers.go b/networking/handshake_handlers.go index eeb94cf..5190c6c 100644 --- a/networking/handshake_handlers.go +++ b/networking/handshake_handlers.go @@ -68,8 +68,8 @@ var ( VersionPrefix = "avalanche/" VersionSeparator = "." MajorVersion = 0 - MinorVersion = 2 - PatchVersion = 1 + MinorVersion = 3 + PatchVersion = 0 ClientVersion = fmt.Sprintf("%s%d%s%d%s%d", VersionPrefix, MajorVersion, diff --git a/vms/avm/service.go b/vms/avm/service.go index 613bf0c..ec2b7a8 100644 --- a/vms/avm/service.go +++ b/vms/avm/service.go @@ -16,10 +16,11 @@ import ( "github.com/ava-labs/gecko/utils/formatting" "github.com/ava-labs/gecko/utils/hashing" "github.com/ava-labs/gecko/utils/json" - safemath "github.com/ava-labs/gecko/utils/math" "github.com/ava-labs/gecko/vms/components/ava" "github.com/ava-labs/gecko/vms/components/verify" "github.com/ava-labs/gecko/vms/secp256k1fx" + + safemath "github.com/ava-labs/gecko/utils/math" ) var ( @@ -511,7 +512,7 @@ func (service *Service) CreateAddress(r *http.Request, args *CreateAddressArgs, } addresses, _ := user.Addresses(db) - addresses = append(addresses, ids.NewID(hashing.ComputeHash256Array(sk.PublicKey().Address().Bytes()))) + addresses = append(addresses, sk.PublicKey().Address()) if err := user.SetAddresses(db, addresses); err != nil { return fmt.Errorf("problem saving address: %w", err) @@ -541,10 +542,11 @@ func (service *Service) ListAddresses(_ *http.Request, args *ListAddressesArgs, return fmt.Errorf("problem retrieving user: %w", err) } + response.Addresses = []string{} + user := userState{vm: service.vm} addresses, err := user.Addresses(db) if err != nil { - response.Addresses = nil return nil } @@ -575,6 +577,10 @@ func (service *Service) ExportKey(r *http.Request, args *ExportKeyArgs, reply *E if err != nil { return fmt.Errorf("problem parsing address: %w", err) } + addr, err := ids.ToShortID(address) + if err != nil { + return fmt.Errorf("problem parsing address: %w", err) + } db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) if err != nil { @@ -583,7 +589,7 @@ func (service *Service) ExportKey(r *http.Request, args *ExportKeyArgs, reply *E user := userState{vm: service.vm} - sk, err := user.Key(db, ids.NewID(hashing.ComputeHash256Array(address))) + sk, err := user.Key(db, addr) if err != nil { return fmt.Errorf("problem retrieving private key: %w", err) } @@ -628,7 +634,7 @@ func (service *Service) ImportKey(r *http.Request, args *ImportKeyArgs, reply *I } addresses, _ := user.Addresses(db) - addresses = append(addresses, ids.NewID(hashing.ComputeHash256Array(sk.PublicKey().Address().Bytes()))) + addresses = append(addresses, sk.PublicKey().Address()) if err := user.SetAddresses(db, addresses); err != nil { return fmt.Errorf("problem saving addresses: %w", err) @@ -687,7 +693,9 @@ func (service *Service) Send(r *http.Request, args *SendArgs, reply *SendReply) addresses, _ := user.Addresses(db) addrs := ids.Set{} - addrs.Add(addresses...) + for _, addr := range addresses { + addrs.Add(ids.NewID(hashing.ComputeHash256Array(addr.Bytes()))) + } utxos, err := service.vm.GetUTXOs(addrs) if err != nil { return fmt.Errorf("problem retrieving user's UTXOs: %w", err) @@ -956,6 +964,10 @@ func (service *Service) SignMintTx(r *http.Request, args *SignMintTxArgs, reply if err != nil { return fmt.Errorf("problem parsing address '%s': %w", args.Minter, err) } + addr, err := ids.ToShortID(minter) + if err != nil { + return fmt.Errorf("problem parsing address '%s': %w", args.Minter, err) + } db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) if err != nil { @@ -964,7 +976,6 @@ func (service *Service) SignMintTx(r *http.Request, args *SignMintTxArgs, reply user := userState{vm: service.vm} - addr := ids.NewID(hashing.ComputeHash256Array(minter)) sk, err := user.Key(db, addr) if err != nil { return fmt.Errorf("problem retriving private key: %w", err) @@ -1094,7 +1105,10 @@ func (service *Service) ImportAVA(_ *http.Request, args *ImportAVAArgs, reply *I addresses, _ := user.Addresses(db) addrs := ids.Set{} - addrs.Add(addresses...) + for _, addr := range addresses { + addrs.Add(ids.NewID(hashing.ComputeHash256Array(addr.Bytes()))) + } + utxos, err := service.vm.GetAtomicUTXOs(addrs) if err != nil { return fmt.Errorf("problem retrieving user's atomic UTXOs: %w", err) @@ -1238,7 +1252,10 @@ func (service *Service) ExportAVA(_ *http.Request, args *ExportAVAArgs, reply *E addresses, _ := user.Addresses(db) addrs := ids.Set{} - addrs.Add(addresses...) + for _, addr := range addresses { + addrs.Add(ids.NewID(hashing.ComputeHash256Array(addr.Bytes()))) + } + utxos, err := service.vm.GetUTXOs(addrs) if err != nil { return fmt.Errorf("problem retrieving user's UTXOs: %w", err) diff --git a/vms/avm/user_state.go b/vms/avm/user_state.go index 363b47f..7d198a3 100644 --- a/vms/avm/user_state.go +++ b/vms/avm/user_state.go @@ -7,14 +7,13 @@ import ( "github.com/ava-labs/gecko/database" "github.com/ava-labs/gecko/ids" "github.com/ava-labs/gecko/utils/crypto" - "github.com/ava-labs/gecko/utils/hashing" ) var addresses = ids.Empty type userState struct{ vm *VM } -func (s *userState) SetAddresses(db database.Database, addrs []ids.ID) error { +func (s *userState) SetAddresses(db database.Database, addrs []ids.ShortID) error { bytes, err := s.vm.codec.Marshal(addrs) if err != nil { return err @@ -22,12 +21,12 @@ func (s *userState) SetAddresses(db database.Database, addrs []ids.ID) error { return db.Put(addresses.Bytes(), bytes) } -func (s *userState) Addresses(db database.Database) ([]ids.ID, error) { +func (s *userState) Addresses(db database.Database) ([]ids.ShortID, error) { bytes, err := db.Get(addresses.Bytes()) if err != nil { return nil, err } - addresses := []ids.ID{} + addresses := []ids.ShortID{} if err := s.vm.codec.Unmarshal(bytes, &addresses); err != nil { return nil, err } @@ -35,10 +34,10 @@ func (s *userState) Addresses(db database.Database) ([]ids.ID, error) { } func (s *userState) SetKey(db database.Database, sk *crypto.PrivateKeySECP256K1R) error { - return db.Put(hashing.ComputeHash256(sk.PublicKey().Address().Bytes()), sk.Bytes()) + return db.Put(sk.PublicKey().Address().Bytes(), sk.Bytes()) } -func (s *userState) Key(db database.Database, address ids.ID) (*crypto.PrivateKeySECP256K1R, error) { +func (s *userState) Key(db database.Database, address ids.ShortID) (*crypto.PrivateKeySECP256K1R, error) { factory := crypto.FactorySECP256K1R{} bytes, err := db.Get(address.Bytes())