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
918 changes: 458 additions & 460 deletions Cargo.lock

Large diffs are not rendered by default.

23 changes: 12 additions & 11 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ version = "1.7.0-alpha.6"
crate-type = ["cdylib", "rlib", "staticlib"]

[dependencies]
dojo-world = { git = "https://github.com/dojoengine/dojo", branch = "primitive-from-sql" }
dojo-types = { git = "https://github.com/dojoengine/dojo", branch = "primitive-from-sql" }
torii-proto = { git = "https://github.com/dojoengine/torii", rev = "77710f7" }
torii-client = { git = "https://github.com/dojoengine/torii", rev = "77710f7" }
torii-grpc-client = { git = "https://github.com/dojoengine/torii", rev = "77710f7" }
dojo-world = { git = "https://github.com/dojoengine/dojo", rev = "40b6af8" }
dojo-types = { git = "https://github.com/dojoengine/dojo", rev = "40b6af8" }
torii-proto = { git = "https://github.com/dojoengine/torii", rev = "38855fde5" }
torii-client = { git = "https://github.com/dojoengine/torii", rev = "38855fde5" }
torii-grpc-client = { git = "https://github.com/dojoengine/torii", rev = "38855fde5" }

starknet = "0.17.0-rc.2"
starknet-crypto = "0.7.4"
starknet-types-core = { version = "0.1.9", features = ["arbitrary"] }
starknet = "0.17.0"
starknet-crypto = "0.8"
starknet-types-core = { version = "0.2.0", features = ["arbitrary"] }

parking_lot = "0.12.1"
tokio = { version = "1.39.2", default-features = false, features = ["rt"] }
Expand All @@ -28,9 +28,9 @@ 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", rev = "7d60de1" }
cainome = "0.10.0"
lazy_static = "1.5.0"
account_sdk = { git = "https://github.com/cartridge-gg/controller-rs", rev = "242e7bd" }
account_sdk = { git = "https://github.com/cartridge-gg/controller-rs", rev = "ab1282b00afdf0a4b330793f1362aee066b1a0c9" }

