OpenBlock::new take IntoIterator instead of mutable ref to Iterator (#10480)

This commit is contained in:
Marek Kotewicz 2019-03-15 15:43:54 +01:00 committed by GitHub
parent a574df3132
commit fb461659c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 32 additions and 32 deletions

View File

@ -162,7 +162,7 @@ pub trait Drain {
impl<'x> OpenBlock<'x> { impl<'x> OpenBlock<'x> {
/// Create a new `OpenBlock` ready for transaction pushing. /// Create a new `OpenBlock` ready for transaction pushing.
pub fn new<'a>( pub fn new<'a, I: IntoIterator<Item = ExtendedHeader>>(
engine: &'x EthEngine, engine: &'x EthEngine,
factories: Factories, factories: Factories,
tracing: bool, tracing: bool,
@ -173,7 +173,7 @@ impl<'x> OpenBlock<'x> {
gas_range_target: (U256, U256), gas_range_target: (U256, U256),
extra_data: Bytes, extra_data: Bytes,
is_epoch_begin: bool, is_epoch_begin: bool,
ancestry: &mut Iterator<Item=ExtendedHeader>, ancestry: I,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
let number = parent.number() + 1; let number = parent.number() + 1;
let state = State::from_existing(db, parent.state_root().clone(), engine.account_start_nonce(number), factories)?; let state = State::from_existing(db, parent.state_root().clone(), engine.account_start_nonce(number), factories)?;
@ -195,7 +195,7 @@ impl<'x> OpenBlock<'x> {
engine.populate_from_parent(&mut r.block.header, parent); engine.populate_from_parent(&mut r.block.header, parent);
engine.machine().on_new_block(&mut r.block)?; engine.machine().on_new_block(&mut r.block)?;
engine.on_new_block(&mut r.block, is_epoch_begin, ancestry)?; engine.on_new_block(&mut r.block, is_epoch_begin, &mut ancestry.into_iter())?;
Ok(r) Ok(r)
} }
@ -592,7 +592,7 @@ mod tests {
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
)?; )?;
b.populate_from(&header); b.populate_from(&header);
@ -627,7 +627,7 @@ mod tests {
let genesis_header = spec.genesis_header(); let genesis_header = spec.genesis_header();
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b = OpenBlock::new(&*spec.engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b = OpenBlock::new(&*spec.engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b = b.close_and_lock().unwrap(); let b = b.close_and_lock().unwrap();
let _ = b.seal(&*spec.engine, vec![]); let _ = b.seal(&*spec.engine, vec![]);
} }
@ -641,7 +641,7 @@ mod tests {
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes.clone(), Address::zero(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap() let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes.clone(), Address::zero(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap()
.close_and_lock().unwrap().seal(engine, vec![]).unwrap(); .close_and_lock().unwrap().seal(engine, vec![]).unwrap();
let orig_bytes = b.rlp_bytes(); let orig_bytes = b.rlp_bytes();
let orig_db = b.drain().state.drop().1; let orig_db = b.drain().state.drop().1;
@ -665,7 +665,7 @@ mod tests {
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let mut open_block = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes.clone(), Address::zero(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let mut open_block = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes.clone(), Address::zero(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let mut uncle1_header = Header::new(); let mut uncle1_header = Header::new();
uncle1_header.set_extra_data(b"uncle1".to_vec()); uncle1_header.set_extra_data(b"uncle1".to_vec());
let mut uncle2_header = Header::new(); let mut uncle2_header = Header::new();

View File

@ -2321,7 +2321,7 @@ impl PrepareOpenBlock for Client {
gas_range_target, gas_range_target,
extra_data, extra_data,
is_epoch_begin, is_epoch_begin,
&mut chain.ancestry_with_metadata_iter(best_header.hash()), chain.ancestry_with_metadata_iter(best_header.hash()),
)?; )?;
// Add uncles // Add uncles

View File

@ -416,7 +416,7 @@ impl PrepareOpenBlock for TestBlockChainClient {
gas_range_target, gas_range_target,
extra_data, extra_data,
false, false,
&mut Vec::new().into_iter(), None,
)?; )?;
// TODO [todr] Override timestamp for predictability // TODO [todr] Override timestamp for predictability
open_block.set_timestamp(*self.latest_block_timestamp.read()); open_block.set_timestamp(*self.latest_block_timestamp.read());

View File

@ -1628,9 +1628,9 @@ mod tests {
let db1 = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db1 = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let db2 = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db2 = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes, addr2, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes, addr2, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b2 = b2.close_and_lock().unwrap(); let b2 = b2.close_and_lock().unwrap();
engine.set_signer(Box::new((tap.clone(), addr1, "1".into()))); engine.set_signer(Box::new((tap.clone(), addr1, "1".into())));
@ -1662,9 +1662,9 @@ mod tests {
let db2 = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db2 = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes, addr2, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes, addr2, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b2 = b2.close_and_lock().unwrap(); let b2 = b2.close_and_lock().unwrap();
engine.set_signer(Box::new((tap.clone(), addr1, "1".into()))); engine.set_signer(Box::new((tap.clone(), addr1, "1".into())));
@ -1898,7 +1898,7 @@ mod tests {
engine.set_signer(Box::new((tap.clone(), addr1, "1".into()))); engine.set_signer(Box::new((tap.clone(), addr1, "1".into())));
let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
// the block is empty so we don't seal and instead broadcast an empty step message // the block is empty so we don't seal and instead broadcast an empty step message
@ -1936,7 +1936,7 @@ mod tests {
engine.register_client(Arc::downgrade(&client) as _); engine.register_client(Arc::downgrade(&client) as _);
// step 2 // step 2
let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
// since the block is empty it isn't sealed and we generate empty steps // since the block is empty it isn't sealed and we generate empty steps
@ -1945,7 +1945,7 @@ mod tests {
engine.step(); engine.step();
// step 3 // step 3
let mut b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes.clone(), addr2, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let mut b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes.clone(), addr2, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
b2.push_transaction(Transaction { b2.push_transaction(Transaction {
action: Action::Create, action: Action::Create,
nonce: U256::from(0), nonce: U256::from(0),
@ -1989,7 +1989,7 @@ mod tests {
engine.register_client(Arc::downgrade(&client) as _); engine.register_client(Arc::downgrade(&client) as _);
// step 2 // step 2
let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
// since the block is empty it isn't sealed and we generate empty steps // since the block is empty it isn't sealed and we generate empty steps
@ -1998,7 +1998,7 @@ mod tests {
engine.step(); engine.step();
// step 3 // step 3
let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes.clone(), addr2, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes.clone(), addr2, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b2 = b2.close_and_lock().unwrap(); let b2 = b2.close_and_lock().unwrap();
engine.set_signer(Box::new((tap.clone(), addr2, "0".into()))); engine.set_signer(Box::new((tap.clone(), addr2, "0".into())));
assert_eq!(engine.generate_seal(&b2, &genesis_header), Seal::None); assert_eq!(engine.generate_seal(&b2, &genesis_header), Seal::None);
@ -2006,7 +2006,7 @@ mod tests {
// step 4 // step 4
// the spec sets the maximum_empty_steps to 2 so we will now seal an empty block and include the empty step messages // the spec sets the maximum_empty_steps to 2 so we will now seal an empty block and include the empty step messages
let b3 = OpenBlock::new(engine, Default::default(), false, db3, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b3 = OpenBlock::new(engine, Default::default(), false, db3, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b3 = b3.close_and_lock().unwrap(); let b3 = b3.close_and_lock().unwrap();
engine.set_signer(Box::new((tap.clone(), addr1, "1".into()))); engine.set_signer(Box::new((tap.clone(), addr1, "1".into())));
@ -2039,7 +2039,7 @@ mod tests {
engine.register_client(Arc::downgrade(&client) as _); engine.register_client(Arc::downgrade(&client) as _);
// step 2 // step 2
let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b1 = OpenBlock::new(engine, Default::default(), false, db1, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
// since the block is empty it isn't sealed and we generate empty steps // since the block is empty it isn't sealed and we generate empty steps
@ -2049,7 +2049,7 @@ mod tests {
// step 3 // step 3
// the signer of the accumulated empty step message should be rewarded // the signer of the accumulated empty step message should be rewarded
let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b2 = OpenBlock::new(engine, Default::default(), false, db2, &genesis_header, last_hashes.clone(), addr1, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let addr1_balance = b2.state.balance(&addr1).unwrap(); let addr1_balance = b2.state.balance(&addr1).unwrap();
// after closing the block `addr1` should be reward twice, one for the included empty step message and another for block creation // after closing the block `addr1` should be reward twice, one for the included empty step message and another for block creation
@ -2149,7 +2149,7 @@ mod tests {
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
).unwrap(); ).unwrap();
let b1 = b1.close_and_lock().unwrap(); let b1 = b1.close_and_lock().unwrap();
@ -2171,7 +2171,7 @@ mod tests {
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
).unwrap(); ).unwrap();
let addr1_balance = b2.state.balance(&addr1).unwrap(); let addr1_balance = b2.state.balance(&addr1).unwrap();

View File

@ -264,7 +264,7 @@ mod tests {
let genesis_header = spec.genesis_header(); let genesis_header = spec.genesis_header();
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, addr, (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, addr, (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b = b.close_and_lock().unwrap(); let b = b.close_and_lock().unwrap();
if let Seal::Regular(seal) = engine.generate_seal(&b, &genesis_header) { if let Seal::Regular(seal) = engine.generate_seal(&b, &genesis_header) {
assert!(b.try_seal(engine, seal).is_ok()); assert!(b.try_seal(engine, seal).is_ok());

View File

@ -108,7 +108,7 @@ mod tests {
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let genesis_header = spec.genesis_header(); let genesis_header = spec.genesis_header();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::default(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::default(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b = b.close_and_lock().unwrap(); let b = b.close_and_lock().unwrap();
if let Seal::Regular(seal) = engine.generate_seal(&b, &genesis_header) { if let Seal::Regular(seal) = engine.generate_seal(&b, &genesis_header) {
assert!(b.try_seal(engine, seal).is_ok()); assert!(b.try_seal(engine, seal).is_ok());

View File

@ -540,7 +540,7 @@ mod tests {
let genesis_header = spec.genesis_header(); let genesis_header = spec.genesis_header();
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b = b.close().unwrap(); let b = b.close().unwrap();
assert_eq!(b.state.balance(&Address::zero()).unwrap(), U256::from_str("4563918244f40000").unwrap()); assert_eq!(b.state.balance(&Address::zero()).unwrap(), U256::from_str("4563918244f40000").unwrap());
} }
@ -589,7 +589,7 @@ mod tests {
let genesis_header = spec.genesis_header(); let genesis_header = spec.genesis_header();
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let mut b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let mut b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let mut uncle = Header::new(); let mut uncle = Header::new();
let uncle_author: Address = "ef2d6d194084c2de36e0dabfce45d046b37d1106".into(); let uncle_author: Address = "ef2d6d194084c2de36e0dabfce45d046b37d1106".into();
uncle.set_author(uncle_author); uncle.set_author(uncle_author);
@ -607,7 +607,7 @@ mod tests {
let genesis_header = spec.genesis_header(); let genesis_header = spec.genesis_header();
let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap(); let db = spec.ensure_db_good(get_temp_state_db(), &Default::default()).unwrap();
let last_hashes = Arc::new(vec![genesis_header.hash()]); let last_hashes = Arc::new(vec![genesis_header.hash()]);
let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, &mut Vec::new().into_iter()).unwrap(); let b = OpenBlock::new(engine, Default::default(), false, db, &genesis_header, last_hashes, Address::zero(), (3141562.into(), 31415620.into()), vec![], false, None).unwrap();
let b = b.close().unwrap(); let b = b.close().unwrap();
let ubi_contract: Address = "00efdd5883ec628983e9063c7d969fe268bbf310".into(); let ubi_contract: Address = "00efdd5883ec628983e9063c7d969fe268bbf310".into();

View File

@ -155,7 +155,7 @@ pub fn generate_dummy_client_with_spec_and_data<F>(test_spec: F, block_number: u
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
).unwrap(); ).unwrap();
rolling_timestamp += 10; rolling_timestamp += 10;
b.set_timestamp(rolling_timestamp); b.set_timestamp(rolling_timestamp);

View File

@ -86,7 +86,7 @@ fn can_trace_block_and_uncle_reward() {
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
).unwrap(); ).unwrap();
rolling_timestamp += 10; rolling_timestamp += 10;
root_block.set_timestamp(rolling_timestamp); root_block.set_timestamp(rolling_timestamp);
@ -115,7 +115,7 @@ fn can_trace_block_and_uncle_reward() {
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
).unwrap(); ).unwrap();
rolling_timestamp += 10; rolling_timestamp += 10;
parent_block.set_timestamp(rolling_timestamp); parent_block.set_timestamp(rolling_timestamp);
@ -143,7 +143,7 @@ fn can_trace_block_and_uncle_reward() {
(3141562.into(), 31415620.into()), (3141562.into(), 31415620.into()),
vec![], vec![],
false, false,
&mut Vec::new().into_iter(), None,
).unwrap(); ).unwrap();
rolling_timestamp += 10; rolling_timestamp += 10;
block.set_timestamp(rolling_timestamp); block.set_timestamp(rolling_timestamp);