From 6b2f241f51f772d13f1d1214aa9dc69252b8bded Mon Sep 17 00:00:00 2001 From: tedison Date: Sun, 3 Nov 2024 17:00:18 -0500 Subject: [PATCH 1/3] Permit complex calldata when initializing contracts --- Cargo.lock | 3 +++ Cargo.toml | 2 ++ bin/sozo/src/commands/call.rs | 2 +- bin/sozo/src/commands/execute.rs | 2 +- bin/sozo/src/commands/mod.rs | 1 - crates/dojo/world/Cargo.toml | 3 +++ .../dojo/world/src/config}/calldata_decoder.rs | 0 crates/dojo/world/src/config/mod.rs | 1 + crates/sozo/ops/src/migrate/mod.rs | 9 +++------ 9 files changed, 14 insertions(+), 9 deletions(-) rename {bin/sozo/src/commands => crates/dojo/world/src/config}/calldata_decoder.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index ce3486afb1..b4d364485a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4853,7 +4853,10 @@ dependencies = [ "cainome 0.4.6", "cairo-lang-starknet-classes", "dojo-types 1.0.0-rc.1", + "hex", + "hex-literal", "ipfs-api-backend-hyper", + "num-bigint", "regex", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 7869d39b6a..d42daa8e17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -169,6 +169,7 @@ futures = "0.3.30" futures-util = "0.3.30" hashlink = "0.9.1" hex = "0.4.3" +hex-literal = "0.4.1" http = "0.2.9" indexmap = "2.2.5" indoc = "1.0.7" @@ -178,6 +179,7 @@ lazy_static = "1.4.0" log = "0.4.21" metrics = "0.23.0" num-traits = { version = "0.2", default-features = false } +num-bigint = "0.4.3" once_cell = "1.0" parking_lot = "0.12.1" postcard = { version = "1.0.10", features = [ "use-std" ], default-features = false } diff --git a/bin/sozo/src/commands/call.rs b/bin/sozo/src/commands/call.rs index 65a007e19f..36e739d6a7 100644 --- a/bin/sozo/src/commands/call.rs +++ b/bin/sozo/src/commands/call.rs @@ -11,7 +11,7 @@ use tracing::trace; use super::options::starknet::StarknetOptions; use super::options::world::WorldOptions; -use crate::commands::calldata_decoder; +use dojo_world::config::calldata_decoder; use crate::utils; #[derive(Debug, Args)] diff --git a/bin/sozo/src/commands/execute.rs b/bin/sozo/src/commands/execute.rs index 038e4afa40..ffd5c8f19d 100644 --- a/bin/sozo/src/commands/execute.rs +++ b/bin/sozo/src/commands/execute.rs @@ -14,7 +14,7 @@ use super::options::account::AccountOptions; use super::options::starknet::StarknetOptions; use super::options::transaction::TransactionOptions; use super::options::world::WorldOptions; -use crate::commands::calldata_decoder; +use dojo_world::config::calldata_decoder; use crate::utils; #[derive(Debug, Args)] diff --git a/bin/sozo/src/commands/mod.rs b/bin/sozo/src/commands/mod.rs index 92a82ba995..74c689e789 100644 --- a/bin/sozo/src/commands/mod.rs +++ b/bin/sozo/src/commands/mod.rs @@ -7,7 +7,6 @@ use tracing::info_span; pub(crate) mod build; pub(crate) mod call; -pub(crate) mod calldata_decoder; pub(crate) mod clean; pub(crate) mod execute; pub(crate) mod hash; diff --git a/crates/dojo/world/Cargo.toml b/crates/dojo/world/Cargo.toml index 9986c14186..c3cd9a6d44 100644 --- a/crates/dojo/world/Cargo.toml +++ b/crates/dojo/world/Cargo.toml @@ -24,6 +24,9 @@ dojo-types.workspace = true ipfs-api-backend-hyper = { git = "https://github.com/ferristseng/rust-ipfs-api", rev = "af2c17f7b19ef5b9898f458d97a90055c3605633", features = [ "with-hyper-rustls" ], optional = true } toml.workspace = true url.workspace = true +hex.workspace = true +hex-literal.workspace = true +num-bigint.workspace = true [dev-dependencies] tokio.workspace = true diff --git a/bin/sozo/src/commands/calldata_decoder.rs b/crates/dojo/world/src/config/calldata_decoder.rs similarity index 100% rename from bin/sozo/src/commands/calldata_decoder.rs rename to crates/dojo/world/src/config/calldata_decoder.rs diff --git a/crates/dojo/world/src/config/mod.rs b/crates/dojo/world/src/config/mod.rs index 8c0753f98a..35e0323de9 100644 --- a/crates/dojo/world/src/config/mod.rs +++ b/crates/dojo/world/src/config/mod.rs @@ -1,3 +1,4 @@ +pub mod calldata_decoder; pub mod environment; pub mod metadata_config; pub mod migration_config; diff --git a/crates/sozo/ops/src/migrate/mod.rs b/crates/sozo/ops/src/migrate/mod.rs index 9de60e7e6b..6269276d6f 100644 --- a/crates/sozo/ops/src/migrate/mod.rs +++ b/crates/sozo/ops/src/migrate/mod.rs @@ -19,10 +19,10 @@ //! initialization of contracts can mutate resources. use std::collections::HashMap; -use std::str::FromStr; use cainome::cairo_serde::{ByteArray, ClassHash, ContractAddress}; use dojo_utils::{Declarer, Deployer, Invoker, TxnConfig}; +use dojo_world::config::calldata_decoder::decode_calldata; use dojo_world::config::ProfileConfig; use dojo_world::contracts::WorldContract; use dojo_world::diff::{Manifest, ResourceDiff, WorldDiff, WorldStatus}; @@ -168,11 +168,8 @@ where // The injection of class hash and addresses is no longer supported since the // world contains an internal DNS. let args = if let Some(args) = init_call_args { - let mut parsed_args = vec![]; - for arg in args { - parsed_args.push(Felt::from_str(arg)?); - } - parsed_args + decode_calldata(&args.join(",")) + .map_err(|_| MigrationError::InitCallArgs)? } else { vec![] }; From f43867d738328792499b6364c380ddd490e6425a Mon Sep 17 00:00:00 2001 From: tedison Date: Sun, 3 Nov 2024 22:30:37 -0500 Subject: [PATCH 2/3] Address PR comments + format --- Cargo.lock | 139 +---------------------------- bin/sozo/Cargo.toml | 14 --- bin/sozo/src/commands/call.rs | 2 +- bin/sozo/src/commands/execute.rs | 2 +- bin/sozo/src/main.rs | 2 +- crates/sozo/ops/src/migrate/mod.rs | 1 - 6 files changed, 5 insertions(+), 155 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4d364485a..f28ea984f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3745,7 +3745,7 @@ version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ - "encode_unicode 0.3.6", + "encode_unicode", "lazy_static", "libc", "unicode-width", @@ -4113,27 +4113,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "csv" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" -dependencies = [ - "memchr", -] - [[package]] name = "ctr" version = "0.9.2" @@ -5019,12 +4998,6 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - [[package]] name = "encoding_rs" version = "0.8.34" @@ -5388,15 +5361,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -7490,26 +7454,6 @@ dependencies = [ "str_stack", ] -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - [[package]] name = "inout" version = "0.1.3" @@ -8572,26 +8516,6 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "kqueue" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - [[package]] name = "kstring" version = "2.0.2" @@ -9544,18 +9468,6 @@ dependencies = [ "adler2", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - [[package]] name = "mio" version = "1.0.2" @@ -9888,25 +9800,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" -[[package]] -name = "notify" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" -dependencies = [ - "bitflags 2.6.0", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "log", - "mio 0.8.11", - "walkdir", - "windows-sys 0.48.0", -] - [[package]] name = "ntapi" version = "0.4.1" @@ -10851,20 +10744,6 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "prettytable-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a" -dependencies = [ - "csv", - "encode_unicode 1.0.0", - "is-terminal", - "lazy_static", - "term", - "unicode-width", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -13382,11 +13261,8 @@ dependencies = [ "anyhow", "assert_fs", "async-trait", - "bigdecimal 0.4.5", - "cainome 0.4.6", "cairo-lang-compiler", "cairo-lang-filesystem", - "cairo-lang-plugins", "cairo-lang-project", "cairo-lang-starknet", "cairo-lang-test-plugin", @@ -13396,37 +13272,26 @@ dependencies = [ "clap", "clap-verbosity-flag", "colored", - "console", "dojo-bindgen", "dojo-lang 1.0.0-rc.1", "dojo-test-utils", "dojo-types 1.0.0-rc.1", "dojo-utils", "dojo-world", - "hex", - "hex-literal", "itertools 0.12.1", "katana-rpc-api", "katana-runner", - "notify", - "num-bigint", - "num-integer", - "prettytable-rs", - "regex", "reqwest 0.11.27", - "rpassword", "scarb", "scarb-ui", "semver 1.0.23", "serde", - "serde_json", "slot", "smol_str", "snapbox", "sozo-ops", "sozo-scarbext", "sozo-walnut", - "spinoff", "starknet 0.12.0", "starknet-crypto 0.7.2", "tabled", @@ -14708,7 +14573,7 @@ dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.2", + "mio", "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", diff --git a/bin/sozo/Cargo.toml b/bin/sozo/Cargo.toml index a947156a5c..8541eeab8e 100644 --- a/bin/sozo/Cargo.toml +++ b/bin/sozo/Cargo.toml @@ -10,10 +10,8 @@ slot = { workspace = true, optional = true } anyhow.workspace = true async-trait.workspace = true -bigdecimal.workspace = true cairo-lang-compiler.workspace = true cairo-lang-filesystem.workspace = true -cairo-lang-plugins.workspace = true cairo-lang-project.workspace = true cairo-lang-starknet.workspace = true cairo-lang-test-plugin.workspace = true @@ -23,33 +21,22 @@ camino.workspace = true clap.workspace = true clap-verbosity-flag.workspace = true colored.workspace = true -console.workspace = true dojo-bindgen.workspace = true dojo-lang.workspace = true dojo-types.workspace = true dojo-utils.workspace = true dojo-world.workspace = true -hex = "0.4.3" -hex-literal = "0.4.1" itertools.workspace = true katana-rpc-api.workspace = true -notify = "6.0.1" -num-bigint = "0.4.3" -num-integer = "0.1.45" -prettytable-rs = "0.10.0" tabled = { version = "0.16.0", features = [ "ansi" ] } -regex.workspace = true -rpassword.workspace = true scarb.workspace = true scarb-ui.workspace = true semver.workspace = true serde.workspace = true -serde_json.workspace = true smol_str.workspace = true sozo-ops.workspace = true sozo-walnut = { workspace = true, optional = true } sozo-scarbext.workspace = true -spinoff.workspace = true starknet.workspace = true starknet-crypto.workspace = true thiserror.workspace = true @@ -60,7 +47,6 @@ tracing-log.workspace = true tracing-subscriber.workspace = true url.workspace = true -cainome.workspace = true reqwest = { workspace = true, features = [ "json" ], optional = true } [dev-dependencies] diff --git a/bin/sozo/src/commands/call.rs b/bin/sozo/src/commands/call.rs index 36e739d6a7..f38adf22ac 100644 --- a/bin/sozo/src/commands/call.rs +++ b/bin/sozo/src/commands/call.rs @@ -1,6 +1,7 @@ use anyhow::{anyhow, Result}; use clap::Args; use dojo_types::naming; +use dojo_world::config::calldata_decoder; use scarb::core::Config; use sozo_ops::resource_descriptor::ResourceDescriptor; use sozo_scarbext::WorkspaceExt; @@ -11,7 +12,6 @@ use tracing::trace; use super::options::starknet::StarknetOptions; use super::options::world::WorldOptions; -use dojo_world::config::calldata_decoder; use crate::utils; #[derive(Debug, Args)] diff --git a/bin/sozo/src/commands/execute.rs b/bin/sozo/src/commands/execute.rs index ffd5c8f19d..e9698ddc0d 100644 --- a/bin/sozo/src/commands/execute.rs +++ b/bin/sozo/src/commands/execute.rs @@ -2,6 +2,7 @@ use anyhow::{anyhow, Result}; use clap::Args; use dojo_types::naming; use dojo_utils::{Invoker, TxnConfig}; +use dojo_world::config::calldata_decoder; use scarb::core::Config; use sozo_ops::resource_descriptor::ResourceDescriptor; use sozo_scarbext::WorkspaceExt; @@ -14,7 +15,6 @@ use super::options::account::AccountOptions; use super::options::starknet::StarknetOptions; use super::options::transaction::TransactionOptions; use super::options::world::WorldOptions; -use dojo_world::config::calldata_decoder; use crate::utils; #[derive(Debug, Args)] diff --git a/bin/sozo/src/main.rs b/bin/sozo/src/main.rs index f2855135a4..26697bcf63 100644 --- a/bin/sozo/src/main.rs +++ b/bin/sozo/src/main.rs @@ -1,4 +1,4 @@ -// #![cfg_attr(not(test), warn(unused_crate_dependencies))] +#![warn(unused_crate_dependencies)] use std::env; use std::process::exit; diff --git a/crates/sozo/ops/src/migrate/mod.rs b/crates/sozo/ops/src/migrate/mod.rs index 6269276d6f..d1862ead60 100644 --- a/crates/sozo/ops/src/migrate/mod.rs +++ b/crates/sozo/ops/src/migrate/mod.rs @@ -164,7 +164,6 @@ where }; if do_init { - // Currently, only felts are supported in the init call data. // The injection of class hash and addresses is no longer supported since the // world contains an internal DNS. let args = if let Some(args) = init_call_args { From d00d56f83af91895ebe505610a572c44ff880eca Mon Sep 17 00:00:00 2001 From: tedison Date: Mon, 4 Nov 2024 10:41:53 -0500 Subject: [PATCH 3/3] fix CI + remove dead code --- Cargo.lock | 31 +------------------------------ bin/sozo/Cargo.toml | 3 +-- bin/sozo/tests/utils/mod.rs | 1 - bin/sozo/tests/utils/snapbox.rs | 11 ----------- 4 files changed, 2 insertions(+), 44 deletions(-) delete mode 100644 bin/sozo/tests/utils/snapbox.rs diff --git a/Cargo.lock b/Cargo.lock index f28ea984f7..a8e2672a08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9794,12 +9794,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - [[package]] name = "ntapi" version = "0.4.1" @@ -13164,28 +13158,6 @@ dependencies = [ "serde", ] -[[package]] -name = "snapbox" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b831b6e80fbcd2889efa75b185d24005f85981431495f995292b25836519d84" -dependencies = [ - "anstream", - "anstyle", - "normalize-line-endings", - "similar", - "snapbox-macros", -] - -[[package]] -name = "snapbox-macros" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16569f53ca23a41bb6f62e0a5084aa1661f4814a67fa33696a79073e03a664af" -dependencies = [ - "anstream", -] - [[package]] name = "snow" version = "0.9.6" @@ -13259,7 +13231,6 @@ name = "sozo" version = "1.0.0-rc.1" dependencies = [ "anyhow", - "assert_fs", "async-trait", "cairo-lang-compiler", "cairo-lang-filesystem", @@ -13286,9 +13257,9 @@ dependencies = [ "scarb-ui", "semver 1.0.23", "serde", + "serde_json", "slot", "smol_str", - "snapbox", "sozo-ops", "sozo-scarbext", "sozo-walnut", diff --git a/bin/sozo/Cargo.toml b/bin/sozo/Cargo.toml index 8541eeab8e..53873c14d1 100644 --- a/bin/sozo/Cargo.toml +++ b/bin/sozo/Cargo.toml @@ -50,10 +50,9 @@ url.workspace = true reqwest = { workspace = true, features = [ "json" ], optional = true } [dev-dependencies] -assert_fs.workspace = true dojo-test-utils = { workspace = true, features = [ "build-examples" ] } katana-runner.workspace = true -snapbox = "0.4.6" +serde_json.workspace = true [features] default = [ "controller", "walnut" ] diff --git a/bin/sozo/tests/utils/mod.rs b/bin/sozo/tests/utils/mod.rs index 36747e0cb2..76c718c333 100644 --- a/bin/sozo/tests/utils/mod.rs +++ b/bin/sozo/tests/utils/mod.rs @@ -1,2 +1 @@ -pub mod snapbox; pub mod stdout; diff --git a/bin/sozo/tests/utils/snapbox.rs b/bin/sozo/tests/utils/snapbox.rs deleted file mode 100644 index 5a97b42c7f..0000000000 --- a/bin/sozo/tests/utils/snapbox.rs +++ /dev/null @@ -1,11 +0,0 @@ -use std::process::Command as StdCommand; - -use snapbox::cmd::{cargo_bin, Command as SnapboxCommand}; - -pub fn get_snapbox() -> SnapboxCommand { - SnapboxCommand::from_std(std()) -} - -fn std() -> StdCommand { - StdCommand::new(cargo_bin("sozo")) -}