diff --git a/miner/miner.go b/miner/miner.go index 35c036ba75bf..20169f5007e2 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -128,8 +128,8 @@ func (miner *Miner) update() { events.Unsubscribe() } case addr := <-miner.startCh: + miner.SetEtherbase(addr) if canStart { - miner.SetEtherbase(addr) miner.worker.start() } shouldStart = true diff --git a/miner/miner_test.go b/miner/miner_test.go index 20bf2534c2ea..43b31872a498 100644 --- a/miner/miner_test.go +++ b/miner/miner_test.go @@ -192,6 +192,28 @@ func TestCloseMiner(t *testing.T) { waitForMiningState(t, miner, false) } +// TestMinerSetEtherbase checks that etherbase becomes set even if mining isn't +// possible at the moment +func TestMinerSetEtherbase(t *testing.T) { + miner, mux := createMiner(t) + // Start with a 'bad' mining address + miner.Start(common.HexToAddress("0xdead")) + waitForMiningState(t, miner, true) + // Start the downloader + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + // Now user tries to configure proper mining address + miner.Start(common.HexToAddress("0x1337")) + // Stop the downloader and wait for the update loop to run + mux.Post(downloader.DoneEvent{}) + + waitForMiningState(t, miner, true) + // The miner should now be using the good address + if got, exp := miner.coinbase, common.HexToAddress("0x1337"); got != exp { + t.Fatalf("Wrong coinbase, got %x expected %x", got, exp) + } +} + // waitForMiningState waits until either // * the desired mining state was reached // * a timeout was reached which fails the test