Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
0dc9b01c
Unverified
Commit
0dc9b01c
authored
2 years ago
by
setunapo
Committed by
GitHub
2 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core: clarify code in forkchoice (#26257)
refactoring without logic change
parent
1325fef1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
13 deletions
+18
-13
forkchoice.go
core/forkchoice.go
+18
-13
No files found.
core/forkchoice.go
View file @
0dc9b01c
...
...
@@ -74,10 +74,10 @@ func NewForkChoice(chainReader ChainReader, preserve func(header *types.Header)
// In the td mode, the new head is chosen if the corresponding
// total difficulty is higher. In the extern mode, the trusted
// header is always selected as the head.
func
(
f
*
ForkChoice
)
ReorgNeeded
(
current
*
types
.
Header
,
header
*
types
.
Header
)
(
bool
,
error
)
{
func
(
f
*
ForkChoice
)
ReorgNeeded
(
current
*
types
.
Header
,
extern
*
types
.
Header
)
(
bool
,
error
)
{
var
(
localTD
=
f
.
chain
.
GetTd
(
current
.
Hash
(),
current
.
Number
.
Uint64
())
externTd
=
f
.
chain
.
GetTd
(
header
.
Hash
(),
header
.
Number
.
Uint64
())
externTd
=
f
.
chain
.
GetTd
(
extern
.
Hash
(),
extern
.
Number
.
Uint64
())
)
if
localTD
==
nil
||
externTd
==
nil
{
return
false
,
errors
.
New
(
"missing td"
)
...
...
@@ -88,21 +88,26 @@ func (f *ForkChoice) ReorgNeeded(current *types.Header, header *types.Header) (b
if
ttd
:=
f
.
chain
.
Config
()
.
TerminalTotalDifficulty
;
ttd
!=
nil
&&
ttd
.
Cmp
(
externTd
)
<=
0
{
return
true
,
nil
}
// If the total difficulty is higher than our known, add it to the canonical chain
if
diff
:=
externTd
.
Cmp
(
localTD
);
diff
>
0
{
return
true
,
nil
}
else
if
diff
<
0
{
return
false
,
nil
}
// Local and external difficulty is identical.
// Second clause in the if statement reduces the vulnerability to selfish mining.
// Please refer to http://www.cs.cornell.edu/~ie53/publications/btcProcFC.pdf
reorg
:=
externTd
.
Cmp
(
localTD
)
>
0
if
!
reorg
&&
externTd
.
Cmp
(
localTD
)
==
0
{
number
,
headNumber
:=
header
.
Number
.
Uint64
(),
current
.
Number
.
Uint64
()
if
number
<
headNumber
{
reorg
=
true
}
else
if
number
==
headNumber
{
var
currentPreserve
,
externPreserve
bool
if
f
.
preserve
!=
nil
{
currentPreserve
,
externPreserve
=
f
.
preserve
(
current
),
f
.
preserve
(
header
)
}
reorg
=
!
currentPreserve
&&
(
externPreserve
||
f
.
rand
.
Float64
()
<
0.5
)
reorg
:=
false
externNum
,
localNum
:=
extern
.
Number
.
Uint64
(),
current
.
Number
.
Uint64
()
if
externNum
<
localNum
{
reorg
=
true
}
else
if
externNum
==
localNum
{
var
currentPreserve
,
externPreserve
bool
if
f
.
preserve
!=
nil
{
currentPreserve
,
externPreserve
=
f
.
preserve
(
current
),
f
.
preserve
(
extern
)
}
reorg
=
!
currentPreserve
&&
(
externPreserve
||
f
.
rand
.
Float64
()
<
0.5
)
}
return
reorg
,
nil
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment