Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .env.example

This file was deleted.

5 changes: 0 additions & 5 deletions .github/workflows/rainix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,4 @@ jobs:
DEPLOY_BROADCAST: ""
DEPLOY_VERIFIER: ""
DEPLOY_METABOARD_ADDRESS: ${{ vars.CI_DEPLOY_SEPOLIA_METABOARD_ADDRESS }}
CI_FORK_SEPOLIA_BLOCK_NUMBER: ${{ vars.CI_FORK_SEPOLIA_BLOCK_NUMBER }}
CI_FORK_SEPOLIA_DEPLOYER_ADDRESS: ${{ vars.CI_FORK_SEPOLIA_DEPLOYER_ADDRESS }}
CI_DEPLOY_SEPOLIA_RPC_URL: ${{ secrets.CI_DEPLOY_SEPOLIA_RPC_URL || vars.CI_DEPLOY_SEPOLIA_RPC_URL }}
CI_FORK_POLYGON_RPC_URL: ${{ secrets.CI_FORK_POLYGON_RPC_URL || vars.CI_FORK_POLYGON_RPC_URL }}
CI_FORK_BSC_RPC_URL: ${{ secrets.CI_FORK_BSC_RPC_URL || vars.CI_FORK_BSC_RPC_URL }}
run: nix develop -c ${{ matrix.task }}
58 changes: 48 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ tracing-subscriber = "0.3.17"
reqwest = { version = "0.11.17", features = ["json"] }
once_cell = "1.17.1"
alloy-ethers-typecast = { git = "https://github.com/rainlanguage/alloy-ethers-typecast", rev = "f7b5bfd0687f16c77dbfdd4905b2434793fa7885" }
rain-interpreter-env = { path = "crates/env" }
eyre = "0.6"
rain-error-decoding = { git = "https://github.com/rainlanguage/rain.error", rev = "bf08b5ab305287fc49408a441d6375f35dc280db" }

Expand All @@ -48,3 +47,6 @@ path = "crates/bindings"

[workspace.dependencies.rain-interpreter-eval]
path = "crates/eval"

[workspace.dependencies.rain_interpreter_test_fixtures]
path = "crates/test_fixtures"
34 changes: 31 additions & 3 deletions crates/bindings/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use alloy::sol;

// interpreters
sol!(
#![sol(all_derives = true)]
IInterpreterV2,
Expand All @@ -10,26 +11,53 @@ sol!(
IInterpreterV3,
"../../out/IInterpreterV3.sol/IInterpreterV3.json"
);
sol!(
#![sol(all_derives = true)]
IInterpreterV4,
"../../out/IInterpreterV4.sol/IInterpreterV4.json"
);

// stores
sol!(
#![sol(all_derives = true)]
IInterpreterStoreV1,
"../../out/IInterpreterStoreV1.sol/IInterpreterStoreV1.json"
);
sol!(
#![sol(all_derives = true)]
IParserV1, "../../out/IParserV1.sol/IParserV1.json");
IInterpreterStoreV2,
"../../out/IInterpreterStoreV2.sol/IInterpreterStoreV2.json"
);
sol!(
#![sol(all_derives = true)]
IInterpreterStoreV3,
"../../out/IInterpreterStoreV3.sol/IInterpreterStoreV3.json"
);

// parsers
sol!(
#![sol(all_derives = true)]
IParserV2, "../../out/IParserV2.sol/IParserV2.json");
IParserV1, "../../out/IParserV1.sol/IParserV1.json"
);
sol!(
#![sol(all_derives = true)]
IParserV2, "../../out/IParserV2.sol/IParserV2.json"
);

// pragma
sol!(
#![sol(all_derives = true)]
IParserPragmaV1, "../../out/IParserPragmaV1.sol/IParserPragmaV1.json");
IParserPragmaV1, "../../out/IParserPragmaV1.sol/IParserPragmaV1.json"
);

// deployer
sol!(
#![sol(all_derives = true)]
IExpressionDeployerV3,
"../../out/IExpressionDeployerV3.sol/IExpressionDeployerV3.json"
);

// dispair binding
sol! {
#![sol(all_derives = true)]
interface DeployerISP {
Expand Down
4 changes: 3 additions & 1 deletion crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ serde_bytes = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true, features = ['env-filter'] }
alloy = { workspace = true }
rain-interpreter-env = { workspace = true }

[target.'cfg(not(target_family = "wasm"))'.dependencies]
tokio = { version = "1.28.0", features = ["full"] }
Expand All @@ -31,3 +30,6 @@ tokio = { version = "1.28.0", features = [
"rt",
"time",
] }

[dev-dependencies]
rain_interpreter_test_fixtures = { workspace = true }
38 changes: 29 additions & 9 deletions crates/cli/src/commands/eval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use anyhow::anyhow;
use anyhow::Context;
use anyhow::Result;
use clap::Args;
use rain_interpreter_bindings::IInterpreterStoreV1::FullyQualifiedNamespace;
use rain_interpreter_bindings::IInterpreterStoreV3::FullyQualifiedNamespace;
use rain_interpreter_eval::trace::RainEvalResult;
use rain_interpreter_eval::{eval::ForkEvalArgs, fork::Forker};
use std::path::PathBuf;
Expand Down Expand Up @@ -36,6 +36,22 @@ pub struct ForkEvalCliArgs {

#[arg(short, long, help = "Decode errors using the openchain.xyz database")]
pub decode_errors: bool,

// Accept inputs vector as array of uint256
#[arg(
short,
long,
help = "The inputs vector which are prepopulated stack items"
)]
pub inputs: Option<Vec<U256>>,

