Add wasmDisableTransition
spec option (#60)
* Add wasmDisableTransition spec option
This commit is contained in:
parent
6ecc6ddcdf
commit
a95b2de645
@ -42,7 +42,8 @@
|
||||
"eip211Transition": 5067000,
|
||||
"eip214Transition": 5067000,
|
||||
"eip658Transition": 5067000,
|
||||
"wasmActivationTransition": 10
|
||||
"wasmActivationTransition": 10,
|
||||
"wasmDisableTransition": 200
|
||||
},
|
||||
"genesis": {
|
||||
"seal": {
|
||||
|
@ -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][..]);
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -132,6 +132,8 @@ pub struct Params {
|
||||
pub transaction_permission_contract_transition: Option<Uint>,
|
||||
/// Wasm activation block height, if not activated from start
|
||||
pub wasm_activation_transition: Option<Uint>,
|
||||
/// Wasm deactivation block height, if activated.
|
||||
pub wasm_disable_transition: Option<Uint>,
|
||||
/// KIP4 activiation block height.
|
||||
pub kip4_transition: Option<Uint>,
|
||||
/// KIP6 activiation block height.
|
||||
@ -156,7 +158,8 @@ mod tests {
|
||||
"accountStartNonce": "0x01",
|
||||
"gasLimitBoundDivisor": "0x20",
|
||||
"maxCodeSize": "0x1000",
|
||||
"wasmActivationTransition": "0x1010"
|
||||
"wasmActivationTransition": "0x1010",
|
||||
"wasmDisableTransition": "0x2010"
|
||||
}"#;
|
||||
|
||||
let deserialized: Params = serde_json::from_str(s).unwrap();
|
||||
@ -175,6 +178,10 @@ mod tests {
|
||||
deserialized.wasm_activation_transition,
|
||||
Some(Uint(U256::from(0x1010)))
|
||||
);
|
||||
assert_eq!(
|
||||
deserialized.wasm_disable_transition,
|
||||
Some(Uint(U256::from(0x2010)))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
Reference in New Issue
Block a user