mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-15 02:11:08 +00:00
switch to pallet_revive runtime (#40)
Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
@@ -1,28 +1,71 @@
|
||||
use polkavm::{BackendKind, Config, Engine, ExportIndex, Instance, SandboxKind};
|
||||
use revive_integration::mock_runtime::{self, TransactionBuilder};
|
||||
use revive_integration::mock_runtime::{State, Transaction};
|
||||
|
||||
pub fn prepare_pvm(
|
||||
code: &[u8],
|
||||
input: Vec<u8>,
|
||||
backend: BackendKind,
|
||||
) -> (TransactionBuilder, Instance<Transaction>, ExportIndex) {
|
||||
let mut config = Config::new();
|
||||
config.set_backend(Some(backend));
|
||||
config.set_sandbox(Some(SandboxKind::Linux));
|
||||
|
||||
let (instance, export_index) = mock_runtime::prepare(code, Some(config));
|
||||
let transaction = State::default()
|
||||
.transaction()
|
||||
.with_default_account(code)
|
||||
.calldata(input);
|
||||
|
||||
(transaction, instance, export_index)
|
||||
#[cfg(feature = "bench-pvm-interpreter")]
|
||||
pub fn create_specs(contract: &revive_integration::cases::Contract) -> revive_runner::Specs {
|
||||
use revive_runner::*;
|
||||
use SpecsAction::*;
|
||||
Specs {
|
||||
differential: false,
|
||||
actions: vec![
|
||||
Instantiate {
|
||||
code: Code::Bytes(contract.pvm_runtime.to_vec()),
|
||||
origin: TestAccountId::Alice,
|
||||
data: Default::default(),
|
||||
value: Default::default(),
|
||||
gas_limit: Default::default(),
|
||||
storage_deposit_limit: Default::default(),
|
||||
salt: Default::default(),
|
||||
},
|
||||
Call {
|
||||
origin: TestAccountId::Alice,
|
||||
dest: TestAccountId::Instantiated(0),
|
||||
data: contract.calldata.to_vec(),
|
||||
value: Default::default(),
|
||||
gas_limit: Default::default(),
|
||||
storage_deposit_limit: Default::default(),
|
||||
},
|
||||
],
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn instantiate_engine(backend: BackendKind) -> Engine {
|
||||
let mut config = Config::new();
|
||||
config.set_backend(Some(backend));
|
||||
config.set_sandbox(Some(SandboxKind::Linux));
|
||||
mock_runtime::setup(Some(config))
|
||||
#[cfg(feature = "bench-pvm-interpreter")]
|
||||
pub fn measure_pvm(specs: &revive_runner::Specs, iters: u64) -> std::time::Duration {
|
||||
use revive_runner::*;
|
||||
let mut total_time = std::time::Duration::default();
|
||||
|
||||
for _ in 0..iters {
|
||||
let results = specs.clone().run();
|
||||
|
||||
let CallResult::Exec { result, wall_time } =
|
||||
results.get(1).expect("contract should have been called")
|
||||
else {
|
||||
panic!("expected a execution result");
|
||||
};
|
||||
let ret = result.result.as_ref().unwrap();
|
||||
assert!(!ret.did_revert());
|
||||
|
||||
total_time += *wall_time;
|
||||
}
|
||||
|
||||
total_time
|
||||
}
|
||||
|
||||
#[cfg(feature = "bench-evm")]
|
||||
pub fn measure_evm(code: &[u8], input: &[u8], iters: u64) -> std::time::Duration {
|
||||
let mut total_time = std::time::Duration::default();
|
||||
|
||||
let code = hex::encode(code);
|
||||
|
||||
for _ in 0..iters {
|
||||
let log = revive_differential::Evm::default()
|
||||
.code_blob(code.as_bytes().to_vec())
|
||||
.input(input.to_vec().into())
|
||||
.genesis_path("/tmp/genesis.json".into())
|
||||
.bench(true)
|
||||
.run();
|
||||
assert!(log.output.run_success(), "evm run failed: {log:?}");
|
||||
|
||||
total_time += log.execution_time().unwrap();
|
||||
}
|
||||
|
||||
total_time
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user