Skip to content

Commit 92e74df

Browse files
authored
Refactor precompile set (#1613)
1 parent ab61be5 commit 92e74df

File tree

12 files changed

+277
-265
lines changed

12 files changed

+277
-265
lines changed

node/src/chain_spec/crab.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,11 @@ pub fn development_config() -> ChainSpec {
7878
// EVM stuff.
7979
"evm": {
8080
"accounts": BTreeMap::from_iter(
81-
<CrabPrecompiles<Runtime>>::used_addresses()
82-
.iter()
81+
Precompiles::set()
82+
.into_iter()
8383
.map(|p| {
8484
(
85-
p.to_owned(),
85+
H160(p),
8686
GenesisAccount {
8787
nonce: Default::default(),
8888
balance: Default::default(),
@@ -236,7 +236,7 @@ pub fn genesis_config() -> ChainSpec {
236236
// EVM stuff.
237237
"evm": {
238238
"accounts": BTreeMap::from_iter(
239-
<CrabPrecompiles<Runtime>>::used_addresses().iter().map(|p| {
239+
Precompiles::set().iter().map(|p| {
240240
(
241241
p,
242242
GenesisAccount {

node/src/chain_spec/darwinia.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,11 @@ pub fn development_config() -> ChainSpec {
7878
// EVM stuff.
7979
"evm": {
8080
"accounts": BTreeMap::from_iter(
81-
<DarwiniaPrecompiles<Runtime>>::used_addresses()
82-
.iter()
81+
Precompiles::set()
82+
.into_iter()
8383
.map(|p| {
8484
(
85-
p.to_owned(),
85+
H160(p),
8686
GenesisAccount {
8787
nonce: Default::default(),
8888
balance: Default::default(),
@@ -225,9 +225,9 @@ pub fn genesis_config() -> ChainSpec {
225225
// EVM stuff.
226226
"evm": {
227227
"accounts": BTreeMap::from_iter(
228-
<DarwiniaPrecompiles<Runtime>>::used_addresses().iter().map(|p| {
228+
Precompiles::set().into_iter().map(|p| {
229229
(
230-
p,
230+
H160(p),
231231
GenesisAccount {
232232
nonce: Default::default(),
233233
balance: Default::default(),

node/src/chain_spec/koi.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ pub fn development_config() -> ChainSpec {
8686
// EVM stuff.
8787
"evm": {
8888
"accounts": BTreeMap::from_iter(
89-
<KoiPrecompiles<Runtime>>::used_addresses()
90-
.iter()
89+
Precompiles::set()
90+
.into_iter()
9191
.map(|p| {
9292
(
93-
p.to_owned(),
93+
H160(p),
9494
GenesisAccount {
9595
nonce: Default::default(),
9696
balance: Default::default(),
@@ -183,7 +183,7 @@ pub fn genesis_config() -> ChainSpec {
183183
// EVM stuff.
184184
"evm": {
185185
"accounts": BTreeMap::from_iter(
186-
<KoiPrecompiles<Runtime>>::used_addresses().iter().map(|p| {
186+
Precompiles::set().iter().map(|p| {
187187
(
188188
p,
189189
GenesisAccount {

precompile/assets/src/mock.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ where
9191
Self(Default::default())
9292
}
9393

94-
pub fn used_addresses() -> [H160; 1] {
94+
pub fn set() -> [H160; 1] {
9595
[addr_of(TEST_ID)]
9696
}
9797
}
@@ -110,7 +110,7 @@ where
110110

111111
fn is_precompile(&self, address: H160, _gas: u64) -> fp_evm::IsPrecompileResult {
112112
fp_evm::IsPrecompileResult::Answer {
113-
is_precompile: Self::used_addresses().contains(&address),
113+
is_precompile: Self::set().contains(&address),
114114
extra_cost: 0,
115115
}
116116
}
@@ -214,6 +214,7 @@ impl ExtBuilder {
214214
}
215215
}
216216

217+
// TODO: unify with the one in `darwinia-common-runtime`.
217218
fn addr_of<V>(v: V) -> H160
218219
where
219220
V: Into<u64>,

precompile/deposit/src/mock.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ where
103103
Self(Default::default())
104104
}
105105

106-
pub fn used_addresses() -> [H160; 1] {
106+
pub fn set() -> [H160; 1] {
107107
[addr(1)]
108108
}
109109
}
@@ -121,7 +121,7 @@ where
121121

122122
fn is_precompile(&self, address: H160, _gas: u64) -> fp_evm::IsPrecompileResult {
123123
fp_evm::IsPrecompileResult::Answer {
124-
is_precompile: Self::used_addresses().contains(&address),
124+
is_precompile: Self::set().contains(&address),
125125
extra_cost: 0,
126126
}
127127
}

precompile/staking/src/mock.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ where
102102
Self(Default::default())
103103
}
104104

105-
pub fn used_addresses() -> [H160; 1] {
105+
pub fn set() -> [H160; 1] {
106106
[addr(1)]
107107
}
108108
}
@@ -120,7 +120,7 @@ where
120120

121121
fn is_precompile(&self, address: H160, _gas: u64) -> fp_evm::IsPrecompileResult {
122122
fp_evm::IsPrecompileResult::Answer {
123-
is_precompile: Self::used_addresses().contains(&address),
123+
is_precompile: Self::set().contains(&address),
124124
extra_cost: 0,
125125
}
126126
}

precompile/state-storage/src/mock.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ where
8383
Self(Default::default())
8484
}
8585

86-
pub fn used_addresses() -> [H160; 1] {
86+
pub fn set() -> [H160; 1] {
8787
[addr(1)]
8888
}
8989
}
@@ -101,7 +101,7 @@ where
101101

102102
fn is_precompile(&self, address: H160, _gas: u64) -> fp_evm::IsPrecompileResult {
103103
fp_evm::IsPrecompileResult::Answer {
104-
is_precompile: Self::used_addresses().contains(&address),
104+
is_precompile: Self::set().contains(&address),
105105
extra_cost: 0,
106106
}
107107
}

runtime/common/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,6 @@ impl pallet_evm::FeeCalculator for FixedGasPrice {
263263
pub struct AssetIdConverter;
264264
impl darwinia_precompile_assets::AccountToAssetId<AccountId, AssetId> for AssetIdConverter {
265265
fn account_to_asset_id(account_id: AccountId) -> AssetId {
266-
let addr: H160 = account_id.into();
267-
addr.to_low_u64_be()
266+
H160::from(account_id).to_low_u64_be()
268267
}
269268
}

runtime/common/src/pallet_config.rs

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,76 @@
1+
pub mod precompiles {
2+
pub const ADDR_EC_RECOVER: [u8; 20] = address_of(0x01);
3+
pub const ADDR_SHA256: [u8; 20] = address_of(0x02);
4+
pub const ADDR_RIPEMD160: [u8; 20] = address_of(0x03);
5+
pub const ADDR_IDENTITY: [u8; 20] = address_of(0x04);
6+
pub const ADDR_MODEXP: [u8; 20] = address_of(0x05);
7+
pub const ADDR_BN128_ADD: [u8; 20] = address_of(0x06);
8+
pub const ADDR_BN128_MUL: [u8; 20] = address_of(0x07);
9+
pub const ADDR_BN128_PAIRING: [u8; 20] = address_of(0x08);
10+
pub const ADDR_BLAKE2F: [u8; 20] = address_of(0x09);
11+
pub const ADDR_BLS12381_G1_ADD: [u8; 20] = address_of(0x0c);
12+
pub const ADDR_BLS12381_G1_MUL: [u8; 20] = address_of(0x0d);
13+
pub const ADDR_BLS12381_G1_MULTI_EXP: [u8; 20] = address_of(0x0e);
14+
pub const ADDR_BLS12381_G2_ADD: [u8; 20] = address_of(0x0f);
15+
pub const ADDR_BLS12381_G2_MUL: [u8; 20] = address_of(0x10);
16+
pub const ADDR_BLS12381_G2_MULTI_EXP: [u8; 20] = address_of(0x11);
17+
pub const ADDR_BLS12381_PAIRING: [u8; 20] = address_of(0x12);
18+
pub const ADDR_BLS12381_MAP_G1: [u8; 20] = address_of(0x13);
19+
pub const ADDR_BLS12381_MAP_G2: [u8; 20] = address_of(0x14);
20+
// [0x400, 0x800) for stable precompiles.
21+
pub const ADDR_STATE_STORAGE: [u8; 20] = address_of(0x400);
22+
pub const ADDR_DISPATCH: [u8; 20] = address_of(0x401);
23+
// [0x402, 0x600) for assets precompiles.
24+
pub const ADDR_KTON: [u8; 20] = address_of(0x402);
25+
pub const ADDR_USDT: [u8; 20] = address_of(0x403);
26+
pub const ADDR_PINK: [u8; 20] = address_of(0x404);
27+
pub const ADDR_DOT: [u8; 20] = address_of(0x405);
28+
pub const ADDR_DEPOSIT_DEPRECATED: [u8; 20] = address_of(0x600);
29+
pub const ADDR_STAKING_DEPRECATED: [u8; 20] = address_of(0x601);
30+
pub const ADDR_CONVICTION_VOTING: [u8; 20] = address_of(0x602);
31+
// [0x800..) for the experimental precompiles.
32+
pub const ADDR_EXPERIMENTAL: [u8; 20] = address_of(0x800);
33+
34+
pub const fn address_of(v: u64) -> [u8; 20] {
35+
[
36+
0,
37+
0,
38+
0,
39+
0,
40+
0,
41+
0,
42+
0,
43+
0,
44+
0,
45+
0,
46+
0,
47+
0,
48+
((v >> 56) & 0xff) as u8,
49+
((v >> 48) & 0xff) as u8,
50+
((v >> 40) & 0xff) as u8,
51+
((v >> 32) & 0xff) as u8,
52+
((v >> 24) & 0xff) as u8,
53+
((v >> 16) & 0xff) as u8,
54+
((v >> 8) & 0xff) as u8,
55+
(v & 0xff) as u8,
56+
]
57+
}
58+
59+
#[test]
60+
fn address_of_should_work() {
61+
// polkadot-sdk
62+
use sp_core::H160;
63+
64+
fn non_const_address_of(v: u64) -> H160 {
65+
H160::from_low_u64_be(v)
66+
}
67+
68+
for code in 0x01..=0x800 {
69+
assert_eq!(address_of(code), non_const_address_of(code).0);
70+
}
71+
}
72+
}
73+
174
// darwinia
275
use dc_primitives::*;
376
// polkadot-sdk
@@ -18,13 +91,13 @@ pub const MAXIMUM_BLOCK_WEIGHT: frame_support::weights::Weight =
1891
cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64,
1992
);
2093

94+
const BLOCK_GAS_LIMIT: u64 = 20_000_000;
95+
2196
#[cfg(not(feature = "runtime-benchmarks"))]
2297
const EXISTENTIAL_DEPOSIT: Balance = 0;
2398
#[cfg(feature = "runtime-benchmarks")]
2499
const EXISTENTIAL_DEPOSIT: Balance = 1;
25100

26-
const BLOCK_GAS_LIMIT: u64 = 20_000_000;
27-
28101
frame_support::parameter_types! {
29102
pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT;
30103
pub const MaxBalance: Balance = Balance::max_value();

0 commit comments

Comments
 (0)