aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2015-03-27 05:49:22 +0800
committerzelig <viktor.tron@gmail.com>2015-03-27 05:52:22 +0800
commitb375bbee5fa0b04867cdecdc28e66078a2e32280 (patch)
tree574aecb617218dc7fe9f7d1c0b0a8b32a195f3fa
parentb0b0939879b9fb8453ec1c8fa2ceb522e56df3bc (diff)
downloadgo-tangerine-b375bbee5fa0b04867cdecdc28e66078a2e32280.tar.gz
go-tangerine-b375bbee5fa0b04867cdecdc28e66078a2e32280.tar.zst
go-tangerine-b375bbee5fa0b04867cdecdc28e66078a2e32280.zip
settable etherbase
- etherbase flag for block reward destination - coinbase => etherbase - CLI- eth Config -> eth, xeth -> RPC / Miner - use primary instead of coinbase as the unlock magic wildcard - accounts: firstAddr/Coinbase -> Primary
-rw-r--r--accounts/account_manager.go8
-rw-r--r--cmd/geth/main.go8
-rw-r--r--cmd/utils/flags.go8
-rw-r--r--eth/backend.go27
-rw-r--r--xeth/xeth.go4
5 files changed, 37 insertions, 18 deletions
diff --git a/accounts/account_manager.go b/accounts/account_manager.go
index 34a2c4891..e9eb8f816 100644
--- a/accounts/account_manager.go
+++ b/accounts/account_manager.go
@@ -81,13 +81,7 @@ func (am *Manager) HasAccount(addr []byte) bool {
return false
}
-// Coinbase returns the account address that mining rewards are sent to.
-func (am *Manager) Coinbase() (addr []byte, err error) {
- // TODO: persist coinbase address on disk
- return am.firstAddr()
-}
-
-func (am *Manager) firstAddr() ([]byte, error) {
+func (am *Manager) Primary() (addr []byte, err error) {
addrs, err := am.keyStore.GetKeyAddresses()
if os.IsNotExist(err) {
return nil, ErrNoKeys
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index da505218b..05e2e4ae6 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -221,6 +221,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
utils.LogJSONFlag,
utils.LogLevelFlag,
utils.MaxPeersFlag,
+ utils.EtherbaseFlag,
utils.MinerThreadsFlag,
utils.MiningEnabledFlag,
utils.NATFlag,
@@ -322,10 +323,10 @@ func startEth(ctx *cli.Context, eth *eth.Ethereum) {
account := ctx.GlobalString(utils.UnlockedAccountFlag.Name)
if len(account) > 0 {
- if account == "coinbase" {
- accbytes, err := am.Coinbase()
+ if account == "primary" {
+ accbytes, err := am.Primary()
if err != nil {
- utils.Fatalf("no coinbase account: %v", err)
+ utils.Fatalf("no primary account: %v", err)
}
account = common.ToHex(accbytes)
}
@@ -468,7 +469,6 @@ func dump(ctx *cli.Context) {
} else {
statedb := state.New(block.Root(), stateDb)
fmt.Printf("%s\n", statedb.Dump())
- // fmt.Println(block)
}
}
}
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index f948cdb06..1b5559081 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -96,10 +96,15 @@ var (
Name: "mine",
Usage: "Enable mining",
}
+ EtherbaseFlag = cli.StringFlag{
+ Name: "Etherbase",
+ Usage: "public address for block mining rewards. By default the address of your primary account is used",
+ Value: "primary",
+ }
UnlockedAccountFlag = cli.StringFlag{
Name: "unlock",
- Usage: "unlock the account given until this program exits (prompts for password). '--unlock coinbase' unlocks the primary (coinbase) account",
+ Usage: "unlock the account given until this program exits (prompts for password). '--unlock primary' unlocks the primary account",
Value: "",
}
PasswordFileFlag = cli.StringFlag{
@@ -215,6 +220,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
LogFile: ctx.GlobalString(LogFileFlag.Name),
LogLevel: ctx.GlobalInt(LogLevelFlag.Name),
LogJSON: ctx.GlobalString(LogJSONFlag.Name),
+ Etherbase: ctx.GlobalString(EtherbaseFlag.Name),
MinerThreads: ctx.GlobalInt(MinerThreadsFlag.Name),
AccountManager: GetAccountManager(ctx),
VmDebug: ctx.GlobalBool(VMDebugFlag.Name),
diff --git a/eth/backend.go b/eth/backend.go
index c73e76792..fed0da016 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -63,6 +63,7 @@ type Config struct {
Shh bool
Dial bool
+ Etherbase string
MinerThreads int
AccountManager *accounts.Manager
@@ -140,6 +141,7 @@ type Ethereum struct {
Mining bool
DataDir string
+ etherbase common.Address
clientVersion string
ethVersionId int
netVersionId int
@@ -185,6 +187,7 @@ func New(config *Config) (*Ethereum, error) {
eventMux: &event.TypeMux{},
accountManager: config.AccountManager,
DataDir: config.DataDir,
+ etherbase: common.HexToAddress(config.Etherbase),
clientVersion: config.Name, // TODO should separate from Name
ethVersionId: config.ProtocolVersion,
netVersionId: config.NetworkId,
@@ -297,15 +300,31 @@ func (s *Ethereum) ResetWithGenesisBlock(gb *types.Block) {
}
func (s *Ethereum) StartMining() error {
- cb, err := s.accountManager.Coinbase()
+ eb, err := s.Etherbase()
if err != nil {
- servlogger.Errorf("Cannot start mining without coinbase: %v\n", err)
- return fmt.Errorf("no coinbase: %v", err)
+ err = fmt.Errorf("Cannot start mining without etherbase address: %v", err)
+ servlogger.Errorln(err)
+ return err
+
}
- s.miner.Start(common.BytesToAddress(cb))
+
+ s.miner.Start(eb)
return nil
}
+func (s *Ethereum) Etherbase() (eb common.Address, err error) {
+ eb = s.etherbase
+ if (eb == common.Address{}) {
+ var ebbytes []byte
+ ebbytes, err = s.accountManager.Primary()
+ eb = common.BytesToAddress(ebbytes)
+ if (eb == common.Address{}) {
+ err = fmt.Errorf("no accounts found")
+ }
+ }
+ return
+}
+
func (s *Ethereum) StopMining() { s.miner.Stop() }
func (s *Ethereum) IsMining() bool { return s.miner.Mining() }
func (s *Ethereum) Miner() *miner.Miner { return s.miner }
diff --git a/xeth/xeth.go b/xeth/xeth.go
index bf30fc2fc..3a9855bf3 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -250,8 +250,8 @@ func (self *XEth) IsListening() bool {
}
func (self *XEth) Coinbase() string {
- cb, _ := self.backend.AccountManager().Coinbase()
- return common.ToHex(cb)
+ eb, _ := self.backend.Etherbase()
+ return eb.Hex()
}
func (self *XEth) NumberToHuman(balance string) string {