Add wasmDisableTransition spec option (#60)

* Add wasmDisableTransition spec option
This commit is contained in:
varasev
2020-10-08 23:37:48 +03:00
committed by GitHub
parent 84f675021c
commit cb0513a8b1
4 changed files with 48 additions and 6 deletions

View File

@@ -2919,7 +2919,7 @@ mod tests {
let mut info = EnvInfo::default();
// 100 > 10
// 200 (wasmDisableTransition) > 100 > 10 (wasmActivationTransition)
info.number = 100;
// Network with wasm activated at block 10
@@ -2947,9 +2947,35 @@ mod tests {
// Transaction successfully returned sender
assert_eq!(output[..], sender[..]);
// 1 < 10
// 1 < 10 (wasmActivationTransition)
info.number = 1;
let mut output = [0u8; 20];
let FinalizationResult {
gas_left: result,
return_data,
..
} = {
let schedule = machine.schedule(info.number);
let mut ex = Executive::new(&mut state, &info, &machine, &schedule);
ex.call(
params.clone(),
&mut Substate::new(),
&mut NoopTracer,
&mut NoopVMTracer,
)
.unwrap()
};
(&mut output[..(cmp::min(20, return_data.len()))])
.copy_from_slice(&return_data[..(cmp::min(20, return_data.len()))]);
assert_eq!(result, U256::from(20025));
// Since transaction errored due to wasm was not activated, result is just empty
assert_eq!(output[..], [0u8; 20][..]);
// 200 == wasmDisableTransition
info.number = 200;
let mut output = [0u8; 20];
let FinalizationResult {
gas_left: result,
@@ -2970,7 +2996,7 @@ mod tests {
.copy_from_slice(&return_data[..(cmp::min(20, return_data.len()))]);
assert_eq!(result, U256::from(20025));
// Since transaction errored due to wasm was not activated, result is just empty
// Since transaction errored due to wasm was deactivated, result is just empty
assert_eq!(output[..], [0u8; 20][..]);
}
}

View File

@@ -143,6 +143,8 @@ pub struct CommonParams {
pub remove_dust_contracts: bool,
/// Wasm activation blocknumber, if any disabled initially.
pub wasm_activation_transition: BlockNumber,
/// Wasm deactivation blocknumber, if enabled.
pub wasm_disable_transition: BlockNumber,
/// Number of first block where KIP-4 rules begin. Only has effect if Wasm is activated.
pub kip4_transition: BlockNumber,
/// Number of first block where KIP-6 rules begin. Only has effect if Wasm is activated.
@@ -226,7 +228,9 @@ impl CommonParams {
false => ::vm::CleanDustMode::BasicOnly,
};
}
if block_number >= self.wasm_activation_transition {
if block_number >= self.wasm_activation_transition
&& block_number < self.wasm_disable_transition
{
let mut wasm = ::vm::WasmCosts::default();
if block_number >= self.kip4_transition {
wasm.have_create2 = true;
@@ -362,6 +366,9 @@ impl From<ethjson::spec::Params> for CommonParams {
wasm_activation_transition: p
.wasm_activation_transition
.map_or_else(BlockNumber::max_value, Into::into),
wasm_disable_transition: p
.wasm_disable_transition
.map_or_else(BlockNumber::max_value, Into::into),
kip4_transition: p
.kip4_transition
.map_or_else(BlockNumber::max_value, Into::into),
@@ -628,6 +635,7 @@ impl Spec {
params.eip2315_transition,
params.dust_protection_transition,
params.wasm_activation_transition,
params.wasm_disable_transition,
params.kip4_transition,
params.kip6_transition,
params.max_code_size_transition,