// Accept state overlay vector as array of uint256
#[arg(
short,
long,
help = "The state overlay vector which applies to the state before evaluation to facilitate 'what if' analysis"
)]
pub state_overlay: Option<Vec<U256>>,
}

impl TryFrom<ForkEvalCliArgs> for ForkEvalArgs {
Expand All @@ -62,6 +78,8 @@ impl TryFrom<ForkEvalCliArgs> for ForkEvalArgs {
namespace: FullyQualifiedNamespace::from(namespace),
context,
decode_errors: args.decode_errors,
inputs: args.inputs.unwrap_or_default(),
state_overlay: args.state_overlay.unwrap_or_default(),
})
}
}
Expand Down Expand Up @@ -112,10 +130,7 @@ impl Execute for Eval {
#[cfg(test)]
mod tests {
use super::*;

use rain_interpreter_env::{
CI_DEPLOY_SEPOLIA_RPC_URL, CI_FORK_SEPOLIA_BLOCK_NUMBER, CI_FORK_SEPOLIA_DEPLOYER_ADDRESS,
};
use rain_interpreter_test_fixtures::LocalEvm;

#[test]
fn test_parse_int_or_hex() {
Expand All @@ -127,19 +142,24 @@ mod tests {

#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
async fn test_execute() {
let local_evm = LocalEvm::new().await;
let deployer = *local_evm.deployer.address();

let eval = Eval {
output_path: None,
forked_evm: NewForkedEvmCliArgs {
fork_url: CI_DEPLOY_SEPOLIA_RPC_URL.to_string(),
fork_block_number: Some(*CI_FORK_SEPOLIA_BLOCK_NUMBER),
fork_url: local_evm.url(),
fork_block_number: None,
},
fork_eval_args: ForkEvalCliArgs {
rainlang_string: r"_: add(10 2), _: context<0 0>(), _:context<0 1>();".into(),
rainlang_string: r"_: 12, _: context<0 0>(), _:context<0 1>();".into(),
source_index: 0,
deployer: *CI_FORK_SEPOLIA_DEPLOYER_ADDRESS,
deployer,
namespace: "0x123".into(),
context: vec!["0x06,99".into()],
decode_errors: true,
inputs: None,
state_overlay: None,
},
};

Expand Down
3 changes: 3 additions & 0 deletions crates/dispair/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,8 @@ tokio = { version = "1.28.0", features = [
"time",
] }

[dev-dependencies]
rain_interpreter_test_fixtures = { workspace = true }

[package.metadata.docs.rs]
all-features = true
47 changes: 10 additions & 37 deletions crates/dispair/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,47 +69,20 @@ impl DISPair {
#[cfg(test)]
mod tests {
use super::*;
use alloy::primitives::Address;
use alloy::providers::mock::Asserter;
use tracing_subscriber::FmtSubscriber;
use rain_interpreter_test_fixtures::LocalEvm;

#[tokio::test]
async fn test_from_deployer() {
setup_tracing();

let asserter = Asserter::new();
let deployer_address = "0x1111111111111111111111111111111111111111"
.parse::<Address>()
.unwrap();
let interpreter_address = "2222222222222222222222222222222222222222";
let store_address = "3333333333333333333333333333333333333333";
let parser_address = "4444444444444444444444444444444444444444";

asserter.push_success(&format!("0x{interpreter_address:0>64}"));
asserter.push_success(&format!("0x{store_address:0>64}"));
asserter.push_success(&format!("0x{parser_address:0>64}"));

let client = ReadableClient::new_mocked(asserter);
let dispair = DISPair::from_deployer(deployer_address, client)
let local_evm = LocalEvm::new().await;
let deployer = *local_evm.deployer.address();
let client = ReadableClient::new_from_url(local_evm.url())
.await
.unwrap();

assert_eq!(dispair.deployer, deployer_address);
assert_eq!(
dispair.interpreter,
interpreter_address.parse::<Address>().unwrap()
);
assert_eq!(dispair.store, store_address.parse::<Address>().unwrap());
assert_eq!(dispair.parser, parser_address.parse::<Address>().unwrap());
}

#[allow(dead_code)]
fn setup_tracing() {
let subscriber = FmtSubscriber::builder()
.with_max_level(tracing::Level::DEBUG)
.finish();
.expect("Failed to create ReadableClient");
let dispair = DISPair::from_deployer(deployer, client).await.unwrap();

tracing::subscriber::set_global_default(subscriber)
.expect("Failed to set tracing subscriber");
assert_eq!(dispair.deployer, deployer);
assert_eq!(dispair.interpreter, *local_evm.interpreter.address());
assert_eq!(dispair.store, *local_evm.store.address());
assert_eq!(dispair.parser, *local_evm.parser.address());
}
}
10 changes: 0 additions & 10 deletions crates/env/Cargo.toml

This file was deleted.

Loading