Add randomness contract support to AuthorityRound. (#10946)
* Add randomness contract support to Authority Round. Changes have been cherry-picked from poanetwork's aura-pos branch. Most of the work has been done by @mbr. * Address review comments for randomness contract. Co-Authored-By: David <dvdplm@gmail.com> * Rename revealSecret to revealNumber * Update Randomness contract bytecode * Use H256, rename secret to random number. * Use get_commit_and_cipher * Clean up Miner::prepare_block. * Remove is_reveal_phase call. * Add more comments, require randomness contract map. * Simplify run_randomness_phase * Address review comments. * Remove Client::transact_contract.
This commit is contained in:
@@ -33,7 +33,7 @@ use common_types::{
|
||||
engines::machine::{Call, AuxiliaryData},
|
||||
};
|
||||
|
||||
use client_traits::EngineClient;
|
||||
use client_traits::{EngineClient, TransactionRequest};
|
||||
use engine::SystemCall;
|
||||
|
||||
use crate::{
|
||||
@@ -68,7 +68,7 @@ impl ValidatorContract {
|
||||
|
||||
match client.as_full_client() {
|
||||
Some(c) => {
|
||||
c.transact_contract(self.contract_address, data)
|
||||
c.transact(TransactionRequest::call(self.contract_address, data))
|
||||
.map_err(|e| format!("Transaction import error: {}", e))?;
|
||||
Ok(())
|
||||
},
|
||||
@@ -149,7 +149,7 @@ mod tests {
|
||||
use accounts::AccountProvider;
|
||||
use call_contract::CallContract;
|
||||
use common_types::{header::Header, ids::BlockId};
|
||||
use client_traits::{BlockChainClient, ChainInfo, BlockInfo};
|
||||
use client_traits::{BlockChainClient, ChainInfo, BlockInfo, TransactionRequest};
|
||||
use ethcore::{
|
||||
miner::{self, MinerService},
|
||||
test_helpers::generate_dummy_client_with_spec,
|
||||
@@ -225,7 +225,7 @@ mod tests {
|
||||
assert_eq!(client.chain_info().best_block_number, 2);
|
||||
|
||||
// Check if misbehaving validator was removed.
|
||||
client.transact_contract(Default::default(), Default::default()).unwrap();
|
||||
client.transact(TransactionRequest::call(Default::default(), Default::default())).unwrap();
|
||||
client.engine().step();
|
||||
client.engine().step();
|
||||
assert_eq!(client.chain_info().best_block_number, 2);
|
||||
|
||||
@@ -161,11 +161,13 @@ mod tests {
|
||||
ids::BlockId,
|
||||
verification::Unverified,
|
||||
};
|
||||
use client_traits::{BlockChainClient, BlockInfo, ChainInfo, ImportBlock, EngineClient, ForceUpdateSealing};
|
||||
use client_traits::{
|
||||
BlockChainClient, BlockInfo, ChainInfo, ImportBlock, EngineClient, ForceUpdateSealing, TransactionRequest
|
||||
};
|
||||
use engine::EpochChange;
|
||||
use ethcore::{
|
||||
miner::{self, MinerService},
|
||||
test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data},
|
||||
test_helpers::generate_dummy_client_with_spec,
|
||||
};
|
||||
use ethereum_types::Address;
|
||||
use parity_crypto::publickey::Secret;
|
||||
@@ -190,7 +192,7 @@ mod tests {
|
||||
// Wrong signer for the first block.
|
||||
let signer = Box::new((tap.clone(), v1, "".into()));
|
||||
client.miner().set_author(miner::Author::Sealer(signer));
|
||||
client.transact_contract(Default::default(), Default::default()).unwrap();
|
||||
client.transact(TransactionRequest::call(Default::default(), Default::default())).unwrap();
|
||||
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
|
||||
assert_eq!(client.chain_info().best_block_number, 0);
|
||||
// Right signer for the first block.
|
||||
@@ -199,7 +201,7 @@ mod tests {
|
||||
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
|
||||
assert_eq!(client.chain_info().best_block_number, 1);
|
||||
// This time v0 is wrong.
|
||||
client.transact_contract(Default::default(), Default::default()).unwrap();
|
||||
client.transact(TransactionRequest::call(Default::default(), Default::default())).unwrap();
|
||||
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
|
||||
assert_eq!(client.chain_info().best_block_number, 1);
|
||||
let signer = Box::new((tap.clone(), v1, "".into()));
|
||||
@@ -207,12 +209,12 @@ mod tests {
|
||||
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
|
||||
assert_eq!(client.chain_info().best_block_number, 2);
|
||||
// v1 is still good.
|
||||
client.transact_contract(Default::default(), Default::default()).unwrap();
|
||||
client.transact(TransactionRequest::call(Default::default(), Default::default())).unwrap();
|
||||
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
|
||||
assert_eq!(client.chain_info().best_block_number, 3);
|
||||
|
||||
// Check syncing.
|
||||
let sync_client = generate_dummy_client_with_spec_and_data(spec::new_validator_multi, 0, 0, &[]);
|
||||
let sync_client = generate_dummy_client_with_spec(spec::new_validator_multi);
|
||||
sync_client.engine().register_client(Arc::downgrade(&sync_client) as _);
|
||||
for i in 1..4 {
|
||||
sync_client.import_block(Unverified::from_rlp(client.block(BlockId::Number(i)).unwrap().into_inner()).unwrap()).unwrap();
|
||||
|
||||
@@ -468,7 +468,7 @@ mod tests {
|
||||
use engine::{EpochChange, Proof};
|
||||
use ethcore::{
|
||||
miner::{self, MinerService},
|
||||
test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data}
|
||||
test_helpers::generate_dummy_client_with_spec
|
||||
};
|
||||
use parity_crypto::publickey::Secret;
|
||||
use ethereum_types::Address;
|
||||
@@ -551,7 +551,7 @@ mod tests {
|
||||
assert_eq!(client.chain_info().best_block_number, 3);
|
||||
|
||||
// Check syncing.
|
||||
let sync_client = generate_dummy_client_with_spec_and_data(spec::new_validator_safe_contract, 0, 0, &[]);
|
||||
let sync_client = generate_dummy_client_with_spec(spec::new_validator_safe_contract);
|
||||
sync_client.engine().register_client(Arc::downgrade(&sync_client) as _);
|
||||
for i in 1..4 {
|
||||
sync_client.import_block(Unverified::from_rlp(client.block(BlockId::Number(i)).unwrap().into_inner()).unwrap()).unwrap();
|
||||
|
||||
Reference in New Issue
Block a user