accounts: AccountManager -> Manager

This commit is contained in:
Felix Lange 2015-03-08 01:52:49 +01:00
parent 3750ec7b7d
commit fb53a9362e
6 changed files with 37 additions and 36 deletions

View File

@ -52,7 +52,7 @@ type Account struct {
Address []byte Address []byte
} }
type AccountManager struct { type Manager struct {
keyStore crypto.KeyStore2 keyStore crypto.KeyStore2
unlocked map[string]*unlocked unlocked map[string]*unlocked
unlockTime time.Duration unlockTime time.Duration
@ -66,8 +66,8 @@ type unlocked struct {
*crypto.Key *crypto.Key
} }
func NewAccountManager(keyStore crypto.KeyStore2, unlockTime time.Duration) *AccountManager { func NewManager(keyStore crypto.KeyStore2, unlockTime time.Duration) *Manager {
return &AccountManager{ return &Manager{
keyStore: keyStore, keyStore: keyStore,
unlocked: make(map[string]*unlocked), unlocked: make(map[string]*unlocked),
unlockTime: unlockTime, unlockTime: unlockTime,
@ -75,19 +75,19 @@ func NewAccountManager(keyStore crypto.KeyStore2, unlockTime time.Duration) *Acc
} }
// Coinbase returns the account address that mining rewards are sent to. // Coinbase returns the account address that mining rewards are sent to.
func (am *AccountManager) Coinbase() (addr []byte, err error) { func (am *Manager) Coinbase() (addr []byte, err error) {
// TODO: persist coinbase address on disk // TODO: persist coinbase address on disk
return am.firstAddr() return am.firstAddr()
} }
// MainAccount returns the primary account used for transactions. // MainAccount returns the primary account used for transactions.
func (am *AccountManager) Default() (Account, error) { func (am *Manager) Default() (Account, error) {
// TODO: persist main account address on disk // TODO: persist main account address on disk
addr, err := am.firstAddr() addr, err := am.firstAddr()
return Account{Address: addr}, err return Account{Address: addr}, err
} }
func (am *AccountManager) firstAddr() ([]byte, error) { func (am *Manager) firstAddr() ([]byte, error) {
addrs, err := am.keyStore.GetKeyAddresses() addrs, err := am.keyStore.GetKeyAddresses()
if err != nil { if err != nil {
return nil, err return nil, err
@ -98,11 +98,11 @@ func (am *AccountManager) firstAddr() ([]byte, error) {
return addrs[0], nil return addrs[0], nil
} }
func (am *AccountManager) 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)
} }
func (am *AccountManager) Sign(a Account, toSign []byte) (signature []byte, err error) { func (am *Manager) Sign(a Account, toSign []byte) (signature []byte, err error) {
am.mutex.RLock() am.mutex.RLock()
unlockedKey, found := am.unlocked[string(a.Address)] unlockedKey, found := am.unlocked[string(a.Address)]
am.mutex.RUnlock() am.mutex.RUnlock()
@ -113,7 +113,7 @@ func (am *AccountManager) Sign(a Account, toSign []byte) (signature []byte, err
return signature, err return signature, err
} }
func (am *AccountManager) SignLocked(a Account, keyAuth string, toSign []byte) (signature []byte, err error) { func (am *Manager) SignLocked(a Account, keyAuth string, toSign []byte) (signature []byte, err error) {
key, err := am.keyStore.GetKey(a.Address, keyAuth) key, err := am.keyStore.GetKey(a.Address, keyAuth)
if err != nil { if err != nil {
return nil, err return nil, err
@ -124,7 +124,7 @@ func (am *AccountManager) SignLocked(a Account, keyAuth string, toSign []byte) (
return signature, err return signature, err
} }
func (am *AccountManager) NewAccount(auth string) (Account, error) { func (am *Manager) NewAccount(auth string) (Account, error) {
key, err := am.keyStore.GenerateNewKey(crand.Reader, auth) key, err := am.keyStore.GenerateNewKey(crand.Reader, auth)
if err != nil { if err != nil {
return Account{}, err return Account{}, err
@ -132,7 +132,7 @@ func (am *AccountManager) NewAccount(auth string) (Account, error) {
return Account{Address: key.Address}, nil return Account{Address: key.Address}, nil
} }
func (am *AccountManager) Accounts() ([]Account, error) { func (am *Manager) Accounts() ([]Account, error) {
addresses, err := am.keyStore.GetKeyAddresses() addresses, err := am.keyStore.GetKeyAddresses()
if err != nil { if err != nil {
return nil, err return nil, err
@ -148,7 +148,7 @@ func (am *AccountManager) Accounts() ([]Account, error) {
return accounts, err return accounts, err
} }
func (am *AccountManager) addUnlocked(addr []byte, key *crypto.Key) *unlocked { func (am *Manager) addUnlocked(addr []byte, key *crypto.Key) *unlocked {
u := &unlocked{addr: addr, abort: make(chan struct{}), Key: key} u := &unlocked{addr: addr, abort: make(chan struct{}), Key: key}
am.mutex.Lock() am.mutex.Lock()
prev, found := am.unlocked[string(addr)] prev, found := am.unlocked[string(addr)]
@ -162,7 +162,7 @@ func (am *AccountManager) addUnlocked(addr []byte, key *crypto.Key) *unlocked {
return u return u
} }
func (am *AccountManager) dropLater(u *unlocked) { func (am *Manager) dropLater(u *unlocked) {
t := time.NewTimer(am.unlockTime) t := time.NewTimer(am.unlockTime)
defer t.Stop() defer t.Stop()
select { select {

View File

@ -12,7 +12,7 @@ import (
func TestAccountManager(t *testing.T) { func TestAccountManager(t *testing.T) {
ks := crypto.NewKeyStorePlain(ethutil.DefaultDataDir() + "/testaccounts") ks := crypto.NewKeyStorePlain(ethutil.DefaultDataDir() + "/testaccounts")
am := NewAccountManager(ks, 100*time.Millisecond) am := NewManager(ks, 100*time.Millisecond)
pass := "" // not used but required by API pass := "" // not used but required by API
a1, err := am.NewAccount(pass) a1, err := am.NewAccount(pass)
toSign := randentropy.GetEntropyCSPRNG(32) toSign := randentropy.GetEntropyCSPRNG(32)
@ -38,7 +38,7 @@ func TestAccountManager(t *testing.T) {
func TestAccountManagerLocking(t *testing.T) { func TestAccountManagerLocking(t *testing.T) {
ks := crypto.NewKeyStorePassphrase(ethutil.DefaultDataDir() + "/testaccounts") ks := crypto.NewKeyStorePassphrase(ethutil.DefaultDataDir() + "/testaccounts")
am := NewAccountManager(ks, 200*time.Millisecond) am := NewManager(ks, 200*time.Millisecond)
pass := "foo" pass := "foo"
a1, err := am.NewAccount(pass) a1, err := am.NewAccount(pass)
toSign := randentropy.GetEntropyCSPRNG(32) toSign := randentropy.GetEntropyCSPRNG(32)

View File

@ -167,8 +167,8 @@ func GetChain(ctx *cli.Context) (*core.ChainManager, ethutil.Database) {
return core.NewChainManager(db, new(event.TypeMux)), db return core.NewChainManager(db, new(event.TypeMux)), db
} }
func GetAccountManager(ctx *cli.Context) *accounts.AccountManager { func GetAccountManager(ctx *cli.Context) *accounts.Manager {
dataDir := ctx.GlobalString(DataDirFlag.Name) dataDir := ctx.GlobalString(DataDirFlag.Name)
ks := crypto.NewKeyStorePassphrase(path.Join(dataDir, "keys")) ks := crypto.NewKeyStorePassphrase(path.Join(dataDir, "keys"))
return accounts.NewAccountManager(ks, 300*time.Second) return accounts.NewManager(ks, 300*time.Second)
} }

View File

@ -59,7 +59,7 @@ type Config struct {
Dial bool Dial bool
MinerThreads int MinerThreads int
AccountManager *accounts.AccountManager AccountManager *accounts.Manager
} }
func (cfg *Config) parseBootNodes() []*discover.Node { func (cfg *Config) parseBootNodes() []*discover.Node {
@ -115,7 +115,7 @@ type Ethereum struct {
txPool *core.TxPool txPool *core.TxPool
chainManager *core.ChainManager chainManager *core.ChainManager
blockPool *blockpool.BlockPool blockPool *blockpool.BlockPool
accountManager *accounts.AccountManager accountManager *accounts.Manager
whisper *whisper.Whisper whisper *whisper.Whisper
net *p2p.Server net *p2p.Server
@ -206,7 +206,7 @@ func New(config *Config) (*Ethereum, error) {
func (s *Ethereum) Logger() logger.LogSystem { return s.logger } func (s *Ethereum) Logger() logger.LogSystem { return s.logger }
func (s *Ethereum) Name() string { return s.net.Name } func (s *Ethereum) Name() string { return s.net.Name }
func (s *Ethereum) AccountManager() *accounts.AccountManager { return s.accountManager } func (s *Ethereum) AccountManager() *accounts.Manager { return s.accountManager }
func (s *Ethereum) ChainManager() *core.ChainManager { return s.chainManager } func (s *Ethereum) ChainManager() *core.ChainManager { return s.chainManager }
func (s *Ethereum) BlockProcessor() *core.BlockProcessor { return s.blockProcessor } func (s *Ethereum) BlockProcessor() *core.BlockProcessor { return s.blockProcessor }
func (s *Ethereum) TxPool() *core.TxPool { return s.txPool } func (s *Ethereum) TxPool() *core.TxPool { return s.txPool }

View File

@ -6,6 +6,7 @@ import (
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/xeth" "github.com/ethereum/go-ethereum/xeth"
"github.com/obscuren/otto" "github.com/obscuren/otto"

View File

@ -27,7 +27,7 @@ var pipelogger = logger.NewLogger("XETH")
type Backend interface { type Backend interface {
BlockProcessor() *core.BlockProcessor BlockProcessor() *core.BlockProcessor
ChainManager() *core.ChainManager ChainManager() *core.ChainManager
AccountManager() *accounts.AccountManager AccountManager() *accounts.Manager
TxPool() *core.TxPool TxPool() *core.TxPool
PeerCount() int PeerCount() int
IsListening() bool IsListening() bool
@ -42,7 +42,7 @@ type XEth struct {
eth Backend eth Backend
blockProcessor *core.BlockProcessor blockProcessor *core.BlockProcessor
chainManager *core.ChainManager chainManager *core.ChainManager
accountManager *accounts.AccountManager accountManager *accounts.Manager
state *State state *State
whisper *Whisper whisper *Whisper
miner *miner.Miner miner *miner.Miner