unlocking coinbase without knowing address

- accounts: remove Manager.getKey
- cli: for -unlock coinbase, use account manager Coinbase()
This commit is contained in:
zelig 2015-03-25 15:45:56 +00:00
parent 4ec38e3932
commit 11d2ebc06f
2 changed files with 10 additions and 17 deletions

View File

@ -36,9 +36,8 @@ import (
"bytes" "bytes"
"crypto/ecdsa" "crypto/ecdsa"
crand "crypto/rand" crand "crypto/rand"
"os"
"errors" "errors"
"os"
"sync" "sync"
"time" "time"
@ -101,17 +100,6 @@ func (am *Manager) firstAddr() ([]byte, error) {
return addrs[0], nil 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 { func (am *Manager) DeleteAccount(address []byte, auth string) error {
return am.keyStore.DeleteKey(address, auth) 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. // TimedUnlock unlocks the account with the given address.
// When timeout has passed, the account will be locked again. // When timeout has passed, the account will be locked again.
func (am *Manager) TimedUnlock(addr []byte, keyAuth string, timeout time.Duration) error { 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 { if err != nil {
return err 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 // stays unlocked until the program exits or until a TimedUnlock
// timeout (started after the call to Unlock) expires. // timeout (started after the call to Unlock) expires.
func (am *Manager) Unlock(addr []byte, keyAuth string) error { 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 { if err != nil {
return err return err
} }

View File

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