From eeef9ae9a69e0273f17e25a249c3fee059b886c1 Mon Sep 17 00:00:00 2001 From: Nasr Date: Fri, 15 Dec 2023 13:08:44 -0500 Subject: [PATCH] fix: signature validation starknet rs --- Cargo.lock | 149 +++++++++---------------------------------------- Cargo.toml | 2 +- dojo.h | 2 +- example/main.c | 17 +++++- src/lib.rs | 5 +- src/types.rs | 6 +- 6 files changed, 45 insertions(+), 136 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 81becee..b29ab7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1113,9 +1113,9 @@ checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" @@ -1394,14 +1394,14 @@ dependencies = [ [[package]] name = "dojo-types" version = "0.4.1" -source = "git+https://github.com/dojoengine/dojo#e0a16635d1b833e0f5b89a9bdf358d784751c1b4" +source = "git+https://github.com/dojoengine/dojo#3de37a62cfbd81063bd5eb1ad39f028b2d482049" dependencies = [ "crypto-bigint", "hex", "itertools 0.10.5", "serde", "serde_json", - "starknet 0.8.0", + "starknet", "strum", "strum_macros", "thiserror", @@ -1410,7 +1410,7 @@ dependencies = [ [[package]] name = "dojo-world" version = "0.4.1" -source = "git+https://github.com/dojoengine/dojo#e0a16635d1b833e0f5b89a9bdf358d784751c1b4" +source = "git+https://github.com/dojoengine/dojo#3de37a62cfbd81063bd5eb1ad39f028b2d482049" dependencies = [ "anyhow", "async-trait", @@ -1426,7 +1426,7 @@ dependencies = [ "serde_json", "serde_with", "smol_str", - "starknet 0.8.0", + "starknet", "starknet-crypto", "thiserror", "tracing", @@ -3969,50 +3969,20 @@ dependencies = [ "uuid 1.6.1", ] -[[package]] -name = "starknet" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0623b045f3dc10aef030c9ddd4781cff9cbe1188b71063cc510b75d1f96be6" -dependencies = [ - "starknet-accounts 0.5.0", - "starknet-contract 0.5.0", - "starknet-core 0.6.1", - "starknet-crypto", - "starknet-ff", - "starknet-macros", - "starknet-providers 0.6.0", - "starknet-signers 0.4.0", -] - [[package]] name = "starknet" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5eb139c5e6f6c6da627080e33cc00b3fc1c9733403034ca1ee9c42a95c337c7f" dependencies = [ - "starknet-accounts 0.7.0", - "starknet-contract 0.7.0", - "starknet-core 0.8.0", + "starknet-accounts", + "starknet-contract", + "starknet-core", "starknet-crypto", "starknet-ff", "starknet-macros", - "starknet-providers 0.8.0", - "starknet-signers 0.6.0", -] - -[[package]] -name = "starknet-accounts" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68e97edc480348dca300e5a8234e6c4e6f2f1ac028f2b16fcce294ebe93d07f4" -dependencies = [ - "async-trait", - "auto_impl", - "starknet-core 0.6.1", - "starknet-providers 0.6.0", - "starknet-signers 0.4.0", - "thiserror", + "starknet-providers", + "starknet-signers", ] [[package]] @@ -4023,24 +3993,9 @@ checksum = "3743932c80ad2a5868c2dd4ef729de4e12060c88e73e4bb678a5f8e51b105e53" dependencies = [ "async-trait", "auto_impl", - "starknet-core 0.8.0", - "starknet-providers 0.8.0", - "starknet-signers 0.6.0", - "thiserror", -] - -[[package]] -name = "starknet-contract" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b86e3f6b3ca9a5c45271ab10871c99f7dc82fee3199d9f8c7baa2a1829947d" -dependencies = [ - "serde", - "serde_json", - "serde_with", - "starknet-accounts 0.5.0", - "starknet-core 0.6.1", - "starknet-providers 0.6.0", + "starknet-core", + "starknet-providers", + "starknet-signers", "thiserror", ] @@ -4053,30 +4008,12 @@ dependencies = [ "serde", "serde_json", "serde_with", - "starknet-accounts 0.7.0", - "starknet-core 0.8.0", - "starknet-providers 0.8.0", + "starknet-accounts", + "starknet-core", + "starknet-providers", "thiserror", ] -[[package]] -name = "starknet-core" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14139b1c39bdc2f1e663c12090ff5108fe50ebe62c09e15e32988dfaf445a7e4" -dependencies = [ - "base64 0.21.5", - "flate2", - "hex", - "serde", - "serde_json", - "serde_json_pythonic", - "serde_with", - "sha3", - "starknet-crypto", - "starknet-ff", -] - [[package]] name = "starknet-core" version = "0.8.0" @@ -4156,30 +4093,10 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "840be1a7eb5735863eee47d3a3f26df45b9be2c519e8da294e74b4d0524d77d1" dependencies = [ - "starknet-core 0.8.0", + "starknet-core", "syn 2.0.41", ] -[[package]] -name = "starknet-providers" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3b136c26b72ff1756f0844e0aa80bab680ceb99d63921826facbb8e7340ff82" -dependencies = [ - "async-trait", - "auto_impl", - "ethereum-types", - "flate2", - "log", - "reqwest", - "serde", - "serde_json", - "serde_with", - "starknet-core 0.6.1", - "thiserror", - "url", -] - [[package]] name = "starknet-providers" version = "0.8.0" @@ -4195,27 +4112,11 @@ dependencies = [ "serde", "serde_json", "serde_with", - "starknet-core 0.8.0", + "starknet-core", "thiserror", "url", ] -[[package]] -name = "starknet-signers" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9386015d2e6dc3df285bfb33a3afd8ad7596c70ed38ab57019de4d2dfc7826f" -dependencies = [ - "async-trait", - "auto_impl", - "crypto-bigint", - "eth-keystore", - "rand", - "starknet-core 0.6.1", - "starknet-crypto", - "thiserror", -] - [[package]] name = "starknet-signers" version = "0.6.0" @@ -4227,7 +4128,7 @@ dependencies = [ "crypto-bigint", "eth-keystore", "rand", - "starknet-core 0.8.0", + "starknet-core", "starknet-crypto", "thiserror", ] @@ -4732,7 +4633,7 @@ dependencies = [ "futures-channel", "futures-util", "parking_lot 0.12.1", - "starknet 0.6.0", + "starknet", "starknet-crypto", "tokio", "tonic 0.10.2", @@ -4744,7 +4645,7 @@ dependencies = [ [[package]] name = "torii-client" version = "0.4.1" -source = "git+https://github.com/dojoengine/dojo#e0a16635d1b833e0f5b89a9bdf358d784751c1b4" +source = "git+https://github.com/dojoengine/dojo#3de37a62cfbd81063bd5eb1ad39f028b2d482049" dependencies = [ "async-trait", "crypto-bigint", @@ -4757,7 +4658,7 @@ dependencies = [ "prost 0.12.3", "serde", "serde_json", - "starknet 0.8.0", + "starknet", "starknet-crypto", "thiserror", "tokio", @@ -4770,7 +4671,7 @@ dependencies = [ [[package]] name = "torii-grpc" version = "0.4.1" -source = "git+https://github.com/dojoengine/dojo#e0a16635d1b833e0f5b89a9bdf358d784751c1b4" +source = "git+https://github.com/dojoengine/dojo#3de37a62cfbd81063bd5eb1ad39f028b2d482049" dependencies = [ "bytes", "crypto-bigint", @@ -4787,7 +4688,7 @@ dependencies = [ "serde", "serde_json", "sqlx", - "starknet 0.8.0", + "starknet", "starknet-crypto", "strum_macros", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index ad833de..e97ded6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ torii-grpc = { git = "https://github.com/dojoengine/dojo", features = [ ] } parking_lot = "0.12.1" -starknet = "0.6.0" +starknet = "0.8.0" starknet-crypto = "0.6.0" tokio = { version = "1.32.0", features = [ "full" ] } url = "2.5.0" diff --git a/dojo.h b/dojo.h index dea7dbd..a208c97 100644 --- a/dojo.h +++ b/dojo.h @@ -220,7 +220,7 @@ typedef struct CArray_Model { } CArray_Model; typedef struct Entity { - struct FieldElement key; + struct FieldElement id; struct CArray_Model models; } Entity; diff --git a/example/main.c b/example/main.c index 3b626c6..59b4ef9 100644 --- a/example/main.c +++ b/example/main.c @@ -46,7 +46,7 @@ int main() const char *playerKey = "0x028cd7ee02d7f6ec9810e75b930e8e607793b302445abbdee0ac88143f18da20"; const char *playerAddress = "0x0517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973"; - const char *world = "0x05010c31f127114c6198df8a5239e2b7a5151e1156fb43791e37e7385faa8138"; + const char *world = "0x033ac2f528bb97cc7b79148fd1756dc368be0e95d391d8c6d6473ecb60b4560e"; // Initialize world.data here... KeysClause entities[1] = {}; @@ -122,6 +122,11 @@ int main() Query query = {}; query.limit = 100; query.clause.tag = None_Clause; + query.clause.some.tag = Keys; + query.clause.some.keys.keys.data = malloc(sizeof(char *)); + query.clause.some.keys.keys.data_len = 1; + query.clause.some.keys.keys.data[0] = playerAddress; + query.clause.some.keys.model = "Moves"; Result_CArray_Entity resEntities = client_entities(client, &query); if (resEntities.tag == Err_CArray_Entity) { @@ -137,9 +142,15 @@ int main() printf("Key: 0x"); for (size_t j = 0; j < 32; j++) { - printf("%02x", fetchedEntities.data[i].key.data[j]); + printf("%02x", fetchedEntities.data[i].id.data[j]); } printf("\n"); + + // print models name + for (size_t j = 0; j < fetchedEntities.data[i].models.data_len; j++) + { + printf("Model: %s\n", fetchedEntities.data[i].models.data[j].name); + } } @@ -175,7 +186,7 @@ int main() } Call call = { - .to = "0x031571485922572446df9e3198a891e10d3a48e544544317dbcbb667e15848cd", + .to = "0x0152dcff993befafe5001975149d2c50bd9621da7cbaed74f68e7d5e54e65abc", .selector = "spawn", }; diff --git a/src/lib.rs b/src/lib.rs index 54382d5..2792d2a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -182,8 +182,6 @@ pub unsafe extern "C" fn client_on_sync_model_update( let model: torii_grpc::types::KeysClause = (&model).into(); let storage = (*client).inner.storage(); - println!("model: {:?}", model); - let rcv = storage.add_listener( cairo_short_string_to_felt(model.model.as_str()).unwrap(), model.keys.as_slice(), @@ -227,7 +225,7 @@ pub unsafe extern "C" fn client_on_entity_state_update( (*client).runtime.spawn(async move { while let Some(Ok(entity)) = rcv.next().await { - let key: types::FieldElement = (&entity.key).into(); + let key: types::FieldElement = (&entity.id).into(); let models: Vec = entity.models.into_iter().map(|e| (&e).into()).collect(); callback(key, models.into()); } @@ -412,7 +410,6 @@ pub unsafe extern "C" fn account_execute_raw( .into_iter() .map(|c| (&c).into()) .collect::>(); - let call = (*account).0.execute(calldata); let result = tokio::runtime::Runtime::new() diff --git a/src/types.rs b/src/types.rs index b9ff9f5..71681e7 100644 --- a/src/types.rs +++ b/src/types.rs @@ -272,7 +272,7 @@ pub enum ValueType { #[derive(Clone, Debug)] #[repr(C)] pub struct Entity { - pub key: FieldElement, + pub id: FieldElement, pub models: CArray, } @@ -282,7 +282,7 @@ impl From<&Entity> for torii_grpc::types::schema::Entity { let models = models.iter().map(|m| (&m.clone()).into()).collect(); torii_grpc::types::schema::Entity { - key: (&val.key.clone()).into(), + id: (&val.id.clone()).into(), models, } } @@ -297,7 +297,7 @@ impl From<&torii_grpc::types::schema::Entity> for Entity { .collect::>(); Entity { - key: (&val.key.clone()).into(), + id: (&val.id.clone()).into(), models: models.into(), } }