Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
309 changes: 168 additions & 141 deletions Cargo.lock

Large diffs are not rendered by default.

23 changes: 16 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@ version = "0.7.3"
crate-type = ["cdylib", "rlib", "staticlib"]

[dependencies]
dojo-types = { git = "https://github.com/dojoengine/dojo", rev = "e8539d5b199efbd51c89c75da32f6592de5d9262" }
torii-client = { git = "https://github.com/dojoengine/dojo", rev = "e8539d5b199efbd51c89c75da32f6592de5d9262" }
dojo-types = { git = "https://github.com/dojoengine/dojo", rev = "2e04f54ceaa1c595e5d9ca369aaef640e189ac2a" }
torii-client = { git = "https://github.com/dojoengine/dojo", rev = "2e04f54ceaa1c595e5d9ca369aaef640e189ac2a" }
torii-grpc = { git = "https://github.com/dojoengine/dojo", features = [
"client",
], rev = "e8539d5b199efbd51c89c75da32f6592de5d9262" }
torii-relay = { git = "https://github.com/dojoengine/dojo", rev = "e8539d5b199efbd51c89c75da32f6592de5d9262" }
], rev = "2e04f54ceaa1c595e5d9ca369aaef640e189ac2a" }
torii-relay = { git = "https://github.com/dojoengine/dojo", rev = "2e04f54ceaa1c595e5d9ca369aaef640e189ac2a" }

parking_lot = "0.12.1"
starknet = "0.10.0"
starknet-crypto = "0.6.2"
starknet = "0.11.0"
starknet-crypto = "0.7.0"

tokio = { version = "1.32.0", default-features = false, features = ["rt"] }
url = "2.5.0"
anyhow = "1.0.76"
Expand All @@ -27,7 +28,7 @@ futures = "0.3.30"
futures-channel = "0.3.30"
wasm-bindgen = "0.2.92"
stream-cancel = "0.8.2"
cainome ={ git = "https://github.com/cartridge-gg/cainome" }
cainome = { git = "https://github.com/cartridge-gg/cainome", tag = "v0.3.0" }

# WASM
[target.'cfg(target_arch = "wasm32")'.dependencies]
Expand All @@ -46,3 +47,11 @@ crypto-bigint = "0.5.5"

[build-dependencies]
cbindgen = "0.26.0"

[patch.crates-io]
# Remove this patch once the following PR is merged: <https://github.com/xJonathanLEI/starknet-rs/pull/615>
#
# 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" }
37 changes: 16 additions & 21 deletions dojo.h
Original file line number Diff line number Diff line change
Expand Up @@ -255,19 +255,14 @@ typedef struct ModelKeysClause {
const char *model;
} ModelKeysClause;

typedef struct Model {
const char *name;
struct CArrayMember members;
} Model;

typedef struct CArrayModel {
struct Model *data;
typedef struct CArrayStruct {
struct Struct *data;
uintptr_t data_len;
} CArrayModel;
} CArrayStruct;

typedef struct Entity {
struct FieldElement hashed_keys;
struct CArrayModel models;
struct CArrayStruct models;
} Entity;

