Install trigger for DAO-rescue soft-fork.
Soft-fork should only be primed to trigger if the gas-limit of block #1760000 is at most 4,000,000. To accomplish this we pass in the gas limit of that block to EnvInfo so it can inform Schedule. This gets marshalled through `OpenBlock`/`ClosedBlock` and the `enact` functions much like `last_hashes`. `block.rs`'s `env_info()` takes care to ensure that if the current block happens to be #1760000, then we populate with the current `gas_limit`.
This commit is contained in:
@@ -220,7 +220,7 @@ impl<V> Client<V> where V: Verifier {
|
||||
let last_hashes = self.build_last_hashes(header.parent_hash.clone());
|
||||
let db = self.state_db.lock().unwrap().boxed_clone();
|
||||
|
||||
let enact_result = enact_verified(&block, engine, self.tracedb.tracing_enabled(), db, &parent, last_hashes, &self.vm_factory);
|
||||
let enact_result = enact_verified(&block, engine, self.tracedb.tracing_enabled(), db, &parent, last_hashes, self.dao_rescue_block_gas_limit(), &self.vm_factory);
|
||||
if let Err(e) = enact_result {
|
||||
warn!(target: "client", "Block import failed for #{} ({})\nError: {:?}", header.number(), header.hash(), e);
|
||||
return Err(());
|
||||
@@ -462,6 +462,7 @@ impl<V> BlockChainClient for Client<V> where V: Verifier {
|
||||
last_hashes: last_hashes,
|
||||
gas_used: U256::zero(),
|
||||
gas_limit: U256::max_value(),
|
||||
dao_rescue_block_gas_limit: self.dao_rescue_block_gas_limit(),
|
||||
};
|
||||
// that's just a copy of the state.
|
||||
let mut state = self.state();
|
||||
@@ -767,6 +768,7 @@ impl<V> MiningBlockChainClient for Client<V> where V: Verifier {
|
||||
self.state_db.lock().unwrap().boxed_clone(),
|
||||
&self.chain.block_header(&h).expect("h is best block hash: so it's header must exist: qed"),
|
||||
self.build_last_hashes(h.clone()),
|
||||
self.dao_rescue_block_gas_limit(),
|
||||
author,
|
||||
gas_floor_target,
|
||||
extra_data,
|
||||
|
||||
@@ -42,7 +42,7 @@ use header::{BlockNumber, Header};
|
||||
use transaction::{LocalizedTransaction, SignedTransaction};
|
||||
use log_entry::LocalizedLogEntry;
|
||||
use filter::Filter;
|
||||
use views::BlockView;
|
||||
use views::{HeaderView, BlockView};
|
||||
use error::{ImportResult, ExecutionError};
|
||||
use receipt::LocalizedReceipt;
|
||||
use trace::LocalizedTrace;
|
||||
@@ -221,6 +221,13 @@ pub trait BlockChainClient : Sync + Send {
|
||||
Err(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Get `Some` gas limit of block 1_760_000, or `None` if chain is not yet that long.
|
||||
fn dao_rescue_block_gas_limit(&self) -> Option<U256> {
|
||||
self.block_header(BlockID::Number(1_760_000))
|
||||
.map(|header| HeaderView::new(&header).gas_limit())
|
||||
}
|
||||
}
|
||||
|
||||
/// Extended client interface used for mining
|
||||
|
||||
Reference in New Issue
Block a user