Skip to content

Commit 0dc9b01

Browse files
authored
core: clarify code in forkchoice (#26257)
refactoring without logic change
1 parent 1325fef commit 0dc9b01

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

core/forkchoice.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ func NewForkChoice(chainReader ChainReader, preserve func(header *types.Header)
7474
// In the td mode, the new head is chosen if the corresponding
7575
// total difficulty is higher. In the extern mode, the trusted
7676
// header is always selected as the head.
77-
func (f *ForkChoice) ReorgNeeded(current *types.Header, header *types.Header) (bool, error) {
77+
func (f *ForkChoice) ReorgNeeded(current *types.Header, extern *types.Header) (bool, error) {
7878
var (
7979
localTD = f.chain.GetTd(current.Hash(), current.Number.Uint64())
80-
externTd = f.chain.GetTd(header.Hash(), header.Number.Uint64())
80+
externTd = f.chain.GetTd(extern.Hash(), extern.Number.Uint64())
8181
)
8282
if localTD == nil || externTd == nil {
8383
return false, errors.New("missing td")
@@ -88,21 +88,26 @@ func (f *ForkChoice) ReorgNeeded(current *types.Header, header *types.Header) (b
8888
if ttd := f.chain.Config().TerminalTotalDifficulty; ttd != nil && ttd.Cmp(externTd) <= 0 {
8989
return true, nil
9090
}
91+
9192
// If the total difficulty is higher than our known, add it to the canonical chain
93+
if diff := externTd.Cmp(localTD); diff > 0 {
94+
return true, nil
95+
} else if diff < 0 {
96+
return false, nil
97+
}
98+
// Local and external difficulty is identical.
9299
// Second clause in the if statement reduces the vulnerability to selfish mining.
93100
// Please refer to http://www.cs.cornell.edu/~ie53/publications/btcProcFC.pdf
94-
reorg := externTd.Cmp(localTD) > 0
95-
if !reorg && externTd.Cmp(localTD) == 0 {
96-
number, headNumber := header.Number.Uint64(), current.Number.Uint64()
97-
if number < headNumber {
98-
reorg = true
99-
} else if number == headNumber {
100-
var currentPreserve, externPreserve bool
101-
if f.preserve != nil {
102-
currentPreserve, externPreserve = f.preserve(current), f.preserve(header)
103-
}
104-
reorg = !currentPreserve && (externPreserve || f.rand.Float64() < 0.5)
101+
reorg := false
102+
externNum, localNum := extern.Number.Uint64(), current.Number.Uint64()
103+
if externNum < localNum {
104+
reorg = true
105+
} else if externNum == localNum {
106+
var currentPreserve, externPreserve bool
107+
if f.preserve != nil {
108+
currentPreserve, externPreserve = f.preserve(current), f.preserve(extern)
105109
}
110+
reorg = !currentPreserve && (externPreserve || f.rand.Float64() < 0.5)
106111
}
107112
return reorg, nil
108113
}

0 commit comments

Comments
 (0)