From f80098449e691a29266fd1ea9fb7077f443b92ba Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 28 May 2025 19:19:49 +0700 Subject: [PATCH 1/2] feat(libp2p): starknetrs snip12 for typed data --- Cargo.lock | 60 ++++++++++++++++++---------------------------------- Cargo.toml | 10 ++++----- src/c/mod.rs | 5 ++--- 3 files changed, 28 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 76ff52c..71f17e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1625,6 +1625,7 @@ dependencies = [ "serde-wasm-bindgen", "serde_json", "starknet 0.13.0", + "starknet-core 0.12.3", "starknet-crypto", "starknet-types-core", "stream-cancel", @@ -1634,7 +1635,6 @@ dependencies = [ "torii-grpc-client", "torii-libp2p-types", "torii-proto", - "torii-typed-data", "tower-http 0.6.2", "tsify-next", "url", @@ -5730,7 +5730,7 @@ checksum = "6f0c9ac3809cc7630784e8c8565fa3013af819d83c97aa2720d566016d439011" dependencies = [ "starknet-accounts 0.11.0", "starknet-contract 0.11.0", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-crypto", "starknet-macros", "starknet-providers 0.12.1", @@ -5745,7 +5745,7 @@ checksum = "bc9b221c99a1ea1d65fb130e5b0dbaa6d362698430232902ebeb2a898a1ab531" dependencies = [ "starknet-accounts 0.12.0", "starknet-contract 0.12.0", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-core-derive", "starknet-crypto", "starknet-macros", @@ -5776,7 +5776,7 @@ checksum = "0ee27ded58ade61da410fccafd57ed5429b0e79a9d62a4ae8b65818cb9d6f400" dependencies = [ "async-trait", "auto_impl", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-crypto", "starknet-providers 0.12.1", "starknet-signers 0.10.2", @@ -5791,7 +5791,7 @@ checksum = "b3fc4364f5684e4a5dcb100847a9ea023deae3815f45526721a6fa94ab595651" dependencies = [ "async-trait", "auto_impl", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-crypto", "starknet-providers 0.12.1", "starknet-signers 0.10.2", @@ -5823,7 +5823,7 @@ dependencies = [ "serde_json", "serde_with 3.12.0", "starknet-accounts 0.11.0", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-providers 0.12.1", "thiserror 1.0.69", ] @@ -5838,7 +5838,7 @@ dependencies = [ "serde_json", "serde_with 3.12.0", "starknet-accounts 0.12.0", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-providers 0.12.1", "thiserror 1.0.69", ] @@ -5864,9 +5864,9 @@ dependencies = [ [[package]] name = "starknet-core" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab44b2157b7f4697d58375cc8b8dbac8dfb6be79f13fd80c9f59634d2ac972c7" +checksum = "977ce5d61089de1f4e425ad033162154a0da2cf000f0ed100484ebcbc54b6ff4" dependencies = [ "base64 0.21.7", "crypto-bigint", @@ -5994,7 +5994,7 @@ dependencies = [ "serde", "serde_json", "serde_with 3.12.0", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "thiserror 1.0.69", "url", ] @@ -6028,7 +6028,7 @@ dependencies = [ "eth-keystore", "getrandom 0.2.16", "rand 0.8.5", - "starknet-core 0.12.2", + "starknet-core 0.12.3", "starknet-crypto", "thiserror 1.0.69", ] @@ -6648,8 +6648,8 @@ dependencies = [ [[package]] name = "torii-client" -version = "1.5.0-alpha.1" -source = "git+https://github.com/dojoengine/torii?rev=3ae9b23#3ae9b231b17fd22c211317c242555b31b5322c81" +version = "1.5.5-preview.3" +source = "git+https://github.com/dojoengine/torii?rev=9a3f85b#9a3f85b881ab36823bbff94cf1f7c6ac4ed09a74" dependencies = [ "async-trait", "crypto-bigint", @@ -6674,8 +6674,8 @@ dependencies = [ [[package]] name = "torii-grpc-client" -version = "1.5.0-alpha.1" -source = "git+https://github.com/dojoengine/torii?rev=3ae9b23#3ae9b231b17fd22c211317c242555b31b5322c81" +version = "1.5.5-preview.3" +source = "git+https://github.com/dojoengine/torii?rev=9a3f85b#9a3f85b881ab36823bbff94cf1f7c6ac4ed09a74" dependencies = [ "crypto-bigint", "dojo-types", @@ -6700,8 +6700,8 @@ dependencies = [ [[package]] name = "torii-libp2p-client" -version = "1.5.0-alpha.1" -source = "git+https://github.com/dojoengine/torii?rev=3ae9b23#3ae9b231b17fd22c211317c242555b31b5322c81" +version = "1.5.5-preview.3" +source = "git+https://github.com/dojoengine/torii?rev=9a3f85b#9a3f85b881ab36823bbff94cf1f7c6ac4ed09a74" dependencies = [ "anyhow", "futures", @@ -6716,25 +6716,23 @@ dependencies = [ "starknet 0.12.0", "thiserror 1.0.69", "torii-libp2p-types", - "torii-typed-data", "tracing", "web-sys", ] [[package]] name = "torii-libp2p-types" -version = "1.5.0-alpha.1" -source = "git+https://github.com/dojoengine/torii?rev=3ae9b23#3ae9b231b17fd22c211317c242555b31b5322c81" +version = "1.5.5-preview.3" +source = "git+https://github.com/dojoengine/torii?rev=9a3f85b#9a3f85b881ab36823bbff94cf1f7c6ac4ed09a74" dependencies = [ "serde", "starknet 0.12.0", - "torii-typed-data", ] [[package]] name = "torii-proto" -version = "1.5.0-alpha.1" -source = "git+https://github.com/dojoengine/torii?rev=3ae9b23#3ae9b231b17fd22c211317c242555b31b5322c81" +version = "1.5.5-preview.3" +source = "git+https://github.com/dojoengine/torii?rev=9a3f85b#9a3f85b881ab36823bbff94cf1f7c6ac4ed09a74" dependencies = [ "crypto-bigint", "dojo-types", @@ -6753,22 +6751,6 @@ dependencies = [ "tonic-build 0.12.3", ] -[[package]] -name = "torii-typed-data" -version = "1.5.0-alpha.1" -source = "git+https://github.com/dojoengine/torii?rev=3ae9b23#3ae9b231b17fd22c211317c242555b31b5322c81" -dependencies = [ - "cainome 0.5.1", - "crypto-bigint", - "dojo-types", - "indexmap 2.9.0", - "serde", - "serde_json", - "starknet 0.12.0", - "starknet-crypto", - "thiserror 1.0.69", -] - [[package]] name = "tower" version = "0.4.13" diff --git a/Cargo.toml b/Cargo.toml index b25b5eb..c04cb72 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,15 +9,15 @@ crate-type = ["cdylib", "rlib", "staticlib"] [dependencies] dojo-world = { git = "https://github.com/dojoengine/dojo", rev = "4145801" } dojo-types = { git = "https://github.com/dojoengine/dojo", rev = "4145801" } -torii-proto = { git = "https://github.com/dojoengine/torii", rev = "3ae9b23" } -torii-client = { git = "https://github.com/dojoengine/torii", rev = "3ae9b23" } -torii-grpc-client = { git = "https://github.com/dojoengine/torii", rev = "3ae9b23" } -torii-typed-data = { git = "https://github.com/dojoengine/torii", rev = "3ae9b23" } -torii-libp2p-types = { git = "https://github.com/dojoengine/torii", rev = "3ae9b23" } +torii-proto = { git = "https://github.com/dojoengine/torii", rev = "9a3f85b" } +torii-client = { git = "https://github.com/dojoengine/torii", rev = "9a3f85b" } +torii-grpc-client = { git = "https://github.com/dojoengine/torii", rev = "9a3f85b" } +torii-libp2p-types = { git = "https://github.com/dojoengine/torii", rev = "9a3f85b" } starknet = "0.13.0" starknet-crypto = "0.7.2" starknet-types-core = { version = "0.1.6", features = ["arbitrary"] } +starknet-core = "0.12.3" parking_lot = "0.12.1" tokio = { version = "1.39.2", default-features = false, features = ["rt"] } diff --git a/src/c/mod.rs b/src/c/mod.rs index e90682a..4617019 100644 --- a/src/c/mod.rs +++ b/src/c/mod.rs @@ -36,7 +36,7 @@ use lazy_static::lazy_static; use starknet::accounts::{ Account as StarknetAccount, ConnectedAccount, ExecutionEncoding, SingleOwnerAccount, }; -use starknet::core::types::FunctionCall; +use starknet::core::types::{FunctionCall, TypedData}; use starknet::core::utils::get_contract_address; use starknet::providers::jsonrpc::HttpTransport; use starknet::providers::{JsonRpcClient, Provider as _}; @@ -49,7 +49,6 @@ use tokio::time::sleep; use tokio_stream::StreamExt; use torii_client::Client as TClient; use torii_libp2p_types::Message; -use torii_typed_data::TypedData; use tower_http::cors::{AllowOrigin, CorsLayer}; use types::{ BlockId, CArray, COption, Call, Clause, Controller, Entity, Error, Event, IndexerUpdate, @@ -1652,7 +1651,7 @@ pub unsafe extern "C" fn typed_data_encode( }; let address = address.into(); - let encoded = match typed_data.encode(address) { + let encoded = match typed_data.message_hash(address) { Ok(encoded) => encoded, Err(err) => return Result::Err(err.into()), }; From 4f8ab32693feaaeef41f9dd621afc9acc3165d98 Mon Sep 17 00:00:00 2001 From: Nasr Date: Wed, 28 May 2025 19:28:31 +0700 Subject: [PATCH 2/2] update wasm & c for starknet typeddata --- Cargo.lock | 1 - Cargo.toml | 1 - src/c/mod.rs | 10 ++++++---- src/wasm/mod.rs | 11 ++++------- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 71f17e6..0309e45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1625,7 +1625,6 @@ dependencies = [ "serde-wasm-bindgen", "serde_json", "starknet 0.13.0", - "starknet-core 0.12.3", "starknet-crypto", "starknet-types-core", "stream-cancel", diff --git a/Cargo.toml b/Cargo.toml index c04cb72..1f1c0d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,6 @@ torii-libp2p-types = { git = "https://github.com/dojoengine/torii", rev = "9a3f8 starknet = "0.13.0" starknet-crypto = "0.7.2" starknet-types-core = { version = "0.1.6", features = ["arbitrary"] } -starknet-core = "0.12.3" parking_lot = "0.12.1" tokio = { version = "1.39.2", default-features = false, features = ["rt"] } diff --git a/src/c/mod.rs b/src/c/mod.rs index 4617019..45d75ef 100644 --- a/src/c/mod.rs +++ b/src/c/mod.rs @@ -706,10 +706,12 @@ pub unsafe extern "C" fn client_publish_message( signature_felts_len: usize, ) -> Result> { let message = unsafe { CStr::from_ptr(message).to_string_lossy().into_owned() }; - let message = match serde_json::from_str::(message.as_str()) { - Ok(message) => message, - Err(e) => return Result::Err(e.into()), - }; + // Should we validate the message here? + // Not sure if it's worth the added latency + // match serde_json::from_str::(message.as_str()) { + // Ok(_) => {}, + // Err(e) => return Result::Err(e.into()), + // }; let signature = unsafe { std::slice::from_raw_parts(signature_felts, signature_felts_len) }; let signature = signature.iter().map(|f| f.clone().into()).collect::>(); diff --git a/src/wasm/mod.rs b/src/wasm/mod.rs index a332efd..243eddc 100644 --- a/src/wasm/mod.rs +++ b/src/wasm/mod.rs @@ -62,7 +62,7 @@ pub struct SigningKey(starknet::signers::SigningKey); pub struct VerifyingKey(starknet::signers::VerifyingKey); #[wasm_bindgen] -pub struct TypedData(torii_typed_data::TypedData); +pub struct TypedData(starknet::core::types::TypedData); #[wasm_bindgen] pub struct ByteArray(cainome::cairo_serde::ByteArray); @@ -199,7 +199,7 @@ impl VerifyingKey { impl TypedData { #[wasm_bindgen(constructor)] pub fn new(typed_data: &str) -> Result { - let typed_data = serde_json::from_str::(typed_data) + let typed_data = serde_json::from_str::(typed_data) .map_err(|err| JsValue::from(format!("failed to parse typed data: {err}")))?; Ok(TypedData(typed_data)) @@ -219,7 +219,7 @@ impl TypedData { .map_err(|err| JsValue::from(format!("failed to parse address: {err}")))?; self.0 - .encode(address) + .message_hash(address) .map(|felt| format!("{:#x}", felt)) .map_err(|err| JsValue::from(err.to_string())) } @@ -1413,9 +1413,6 @@ impl ToriiClient { #[cfg(feature = "console-error-panic")] console_error_panic_hook::set_once(); - let message = serde_json::from_str(message) - .map_err(|err| JsValue::from(format!("failed to parse message: {err}")))?; - let signature = signature .iter() .map(|s| Felt::from_str(s.as_str())) @@ -1424,7 +1421,7 @@ impl ToriiClient { let message_id = self .inner - .publish_message(Message { message, signature }) + .publish_message(Message { message: message.to_string(), signature }) .await .map_err(|err| JsValue::from(err.to_string()))?;