Merge branch 'main' into pvm-link-bug

This commit is contained in:
Cyrill Leutwiler
2024-09-04 20:12:48 +02:00
3 changed files with 24 additions and 3 deletions
+6 -2
View File
@@ -7,6 +7,10 @@ repository.workspace = true
authors.workspace = true authors.workspace = true
description = "Execute revive contracts in a simulated blockchain runtime" description = "Execute revive contracts in a simulated blockchain runtime"
[features]
default = ["solidity"]
solidity = ["revive-solidity", "revive-differential"]
[dependencies] [dependencies]
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
@@ -24,5 +28,5 @@ polkadot-sdk.features = [
"pallet-timestamp" "pallet-timestamp"
] ]
revive-solidity = { workspace = true } revive-solidity = { workspace = true, optional = true }
revive-differential = { workspace = true } revive-differential = { workspace = true, optional = true }
+6
View File
@@ -44,6 +44,10 @@ pub use crate::specs::*;
mod runtime; mod runtime;
mod specs; mod specs;
#[cfg(not(feature = "revive-solidity"))]
pub(crate) const NO_SOLIDITY_FRONTEND: &str =
"revive-runner was built without the solidity frontend; please enable the 'solidity' feature!";
/// The alice test account /// The alice test account
pub const ALICE: H160 = H160([1u8; 20]); pub const ALICE: H160 = H160([1u8; 20]);
/// The bob test account /// The bob test account
@@ -218,6 +222,7 @@ impl CallResult {
#[derive(Clone, Debug, Serialize, Deserialize)] #[derive(Clone, Debug, Serialize, Deserialize)]
pub enum Code { pub enum Code {
#[cfg(feature = "revive-solidity")]
/// Compile a single solidity source and use the blob of `contract` /// Compile a single solidity source and use the blob of `contract`
Solidity { Solidity {
path: Option<std::path::PathBuf>, path: Option<std::path::PathBuf>,
@@ -242,6 +247,7 @@ impl Default for Code {
impl From<Code> for pallet_revive::Code { impl From<Code> for pallet_revive::Code {
fn from(val: Code) -> Self { fn from(val: Code) -> Self {
match val { match val {
#[cfg(feature = "solidity")]
Code::Solidity { Code::Solidity {
path, path,
contract, contract,
+12 -1
View File
@@ -1,11 +1,13 @@
use std::time::Instant; use std::time::Instant;
use pallet_revive::AddressMapper; use pallet_revive::AddressMapper;
use revive_differential::{Evm, EvmLog};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::*; use crate::*;
use alloy_primitives::Address; use alloy_primitives::Address;
#[cfg(feature = "revive-solidity")]
use revive_differential::{Evm, EvmLog};
#[cfg(feature = "revive-solidity")]
use revive_solidity::test_utils::*; use revive_solidity::test_utils::*;
const SPEC_MARKER_BEGIN: &str = "/* runner.json"; const SPEC_MARKER_BEGIN: &str = "/* runner.json";
@@ -72,6 +74,7 @@ pub enum SpecsAction {
}, },
} }
#[cfg(feature = "solidity")]
impl SpecsAction { impl SpecsAction {
/// Derive verification actions from the EVM output log /// Derive verification actions from the EVM output log
pub fn derive_verification( pub fn derive_verification(
@@ -219,6 +222,7 @@ impl Specs {
}; };
match code { match code {
#[cfg(feature = "revive-solidity")]
Code::Bytes(bytes) if bytes.is_empty() => { Code::Bytes(bytes) if bytes.is_empty() => {
let contract_source = match std::fs::read_to_string(contract_path) { let contract_source = match std::fs::read_to_string(contract_path) {
Err(err) => panic!("unable to read {contract_path}: {err}"), Err(err) => panic!("unable to read {contract_path}: {err}"),
@@ -226,6 +230,9 @@ impl Specs {
}; };
*bytes = compile_blob(contract_name, &contract_source) *bytes = compile_blob(contract_name, &contract_source)
} }
#[cfg(not(feature = "revive-solidity"))]
Code::Bytes(_) => panic!("{NO_SOLIDITY_FRONTEND}"),
#[cfg(feature = "revive-solidity")]
Code::Solidity { path, .. } if path.is_none() => *path = Some(contract_path.into()), Code::Solidity { path, .. } if path.is_none() => *path = Some(contract_path.into()),
_ => continue, _ => continue,
} }
@@ -236,6 +243,9 @@ impl Specs {
/// The test takes a [`Specs`] and executes the actions in order /// The test takes a [`Specs`] and executes the actions in order
pub fn run(self) -> Vec<CallResult> { pub fn run(self) -> Vec<CallResult> {
if self.differential { if self.differential {
#[cfg(not(feature = "solidity"))]
panic!("{NO_SOLIDITY_FRONTEND}");
#[cfg(feature = "solidity")]
self.run_on_evm() self.run_on_evm()
} else { } else {
self self
@@ -243,6 +253,7 @@ impl Specs {
.run_on_pallet() .run_on_pallet()
} }
#[cfg(feature = "solidity")]
fn run_on_evm(self) -> Self { fn run_on_evm(self) -> Self {
let mut derived_specs = Self { let mut derived_specs = Self {
actions: vec![], actions: vec![],