From 5fb0311ca01672ef84f2df86f694a9ed1bfaa86b Mon Sep 17 00:00:00 2001 From: Ammar Arif Date: Wed, 14 Aug 2024 21:29:11 -0700 Subject: [PATCH] wip --- Cargo.lock | 347 +++++++++--------- Cargo.toml | 38 +- .../commands/options/account/controller.rs | 79 ++-- bin/sozo/src/commands/options/account/mod.rs | 7 +- bin/sozo/src/commands/options/account/type.rs | 16 +- crates/dojo-world/src/contracts/abi/model.rs | 3 +- crates/dojo-world/src/migration/mod.rs | 4 +- crates/katana/controller/src/lib.rs | 28 +- crates/katana/controller/src/webauthn.rs | 4 +- .../executor/tests/fixtures/transaction.rs | 33 +- crates/katana/rpc/rpc/tests/common/mod.rs | 3 +- crates/katana/rpc/rpc/tests/starknet.rs | 4 +- crates/katana/rpc/rpc/tests/torii.rs | 4 +- crates/saya/core/src/dojo_os/mod.rs | 4 +- crates/saya/core/src/verifier/starknet.rs | 4 +- crates/sozo/ops/src/execute.rs | 4 +- crates/sozo/ops/src/migration/mod.rs | 4 +- crates/torii/core/src/sql_test.rs | 4 +- crates/torii/graphql/src/tests/mod.rs | 4 +- .../grpc/src/server/tests/entities_test.rs | 4 +- 20 files changed, 318 insertions(+), 280 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b608a30cab..6d71b2bc58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,36 +15,45 @@ dependencies = [ [[package]] name = "account_sdk" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/controller?rev=512ff89#512ff894dadfa747c270c1be54ef82c223e9faa0" dependencies = [ "anyhow", "async-trait", + "auto_impl", "base64 0.22.1", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", + "base64urlsafedata", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", "coset", "ecdsa", "futures", + "gloo-net 0.6.0", + "hex", "indexmap 2.2.6", "js-sys", "lazy_static", + "nom", "num-traits 0.2.19", "p256", "primitive-types", + "reqwest 0.11.27", "serde", + "serde_cbor_2", "serde_json", + "serde_with 3.9.0", "sha2 0.10.8", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-types-core", "thiserror", "tokio", "toml 0.8.15", "u256-literal", "url", + "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test", - "wasm-webauthn", "web-sys", + "webauthn-rs-proto", ] [[package]] @@ -1677,6 +1686,16 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "base64urlsafedata" +version = "0.5.0" +source = "git+https://github.com/cartridge-gg/webauthn-rs?rev=a6cea88#a6cea888b953382c6d0604bd08bbede195205140" +dependencies = [ + "base64 0.21.7", + "paste", + "serde", +] + [[package]] name = "bech32" version = "0.9.1" @@ -2155,14 +2174,14 @@ checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "cainome" version = "0.2.3" -source = "git+https://github.com/cartridge-gg/cainome?tag=v0.3.2#3aec6d1465e24af3765d3b9220cc233199a6aa14" +source = "git+https://github.com/cartridge-gg/cainome?branch=main#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "anyhow", "async-trait", - "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", - "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", - "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", - "cainome-rs-macro 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", + "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", + "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", + "cainome-rs-macro 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", "camino", "clap", "clap_complete", @@ -2180,14 +2199,14 @@ dependencies = [ [[package]] name = "cainome" version = "0.2.3" -source = "git+https://github.com/cartridge-gg/cainome?rev=e67d925#e67d9259fc562cf743a1a22e5a936e66e073592a" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "anyhow", "async-trait", - "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", - "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", - "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", - "cainome-rs-macro 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", + "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", + "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", + "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", + "cainome-rs-macro 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", "camino", "clap", "clap_complete", @@ -2205,7 +2224,7 @@ dependencies = [ [[package]] name = "cainome-cairo-serde" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?tag=v0.3.2#3aec6d1465e24af3765d3b9220cc233199a6aa14" +source = "git+https://github.com/cartridge-gg/cainome?branch=main#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "serde", "starknet 0.11.0", @@ -2215,7 +2234,7 @@ dependencies = [ [[package]] name = "cainome-cairo-serde" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?rev=e67d925#e67d9259fc562cf743a1a22e5a936e66e073592a" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "serde", "starknet 0.11.0", @@ -2225,7 +2244,7 @@ dependencies = [ [[package]] name = "cainome-parser" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?tag=v0.3.2#3aec6d1465e24af3765d3b9220cc233199a6aa14" +source = "git+https://github.com/cartridge-gg/cainome?branch=main#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "convert_case 0.6.0", "quote", @@ -2238,7 +2257,7 @@ dependencies = [ [[package]] name = "cainome-parser" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?rev=e67d925#e67d9259fc562cf743a1a22e5a936e66e073592a" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "convert_case 0.6.0", "quote", @@ -2251,11 +2270,11 @@ dependencies = [ [[package]] name = "cainome-rs" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?tag=v0.3.2#3aec6d1465e24af3765d3b9220cc233199a6aa14" +source = "git+https://github.com/cartridge-gg/cainome?branch=main#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "anyhow", - "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", - "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", + "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", "camino", "prettyplease 0.2.20", "proc-macro2", @@ -2269,11 +2288,11 @@ dependencies = [ [[package]] name = "cainome-rs" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?rev=e67d925#e67d9259fc562cf743a1a22e5a936e66e073592a" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "anyhow", - "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", - "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", + "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", + "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", "camino", "prettyplease 0.2.20", "proc-macro2", @@ -2287,12 +2306,12 @@ dependencies = [ [[package]] name = "cainome-rs-macro" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?tag=v0.3.2#3aec6d1465e24af3765d3b9220cc233199a6aa14" +source = "git+https://github.com/cartridge-gg/cainome?branch=main#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "anyhow", - "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", - "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", - "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", + "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", + "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?branch=main)", "proc-macro2", "quote", "serde_json", @@ -2304,12 +2323,12 @@ dependencies = [ [[package]] name = "cainome-rs-macro" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/cainome?rev=e67d925#e67d9259fc562cf743a1a22e5a936e66e073592a" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" dependencies = [ "anyhow", - "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", - "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", - "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=e67d925)", + "cainome-cairo-serde 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", + "cainome-parser 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", + "cainome-rs 0.1.0 (git+https://github.com/cartridge-gg/cainome?rev=fb91215)", "proc-macro2", "quote", "serde_json", @@ -2968,7 +2987,7 @@ dependencies = [ "serde", "serde_json", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "tokio", "url", @@ -3274,7 +3293,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", - "half", + "half 2.4.1", ] [[package]] @@ -4152,34 +4171,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_builder" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" -dependencies = [ - "derive_builder_macro 0.12.0", -] - [[package]] name = "derive_builder" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0350b5cb0331628a5916d6c5c0b72e97393b8b6b03b47a9284f4e7f5a405ffd7" dependencies = [ - "derive_builder_macro 0.20.0", -] - -[[package]] -name = "derive_builder_core" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", + "derive_builder_macro", ] [[package]] @@ -4194,23 +4192,13 @@ dependencies = [ "syn 2.0.71", ] -[[package]] -name = "derive_builder_macro" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" -dependencies = [ - "derive_builder_core 0.12.0", - "syn 1.0.109", -] - [[package]] name = "derive_builder_macro" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ - "derive_builder_core 0.20.0", + "derive_builder_core", "syn 2.0.71", ] @@ -4376,7 +4364,7 @@ version = "1.0.0-alpha.5" dependencies = [ "assert_matches", "async-trait", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "camino", "chrono", "convert_case 0.6.0", @@ -4404,7 +4392,7 @@ version = "1.0.0-alpha.5" dependencies = [ "anyhow", "assert_fs", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "cairo-lang-compiler", "cairo-lang-debug", "cairo-lang-defs", @@ -4443,10 +4431,10 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "smol_str", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "test-log", "thiserror", "toml 0.8.15", @@ -4506,7 +4494,7 @@ dependencies = [ "scarb-ui", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "smol_str", "starknet 0.10.0", "starknet 0.11.0", @@ -4521,7 +4509,7 @@ dependencies = [ name = "dojo-types" version = "1.0.0-alpha.5" dependencies = [ - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "crypto-bigint", "hex", "itertools 0.12.1", @@ -4542,7 +4530,7 @@ dependencies = [ "assert_fs", "assert_matches", "async-trait", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "cairo-lang-filesystem", "cairo-lang-project", "cairo-lang-starknet", @@ -4561,11 +4549,11 @@ dependencies = [ "scarb", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "similar-asserts", "smol_str", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile", "thiserror", "tokio", @@ -6208,7 +6196,28 @@ dependencies = [ "futures-channel", "futures-core", "futures-sink", - "gloo-utils", + "gloo-utils 0.1.7", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.1.0", "js-sys", "pin-project", "serde", @@ -6244,6 +6253,19 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "good_lp" version = "1.8.1" @@ -6361,6 +6383,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" + [[package]] name = "half" version = "2.4.1" @@ -7461,7 +7489,7 @@ dependencies = [ "futures-channel", "futures-timer", "futures-util", - "gloo-net", + "gloo-net 0.2.6", "http 0.2.12", "jsonrpsee-core 0.16.3", "jsonrpsee-types 0.16.3", @@ -7937,10 +7965,10 @@ dependencies = [ "rand", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "similar-asserts", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "strum_macros 0.25.3", "thiserror", ] @@ -7979,7 +8007,7 @@ dependencies = [ "alloy-primitives", "anyhow", "assert_matches", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "dojo-metrics", "dojo-test-utils", "dojo-world", @@ -8038,7 +8066,7 @@ dependencies = [ "rstest 0.18.2", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "starknet 0.11.0", "thiserror", ] @@ -11909,7 +11937,7 @@ dependencies = [ "saya-core", "serde_json", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio", "tracing", "tracing-subscriber", @@ -11941,7 +11969,7 @@ dependencies = [ "serde", "serde_json", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "thiserror", "tokio", @@ -11972,7 +12000,7 @@ dependencies = [ "num-traits 0.2.19", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "starknet 0.11.0", "thiserror", "tokio", @@ -12010,7 +12038,7 @@ dependencies = [ "create-output-dir", "data-encoding", "deno_task_shell", - "derive_builder 0.20.0", + "derive_builder", "dialoguer", "directories", "dunce", @@ -12087,7 +12115,7 @@ version = "1.12.0" source = "git+https://github.com/software-mansion/scarb?tag=v2.7.0#e9a2b8716daf7388bfab5e4b0a2656e1b0c02d4d" dependencies = [ "camino", - "derive_builder 0.20.0", + "derive_builder", "semver 1.0.23", "serde", "serde_json", @@ -12338,22 +12366,21 @@ dependencies = [ ] [[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" +name = "serde_bytes" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ - "js-sys", "serde", - "wasm-bindgen", ] [[package]] -name = "serde_bytes" -version = "0.11.15" +name = "serde_cbor_2" +version = "0.12.0-dev" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "b46d75f449e01f1eddbe9b00f432d616fbbd899b809c837d0fbc380496a0dd55" dependencies = [ + "half 1.8.3", "serde", ] @@ -12719,8 +12746,8 @@ dependencies = [ [[package]] name = "slot" version = "0.8.0" -source = "git+https://github.com/cartridge-gg/slot?rev=4c1165d#4c1165d8308495f8de57a8ac52362ce8322e545b" dependencies = [ + "account_sdk", "anyhow", "axum", "dirs 5.0.1", @@ -12729,7 +12756,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "starknet 0.11.0", "tempfile", "thiserror", @@ -12840,7 +12867,7 @@ dependencies = [ "assert_fs", "async-trait", "bigdecimal 0.4.5", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "cairo-lang-compiler", "cairo-lang-defs", "cairo-lang-filesystem", @@ -12885,7 +12912,7 @@ dependencies = [ "snapbox", "sozo-ops", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tracing", @@ -12902,7 +12929,7 @@ dependencies = [ "assert_fs", "async-trait", "bigdecimal 0.4.5", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "cairo-lang-compiler", "cairo-lang-defs", "cairo-lang-filesystem", @@ -12936,10 +12963,10 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "smol_str", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "tee", "thiserror", "tokio", @@ -13233,13 +13260,12 @@ dependencies = [ [[package]] name = "starknet" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e633a772f59214c296d5037c95c36b72792c9360323818da2b625c7b4ec4b49" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "starknet-accounts 0.10.0", "starknet-contract 0.10.0", "starknet-core 0.11.1", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-macros 0.2.0", "starknet-providers 0.11.0", "starknet-signers 0.9.0", @@ -13262,13 +13288,12 @@ dependencies = [ [[package]] name = "starknet-accounts" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee8a6b588a22c7e79f5d8d4e33413387db63a8beb98be8610138541794cc0a5" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "async-trait", "auto_impl", "starknet-core 0.11.1", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-providers 0.11.0", "starknet-signers 0.9.0", "thiserror", @@ -13292,12 +13317,11 @@ dependencies = [ [[package]] name = "starknet-contract" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5f91344f1e0b81873b6dc235c50ae4d084c6ea4dd4a1e3e27ad895803adb610" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "starknet-accounts 0.10.0", "starknet-core 0.11.1", "starknet-providers 0.11.0", @@ -13325,7 +13349,7 @@ dependencies = [ [[package]] name = "starknet-core" version = "0.11.1" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "base64 0.21.7", "crypto-bigint", @@ -13334,9 +13358,9 @@ dependencies = [ "serde", "serde_json", "serde_json_pythonic", - "serde_with 2.3.3", + "serde_with 3.9.0", "sha3", - "starknet-crypto 0.7.0", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-types-core", ] @@ -13382,8 +13406,9 @@ dependencies = [ [[package]] name = "starknet-crypto" -version = "0.7.0" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" dependencies = [ "crypto-bigint", "hex", @@ -13393,8 +13418,8 @@ dependencies = [ "num-traits 0.2.19", "rfc6979", "sha2 0.10.8", - "starknet-crypto-codegen 0.4.0 (git+https://github.com/kariy/starknet-rs?branch=dojo-patch)", - "starknet-curve 0.5.0 (git+https://github.com/kariy/starknet-rs?branch=dojo-patch)", + "starknet-crypto-codegen 0.4.0", + "starknet-curve 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "zeroize", ] @@ -13402,8 +13427,7 @@ dependencies = [ [[package]] name = "starknet-crypto" version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "crypto-bigint", "hex", @@ -13413,8 +13437,7 @@ dependencies = [ "num-traits 0.2.19", "rfc6979", "sha2 0.10.8", - "starknet-crypto-codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "starknet-curve 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-curve 0.5.0 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-types-core", "zeroize", ] @@ -13441,16 +13464,6 @@ dependencies = [ "syn 2.0.71", ] -[[package]] -name = "starknet-crypto-codegen" -version = "0.4.0" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" -dependencies = [ - "starknet-curve 0.5.0 (git+https://github.com/kariy/starknet-rs?branch=dojo-patch)", - "starknet-types-core", - "syn 2.0.71", -] - [[package]] name = "starknet-curve" version = "0.3.0" @@ -13481,7 +13494,7 @@ dependencies = [ [[package]] name = "starknet-curve" version = "0.5.0" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "starknet-types-core", ] @@ -13514,8 +13527,7 @@ dependencies = [ [[package]] name = "starknet-macros" version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fe4f8d615329410578cbedcdbaa4a36c7f28f68c3f3ac56006cfbdaeaa2b41" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "starknet-core 0.11.1", "syn 2.0.71", @@ -13544,8 +13556,7 @@ dependencies = [ [[package]] name = "starknet-providers" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c85e0a0f4563ae95dfeae14ea0f0c70610efc0ec2462505c64eff5765e7b97" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "async-trait", "auto_impl", @@ -13556,7 +13567,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with 3.9.0", "starknet-core 0.11.1", "thiserror", "url", @@ -13581,8 +13592,7 @@ dependencies = [ [[package]] name = "starknet-signers" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17da2139119dbe3aacf1d5d4338798a5c489d17f424916ceb9d2efd83554f87" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "async-trait", "auto_impl", @@ -13591,14 +13601,14 @@ dependencies = [ "getrandom", "rand", "starknet-core 0.11.1", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "thiserror", ] [[package]] name = "starknet-types-core" version = "0.1.5" -source = "git+https://github.com/dojoengine/types-rs?rev=289e2f0#289e2f0bfd5f01a98e7273ff7ce8902a23b5f9d5" +source = "git+https://github.com/starknet-io/types-rs?rev=f98f048#f98f048efa776f1f8da81a19f337a9b8c2f4b8f7" dependencies = [ "lambdaworks-crypto", "lambdaworks-math", @@ -14483,7 +14493,7 @@ dependencies = [ "serde_json", "sqlx", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio", "tokio-stream", "tokio-util", @@ -14519,7 +14529,7 @@ dependencies = [ "serde", "serde_json", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tonic 0.11.0", @@ -14536,7 +14546,7 @@ dependencies = [ "anyhow", "async-trait", "base64 0.21.7", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "camino", "chrono", "crypto-bigint", @@ -14560,7 +14570,7 @@ dependencies = [ "sozo-ops", "sqlx", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tokio-stream", @@ -14578,7 +14588,7 @@ dependencies = [ "async-recursion", "async-trait", "base64 0.21.7", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "camino", "chrono", "convert_case 0.6.0", @@ -14596,7 +14606,7 @@ dependencies = [ "sozo-ops", "sqlx", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "strum 0.25.0", "strum_macros 0.25.3", "thiserror", @@ -14615,7 +14625,7 @@ name = "torii-grpc" version = "1.0.0-alpha.5" dependencies = [ "bytes", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "camino", "crypto-bigint", "dojo-test-utils", @@ -14638,7 +14648,7 @@ dependencies = [ "sozo-ops", "sqlx", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "strum 0.25.0", "strum_macros 0.25.3", "thiserror", @@ -14663,7 +14673,7 @@ version = "1.0.0-alpha.5" dependencies = [ "anyhow", "async-trait", - "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?tag=v0.3.2)", + "cainome 0.2.3 (git+https://github.com/cartridge-gg/cainome?branch=main)", "chrono", "crypto-bigint", "dojo-test-utils", @@ -14681,7 +14691,7 @@ dependencies = [ "serde_json", "sqlx", "starknet 0.11.0", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile", "thiserror", "tokio", @@ -15337,8 +15347,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", - "serde", - "serde_json", "wasm-bindgen-macro", ] @@ -15464,25 +15472,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasm-webauthn" -version = "0.1.0" -source = "git+https://github.com/cartridge-gg/wasm-webauthn?rev=972693f#972693fdeaa5dbcf7eee181c1e4aad5dfdb73a82" -dependencies = [ - "ciborium", - "coset", - "derive_builder 0.12.0", - "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_bytes", - "thiserror", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.69" @@ -15503,6 +15492,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webauthn-rs-proto" +version = "0.5.0" +source = "git+https://github.com/cartridge-gg/webauthn-rs?rev=a6cea88#a6cea888b953382c6d0604bd08bbede195205140" +dependencies = [ + "base64 0.21.7", + "base64urlsafedata", + "serde", + "serde_json", + "url", +] + [[package]] name = "webbrowser" version = "0.8.15" diff --git a/Cargo.toml b/Cargo.toml index 846b97fe3b..cf64535ec5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ "bin/scheduler", "bin/sozo", "bin/torii", -# "crates/benches", + # "crates/benches", "crates/common", "crates/dojo-bindgen", "crates/dojo-core", @@ -60,7 +60,8 @@ inherits = "release" lto = "fat" [workspace.dependencies] -cainome = { git = "https://github.com/cartridge-gg/cainome", tag = "v0.3.2", features = [ "abigen-rs" ] } +# cainome = { git = "https://github.com/cartridge-gg/cainome", tag = "v0.3.2", features = [ "abigen-rs" ] } +cainome = { git = "https://github.com/cartridge-gg/cainome", branch = "main", features = [ "abigen-rs" ] } common = { path = "crates/common" } # metrics @@ -172,7 +173,7 @@ pretty_assertions = "1.2.1" rand = "0.8.5" rayon = "1.8.0" regex = "1.10.3" -reqwest = { version = "0.12", features = [ "blocking", "rustls-tls", "json" ], default-features = false } +reqwest = { version = "0.12", features = [ "blocking", "json", "rustls-tls" ], default-features = false } rpassword = "7.2.0" rstest = "0.18.2" rstest_reuse = "0.6.0" @@ -182,17 +183,10 @@ scarb-ui = { git = "https://github.com/software-mansion/scarb", tag = "v2.7.0" } semver = "1.0.5" serde = { version = "1.0", features = [ "derive" ] } serde_json = { version = "1.0", features = [ "arbitrary_precision" ] } -serde_with = "2.3" +serde_with = "3.9.0" similar-asserts = "1.5.0" smol_str = { version = "0.2.0", features = [ "serde" ] } sqlx = { version = "0.7.2", features = [ "chrono", "macros", "regexp", "runtime-async-std", "runtime-tokio", "sqlite", "uuid" ] } -starknet = "0.11.0" -starknet-crypto = "0.7.0" -# `starknet-rs` is using `starknet-types-core` 0.1.3, but we need >=0.1.4 because -# we need this . So we put strict -# requirement here to prevent from being downgraded. -# We can remove this requirement once `starknet-rs` is using >=0.1.4 -starknet-types-core = "~0.1.4" starknet_api = "0.11.0" strum = "0.25" strum_macros = "0.25" @@ -230,8 +224,10 @@ alloy-sol-types = { version = "0.7.6", default-features = false } criterion = "0.5.1" # Controller integration -account_sdk = { git = "https://github.com/cartridge-gg/controller", rev = "512ff89" } -slot = { git = "https://github.com/cartridge-gg/slot", rev = "4c1165d" } +# account_sdk = { git = "https://github.com/cartridge-gg/controller", rev = "512ff89" } +# slot = { git = "https://github.com/cartridge-gg/slot", rev = "4c1165d" } +account_sdk = { path = "../../cartridge/controller/packages/account_sdk" } +slot = { path = "../../cartridge/slot/slot" } alloy-contract = { version = "0.2", default-features = false } alloy-json-rpc = { version = "0.2", default-features = false } @@ -241,10 +237,14 @@ alloy-rpc-types-eth = { version = "0.2", default-features = false } alloy-signer = { version = "0.2", default-features = false } alloy-transport = { version = "0.2", default-features = false } +starknet = "0.11.0" +starknet-crypto = "0.7.1" +# `starknet-rs` is using `starknet-types-core` 0.1.3, but we need >=0.1.4 because +# we need this . So we put strict +# requirement here to prevent from being downgraded. +# We can remove this requirement once `starknet-rs` is using >=0.1.4 +starknet-types-core = "~0.1.4" + [patch.crates-io] -# Remove this patch once the following PR is merged: -# -# To enable std feature on `starknet-types-core`. -# To re-export the entire `felt` module from `starknet-types-core`. -starknet-core = { git = "https://github.com/kariy/starknet-rs", branch = "dojo-patch" } -starknet-types-core = { git = "https://github.com/dojoengine/types-rs", rev = "289e2f0" } +starknet = { git = "https://github.com/xJonathanLEI/starknet-rs", rev = "2ddc694" } +starknet-types-core = { git = "https://github.com/starknet-io/types-rs", rev = "f98f048" } diff --git a/bin/sozo/src/commands/options/account/controller.rs b/bin/sozo/src/commands/options/account/controller.rs index 7dfcd2ec56..e139481a49 100644 --- a/bin/sozo/src/commands/options/account/controller.rs +++ b/bin/sozo/src/commands/options/account/controller.rs @@ -1,8 +1,10 @@ use std::str::FromStr; +use std::sync::Arc; -use account_sdk::account::session::hash::{AllowedMethod, Session}; +use account_sdk::account::session::hash::{AllowedMethod, ProvedMethod}; +use account_sdk::account::session::merkle::MerkleTree; use account_sdk::account::session::SessionAccount; -use account_sdk::signers::HashSigner; +use account_sdk::storage::SessionMetadata; use anyhow::{bail, Context, Result}; use camino::{Utf8Path, Utf8PathBuf}; use dojo_world::contracts::naming::get_name_from_tag; @@ -14,7 +16,9 @@ use slot::session::Policy; use starknet::core::types::contract::{AbiEntry, StateMutability}; use starknet::core::types::StarknetError::ContractNotFound; use starknet::core::types::{BlockId, BlockTag, Felt}; -use starknet::core::utils::{cairo_short_string_to_felt, get_contract_address}; +use starknet::core::utils::{ + cairo_short_string_to_felt, get_contract_address, get_selector_from_name, +}; use starknet::macros::{felt, short_string}; use starknet::providers::Provider; use starknet::providers::ProviderError::StarknetError; @@ -25,9 +29,14 @@ use url::Url; use super::WorldAddressOrName; +// Why the Arc? becaues the Controller account implementation over on `account_sdk` crate is +// riddled with `+ Clone` bounds on its Provider generic. So we explicitly specify that the Provider +// impl here is wrapped in an Arc to satisfy the Clone bound. Otherwise, you would get a 'trait +// bound not satisfied' error. +// // This type comes from account_sdk, which doesn't derive Debug. #[allow(missing_debug_implementations)] -pub type ControllerSessionAccount

= SessionAccount; +pub type ControllerSessionAccount

= SessionAccount, SigningKey, SigningKey>; /// Create a new Catridge Controller account based on session key. #[tracing::instrument( @@ -62,28 +71,24 @@ where // Check if the session exists, if not create a new one let session_details = match slot::session::get(chain_id)? { Some(session) => { - trace!(expires_at = %session.expires_at, policies = session.policies.len(), "Found existing session."); + trace!(expires_at = %session.session.expires_at, policies = session.session.allowed_methods.len(), "Found existing session."); - // Perform policies diff check. For security reasons, we will always create a new - // session here if the current policies are different from the existing - // session. - // - // TODO(kariy): maybe don't need to update if current policies is a - // subset of the existing policies. let policies = collect_policies(world_addr_or_name, contract_address, config)?; + // check if the policies have changed + let is_equal = is_equal_to_existing(&policies, rpc_url.clone(), chain_id, session); - if policies != session.policies { + if is_equal { + session + } else { trace!( new_policies = policies.len(), - existing_policies = session.policies.len(), + existing_policies = session.session.allowed_methods.len(), "Policies have changed. Creating new session." ); - let session = slot::session::create(rpc_url.clone(), &policies).await?; + let session = slot::session::create(rpc_url, &policies).await?; slot::session::store(chain_id, &session)?; session - } else { - session } } @@ -97,18 +102,9 @@ where } }; - let methods = session_details - .policies - .into_iter() - .map(|p| AllowedMethod::new(p.target, &p.method)) - .collect::, _>>()?; - // Copied from `account-wasm` let guardian = SigningKey::from_secret_scalar(short_string!("CARTRIDGE_GUARDIAN")); let signer = SigningKey::from_secret_scalar(session_details.credentials.private_key); - // TODO(kariy): make `expires_at` a `u64` type in the session struct - let expires_at = session_details.expires_at.parse::()?; - let session = Session::new(methods, expires_at, &signer.signer())?; // make sure account exist on the provided chain, if not, we deploy it first before proceeding deploy_account_if_not_exist(rpc_url, &provider, chain_id, contract_address, &username) @@ -116,18 +112,47 @@ where .with_context(|| format!("Deploying Controller account on chain {chain_id}"))?; let session_account = SessionAccount::new( - provider, + Arc::new(provider), signer, guardian, contract_address, chain_id, session_details.credentials.authorization, - session, + session_details.session, ); Ok(session_account) } +// Check if the new policies are equal to the ones in the existing session +async fn is_equal_to_existing( + new_policies: &[Policy], + rpc_url: Url, + chain_id: Felt, + session: SessionMetadata, +) -> bool { + let allowed_methods = new_policies + .iter() + .map(|p| AllowedMethod::new(p.target, get_selector_from_name(&p.method).unwrap())) + .collect::>(); + + // Copied from somewhere + let hashes = allowed_methods.iter().map(AllowedMethod::as_merkle_leaf).collect::>(); + + let allowed_methods = allowed_methods + .into_iter() + .enumerate() + .map(|(i, method)| ProvedMethod { + method, + proof: MerkleTree::compute_proof(hashes.clone(), i), + }) + .collect::>(); + + let root = MerkleTree::compute_root(hashes[0], allowed_methods[0].proof.clone()); + + root != session.session.allowed_methods_root +} + /// Policies are the building block of a session key. It's what defines what methods are allowed for /// an external signer to execute using the session key. /// diff --git a/bin/sozo/src/commands/options/account/mod.rs b/bin/sozo/src/commands/options/account/mod.rs index 299e500b80..08f8a641cf 100644 --- a/bin/sozo/src/commands/options/account/mod.rs +++ b/bin/sozo/src/commands/options/account/mod.rs @@ -96,11 +96,11 @@ impl AccountOptions { if self.controller { let url = starknet.url(env_metadata)?; let account = self.controller(url, provider, world_address_or_name, config).await?; - return Ok(SozoAccount::from(account)); + return Ok(SozoAccount::Controller(account)); } let account = self.std_account(provider, env_metadata).await?; - Ok(SozoAccount::from(account)) + Ok(SozoAccount::Standard(account)) } pub async fn std_account

( @@ -151,7 +151,8 @@ impl AccountOptions { #[cfg(test)] mod tests { use clap::Parser; - use starknet::accounts::{Call, ExecutionEncoder}; + use starknet::accounts::ExecutionEncoder; + use starknet::core::types::Call; use starknet_crypto::Felt; use super::{AccountOptions, DOJO_ACCOUNT_ADDRESS_ENV_VAR}; diff --git a/bin/sozo/src/commands/options/account/type.rs b/bin/sozo/src/commands/options/account/type.rs index 5e3eb4319c..153baa2969 100644 --- a/bin/sozo/src/commands/options/account/type.rs +++ b/bin/sozo/src/commands/options/account/type.rs @@ -2,14 +2,14 @@ use std::sync::Arc; use async_trait::async_trait; use starknet::accounts::{ - single_owner, Account, Call, ConnectedAccount, DeclarationV2, DeclarationV3, ExecutionEncoder, + single_owner, Account, ConnectedAccount, DeclarationV2, DeclarationV3, ExecutionEncoder, ExecutionV1, ExecutionV3, LegacyDeclaration, RawDeclarationV2, RawDeclarationV3, RawExecutionV1, RawExecutionV3, RawLegacyDeclaration, SingleOwnerAccount, }; use starknet::core::types::contract::legacy::LegacyContractClass; -use starknet::core::types::{BlockId, Felt, FlattenedSierraClass}; +use starknet::core::types::{BlockId, Call, Felt, FlattenedSierraClass}; use starknet::providers::Provider; -use starknet::signers::{local_wallet, LocalWallet}; +use starknet::signers::{local_wallet, LocalWallet, SignerInteractivityContext}; #[cfg(feature = "controller")] use super::controller::ControllerSessionAccount; @@ -30,11 +30,9 @@ pub enum SozoAccountSignError { /// This is the account type that should be used by the CLI. #[must_use] #[non_exhaustive] -#[derive(derive_more::From)] #[allow(missing_debug_implementations)] pub enum SozoAccount

where - P: Send, P: Provider, { Standard(SingleOwnerAccount), @@ -52,6 +50,14 @@ where { type SignError = SozoAccountSignError; + fn is_signer_interactive(&self, context: SignerInteractivityContext<'_>) -> bool { + match self { + Self::Standard(account) => account.is_signer_interactive(context), + #[cfg(feature = "controller")] + Self::Controller(account) => account.is_signer_interactive(context), + } + } + fn address(&self) -> Felt { match self { Self::Standard(account) => account.address(), diff --git a/crates/dojo-world/src/contracts/abi/model.rs b/crates/dojo-world/src/contracts/abi/model.rs index f4d2153b92..50c4c3a192 100644 --- a/crates/dojo-world/src/contracts/abi/model.rs +++ b/crates/dojo-world/src/contracts/abi/model.rs @@ -325,5 +325,6 @@ abigen!( ]"#, type_aliases { dojo::world::config::Config::Event as DojoConfigEvent; -} +}, + derives(Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone) ); diff --git a/crates/dojo-world/src/migration/mod.rs b/crates/dojo-world/src/migration/mod.rs index b750237222..ff5f72fbfc 100644 --- a/crates/dojo-world/src/migration/mod.rs +++ b/crates/dojo-world/src/migration/mod.rs @@ -6,10 +6,10 @@ use anyhow::{anyhow, Result}; use async_trait::async_trait; use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass; use cairo_lang_starknet_classes::contract_class::ContractClass; -use starknet::accounts::{Account, AccountError, Call, ConnectedAccount}; +use starknet::accounts::{Account, AccountError, ConnectedAccount}; use starknet::core::types::contract::{CompiledClass, SierraClass}; use starknet::core::types::{ - BlockId, BlockTag, DeclareTransactionResult, Felt, FlattenedSierraClass, + BlockId, BlockTag, Call, DeclareTransactionResult, Felt, FlattenedSierraClass, InvokeTransactionResult, ReceiptBlock, StarknetError, TransactionReceiptWithBlockInfo, }; use starknet::core::utils::{get_contract_address, CairoShortStringToFeltError}; diff --git a/crates/katana/controller/src/lib.rs b/crates/katana/controller/src/lib.rs index 721eb7e34e..b9a25ace23 100644 --- a/crates/katana/controller/src/lib.rs +++ b/crates/katana/controller/src/lib.rs @@ -1,9 +1,10 @@ use std::collections::HashMap; use account_sdk::abigen::controller::Signer; -use account_sdk::signers::webauthn::{DeviceSigner, WebauthnAccountSigner}; +use account_sdk::signers::webauthn::{CredentialID, WebauthnSigner}; +// use account_sdk::signers::webauthn::{DeviceSigner, WebauthnAccountSigner}; use account_sdk::signers::SignerTrait; -use account_sdk::wasm_webauthn::CredentialID; +// use account_sdk::wasm_webauthn::CredentialID; use alloy_primitives::U256; use anyhow::Result; use coset::CoseKey; @@ -134,21 +135,20 @@ fn get_contract_storage( credential_id: CredentialID, public_key: CoseKey, ) -> Result> { - let signer = DeviceSigner::new( - WEBAUTHN_RP_ID.to_string(), - WEBAUTHN_ORIGIN.to_string(), - credential_id, - public_key, - ); + // let signer = + // WebauthnSigner::new(WEBAUTHN_RP_ID.to_string(), credential_id, public_key, + // BrowserBackend); + + // let signer = Signer::Webauthn(signer.signer_pub_data()); + // let guid = signer.guid(); - let signer = Signer::Webauthn(signer.signer_pub_data()); - let guid = signer.guid(); + // // the storage variable name for webauthn signer + // const MULTIPLE_OWNERS_COMPONENT_SUB_STORAGE: &str = "owners"; + // let storage = get_storage_var_address(MULTIPLE_OWNERS_COMPONENT_SUB_STORAGE, &[guid])?; - // the storage variable name for webauthn signer - const MULTIPLE_OWNERS_COMPONENT_SUB_STORAGE: &str = "owners"; - let storage = get_storage_var_address(MULTIPLE_OWNERS_COMPONENT_SUB_STORAGE, &[guid])?; + // Ok(HashMap::from([(storage, FieldElement::ONE)])) - Ok(HashMap::from([(storage, FieldElement::ONE)])) + todo!() } #[cfg(test)] diff --git a/crates/katana/controller/src/webauthn.rs b/crates/katana/controller/src/webauthn.rs index 64b75dce69..d19cf64508 100644 --- a/crates/katana/controller/src/webauthn.rs +++ b/crates/katana/controller/src/webauthn.rs @@ -1,11 +1,11 @@ pub mod credential { - use account_sdk::wasm_webauthn::CredentialID; + use account_sdk::signers::webauthn::CredentialID; use base64::engine::general_purpose; use base64::{DecodeError, Engine}; pub fn from_base64(base64: &str) -> Result { let bytes = general_purpose::URL_SAFE_NO_PAD.decode(base64)?; - Ok(CredentialID(bytes)) + Ok(CredentialID::from(bytes)) } } diff --git a/crates/katana/executor/tests/fixtures/transaction.rs b/crates/katana/executor/tests/fixtures/transaction.rs index f804cca858..8fca9341ce 100644 --- a/crates/katana/executor/tests/fixtures/transaction.rs +++ b/crates/katana/executor/tests/fixtures/transaction.rs @@ -6,12 +6,14 @@ use katana_primitives::genesis::constant::DEFAULT_FEE_TOKEN_ADDRESS; use katana_primitives::genesis::Genesis; use katana_primitives::transaction::ExecutableTxWithHash; use katana_primitives::FieldElement; -use starknet::accounts::{Account, Call, ExecutionEncoding, SingleOwnerAccount}; -use starknet::core::types::{BlockId, BlockTag, BroadcastedInvokeTransaction}; +use starknet::accounts::{Account, ExecutionEncoder, ExecutionEncoding, SingleOwnerAccount}; +use starknet::core::types::{ + BlockId, BlockTag, BroadcastedInvokeTransaction, BroadcastedInvokeTransactionV1, Call, +}; use starknet::macros::{felt, selector}; use starknet::providers::jsonrpc::HttpTransport; use starknet::providers::{JsonRpcClient, Url}; -use starknet::signers::{LocalWallet, SigningKey}; +use starknet::signers::{LocalWallet, Signer, SigningKey}; use super::{cfg, genesis}; @@ -30,7 +32,7 @@ pub fn invoke_executable_tx( let mut account = SingleOwnerAccount::new( provider, - signer, + signer.clone(), address.into(), chain_id.into(), ExecutionEncoding::New, @@ -44,18 +46,21 @@ pub fn invoke_executable_tx( calldata: vec![felt!("0x1"), felt!("0x99"), felt!("0x0")], }]; - let tx = account.execute_v1(calls).nonce(nonce).max_fee(max_fee).prepared().unwrap(); + let is_query = false; + let tx = account.execute_v1(calls.clone()).nonce(nonce).max_fee(max_fee).prepared().unwrap(); + let hash = tx.transaction_hash(is_query); - let mut broadcasted_tx = tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap() - .block_on(tx.get_invoke_request(false)) - .unwrap(); + let rt = tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap(); + let signature = rt.block_on(signer.sign_hash(&hash)).unwrap(); - if !signed { - broadcasted_tx.signature = vec![] - } + let broadcasted_tx = BroadcastedInvokeTransactionV1 { + nonce, + max_fee, + is_query, + sender_address: account.address(), + calldata: account.encode_calls(&calls), + signature: if signed { vec![signature.r, signature.s] } else { vec![] }, + }; let tx = katana_rpc_types::transaction::BroadcastedInvokeTx(BroadcastedInvokeTransaction::V1( broadcasted_tx, diff --git a/crates/katana/rpc/rpc/tests/common/mod.rs b/crates/katana/rpc/rpc/tests/common/mod.rs index 1239748df5..f0e87d0948 100644 --- a/crates/katana/rpc/rpc/tests/common/mod.rs +++ b/crates/katana/rpc/rpc/tests/common/mod.rs @@ -5,9 +5,8 @@ use anyhow::{anyhow, Result}; use katana_cairo::lang::starknet_classes::casm_contract_class::CasmContractClass; use katana_cairo::lang::starknet_classes::contract_class::ContractClass; use katana_primitives::conversion::rpc::CompiledClass; -use starknet::accounts::Call; use starknet::core::types::contract::SierraClass; -use starknet::core::types::{Felt, FlattenedSierraClass}; +use starknet::core::types::{Call, Felt, FlattenedSierraClass}; use starknet::core::utils::get_selector_from_name; pub fn prepare_contract_declaration_params( diff --git a/crates/katana/rpc/rpc/tests/starknet.rs b/crates/katana/rpc/rpc/tests/starknet.rs index d9c21afa15..6d69160f0f 100644 --- a/crates/katana/rpc/rpc/tests/starknet.rs +++ b/crates/katana/rpc/rpc/tests/starknet.rs @@ -8,10 +8,10 @@ use std::time::Duration; use dojo_test_utils::sequencer::{get_default_test_starknet_config, TestSequencer}; use katana_core::sequencer::SequencerConfig; use katana_rpc_types::receipt::ReceiptBlock; -use starknet::accounts::{Account, Call, ConnectedAccount}; +use starknet::accounts::{Account, ConnectedAccount}; use starknet::core::types::contract::legacy::LegacyContractClass; use starknet::core::types::{ - BlockId, BlockTag, DeclareTransactionReceipt, Felt, TransactionFinalityStatus, + BlockId, BlockTag, Call, DeclareTransactionReceipt, Felt, TransactionFinalityStatus, TransactionReceipt, }; use starknet::core::utils::{get_contract_address, get_selector_from_name}; diff --git a/crates/katana/rpc/rpc/tests/torii.rs b/crates/katana/rpc/rpc/tests/torii.rs index 56d56b648a..e4f949664b 100644 --- a/crates/katana/rpc/rpc/tests/torii.rs +++ b/crates/katana/rpc/rpc/tests/torii.rs @@ -12,8 +12,8 @@ use katana_rpc_api::dev::DevApiClient; use katana_rpc_api::starknet::StarknetApiClient; use katana_rpc_api::torii::ToriiApiClient; use katana_rpc_types::transaction::{TransactionsPage, TransactionsPageCursor}; -use starknet::accounts::{Account, Call, ConnectedAccount}; -use starknet::core::types::{Felt, TransactionStatus}; +use starknet::accounts::{Account, ConnectedAccount}; +use starknet::core::types::{Call, Felt, TransactionStatus}; use starknet::core::utils::get_selector_from_name; use tokio::time::sleep; diff --git a/crates/saya/core/src/dojo_os/mod.rs b/crates/saya/core/src/dojo_os/mod.rs index 2318fc9656..e2f7706d0e 100644 --- a/crates/saya/core/src/dojo_os/mod.rs +++ b/crates/saya/core/src/dojo_os/mod.rs @@ -15,9 +15,9 @@ use dojo_world::migration::TxnConfig; use dojo_world::utils::TransactionExt; use itertools::chain; use once_cell::sync::OnceCell; -use starknet::accounts::{Account, Call, ConnectedAccount, ExecutionEncoding, SingleOwnerAccount}; +use starknet::accounts::{Account, ConnectedAccount, ExecutionEncoding, SingleOwnerAccount}; use starknet::core::types::{ - BlockId, BlockTag, Felt, TransactionExecutionStatus, TransactionStatus, + BlockId, BlockTag, Call, Felt, TransactionExecutionStatus, TransactionStatus, }; use starknet::core::utils::get_selector_from_name; use starknet::providers::jsonrpc::HttpTransport; diff --git a/crates/saya/core/src/verifier/starknet.rs b/crates/saya/core/src/verifier/starknet.rs index 5f5cbd8f95..1d8bc5438a 100644 --- a/crates/saya/core/src/verifier/starknet.rs +++ b/crates/saya/core/src/verifier/starknet.rs @@ -3,8 +3,8 @@ use std::time::Duration; use anyhow::Context; use dojo_world::migration::TxnConfig; use dojo_world::utils::TransactionExt; -use starknet::accounts::{Account, Call, ConnectedAccount}; -use starknet::core::types::{Felt, TransactionExecutionStatus, TransactionStatus}; +use starknet::accounts::{Account, ConnectedAccount}; +use starknet::core::types::{Call, Felt, TransactionExecutionStatus, TransactionStatus}; use starknet::core::utils::get_selector_from_name; use starknet::providers::Provider; use tokio::time::sleep; diff --git a/crates/sozo/ops/src/execute.rs b/crates/sozo/ops/src/execute.rs index ce91bd9d1c..5276c5b690 100644 --- a/crates/sozo/ops/src/execute.rs +++ b/crates/sozo/ops/src/execute.rs @@ -3,8 +3,8 @@ use dojo_world::contracts::world::WorldContract; use dojo_world::migration::TxnConfig; use dojo_world::utils::TransactionExt; use scarb_ui::Ui; -use starknet::accounts::{Call, ConnectedAccount}; -use starknet::core::types::Felt; +use starknet::accounts::ConnectedAccount; +use starknet::core::types::{Call, Felt}; use starknet::core::utils::get_selector_from_name; use crate::utils; diff --git a/crates/sozo/ops/src/migration/mod.rs b/crates/sozo/ops/src/migration/mod.rs index 5d8ad1f7d6..a5a04c659a 100644 --- a/crates/sozo/ops/src/migration/mod.rs +++ b/crates/sozo/ops/src/migration/mod.rs @@ -10,8 +10,8 @@ use dojo_world::migration::world::WorldDiff; use dojo_world::migration::{DeployOutput, TxnConfig, UpgradeOutput}; use dojo_world::utils::{TransactionExt, TransactionWaiter}; use scarb::core::Workspace; -use starknet::accounts::{Call, ConnectedAccount, ExecutionEncoding, SingleOwnerAccount}; -use starknet::core::types::{BlockId, BlockTag, Felt, InvokeTransactionResult}; +use starknet::accounts::{ConnectedAccount, ExecutionEncoding, SingleOwnerAccount}; +use starknet::core::types::{BlockId, BlockTag, Call, Felt, InvokeTransactionResult}; use starknet::core::utils::{cairo_short_string_to_felt, get_contract_address}; use starknet::macros::selector; use starknet::providers::jsonrpc::HttpTransport; diff --git a/crates/torii/core/src/sql_test.rs b/crates/torii/core/src/sql_test.rs index b2010c6241..7cfe03007e 100644 --- a/crates/torii/core/src/sql_test.rs +++ b/crates/torii/core/src/sql_test.rs @@ -11,8 +11,8 @@ use dojo_world::utils::{TransactionExt, TransactionWaiter}; use katana_runner::{KatanaRunner, KatanaRunnerConfig}; use scarb::compiler::Profile; use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; -use starknet::accounts::{Account, Call, ConnectedAccount}; -use starknet::core::types::{BlockId, BlockTag, Felt}; +use starknet::accounts::{Account, ConnectedAccount}; +use starknet::core::types::{BlockId, BlockTag, Call, Felt}; use starknet::core::utils::{get_contract_address, get_selector_from_name}; use starknet::providers::Provider; use starknet_crypto::poseidon_hash_many; diff --git a/crates/torii/graphql/src/tests/mod.rs b/crates/torii/graphql/src/tests/mod.rs index a092f97635..84f3aea120 100644 --- a/crates/torii/graphql/src/tests/mod.rs +++ b/crates/torii/graphql/src/tests/mod.rs @@ -19,8 +19,8 @@ use serde::Deserialize; use serde_json::Value; use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; use sqlx::SqlitePool; -use starknet::accounts::{Account, Call, ConnectedAccount}; -use starknet::core::types::{Felt, InvokeTransactionResult}; +use starknet::accounts::{Account, ConnectedAccount}; +use starknet::core::types::{Call, Felt, InvokeTransactionResult}; use starknet::macros::selector; use tokio::sync::broadcast; use tokio_stream::StreamExt; diff --git a/crates/torii/grpc/src/server/tests/entities_test.rs b/crates/torii/grpc/src/server/tests/entities_test.rs index c705cedfbe..e0d3f33d0b 100644 --- a/crates/torii/grpc/src/server/tests/entities_test.rs +++ b/crates/torii/grpc/src/server/tests/entities_test.rs @@ -13,8 +13,8 @@ use katana_runner::{KatanaRunner, KatanaRunnerConfig}; use scarb::compiler::Profile; use scarb::ops; use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; -use starknet::accounts::{Account, Call}; -use starknet::core::types::{BlockId, BlockTag}; +use starknet::accounts::Account; +use starknet::core::types::{BlockId, BlockTag, Call}; use starknet::core::utils::{get_contract_address, get_selector_from_name}; use starknet::providers::jsonrpc::HttpTransport; use starknet::providers::{JsonRpcClient, Provider};