mirror of
https://github.com/pezkuwichain/pezkuwi-runtime-templates.git
synced 2026-06-11 22:21:02 +00:00
8e0feecc14
* init using relative paths for now * not working * cannot define same types with alias names in 2 places relalias todo * node compiles using impl oz system to abstract over frame system * clean * timestamp * parachain info * preimage and scheduler * proxy and balances * utility and parachain system * use construct openzeppelin runtime * generic runtime apis * pause construct runtime until other macros validated by cross template usage * hold runtime construction until inner macros validated * evm template impl openzeppelin system * revert back to generic construct runtime minimal wrapper for now * use the trivial versions for the construct runtime and impl runtime api macros for now * fix system grouping macro name * consensus wrapper in generic template * include ExistentialDeposit as explicit system parameter and add asset grouping for generic * wip governance * wip governnace for generic * rm placeholders for runtime api and construct runtime until implemented * fix evm template after latest changes to system grouping * whitelist * custom origins and referenda to finish governance grouping in generic template * init xcm grouping for generic template queue pallets first * more xcm * replace direct paths with git url and branch for the macro dep * update cargo locks and template fuzzer paths used for constants * use consensus macro for evm template * fix path in generic templates constant tests * fix more test imports for the generic template * fix template fuzzer build for generic template * evm template governance and clean generic governance config as well * impl xcm for evm template compiles w unused imports * clean evm template commented out code and init assets impl for evm template * progress on using impl assets for evm template * error persists despite moving from impls into scope of macro expansion * fix imports to fix errors for assets impl for evm template * init evm works * generic runtime compiles with most recent changeset * update to latest macro changes * move asset manager config into macro expansion as much as possible * fix and clean * update package name use git url and rename marker struct to OpenZeppelinRuntime * compiles * batch merge comment suggestions * expose ProxyType and move defn from macro expansion to types file for each runtime * generic single file config and minimal type aliases * single file evm config need to clean imports and minimize type aliasing next * clean evm template * evm compilation post macro updates * clean evm runtimes * clean generic * toml sort * fix * fmt fixes, supported the last changes --------- Co-authored-by: Nikita Khateev <nikita.khateev@openzeppelin.com>
56 lines
1.7 KiB
Rust
56 lines
1.7 KiB
Rust
use core::marker::PhantomData;
|
|
|
|
use pallet_evm::{
|
|
IsPrecompileResult, Precompile, PrecompileHandle, PrecompileResult, PrecompileSet,
|
|
};
|
|
use pallet_evm_precompile_modexp::Modexp;
|
|
use pallet_evm_precompile_sha3fips::Sha3FIPS256;
|
|
use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256};
|
|
use sp_core::H160;
|
|
|
|
#[derive(Default)]
|
|
pub struct OpenZeppelinPrecompiles<R>(PhantomData<R>);
|
|
|
|
impl<R> OpenZeppelinPrecompiles<R>
|
|
where
|
|
R: pallet_evm::Config,
|
|
{
|
|
pub fn new() -> Self {
|
|
Self(Default::default())
|
|
}
|
|
|
|
pub fn used_addresses() -> [H160; 7] {
|
|
[hash(1), hash(2), hash(3), hash(4), hash(5), hash(1024), hash(1025)]
|
|
}
|
|
}
|
|
impl<R> PrecompileSet for OpenZeppelinPrecompiles<R>
|
|
where
|
|
R: pallet_evm::Config,
|
|
{
|
|
fn execute(&self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
|
|
match handle.code_address() {
|
|
// Ethereum precompiles :
|
|
a if a == hash(1) => Some(ECRecover::execute(handle)),
|
|
a if a == hash(2) => Some(Sha256::execute(handle)),
|
|
a if a == hash(3) => Some(Ripemd160::execute(handle)),
|
|
a if a == hash(4) => Some(Identity::execute(handle)),
|
|
a if a == hash(5) => Some(Modexp::execute(handle)),
|
|
// Frontier precompiles :
|
|
a if a == hash(1024) => Some(Sha3FIPS256::execute(handle)),
|
|
a if a == hash(1025) => Some(ECRecoverPublicKey::execute(handle)),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
fn is_precompile(&self, address: H160, _gas: u64) -> IsPrecompileResult {
|
|
IsPrecompileResult::Answer {
|
|
is_precompile: Self::used_addresses().contains(&address),
|
|
extra_cost: 0,
|
|
}
|
|
}
|
|
}
|
|
|
|
fn hash(a: u64) -> H160 {
|
|
H160::from_low_u64_be(a)
|
|
}
|