typedef struct CArrayEntity {
Expand Down Expand Up @@ -369,7 +364,6 @@ typedef struct CArrayClause {
} CArrayClause;

typedef struct CompositeClause {
const char *model;
enum LogicalOperator operator_;
struct CArrayClause clauses;
} CompositeClause;
Expand Down Expand Up @@ -422,6 +416,7 @@ typedef struct CArrayModelKeysClause {

typedef struct ModelMetadata {
struct Ty schema;
const char *namespace_;
const char *name;
uint32_t packed_size;
uint32_t unpacked_size;
Expand All @@ -430,20 +425,20 @@ typedef struct ModelMetadata {
struct CArrayFieldElement layout;
} ModelMetadata;

typedef struct CHashItemc_charModelMetadata {
const char *key;
typedef struct CHashItemFieldElementModelMetadata {
struct FieldElement key;
struct ModelMetadata value;
} CHashItemc_charModelMetadata;
} CHashItemFieldElementModelMetadata;

typedef struct CArrayCHashItemc_charModelMetadata {
struct CHashItemc_charModelMetadata *data;
typedef struct CArrayCHashItemFieldElementModelMetadata {
struct CHashItemFieldElementModelMetadata *data;
uintptr_t data_len;
} CArrayCHashItemc_charModelMetadata;
} CArrayCHashItemFieldElementModelMetadata;

typedef struct WorldMetadata {
struct FieldElement world_address;
struct FieldElement world_class_hash;
struct CArrayCHashItemc_charModelMetadata models;
struct CArrayCHashItemFieldElementModelMetadata models;
} WorldMetadata;

typedef enum Resultbool_Tag {
Expand Down Expand Up @@ -666,12 +661,12 @@ struct ResultSubscription client_on_sync_model_update(struct ToriiClient *client
struct ResultSubscription client_on_entity_state_update(struct ToriiClient *client,
const struct EntityKeysClause *clause,
void (*callback)(struct FieldElement,
struct CArrayModel));
struct CArrayStruct));

struct ResultSubscription client_on_event_message_update(struct ToriiClient *client,
const struct EntityKeysClause *clause,
void (*callback)(struct FieldElement,
struct CArrayModel));
struct CArrayStruct));

struct Resultbool client_remove_models_to_sync(struct ToriiClient *client,
const struct ModelKeysClause *models,
Expand Down Expand Up @@ -723,7 +718,7 @@ struct Resultbool wait_for_transaction(struct Provider *rpc, struct FieldElement

struct FieldElement hash_get_contract_address(struct FieldElement class_hash,
struct FieldElement salt,
const struct FieldElement *constructor_calldata,
const Felt *constructor_calldata,
uintptr_t constructor_calldata_len,
struct FieldElement deployer_address);

Expand All @@ -733,7 +728,7 @@ void client_free(struct ToriiClient *t);

void provider_free(struct Provider *rpc);

void model_free(struct Model *model);
void model_free(struct Struct *model);

void account_free(struct Account *account);

Expand Down
19 changes: 7 additions & 12 deletions dojo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,14 +476,9 @@ struct ModelKeysClause {
const char *model;
};

struct Model {
const char *name;
CArray<Member> members;
};

struct Entity {
FieldElement hashed_keys;
CArray<Model> models;
CArray<Struct> models;
};

template<typename T>
Expand Down Expand Up @@ -637,7 +632,6 @@ struct MemberClause {
};

struct CompositeClause {
const char *model;
LogicalOperator operator_;
CArray<Clause> clauses;
};
Expand Down Expand Up @@ -710,6 +704,7 @@ struct Query {

struct ModelMetadata {
Ty schema;
const char *namespace_;
const char *name;
uint32_t packed_size;
uint32_t unpacked_size;
Expand All @@ -727,7 +722,7 @@ struct CHashItem {
struct WorldMetadata {
FieldElement world_address;
FieldElement world_class_hash;
CArray<CHashItem<const char*, ModelMetadata>> models;
CArray<CHashItem<FieldElement, ModelMetadata>> models;
};

struct EntityKeysClause {
Expand Down Expand Up @@ -873,11 +868,11 @@ Result<Subscription*> client_on_sync_model_update(ToriiClient *client,

Result<Subscription*> client_on_entity_state_update(ToriiClient *client,
const EntityKeysClause *clause,
void (*callback)(FieldElement, CArray<Model>));
void (*callback)(FieldElement, CArray<Struct>));

Result<Subscription*> client_on_event_message_update(ToriiClient *client,
const EntityKeysClause *clause,
void (*callback)(FieldElement, CArray<Model>));
void (*callback)(FieldElement, CArray<Struct>));

Result<bool> client_remove_models_to_sync(ToriiClient *client,
const ModelKeysClause *models,
Expand Down Expand Up @@ -925,7 +920,7 @@ Result<bool> wait_for_transaction(Provider *rpc, FieldElement txn_hash);

FieldElement hash_get_contract_address(FieldElement class_hash,
FieldElement salt,
const FieldElement *constructor_calldata,
const Felt *constructor_calldata,
uintptr_t constructor_calldata_len,
FieldElement deployer_address);

Expand All @@ -935,7 +930,7 @@ void client_free(ToriiClient *t);

void provider_free(Provider *rpc);

void model_free(Model *model);
void model_free(Struct *model);

void account_free(Account *account);

Expand Down
55 changes: 28 additions & 27 deletions src/c/mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
mod types;

use self::types::{
BlockId, CArray, Call, Entity, Error, Model, Query, Result, Signature, ToriiClient, Ty,
WorldMetadata,
BlockId, CArray, Call, Entity, Error, Query, Result, Signature, ToriiClient, Ty, WorldMetadata,
};
use crate::constants;
use crate::types::{Account, Provider, Subscription};
Expand All @@ -16,7 +15,7 @@ use starknet::core::utils::{
use starknet::providers::jsonrpc::HttpTransport;
use starknet::providers::{JsonRpcClient, Provider as _};
use starknet::signers::{LocalWallet, SigningKey, VerifyingKey};
use starknet_crypto::{poseidon_hash_many, FieldElement};
use starknet_crypto::{poseidon_hash_many, Felt};
use std::ffi::{c_void, CStr, CString};
use std::ops::Deref;
use std::os::raw::c_char;
Expand All @@ -26,7 +25,7 @@ use tokio_stream::StreamExt;
use torii_client::client::Client as TClient;
use torii_relay::typed_data::TypedData;
use torii_relay::types::Message;
use types::{EntityKeysClause, ModelKeysClause};
use types::{EntityKeysClause, ModelKeysClause, Struct};

#[no_mangle]
#[allow(clippy::missing_safety_doc)]
Expand Down Expand Up @@ -246,7 +245,7 @@ pub unsafe extern "C" fn client_on_sync_model_update(
pub unsafe extern "C" fn client_on_entity_state_update(
client: *mut ToriiClient,
clause: Option<&EntityKeysClause>,
callback: unsafe extern "C" fn(types::FieldElement, CArray<Model>),
callback: unsafe extern "C" fn(types::FieldElement, CArray<Struct>),
) -> Result<*mut Subscription> {
let clause = clause.map(|c| c.into());

Expand All @@ -262,7 +261,7 @@ pub unsafe extern "C" fn client_on_entity_state_update(

while let Some(Ok(entity)) = rcv.next().await {
let key: types::FieldElement = (&entity.hashed_keys).into();
let models: Vec<Model> = entity.models.into_iter().map(|e| (&e).into()).collect();
let models: Vec<Struct> = entity.models.into_iter().map(|e| (&e).into()).collect();
callback(key, models.into());
}
});
Expand All @@ -275,7 +274,7 @@ pub unsafe extern "C" fn client_on_entity_state_update(
pub unsafe extern "C" fn client_on_event_message_update(
client: *mut ToriiClient,
clause: Option<&EntityKeysClause>,
callback: unsafe extern "C" fn(types::FieldElement, CArray<Model>),
callback: unsafe extern "C" fn(types::FieldElement, CArray<Struct>),
) -> Result<*mut Subscription> {
let clause = clause.map(|c| c.into());

Expand All @@ -291,7 +290,7 @@ pub unsafe extern "C" fn client_on_event_message_update(

while let Some(Ok(entity)) = rcv.next().await {
let key: types::FieldElement = (&entity.hashed_keys).into();
let models: Vec<Model> = entity.models.into_iter().map(|e| (&e).into()).collect();
let models: Vec<Struct> = entity.models.into_iter().map(|e| (&e).into()).collect();
callback(key, models.into());
}
});
Expand Down Expand Up @@ -349,7 +348,7 @@ pub unsafe extern "C" fn bytearray_deserialize(
let felts = felts
.iter()
.map(|f| (&f.clone()).into())
.collect::<Vec<FieldElement>>();
.collect::<Vec<Felt>>();
let bytearray = match cairo_serde::ByteArray::cairo_deserialize(&felts, 0) {
Ok(bytearray) => bytearray,
Err(e) => return Result::Err(e.into()),
Expand All @@ -373,7 +372,7 @@ pub unsafe extern "C" fn poseidon_hash(
let felts = felts
.iter()
.map(|f| (&f.clone()).into())
.collect::<Vec<FieldElement>>();
.collect::<Vec<Felt>>();

(&poseidon_hash_many(&felts)).into()
}
Expand Down Expand Up @@ -477,7 +476,7 @@ pub unsafe extern "C" fn account_new(
address: *const c_char,
) -> Result<*mut Account> {
let address = unsafe { CStr::from_ptr(address).to_string_lossy() };
let address = match FieldElement::from_hex_be(address.deref()) {
let address = match Felt::from_hex(address.deref()) {
Ok(address) => address,
Err(e) => return Result::Err(e.into()),
};
Expand Down Expand Up @@ -542,7 +541,7 @@ pub unsafe extern "C" fn account_deploy_burner(
verifying_key.scalar(),
constants::KATANA_ACCOUNT_CLASS_HASH,
&[verifying_key.scalar()],
FieldElement::ZERO,
Felt::ZERO,
);
let signer = LocalWallet::from_signing_key(signing_key);

Expand All @@ -557,17 +556,19 @@ pub unsafe extern "C" fn account_deploy_burner(
);

// deploy the burner
let exec = (*master_account).0.execute(vec![starknet::accounts::Call {
to: constants::UDC_ADDRESS,
calldata: vec![
constants::KATANA_ACCOUNT_CLASS_HASH, // class_hash
verifying_key.scalar(), // salt
FieldElement::ZERO, // deployer_address
FieldElement::ONE, // constructor calldata length (1)
verifying_key.scalar(), // constructor calldata
],
selector: get_selector_from_name("deployContract").unwrap(),
}]);
let exec = (*master_account)
.0
.execute_v3(vec![starknet::accounts::Call {
to: constants::UDC_ADDRESS,
calldata: vec![
constants::KATANA_ACCOUNT_CLASS_HASH, // class_hash
verifying_key.scalar(), // salt
Felt::ZERO, // deployer_address
Felt::ONE, // constructor calldata length (1)
verifying_key.scalar(), // constructor calldata
],
selector: get_selector_from_name("deployContract").unwrap(),
}]);

let runtime = match tokio::runtime::Runtime::new() {
Ok(runtime) => runtime,
Expand Down Expand Up @@ -618,7 +619,7 @@ pub unsafe extern "C" fn account_execute_raw(
.into_iter()
.map(|c| (&c).into())
.collect::<Vec<starknet::accounts::Call>>();
let call = (*account).0.execute(calldata);
let call = (*account).0.execute_v3(calldata);

match tokio::runtime::Runtime::new() {
Ok(runtime) => match runtime.block_on(call.send()) {
Expand Down Expand Up @@ -652,7 +653,7 @@ pub unsafe extern "C" fn wait_for_transaction(
pub unsafe extern "C" fn hash_get_contract_address(
class_hash: types::FieldElement,
salt: types::FieldElement,
constructor_calldata: *const FieldElement,
constructor_calldata: *const Felt,
constructor_calldata_len: usize,
deployer_address: types::FieldElement,
) -> types::FieldElement {
Expand Down Expand Up @@ -706,9 +707,9 @@ pub unsafe extern "C" fn provider_free(rpc: *mut Provider) {

#[no_mangle]
#[allow(clippy::missing_safety_doc)]
pub unsafe extern "C" fn model_free(model: *mut Model) {
pub unsafe extern "C" fn model_free(model: *mut Struct) {
if !model.is_null() {
let _: torii_grpc::types::schema::Model = (&*Box::<Model>::from_raw(model)).into();
let _: dojo_types::schema::Struct = (&*Box::<Struct>::from_raw(model)).into();
}
}

Expand Down
Loading