mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-01 17:43:45 +00:00
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package miner
|
|
|
|
import (
|
|
"math/big"
|
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
"github.com/ethereum/go-ethereum/log"
|
|
"github.com/ethereum/go-ethereum/params"
|
|
)
|
|
|
|
// SetFullBlock updates the full-block to the given block.
|
|
func (payload *Payload) SetFullBlock(block *types.Block, fees *big.Int) {
|
|
payload.lock.Lock()
|
|
defer payload.lock.Unlock()
|
|
|
|
go payload.afterSetFullBlock()
|
|
|
|
payload.full = block
|
|
payload.fullFees = fees
|
|
|
|
feesInEther := new(big.Float).Quo(new(big.Float).SetInt(fees), big.NewFloat(params.Ether))
|
|
log.Info("Updated payload", "id", payload.id, "number", block.NumberU64(), "hash", block.Hash(),
|
|
"txs", len(block.Transactions()), "gas", block.GasUsed(), "fees", feesInEther,
|
|
"root", block.Root())
|
|
|
|
payload.cond.Broadcast() // fire signal for notifying full block
|
|
}
|
|
|
|
func (payload *Payload) afterSetFullBlock() {
|
|
payload.lock.Lock()
|
|
defer payload.lock.Unlock()
|
|
|
|
select {
|
|
case <-payload.done:
|
|
log.Info("SetFullBlock payload.done received", "id", payload.id)
|
|
return
|
|
default:
|
|
}
|
|
|
|
select {
|
|
case _, ok := <-payload.stop:
|
|
if ok {
|
|
log.Info("SetFullBlock payload.stop received", "id", payload.id)
|
|
return
|
|
}
|
|
default:
|
|
}
|
|
|
|
select {
|
|
case payload.stop <- struct{}{}:
|
|
default:
|
|
}
|
|
}
|