adjust storage update evm-style (#7812)

This commit is contained in:
Nikolay Volf
2018-02-06 13:57:29 +03:00
committed by Marek Kotewicz
parent fb4582a90e
commit 0a7cebe316
3 changed files with 60 additions and 3 deletions

View File

@@ -218,11 +218,21 @@ impl<'a> Runtime<'a> {
let key = self.h256_at(args.nth(0)?)?;
let val_ptr: u32 = args.nth(1)?;
self.adjusted_charge(|schedule| schedule.sstore_set_gas as u64)?;
let val = self.h256_at(val_ptr)?;
let former_val = self.ext.storage_at(&key).map_err(|_| Error::StorageUpdateError)?;
if former_val == H256::zero() && val != H256::zero() {
self.adjusted_charge(|schedule| schedule.sstore_set_gas as u64)?;
} else {
self.adjusted_charge(|schedule| schedule.sstore_reset_gas as u64)?;
}
self.ext.set_storage(key, val).map_err(|_| Error::StorageUpdateError)?;
if former_val != H256::zero() && val == H256::zero() {
self.ext.inc_sstore_clears();
}
Ok(())
}