aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/governance.go
diff options
context:
space:
mode:
authorWei-Ning Huang <w@dexon.org>2018-11-16 17:26:50 +0800
committerWei-Ning Huang <w@dexon.org>2019-03-12 12:19:09 +0800
commitc2d461f4c5cefde85173365175d2de8bf234b4aa (patch)
treecd7a3cc61f6befa7359d18f2e6b024452b3c267d /core/vm/governance.go
parentdcdb39cb09464422b1ab13a0b92f95e5378431b6 (diff)
downloaddexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.tar
dexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.tar.gz
dexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.tar.bz2
dexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.tar.lz
dexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.tar.xz
dexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.tar.zst
dexon-c2d461f4c5cefde85173365175d2de8bf234b4aa.zip
core: fix light node synchronization issue (#30)
InsertChain() need to record the correct roundHeight mapping in order to process snapshotRoundHeight() governance method correctly.
Diffstat (limited to 'core/vm/governance.go')
-rw-r--r--core/vm/governance.go20
1 files changed, 11 insertions, 9 deletions
diff --git a/core/vm/governance.go b/core/vm/governance.go
index b38733e1a..f406294d2 100644
--- a/core/vm/governance.go
+++ b/core/vm/governance.go
@@ -1767,16 +1767,18 @@ func (g *GovernanceContract) transferOwnership(newOwner common.Address) ([]byte,
}
func (g *GovernanceContract) snapshotRound(round, height *big.Int) ([]byte, error) {
- // Validate if this mapping is correct.
- realHeight, ok := g.evm.Context.GetRoundHeight(round.Uint64())
- if !ok {
- g.penalize()
- return nil, errExecutionReverted
- }
+ // Validate if this mapping is correct. Only block proposer need to verify this.
+ if g.evm.IsBlockProposer() {
+ realHeight, ok := g.evm.Context.GetRoundHeight(round.Uint64())
+ if !ok {
+ g.penalize()
+ return nil, errExecutionReverted
+ }
- if height.Cmp(new(big.Int).SetUint64(realHeight)) != 0 {
- g.penalize()
- return nil, errExecutionReverted
+ if height.Cmp(new(big.Int).SetUint64(realHeight)) != 0 {
+ g.penalize()
+ return nil, errExecutionReverted
+ }
}
// Only allow updating the next round.