serde-wasm-bindgen = "0.6.3"
wasm-bindgen-futures = "0.4.39"
Expand Down Expand Up @@ -74,4 +74,5 @@ cbindgen = { git = "https://github.com/masnagam/cbindgen", branch = "fix-issue-4
wasm-bindgen-test = "0.3.33"

[patch.crates-io]
crunchy = { git = "https://github.com/nmathewson/crunchy", branch = "cross-compilation-fix" }
crunchy = { git = "https://github.com/nmathewson/crunchy", branch = "cross-compilation-fix" }
starknet-crypto = { git = "https://github.com/glihm/starknet-rs", rev = "c1e7e19f45f9fad6ea2796da9b7b3dcf8f9f2b82" }
58 changes: 32 additions & 26 deletions dojo.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ struct TransactionCall;
struct Struct;
struct Token;
struct TokenBalance;
struct TokenCollection;
struct Contract;
struct TokenContract;
enum ContractType;
struct Contract;
struct Provider;
struct Account;
struct Ty;
Expand Down Expand Up @@ -721,32 +721,43 @@ typedef struct TokenBalanceQuery {
struct Pagination pagination;
} TokenBalanceQuery;

typedef struct CArrayTokenCollection {
struct TokenCollection *data;
typedef struct CArrayTokenContract {
struct TokenContract *data;
uintptr_t data_len;
} CArrayTokenCollection;
} CArrayTokenContract;

typedef struct PageTokenCollection {
struct CArrayTokenCollection items;
typedef struct PageTokenContract {
struct CArrayTokenContract items;
struct COptionc_char next_cursor;
} PageTokenCollection;
} PageTokenContract;

typedef enum ResultPageTokenCollection_Tag {
OkPageTokenCollection,
ErrPageTokenCollection,
} ResultPageTokenCollection_Tag;
typedef enum ResultPageTokenContract_Tag {
OkPageTokenContract,
ErrPageTokenContract,
} ResultPageTokenContract_Tag;

typedef struct ResultPageTokenCollection {
ResultPageTokenCollection_Tag tag;
typedef struct ResultPageTokenContract {
ResultPageTokenContract_Tag tag;
union {
struct {
struct PageTokenCollection ok;
struct PageTokenContract ok;
};
struct {
struct Error err;
};
};
} ResultPageTokenCollection;
} ResultPageTokenContract;

typedef struct CArrayContractType {
enum ContractType *data;
uintptr_t data_len;
} CArrayContractType;

typedef struct TokenContractQuery {
struct CArrayFieldElement contract_addresses;
struct CArrayContractType contract_types;
struct Pagination pagination;
} TokenContractQuery;

typedef struct CArrayContract {
struct Contract *data;
Expand All @@ -770,11 +781,6 @@ typedef struct ResultCArrayContract {
};
} ResultCArrayContract;

typedef struct CArrayContractType {
enum ContractType *data;
uintptr_t data_len;
} CArrayContractType;

typedef struct ContractQuery {
struct CArrayFieldElement contract_addresses;
struct CArrayContractType contract_types;
Expand Down Expand Up @@ -1027,14 +1033,14 @@ typedef struct TransactionCall {
struct FieldElement caller_address;
} TransactionCall;

typedef struct TokenCollection {
typedef struct TokenContract {
struct FieldElement contract_address;
const char *name;
const char *symbol;
uint8_t decimals;
uint32_t count;
const char *metadata;
} TokenCollection;
struct COptionU256 total_supply;
} TokenContract;

typedef struct Member {
const char *name;
Expand Down Expand Up @@ -1480,8 +1486,8 @@ struct ResultPageTokenBalance client_token_balances(struct ToriiClient *client,
* # Returns
* Result containing array of TokenBalance information or error
*/
struct ResultPageTokenCollection client_token_collections(struct ToriiClient *client,
struct TokenBalanceQuery query);
struct ResultPageTokenContract client_token_contracts(struct ToriiClient *client,
struct TokenContractQuery query);

/**
* Gets contracts matching the given query
Expand Down
13 changes: 9 additions & 4 deletions dojo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -908,13 +908,19 @@ struct TokenBalanceQuery {
Pagination pagination;
};

struct TokenCollection {
struct TokenContract {
FieldElement contract_address;
const char *name;
const char *symbol;
uint8_t decimals;
uint32_t count;
const char *metadata;
COption<U256> total_supply;
};

struct TokenContractQuery {
CArray<FieldElement> contract_addresses;
CArray<ContractType> contract_types;
Pagination pagination;
};

struct Contract {
Expand Down Expand Up @@ -1384,8 +1390,7 @@ Result<Page<TokenBalance>> client_token_balances(ToriiClient *client, TokenBalan
///
/// # Returns
/// Result containing array of TokenBalance information or error
Result<Page<TokenCollection>> client_token_collections(ToriiClient *client,
TokenBalanceQuery query);
Result<Page<TokenContract>> client_token_contracts(ToriiClient *client, TokenContractQuery query);

/// Gets contracts matching the given query
///
Expand Down
39 changes: 22 additions & 17 deletions dojo.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -474,23 +474,32 @@ cdef extern from *:
CArrayU256 token_ids;
Pagination pagination;

cdef struct CArrayTokenCollection:
TokenCollection *data;
cdef struct CArrayTokenContract:
TokenContract *data;
uintptr_t data_len;

cdef struct PageTokenCollection:
CArrayTokenCollection items;
cdef struct PageTokenContract:
CArrayTokenContract items;
COptionc_char next_cursor;

cdef enum ResultPageTokenCollection_Tag:
OkPageTokenCollection,
ErrPageTokenCollection,
cdef enum ResultPageTokenContract_Tag:
OkPageTokenContract,
ErrPageTokenContract,

cdef struct ResultPageTokenCollection:
ResultPageTokenCollection_Tag tag;
PageTokenCollection ok;
cdef struct ResultPageTokenContract:
ResultPageTokenContract_Tag tag;
PageTokenContract ok;
Error err;

cdef struct CArrayContractType:
ContractType *data;
uintptr_t data_len;

cdef struct TokenContractQuery:
CArrayFieldElement contract_addresses;
CArrayContractType contract_types;
Pagination pagination;

cdef struct CArrayContract:
Contract *data;
uintptr_t data_len;
Expand All @@ -504,10 +513,6 @@ cdef extern from *:
CArrayContract ok;
Error err;

cdef struct CArrayContractType:
ContractType *data;
uintptr_t data_len;

cdef struct ContractQuery:
CArrayFieldElement contract_addresses;
CArrayContractType contract_types;
Expand Down Expand Up @@ -672,13 +677,13 @@ cdef extern from *:
CallType call_type;
FieldElement caller_address;

cdef struct TokenCollection:
cdef struct TokenContract:
FieldElement contract_address;
const char *name;
const char *symbol;
uint8_t decimals;
uint32_t count;
const char *metadata;
COptionU256 total_supply;

cdef struct Member:
const char *name;
Expand Down Expand Up @@ -1058,7 +1063,7 @@ cdef extern from *:
#
# # Returns
# Result containing array of TokenBalance information or error
ResultPageTokenCollection client_token_collections(ToriiClient *client, TokenBalanceQuery query);
ResultPageTokenContract client_token_contracts(ToriiClient *client, TokenContractQuery query);

# Gets contracts matching the given query
#
Expand Down
18 changes: 9 additions & 9 deletions src/c/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ use torii_proto::Message;
use tower_http::cors::{AllowOrigin, CorsLayer};
use types::{
BlockId, CArray, COption, Call, Clause, Contract, Controller, Entity, Error, Event, KeysClause,
Page, Policy, Query, Result, Signature, Struct, Token, TokenBalance, TokenCollection,
Page, Policy, Query, Result, Signature, Struct, Token, TokenBalance, TokenContract,
ToriiClient, Ty, World,
};
use url::Url;

use crate::c::types::{
ContractQuery, ControllerQuery, TokenBalanceQuery, TokenQuery, Transaction, TransactionFilter,
TransactionQuery,
ContractQuery, ControllerQuery, TokenBalanceQuery, TokenContractQuery, TokenQuery, Transaction,
TransactionFilter, TransactionQuery,
};
use crate::constants;
use crate::types::{
Expand Down Expand Up @@ -1343,15 +1343,15 @@ pub unsafe extern "C" fn client_token_balances(
/// # Returns
/// Result containing array of TokenBalance information or error
#[no_mangle]
pub unsafe extern "C" fn client_token_collections(
pub unsafe extern "C" fn client_token_contracts(
client: *mut ToriiClient,
query: TokenBalanceQuery,
) -> Result<Page<TokenCollection>> {
query: TokenContractQuery,
) -> Result<Page<TokenContract>> {
let query = query.into();
let token_collections_future = unsafe { (*client).inner.token_collections(query) };
let token_contracts_future = unsafe { (*client).inner.token_contracts(query) };

match RUNTIME.block_on(token_collections_future) {
Ok(collections) => Result::Ok(collections.into()),
match RUNTIME.block_on(token_contracts_future) {
Ok(contracts) => Result::Ok(contracts.into()),
Err(e) => Result::Err(e.into()),
}
}
Expand Down
40 changes: 23 additions & 17 deletions src/c/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,35 +177,23 @@ impl From<torii_proto::TokenBalance> for TokenBalance {

#[derive(Debug, Clone)]
#[repr(C)]
pub struct TokenCollection {
pub struct TokenContract {
pub contract_address: FieldElement,
pub name: *const c_char,
pub symbol: *const c_char,
pub decimals: u8,
pub count: u32,
pub metadata: *const c_char,
pub total_supply: COption<U256>,
}

impl From<torii_proto::TokenCollection> for TokenCollection {
fn from(value: torii_proto::TokenCollection) -> Self {
Self {
contract_address: value.contract_address.into(),
name: CString::new(value.name.clone()).unwrap().into_raw(),
symbol: CString::new(value.symbol.clone()).unwrap().into_raw(),
decimals: value.decimals,
count: value.count,
metadata: CString::new(value.metadata.clone()).unwrap().into_raw(),
}
}
}
impl From<torii_proto::Token> for TokenCollection {
fn from(value: torii_proto::Token) -> Self {
impl From<torii_proto::TokenContract> for TokenContract {
fn from(value: torii_proto::TokenContract) -> Self {
Self {
contract_address: value.contract_address.into(),
name: CString::new(value.name.clone()).unwrap().into_raw(),
symbol: CString::new(value.symbol.clone()).unwrap().into_raw(),
decimals: value.decimals,
count: 0,
total_supply: value.total_supply.into(),
metadata: CString::new(value.metadata.clone()).unwrap().into_raw(),
}
}
Expand Down Expand Up @@ -560,6 +548,24 @@ impl From<TokenBalanceQuery> for torii_proto::TokenBalanceQuery {
}
}

#[derive(Clone, Debug)]
#[repr(C)]
pub struct TokenContractQuery {
pub contract_addresses: CArray<FieldElement>,
pub contract_types: CArray<ContractType>,
pub pagination: Pagination,
}

impl From<TokenContractQuery> for torii_proto::TokenContractQuery {
fn from(val: TokenContractQuery) -> Self {
torii_proto::TokenContractQuery {
contract_addresses: val.contract_addresses.into(),
contract_types: val.contract_types.into(),
pagination: val.pagination.into(),
}
}
}

#[derive(Clone, Debug)]
#[repr(C)]
pub struct TransactionFilter {
Expand Down
Loading