Ver Fonte

unlocking coinbase without knowing address
- accounts: remove Manager.getKey
- cli: for -unlock coinbase, use account manager Coinbase()

zelig há 10 anos atrás
pai
commit
11d2ebc06f
2 ficheiros alterados com 10 adições e 17 exclusões
  1. 3 15
      accounts/account_manager.go
  2. 7 2
      cmd/ethereum/main.go

+ 3 - 15
accounts/account_manager.go

@@ -36,9 +36,8 @@ import (
 	"bytes"
 	"crypto/ecdsa"
 	crand "crypto/rand"
-	"os"
-
 	"errors"
+	"os"
 	"sync"
 	"time"
 
@@ -101,17 +100,6 @@ func (am *Manager) firstAddr() ([]byte, error) {
 	return addrs[0], nil
 }
 
-func (am *Manager) getKey(addr []byte, keyAuth string) (*crypto.Key, error) {
-	if len(addr) == 0 {
-		var err error
-		addr, err = am.firstAddr()
-		if err != nil {
-			return nil, err
-		}
-	}
-	return am.keyStore.GetKey(addr, keyAuth)
-}
-
 func (am *Manager) DeleteAccount(address []byte, auth string) error {
 	return am.keyStore.DeleteKey(address, auth)
 }
@@ -130,7 +118,7 @@ func (am *Manager) Sign(a Account, toSign []byte) (signature []byte, err error)
 // TimedUnlock unlocks the account with the given address.
 // When timeout has passed, the account will be locked again.
 func (am *Manager) TimedUnlock(addr []byte, keyAuth string, timeout time.Duration) error {
-	key, err := am.getKey(addr, keyAuth)
+	key, err := am.keyStore.GetKey(addr, keyAuth)
 	if err != nil {
 		return err
 	}
@@ -143,7 +131,7 @@ func (am *Manager) TimedUnlock(addr []byte, keyAuth string, timeout time.Duratio
 // stays unlocked until the program exits or until a TimedUnlock
 // timeout (started after the call to Unlock) expires.
 func (am *Manager) Unlock(addr []byte, keyAuth string) error {
-	key, err := am.getKey(addr, keyAuth)
+	key, err := am.keyStore.GetKey(addr, keyAuth)
 	if err != nil {
 		return err
 	}

+ 7 - 2
cmd/ethereum/main.go

@@ -294,7 +294,7 @@ func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (pass
 		var err error
 		// Load startup keys. XXX we are going to need a different format
 		// Attempt to unlock the account
-		passphrase := getPassPhrase(ctx, "", false)
+		passphrase = getPassPhrase(ctx, "", false)
 		err = am.Unlock(common.FromHex(account), passphrase)
 		if err != nil {
 			utils.Fatalf("Unlock account failed '%v'", err)
@@ -310,7 +310,11 @@ func startEth(ctx *cli.Context, eth *eth.Ethereum) {
 	account := ctx.GlobalString(utils.UnlockedAccountFlag.Name)
 	if len(account) > 0 {
 		if account == "coinbase" {
-			account = ""
+			accbytes, err := am.Coinbase()
+			if err != nil {
+				utils.Fatalf("no coinbase account: %v", err)
+			}
+			account = common.ToHex(accbytes)
 		}
 		unlockAccount(ctx, am, account)
 	}
@@ -420,6 +424,7 @@ func accountExport(ctx *cli.Context) {
 	}
 	am := utils.GetAccountManager(ctx)
 	auth := unlockAccount(ctx, am, account)
+
 	err := am.Export(keyfile, common.FromHex(account), auth)
 	if err != nil {
 		utils.Fatalf("Account export failed: %v", err)