finish YourTurn handling v1->v2 switch, add test (#44)

This commit is contained in:
wgr523 2022-01-23 11:26:37 +08:00 committed by GitHub
parent e063f67f34
commit 05d315d2e3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 2 deletions

View file

@ -343,7 +343,13 @@ func (x *XDPoS_v2) YourTurn(chain consensus.ChainReader, parent *types.Header, s
var masterNodes []common.Address
if isEpochSwitch {
if x.config.XDPoSV2Block.Cmp(parent.Number) == 0 {
// TODO: read v1 master nodes
snap, err := x.getSnapshot(chain, x.config.XDPoSV2Block.Uint64())
if err != nil {
log.Error("[YourTurn]Cannot find snapshot at gap num of last V1", "err", err, "number", x.config.XDPoSV2Block.Uint64())
return false, err
}
// the initial snapshot of v1->v2 switch does not need penalty
masterNodes = snap.NextEpochMasterNodes
} else {
// TODO: calc master nodes by smart contract - penalty
// TODO: related to snapshot

View file

@ -35,7 +35,13 @@ func TestYourTurnInitialV2(t *testing.T) {
}
// YourTurn is called before mine first v2 block
adaptor.YourTurn(blockchain, block900.Header(), common.HexToAddress("xdc0278C350152e15fa6FFC712a5A73D704Ce73E2E1"))
b, err := adaptor.YourTurn(blockchain, block900.Header(), common.HexToAddress("xdc0278C350152e15fa6FFC712a5A73D704Ce73E2E1"))
assert.Nil(t, err)
assert.False(t, b)
b, err = adaptor.YourTurn(blockchain, block900.Header(), common.HexToAddress("xdc03d9e17Ae3fF2c6712E44e25B09Ac5ee91f6c9ff"))
assert.Nil(t, err)
// round=1, so masternode[1] has YourTurn = True
assert.True(t, b)
assert.Equal(t, adaptor.EngineV2.GetCurrentRound(), utils.Round(1))
snap, err := adaptor.EngineV2.GetSnapshot(blockchain, block900.Header())