diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2019-03-28 18:21:00 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 13:50:05 +0800 |
commit | 99a68792126952cdcab71307b3726229692e0502 (patch) | |
tree | 0486ddc32a9666cf6976774b591f88cae0155feb /dex/handler.go | |
parent | 7c69823928a2c3c2b6ddc7289c264d37f1f7d32e (diff) | |
download | dexon-99a68792126952cdcab71307b3726229692e0502.tar dexon-99a68792126952cdcab71307b3726229692e0502.tar.gz dexon-99a68792126952cdcab71307b3726229692e0502.tar.bz2 dexon-99a68792126952cdcab71307b3726229692e0502.tar.lz dexon-99a68792126952cdcab71307b3726229692e0502.tar.xz dexon-99a68792126952cdcab71307b3726229692e0502.tar.zst dexon-99a68792126952cdcab71307b3726229692e0502.zip |
dex: rebuild connection if dkg reset, core/vm: fix gov (#308)
* dex: rebuild connection if dkg reset
* core: vm: fix governance contract
Diffstat (limited to 'dex/handler.go')
-rw-r--r-- | dex/handler.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/dex/handler.go b/dex/handler.go index 8971ad500..6d0746d2f 100644 --- a/dex/handler.go +++ b/dex/handler.go @@ -1320,6 +1320,7 @@ func (pm *ProtocolManager) peerSetLoop() { pm.peers.BuildConnection(CRSRound) round = CRSRound } + resetCount := uint64(0) for { select { @@ -1334,9 +1335,12 @@ func (pm *ProtocolManager) peerSetLoop() { if newRound == 0 { break } + reset := pm.gov.DKGResetCount(round) - log.Debug("ProtocolManager: new round", "round", newRound) - if newRound <= round { + log.Debug("ProtocolManager: new round", + "round", newRound, + "reset", reset) + if newRound <= round && resetCount == reset { break } @@ -1345,6 +1349,10 @@ func (pm *ProtocolManager) peerSetLoop() { if round >= 1 { pm.peers.ForgetConnection(round - 1) } + } else if newRound == round && resetCount+1 == reset { + pm.peers.ForgetConnection(newRound) + pm.gov.PurgeNotarySet(newRound) + pm.peers.BuildConnection(newRound) } else { // just forget all network connection and rebuild. pm.peers.ForgetConnection(round) @@ -1355,6 +1363,7 @@ func (pm *ProtocolManager) peerSetLoop() { pm.peers.BuildConnection(newRound) } round = newRound + resetCount = reset case <-pm.chainHeadSub.Err(): return } |