v0.6.0
Dojo Game Engine v0.6.0 Release Notes
Welcome to the next update of the Dojo Game Engine, version 0.6.0. This release brings a suite of enhancements and new features designed to improve performance, extend functionality, and streamline development workflows. We expect this release to be available by March 29 2024.
Let's dive into what's new:
Katana: Enhanced Execution Engine
- Multi-executor engine: Katana now supports both
blockifier
andstarknet_in_rust
as execution engines, significantly expanding our capabilities in benchmarking and performance optimization through cairo-native. - Support for RPC
0.6.0
. - Expanded RPC API namespaces (
torii
,saya
). - Metrics integration: Katana has now an integrated metrics module with prometheus an grafana dashboard.
Sozo: Streamlined World Building
-
Revamped Manifest Format. Sozo introduces a new, comprehensive manifest format in
toml
, organized across different stages of development. These manifests are designed for clarity and should be version-controlled in .git to track changes in your world efficiently.
Here are the different manifests folders, under themanifests
root directory:- base: Generated during the build phase.
- overlays: For each manifest file present in
base
, the user can create a new file with the same name and path under theoverlays
folder. Those files are meant to be edited by developers, to override some values. - deployments: Contains the intended state of the world for deployment. Two files are generated when
sozo migrate plan
is issued:manifest.toml
andmanifest.json
.
An other folder named
abis
contains all the ABIs extracted from the contracts for easy access. -
Simplified Contract Syntax. The new syntax for dojo contracts removes unnecessary boilerplate, focusing on the essentials.
#[dojo::interface] trait IActions { fn spawn(); fn move(direction: Direction); }
No more
ref self
orself
. Only the arguments that your system needs.Selective world injection in systems, you can now inject the
world
only where needed. Theworld: IWorldDispatcher
must be the first argument and with this exact casing:// Note that the world argument is only used here, not in the interface. fn spawn(world: IWorldDispatcher) { let my_model = get!(world, ...); } fn other_system() { // no world accessible here. }
-
Enhanced
sozo auth
Command. Authorizations are usually useful to setup a world and configure it. Sozo now supports multicall for those operations. Also, a new syntax aims at providing a more expressive way to configure the world:sozo auth grant writer Moves,0x1234 Position,0x1234 sozo auth grant owner model:Moves,0x2222 contract:0x1234,0x2222
Both
revoke
andgrant
are now supported. -
Binding generation for Typescript and Unity. To ease the front-end integration of dojo with
dojo.js
, sozo can now outputs bindings generated from the contracts ABI for typescript and unity.sozo build --typescript --unity
-
New
sozo clean
command for tidying up your project space and ensure old artifacts or manifests are removed effectively.
Torii: Advanced Event and State Management
- Event-Driven Models. Torii is now able to reflect the state of some entities that are not stored directly into the world's storage, but emitted as event instead. This opens door to a kind of volition that would be improved in the coming versions. You can find an example of that in the
actions.json
contract, where a new modelMoved
https://github.com/dojoengine/dojo/blob/ba1b250e18cc783a23736b894462f51ef056c016/examples/spawn-and-move/src/actions.cairo#L24-L30
https://github.com/dojoengine/dojo/blob/ba1b250e18cc783a23736b894462f51ef056c016/examples/spawn-and-move/src/actions.cairo#L87 - Integration of long polling, enhanced transaction monitoring for quicker indexing.
- Optimized Transaction Indexing from blocks for faster indexing on mainnet.
- Event query and subscriptions are now supported over gRPC.
- SNIP12 support on Torii, which allows one to send messages directly to the Torii relay. The relay will verify the signature and decode the message to store the entity inside the message. This unlock off-chain data flow, typically for chat systems embedded into an application built with Dojo.
Audit 🛡️
This version has undergone a security audit by Nethermind, ensuring the robustness and security of the core contracts. Read the full report.
What's Changed
- feat(libp2p): command to wait for the relay to be ready by @Larkooo in #1525
- fix(katana-core): crate can't be build without any feature by @kariy in #1527
- Bump Cairo dependencies to
2.5.0
by @kariy in #1522 - Prepare release: v0.5.2-alpha.0 by @tarrencev in #1528
- refactor(katana-provider): implement
transaction_in_range
for in-memory and fork providers by @kariy in #1530 - feat(saya): add config file arg for saya bin by @Jonatan-Chaverri in #1513
- Update ahash versions to fix missing feature stdsimd error by @Jonatan-Chaverri in #1534
- refactor(katana-rpc): isolate dev JSON RPC API from
katana
namespace by @makluganteng in #1544 - fix: ensure DevApi is also present in test sequencer by @glihm in #1549
- feat: merge audit branch by @glihm in #1533
- Prepare release: v0.5.2-alpha.1 by @tarrencev in #1550
- Prepare release: v0.6.0-alpha.0 by @tarrencev in #1551
- fix(sozo): wait for set_metadata txn by @tarrencev in #1554
- Torii core store u64 primitive as string in db by @broody in #1532
- feat(sozo): propose multicall format for
sozo auth writer
by @glihm in #1555 - feat(katana): add
torii_getTransactions
rpc by @tarrencev in #1529 - change sql setup to avoid torii timeout by @Cheelax in #1543
- fix(ci): codecov on main again by @tarrencev in #1573
- [Torii] Index more transaction types by @jelilat in #1452
- Show world explore url when starting Torii by @JunichiSugiura in #1565
- fix(dojo): dont assign ownership to ResourceMetadata on world creation by @tarrencev in #1566
- fix(ci): don't report codecov on main by @tarrencev in #1575
- Fix(sozo): Improve sozo migration output by @hhamud in #1571
- Feat(torii-grpc): Add total_count on RetrieveEntitiesResponse by @gianalarcon in #1545
- Katana RPC v0.6.0 by @kariy in #1568
- Prepare release: v0.6.0-alpha.1 by @tarrencev in #1578
- feat(bindgen): typescript plugin by @Larkooo in #1569
- Support grant/revoke writer/owner by @tarrencev in #1572
- fix: syncing status by @greged93 in #1582
- fix(katana): always skip validation if node is run with validation disabled by @kariy in #1589
- Prepare release: v0.6.0-alpha.2 by @tarrencev in #1588
- fix(sozo): ensure bindgen works for unity even with felts by @glihm in #1587
- Feat(torii-grpc): support Events query by @gianalarcon in #1567
- Bump
blockifier
rev for supporting higher fee transfer gas by @kariy in #1598 - fix(katana): search the inner state when sierra class not found in the cache by @kariy in #1602
- Prepare release: v0.6.0-alpha.3 by @tarrencev in #1599
- fix(katana): non-query-version fee estimates by @xJonathanLEI in #1610
- Add a script to declare standard ArgentX account contract classes by @kariy in #1579
- refactor: migrate to using toml manifest instead of json manifest by @lambda-0x in #1577
- fix: typescript plugin for non struct fields by @Larkooo in #1608
- Prepare release: v0.6.0-alpha.4 by @tarrencev in #1614
- Bump Cairo to
v2.5.4
by @kariy in #1607 - feat: add [dojo::interface] attribute by @remybar in #1594
- feat: dojoup - add a welcome message by @remybar in #1605
- fix: add flat to the event to be consistent with all world events by @glihm in #1639
- Prepare release: v0.6.0-alpha.5 by @tarrencev in #1642
- fix: handle primitive and custom types for enum introspect by @remybar in #1643
- fix: remove old reference to submodule by @RareSecond in #1612
- fix(sozo): ensure warnings don't stop tests build by @glihm in #1648
- fix: [torii/graphql] Added timezone information to timestamps strings by @akhercha in #1657
- Check model exists on
sozo auth
by @remybar in #1644 - fix: error on
world.model()
call gets mapped wrongly by @kariy in #1661 - sozo: check existing class-hashes before registering model by @kwkr in #1576
- feat: add transaction_hash and block_number in the manifest file by @remybar in #1651
- refactor(sozo): make event parsing logic modular and reusable by @Matth26 in #1556
- feat(sozo): add
--receipt
transaction option by @remybar in #1647 - feat(katana): add simulate transactions by @greged93 in #1590
- Prepare release: v0.6.0-alpha.6 by @tarrencev in #1666
- feat(relay): persist and expose messages through grpc by @Larkooo in #1526
- fix(torii): Added timezone informations to naive datetime strings by @akhercha in #1668
- refactor: write manifest file even if migration failed by @lambda-0x in #1652
- feat(sozo): add seed to manifest by @lambda-0x in #1674
- fix(sozo): don't upload to ipfs if in offline mode by @lambda-0x in #1678
- Torii fix queries with keys regex by @broody in #1609
- [sozo] Detect and manage manifests and artifacts discrepancies by @remybar in #1672
- Prepare release: v0.6.0-alpha.7 by @tarrencev in #1680
- Add explorer flag to open World Explorer in browser by @JunichiSugiura in #1581
- refactor(torii): retrieve events and store only relevant txns by @Larkooo in #1631
- Split sozo ops into its own crate by @Jonatan-Chaverri in #1546
- feat: add eventmessage for emitting models & start refactoring emit macro by @Larkooo in #1656
- fix: ensure sozo clean only affect base by @glihm in #1685
- sozo: add dry-run mode by @remybar in #1686
- feat(torii): Expose block timestamp by @akhercha in #1676
- [sozo] generate JSON manifest by @glihm in #1694
- Prepare release: v0.6.0-alpha.8 by @tarrencev in #1699
- Merge
dev/katana
branch by @kariy in #1697 - fix: add script to teardown tests and updated cargo lock by @glihm in #1707
- Update devcontainer image hash: 5340720 by @tarrencev in #1706
- Sozo CLI --version displaying more info by @fabrobles92 in #1710
- fix: ensure world contract is used by ref and add tests for auth grant by @glihm in #1715
- Prepare release: v0.6.0-alpha.9 by @tarrencev in #1716
- refactor(katana-rpc-types): include api error data when converting to rpc error by @kariy in #1717
- [sozo][auth]: revoke logic added by @Mohiiit in #1712
- Sozo call command by @remybar in #1704
- Bump rust to
1.76.0
by @kariy in #1720 - Update devcontainer image hash: 8d66222 by @tarrencev in #1727
- Re-export
reth-metrics-derive
crate fromdojo-metrics
by @kariy in #1719 - feat: add #[dojo::event] attribute by @Larkooo in #1721
- Prepare release: v0.6.0-alpha.10 by @tarrencev in #1731
- feat(katana-rpc): rpc server metrics by @kariy in #1726
- fix: ensure free function are not impacted by the injection of world and self by @glihm in #1733
- feat: use the manifest for dojo bindgen by @glihm in #1732
- Saya Prove and Verify by @neotheprogramist in #1708
- fix(katana-core): dont use optional dep in non-feature specific code by @kariy in #1746
- fix(katana): block env wrongly updated with cli value by @kariy in #1744
- refactor(katana): make genesis and gas price cli args conflicting by @kariy in #1745
- fix: duplicate indexation of transactions by @Larkooo in #1748
- Prepare release: v0.6.0-alpha.11 by @tarrencev in #1751
- Add Grafana dashboard for Katana by @kariy in #1728
- Update loggers to be namespaced and use structured logging by @Jonatan-Chaverri in #1702
- refactor: non mutable self references on libp2p by @Larkooo in #1750
- fix(torii): query models by @Larkooo in #1752
- feat: write world and model Abi and embed in json manifest by @lambda-0x in #1734
- Prepare release: v0.6.0-alpha.12 by @tarrencev in #1755
- Migration from ethers to alloy types by @tcoratger in #1693
- refactor: grpc use model hash as id & libp2p command queue by @Larkooo in #1754
- fix: ensure scarb compilation even when root package is missing by @glihm in #1759
- feat: start refactor to integrate testing logic for models and entities by @Larkooo in #1749
- fix(katana-primitives): enable
alloy-primitives
's serde onserde
feature by @kariy in #1760 - Prepare release: v0.6.0-alpha.13 by @tarrencev in #1764
- katana: bump gas for contract calls to 1B by @kariy in #1766
- feat(sozo): add ability to migrate the world by @lambda-0x in #1698
- [sozo] feat: sozo migrate commands and new manifest tree by @glihm in #1767
- refactor: deserializing using typed data model by @Larkooo in #1763
- fix: add better message for u256 being used as a key by @glihm in #1769
- fix: manifest name without
::
by @glihm in #1770 - fix: spawn and move & add offchain model by @Larkooo in #1768
- Prepare release: v0.6.0 by @tarrencev in #1771
New Contributors
- @Jonatan-Chaverri made their first contribution in #1513
- @makluganteng made their first contribution in #1544
- @hhamud made their first contribution in #1571
- @RareSecond made their first contribution in #1612
- @kwkr made their first contribution in #1576
- @Matth26 made their first contribution in #1556
- @fabrobles92 made their first contribution in #1710
- @Mohiiit made their first contribution in #1712
- @tcoratger made their first contribution in #1693
Full Changelog: v0.5.1...v0.6.0