From 4eb01b21c8691e277ea9d4048038ede7f9621a82 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 14 Oct 2020 11:59:11 +0200 Subject: [PATCH] miner: set etherbase even if mining isn't possible at the moment (#21707) --- miner/miner.go | 2 +- miner/miner_test.go | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/miner/miner.go b/miner/miner.go index 35c036ba7..20169f500 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 20bf2534c..43b31872a 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