Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 17 additions & 39 deletions miner/bid_simulator.go
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,6 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) {

// ensure simulation exited then start next simulation
b.SetSimulatingBid(parentHash, bidRuntime)
bestBidOnStart := b.GetBestBid(parentHash)

defer func(simStart time.Time) {
logCtx := []any{
Expand All @@ -674,23 +673,21 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) {
b.RemoveSimulatingBid(parentHash)
close(bidRuntime.finished)

if success {
bidRuntime.duration = time.Since(simStart)
bidSimTimer.UpdateSince(simStart)

// only recommit self bid when newBidCh is empty
if len(b.newBidCh) > 0 {
return
}
if !success {
b.DelBestBidToRun(parentHash, bidRuntime.bid)
}

// only recommit last best bid when newBidCh is empty
if len(b.newBidCh) > 0 {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

recommit logic not depend on bid simulation.

return
}
toRecommit := b.GetBestBid(parentHash)
if toRecommit != nil {
select {
case b.newBidCh <- newBidPackage{bid: bidRuntime.bid}:
log.Debug("BidSimulator: recommit", "builder", bidRuntime.bid.Builder,
"bidHash", bidRuntime.bid.Hash().Hex(), "simElapsed", bidRuntime.duration)
case b.newBidCh <- newBidPackage{bid: toRecommit.bid}:
log.Debug("BidSimulator: recommit", "builder", toRecommit.bid.Builder, "bidHash", toRecommit.bid.Hash().Hex())
default:
}
} else {
b.DelBestBidToRun(parentHash, bidRuntime.bid)
}
}(startTS)

Expand Down Expand Up @@ -845,19 +842,10 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) {
bestBid := b.GetBestBid(parentHash)
if bestBid == nil {
winResult := "true[first]"
if bestBidOnStart != nil {
// new block was imported, so the bestBidOnStart was cleared, the bid will be stale and useless.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't happen, clear bestBid delayed a lot of blocks(TriesInMemory).

winResult = "false[stale]"
}
log.Info("[BID RESULT]", "win", winResult, "builder", bidRuntime.bid.Builder, "hash", bidRuntime.bid.Hash().TerminalString())
b.SetBestBid(bidRuntime.bid.ParentHash, bidRuntime)
success = true
return
}

if bidRuntime.bid.Hash() != bestBid.bid.Hash() {
log.Info("[BID RESULT]", "win", winResult, "builder", bidRuntime.bid.Builder, "hash", bidRuntime.bid.Hash().TerminalString(), "simElapsed", time.Since(startTS))
} else if bidRuntime.bid.Hash() != bestBid.bid.Hash() { // skip log flushing when only one bid is present
log.Info("[BID RESULT]",
"win", bidRuntime.packedBlockReward.Cmp(bestBid.packedBlockReward) >= 0,
"win", bidRuntime.packedBlockReward.Cmp(bestBid.packedBlockReward) > 0,

"bidHash", bidRuntime.bid.Hash().TerminalString(),
"bestHash", bestBid.bid.Hash().TerminalString(),
Expand All @@ -873,21 +861,11 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) {
}

// this is the simplest strategy: best for all the delegators.
if bidRuntime.packedBlockReward.Cmp(bestBid.packedBlockReward) >= 0 {
if bestBid == nil || bidRuntime.packedBlockReward.Cmp(bestBid.packedBlockReward) > 0 {
b.SetBestBid(bidRuntime.bid.ParentHash, bidRuntime)
bidRuntime.duration = time.Since(startTS)
bidSimTimer.UpdateSince(startTS)
success = true
return
}

// only recommit last best bid when newBidCh is empty
if len(b.newBidCh) > 0 {
return
}

select {
case b.newBidCh <- newBidPackage{bid: bestBid.bid}:
log.Debug("BidSimulator: recommit last bid", "builder", bidRuntime.bid.Builder, "bidHash", bidRuntime.bid.Hash().Hex())
default:
}
}

Expand Down