Skip to content

feat: 1.3.1 update & token support #97

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Mar 27, 2025
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
Binary file modified Assets/Dojo/Plugins/Linux/libdojo_c.so
Binary file not shown.
79 changes: 70 additions & 9 deletions Assets/Dojo/Plugins/WebGL/torii_c.jslib
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,37 @@ mergeInto(LibraryManager.library, {

dynCall_vi(cb, client.__destroy_into_raw());
},
// Returns an array of all tokens
GetTokens: async function (clientPtr, contractAddresses, tokenIds, cb) {
const client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
const tokens = await client.getTokens(JSON.parse(UTF8ToString(contractAddresses)), JSON.parse(UTF8ToString(tokenIds)));

const tokensString = JSON.stringify(tokens);
const bufferSize = lengthBytesUTF8(tokensString) + 1;
const buffer = _malloc(bufferSize);
stringToUTF8(tokensString, buffer, bufferSize);

client.__destroy_into_raw();
dynCall_vi(cb, buffer);
},
// Returns an array of all token balances
GetTokenBalances: async function (clientPtr, contractAddresses, accountAddresses, tokenIds, cb) {
const client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
const balances = await client.getTokenBalances(JSON.parse(UTF8ToString(contractAddresses)), JSON.parse(UTF8ToString(accountAddresses)), JSON.parse(UTF8ToString(tokenIds)));

const balancesString = JSON.stringify(balances);
const bufferSize = lengthBytesUTF8(balancesString) + 1;
const buffer = _malloc(bufferSize);
stringToUTF8(balancesString, buffer, bufferSize);

client.__destroy_into_raw();
dynCall_vi(cb, buffer);
},
// Returns a dictionary of all of the entities
GetEntities: async function (clientPtr, queryString, cb) {
GetEntities: async function (clientPtr, queryString, historical, cb) {
const client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
const query = JSON.parse(UTF8ToString(queryString));
let entities = await client.getEntities(query);
let entities = await client.getEntities(query, historical);

// stringify the entities
let entitiesString = JSON.stringify(entities);
Expand All @@ -31,10 +57,10 @@ mergeInto(LibraryManager.library, {
dynCall_vi(cb, buffer);
},
// Returns a dictionary of all of the eventmessages
GetEventMessages: async function (clientPtr, queryString, cb) {
GetEventMessages: async function (clientPtr, queryString, historical, cb) {
const client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
const query = JSON.parse(UTF8ToString(queryString));
let entities = await client.getEventMessages(query);
let entities = await client.getEventMessages(query, historical);

// stringify the entities
let entitiesString = JSON.stringify(entities);
Expand Down Expand Up @@ -64,6 +90,43 @@ mergeInto(LibraryManager.library, {
client.__destroy_into_raw();
dynCall_vi(cb, buffer);
},
OnTokenUpdated: async function (clientPtr, contractAddresses, tokenIds, cb, subCb) {
const client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
const subscription = await client.onTokenUpdated(
JSON.parse(UTF8ToString(contractAddresses)),
JSON.parse(UTF8ToString(tokenIds)),
(token) => {
const tokenString = JSON.stringify(token);
const bufferSize = lengthBytesUTF8(tokenString) + 1;
const buffer = _malloc(bufferSize);
stringToUTF8(tokenString, buffer, bufferSize);

client.__destroy_into_raw();
dynCall_vi(cb, buffer);
});

client.__destroy_into_raw();
dynCall_vi(subCb, subscription.__destroy_into_raw());
},
OnTokenBalanceUpdated: async function (clientPtr, contractAddresses, accountAddresses, tokenIds, cb, subCb) {
const client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
const subscription = await client.onTokenBalanceUpdated(
JSON.parse(UTF8ToString(contractAddresses)),
JSON.parse(UTF8ToString(accountAddresses)),
JSON.parse(UTF8ToString(tokenIds)),
(balance) => {
const balanceString = JSON.stringify(balance);
const bufferSize = lengthBytesUTF8(balanceString) + 1;
const buffer = _malloc(bufferSize);
stringToUTF8(balanceString, buffer, bufferSize);

client.__destroy_into_raw();
dynCall_vi(cb, buffer);
});

client.__destroy_into_raw();
dynCall_vi(subCb, subscription.__destroy_into_raw());
},
OnEntityUpdated: async function (clientPtr, clausesStr, cb, subCb) {
let client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
let clauses = JSON.parse(UTF8ToString(clausesStr));
Expand Down Expand Up @@ -95,14 +158,12 @@ mergeInto(LibraryManager.library, {
client.__destroy_into_raw();
subscription.__destroy_into_raw();
},
OnEventMessageUpdated: async function (clientPtr, clausesStr, historical, cb, subCb) {
OnEventMessageUpdated: async function (clientPtr, clausesStr, cb, subCb) {
let client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
let clauses = JSON.parse(UTF8ToString(clausesStr));
console.log(clauses);

const subscription = await client.onEventMessageUpdated(
clauses,
historical,
(hashed_keys, models) => {
// stringify the entities
let modelsString = JSON.stringify(models);
Expand All @@ -121,12 +182,12 @@ mergeInto(LibraryManager.library, {
client.__destroy_into_raw();
dynCall_vi(subCb, subscription.__destroy_into_raw());
},
UpdateEventMessageSubscription: async function (clientPtr, subPtr, clausesStr, historical) {
UpdateEventMessageSubscription: async function (clientPtr, subPtr, clausesStr) {
let client = wasm_bindgen.ToriiClient.__wrap(clientPtr);
let subscription = wasm_bindgen.Subscription.__wrap(subPtr);
let clauses = JSON.parse(UTF8ToString(clausesStr));

await client.updateEventMessageSubscription(subscription, clauses, historical);
await client.updateEventMessageSubscription(subscription, clauses);

client.__destroy_into_raw();
subscription.__destroy_into_raw();
Expand Down
4 changes: 2 additions & 2 deletions Assets/Dojo/Plugins/Windows/libdojo_c.dll
Git LFS file not shown
4 changes: 2 additions & 2 deletions Assets/Dojo/Plugins/iOS/libdojo_c.a
Git LFS file not shown
Binary file modified Assets/Dojo/Plugins/macOS/libdojo_c.bundle
Binary file not shown.
7 changes: 5 additions & 2 deletions Assets/Dojo/Runtime/Config/WorldManagerLocalConfig.asset
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@ MonoBehaviour:
m_Name: WorldManagerLocalConfig
m_EditorClassIdentifier:
toriiUrl: http://localhost:8080
rpcUrl: http://localhost:5050
relayUrl: /ip4/127.0.0.1/tcp/9090
relayWebrtcUrl: /ip4/127.0.0.1/udp/9091/webrtc-direct/certhash/uEiAS9CpA5yNwO7iidBM5f9FcPl67PwohiK-1J9BhnFMrHg
worldAddress:
hex: 0x025e74888e786245ec7aa93d846b2cc9e4b49a5244209860bbf4b384f654521b
hex: 0x05cb84ccfa869ea8cf9acb0c77b2d1a67a7e9e8fd4a877a1c111e3c2b1eb0f03
query:
limit: 100
offset: 0
dont_include_hashed_keys: 0
order_by: []
entity_models: []
entity_updated_after: 0
21 changes: 21 additions & 0 deletions Assets/Dojo/Runtime/SynchronizationMaster.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public class SynchronizationMaster : MonoBehaviour
public UnityEvent<GameObject> OnEntitySpawned;
public UnityEvent<ModelInstance> OnModelUpdated;
public UnityEvent<ModelInstance> OnEventMessage;
public UnityEvent<TokenBalance> OnTokenBalanceUpdated;
public UnityEvent<Token> OnTokenUpdated;

// Awake is called when the script instance is being loaded.
void Awake()
Expand Down Expand Up @@ -158,6 +160,25 @@ public void RegisterEventMessageCallbacks()
ToriiEvents.Instance.OnEventMessageUpdated += HandleEventMessage;
}

// Register token callbacks
public void RegisterTokenCallbacks()
{
ToriiEvents.Instance.OnTokenUpdated += (token) =>
{
OnTokenUpdated?.Invoke(token);
};
}

// Register token balance callbacks
public void RegisterTokenBalanceCallbacks()
{
ToriiEvents.Instance.OnTokenBalanceUpdated += (tokenBalance) =>
{
OnTokenBalanceUpdated?.Invoke(tokenBalance);
};
}


private ModelInstance[] LoadModels()
{
List<ModelInstance> models = new();
Expand Down
41 changes: 41 additions & 0 deletions Assets/Dojo/Runtime/Torii/Token.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System.Numerics;
using Dojo.Starknet;

namespace Dojo.Torii
{
public struct Token
{
public FieldElement contractAddress;
public BigInteger tokenId;
public string name;
public string symbol;
public int decimals;
public string metadata;

public Token(FieldElement contractAddress, BigInteger tokenId, string name, string symbol, int decimals, string metadata)
{
this.contractAddress = contractAddress;
this.tokenId = tokenId;
this.name = name;
this.symbol = symbol;
this.decimals = decimals;
this.metadata = metadata;
}
}

public struct TokenBalance
{
public BigInteger balance;
public FieldElement accountAddress;
public FieldElement contractAddress;
public BigInteger tokenId;

public TokenBalance(BigInteger balance, FieldElement accountAddress, FieldElement contractAddress, BigInteger tokenId)
{
this.balance = balance;
this.accountAddress = accountAddress;
this.contractAddress = contractAddress;
this.tokenId = tokenId;
}
}
}
11 changes: 11 additions & 0 deletions Assets/Dojo/Runtime/Torii/Token.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading