Changed sk indexing, bumped version

This commit is contained in:
StephenButtolph 2020-05-10 19:26:39 -04:00
parent 56deaf7c9d
commit 69065c50b5
4 changed files with 34 additions and 18 deletions

View File

@ -28,7 +28,7 @@ import (
)
const (
dbVersion = "v0.2.0"
dbVersion = "v0.3.0"
defaultDbDir = "~/.gecko/db"
)

View File

@ -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,

View File

@ -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)

View File

@ -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())