|
|
|
@ -90,6 +90,53 @@ func TestVerifyNewBlock(t *testing.T) { |
|
|
|
|
archiveMode[1] = false |
|
|
|
|
node := New(host, consensus, testDBFactory, nil, archiveMode) |
|
|
|
|
|
|
|
|
|
txs := make(map[common.Address]types.Transactions) |
|
|
|
|
stks := staking.StakingTransactions{} |
|
|
|
|
node.Worker.CommitTransactions( |
|
|
|
|
txs, stks, common.Address{}, |
|
|
|
|
) |
|
|
|
|
commitSigs := make(chan []byte) |
|
|
|
|
go func() { |
|
|
|
|
commitSigs <- []byte{} |
|
|
|
|
}() |
|
|
|
|
block, _ := node.Worker.FinalizeNewBlock( |
|
|
|
|
commitSigs, func() uint64 { return 0 }, common.Address{}, nil, nil, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// work around vrf verification as it's tested in another test.
|
|
|
|
|
node.Blockchain().Config().VRFEpoch = big.NewInt(2) |
|
|
|
|
if err := node.VerifyNewBlock(block); err != nil { |
|
|
|
|
t.Error("New block is not verified successfully:", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestVerifyVRF(t *testing.T) { |
|
|
|
|
blsKey := bls.RandPrivateKey() |
|
|
|
|
pubKey := blsKey.GetPublicKey() |
|
|
|
|
leader := p2p.Peer{IP: "127.0.0.1", Port: "8882", ConsensusPubKey: pubKey} |
|
|
|
|
priKey, _, _ := utils.GenKeyP2P("127.0.0.1", "9902") |
|
|
|
|
host, err := p2p.NewHost(p2p.HostConfig{ |
|
|
|
|
Self: &leader, |
|
|
|
|
BLSKey: priKey, |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Fatalf("newhost failure: %v", err) |
|
|
|
|
} |
|
|
|
|
decider := quorum.NewDecider( |
|
|
|
|
quorum.SuperMajorityVote, shard.BeaconChainShardID, |
|
|
|
|
) |
|
|
|
|
consensus, err := consensus.New( |
|
|
|
|
host, shard.BeaconChainShardID, leader, multibls.GetPrivateKeys(blsKey), decider, |
|
|
|
|
) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Fatalf("Cannot craeate consensus: %v", err) |
|
|
|
|
} |
|
|
|
|
archiveMode := make(map[uint32]bool) |
|
|
|
|
archiveMode[0] = true |
|
|
|
|
archiveMode[1] = false |
|
|
|
|
node := New(host, consensus, testDBFactory, nil, archiveMode) |
|
|
|
|
|
|
|
|
|
consensus.Blockchain = node.Blockchain() |
|
|
|
|
txs := make(map[common.Address]types.Transactions) |
|
|
|
|
stks := staking.StakingTransactions{} |
|
|
|
|
node.Worker.CommitTransactions( |
|
|
|
@ -113,13 +160,21 @@ func TestVerifyNewBlock(t *testing.T) { |
|
|
|
|
nil, |
|
|
|
|
} |
|
|
|
|
com.Slots = append(com.Slots, curNodeID) |
|
|
|
|
shardState.Epoch = big.NewInt(0) |
|
|
|
|
shardState.Epoch = big.NewInt(1) |
|
|
|
|
shardState.Shards = append(shardState.Shards, com) |
|
|
|
|
|
|
|
|
|
node.Consensus.LeaderPubKey = &bls.PublicKeyWrapper{spKey, pubKey} |
|
|
|
|
node.Worker.GetCurrentHeader().SetEpoch(big.NewInt(1)) |
|
|
|
|
node.Consensus.GenerateVrfAndProof(node.Worker.GetCurrentHeader()) |
|
|
|
|
block, _ := node.Worker.FinalizeNewBlock( |
|
|
|
|
commitSigs, func() uint64 { return 0 }, ecdsaAddr, nil, shardState, |
|
|
|
|
) |
|
|
|
|
if err := node.VerifyNewBlock(block); err != nil { |
|
|
|
|
t.Error("New block is not verified successfully:", err) |
|
|
|
|
// Write shard state for the new epoch
|
|
|
|
|
node.Blockchain().WriteShardStateBytes(node.Blockchain().ChainDb(), big.NewInt(1), node.Worker.GetCurrentHeader().ShardState()) |
|
|
|
|
|
|
|
|
|
if err := node.Blockchain().Engine().VerifyVRF( |
|
|
|
|
node.Blockchain(), block.Header(), |
|
|
|
|
); err != nil { |
|
|
|
|
t.Error("New vrf is not verified successfully:", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|