1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
extern crate bigint;
extern crate sputnikvm;
use bigint::{Gas, U256, H160, Address};
use sputnikvm::{Precompiled, AccountPatch, Patch,
ID_PRECOMPILED, ECREC_PRECOMPILED, SHA256_PRECOMPILED, RIP160_PRECOMPILED};
pub static FRONTIER_PRECOMPILEDS: [(Address, Option<&'static [u8]>, &'static Precompiled); 4] = [
(H160([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x01]),
None,
&ECREC_PRECOMPILED),
(H160([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x02]),
None,
&SHA256_PRECOMPILED),
(H160([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x03]),
None,
&RIP160_PRECOMPILED),
(H160([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x04]),
None,
&ID_PRECOMPILED),
];
pub struct StateClearingAccountPatch;
impl AccountPatch for StateClearingAccountPatch {
fn initial_nonce() -> U256 { U256::zero() }
fn initial_create_nonce() -> U256 { Self::initial_nonce() + U256::from(1) }
fn empty_considered_exists() -> bool { false }
}
pub struct SpuriousDragonPatch;
impl Patch for SpuriousDragonPatch {
type Account = StateClearingAccountPatch;
fn code_deposit_limit() -> Option<usize> { Some(0x6000) }
fn callstack_limit() -> usize { 1024 }
fn gas_extcode() -> Gas { Gas::from(700usize) }
fn gas_balance() -> Gas { Gas::from(400usize) }
fn gas_sload() -> Gas { Gas::from(200usize) }
fn gas_suicide() -> Gas { Gas::from(5000usize) }
fn gas_suicide_new_account() -> Gas { Gas::from(25000usize) }
fn gas_call() -> Gas { Gas::from(700usize) }
fn gas_expbyte() -> Gas { Gas::from(50usize) }
fn gas_transaction_create() -> Gas { Gas::from(32000usize) }
fn force_code_deposit() -> bool { false }
fn has_delegate_call() -> bool { true }
fn has_static_call() -> bool { false }
fn has_revert() -> bool { false }
fn has_return_data() -> bool { false }
fn has_bitwise_shift() -> bool { false }
fn has_extcodehash() -> bool { false }
fn has_reduced_sstore_gas_metering() -> bool { false }
fn err_on_call_with_more_gas() -> bool { false }
fn call_create_l64_after_gas() -> bool { true }
fn memory_limit() -> usize { usize::max_value() }
fn precompileds() -> &'static [(Address, Option<&'static [u8]>, &'static Precompiled)] {
&FRONTIER_PRECOMPILEDS }
}