Update SF to latest spec (#1386)
* Introduce whitelist for softfork * Use extradata for fork id. * Fix condition.
This commit is contained in:
parent
11314a660d
commit
353b9e91e6
@ -226,15 +226,21 @@ impl State {
|
|||||||
|
|
||||||
// dao attack soft fork
|
// dao attack soft fork
|
||||||
if engine.schedule(&env_info).reject_dao_transactions {
|
if engine.schedule(&env_info).reject_dao_transactions {
|
||||||
// collect all the addresses which have changed.
|
let whitelisted = if let Action::Call(to) = t.action {
|
||||||
let addresses = self.cache.borrow().iter().map(|(addr, _)| addr.clone()).collect::<Vec<_>>();
|
to == Address::from("Da4a4626d3E16e094De3225A751aAb7128e96526") ||
|
||||||
|
to == Address::from("2ba9D006C1D72E67A70b5526Fc6b4b0C0fd6D334")
|
||||||
|
} else { false };
|
||||||
|
if !whitelisted {
|
||||||
|
// collect all the addresses which have changed.
|
||||||
|
let addresses = self.cache.borrow().iter().map(|(addr, _)| addr.clone()).collect::<Vec<_>>();
|
||||||
|
|
||||||
for a in &addresses {
|
for a in &addresses {
|
||||||
if self.code(a).map_or(false, |c| c.sha3() == broken_dao) {
|
if self.code(a).map_or(false, |c| c.sha3() == broken_dao) {
|
||||||
// Figure out if the balance has been reduced.
|
// Figure out if the balance has been reduced.
|
||||||
let maybe_original = SecTrieDB::new(self.db.as_hashdb(), &self.root).expect(SEC_TRIE_DB_UNWRAP_STR).get(&a).map(Account::from_rlp);
|
let maybe_original = SecTrieDB::new(self.db.as_hashdb(), &self.root).expect(SEC_TRIE_DB_UNWRAP_STR).get(&a).map(Account::from_rlp);
|
||||||
if maybe_original.map_or(false, |original| *original.balance() > self.balance(a)) {
|
if maybe_original.map_or(false, |original| *original.balance() > self.balance(a)) {
|
||||||
return Err(Error::Transaction(TransactionError::DAORescue));
|
return Err(Error::Transaction(TransactionError::DAORescue));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,10 +121,14 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn extra_data(&self) -> Bytes {
|
pub fn extra_data(&self) -> Bytes {
|
||||||
match self.args.flag_extradata.as_ref().or(self.args.flag_extra_data.as_ref()) {
|
if !self.args.flag_dont_help_rescue_dao {
|
||||||
Some(ref x) if x.len() <= 32 => x.as_bytes().to_owned(),
|
(b"rescuedao"[..]).to_owned()
|
||||||
None => version_data(),
|
} else {
|
||||||
Some(ref x) => { die!("{}: Extra data must be at most 32 characters.", x); }
|
match self.args.flag_extradata.as_ref().or(self.args.flag_extra_data.as_ref()) {
|
||||||
|
Some(ref x) if x.len() <= 32 => x.as_bytes().to_owned(),
|
||||||
|
None => version_data(),
|
||||||
|
Some(ref x) => { die!("{}: Extra data must be at most 32 characters.", x); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user