From 026fda13ce4d317dc9d3123703e380d665032724 Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 Jul 2024 14:56:30 -0700 Subject: [PATCH 1/8] Enable ops outside guard. I had believed this flag would be removed but wasn't removed at the time of this clvmr update. Will do a more extensive upgrade pr as well. --- Cargo.lock | 74 +++++++++---------- Cargo.toml | 2 +- src/classic/clvm_tools/stages/stage_0.rs | 4 +- .../clvm_tools/stages/stage_2/operators.rs | 4 +- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 44150012..d06048ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,9 +105,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" dependencies = [ "cc", "glob", @@ -186,14 +186,14 @@ dependencies = [ "proc-macro-crate", "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] name = "clvm-traits" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b527f38a1a9ef23aafd982a89be3881fa5f0a0ba0a642fa94244c72a74b8c8" +checksum = "5548b7de9921c68b2ca1101c08dd416bfa9afdf319f5b45183ecb3574ee177a3" dependencies = [ "num-bigint", "thiserror", @@ -237,9 +237,9 @@ dependencies = [ [[package]] name = "clvmr" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dede49a536ac5ad83753cf241f674d0c7b251a2a58ae681577457be9c5ea7bc3" +checksum = "deabd4e4163efb64486937a7c80996e5bdfb88d21a6baa9c0f802e6b45906109" dependencies = [ "chia-bls", "clvm-traits", @@ -371,9 +371,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -585,9 +585,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", @@ -599,9 +599,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lfsr" @@ -723,11 +723,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", "serde", @@ -744,11 +743,10 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] @@ -777,9 +775,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -796,9 +794,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -978,7 +976,7 @@ dependencies = [ "proc-macro2 1.0.66", "pyo3-macros-backend", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -990,7 +988,7 @@ dependencies = [ "heck", "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -1172,7 +1170,7 @@ checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -1266,9 +1264,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.32", @@ -1317,7 +1315,7 @@ checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -1350,9 +1348,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -1394,9 +1392,9 @@ checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] @@ -1454,7 +1452,7 @@ dependencies = [ "once_cell", "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", "wasm-bindgen-shared", ] @@ -1488,7 +1486,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1650,9 +1648,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -1665,5 +1663,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2 1.0.66", "quote 1.0.32", - "syn 2.0.28", + "syn 2.0.32", ] diff --git a/Cargo.toml b/Cargo.toml index 9a31e179..942085fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ do-notation = "0.1.3" serde_json = "1.0" sha2 = "0.9.5" tempfile = "3.3.0" -clvmr = { version = "0.3.2", features = ["pre-eval"] } +clvmr = { version = "0.3.3", features = ["pre-eval"] } binascii = "0.1.4" yaml-rust = "0.4" linked-hash-map = "0.5.6" diff --git a/src/classic/clvm_tools/stages/stage_0.rs b/src/classic/clvm_tools/stages/stage_0.rs index df5fd9b2..638b050d 100644 --- a/src/classic/clvm_tools/stages/stage_0.rs +++ b/src/classic/clvm_tools/stages/stage_0.rs @@ -1,5 +1,5 @@ use clvm_rs::allocator::{Allocator, NodePtr}; -use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS}; +use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS, ENABLE_BLS_OPS_OUTSIDE_GUARD}; use clvm_rs::cost::Cost; use clvm_rs::reduction::Response; @@ -47,7 +47,7 @@ impl TRunProgram for DefaultProgramRunner { run_program_with_pre_eval( allocator, - &ChiaDialect::new(NO_UNKNOWN_OPS), + &ChiaDialect::new(NO_UNKNOWN_OPS | ENABLE_BLS_OPS_OUTSIDE_GUARD), program, args, max_cost, diff --git a/src/classic/clvm_tools/stages/stage_2/operators.rs b/src/classic/clvm_tools/stages/stage_2/operators.rs index 5b433395..19f00c63 100644 --- a/src/classic/clvm_tools/stages/stage_2/operators.rs +++ b/src/classic/clvm_tools/stages/stage_2/operators.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use std::rc::Rc; use clvm_rs::allocator::{Allocator, NodePtr, SExp}; -use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS}; +use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS, ENABLE_BLS_OPS_OUTSIDE_GUARD}; use clvm_rs::cost::Cost; use clvm_rs::dialect::{Dialect, OperatorSet}; use clvm_rs::reduction::{EvalErr, Reduction, Response}; @@ -122,7 +122,7 @@ impl Drop for CompilerOperators { impl CompilerOperatorsInternal { pub fn new(source_file: &str, search_paths: Vec, symbols_extra_info: bool) -> Self { - let base_dialect = Rc::new(ChiaDialect::new(NO_UNKNOWN_OPS)); + let base_dialect = Rc::new(ChiaDialect::new(NO_UNKNOWN_OPS | ENABLE_BLS_OPS_OUTSIDE_GUARD)); let base_runner = Rc::new(DefaultProgramRunner::new()); CompilerOperatorsInternal { base_dialect, From 3db67345382152e9070dd814f99a9c73f9aa0729 Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 Jul 2024 15:14:30 -0700 Subject: [PATCH 2/8] Add tests --- src/classic/clvm_tools/stages/stage_0.rs | 2 +- .../clvm_tools/stages/stage_2/operators.rs | 6 +++-- src/tests/classic/run.rs | 12 ++++++++++ src/tests/compiler/cldb.rs | 24 +++++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/classic/clvm_tools/stages/stage_0.rs b/src/classic/clvm_tools/stages/stage_0.rs index 638b050d..f99ee3f6 100644 --- a/src/classic/clvm_tools/stages/stage_0.rs +++ b/src/classic/clvm_tools/stages/stage_0.rs @@ -1,5 +1,5 @@ use clvm_rs::allocator::{Allocator, NodePtr}; -use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS, ENABLE_BLS_OPS_OUTSIDE_GUARD}; +use clvm_rs::chia_dialect::{ChiaDialect, ENABLE_BLS_OPS_OUTSIDE_GUARD, NO_UNKNOWN_OPS}; use clvm_rs::cost::Cost; use clvm_rs::reduction::Response; diff --git a/src/classic/clvm_tools/stages/stage_2/operators.rs b/src/classic/clvm_tools/stages/stage_2/operators.rs index 19f00c63..11c3b8d0 100644 --- a/src/classic/clvm_tools/stages/stage_2/operators.rs +++ b/src/classic/clvm_tools/stages/stage_2/operators.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use std::rc::Rc; use clvm_rs::allocator::{Allocator, NodePtr, SExp}; -use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS, ENABLE_BLS_OPS_OUTSIDE_GUARD}; +use clvm_rs::chia_dialect::{ChiaDialect, ENABLE_BLS_OPS_OUTSIDE_GUARD, NO_UNKNOWN_OPS}; use clvm_rs::cost::Cost; use clvm_rs::dialect::{Dialect, OperatorSet}; use clvm_rs::reduction::{EvalErr, Reduction, Response}; @@ -122,7 +122,9 @@ impl Drop for CompilerOperators { impl CompilerOperatorsInternal { pub fn new(source_file: &str, search_paths: Vec, symbols_extra_info: bool) -> Self { - let base_dialect = Rc::new(ChiaDialect::new(NO_UNKNOWN_OPS | ENABLE_BLS_OPS_OUTSIDE_GUARD)); + let base_dialect = Rc::new(ChiaDialect::new( + NO_UNKNOWN_OPS | ENABLE_BLS_OPS_OUTSIDE_GUARD, + )); let base_runner = Rc::new(DefaultProgramRunner::new()); CompilerOperatorsInternal { base_dialect, diff --git a/src/tests/classic/run.rs b/src/tests/classic/run.rs index ec6a31f2..4c3f687b 100644 --- a/src/tests/classic/run.rs +++ b/src/tests/classic/run.rs @@ -2543,3 +2543,15 @@ fn test_include_bin_should_not_be_parsed() { let result = do_basic_brun(&vec!["brun".to_string(), program]); assert_eq!(result.trim(), "\"'test\""); } + +#[test] +fn test_coinid_outside_guard() { + let result = do_basic_run(&vec![ + "run".to_string(), + "(coinid (sha256 3) (sha256 3) 4)".to_string(), + ]); + assert_eq!( + result.trim(), + "0x9f7f12b86a583805a4442879b7b5b531469e45c7e753e5fd431058e90bf3fbec" + ); +} diff --git a/src/tests/compiler/cldb.rs b/src/tests/compiler/cldb.rs index c22074a2..1a72143b 100644 --- a/src/tests/compiler/cldb.rs +++ b/src/tests/compiler/cldb.rs @@ -78,6 +78,7 @@ where } if let Some(result) = cldbrun.step(&mut allocator) { + eprintln!("{:?}", result); output = result; if !viewer.show(&cldbrun.current_step(), Some(output.clone())) { return None; @@ -455,3 +456,26 @@ fn test_cldb_hierarchy_before_hex() { compare_run_output(result, run_entries); } + +#[test] +fn test_cldb_coinid_outside_guard() { + let filename = "coinid.clvm"; + let loc = Srcloc::start(filename); + let program = "(coinid (sha256 (q . 3)) (sha256 (q . 3)) (q . 4))"; + let parsed = parse_sexp(loc.clone(), program.as_bytes().iter().copied()).expect("should parse"); + let args = Rc::new(SExp::Nil(loc)); + let program_lines = Rc::new(vec![program.to_string()]); + + assert_eq!( + run_clvm_in_cldb( + filename, + program_lines, + parsed[0].clone(), + HashMap::new(), + args, + &mut DoesntWatchCldb {}, + FAVOR_HEX, + ), + Some("0x9f7f12b86a583805a4442879b7b5b531469e45c7e753e5fd431058e90bf3fbec".to_string()) + ); +} From 860bbeb98243e36754b892bc95927ded648d0178 Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 Jul 2024 15:19:05 -0700 Subject: [PATCH 3/8] Update to use = in version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 942085fc..b43c83e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ do-notation = "0.1.3" serde_json = "1.0" sha2 = "0.9.5" tempfile = "3.3.0" -clvmr = { version = "0.3.3", features = ["pre-eval"] } +clvmr = { version = "=0.3.3", features = ["pre-eval"] } binascii = "0.1.4" yaml-rust = "0.4" linked-hash-map = "0.5.6" From cb44f52375bcc8a85c2341e920eecb0259bba35c Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 Jul 2024 15:32:09 -0700 Subject: [PATCH 4/8] Better: classic already handled this differently --- src/classic/clvm_tools/cmds.rs | 1 + src/classic/clvm_tools/stages/stage_0.rs | 5 ++++- src/compiler/clvm.rs | 7 +++++-- src/tests/classic/run.rs | 12 ------------ src/tests/compiler/optimizer/output.rs | 3 +-- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/classic/clvm_tools/cmds.rs b/src/classic/clvm_tools/cmds.rs index af507310..9811c19a 100644 --- a/src/classic/clvm_tools/cmds.rs +++ b/src/classic/clvm_tools/cmds.rs @@ -1575,6 +1575,7 @@ pub fn launch_tool(stdout: &mut Stream, args: &[String], tool_name: &str, defaul Some(max_cost as u64) }, pre_eval_f, + new_operators: false, strict: parsed_args .get("strict") .map(|_| true) diff --git a/src/classic/clvm_tools/stages/stage_0.rs b/src/classic/clvm_tools/stages/stage_0.rs index f99ee3f6..4bd73e60 100644 --- a/src/classic/clvm_tools/stages/stage_0.rs +++ b/src/classic/clvm_tools/stages/stage_0.rs @@ -5,10 +5,12 @@ use clvm_rs::reduction::Response; use clvm_rs::run_program::{run_program_with_pre_eval, PreEval}; +#[derive(Default)] pub struct RunProgramOption { pub max_cost: Option, pub pre_eval_f: Option, pub strict: bool, + pub new_operators: bool, } pub trait TRunProgram { @@ -44,10 +46,11 @@ impl TRunProgram for DefaultProgramRunner { option: Option, ) -> Response { let max_cost = option.as_ref().and_then(|o| o.max_cost).unwrap_or(0); + let new_operators = option.as_ref().map(|o| o.new_operators).unwrap_or_default(); run_program_with_pre_eval( allocator, - &ChiaDialect::new(NO_UNKNOWN_OPS | ENABLE_BLS_OPS_OUTSIDE_GUARD), + &ChiaDialect::new(NO_UNKNOWN_OPS | ((new_operators as u32) * ENABLE_BLS_OPS_OUTSIDE_GUARD)), program, args, max_cost, diff --git a/src/compiler/clvm.rs b/src/compiler/clvm.rs index 41a8b4cb..d38cd677 100644 --- a/src/compiler/clvm.rs +++ b/src/compiler/clvm.rs @@ -13,7 +13,7 @@ use sha2::Digest; use sha2::Sha256; use crate::classic::clvm::__type_compatibility__::{bi_one, bi_zero}; -use crate::classic::clvm_tools::stages::stage_0::TRunProgram; +use crate::classic::clvm_tools::stages::stage_0::{TRunProgram, RunProgramOption}; use crate::compiler::prims; use crate::compiler::runtypes::RunFailure; @@ -396,7 +396,10 @@ fn apply_op( let converted_args = convert_to_clvm_rs(allocator, wrapped_args.clone())?; runner - .run_program(allocator, converted_app, converted_args, None) + .run_program(allocator, converted_app, converted_args, Some(RunProgramOption { + new_operators: true, + .. RunProgramOption::default() + })) .map_err(|e| { RunFailure::RunErr( head.loc(), diff --git a/src/tests/classic/run.rs b/src/tests/classic/run.rs index 4c3f687b..ec6a31f2 100644 --- a/src/tests/classic/run.rs +++ b/src/tests/classic/run.rs @@ -2543,15 +2543,3 @@ fn test_include_bin_should_not_be_parsed() { let result = do_basic_brun(&vec!["brun".to_string(), program]); assert_eq!(result.trim(), "\"'test\""); } - -#[test] -fn test_coinid_outside_guard() { - let result = do_basic_run(&vec![ - "run".to_string(), - "(coinid (sha256 3) (sha256 3) 4)".to_string(), - ]); - assert_eq!( - result.trim(), - "0x9f7f12b86a583805a4442879b7b5b531469e45c7e753e5fd431058e90bf3fbec" - ); -} diff --git a/src/tests/compiler/optimizer/output.rs b/src/tests/compiler/optimizer/output.rs index 6ac41c88..90b01aef 100644 --- a/src/tests/compiler/optimizer/output.rs +++ b/src/tests/compiler/optimizer/output.rs @@ -47,8 +47,7 @@ fn run_with_cost( as_classic_env, Some(RunProgramOption { max_cost: Some(MAX_RUN_COST), - pre_eval_f: None, - strict: false, + .. RunProgramOption::default() }), ) .map_err(|e| RunFailure::RunErr(sexp.loc(), format!("{} in {} {}", e.1, sexp, env))) From b5fb3d1c0c076f938a4e3841a7cb615126344ddd Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 Jul 2024 15:33:25 -0700 Subject: [PATCH 5/8] fmt --- src/classic/clvm_tools/stages/stage_0.rs | 4 +++- src/compiler/clvm.rs | 15 ++++++++++----- src/tests/compiler/optimizer/output.rs | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/classic/clvm_tools/stages/stage_0.rs b/src/classic/clvm_tools/stages/stage_0.rs index 4bd73e60..6aba8c64 100644 --- a/src/classic/clvm_tools/stages/stage_0.rs +++ b/src/classic/clvm_tools/stages/stage_0.rs @@ -50,7 +50,9 @@ impl TRunProgram for DefaultProgramRunner { run_program_with_pre_eval( allocator, - &ChiaDialect::new(NO_UNKNOWN_OPS | ((new_operators as u32) * ENABLE_BLS_OPS_OUTSIDE_GUARD)), + &ChiaDialect::new( + NO_UNKNOWN_OPS | ((new_operators as u32) * ENABLE_BLS_OPS_OUTSIDE_GUARD), + ), program, args, max_cost, diff --git a/src/compiler/clvm.rs b/src/compiler/clvm.rs index d38cd677..2d01ee41 100644 --- a/src/compiler/clvm.rs +++ b/src/compiler/clvm.rs @@ -13,7 +13,7 @@ use sha2::Digest; use sha2::Sha256; use crate::classic::clvm::__type_compatibility__::{bi_one, bi_zero}; -use crate::classic::clvm_tools::stages::stage_0::{TRunProgram, RunProgramOption}; +use crate::classic::clvm_tools::stages::stage_0::{RunProgramOption, TRunProgram}; use crate::compiler::prims; use crate::compiler::runtypes::RunFailure; @@ -396,10 +396,15 @@ fn apply_op( let converted_args = convert_to_clvm_rs(allocator, wrapped_args.clone())?; runner - .run_program(allocator, converted_app, converted_args, Some(RunProgramOption { - new_operators: true, - .. RunProgramOption::default() - })) + .run_program( + allocator, + converted_app, + converted_args, + Some(RunProgramOption { + new_operators: true, + ..RunProgramOption::default() + }), + ) .map_err(|e| { RunFailure::RunErr( head.loc(), diff --git a/src/tests/compiler/optimizer/output.rs b/src/tests/compiler/optimizer/output.rs index 90b01aef..36ee6dec 100644 --- a/src/tests/compiler/optimizer/output.rs +++ b/src/tests/compiler/optimizer/output.rs @@ -47,7 +47,7 @@ fn run_with_cost( as_classic_env, Some(RunProgramOption { max_cost: Some(MAX_RUN_COST), - .. RunProgramOption::default() + ..RunProgramOption::default() }), ) .map_err(|e| RunFailure::RunErr(sexp.loc(), format!("{} in {} {}", e.1, sexp, env))) From 5dd4de0147173c00a1f65b8743e240bfffdf350c Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 Jul 2024 15:38:49 -0700 Subject: [PATCH 6/8] Reverse part of this because it's taken care of by operator selection --- src/classic/clvm_tools/stages/stage_2/operators.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/classic/clvm_tools/stages/stage_2/operators.rs b/src/classic/clvm_tools/stages/stage_2/operators.rs index 11c3b8d0..5b433395 100644 --- a/src/classic/clvm_tools/stages/stage_2/operators.rs +++ b/src/classic/clvm_tools/stages/stage_2/operators.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use std::rc::Rc; use clvm_rs::allocator::{Allocator, NodePtr, SExp}; -use clvm_rs::chia_dialect::{ChiaDialect, ENABLE_BLS_OPS_OUTSIDE_GUARD, NO_UNKNOWN_OPS}; +use clvm_rs::chia_dialect::{ChiaDialect, NO_UNKNOWN_OPS}; use clvm_rs::cost::Cost; use clvm_rs::dialect::{Dialect, OperatorSet}; use clvm_rs::reduction::{EvalErr, Reduction, Response}; @@ -122,9 +122,7 @@ impl Drop for CompilerOperators { impl CompilerOperatorsInternal { pub fn new(source_file: &str, search_paths: Vec, symbols_extra_info: bool) -> Self { - let base_dialect = Rc::new(ChiaDialect::new( - NO_UNKNOWN_OPS | ENABLE_BLS_OPS_OUTSIDE_GUARD, - )); + let base_dialect = Rc::new(ChiaDialect::new(NO_UNKNOWN_OPS)); let base_runner = Rc::new(DefaultProgramRunner::new()); CompilerOperatorsInternal { base_dialect, From 9642672243651d919557c1467264f67e3de52fd3 Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 22 Jul 2024 09:42:23 -0700 Subject: [PATCH 7/8] remove test output --- src/tests/compiler/cldb.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/tests/compiler/cldb.rs b/src/tests/compiler/cldb.rs index 1a72143b..d10b8780 100644 --- a/src/tests/compiler/cldb.rs +++ b/src/tests/compiler/cldb.rs @@ -78,7 +78,6 @@ where } if let Some(result) = cldbrun.step(&mut allocator) { - eprintln!("{:?}", result); output = result; if !viewer.show(&cldbrun.current_step(), Some(output.clone())) { return None; @@ -335,7 +334,6 @@ impl ExpectFailure { impl StepOfCldbViewer for ExpectFailure { fn show(&mut self, _step: &RunStep, output: Option>) -> bool { - eprintln!("{:?}", output); if let Some(o) = output { if let Some(_) = o.get("Failure") { let did_throw = o.get("Operator") == Some(&"8".to_string()); From 99706075b7ae8de41379d7032d6ea6d24029bdc9 Mon Sep 17 00:00:00 2001 From: arty Date: Tue, 23 Jul 2024 10:11:36 -0700 Subject: [PATCH 8/8] More tests of new operators just to be sure --- src/tests/compiler/cldb.rs | 59 +++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/src/tests/compiler/cldb.rs b/src/tests/compiler/cldb.rs index d10b8780..d122ef7b 100644 --- a/src/tests/compiler/cldb.rs +++ b/src/tests/compiler/cldb.rs @@ -456,24 +456,49 @@ fn test_cldb_hierarchy_before_hex() { } #[test] -fn test_cldb_coinid_outside_guard() { +fn test_cldb_operators_outside_guard() { let filename = "coinid.clvm"; let loc = Srcloc::start(filename); - let program = "(coinid (sha256 (q . 3)) (sha256 (q . 3)) (q . 4))"; - let parsed = parse_sexp(loc.clone(), program.as_bytes().iter().copied()).expect("should parse"); - let args = Rc::new(SExp::Nil(loc)); - let program_lines = Rc::new(vec![program.to_string()]); - - assert_eq!( - run_clvm_in_cldb( - filename, - program_lines, - parsed[0].clone(), - HashMap::new(), - args, - &mut DoesntWatchCldb {}, - FAVOR_HEX, + let inputs_outputs = [ + ( + "(coinid (sha256 (q . 3)) (sha256 (q . 3)) (q . 4))", + "()", + "0x9f7f12b86a583805a4442879b7b5b531469e45c7e753e5fd431058e90bf3fbec" ), - Some("0x9f7f12b86a583805a4442879b7b5b531469e45c7e753e5fd431058e90bf3fbec".to_string()) - ); + ( + "(modpow (q . 2) (q . 8) (q . 10))", + "()", + "6" + ), + ( + "(% (q . 13) (q . 5))", + "()", + "3" + ), + ( + // resources/tests/bls/modern-bls-verify-signature.clsp + "(2 (1 59 (1 . 0xb00ab9a8af54804b43067531d96c176710c05980fccf8eee1ae12a4fd543df929cce860273af931fe4fdbc407d495f73114ab7d17ef08922e56625daada0497582340ecde841a9e997f2f557653c21c070119662dd2efa47e2d6c5e2de00eefa) (1 . 0x86243290bbcbfd9ae75bdece7981965350208eb5e99b04d5cd24e955ada961f8c0a162dee740be7bdc6c3c0613ba2eb1) 5) (4 (1) 1))", + "(0x0102030405)", + "()" + ) + ]; + + for (program, arg_str, expected) in inputs_outputs { + let parsed = parse_sexp(loc.clone(), program.bytes()).expect("should parse"); + let args_parsed = parse_sexp(loc.clone(), arg_str.bytes()).expect("should parse"); + let program_lines = Rc::new(vec![program.to_string()]); + + assert_eq!( + run_clvm_in_cldb( + filename, + program_lines, + parsed[0].clone(), + HashMap::new(), + args_parsed[0].clone(), + &mut DoesntWatchCldb {}, + FAVOR_HEX, + ), + Some(expected.to_string()) + ); + } }