mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-06-12 12:21:10 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b6f1f6e6af | |||
| 6e8187b135 | |||
| 310925de07 | |||
| bb98c96c9d | |||
| 1d481b314c | |||
| 36ef669341 | |||
| e7ebd0c034 | |||
| ad20b99e0a | |||
| 234e59bbea |
@@ -13,7 +13,3 @@ workdir
|
|||||||
|
|
||||||
!/schema.json
|
!/schema.json
|
||||||
!/dev-genesis.json
|
!/dev-genesis.json
|
||||||
|
|
||||||
# Ignore all shell scripts except for the `run_tests.sh` script
|
|
||||||
*.sh
|
|
||||||
!run_tests.sh
|
|
||||||
@@ -16,7 +16,6 @@ use alloy::{
|
|||||||
primitives::{B256, FixedBytes, U256},
|
primitives::{B256, FixedBytes, U256},
|
||||||
signers::local::PrivateKeySigner,
|
signers::local::PrivateKeySigner,
|
||||||
};
|
};
|
||||||
use anyhow::Context as _;
|
|
||||||
use clap::{Parser, ValueEnum, ValueHint};
|
use clap::{Parser, ValueEnum, ValueHint};
|
||||||
use revive_dt_common::types::{ParsedTestSpecifier, PlatformIdentifier};
|
use revive_dt_common::types::{ParsedTestSpecifier, PlatformIdentifier};
|
||||||
use semver::Version;
|
use semver::Version;
|
||||||
@@ -1080,10 +1079,7 @@ impl FromStr for WorkingDirectoryConfiguration {
|
|||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
match s {
|
match s {
|
||||||
"" => Ok(Default::default()),
|
"" => Ok(Default::default()),
|
||||||
_ => PathBuf::from(s)
|
_ => Ok(Self::Path(PathBuf::from(s))),
|
||||||
.canonicalize()
|
|
||||||
.context("Failed to canonicalize the working directory path")
|
|
||||||
.map(Self::Path),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -359,11 +359,7 @@ where
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(
|
#[instrument(level = "info", skip_all)]
|
||||||
level = "info",
|
|
||||||
skip_all,
|
|
||||||
fields(block_number = tracing::field::Empty)
|
|
||||||
)]
|
|
||||||
pub async fn execute_function_call(
|
pub async fn execute_function_call(
|
||||||
&mut self,
|
&mut self,
|
||||||
_: &StepPath,
|
_: &StepPath,
|
||||||
@@ -377,7 +373,6 @@ where
|
|||||||
.handle_function_call_execution(step, deployment_receipts)
|
.handle_function_call_execution(step, deployment_receipts)
|
||||||
.await
|
.await
|
||||||
.context("Failed to handle the function call execution")?;
|
.context("Failed to handle the function call execution")?;
|
||||||
tracing::Span::current().record("block_number", execution_receipt.block_number);
|
|
||||||
let tracing_result = self
|
let tracing_result = self
|
||||||
.handle_function_call_call_frame_tracing(execution_receipt.transaction_hash)
|
.handle_function_call_call_frame_tracing(execution_receipt.transaction_hash)
|
||||||
.await
|
.await
|
||||||
@@ -603,10 +598,7 @@ where
|
|||||||
let expected = !assertion.exception;
|
let expected = !assertion.exception;
|
||||||
let actual = receipt.status();
|
let actual = receipt.status();
|
||||||
if actual != expected {
|
if actual != expected {
|
||||||
let revert_reason = tracing_result
|
let revert_reason = tracing_result.revert_reason.as_ref();
|
||||||
.revert_reason
|
|
||||||
.as_ref()
|
|
||||||
.or(tracing_result.error.as_ref());
|
|
||||||
tracing::error!(
|
tracing::error!(
|
||||||
expected,
|
expected,
|
||||||
actual,
|
actual,
|
||||||
@@ -621,8 +613,8 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handling the calldata assertion
|
// Handling the calldata assertion
|
||||||
if let Some(ref expected_output) = assertion.return_data {
|
if let Some(ref expected_calldata) = assertion.return_data {
|
||||||
let expected = expected_output;
|
let expected = expected_calldata;
|
||||||
let actual = &tracing_result.output.as_ref().unwrap_or_default();
|
let actual = &tracing_result.output.as_ref().unwrap_or_default();
|
||||||
if !expected
|
if !expected
|
||||||
.is_equivalent(actual, resolver.as_ref(), resolution_context)
|
.is_equivalent(actual, resolver.as_ref(), resolution_context)
|
||||||
@@ -633,9 +625,9 @@ where
|
|||||||
?receipt,
|
?receipt,
|
||||||
?expected,
|
?expected,
|
||||||
%actual,
|
%actual,
|
||||||
"Output assertion failed"
|
"Calldata assertion failed"
|
||||||
);
|
);
|
||||||
anyhow::bail!("Output assertion failed - Expected {expected:?} but got {actual}",);
|
anyhow::bail!("Calldata assertion failed - Expected {expected:?} but got {actual}",);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
use std::{collections::HashMap, fmt::Display, str::FromStr};
|
use std::{collections::HashMap, fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use alloy::hex::ToHexExt;
|
|
||||||
use alloy::primitives::{FixedBytes, utils::parse_units};
|
use alloy::primitives::{FixedBytes, utils::parse_units};
|
||||||
use alloy::{
|
use alloy::{
|
||||||
eips::BlockNumberOrTag,
|
eips::BlockNumberOrTag,
|
||||||
@@ -687,8 +686,8 @@ impl Calldata {
|
|||||||
Calldata::Compound(items) => {
|
Calldata::Compound(items) => {
|
||||||
stream::iter(items.iter().zip(other.chunks(32)))
|
stream::iter(items.iter().zip(other.chunks(32)))
|
||||||
.map(|(this, other)| async move {
|
.map(|(this, other)| async move {
|
||||||
// The MatterLabs format supports wildcards and therefore we also need to
|
// The matterlabs format supports wildcards and therefore we
|
||||||
// support them.
|
// also need to support them.
|
||||||
if this.as_ref() == "*" {
|
if this.as_ref() == "*" {
|
||||||
return Ok::<_, anyhow::Error>(true);
|
return Ok::<_, anyhow::Error>(true);
|
||||||
}
|
}
|
||||||
@@ -706,7 +705,6 @@ impl Calldata {
|
|||||||
.await
|
.await
|
||||||
.context("Failed to resolve calldata item during equivalence check")?;
|
.context("Failed to resolve calldata item during equivalence check")?;
|
||||||
let other = U256::from_be_slice(&other);
|
let other = U256::from_be_slice(&other);
|
||||||
|
|
||||||
Ok(this == other)
|
Ok(this == other)
|
||||||
})
|
})
|
||||||
.buffered(0xFF)
|
.buffered(0xFF)
|
||||||
@@ -719,7 +717,7 @@ impl Calldata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl CalldataItem {
|
impl CalldataItem {
|
||||||
#[instrument(level = "info", skip_all, err(Debug))]
|
#[instrument(level = "info", skip_all, err)]
|
||||||
async fn resolve(
|
async fn resolve(
|
||||||
&self,
|
&self,
|
||||||
resolver: &(impl ResolverApi + ?Sized),
|
resolver: &(impl ResolverApi + ?Sized),
|
||||||
@@ -770,14 +768,7 @@ impl CalldataItem {
|
|||||||
match stack.as_slice() {
|
match stack.as_slice() {
|
||||||
// Empty stack means that we got an empty compound calldata which we resolve to zero.
|
// Empty stack means that we got an empty compound calldata which we resolve to zero.
|
||||||
[] => Ok(U256::ZERO),
|
[] => Ok(U256::ZERO),
|
||||||
[CalldataToken::Item(item)] => {
|
[CalldataToken::Item(item)] => Ok(*item),
|
||||||
tracing::debug!(
|
|
||||||
original_item = ?self,
|
|
||||||
resolved_item = item.to_be_bytes::<32>().encode_hex(),
|
|
||||||
"Resolution Done"
|
|
||||||
);
|
|
||||||
Ok(*item)
|
|
||||||
}
|
|
||||||
_ => Err(anyhow::anyhow!(
|
_ => Err(anyhow::anyhow!(
|
||||||
"Invalid calldata arithmetic operation - Invalid stack"
|
"Invalid calldata arithmetic operation - Invalid stack"
|
||||||
)),
|
)),
|
||||||
@@ -907,7 +898,7 @@ impl<T: AsRef<str>> CalldataToken<T> {
|
|||||||
let block_hash = resolver
|
let block_hash = resolver
|
||||||
.block_hash(desired_block_number.into())
|
.block_hash(desired_block_number.into())
|
||||||
.await
|
.await
|
||||||
.context(format!("Failed to resolve the block hash of block number {desired_block_number}"))?;
|
.context("Failed to resolve block hash for desired block number")?;
|
||||||
|
|
||||||
Ok(U256::from_be_bytes(block_hash.0))
|
Ok(U256::from_be_bytes(block_hash.0))
|
||||||
} else if item == Self::BLOCK_NUMBER_VARIABLE {
|
} else if item == Self::BLOCK_NUMBER_VARIABLE {
|
||||||
|
|||||||
@@ -251,10 +251,6 @@ impl SubstrateNode {
|
|||||||
.arg(format!("ws://127.0.0.1:{substrate_rpc_port}"))
|
.arg(format!("ws://127.0.0.1:{substrate_rpc_port}"))
|
||||||
.arg("--rpc-max-connections")
|
.arg("--rpc-max-connections")
|
||||||
.arg(u32::MAX.to_string())
|
.arg(u32::MAX.to_string())
|
||||||
.arg("--index-last-n-blocks")
|
|
||||||
.arg(1_000u32.to_string())
|
|
||||||
.arg("--cache-size")
|
|
||||||
.arg(1_000u32.to_string())
|
|
||||||
.env("RUST_LOG", Self::PROXY_LOG_ENV)
|
.env("RUST_LOG", Self::PROXY_LOG_ENV)
|
||||||
.stdout(stdout_file)
|
.stdout(stdout_file)
|
||||||
.stderr(stderr_file);
|
.stderr(stderr_file);
|
||||||
|
|||||||
@@ -62,10 +62,7 @@ where
|
|||||||
) -> TransportResult<Self::Fillable> {
|
) -> TransportResult<Self::Fillable> {
|
||||||
match self.inner.prepare(provider, tx).await {
|
match self.inner.prepare(provider, tx).await {
|
||||||
Ok(fill) => Ok(Some(fill)),
|
Ok(fill) => Ok(Some(fill)),
|
||||||
Err(err) => {
|
Err(_) => Ok(None),
|
||||||
tracing::debug!(error = ?err, "Gas Provider Estimation Failed, using fallback");
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ where
|
|||||||
};
|
};
|
||||||
debug!(%tx_hash, "Submitted Transaction");
|
debug!(%tx_hash, "Submitted Transaction");
|
||||||
|
|
||||||
pending_transaction.set_timeout(Some(Duration::from_secs(120)));
|
pending_transaction.set_timeout(Some(Duration::from_secs(240)));
|
||||||
let tx_hash = pending_transaction.watch().await.context(format!(
|
let tx_hash = pending_transaction.watch().await.context(format!(
|
||||||
"Transaction inclusion watching timeout for {tx_hash}"
|
"Transaction inclusion watching timeout for {tx_hash}"
|
||||||
))?;
|
))?;
|
||||||
|
|||||||
@@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
str::FromStr,
|
|
||||||
sync::{LazyLock, Mutex},
|
sync::{LazyLock, Mutex},
|
||||||
};
|
};
|
||||||
|
|
||||||
use revive_dt_common::types::VersionOrRequirement;
|
use revive_dt_common::types::VersionOrRequirement;
|
||||||
|
|
||||||
use semver::{Version, VersionReq};
|
use semver::Version;
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
|
|
||||||
use crate::list::List;
|
use crate::list::List;
|
||||||
@@ -66,9 +65,6 @@ impl SolcDownloader {
|
|||||||
target: &'static str,
|
target: &'static str,
|
||||||
list: &'static str,
|
list: &'static str,
|
||||||
) -> anyhow::Result<Self> {
|
) -> anyhow::Result<Self> {
|
||||||
static MAXIMUM_COMPILER_VERSION_REQUIREMENT: LazyLock<VersionReq> =
|
|
||||||
LazyLock::new(|| VersionReq::from_str("<=0.8.30").unwrap());
|
|
||||||
|
|
||||||
let version_or_requirement = version.into();
|
let version_or_requirement = version.into();
|
||||||
match version_or_requirement {
|
match version_or_requirement {
|
||||||
VersionOrRequirement::Version(version) => Ok(Self {
|
VersionOrRequirement::Version(version) => Ok(Self {
|
||||||
@@ -83,10 +79,7 @@ impl SolcDownloader {
|
|||||||
.builds
|
.builds
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|build| build.version)
|
.map(|build| build.version)
|
||||||
.filter(|version| {
|
.filter(|version| requirement.matches(version))
|
||||||
MAXIMUM_COMPILER_VERSION_REQUIREMENT.matches(version)
|
|
||||||
&& requirement.matches(version)
|
|
||||||
})
|
|
||||||
.max()
|
.max()
|
||||||
else {
|
else {
|
||||||
anyhow::bail!("Failed to find a version that satisfies {requirement:?}");
|
anyhow::bail!("Failed to find a version that satisfies {requirement:?}");
|
||||||
|
|||||||
+1
-1
Submodule polkadot-sdk updated: 45a0ea734f...f268e32768
+1
-1
Submodule resolc-compiler-tests updated: 40ffa2b839...ce77cb1166
Reference in New Issue
Block a user