Skip to content

Commit 741c09f

Browse files
committed
Clean up precompiles crate
1 parent f0f625f commit 741c09f

File tree

7 files changed

+61
-48
lines changed

7 files changed

+61
-48
lines changed

precompiles/src/balance_transfer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use precompile_utils::EvmResult;
66
use sp_core::{H256, U256};
77
use sp_runtime::traits::{Dispatchable, StaticLookup, UniqueSaturatedInto};
88

9-
use crate::{PrecompileExt, PrecompileHandleExt, contract_to_origin, parse_pubkey};
9+
use crate::parser::{contract_to_origin, parse_pubkey};
10+
use crate::{PrecompileExt, PrecompileHandleExt};
1011

1112
pub(crate) struct BalanceTransferPrecompile<R>(PhantomData<R>);
1213

precompiles/src/ed25519.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use alloc::vec::Vec;
55
use ed25519_dalek::{Signature, Verifier, VerifyingKey};
66
use fp_evm::{ExitError, ExitSucceed, LinearCostPrecompile, PrecompileFailure};
77

8-
use crate::{PrecompileExt, parse_slice};
8+
use crate::PrecompileExt;
9+
use crate::parser::parse_slice;
910

1011
pub(crate) struct Ed25519Verify;
1112

precompiles/src/lib.rs

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ use sp_runtime::traits::StaticLookup;
2121
use subtensor_runtime_common::ProxyType;
2222

2323
use pallet_admin_utils::{PrecompileEnable, PrecompileEnum};
24-
use sp_std::vec;
2524

2625
use crate::balance_transfer::*;
2726
use crate::ed25519::*;
@@ -34,6 +33,7 @@ mod balance_transfer;
3433
mod ed25519;
3534
mod metagraph;
3635
mod neuron;
36+
mod parser;
3737
mod staking;
3838
mod subnet;
3939

@@ -202,48 +202,6 @@ fn hash(a: u64) -> H160 {
202202
H160::from_low_u64_be(a)
203203
}
204204

205-
/// Takes a slice from bytes with PrecompileFailure as Error
206-
fn parse_slice(data: &[u8], from: usize, to: usize) -> Result<&[u8], PrecompileFailure> {
207-
let maybe_slice = data.get(from..to);
208-
if let Some(slice) = maybe_slice {
209-
Ok(slice)
210-
} else {
211-
log::error!(
212-
"fail to get slice from data, {:?}, from {}, to {}",
213-
&data,
214-
from,
215-
to
216-
);
217-
Err(PrecompileFailure::Error {
218-
exit_status: ExitError::InvalidRange,
219-
})
220-
}
221-
}
222-
223-
fn parse_pubkey<A: From<[u8; 32]>>(data: &[u8]) -> Result<(A, vec::Vec<u8>), PrecompileFailure> {
224-
let mut pubkey = [0u8; 32];
225-
pubkey.copy_from_slice(parse_slice(data, 0, 32)?);
226-
227-
Ok((
228-
pubkey.into(),
229-
data.get(32..)
230-
.map_or_else(vec::Vec::new, |slice| slice.to_vec()),
231-
))
232-
}
233-
234-
fn contract_to_origin<A: From<[u8; 32]>>(
235-
contract: &[u8; 32],
236-
) -> Result<RawOrigin<A>, PrecompileFailure> {
237-
let (account_id, _) = parse_pubkey::<A>(contract)?;
238-
Ok(RawOrigin::Signed(account_id))
239-
}
240-
241-
fn try_u16_from_u256(value: U256) -> Result<u16, PrecompileFailure> {
242-
value.try_into().map_err(|_| PrecompileFailure::Error {
243-
exit_status: ExitError::Other("the value is outside of u16 bounds".into()),
244-
})
245-
}
246-
247205
trait PrecompileHandleExt: PrecompileHandle {
248206
fn caller_account_id<R>(&self) -> R::AccountId
249207
where

precompiles/src/neuron.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use sp_core::H256;
88
use sp_runtime::traits::Dispatchable;
99
use sp_std::vec::Vec;
1010

11-
use crate::{PrecompileExt, PrecompileHandleExt, parse_pubkey};
11+
use crate::parser::parse_pubkey;
12+
use crate::{PrecompileExt, PrecompileHandleExt};
1213

1314
pub struct NeuronPrecompile<R>(PhantomData<R>);
1415

precompiles/src/parser.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
extern crate alloc;
2+
3+
use frame_system::RawOrigin;
4+
use pallet_evm::{ExitError, PrecompileFailure};
5+
use sp_core::U256;
6+
use sp_std::vec;
7+
8+
/// Takes a slice from bytes with PrecompileFailure as Error
9+
pub(crate) fn parse_slice(data: &[u8], from: usize, to: usize) -> Result<&[u8], PrecompileFailure> {
10+
let maybe_slice = data.get(from..to);
11+
if let Some(slice) = maybe_slice {
12+
Ok(slice)
13+
} else {
14+
log::error!(
15+
"fail to get slice from data, {:?}, from {}, to {}",
16+
&data,
17+
from,
18+
to
19+
);
20+
Err(PrecompileFailure::Error {
21+
exit_status: ExitError::InvalidRange,
22+
})
23+
}
24+
}
25+
26+
pub(crate) fn parse_pubkey<A: From<[u8; 32]>>(
27+
data: &[u8],
28+
) -> Result<(A, vec::Vec<u8>), PrecompileFailure> {
29+
let mut pubkey = [0u8; 32];
30+
pubkey.copy_from_slice(parse_slice(data, 0, 32)?);
31+
32+
Ok((
33+
pubkey.into(),
34+
data.get(32..)
35+
.map_or_else(vec::Vec::new, |slice| slice.to_vec()),
36+
))
37+
}
38+
39+
pub(crate) fn contract_to_origin<A: From<[u8; 32]>>(
40+
contract: &[u8; 32],
41+
) -> Result<RawOrigin<A>, PrecompileFailure> {
42+
let (account_id, _) = parse_pubkey::<A>(contract)?;
43+
Ok(RawOrigin::Signed(account_id))
44+
}
45+
46+
pub(crate) fn try_u16_from_u256(value: U256) -> Result<u16, PrecompileFailure> {
47+
value.try_into().map_err(|_| PrecompileFailure::Error {
48+
exit_status: ExitError::Other("the value is outside of u16 bounds".into()),
49+
})
50+
}

precompiles/src/staking.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ use sp_core::{H256, U256};
3737
use sp_runtime::traits::{Dispatchable, StaticLookup, UniqueSaturatedInto};
3838
use subtensor_runtime_common::ProxyType;
3939

40-
use crate::{PrecompileExt, PrecompileHandleExt, parse_pubkey, try_u16_from_u256};
40+
use crate::parser::{parse_pubkey, try_u16_from_u256};
41+
use crate::{PrecompileExt, PrecompileHandleExt};
4142

4243
pub(crate) struct StakingPrecompile<R>(PhantomData<R>);
4344

precompiles/src/subnet.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use precompile_utils::{EvmResult, prelude::BoundedString};
88
use sp_core::H256;
99
use sp_runtime::traits::Dispatchable;
1010

11-
use crate::{PrecompileExt, PrecompileHandleExt, parse_pubkey};
11+
use crate::parser::parse_pubkey;
12+
use crate::{PrecompileExt, PrecompileHandleExt};
1213

1314
pub struct SubnetPrecompile<R>(PhantomData<R>);
1415

0 commit comments

Comments
 (0)