diff --git a/LANGUAGES b/LANGUAGES
index 6c438149..7b3ba0eb 100644
--- a/LANGUAGES
+++ b/LANGUAGES
@@ -1 +1 @@
-es
\ No newline at end of file
+es zh-cn
diff --git a/po/messages.pot b/po/messages.pot
index 37ed77d8..ce95f544 100644
--- a/po/messages.pot
+++ b/po/messages.pot
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
-"Project-Id-Version: Building Autonomous Worlds with Dojo\n"
+"Project-Id-Version: Dojo: The Provable Game Engine\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
@@ -13,174 +13,287 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/SUMMARY.md:3
-msgid "Introduction"
+msgid "Foreword"
msgstr ""
#: src/SUMMARY.md:4
-msgid "AW Theory"
+msgid "What is Dojo?"
msgstr ""
#: src/SUMMARY.md:5
+msgid "AW Theory"
+msgstr ""
+
+#: src/SUMMARY.md:6
msgid "Cairo Ecosystem"
msgstr ""
#: src/SUMMARY.md:7
-msgid "Getting Started"
+msgid "FAQs"
msgstr ""
#: src/SUMMARY.md:9
-msgid "Installation"
+msgid "Getting Started"
msgstr ""
#: src/SUMMARY.md:11
-msgid "Development"
+msgid "Quick Start"
msgstr ""
-#: src/SUMMARY.md:13
-msgid "Setup"
+#: src/SUMMARY.md:12
+msgid "Manual Install"
msgstr ""
-#: src/SUMMARY.md:15
-msgid "Dojo Engine"
+#: src/SUMMARY.md:13
+msgid "Development Setup"
msgstr ""
-#: src/SUMMARY.md:17
-msgid "Overview"
+#: src/SUMMARY.md:14
+msgid "Contributing"
msgstr ""
-#: src/SUMMARY.md:18
-msgid "Cairo ECS"
+#: src/SUMMARY.md:16
+msgid "Community"
msgstr ""
-#: src/SUMMARY.md:19
-msgid "World"
+#: src/SUMMARY.md:18
+msgid "Get Started"
msgstr ""
#: src/SUMMARY.md:20
-msgid "Authorization"
-msgstr ""
-
-#: src/SUMMARY.md:21
-msgid "Components"
+msgid "Architecture"
msgstr ""
#: src/SUMMARY.md:22
-msgid "Systems"
+msgid "Hello Dojo"
msgstr ""
#: src/SUMMARY.md:23
-msgid "Entities"
+msgid "Config"
msgstr ""
#: src/SUMMARY.md:24
-msgid "Commands"
+msgid "World"
msgstr ""
#: src/SUMMARY.md:25
-msgid "Storage"
+msgid "Components"
msgstr ""
#: src/SUMMARY.md:26
-msgid "Sozo"
+msgid "Systems"
msgstr ""
#: src/SUMMARY.md:27
-msgid "Katana"
+msgid "Entities"
msgstr ""
#: src/SUMMARY.md:28
-msgid "Torii"
+msgid "Authorization"
+msgstr ""
+
+#: src/SUMMARY.md:29
+msgid "Commands"
msgstr ""
#: src/SUMMARY.md:30
-msgid "Appendix"
+msgid "Events"
+msgstr ""
+
+#: src/SUMMARY.md:31
+msgid "Testing"
msgstr ""
#: src/SUMMARY.md:32
-msgid "References"
+msgid "Dojo Modules"
msgstr ""
#: src/SUMMARY.md:33
-msgid "sozo Commands"
+msgid "ERC20"
msgstr ""
#: src/SUMMARY.md:34
-msgid "Project Commands"
+msgid "ERC721"
msgstr ""
#: src/SUMMARY.md:35
-msgid "init"
+msgid "ERC1155"
msgstr ""
#: src/SUMMARY.md:36
+msgid "DeFi"
+msgstr ""
+
+#: src/SUMMARY.md:38
+msgid "Client SDKs"
+msgstr ""
+
+#: src/SUMMARY.md:40
+msgid "Overview"
+msgstr ""
+
+#: src/SUMMARY.md:41
+msgid "JS"
+msgstr ""
+
+#: src/SUMMARY.md:42
+msgid "Core"
+msgstr ""
+
+#: src/SUMMARY.md:44
+msgid "Toolchain"
+msgstr ""
+
+#: src/SUMMARY.md:46
+msgid "Dojoup"
+msgstr ""
+
+#: src/SUMMARY.md:47
+msgid "Sozo"
+msgstr ""
+
+#: src/SUMMARY.md:48
+#: src/SUMMARY.md:60
+#: src/SUMMARY.md:62
+msgid "Reference"
+msgstr ""
+
+#: src/SUMMARY.md:49
+msgid "init"
+msgstr ""
+
+#: src/SUMMARY.md:50
msgid "build"
msgstr ""
-#: src/SUMMARY.md:37
+#: src/SUMMARY.md:51
msgid "test"
msgstr ""
-#: src/SUMMARY.md:38
+#: src/SUMMARY.md:52
msgid "migrate"
msgstr ""
-#: src/SUMMARY.md:39
-msgid "World Commands"
-msgstr ""
-
-#: src/SUMMARY.md:40
+#: src/SUMMARY.md:53
msgid "execute"
msgstr ""
-#: src/SUMMARY.md:41
+#: src/SUMMARY.md:54
msgid "register"
msgstr ""
-#: src/SUMMARY.md:42
+#: src/SUMMARY.md:55
msgid "system"
msgstr ""
-#: src/SUMMARY.md:43
+#: src/SUMMARY.md:56
msgid "component"
msgstr ""
-#: src/SUMMARY.md:44
-msgid "katana Reference"
+#: src/SUMMARY.md:57
+msgid "events"
msgstr ""
-#: src/SUMMARY.md:48
+#: src/SUMMARY.md:58
+msgid "auth"
+msgstr ""
+
+#: src/SUMMARY.md:59
+msgid "Katana"
+msgstr ""
+
+#: src/SUMMARY.md:61
+msgid "Torii"
+msgstr ""
+
+#: src/SUMMARY.md:64
+msgid "Deploying"
+msgstr ""
+
+#: src/SUMMARY.md:66
+msgid "Locally"
+msgstr ""
+
+#: src/SUMMARY.md:67
+msgid "Remote"
+msgstr ""
+
+#: src/SUMMARY.md:69
+msgid "Tutorial"
+msgstr ""
+
+#: src/SUMMARY.md:71
+msgid "Onchain Chess"
+msgstr ""
+
+#: src/SUMMARY.md:72
+msgid "0. Setup"
+msgstr ""
+
+#: src/SUMMARY.md:73
+msgid "1. Initiate"
+msgstr ""
+
+#: src/SUMMARY.md:74
+msgid "2. Move"
+msgstr ""
+
+#: src/SUMMARY.md:75
+msgid "3. Check Legal Move"
+msgstr ""
+
+#: src/SUMMARY.md:76
+msgid "4. Test Chess"
+msgstr ""
+
+#: src/SUMMARY.md:79
msgid "Contributors"
msgstr ""
#: src/index.md:1
-msgid "## Dojo: The provable games engine"
+msgid "Dojo"
msgstr ""
#: src/index.md:3
msgid ""
-"This guide is dedicated to familiarizing you with the Dojo engine and the "
-"transformative potential of Provable games. A special section on the "
+"> Dojo is an open-source project, currently in its early development phase, "
+"and warmly welcomes contributors. For additional resources, join the "
+"community on [Discord](https://discord.gg/vUN4Xq9Qv6) and check out the "
+"[contribution guide](./misc/contributors.md)."
+msgstr ""
+
+#: src/index.md:7
+msgid "## Dojo: The Provable Game Engine"
+msgstr ""
+
+#: src/index.md:9
+msgid ""
+"Dojo employs [Cairo](https://github.com/starkware-libs/cairo) to deliver a "
+"robust architecture and toolset for designing autonomous worlds and onchain "
+"games. It features an integrated entity component system (ECS) and includes "
+"a native indexer, RPC testnet, and a comprehensive CLI management toolkit."
+msgstr ""
+
+#: src/index.md:11
+msgid ""
+"This book is dedicated to familiarizing you with the Dojo engine and the "
+"potential of Provable games. A special section on the "
"[Theory](./theory/autonomous-worlds.md) elucidates this emergent concept of "
"autonomous worlds and Provable games."
msgstr ""
-#: src/index.md:5
-msgid "## What is Dojo?"
+#: src/index.md:13
+msgid ""
+"- [Quickstart](./getting-started/quick-start.md)\n"
+"- [What is Dojo? ](./theory/what-is-dojo.md)\n"
+"- [Explore the Architecture](./cairo/hello-dojo.md)"
msgstr ""
-#: src/index.md:6
-msgid ""
-"Dojo is a provable game engine with an integrated toolchain, designed for "
-"creating onchain games and autonomous worlds using [Cairo "
-"1.0](https://github.com/starkware-libs/cairo). It employs an [entity "
-"component system](https://en.wikipedia.org/wiki/Entity_component_system) and "
-"a [diamond pattern](https://eips.ethereum.org/EIPS/eip-2535), facilitating a "
-"modular, scalable world. Worlds grow via the addition of Components (state) "
-"and Systems (logic). Our architectural design is greatly influenced by the "
-"brilliant [Bevy](https://bevyengine.org/) engine."
+#: src/index.md:18
+msgid "### Explainer"
msgstr ""
-#: src/index.md:8
+#: src/index.md:20
msgid ""
"Here's a video of [Cartridge](https://cartridge.gg/)'s "
"[Tarrence](https://twitter.com/tarrenceva) explaining how Dojo works at the "
@@ -188,7 +301,7 @@ msgid ""
"Summit](https://twitter.com/pet3rpan_/status/1666764726427353091):"
msgstr ""
-#: src/index.md:10
+#: src/index.md:22
msgid ""
""
msgstr ""
-#: src/index.md:17
-msgid "#### Key Features"
+#: src/index.md:30
+msgid "### Organizational Structure"
msgstr ""
-#: src/index.md:18
+#: src/index.md:31
msgid ""
-"- Entity Component System (ECS) built on [Cairo "
-"1.0](https://github.com/starkware-libs/cairo)\n"
-"- [Sozo](./framework/sozo/overview.md) world migration planner\n"
-"- [Torii](./framework/torii/overview.md) networking and indexing stack\n"
-"- [Katana](./framework/katana/overview.md) RPC development network\n"
-"- Typed SDKs"
+"Dojo is an open-source initiative, licensed under MIT, dedicated to "
+"promoting and advancing the concept of Autonomous Worlds (AWs). It is "
+"spearheaded by [Cartridge](https://cartridge.gg/), [Realms & "
+"BibliothecaDAO](https://bibliothecadao.xyz/), "
+"[briq](https://briq.construction/) and many more "
+"[contributors](https://github.com/orgs/dojoengine/people)."
+msgstr ""
+
+#: src/index.md:33
+msgid "### How do I get involved?"
msgstr ""
-#: src/index.md:24
+#: src/index.md:35
msgid ""
-"> Dojo is an open-source project, currently in its early development phase, "
-"and warmly welcomes contributors. For additional resources, find the book on "
-"[Github](https://github.com/dojoengine/book)."
+"Check out our [Github](https://github.com/dojoengine), our "
+"[Twitter](https://twitter.com/dojostarknet), "
+"[Discord](https://discord.gg/vUN4Xq9Qv6) and [contribution "
+"guide](https://book.dojoengine.org/misc/contributors.html)"
msgstr ""
-#: src/index.md:27
-msgid "### Why Dojo?"
+#: src/theory/what-is-dojo.md:1
+msgid "# What is Dojo?"
msgstr ""
-#: src/index.md:29
+#: src/theory/what-is-dojo.md:3
msgid ""
"Dojo is the culmination of lessons learned from attempts at building "
-"[onchain games](https://naavik.co/digest/primer-fully-on-chain-gaming), an "
+"[on-chain games](https://naavik.co/digest/primer-fully-on-chain-gaming), an "
"emerging sector in the gaming industry. Any developer who has endeavored to "
-"build an onchain game appreciates the inherent engineering hurdles - a "
+"build an on-chain game recognizes the inherent engineering hurdles - a "
"realization that drove us to create Dojo. Just as you wouldn't recreate "
"Unity every time you develop a new game, the same principle applies here. "
"Dojo is designed to handle the complex infrastructure, allowing developers "
"to focus on the unique aspects of their games."
msgstr ""
-#: src/index.md:32
-msgid "### Why Cairo & Starknet?"
+#: src/theory/what-is-dojo.md:5
+msgid ""
+"Dojo aspires to be the go-to tool for building provable games. It is "
+"radically open-source, and all contributions are welcome."
+msgstr ""
+
+#: src/theory/what-is-dojo.md:9
+msgid "## Stop building infrastructure; start building games"
msgstr ""
-#: src/index.md:34
+#: src/theory/what-is-dojo.md:11
msgid ""
-"Provable games demand "
-"[zero-knowledge](https://ethereum.org/en/zero-knowledge-proofs/) properties "
-"for efficient scaling and verification of computations. "
-"[Cairo](https://book.starknet.io/chapter_1/what_is_cairo.html) addresses "
-"this need by providing a generalized language, eliminating the complexity of "
-"creating circuits to incorporate "
-"[SNARKs](https://consensys.net/blog/developers/introduction-to-zk-snarks/). "
+"Dojo's suite of tools takes the infrastructure complexity out of building "
+"on-chain games. It includes:"
+msgstr ""
+
+#: src/theory/what-is-dojo.md:13
+msgid "### Entity Component System (ECS)"
msgstr ""
-#: src/index.md:36
+#: src/theory/what-is-dojo.md:15
msgid ""
-"**You can simply program in Cairo and your applications become automatically "
-"provable**. "
+"Dojo offers a standardized approach to building games on smart contracts. "
+"Recognizing the intricacies of game design, Dojo simplifies the development "
+"process, allowing creators to focus on gameplay logic. This standardization "
+"paves the way for an interconnected network of worlds, streamlining "
+"developer expertise and promoting game integration."
msgstr ""
-#: src/index.md:38
+#: src/theory/what-is-dojo.md:17
msgid ""
-"Moreover, you can deploy your programs on the [Cairo Virtual "
-"Machine](https://medium.com/starkware/cairo-welcome-on-board-1cf3487554f) "
-"(CVM), which is compatible with Starknet's Layer 2, Starknet appchains, and "
-"even in-browser through WebAssembly (WASM)! Dojo aims to supply "
-"straightforward ZK primitives to fuel your game development."
+"Utilizing the ECS (Entity Component System) as its core architecture, Dojo "
+"effectively manages the state and behavior of Autonomous Worlds (AWs). This "
+"model revolves around systems acting on entities, which are collections of "
+"pure data components. Systems efficiently determine which entities to "
+"process based on persistent queries over these components."
msgstr ""
-#: src/index.md:40
+#: src/theory/what-is-dojo.md:19
+msgid "Read detailed information about the [Dojo ECS](../cairo/overview.md)."
+msgstr ""
+
+#: src/theory/what-is-dojo.md:21
+msgid "### [Torii](/crates/torii/README.md) - Starknet Indexer"
+msgstr ""
+
+#: src/theory/what-is-dojo.md:23
msgid ""
-"For more information about Starknet, Cairo and its tech stack, check out the "
-"[Starknet & Cairo book](https://book.starknet.io/)."
+"Building on-chain games often involves grappling with the challenge of "
+"indexing on-chain state. However, Dojo standardizes contract states to "
+"mirror traditional relational databases. This setup enables the [Torii "
+"Indexer](../toolchain/torii/overview.md) to auto-index all contract states, "
+"ensuring efficient and streamlined queries. Torii then exposes these states "
+"via a GraphQL API or gRPC (coming soon), allowing developers to easily query "
+"and retrieve data."
msgstr ""
-#: src/index.md:44
-msgid "### Vision"
+#: src/theory/what-is-dojo.md:25
+msgid ""
+"Using Torii drastically reduces the time and effort required to build "
+"on-chain games. It also eliminates the need to manually create indexers, "
+"which can be a tedious and error-prone process."
msgstr ""
-#: src/index.md:45
+#: src/theory/what-is-dojo.md:27
msgid ""
-"Dojo is a bold work in progress, aimed at empowering developers to construct "
-"onchain games and Autonomous Worlds (AWs) within hours, not weeks."
+"### [Katana](/crates/katana/README.md) - Blazingly fast development network"
msgstr ""
-#: src/index.md:47
-msgid "### Organizational Structure"
+#: src/theory/what-is-dojo.md:29
+msgid ""
+"Katana is a customizable StarkNet development network. It is blazingly fast "
+"and allows you to iterate on your game logic swiftly."
+msgstr ""
+
+#: src/theory/what-is-dojo.md:31
+msgid "### [Sozo CLI](/crates/sozo/README.md) - CLI Management Tool"
msgstr ""
-#: src/index.md:48
+#: src/theory/what-is-dojo.md:33
msgid ""
-"Dojo is an open-source initiative, licensed under MIT, dedicated to "
-"promoting and advancing the concept of Autonomous Worlds (AWs). It is "
-"spearheaded by [Cartridge](https://cartridge.gg/), [Realms & "
-"BibliothecaDAO](https://bibliothecadao.xyz/), "
-"[briq](https://briq.construction/) and many more "
-"[contributors](https://github.com/orgs/dojoengine/people)."
+"Dojo worlds are poised to become some of the largest contracts. Sozo is a "
+"CLI tool that assists you in managing your worlds. It enables you to create, "
+"build, test, and deploy your worlds. Additionally, you can craft new "
+"components and systems and register them with your world."
msgstr ""
-#: src/index.md:50
-msgid "### How do I get involved?"
+#: src/theory/what-is-dojo.md:35
+msgid "### What Dojo doesn't give you"
msgstr ""
-#: src/index.md:52
+#: src/theory/what-is-dojo.md:37
msgid ""
-"Check out our [Github](https://github.com/dojoengine), our "
-"[Twitter](https://twitter.com/dojostarknet), "
-"[Discord](https://discord.gg/vUN4Xq9Qv6) and [contribution "
-"guide](https://book.dojoengine.org/misc/contributors.html!)"
+"1. Visual graphics - While Dojo provides networking and contracts, it "
+"doesn't offer graphical engines. You can bring your graphics of choice! "
+"Integrate your Dojo world with Unreal, Godot, or Unity."
+msgstr ""
+
+#: src/theory/what-is-dojo.md:39
+msgid "## Understanding the Dojo Workflow: A Visual Guide"
+msgstr ""
+
+#: src/theory/what-is-dojo.md:41
+msgid ""
+"To help you understand how `Sozo` works, we've created a visual guide that "
+"outlines the flow of execution using the powerful sozo tool and the katana "
+"development network."
+msgstr ""
+
+#: src/theory/what-is-dojo.md:43
+msgid ""
+"This visual representation will help you grasp the fundamental steps of "
+"working with Dojo, guiding you through the process of creating and managing "
+"your on-chain games."
+msgstr ""
+
+#: src/theory/what-is-dojo.md:45
+msgid "Dojo Sozo Workflow"
msgstr ""
#: src/theory/autonomous-worlds.md:1
@@ -360,7 +526,7 @@ msgstr ""
#: src/theory/autonomous-worlds.md:13
msgid ""
-"We're firm believers in the potential for Autnomous Worlds to catalize the "
+"We're firm believers in the potential for Autonomous Worlds to catalize the "
"exploration of novel forms in the medium provided by zk proofs and "
"blockchain technology. This is not only about games, but also about new "
"forms of artwork, coordination, fun, emerging from tinkering and radical "
@@ -392,11 +558,47 @@ msgid ""
msgstr ""
#: src/theory/cairo.md:1
-msgid "## Cairo"
+msgid "# Provable games"
msgstr ""
#: src/theory/cairo.md:3
msgid ""
+"Provable games demand "
+"[zero-knowledge](https://ethereum.org/en/zero-knowledge-proofs/) properties "
+"for efficient scaling and verification of computations. "
+"[Cairo](https://book.starknet.io/chapter_1/what_is_cairo.html) addresses "
+"this need by providing a generalized language, eliminating the complexity of "
+"creating circuits to incorporate "
+"[SNARKs](https://consensys.net/blog/developers/introduction-to-zk-snarks/). "
+msgstr ""
+
+#: src/theory/cairo.md:5
+msgid ""
+"**You can simply program in Cairo and your applications become automatically "
+"provable**. "
+msgstr ""
+
+#: src/theory/cairo.md:7
+msgid ""
+"Moreover, you can deploy your programs on the [Cairo Virtual "
+"Machine](https://medium.com/starkware/cairo-welcome-on-board-1cf3487554f) "
+"(CVM), which is compatible with Starknet's Layer 2, Starknet appchains, and "
+"even in-browser through WebAssembly (WASM)! Dojo aims to supply "
+"straightforward ZK primitives to fuel your game development."
+msgstr ""
+
+#: src/theory/cairo.md:9
+msgid ""
+"For more information about Starknet, Cairo and its tech stack, check out the "
+"[Starknet & Cairo book](https://book.starknet.io/)."
+msgstr ""
+
+#: src/theory/cairo.md:11
+msgid "## Cairo"
+msgstr ""
+
+#: src/theory/cairo.md:13
+msgid ""
"Cairo is an open-source, Turing-complete smart contract language developed "
"by Starkware, designed to power the Validity Rollup Starknet. The language "
"enables highly expressive and verifiable computation, making it well-suited "
@@ -404,7 +606,7 @@ msgid ""
"finance (DeFi) projects."
msgstr ""
-#: src/theory/cairo.md:5
+#: src/theory/cairo.md:15
msgid ""
"Dojo builds on Cairo to create a robust framework for developing Autonomous "
"Worlds (AWs). By leveraging the capabilities of Cairo, Dojo aims to "
@@ -412,37 +614,37 @@ msgid ""
"performance of AWs."
msgstr ""
-#: src/theory/cairo.md:7
+#: src/theory/cairo.md:17
msgid ""
"A key feature of the Dojo framework is its use of "
-"[commands](../framework/cairo/commands.md). Commands are a design pattern "
-"that helps to reduce boilerplate code, resulting in cleaner and more "
-"maintainable applications. They achieve this by encapsulating specific "
-"actions or operations within self-contained, reusable units."
+"[commands](../cairo/commands.md). Commands are a design pattern that helps "
+"to reduce boilerplate code, resulting in cleaner and more maintainable "
+"applications. They achieve this by encapsulating specific actions or "
+"operations within self-contained, reusable units."
msgstr ""
-#: src/theory/cairo.md:9
+#: src/theory/cairo.md:19
msgid ""
"Developers can write commands freely within Systems, and the Cairo compiler "
"takes care of inlining the appropriate functions. "
msgstr ""
-#: src/theory/cairo.md:11
+#: src/theory/cairo.md:21
msgid "#### Essential Reading"
msgstr ""
-#: src/theory/cairo.md:12
+#: src/theory/cairo.md:22
msgid ""
"- [Cairo book](https://cairo-book.github.io/)\n"
"- [Awesome Cairo](https://github.com/auditless/awesome-cairo)\n"
"- [Starknet Book](https://book.starknet.io/)"
msgstr ""
-#: src/theory/cairo.md:16
+#: src/theory/cairo.md:26
msgid "### Starknet as an L2"
msgstr ""
-#: src/theory/cairo.md:18
+#: src/theory/cairo.md:28
msgid ""
"Starknet is a Validity Rollup Layer 2 (L2) solution designed to scale "
"Ethereum. It operates by offering high transaction throughput and low gas "
@@ -453,7 +655,7 @@ msgid ""
"verification through the use of STARK proofs computed off-chain."
msgstr ""
-#: src/theory/cairo.md:20
+#: src/theory/cairo.md:30
msgid ""
"In more technical terms, Starknet is a permissionless Validity-Rollup (also "
"known as a \"ZK-Rollup\") that supports general computation and currently "
@@ -462,11 +664,11 @@ msgid ""
"considered one of the safest and most scalable."
msgstr ""
-#: src/theory/cairo.md:22
+#: src/theory/cairo.md:32
msgid "### Starknet as an Appchain"
msgstr ""
-#: src/theory/cairo.md:24
+#: src/theory/cairo.md:34
msgid ""
"Cairo is an isomorphic, general-purpose language, optimized for "
"Zero-Knowledge (ZK) proofs. It's the driving force behind Starknet, Starkex, "
@@ -476,126 +678,226 @@ msgid ""
"Starknet appchains to seamlessly run Dojo worlds."
msgstr ""
-#: src/getting-started/installation.md:1
-#: src/framework/sozo/overview.md:9
-#: src/framework/katana/overview.md:9
-msgid "## Installation"
+#: src/theory/faqs.md:1
+msgid "# FAQs"
msgstr ""
-#: src/getting-started/installation.md:3
-msgid "### Precompiled binaries"
+#: src/theory/faqs.md:3
+msgid "#### Who owns Dojo?"
msgstr ""
-#: src/getting-started/installation.md:5
+#: src/theory/faqs.md:5
msgid ""
-"Precompiled binaries are available from the [GitHub releases "
-"page](https://github.com/dojoengine/dojo/releases).\n"
-"These are better managed by using [Dojoup](#using-dojoup)."
+"Dojo is strictly open-source and uses the Apache 2.0 license. Anyone can use "
+"Dojo for free, and anyone can contribute to the project."
msgstr ""
-#: src/getting-started/installation.md:8
-msgid "### Using Dojoup"
+#: src/theory/faqs.md:7
+msgid "#### Why Dojo?"
msgstr ""
-#: src/getting-started/installation.md:10
+#: src/theory/faqs.md:9
msgid ""
-"Dojoup is the Dojo toolchain installer. You can find more about it "
-"[here](https://github.com/dojoengine/dojo/blob/master/dojoup/README.md)."
+"Dojo was created to solve problems the founders faced when building onchain "
+"games. It standardizes the process of building such games and provides a "
+"suite of tools to make it easier."
msgstr ""
-#: src/getting-started/installation.md:12
-msgid "Open your terminal and run the following command:"
+#: src/theory/faqs.md:11
+msgid "#### What is the Dojo roadmap?"
msgstr ""
-#: src/getting-started/installation.md:14
+#: src/theory/faqs.md:13
msgid ""
-"```sh\n"
-"curl -L https://install.dojoengine.org | bash\n"
-"```"
+"Dojo is rapidly evolving. You can find open issues on the [Dojo "
+"Github](https://github.com/dojoengine/dojo/issues) and join the "
+"[Discord](https://discord.gg/vUN4Xq9Qv6) to get involved. If you have ideas "
+"for the project, please open an issue."
msgstr ""
-#: src/getting-started/installation.md:18
-msgid ""
-"This will install Dojoup, then simply follow the instructions on-screen,\n"
-"which will make the `dojoup` command available in your CLI."
+#: src/theory/faqs.md:15
+msgid "#### What is an onchain game?"
msgstr ""
-#: src/getting-started/installation.md:21
+#: src/theory/faqs.md:17
msgid ""
-"Running `dojoup` by itself will install the latest (nightly) [precompiled "
-"binaries](#precompiled-binaries): `sozo`, `katana`, and `torii`.\n"
-"See `dojoup --help` for more options, like installing from a specific "
-"version or commit."
+"Onchain games are games that exist entirely on a public blockchain network; "
+"all states and logic are onchain. Clients (like web browsers) do not exist "
+"on the chain but exist purely to interact with and interpret the onchain "
+"state."
msgstr ""
-#: src/getting-started/installation.md:24
-msgid ""
-"> ℹ️ **Note**\n"
-">\n"
-"> If you're on Windows, you will need to install and use [Git "
-"BASH](https://gitforwindows.org/) or "
-"[WSL](https://learn.microsoft.com/en-us/windows/wsl/install),\n"
-"> as your terminal, since Dojoup currently does not support Powershell or "
-"Cmd."
+#: src/theory/faqs.md:19
+msgid "#### What is an autonomous world?"
msgstr ""
-#: src/getting-started/installation.md:29
-msgid "### Building from source"
+#: src/theory/faqs.md:21
+msgid ""
+"An autonomous world is one that exists entirely onchain. It's not controlled "
+"by any single entity but is instead governed by the rules set within that "
+"world. Dive deeper into the topic here: [Autonomous "
+"Worlds](../theory/autonomous-worlds.md)."
msgstr ""
-#: src/getting-started/installation.md:31
-msgid "#### Prerequisites"
+#: src/theory/faqs.md:23
+msgid "#### What is Cairo?"
msgstr ""
-#: src/getting-started/installation.md:33
+#: src/theory/faqs.md:25
msgid ""
-"You will need the [Rust](https://rust-lang.org) compiler and Cargo, the Rust "
-"package manager.\n"
-"The easiest way to install both is with [`rustup.rs`](https://rustup.rs/)."
+"Cairo is an opensource programming language invented by Starkware. It's a "
+"Turing-complete language meant for general-purpose computation. It's a "
+"low-level language designed to compile to the Cairo Virtual Machine. Learn "
+"more about it here: [Cairo](../theory/cairo.md)."
+msgstr ""
+
+#: src/theory/faqs.md:27
+msgid "#### What is a provable game?"
msgstr ""
-#: src/getting-started/installation.md:36
+#: src/theory/faqs.md:29
msgid ""
-"On Windows, you will also need a recent version of [Visual "
-"Studio](https://visualstudio.microsoft.com/downloads/),\n"
-"installed with the \"Desktop Development With C++\" Workloads option."
+"Thanks to the magic of zero-knowledge proofs, we can ensure a game is fair "
+"by verifying a zk proof created off-chain. But what does that entail? "
+"Consider a game of chess. We aim for an experience where players trust each "
+"other's moves. In a straightforward approach — and given the simple rules of "
+"chess — if this were in a blockchain environment, every move would be a "
+"transaction on the blockchain. This is costly. We just want to know the "
+"winner, not every move."
msgstr ""
-#: src/getting-started/installation.md:39
-msgid "#### Building"
+#: src/theory/faqs.md:31
+msgid ""
+"With zk proofs and client communications, players can establish a state "
+"channel, sharing moves off-chain and ensuring their validity. At the end, a "
+"zk proof can be submitted to the blockchain to confirm the game's fairness. "
+"This constitutes a provable game."
msgstr ""
-#: src/getting-started/installation.md:41
-msgid "You can either use the different [Dojoup](#using-dojoup) flags:"
+#: src/getting-started/quick-start.md:1
+msgid "## Quick Start"
msgstr ""
-#: src/getting-started/installation.md:43
+#: src/getting-started/quick-start.md:3
msgid ""
-"```sh\n"
-"dojoup --branch master\n"
-"dojoup --path path/to/dojo\n"
-"```"
+"> It is worth reading [theory](../theory/autonomous-worlds.md) to "
+"familiarize yourself with the concept of Autonomous Worlds (AWs) and the "
+"[Cairo ecosystem](../theory/cairo.md) before diving into the code."
msgstr ""
-#: src/getting-started/installation.md:48
-msgid "Or, by using a single Cargo command:"
+#: src/getting-started/quick-start.md:6
+msgid "### Install Dojoup"
msgstr ""
-#: src/getting-started/installation.md:50
+#: src/getting-started/quick-start.md:8
msgid ""
-"```sh\n"
+"Dojo is built around a set of development tools - Katana, Torii and Sozo. "
+"Install them all easily with Dojoup. You can find detailed information about "
+"Dojoup "
+"[here](https://github.com/dojoengine/dojo/blob/master/dojoup/README.md)."
+msgstr ""
+
+#: src/getting-started/quick-start.md:10
+#: src/toolchain/dojoup.md:7
+msgid ""
+"```sh\n"
+"curl -L https://install.dojoengine.org | bash\n"
+"```"
+msgstr ""
+
+#: src/getting-started/quick-start.md:14
+msgid ""
+"This will install Dojoup, then simply follow the instructions on-screen,\n"
+"which will make the `dojoup` command available in your CLI."
+msgstr ""
+
+#: src/getting-started/quick-start.md:17
+#: src/toolchain/dojoup.md:15
+msgid ""
+"```sh\n"
+"dojoup\n"
+"```"
+msgstr ""
+
+#: src/getting-started/quick-start.md:21
+msgid ""
+"For full `dojoup` reference and debugging see "
+"[Dojoup](../toolchain/dojoup.md)."
+msgstr ""
+
+#: src/getting-started/quick-start.md:23
+msgid "### Next steps"
+msgstr ""
+
+#: src/getting-started/quick-start.md:25
+msgid ""
+"> Head to [Hello Dojo](../cairo/hello-dojo.md) to get create your first Dojo "
+"world."
+msgstr ""
+
+#: src/getting-started/from-source.md:1
+msgid "## Building from source"
+msgstr ""
+
+#: src/getting-started/from-source.md:3
+msgid ""
+"> If you are just wanting to play with the toolchain, we strongly suggest "
+"following the [Quick Start](./quick-start.md) guide."
+msgstr ""
+
+#: src/getting-started/from-source.md:5
+msgid "#### Prerequisites"
+msgstr ""
+
+#: src/getting-started/from-source.md:7
+msgid ""
+"You will need the [Rust](https://rust-lang.org) compiler and Cargo, the Rust "
+"package manager.\n"
+"The easiest way to install both is with [`rustup.rs`](https://rustup.rs/)."
+msgstr ""
+
+#: src/getting-started/from-source.md:10
+msgid ""
+"On Windows, you will also need a recent version of [Visual "
+"Studio](https://visualstudio.microsoft.com/downloads/),\n"
+"installed with the \"Desktop Development With C++\" Workloads option."
+msgstr ""
+
+#: src/getting-started/from-source.md:13
+msgid "#### Building"
+msgstr ""
+
+#: src/getting-started/from-source.md:15
+msgid "You can either use the different [Dojoup](#using-dojoup) flags:"
+msgstr ""
+
+#: src/getting-started/from-source.md:17
+msgid ""
+"```sh\n"
+"dojoup --branch master\n"
+"dojoup --path path/to/dojo\n"
+"```"
+msgstr ""
+
+#: src/getting-started/from-source.md:22
+msgid "Or, by using a single Cargo command:"
+msgstr ""
+
+#: src/getting-started/from-source.md:24
+msgid ""
+"```sh\n"
"cargo install --git https://github.com/dojoengine/dojo --force sozo katana "
"torii\n"
"```"
msgstr ""
-#: src/getting-started/installation.md:54
+#: src/getting-started/from-source.md:28
msgid ""
"Or, by manually building from a local copy of the [Dojo "
"repository](https://github.com/dojoengine/dojo):"
msgstr ""
-#: src/getting-started/installation.md:56
+#: src/getting-started/from-source.md:30
msgid ""
"```sh\n"
"# clone the repository\n"
@@ -610,1219 +912,5230 @@ msgid ""
"```"
msgstr ""
-#: src/development/setup.md:1
-msgid "# Dojo Engine - Getting Started Guide"
+#: src/getting-started/setup.md:1
+msgid "# Development Setup"
msgstr ""
-#: src/development/setup.md:3
+#: src/getting-started/setup.md:3
msgid ""
-"This README guides you through the process of setting up your local "
-"development environment for Dojo."
+"> This article is a guide to setting up a development environment for Dojo. "
+"It is not suggested to follow this guide if you are just wanting to play "
+"with the toolchain. We strongly suggest following the [Quick "
+"Start](../getting-started/quick-start.md) guide."
msgstr ""
-#: src/development/setup.md:5
-msgid "## Prerequisites"
+#: src/getting-started/setup.md:5
+msgid "### Prerequisites"
msgstr ""
-#: src/development/setup.md:7
+#: src/getting-started/setup.md:7
msgid "- Rust\n- Cairo"
msgstr ""
-#: src/development/setup.md:10
-msgid "## Clone the Repository"
+#: src/getting-started/setup.md:12
+msgid "## Guide"
msgstr ""
-#: src/development/setup.md:12
-msgid "First, clone the repository to your local machine:"
+#: src/getting-started/setup.md:14
+msgid "### Clone"
msgstr ""
-#: src/development/setup.md:14
+#: src/getting-started/setup.md:16
msgid ""
-"```bash\n"
+"```sh\n"
"git clone https://github.com/dojoengine/dojo.git\n"
"```"
msgstr ""
-#: src/development/setup.md:18
-msgid "## Setup Guide"
-msgstr ""
-
-#: src/development/setup.md:20
+#: src/getting-started/setup.md:20
msgid "### Linux & Mac"
msgstr ""
-#: src/development/setup.md:22
+#: src/getting-started/setup.md:22
msgid "#### 1. Install Rust and Dependencies"
msgstr ""
-#: src/development/setup.md:24
+#: src/getting-started/setup.md:24
msgid ""
"Start by installing Rust and running the test suite to confirm your setup:"
msgstr ""
-#: src/development/setup.md:26
+#: src/getting-started/setup.md:26
msgid ""
-"```bash\n"
+"```sh\n"
"rustup override set stable && rustup update && cargo test\n"
"```"
msgstr ""
-#: src/development/setup.md:30
+#: src/getting-started/setup.md:30
msgid ""
"> Note: Depending on your Linux distribution, you may need to install "
"additional dependencies. Make sure to install any suggested or missing "
"dependencies that arise during the setup process."
msgstr ""
-#: src/development/setup.md:32
+#: src/getting-started/setup.md:32
msgid "#### 2. Install Scarb Package Manager"
msgstr ""
-#: src/development/setup.md:34
+#: src/getting-started/setup.md:34
msgid ""
"Next, install the [Scarb](https://docs.swmansion.com/scarb) package manager "
"by running:"
msgstr ""
-#: src/development/setup.md:36
+#: src/getting-started/setup.md:36
msgid ""
-"```bash\n"
+"```sh\n"
"curl --proto '=https' --tlsv1.2 -sSf "
"https://docs.swmansion.com/scarb/install.sh | sh\n"
"```"
msgstr ""
-#: src/development/setup.md:40
-msgid "#### 3. Setup Cairo VSCode Extension"
+#: src/getting-started/setup.md:40
+msgid "#### 3. Add the Cairo 1.0 VSCode Extension"
msgstr ""
-#: src/development/setup.md:42
+#: src/getting-started/setup.md:42
msgid ""
-"For proper linting and syntax highlighting, you should install the Cairo 1.0 "
+"Install the [Cairo "
+"1.0](https://marketplace.visualstudio.com/items?itemName=starkware.cairo1) "
"extension for Visual Studio Code."
msgstr ""
-#: src/development/setup.md:44
-msgid ""
-"- Clone the Cairo repository somewhere on your machine (make sure not to "
-"clone within the Dojo directory)."
+#: src/getting-started/setup.md:45
+msgid "### Windows"
msgstr ""
-#: src/development/setup.md:46
-msgid ""
-"```bash\n"
-"git clone https://github.com/starkware-libs/cairo.git\n"
-"```"
+#: src/getting-started/setup.md:47
+#: src/getting-started/setup.md:51
+msgid "_Coming soon_"
msgstr ""
-#: src/development/setup.md:50
-msgid ""
-"- Install the Cairo Language Server extension. Here's a step-by-step guide, "
-"or you can follow the [official "
-"instructions](https://github.com/starkware-libs/cairo/blob/main/vscode-cairo/README.md)."
+#: src/getting-started/setup.md:49
+msgid "### Container"
msgstr ""
-#: src/development/setup.md:52
-msgid "Navigate to the vscode-cairo directory:"
+#: src/getting-started/contributing.md:1
+msgid "# Contributing to the Core"
msgstr ""
-#: src/development/setup.md:54
+#: src/getting-started/contributing.md:3
msgid ""
-"```bash\n"
-"cd cairo/vscode-cairo\n"
-"```"
+"Dojo is an open-source project, currently in its early development phase, "
+"and warmly welcomes contributors."
msgstr ""
-#: src/development/setup.md:58
-msgid "Install the required packages:"
+#: src/getting-started/contributing.md:5
+msgid "## How to Contribute"
msgstr ""
-#: src/development/setup.md:60
+#: src/getting-started/contributing.md:7
msgid ""
-"```bash\n"
-"sudo npm install --global @vscode/vsce\n"
-"npm install\n"
-"```"
+"Head to the [Github](https://github.com/dojoengine/dojo/issues) for open "
+"issues, if you see an issue that is unassigned, please request in the "
+"comments to be assigned to it. If you have an idea for a new feature, please "
+"create an issue with the `enhancement` tag."
msgstr ""
-#: src/development/setup.md:65
-msgid "Package the extension:"
+#: src/community/get-started.md:1
+msgid "## Get Started"
msgstr ""
-#: src/development/setup.md:67
+#: src/community/get-started.md:3
msgid ""
-"```bash\n"
-"vsce package\n"
-"```"
+"- [Community "
+"Hub](https://dojoengine.notion.site/Dojo-Engine-Community-Hub-d316194b998941c48ddf771a4dd5ff08#bcd6a32db1b2406cb6c325f3b700d45a)\n"
+"- [Discord](https://discord.gg/KG9w9BmDrV)\n"
+"- [Twitter](https://twitter.com/dojostarknet)\n"
+"- [Awesome Dojo](https://github.com/dojoengine/awesome-dojo)"
msgstr ""
-#: src/development/setup.md:71
-msgid "Install the extension:"
+#: src/cairo/hello-dojo.md:1
+msgid "# Hello Dojo"
msgstr ""
-#: src/development/setup.md:73
+#: src/cairo/hello-dojo.md:3
msgid ""
-"```bash\n"
-"code --install-extension cairo1*.vsix\n"
-"```"
+"> This section assumes that you have already installed the Dojo toolchain "
+"and are familiar with Cairo. If not, please refer to the [Getting "
+"Started](../getting-started/quick-start.md) section."
msgstr ""
-#: src/development/setup.md:77
-msgid ""
-"> **Mac Tip:** If you don't have the `code` command, in VSCode do "
-"`Cmd+Shift+P` and type 'shell command' to find the Shell Command: Install "
-"'code' command in PATH command."
+#: src/cairo/hello-dojo.md:5
+msgid "## Dojo in 15 Minutes"
msgstr ""
-#: src/development/setup.md:79
+#: src/cairo/hello-dojo.md:7
msgid ""
-"The Cairo language server should now be installed globally in your Visual "
-"Studio Code. If you have the server enabled, Scarb should automatically pick "
-"this up and start linting your Cairo files."
+"Think of Dojo as an abstraction over Cairo, similar to how React is to "
+"JavaScript. It enables you to write shorthand commands that expand into "
+"complex queries during compile time. Dojo is grounded in the well-known "
+"architecture known as the Entity Component System (ECS)."
msgstr ""
-#: src/development/setup.md:81
-msgid "### Windows"
+#: src/cairo/hello-dojo.md:9
+msgid ""
+"In Dojo, you design your worlds using Systems and Components. Systems "
+"outline the logic of your world, while components signify the state. This "
+"powerful pattern allows you to structure your logic in a highly modular way. "
+"If you don't understand this yet, don't fret; we'll delve into it in detail "
+"below."
msgstr ""
-#: src/development/setup.md:83
-#: src/development/setup.md:87
-msgid "_Coming soon_"
+#: src/cairo/hello-dojo.md:11
+msgid ""
+"To start, let's set up a project to run locally on your machine. From an "
+"empty directory, execute:"
msgstr ""
-#: src/development/setup.md:85
-msgid "### Container"
+#: src/cairo/hello-dojo.md:13
+msgid ""
+"```console\n"
+"sozo init\n"
+"```"
msgstr ""
-#: src/framework.md:1
-msgid "## Framework"
+#: src/cairo/hello-dojo.md:17
+msgid ""
+"Congratulations! You now have a local Dojo project. This command creates a "
+"`dojo-starter` project in your current directory. It's the ideal starting "
+"point for a new project and equips you with everything you need to begin."
msgstr ""
-#: src/framework.md:3
-msgid "### Cairo"
+#: src/cairo/hello-dojo.md:19
+msgid "#### Anatomy of a Dojo Project"
msgstr ""
-#: src/framework.md:4
+#: src/cairo/hello-dojo.md:21
msgid ""
-"- [Overview](./framework/cairo/overview.md)\n"
-"- [World](./framework/cairo/world.md)\n"
-"- [Components](./framework/cairo/components.md)\n"
-"- [Systems](./framework/cairo/systems.md)\n"
-"- [Entities](./framework/cairo/entities.md)\n"
-"- [Commands](./framework/cairo/commands.md)\n"
-"- [Storage](./framework/cairo/storage.md)"
-msgstr ""
-
-#: src/framework.md:13
-msgid "### Tooling"
+"Inspect the contents of the `dojo-starter` project, and you'll notice the "
+"following structure (excluding the non-cairo files):"
msgstr ""
-#: src/framework.md:15
+#: src/cairo/hello-dojo.md:23
msgid ""
-"Dojo comes with batteries included to power your games. There are 3 core "
-"tools which you will use to build your worlds."
+"```bash\n"
+"src\n"
+" - components.cairo\n"
+" - systems.cairo\n"
+" - lib.cairo\n"
+"Scarb.toml\n"
+"```"
msgstr ""
-#: src/framework.md:17
+#: src/cairo/hello-dojo.md:31
msgid ""
-"- [Sozo](./framework/sozo/overview.md)\n"
-"- [Katana](./framework/katana/overview.md)\n"
-"- [Torii](./framework/torii/overview.md)"
+"Dojo projects largely resemble standard Cairo projects, with the distinction "
+"being some special attribute tags you use when creating `Components` and "
+"`Systems`. Let's explore this next."
msgstr ""
-#: src/framework/cairo/overview.md:1
-msgid "## Overview"
+#: src/cairo/hello-dojo.md:33
+msgid "Open the `src/components.cairo` file to continue."
msgstr ""
-#: src/framework/cairo/overview.md:3
+#: src/cairo/hello-dojo.md:35
msgid ""
-"Dojo employs the ECS (Entity Component System) as an architectural pattern "
-"to efficiently manage and organize the state and behavior of Autonomous "
-"Worlds (AWs). In this pattern, computation is defined as a list of systems "
-"operating on a set of entities, each of which consists of a dynamic set of "
-"pure data components. Systems select the entities to process via persistent "
-"and efficient queries over the entities' components."
+"```rust,ignore\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Moves {\n"
+" #[key]\n"
+" player: ContractAddress,\n"
+" remaining: u8,\n"
+"}\n"
+"\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Position {\n"
+" #[key]\n"
+" player: ContractAddress,\n"
+" x: u32,\n"
+" y: u32\n"
+"}\n"
+"\n"
+"...rest of code\n"
+"```"
msgstr ""
-#: src/framework/cairo/overview.md:5
+#: src/cairo/hello-dojo.md:54
msgid ""
-"It is worth reading this excellent "
-"[FAQ](https://github.com/SanderMertens/ecs-faq) on ECS"
+"Notice the `#[derive(Component, Copy, Drop, Serde, SerdeLen)]` attributes. "
+"For a component to be recognized, we *must* include `Component`. This "
+"signals to the Dojo compiler that this struct should be treated as a "
+"component."
msgstr ""
-#: src/framework/cairo/overview.md:7
-msgid "### Understanding the ECS in Dojo"
+#: src/cairo/hello-dojo.md:56
+msgid ""
+"Our `Moves` component houses a `remaining` value in its state. The `#[key]` "
+"attribute informs Dojo that this component is indexed by the `player` field. "
+"If this is unfamiliar to you, we'll clarify its importance later in the "
+"chapter. Essentially, it implies that you can query this component using the "
+"`player` field."
msgstr ""
-#: src/framework/cairo/overview.md:9
+#: src/cairo/hello-dojo.md:58
msgid ""
-"The Entity Component System (ECS) forms the backbone of the Dojo engine. "
-"Here's an overview of its core elements:"
+"In a similar vein, we possess a `Position` component that holds `x` and `y` "
+"values. Once again, this component is indexed by the `player` field."
msgstr ""
-#: src/framework/cairo/overview.md:11
-msgid ""
-"1. **Entities**: Unique objects that can bear multiple components. They are "
-"identifiable through unique IDs.\n"
-"2. **Components**: Diverse attributes of an entity, such as geometry, "
-"physics, and hit points. Components are exclusively responsible for data "
-"storage.\n"
-"3. **Systems**: Segments of code that manage entities and alter components.\n"
-"4. **Queries**: Utilized by systems to select entities based on the "
-"associated components.\n"
-"5. **World**: A comprehensive container for entities, components, systems, "
-"and queries."
+#: src/cairo/hello-dojo.md:60
+msgid "Now, let's examine the `src/systems.cairo` file:"
msgstr ""
-#: src/framework/cairo/overview.md:19
-msgid "### Building an Autonomous World with Dojo"
+#: src/cairo/hello-dojo.md:62
+msgid ""
+"```rust,ignore\n"
+"#[system]\n"
+"mod spawn {\n"
+" use array::ArrayTrait;\n"
+" use box::BoxTrait;\n"
+" use traits::Into;\n"
+" use dojo::world::Context;\n"
+"\n"
+" use dojo_examples::components::Position;\n"
+" use dojo_examples::components::Moves;\n"
+"\n"
+" fn execute(ctx: Context) {\n"
+" let position = get!(ctx.world, ctx.origin, (Position));\n"
+" set!(\n"
+" ctx.world,\n"
+" (\n"
+" Moves {\n"
+" player: ctx.origin, remaining: 10\n"
+" },\n"
+" Position {\n"
+" player: ctx.origin, x: position.x + 10, y: position.y + "
+"10\n"
+" },\n"
+" )\n"
+" );\n"
+" return ();\n"
+" }\n"
+"}\n"
+"```"
msgstr ""
-#: src/framework/cairo/overview.md:21
-msgid "Follow these steps to effectively create a Dojo world:"
+#: src/cairo/hello-dojo.md:91
+msgid "Let us break this down:"
msgstr ""
-#: src/framework/cairo/overview.md:23
+#: src/cairo/hello-dojo.md:93
msgid ""
-"1. **Conceptualize Entities**: Visualize the entities that will populate "
-"your world.\n"
-"2. **Recognize Shared Attributes**: Determine common characteristics of your "
-"entities, such as position, name, or health.\n"
-"3. **Construct Reusable Components**: Create versatile components derived "
-"from these shared attributes.\n"
-"4. **Develop Specialized Systems**: Design systems that are adept at "
-"performing a specific task."
+"```rust,ignore\n"
+"#[system]\n"
+"```"
msgstr ""
-#: src/framework/cairo/overview.md:28
+#: src/cairo/hello-dojo.md:97
msgid ""
-"To illustrate, here's an example of a basic design that utilizes components "
-"and systems to create four distinct entities:"
+"Just as we use the `#[derive(Component)]` attribute, the `#[system]` "
+"attribute informs the Dojo compiler that this struct is a system, "
+"instructing it to compile accordingly."
msgstr ""
-#: src/framework/cairo/overview.md:31
-msgid "ECS"
+#: src/cairo/hello-dojo.md:99
+msgid ""
+"```rust,ignore\n"
+"fn execute(ctx: Context)\n"
+"```"
msgstr ""
-#: src/framework/cairo/world.md:1
-msgid "## World"
+#: src/cairo/hello-dojo.md:103
+msgid ""
+"You'll observe that the system features an `execute` function. It's crucial "
+"to note that all Dojo systems necessitate an `execute` function. This "
+"function accepts a `Context` as its parameter. The `Context` is a distinct "
+"struct that provides information about the world and the caller."
msgstr ""
-#: src/framework/cairo/world.md:3
+#: src/cairo/hello-dojo.md:105
msgid ""
-"The world contract functions as a central system kernel, serving as the "
-"foundation for initiating and resolving all interactions. Within this "
-"kernel, contracts are deployed, registered, and executed, streamlining the "
-"process for downstream systems by enabling clients to engage with a single "
-"contract rather than potentially hundreds."
+"It's worth mentioning that a system can contain more than just the `execute` "
+"function. You're free to include numerous functions as needed. However, the "
+"`execute` function is mandatory since it's invoked when your system is "
+"executed."
+msgstr ""
+
+#: src/cairo/hello-dojo.md:107
+msgid "Now lets look at the next line:"
msgstr ""
-#: src/framework/cairo/world.md:6
+#: src/cairo/hello-dojo.md:109
msgid ""
-"> **To think about:** Consider Autonomous Worlds as sovereign blockchains "
-"residing within another blockchain - a nested blockchain, so to speak. Just "
-"as you can deploy contracts onto Ethereum to enhance its functionality, you "
-"can similarly introduce systems into the World contract to enrich its "
-"features. While anyone can contribute to the World, akin to Ethereum, "
-"authorization is required to interact with component state. There is a "
-"dedicated topic to Authorisation."
+"```rust,ignore\n"
+"let position = get!(ctx.world, ctx.origin, (Position));\n"
+"```"
msgstr ""
-#: src/framework/cairo/world.md:9
-#: src/framework/cairo/authorization.md:13
-msgid "### API"
+#: src/cairo/hello-dojo.md:113
+msgid ""
+"Here we use `get!` [command](./commands.md) to retrieve the `Position` "
+"component for the `ctx.origin` entity. `ctx.origin` is the address of the "
+"caller. When called for the first time, it will return:"
msgstr ""
-#: src/framework/cairo/world.md:11
+#: src/cairo/hello-dojo.md:115
msgid ""
"```rust,ignore\n"
-"// World interface\n"
-"#[abi]\n"
-"trait IWorld {\n"
-" fn initialize(routes: Array);\n"
-" fn component(name: ShortString) -> ClassHash;\n"
-" fn register_component(class_hash: ClassHash);\n"
-" fn system(name: ShortString) -> ClassHash;\n"
-" fn register_system(class_hash: ClassHash);\n"
-" fn uuid() -> usize;\n"
-" fn execute(name: ShortString, execute_calldata: Span) -> "
-"Span;\n"
-" fn entity(component: ShortString, key: Query, offset: u8, length: usize) "
-"-> Span;\n"
-" fn set_entity(component: ShortString, key: Query, offset: u8, value: "
-"Span);\n"
-" fn entities(component: ShortString, partition: u250) -> (Span, "
-"Span>);\n"
-" fn set_executor(contract_address: ContractAddress);\n"
-" fn is_authorized(system: ClassHash, component: ClassHash) -> bool;\n"
-" fn is_account_admin() -> bool;\n"
-" fn delete_entity(component: ShortString, query: Query);\n"
+"Position {\n"
+" player: 0x0, // zero address\n"
+" x: 0,\n"
+" y: 0\n"
"}\n"
"```"
msgstr ""
-#: src/framework/cairo/authorization.md:1
-msgid "## Authorization"
+#: src/cairo/hello-dojo.md:123
+msgid "Now the next line:"
msgstr ""
-#: src/framework/cairo/authorization.md:3
+#: src/cairo/hello-dojo.md:125
msgid ""
-"As discussed in the [World](./world.md) chapter, Autonomous Worlds (AWs) "
-"function as sovereign chains nested within a public blockchain. These Worlds "
-"are also open to the public. This structure allows anyone to enhance a World "
-"by deploying components or systems. However, this openness brings security "
-"considerations. Similar to Ethereum, interacting with a component state by a "
-"System requires appropriate authorization by the component owner."
+"```rust,ignore\n"
+"set!(\n"
+" ctx.world,\n"
+" (\n"
+" Moves {\n"
+" player: ctx.origin, remaining: 10\n"
+" }, Position {\n"
+" player: ctx.origin, x: position.x + 10, y: position.y + 10\n"
+" },\n"
+" )\n"
+");\n"
+"```"
msgstr ""
-#: src/framework/cairo/authorization.md:5
-msgid "### Architecture"
+#: src/cairo/hello-dojo.md:138
+msgid ""
+"Here we use the `set!` [command](./commands.md) to set the `Moves` and "
+"`Position` components for the `ctx.origin` entity."
msgstr ""
-#: src/framework/cairo/authorization.md:7
-#: src/framework/cairo/authorization.md:11
-#: src/framework/cairo/authorization.md:15
-msgid "__todo__"
+#: src/cairo/hello-dojo.md:140
+msgid "We covered a lot here in a short time. Let's recap:"
msgstr ""
-#: src/framework/cairo/authorization.md:9
-#: src/framework/katana/overview.md:21
-msgid "### Usage"
+#: src/cairo/hello-dojo.md:142
+msgid ""
+"- Explained the anatomy of a Dojo project\n"
+"- Explained the importace of the `#[derive(Component)]` and `#[system]` "
+"attribute\n"
+"- Explained the `execute` function\n"
+"- Explained the `Context` struct\n"
+"- Touched on the `get!` and `set!` commands"
msgstr ""
-#: src/framework/cairo/components.md:1
-msgid "## Components"
+#: src/cairo/hello-dojo.md:149
+msgid "### Run it locally!"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:151
+msgid "Now that we have some theory out of the way, lets build the Dojo project!"
msgstr ""
-#: src/framework/cairo/components.md:3
+#: src/cairo/hello-dojo.md:153
+#: src/deployment/locally.md:29
msgid ""
-"Components serve as the foundation for defining the world's structure, "
-"encapsulating state for systems to mutate. For instance, a Position "
-"component can be implemented as a struct, exposing `is_zero` and `is_equal` "
-"methods. Dojo compiles these components into contracts that can be declared "
-"and installed within a world, enabling the creation of diverse and "
-"customizable environments."
+"```bash\n"
+"sozo build\n"
+"```"
msgstr ""
-#: src/framework/cairo/components.md:5
+#: src/cairo/hello-dojo.md:157
msgid ""
-"When designing a world's components, it is crucial to carefully consider the "
-"abstractions you create, always keeping composability in mind."
+"That compiled the components and system into an artifact that can be "
+"deployed! Simple as that!"
msgstr ""
-#: src/framework/cairo/components.md:7
+#: src/cairo/hello-dojo.md:159
msgid ""
-"Suppose you plan to create two entities that move around the map and are "
-"fundamentally different from each other, except for the fact that they both "
-"exist within the world. In this case, you could create a shared Position "
-"component for both entities. This demonstrates the power of the Entity "
-"Component System (ECS) abstraction: by writing a single component, you can "
-"reuse it across multiple diverse entities, promoting modularity and "
-"flexibility within your world design."
+"Now lets deploy it to [Katana](../toolchain/katana/overview.md)! First we "
+"need to get Katana running:"
msgstr ""
-#: src/framework/cairo/components.md:9
+#: src/cairo/hello-dojo.md:161
+#: src/deployment/locally.md:13
msgid ""
-"```rust,ignore\n"
-"use array::ArrayTrait;\n"
-"\n"
-"#[derive(Component, Copy, Drop, Serde)]\n"
-"#[component(indexed = true)]\n"
-"struct Moves {\n"
-" remaining: u8,\n"
-"}\n"
-"\n"
-"#[derive(Component, Copy, Drop, Serde)]\n"
-"struct Position {\n"
-" x: u32,\n"
-" y: u32\n"
-"}\n"
-"\n"
-"trait PositionTrait {\n"
-" fn is_zero(self: Position) -> bool;\n"
-" fn is_equal(self: Position, b: Position) -> bool;\n"
-"}\n"
-"\n"
-"impl PositionImpl of PositionTrait {\n"
-" fn is_zero(self: Position) -> bool {\n"
-" if self.x - self.y == 0 {\n"
-" return true;\n"
-" }\n"
-" false\n"
-" }\n"
-"\n"
-" fn is_equal(self: Position, b: Position) -> bool {\n"
-" self.x == b.x && self.y == b.y\n"
-" }\n"
-"}\n"
+"```bash\n"
+"katana --disable-fee\n"
"```"
msgstr ""
-#: src/framework/cairo/systems.md:1
-msgid "## Systems"
+#: src/cairo/hello-dojo.md:165
+msgid ""
+"Success! [Katana](../toolchain/katana/overview.md) should now be running "
+"locally on your machine. Now lets deploy!"
msgstr ""
-#: src/framework/cairo/systems.md:3
+#: src/cairo/hello-dojo.md:167
+#: src/deployment/locally.md:23
msgid ""
-"Systems represent functions that operate on the world state. They take input "
-"from the user, retrieve the current state from the world, compute a state "
-"transition, and apply it. Each system has a single entry point, the execute "
-"function. To streamline interaction with the world, systems can utilize\n"
-"commands."
+"```bash\n"
+"sozo migrate --name test\n"
+"```"
msgstr ""
-#: src/framework/cairo/systems.md:6
+#: src/cairo/hello-dojo.md:171
msgid ""
-"```rust,ignore\n"
-"#[system]\n"
-"mod Spawn {\n"
-" use array::ArrayTrait;\n"
-" use traits::Into;\n"
+"This will deploy the artifact to [Katana](../toolchain/katana/overview.md). "
+"You should see terminal output similar to this:"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:173
+msgid ""
+"```bash\n"
+"Migration account: "
+"0x33c627a3e5213790e246a917770ce23d7e562baa5b4d2917c23b1be6d91961c\n"
"\n"
-" use dojo::world::Context;\n"
-" use dojo_examples::components::Position;\n"
-" use dojo_examples::components::Moves;\n"
+"[1] 🌎 Building World state....\n"
+" > No remote World found\n"
+"[2] 🧰 Evaluating Worlds diff....\n"
+" > Total diffs found: 7\n"
+"[3] 📦 Preparing for migration....\n"
+" > Total items to be migrated (7): New 7 Update 0\n"
+" \n"
+"# Executor\n"
+" > Contract address: "
+"0x1a8cc7a653543337be184d21ceeb5cfc7e97af5ab7da5e4be77f373124d7e48\n"
+"# World\n"
+" > Contract address: "
+"0x71b95a2c000545624c51813444b57dbcdcc153dfc79b6b0e3a9a536168d1e16\n"
+"# Components (2)\n"
+"Moves\n"
+" > class hash: "
+"0x3240ca67c41c5ae5557f87f44cca2b590f40407082dd390d893a514cfb2b8cd\n"
+"Position\n"
+" > class hash: "
+"0x4caa1806451739b6fb470652b8066a11f80e847d49003b43cca75a2fd7647b6\n"
+"# Systems (3)\n"
+"spawn\n"
+" > class hash: "
+"0x1b949b00d5776c8ba13c2fdada38d4b196f3717c93c5c254c4909ed0eb249f7\n"
+"move\n"
+" > class hash: "
+"0x2534c514efeab524f24cd4b03add904eb540391e9966ebc96f8ce98453a4e1e\n"
+"library_call\n"
+" > class hash: "
+"0xabfd55d9bb6552aac17d78b33a6e18b06b1b95d4f684637e661dd83053fd45\n"
"\n"
-" fn execute(ctx: Context) {\n"
-" set !(\n"
-" ctx.world, ctx.origin.into(), (Moves { remaining: 10 }, Position "
-"{ x: 0, y: 0 }, )\n"
-" );\n"
-" return ();\n"
-" }\n"
-"}\n"
+"🎉 Successfully migrated World on block #4 at address "
+"0x71b95a2c000545624c51813444b57dbcdcc153dfc79b6b0e3a9a536168d1e16\n"
"```"
msgstr ""
-#: src/framework/cairo/entities.md:1
-msgid "## Entities"
+#: src/cairo/hello-dojo.md:203
+msgid ""
+"Your 🌎 is now deployed at "
+"`0x71b95a2c000545624c51813444b57dbcdcc153dfc79b6b0e3a9a536168d1e16`!"
msgstr ""
-#: src/framework/cairo/entities.md:3
+#: src/cairo/hello-dojo.md:205
msgid ""
-"A common misconception for those new to ECS systems is the way entities "
-"exist within the World. Different ECS systems handle entities in various "
-"ways. In Dojo, entities are treated as a primary key value within the world, "
-"to which components can be attached. To illustrate this concept, consider a "
-"simple example of a character in a game that has a position and a health "
-"component."
+"Let's discuss the `Scarb.toml` file in the project. This file contains "
+"environment variables that make running CLI commands in your project a "
+"breeze. (Read more about it [here](./config.md))."
+msgstr ""
+
+#: src/cairo/hello-dojo.md:207
+msgid "Add the world address to the bottom of the file:"
msgstr ""
-#: src/framework/cairo/entities.md:5
+#: src/cairo/hello-dojo.md:209
msgid ""
-"When defining the components for this entity, it is important to note that "
-"we do not reference the entity directly. Instead, we simply provide two "
-"structs that the entity will contain. This approach emphasizes the "
-"flexibility and composability of the ECS system, allowing for the easy "
-"creation and modification of entities with various combinations of "
-"components."
+"```toml\n"
+"world_address = "
+"\"0x71b95a2c000545624c51813444b57dbcdcc153dfc79b6b0e3a9a536168d1e16\"\n"
+"```"
msgstr ""
-#: src/framework/cairo/entities.md:7
+#: src/cairo/hello-dojo.md:213
msgid ""
-"```rust,ignore\n"
-"#[component]\n"
-"struct Position {\n"
-" x: u32,\n"
-" y: u32\n"
-"}\n"
-"\n"
-"#[component]\n"
-"struct Health {\n"
-" value: u32,\n"
-"}\n"
-"\n"
+"This establishes the world address for your project. You can then run "
+"commands like:"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:215
+msgid ""
+"```bash\n"
+"sozo execute spawn\n"
"```"
msgstr ""
-#: src/framework/cairo/entities.md:21
+#: src/cairo/hello-dojo.md:219
msgid ""
-"Now, let's create a `SpawnSystem` for the character. It is important to note "
-"that we have not explicitly defined an Entity anywhere. Instead, the system "
-"will assign a primary key ID to the entity when this system is executed."
+"By doing so, you've just activated the spawn system. You now have a local "
+"world that you can interact with."
msgstr ""
-#: src/framework/cairo/entities.md:23
+#: src/cairo/hello-dojo.md:221
+msgid "### Indexing"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:223
msgid ""
-"```rust,ignore\n"
-"// The most basic system that creates a new player entity with a given name "
-"and 100 health.\n"
-"\n"
-"#[system]\n"
-"mod Spawn {\n"
-" use array::ArrayTrait;\n"
-" use traits::Into;\n"
+"With your local world set up, let's delve into indexing. You can index the "
+"entire world with this simple command:"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:225
+msgid ""
+"```bash\n"
+"torii\n"
+"```"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:229
+msgid ""
+"Executing the above activates a local torii server using SQLite as its "
+"database, which is exposed at `http://0.0.0.0:8080`. It will automatically "
+"index your world into tables, allowing you to query them using GraphQL."
+msgstr ""
+
+#: src/cairo/hello-dojo.md:231
+msgid "We've covered quite a bit! Here's a recap:"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:233
+msgid ""
+"- Built a Dojo world\n"
+"- Deployed the project to Katana\n"
+"- Ran the spawn system locally\n"
+"- Indexed the world with Torii"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:238
+msgid "### Next Steps"
+msgstr ""
+
+#: src/cairo/hello-dojo.md:240
+msgid ""
+"This overview provides a rapid end-to-end glimpse into Dojo. However, the "
+"potential of these worlds is vast! Designed to manage hundreds of systems "
+"and components, Dojo is equipped for expansive creativity. So, what will you "
+"craft next?"
+msgstr ""
+
+#: src/cairo/config.md:1
+msgid "# Config"
+msgstr ""
+
+#: src/cairo/config.md:3
+msgid ""
+"Dojo worlds are defined in their Scarb.toml files. This is just a "
+"[Scarb](https://docs.swmansion.com/scarb/) file which is an excellent Cairo "
+"package manager and project manager."
+msgstr ""
+
+#: src/cairo/config.md:5
+msgid "Full example of a Scarb.toml file:"
+msgstr ""
+
+#: src/cairo/config.md:7
+msgid ""
+"```toml\n"
+"[package]\n"
+"cairo-version = \"2.1.0-rc4\"\n"
+"name = \"dojo_examples\"\n"
+"version = \"0.1.0\"\n"
"\n"
-" use dojo::world::Context;\n"
-" use dojo_examples::components::Position;\n"
-" use dojo_examples::components::Health;\n"
+"[cairo]\n"
+"sierra-replace-ids = true\n"
"\n"
-" fn execute(ctx: Context) {\n"
-" set !(\n"
-" ctx.world, ctx.origin.into(), (Moves { remaining: 10 }, Position "
-"{ x: 0, y: 0 }, )\n"
-" );\n"
-" return ();\n"
-" }\n"
+"[dependencies]\n"
+"dojo = { git = \"https://github.com/dojoengine/dojo\" }\n"
+"\n"
+"[[target.dojo]]\n"
+"\n"
+"[tool.dojo]\n"
+"initializer_class_hash = \"0xbeef\"\n"
+"\n"
+"[tool.dojo.env]\n"
+"rpc_url = \"http://localhost:5050/\"\n"
+"\n"
+"# account address of world deployer\n"
+"account_address = "
+"\"0x33c627a3e5213790e246a917770ce23d7e562baa5b4d2917c23b1be6d91961c\"\n"
+"\n"
+"# private key of world deployer\n"
+"private_key = "
+"\"0x333803103001800039980190300d206608b0070db0012135bd1fb5f6282170b\"\n"
+"\n"
+"# world contract address\n"
+"world_address = "
+"\"0x789c94ef39aeebc7f8c4c4633030faefb8bee454e358ae53d06ced36136d7d6\"\n"
+"```"
+msgstr ""
+
+#: src/cairo/world.md:1
+msgid "## World Contract"
+msgstr ""
+
+#: src/cairo/world.md:3
+msgid ""
+"The world contract functions as a central system kernel, serving as the "
+"foundation for initiating and resolving all interactions. Within this "
+"kernel, contracts are deployed, registered, and executed, streamlining the "
+"process for downstream systems by enabling clients to engage with a single "
+"contract rather than potentially hundreds."
+msgstr ""
+
+#: src/cairo/world.md:5
+msgid ""
+"Dojo core abstracts this contract away from the developer as a developer you "
+"do not write it and it is not meant to be altered when building a world. "
+"However, it's important to understand how it works and how it interacts with "
+"the rest of the system."
+msgstr ""
+
+#: src/cairo/world.md:8
+msgid ""
+"> **To think about:** Consider Autonomous Worlds as sovereign blockchains "
+"residing within another blockchain - a nested blockchain, so to speak. Just "
+"as you can deploy contracts onto Ethereum to enhance its functionality, you "
+"can similarly introduce systems into the World contract to enrich its "
+"features. While anyone can contribute to the World, akin to Ethereum, "
+"authorization is required to interact with component state. There is a "
+"dedicated topic to Authorisation."
+msgstr ""
+
+#: src/cairo/world.md:11
+msgid "### Context"
+msgstr ""
+
+#: src/cairo/world.md:13
+msgid ""
+"You will notice every System accepts a `Context` struct as the first "
+"parameter. This is a special struct that contains information about the "
+"world and the caller."
+msgstr ""
+
+#: src/cairo/world.md:15
+msgid ""
+"```rust,ignore\n"
+"#[derive(Copy, Drop, Serde)]\n"
+"struct Context {\n"
+" world: IWorldDispatcher, // Dispatcher to the world contract\n"
+" origin: ContractAddress, // Address of the origin\n"
+" system: felt252, // Name of the calling system\n"
+" system_class_hash: ClassHash, // Class hash of the calling system\n"
"}\n"
"```"
msgstr ""
-#: src/framework/cairo/entities.md:44
-msgid "Finally, lets move the character with the `MoveSystem`."
+#: src/cairo/world.md:25
+msgid "### The `uuid()` command"
msgstr ""
-#: src/framework/cairo/entities.md:46
+#: src/cairo/world.md:27
+msgid ""
+"It is often useful to generate unique IDs for entities. The `uuid()` fn can "
+"be used to generate a unique ID."
+msgstr ""
+
+#: src/cairo/world.md:29
+#: src/cairo/commands.md:20
+#: src/cairo/commands.md:34
+#: src/cairo/commands.md:56
+msgid "Use it like this:"
+msgstr ""
+
+#: src/cairo/world.md:31
msgid ""
"```rust,ignore\n"
-"#[system]\n"
-"mod Move {\n"
-" use array::ArrayTrait;\n"
-" use traits::Into;\n"
+"let game_id = ctx.world.uuid();\n"
+"```"
+msgstr ""
+
+#: src/cairo/world.md:36
+msgid "### Full World API"
+msgstr ""
+
+#: src/cairo/world.md:38
+msgid ""
+"The world exposes an interface which can be interacted with by any client."
+msgstr ""
+
+#: src/cairo/world.md:40
+msgid ""
+"```rust,ignore\n"
+"// World interface\n"
+"#[starknet::interface]\n"
+"trait IWorld {\n"
+" fn component(self: @T, name: felt252) -> ClassHash;\n"
+" fn register_component(ref self: T, class_hash: ClassHash);\n"
+" fn system(self: @T, name: felt252) -> ClassHash;\n"
+" fn register_system(ref self: T, class_hash: ClassHash);\n"
+" fn uuid(ref self: T) -> usize;\n"
+" fn emit(self: @T, keys: Array, values: Span);\n"
+" fn execute(ref self: T, system: felt252, calldata: Array) -> "
+"Span;\n"
+" fn entity(\n"
+" self: @T, component: felt252, keys: Span, offset: u8, "
+"length: usize\n"
+" ) -> Span;\n"
+" fn set_entity(\n"
+" ref self: T, component: felt252, keys: Span, offset: u8, "
+"value: Span\n"
+" );\n"
+" fn entities(\n"
+" self: @T, component: felt252, index: felt252, length: usize\n"
+" ) -> (Span, Span>);\n"
+" fn set_executor(ref self: T, contract_address: ContractAddress);\n"
+" fn executor(self: @T) -> ContractAddress;\n"
+" fn delete_entity(ref self: T, component: felt252, keys: Span);\n"
+" fn origin(self: @T) -> ContractAddress;\n"
"\n"
-" use dojo::world::Context;\n"
-" use dojo_examples::components::Position;\n"
-" use dojo_examples::components::Moves;\n"
+" fn is_owner(self: @T, account: ContractAddress, target: felt252) -> "
+"bool;\n"
+" fn grant_owner(ref self: T, account: ContractAddress, target: felt252);\n"
+" fn revoke_owner(ref self: T, account: ContractAddress, target: "
+"felt252);\n"
"\n"
-" #[derive(Serde, Drop)]\n"
-" enum Direction {\n"
-" Left: (),\n"
-" Right: (),\n"
-" Up: (),\n"
-" Down: (),\n"
-" }\n"
+" fn is_writer(self: @T, component: felt252, system: felt252) -> bool;\n"
+" fn grant_writer(ref self: T, component: felt252, system: felt252);\n"
+" fn revoke_writer(ref self: T, component: felt252, system: felt252);\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/components.md:1
+msgid "## Components"
+msgstr ""
+
+#: src/cairo/components.md:3
+msgid "> Components = Data"
+msgstr ""
+
+#: src/cairo/components.md:5
+msgid ""
+"Components serve as the foundation for defining the world's structure, "
+"encapsulating state for systems to mutate. "
+msgstr ""
+
+#: src/cairo/components.md:7
+msgid ""
+"When designing a world's components, it is crucial to carefully consider the "
+"abstractions you create, always keeping composability in mind."
+msgstr ""
+
+#: src/cairo/components.md:10
+msgid "### Components are Structs"
+msgstr ""
+
+#: src/cairo/components.md:12
+msgid ""
+"Components are defined as structs in Cairo. They can contain any number of "
+"fields, however it is best practice in ECS to have small isolated "
+"components. This promotes modularity and composability, allowing you to "
+"reuse components across multiple entity types."
+msgstr ""
+
+#: src/cairo/components.md:14
+msgid ""
+"```rust,ignore\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Moves {\n"
+" #[key]\n"
+" player: ContractAddress,\n"
+" remaining: u8,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/components.md:23
+msgid "#### The #[key] attribute"
+msgstr ""
+
+#: src/cairo/components.md:25
+msgid ""
+"The `#[key]` attribute indicates to Dojo that this component is indexed by "
+"the `player` field. You need to define a key for each component, as this is "
+"how you query the component. However, you can create composite keys by "
+"defining multiple fields as keys. "
+msgstr ""
+
+#: src/cairo/components.md:27
+msgid ""
+"```rust,ignore\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Resource {\n"
+" #[key]\n"
+" player: ContractAddress,\n"
+" #[key]\n"
+" location: ContractAddress,\n"
+" balance: u8,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/components.md:38
+msgid ""
+"In this case you then would set the component with both the player and "
+"location fields:"
+msgstr ""
+
+#: src/cairo/components.md:40
+msgid ""
+"```rust,ignore\n"
+"set!(\n"
+" ctx.world,\n"
+" (\n"
+" Resource {\n"
+" player: ctx.origin,\n"
+" location: 12,\n"
+" balance: 10\n"
+" },\n"
+" )\n"
+");\n"
+"```"
+msgstr ""
+
+#: src/cairo/components.md:53
+msgid "#### Implementing Traits"
+msgstr ""
+
+#: src/cairo/components.md:55
+msgid ""
+"Components can implement traits. This is useful for defining common "
+"functionality across components. For example, you may want to define a "
+"`Position` component that implements a `PositionTrait` trait. This trait "
+"could define functions such as `is_zero` and `is_equal` which could be used "
+"when accessing the component."
+msgstr ""
+
+#: src/cairo/components.md:57
+msgid ""
+"```rust,ignore\n"
+"trait PositionTrait {\n"
+" fn is_zero(self: Position) -> bool;\n"
+" fn is_equal(self: Position, b: Position) -> bool;\n"
+"}\n"
"\n"
-" impl DirectionIntoFelt252 of Into {\n"
-" fn into(self: Direction) -> felt252 {\n"
-" match self {\n"
-" Direction::Left(()) => 0,\n"
-" Direction::Right(()) => 1,\n"
-" Direction::Up(()) => 2,\n"
-" Direction::Down(()) => 3,\n"
-" }\n"
+"impl PositionImpl of PositionTrait {\n"
+" fn is_zero(self: Position) -> bool {\n"
+" if self.x - self.y == 0 {\n"
+" return true;\n"
" }\n"
+" false\n"
" }\n"
"\n"
-" fn execute(ctx: Context, direction: Direction) {\n"
-" let (position, moves) = get !(ctx.world, ctx.origin.into(), "
-"(Position, Moves));\n"
-" let next = next_position(position, direction);\n"
-" set !(\n"
-" ctx.world,\n"
-" ctx.origin.into(),\n"
-" (Moves { remaining: moves.remaining - 1 }, Position { x: next.x, "
-"y: next.y }, )\n"
-" );\n"
-" return ();\n"
-" }\n"
-"\n"
-" fn next_position(position: Position, direction: Direction) -> Position "
-"{\n"
-" match direction {\n"
-" Direction::Left(()) => {\n"
-" Position { x: position.x - 1, y: position.y }\n"
-" },\n"
-" Direction::Right(()) => {\n"
-" Position { x: position.x + 1, y: position.y }\n"
-" },\n"
-" Direction::Up(()) => {\n"
-" Position { x: position.x, y: position.y - 1 }\n"
-" },\n"
-" Direction::Down(()) => {\n"
-" Position { x: position.x, y: position.y + 1 }\n"
-" },\n"
-" }\n"
+" fn is_equal(self: Position, b: Position) -> bool {\n"
+" self.x == b.x && self.y == b.y\n"
" }\n"
"}\n"
"```"
msgstr ""
-#: src/framework/cairo/commands.md:1
-msgid "## Commands"
+#: src/cairo/components.md:77
+msgid "#### Custom Setting Components"
msgstr ""
-#: src/framework/cairo/commands.md:3
+#: src/cairo/components.md:79
msgid ""
-"Commands in Dojo are generalized functions that are expanded at compile time "
-"to facilitate system execution. They provide a convenient way for systems to "
-"interact with the world state by abstracting common operations, such as "
-"retrieving or updating components, and generating unique IDs. By leveraging "
-"these commands, developers can streamline their system implementations and "
-"improve code readability."
+"Suppose we need a place to keep a global value with the flexibility to "
+"modify it in the future. Take, for instance, a global combat_cool_down "
+"parameter that defines the duration required for an entity to be primed for "
+"another attack. To achieve this, we can craft a component dedicated to "
+"storing this value, while also allowing for its modification via a "
+"decentralized governance model."
msgstr ""
-#: src/framework/cairo/commands.md:5
+#: src/cairo/components.md:81
msgid ""
-"Understanding commands is key to understanding Dojo. You will leverage them "
-"heavily within the systems you design."
+"To establish these components, you'd follow the usual creation method. "
+"However, when initializing them, employ a constant identifier, such as "
+"GAME_SETTINGS_ID."
msgstr ""
-#: src/framework/cairo/commands.md:7
+#: src/cairo/components.md:83
msgid ""
"```rust,ignore\n"
-"// Update an existing entity by setting its components with the provided "
-"values.\n"
-"// This function takes a storage key representing the entity and a generic "
-"type T for the components to be updated.\n"
-"set!(world: IWorldDispatcher, storage_key: StorageKey, components: T);\n"
-"\n"
-"// Retrieve the components of a specific type T for an entity identified by "
-"the storage key.\n"
-"// This function returns the components as an instance of the generic type "
-"T.\n"
-"get!(world: IWorldDispatcher, storage_key: StorageKey, components: T) -> T;\n"
+"const GAME_SETTINGS_ID: u32 = 9999999999999;\n"
"\n"
-"// Retrieve all entity IDs that have components matching the provided type "
-"T.\n"
-"// This function returns an array of entity IDs (felt252) containing the "
-"specified components.\n"
-"find!(world: IWorldDispatcher, key: StorageKey, components: T);\n"
-"```"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct GameSettings {\n"
+" #[key]\n"
+" game_settings_id: u32,\n"
+" combat_cool_down: u32,\n"
+"}\n"
+"``` "
msgstr ""
-#: src/framework/cairo/storage.md:1
-msgid "# Storage"
+#: src/cairo/components.md:94
+msgid "#### Types"
msgstr ""
-#: src/framework/cairo/storage.md:3
+#: src/cairo/components.md:96
+msgid "Support Component types:"
+msgstr ""
+
+#: src/cairo/components.md:98
msgid ""
-"In a Dojo Autonomous World, the `World` contract serves as the central store "
-"that manages and maintains the overall state. No state is maintained at the "
-"component level, this allows a clean split in logic and state. Most "
-"developers will not need to touch the storage methods, every part of the "
-"world can just be maintained via the [commands](./commands.md)."
+"- `u8`\n"
+"- `u16`\n"
+"- `u32`\n"
+"- `u64`\n"
+"- `u128`\n"
+"- `u256`\n"
+"- `ContractAddress`"
+msgstr ""
+
+#: src/cairo/components.md:106
+msgid "It is currently not possible to use Arrays."
msgstr ""
-#: src/framework/cairo/storage.md:6
-msgid "## Detailed overview of Storage"
+#: src/cairo/components.md:109
+msgid "### In practice with modularity in mind"
msgstr ""
-#: src/framework/cairo/storage.md:8
+#: src/cairo/components.md:111
msgid ""
-"State is maintained via a generated partition when you create a component. "
-"The compiler calculates the size of the component along with the key you "
-"have used and creates a partition within the world. Think of the partition "
-"as a table which can be read from and written to."
+"Consider a tangible analogy: Humans and Goblins. While they possess "
+"intrinsic differences, they share common traits, such as having a position "
+"and health. However, humans possess an additional component. Furthermore, we "
+"introduce a Counter component, a distinct feature that tallies the numbers "
+"of humans and goblins."
msgstr ""
-#: src/framework/sozo/overview.md:1
-msgid "# Sozo"
+#: src/cairo/components.md:113
+msgid ""
+"```rust,ignore\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Potions {\n"
+" #[key]\n"
+" entity_id: u32,\n"
+" quantity: u8,\n"
+"}\n"
+"\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Health {\n"
+" #[key]\n"
+" entity_id: u32,\n"
+" health: u8,\n"
+"}\n"
+"\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Position {\n"
+" #[key]\n"
+" entity_id: u32,\n"
+" x: u32,\n"
+" y: u32\n"
+"}\n"
+"\n"
+"// Special counter component\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Counter {\n"
+" #[key]\n"
+" counter: u32,\n"
+" goblin_count: u32,\n"
+" human_count: u32,\n"
+"}\n"
+"```"
msgstr ""
-#: src/framework/sozo/overview.md:3
+#: src/cairo/components.md:146
msgid ""
-"`sozo` is a powerful migration planning tool designed to streamline the "
-"updating and deployment of AWs. It provides a robust binary command-line "
-"interface (CLI) that simplifies World management tasks, enabling you to "
-"focus on the creative aspects of World-building. Future versions will "
-"provide a GUI."
+"So the Human will have a `Potions`, `Health` and `Position` component, and "
+"the Goblin will have a `Health` and `Position` component. By doing we save "
+"having to create Health and Position components for each entity type."
msgstr ""
-#: src/framework/sozo/overview.md:5
-msgid "## Features"
+#: src/cairo/components.md:148
+msgid "So then a system would look like this:"
msgstr ""
-#: src/framework/sozo/overview.md:7
+#: src/cairo/components.md:150
msgid ""
-"- **Binary CLI**: Sozo provides an intuitive binary CLI, ensuring easy "
-"management of your Worlds, whether you're updating existing ones or "
-"deploying new ones."
+"```rust,ignore\n"
+"#[system]\n"
+"mod spawnHuman {\n"
+" use array::ArrayTrait;\n"
+" use box::BoxTrait;\n"
+" use traits::Into;\n"
+" use dojo::world::Context;\n"
+"\n"
+" use dojo_examples::components::Position;\n"
+" use dojo_examples::components::Health;\n"
+" use dojo_examples::components::Potions;\n"
+" use dojo_examples::components::Counter;\n"
+"\n"
+" // we can set the counter value as a const, then query it easily! This "
+"pattern is useful for settins.\n"
+" const COUNTER_ID: u32 = 9999999999999;\n"
+"\n"
+" fn execute(ctx: Context, entity_id: u32) {\n"
+"\n"
+" let counter = get!(ctx.world, COUNTER_ID, (Counter));\n"
+"\n"
+" let human_count = counter.human_count + 1;\n"
+" let goblin_count = counter.goblin_count + 1;\n"
+"\n"
+" // spawn a human\n"
+" set!(\n"
+" ctx.world,\n"
+" (\n"
+" Health {\n"
+" entity_id: human_count, health: 100\n"
+" }, \n"
+" Position {\n"
+" entity_id: human_count, x: position.x + 10, y: "
+"position.y + 10,\n"
+" }, \n"
+" Potions {\n"
+" entity_id: human_count, quantity: 10\n"
+" \n"
+" },\n"
+" )\n"
+" );\n"
+"\n"
+" // spawn a goblin\n"
+" set!(\n"
+" ctx.world,\n"
+" (\n"
+" Health {\n"
+" entity_id: goblin_count, health: 100\n"
+" }, \n"
+" Position {\n"
+" entity_id: goblin_count, x: position.x + 10, y: "
+"position.y + 10,\n"
+" },\n"
+" )\n"
+" );\n"
+"\n"
+" // increment the counter\n"
+" set!(\n"
+" ctx.world,\n"
+" (\n"
+" Counter {\n"
+" counter: COUNTER_ID, human_count: human_count, "
+"goblin_count: goblin_count\n"
+" },\n"
+" )\n"
+" );\n"
+" \n"
+" return ();\n"
+" }\n"
+"}\n"
+"```"
msgstr ""
-#: src/framework/sozo/overview.md:11
+#: src/cairo/components.md:218
msgid ""
-"The `sozo` binary can be installed via "
-"[`dojoup`](../../getting-started/installation.md#using-dojoup), our "
-"dedicated installation package manager."
+"> A complete example can be found in the [Dojo "
+"Starter](https://github.com/dojoengine/dojo-starter)"
msgstr ""
-#: src/framework/sozo/overview.md:13
-msgid "### Installing from Source"
+#: src/cairo/systems.md:1
+msgid "## Systems"
msgstr ""
-#: src/framework/sozo/overview.md:15
-msgid "If you prefer to install from the source code:"
+#: src/cairo/systems.md:3
+msgid "> Systems = Logic"
+msgstr ""
+
+#: src/cairo/systems.md:5
+msgid ""
+"Systems underpin the logic of your world. While systems are inherently "
+"stateless, their primary role is to modify the state of components. Every "
+"system features an 'execute' function that's called upon during interactions "
+"within the world."
+msgstr ""
+
+#: src/cairo/systems.md:7
+msgid ""
+"Let's look at the simplest possible system which mutates the state of the "
+"`Moves` component."
+msgstr ""
+
+#: src/cairo/systems.md:9
+msgid ""
+"```rust,ignore\n"
+"#[system]\n"
+"mod Spawn {\n"
+" use array::ArrayTrait;\n"
+" use traits::Into;\n"
+"\n"
+" use dojo::world::Context;\n"
+" use dojo_examples::components::Position;\n"
+" use dojo_examples::components::Moves;\n"
+"\n"
+" fn execute(ctx: Context) {\n"
+" set !(\n"
+" ctx.world, ctx.origin, (\n"
+" Moves { player: ctx.origin, remaining: 10 }\n"
+" )\n"
+" );\n"
+" return ();\n"
+" }\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/systems.md:31
+msgid "### The Execute function"
+msgstr ""
+
+#: src/cairo/systems.md:33
+msgid ""
+"The `execute` function is mandatory in a system and runs when called, taking "
+"`Context` as its first parameter. See more in [Context](./world.md)."
+msgstr ""
+
+#: src/cairo/systems.md:35
+msgid "### Other functions in a System"
+msgstr ""
+
+#: src/cairo/systems.md:37
+msgid ""
+"You are free to add other functions to your system, but they will not be "
+"callable from the world. This is useful for breaking up your logic into "
+"smaller chunks."
+msgstr ""
+
+#: src/cairo/systems.md:39
+msgid "### Using View Functions"
+msgstr ""
+
+#: src/cairo/systems.md:41
+msgid ""
+"There are times when we need to compute the value of a component "
+"dynamically, rather than fetching its static state. For instance, in the "
+"context of a VRGDA, if you want to ascertain the current price, merely "
+"querying the component state won't suffice. Instead, you'd need to compute "
+"the price based on certain parameters and the current state."
+msgstr ""
+
+#: src/cairo/systems.md:43
+msgid "This is where view functions come into play."
+msgstr ""
+
+#: src/cairo/systems.md:45
+msgid "**What are View Functions?**"
+msgstr ""
+
+#: src/cairo/systems.md:47
+msgid ""
+"View functions are a way to derive or compute values from the existing state "
+"of a component. They are invoked by the world and receive the current state "
+"of the component as an argument. Subsequently, these functions return a "
+"computed value based on this state."
+msgstr ""
+
+#: src/cairo/systems.md:49
+msgid "**Example from VRGDA**:"
+msgstr ""
+
+#: src/cairo/systems.md:51
+msgid ""
+"The below snippet, taken from the VRGDA example available on [this "
+"link](https://github.com/dojoengine/dojo-examples), illustrates how to "
+"implement a view function:"
+msgstr ""
+
+#: src/cairo/systems.md:53
+msgid ""
+"```rust,ignore\n"
+"#[system]\n"
+"mod view_price {\n"
+" //... other code ...\n"
+"\n"
+" fn execute(ctx: Context, game_id: u64, item_id: u128, amount: u128) -> "
+"Fixed {\n"
+" let mut auction = get!(ctx.world, (game_id, item_id), Auction);\n"
+"\n"
+" // Convert auction to VRGDA\n"
+" let VRGDA = auction.to_LogisticVRGDA();\n"
+"\n"
+" // Calculate time since the auction began\n"
+" let time_since_start: u128 = get_block_timestamp().into() - "
+"auction.start_time.into();\n"
+"\n"
+" // Compute the current price\n"
+" VRGDA.get_vrgda_price(\n"
+" FixedTrait::new(time_since_start, false), // Time elapsed since "
+"auction start\n"
+" FixedTrait::new(auction.sold, false) // Quantity sold\n"
+" )\n"
+" }\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/systems.md:76
+msgid ""
+"In this example, the function computes and returns the current price of the "
+"VRGDA based on the ongoing state of the auction."
+msgstr ""
+
+#: src/cairo/systems.md:78
+msgid "**How to Invoke View Functions?**"
+msgstr ""
+
+#: src/cairo/systems.md:80
+msgid ""
+"- **Using Dojo Core**: If you are working within the [Dojo "
+"Core](../client/npm/core.md), utilize the `call` function. \n"
+" \n"
+"- **For Rust Users**: The [Starkli](https://book.starkli.rs/) library "
+"provides a handy method to invoke view functions in Rust."
+msgstr ""
+
+#: src/cairo/systems.md:84
+msgid ""
+"I hope this revised version enhances the clarity and flow of the information "
+"you want to convey!"
+msgstr ""
+
+#: src/cairo/systems.md:86
+msgid "### System Authentication"
+msgstr ""
+
+#: src/cairo/systems.md:88
+msgid ""
+"Systems must be given permission to write to components. By default they "
+"have no permissions. With `sozo` we can however give them permissions to "
+"write to components."
+msgstr ""
+
+#: src/cairo/systems.md:90
+msgid ""
+"```console\n"
+"sozo auth writer Moves Spawn \n"
+"```"
+msgstr ""
+
+#: src/cairo/systems.md:94
+msgid ""
+"Here we have authorised the `Spawn` system to write to the `Moves` "
+"component. "
+msgstr ""
+
+#: src/cairo/systems.md:96
+msgid "Read more in the [sozo](../toolchain/sozo/overview.md) docs."
+msgstr ""
+
+#: src/cairo/entities.md:1
+msgid "## Entities"
+msgstr ""
+
+#: src/cairo/entities.md:3
+msgid ""
+"> Entities are the primary key value within the world, to which components "
+"can be attached."
+msgstr ""
+
+#: src/cairo/entities.md:5
+msgid ""
+"Different ECS systems handle entities in various ways. In Dojo, entities are "
+"treated as a primary key value within the world, to which components can be "
+"attached. To illustrate this concept, consider a simple example of a "
+"character in a game that has a `Moves` and a `Position` component."
+msgstr ""
+
+#: src/cairo/entities.md:7
+msgid ""
+"When defining the components for this entity, it is important to note that "
+"we do not reference the entity directly. Instead, we simply provide two "
+"structs that the entity will contain. "
+msgstr ""
+
+#: src/cairo/entities.md:9
+msgid ""
+"```rust,ignore\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Moves {\n"
+" #[key]\n"
+" player: ContractAddress,\n"
+" remaining: u8,\n"
+"}\n"
+"\n"
+"#[derive(Component, Copy, Drop, Serde, SerdeLen)]\n"
+"struct Health {\n"
+" #[key]\n"
+" player: ContractAddress,\n"
+" x: u32,\n"
+" y: u32\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/entities.md:26
+msgid ""
+"Now, let's create a `Spawn` for the character. It is important to note that "
+"we have not explicitly defined an Entity anywhere. Instead, we use the "
+"`ctx.origin` to reference the current entity."
+msgstr ""
+
+#: src/cairo/entities.md:28
+msgid ""
+"In this example we are using the `ctx.origin` to reference the current "
+"entity."
+msgstr ""
+
+#: src/cairo/entities.md:30
+msgid ""
+"```rust,ignore\n"
+"#[system]\n"
+"mod spawn {\n"
+" use array::ArrayTrait;\n"
+" use box::BoxTrait;\n"
+" use traits::Into;\n"
+" use dojo::world::Context;\n"
+"\n"
+" use dojo_examples::components::Position;\n"
+" use dojo_examples::components::Moves;\n"
+"\n"
+" fn execute(ctx: Context) {\n"
+" let position = get!(ctx.world, ctx.origin, (Position));\n"
+" set!(\n"
+" ctx.world,\n"
+" (\n"
+" Moves {\n"
+" player: ctx.origin, remaining: 10\n"
+" }, Position {\n"
+" player: ctx.origin, x: position.x + 10, y: position.y + "
+"10\n"
+" },\n"
+" )\n"
+" );\n"
+" return ();\n"
+" }\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/entities.md:58
+msgid ""
+"> ECS Theory: Plenty has been written on ECS systems, to go deeper read "
+"[ECS-FAQ](https://github.com/SanderMertens/ecs-faq)"
+msgstr ""
+
+#: src/cairo/authorization.md:1
+msgid "## Authorization"
+msgstr ""
+
+#: src/cairo/authorization.md:3
+msgid ""
+"> Authorization is crucial to a world, just like how authorization is "
+"crucial to any smart contract."
+msgstr ""
+
+#: src/cairo/authorization.md:5
+msgid ""
+"As discussed in the [World](./world.md) chapter, Autonomous Worlds (AWs) "
+"function as sovereign chains nested within a public blockchain. These Worlds "
+"are also open to the public. This structure allows anyone to enhance a World "
+"by deploying components or systems. However, this openness also introduces "
+"security considerations. Similar to Ethereum, interacting with a component's "
+"state within a System requires the appropriate authorization from the "
+"component owner."
+msgstr ""
+
+#: src/cairo/authorization.md:7
+msgid "### Auth Architecture"
+msgstr ""
+
+#: src/cairo/authorization.md:9
+msgid ""
+"Every time a `set!` is called in a `System`, the world checks if the "
+"`System` has authorization to update the component state. Only when the "
+"`System` possesses the necessary authorization, the `set!` is executed. The "
+"following diagram illustrates the authorization architecture."
+msgstr ""
+
+#: src/cairo/authorization.md:11
+msgid "Authorization Architecture"
+msgstr ""
+
+#: src/cairo/authorization.md:13
+msgid "### Providing Authorization"
+msgstr ""
+
+#: src/cairo/authorization.md:15
+msgid ""
+"> The deployer of the Component is its initial owner. A Component owner is "
+"able to grant the `owner` and `writer` roles. Only owners can grant a System "
+"the `writer` role which allows it to update the Component."
+msgstr ""
+
+#: src/cairo/authorization.md:17
+msgid "`sozo` offers a convenient tool to authorize systems."
+msgstr ""
+
+#: src/cairo/authorization.md:19
+msgid ""
+"```shell\n"
+"sozo auth writer Moves spawn\n"
+"```"
+msgstr ""
+
+#: src/cairo/authorization.md:23
+msgid ""
+"This command will generate a `writer` authorization for the `spawn` system "
+"to update the `Moves` component."
+msgstr ""
+
+#: src/cairo/commands.md:1
+msgid "## Commands"
+msgstr ""
+
+#: src/cairo/commands.md:3
+msgid ""
+"Understanding commands is key to understanding Dojo. You will leverage them "
+"heavily within the systems you design."
+msgstr ""
+
+#: src/cairo/commands.md:5
+msgid ""
+"Commands in Dojo are generalized functions that are expanded at compile time "
+"to facilitate system execution. They provide a convenient way for systems to "
+"interact with the world state by abstracting common operations, such as "
+"retrieving or updating components, and generating unique IDs. By leveraging "
+"these commands, developers can streamline their system implementations and "
+"improve code readability."
+msgstr ""
+
+#: src/cairo/commands.md:8
+msgid "### Using commands"
+msgstr ""
+
+#: src/cairo/commands.md:10
+msgid ""
+"Commands are used within systems to interact with the world state. They are "
+"called using the following syntax:"
+msgstr ""
+
+#: src/cairo/commands.md:12
+#: src/cairo/commands.md:22
+msgid ""
+"```rust,ignore\n"
+"let (position, moves) = get!(ctx.world, ctx.origin, (Position, Moves));\n"
+"```"
+msgstr ""
+
+#: src/cairo/commands.md:16
+msgid "### The `get!` command"
+msgstr ""
+
+#: src/cairo/commands.md:18
+msgid "The `get!` command is used to retrieve components from the world state."
+msgstr ""
+
+#: src/cairo/commands.md:26
+msgid ""
+"Here we are retrieving the `Position` and `Moves` components from the world "
+"state. We are also using the `ctx.origin` to retrieve the components for the "
+"current entity."
+msgstr ""
+
+#: src/cairo/commands.md:28
+msgid ""
+"You can then use `position` and `moves` as you would as any other Cairo "
+"struct."
+msgstr ""
+
+#: src/cairo/commands.md:30
+msgid "### The `set!` command"
+msgstr ""
+
+#: src/cairo/commands.md:32
+msgid "The `set!` command is used to update components state."
+msgstr ""
+
+#: src/cairo/commands.md:36
+msgid ""
+"```rust,ignore\n"
+"set !(ctx.world, (\n"
+" Moves {\n"
+" player: ctx.origin, remaining: 10\n"
+" }, \n"
+" Position {\n"
+" player: ctx.origin, x: position.x + 10, y: position.y + 10\n"
+" },\n"
+"));\n"
+"\n"
+"// If the structs are already defined it can also be written as:\n"
+"set!(ctx.world, (moves, position));\n"
+"```"
+msgstr ""
+
+#: src/cairo/commands.md:50
+msgid ""
+"Here we are updating the `Moves` and `Position` components in the world "
+"state using the `ctx.origin` as the entity id."
+msgstr ""
+
+#: src/cairo/commands.md:52
+msgid "### The `emit!` command"
+msgstr ""
+
+#: src/cairo/commands.md:54
+msgid "The `emit!` command is used to emit custom events."
+msgstr ""
+
+#: src/cairo/commands.md:58
+#: src/cairo/events.md:78
+msgid ""
+"```rust,ignore\n"
+"emit !(ctx.world, Moved { address: ctx.origin, direction });\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:1
+msgid "## Events"
+msgstr ""
+
+#: src/cairo/events.md:3
+msgid ""
+"Events play a pivotal role in decoding the dynamics of a Dojo world. Every "
+"time there's an update to a `Component`, the `World` contract emits these "
+"events. What's even more exciting is that you can craft your own custom "
+"events to fit specific needs! Moreover, thanks to "
+"[Torii](../toolchain/torii/overview.md), all these events are seamlessly "
+"indexed, ensuring easy and efficient querying."
+msgstr ""
+
+#: src/cairo/events.md:6
+msgid "### Component Events"
+msgstr ""
+
+#: src/cairo/events.md:8
+msgid "Consider this example of a `Moves` component:"
+msgstr ""
+
+#: src/cairo/events.md:10
+msgid ""
+"```rust,ignore\n"
+"#[component]\n"
+"struct Moves {\n"
+" #[key]\n"
+" player: Address,\n"
+" remaining: u32,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:19
+msgid ""
+"When this component is updated, the `World` contract will emit an event with "
+"the following structure:"
+msgstr ""
+
+#: src/cairo/events.md:21
+msgid ""
+"```rust,ignore\n"
+"#[derive(Drop, starknet::Event)]\n"
+"struct StoreSetRecord {\n"
+" table: felt252, // Moves\n"
+" keys: Span, // [player]\n"
+" offset: u8, // 0\n"
+" value: Span, // [remaining]\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:31
+msgid ""
+"This will then be captured by [Torii](../toolchain/torii/overview.md) and "
+"indexed for querying. This will allow you to then reconstruct the state of "
+"your world."
+msgstr ""
+
+#: src/cairo/events.md:33
+msgid ""
+"Similarly, when a component is deleted, the `World` contract will emit an "
+"event with the following structure:"
+msgstr ""
+
+#: src/cairo/events.md:35
+msgid ""
+"```rust,ignore\n"
+"#[derive(Drop, starknet::Event)]\n"
+"struct StoreDelRecord {\n"
+" table: felt252,\n"
+" keys: Span,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:43
+msgid "### World Events"
+msgstr ""
+
+#: src/cairo/events.md:45
+msgid ""
+"The `World` contract also emits events when it's initialized and when new "
+"components and systems are registered. These events are emitted with the "
+"following structures:"
+msgstr ""
+
+#: src/cairo/events.md:47
+msgid ""
+"```rust,ignore\n"
+"#[derive(Drop, starknet::Event)]\n"
+"struct WorldSpawned {\n"
+" address: ContractAddress,\n"
+" caller: ContractAddress\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:55
+msgid ""
+"```rust,ignore\n"
+"#[derive(Drop, starknet::Event)]\n"
+"struct ComponentRegistered {\n"
+" name: felt252,\n"
+" class_hash: ClassHash\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:63
+msgid ""
+"```rust,ignore\n"
+"#[derive(Drop, starknet::Event)]\n"
+"struct SystemRegistered {\n"
+" name: felt252,\n"
+" class_hash: ClassHash\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:71
+msgid ""
+"These events are also captured by [Torii](../toolchain/torii/overview.md) "
+"and indexed for querying."
+msgstr ""
+
+#: src/cairo/events.md:74
+msgid "### Custom Events"
+msgstr ""
+
+#: src/cairo/events.md:76
+msgid ""
+"Within your systems, emitting custom events can be highly beneficial. "
+"Fortunately, there's a handy `emit!` macro that lets you release events "
+"directly from your world. Use it like so:"
+msgstr ""
+
+#: src/cairo/events.md:82
+msgid ""
+"Include this in your system and it will emit an event with the following "
+"structure:"
+msgstr ""
+
+#: src/cairo/events.md:84
+msgid ""
+"```rust,ignore\n"
+"#[derive(Drop, starknet::Event)]\n"
+"struct Moved {\n"
+" address: felt252,\n"
+" direction: felt252,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:92
+msgid "Now a full example using a custom event: "
+msgstr ""
+
+#: src/cairo/events.md:94
+msgid ""
+"```rust,ignore\n"
+"fn execute(ctx: Context, direction: Direction) {\n"
+" let (mut position, mut moves) = get !(ctx.world, ctx.origin, (Position, "
+"Moves));\n"
+" moves.remaining -= 1;\n"
+"\n"
+" let next = next_position(position, direction);\n"
+" \n"
+" set !(ctx.world, (moves, next));\n"
+" emit !(ctx.world, Moved { address: ctx.origin, direction });\n"
+" return ();\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/events.md:107
+msgid ""
+"> Note: Read about the `get!` and `set!` macros in [Commands](./commands.md)."
+msgstr ""
+
+#: src/cairo/testing.md:1
+msgid "## Testing"
+msgstr ""
+
+#: src/cairo/testing.md:3
+msgid ""
+"Testing is a crucial part of any software development process. Dojo provides "
+"a testing framework that allows you to write tests for your smart contracts. "
+"Since Dojo uses a custom compiler, you need to use `sozo` to test your "
+"contracts."
+msgstr ""
+
+#: src/cairo/testing.md:5
+msgid "From your project directory, simply:"
+msgstr ""
+
+#: src/cairo/testing.md:7
+msgid ""
+"```shell\n"
+"sozo test\n"
+"```"
+msgstr ""
+
+#: src/cairo/testing.md:11
+msgid "This will search for all tests within your project and run them."
+msgstr ""
+
+#: src/cairo/testing.md:14
+msgid "### Writing Unit Tests"
+msgstr ""
+
+#: src/cairo/testing.md:16
+msgid ""
+"It is best practise to include unit tests in the same file as the "
+"Component/System you are writing."
+msgstr ""
+
+#: src/cairo/testing.md:18
+msgid ""
+"Lets show a `Component` test example from the "
+"[dojo-starter](https://github.com/dojoengine/dojo-starter):"
+msgstr ""
+
+#: src/cairo/testing.md:20
+msgid "`components.cairo`"
+msgstr ""
+
+#: src/cairo/testing.md:21
+msgid ""
+"```rust,ignore\n"
+"\n"
+"...rest of code\n"
+"\n"
+"#[cfg(test)]\n"
+"mod tests {\n"
+" use debug::PrintTrait;\n"
+" use super::{Position, PositionTrait};\n"
+"\n"
+" #[test]\n"
+" #[available_gas(100000)]\n"
+" fn test_position_is_zero() {\n"
+" let player = starknet::contract_address_const::<0x0>();\n"
+" assert(PositionTrait::is_zero(Position { player, x: 0, y: 0 }), 'not "
+"zero');\n"
+" }\n"
+"\n"
+" #[test]\n"
+" #[available_gas(100000)]\n"
+" fn test_position_is_equal() {\n"
+" let player = starknet::contract_address_const::<0x0>();\n"
+" let position = Position { player, x: 420, y: 0 };\n"
+" position.print();\n"
+" assert(PositionTrait::is_equal(position, Position { player, x: 420, "
+"y: 0 }), 'not equal');\n"
+" }\n"
+"}\n"
+"\n"
+"```"
+msgstr ""
+
+#: src/cairo/testing.md:49
+msgid ""
+"In this test we are testing the `is_zero` and `is_equal` functions of the "
+"`Position` component. It is good practise to test all functions of your "
+"components."
+msgstr ""
+
+#: src/cairo/testing.md:52
+msgid "### Writing Integration Tests"
+msgstr ""
+
+#: src/cairo/testing.md:54
+msgid ""
+"Integration tests are e2e tests that test the entire system. You can write "
+"integration tests for your world by creating a `tests` directory in your "
+"project root. Then create a file for each integration test you want to write."
+msgstr ""
+
+#: src/cairo/testing.md:56
+msgid ""
+"This is the example from the "
+"[dojo-starter](https://github.com/dojoengine/dojo-starter):"
+msgstr ""
+
+#: src/cairo/testing.md:58
+msgid "`systems.cairo`"
+msgstr ""
+
+#: src/cairo/testing.md:59
+msgid ""
+"```rust,ignore\n"
+"#[cfg(test)]\n"
+"mod tests {\n"
+" use core::traits::Into;\n"
+" use array::ArrayTrait;\n"
+"\n"
+" use dojo::world::IWorldDispatcherTrait;\n"
+"\n"
+" use dojo::test_utils::spawn_test_world;\n"
+"\n"
+" use dojo_examples::components::position;\n"
+" use dojo_examples::components::Position;\n"
+" use dojo_examples::components::moves;\n"
+" use dojo_examples::components::Moves;\n"
+" use dojo_examples::systems::spawn;\n"
+" use dojo_examples::systems::move;\n"
+"\n"
+" #[test]\n"
+" #[available_gas(30000000)]\n"
+" fn test_move() {\n"
+" let caller = starknet::contract_address_const::<0x0>();\n"
+"\n"
+" // components\n"
+" let mut components = array::ArrayTrait::new();\n"
+" components.append(position::TEST_CLASS_HASH);\n"
+" components.append(moves::TEST_CLASS_HASH);\n"
+"\n"
+" // systems\n"
+" let mut systems = array::ArrayTrait::new();\n"
+" systems.append(spawn::TEST_CLASS_HASH);\n"
+" systems.append(move::TEST_CLASS_HASH);\n"
+"\n"
+" // deploy executor, world and register components/systems\n"
+" let world = spawn_test_world(components, systems);\n"
+"\n"
+" let spawn_call_data = array::ArrayTrait::new();\n"
+" world.execute('spawn', spawn_call_data);\n"
+"\n"
+" let mut move_calldata = array::ArrayTrait::new();\n"
+" move_calldata.append(move::Direction::Right(()).into());\n"
+" world.execute('move', move_calldata);\n"
+" let mut keys = array::ArrayTrait::new();\n"
+" keys.append(caller.into());\n"
+"\n"
+" let moves = world.entity('Moves', keys.span(), 0, "
+"dojo::SerdeLen::::len());\n"
+" assert(*moves[0] == 9, 'moves is wrong');\n"
+" let new_position = world\n"
+" .entity('Position', keys.span(), 0, "
+"dojo::SerdeLen::::len());\n"
+" assert(*new_position[0] == 11, 'position x is wrong');\n"
+" assert(*new_position[1] == 10, 'position y is wrong');\n"
+" }\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/cairo/testing.md:113
+msgid "#### Useful Dojo Test Functions"
+msgstr ""
+
+#: src/cairo/testing.md:115
+msgid ""
+"`spawn_test_world(components, systems)` - This function will create a test "
+"world with the components and systems you pass in. It will also deploy the "
+"world and register the components and systems."
+msgstr ""
+
+#: src/cairo/modules.md:1
+msgid "## Dojo Modules"
+msgstr ""
+
+#: src/cairo/modules.md:3
+msgid ""
+"With standardization of Systems and Components we can create a module "
+"architecture for Dojo. This allows us to create reusable modules that can be "
+"used in any Dojo world."
+msgstr ""
+
+#: src/cairo/modules.md:5
+msgid "### Module Architecture"
+msgstr ""
+
+#: src/cairo/modules.md:7
+msgid ""
+"Think of modules as ERCs for Dojo. They are a standard way to create and "
+"share functionality. Modules are a collection of Systems and Components that "
+"can be imported into a Dojo world. Dojo is following the ERC patterns and "
+"has modules already defined for ERC20, ERC721, and ERC1155."
+msgstr ""
+
+#: src/cairo/modules/erc20.md:1
+msgid "## ERC20"
+msgstr ""
+
+#: src/cairo/modules/erc20.md:3
+msgid ""
+"Dojo's ERC20 module is a standard implementation of the ERC20 token "
+"standard, but it utilizes Dojo Systems and Components. This allows us to "
+"leverage the excellent properties of the ERC20 standard and use it natively "
+"within the Dojo environment."
+msgstr ""
+
+#: src/cairo/modules/erc20.md:5
+msgid "### Integration into Your World"
+msgstr ""
+
+#: src/cairo/modules/erc20.md:7
+msgid ""
+"To integrate the ERC20 module into your world, you must first deploy the "
+"ERC20 Dojo contract. Subsequently, install the systems and components into "
+"your world."
+msgstr ""
+
+#: src/client/overview.md:1
+msgid "# Overview"
+msgstr ""
+
+#: src/client/overview.md:3
+msgid ""
+"Dojo is BYO client, meaning that you can use any client you want to connect "
+"to the Dojo network."
+msgstr ""
+
+#: src/client/overview.md:5
+msgid "Reference clients are available for the following platforms:"
+msgstr ""
+
+#: src/client/overview.md:7
+msgid "- [npm](./npm.md)"
+msgstr ""
+
+#: src/client/npm.md:1
+msgid "# Javascript Libraries"
+msgstr ""
+
+#: src/client/npm.md:3
+msgid ""
+"> Javascript is a great way to get started with Dojo. It's easy to use, and "
+"you can get started in minutes."
+msgstr ""
+
+#: src/client/npm.md:5
+msgid "### Examples using these:"
+msgstr ""
+
+#: src/client/npm.md:7
+msgid ""
+"- "
+"[Dojo-create-react-app](https://github.com/dojoengine/dojo-starter-react-app)\n"
+"- [Dojo-starter-phaser](https://github.com/dojoengine/dojo-starter-phaser)"
+msgstr ""
+
+#: src/client/npm.md:10
+msgid "### @dojoengine/core"
+msgstr ""
+
+#: src/client/npm.md:12
+msgid ""
+"This is the lowest level library, and is used by all other downstream "
+"libraries. It contains the core functionality of Dojo and exposes the "
+"contract interfaces. Use it if you want to build your own library on top of "
+"Dojo."
+msgstr ""
+
+#: src/client/npm.md:14
+msgid "[Documentation](./npm/core.md)"
+msgstr ""
+
+#: src/client/npm.md:16
+#: src/client/npm/core.md:12
+msgid ""
+"```console\n"
+"yarn add @dojoengine/core\n"
+"```"
+msgstr ""
+
+#: src/client/npm.md:20
+msgid "### @dojoengine/react"
+msgstr ""
+
+#: src/client/npm.md:22
+msgid ""
+"This is a direct fork of [Mud "
+"React](https://github.com/latticexyz/mud/tree/main/packages)"
+msgstr ""
+
+#: src/client/npm.md:24
+msgid ""
+"This library contains a set of React components that can be used when "
+"building React apps using Dojo."
+msgstr ""
+
+#: src/client/npm.md:26
+msgid "[Documentation](./npm/react.md)"
+msgstr ""
+
+#: src/client/npm.md:28
+msgid ""
+"```console\n"
+"yarn add @dojoengine/react\n"
+"```"
+msgstr ""
+
+#: src/client/npm.md:33
+msgid "### @dojoengine/create-burner"
+msgstr ""
+
+#: src/client/npm.md:35
+msgid ""
+"Create burner is a simply way to incorporate burner wallets into your Dojo "
+"app."
+msgstr ""
+
+#: src/client/npm.md:37
+msgid "[Reopsitory](https://github.com/dojoengine/create-burner)"
+msgstr ""
+
+#: src/client/npm.md:39
+msgid ""
+"```console\n"
+"yarn add @dojoengine/create-burner\n"
+"```"
+msgstr ""
+
+#: src/client/npm/core.md:1
+msgid "## @dojoengine/core"
+msgstr ""
+
+#: src/client/npm/core.md:3
+msgid ""
+"This library abstracts away the world interface and provides a set of helper "
+"functions to interact with the world. It is preferred to use this library "
+"over interacting with the world directly."
+msgstr ""
+
+#: src/client/npm/core.md:5
+msgid ""
+"- World explorers\n"
+"- World deployers\n"
+"- Games\n"
+"- Anaylitics"
+msgstr ""
+
+#: src/client/npm/core.md:10
+msgid "### Getting Started"
+msgstr ""
+
+#: src/client/npm/core.md:16
+msgid "### Example Usage"
+msgstr ""
+
+#: src/client/npm/core.md:18
+msgid ""
+"This is an example from [Dojo React "
+"App](https://github.com/dojoengine/dojo-starter-react-app)"
+msgstr ""
+
+#: src/client/npm/core.md:20
+msgid ""
+"```javascript\n"
+"import { defineContractComponents } from \"./contractComponents\";\n"
+"import { world } from \"./world\";\n"
+"import { RPCProvider, Query, } from \"@dojoengine/core\";\n"
+"import { Account, num } from \"starknet\";\n"
+"import { GraphQLClient } from 'graphql-request';\n"
+"import { getSdk } from '../generated/graphql';\n"
+"\n"
+"export type SetupNetworkResult = Awaited>;\n"
+"\n"
+"export async function setupNetwork() {\n"
+"\n"
+" const provider = new "
+"RPCProvider(import.meta.env.VITE_PUBLIC_WORLD_ADDRESS, "
+"import.meta.env.VITE_PUBLIC_NODE_URL);\n"
+"\n"
+" return {\n"
+" contractComponents: defineContractComponents(world),\n"
+" provider,\n"
+" execute: async (signer: Account, system: string, call_data: "
+"num.BigNumberish[]) => provider.execute(signer, system, call_data),\n"
+" entity: async (component: string, query: Query) => "
+"provider.entity(component, query),\n"
+" entities: async (component: string, partition: number) => "
+"provider.entities(component, partition),\n"
+" world,\n"
+" graphSdk: getSdk(new "
+"GraphQLClient(import.meta.env.VITE_PUBLIC_TORII)),\n"
+" call: async (selector: string, call_data: num.BigNumberish[]) => "
+"provider.call(selector, call_data),\n"
+" };\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:1
+msgid "# `dojoup`"
+msgstr ""
+
+#: src/toolchain/dojoup.md:3
+msgid "Update or revert to a specific Dojo branch with ease."
+msgstr ""
+
+#: src/toolchain/dojoup.md:5
+msgid "## Installing"
+msgstr ""
+
+#: src/toolchain/dojoup.md:11
+msgid "## Usage"
+msgstr ""
+
+#: src/toolchain/dojoup.md:13
+msgid "To install latest **stable** version:"
+msgstr ""
+
+#: src/toolchain/dojoup.md:18
+msgid ""
+"> Note: You may have to install `jq` to use `dojoup`. You can do so with the "
+"following commands:"
+msgstr ""
+
+#: src/toolchain/dojoup.md:20
+msgid ""
+"```sh \n"
+"# Debian\n"
+"sudo apt-get install jq\n"
+"\n"
+"# Mac\n"
+"brew install jq\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:28
+msgid "To install a specific **version** (in this case the `nightly` version):"
+msgstr ""
+
+#: src/toolchain/dojoup.md:30
+msgid ""
+"```sh\n"
+"dojoup --version nightly\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:34
+msgid ""
+"To install a specific **branch** (in this case the `release/0.1.0` branch's "
+"latest commit):"
+msgstr ""
+
+#: src/toolchain/dojoup.md:36
+msgid ""
+"```sh\n"
+"dojoup --branch release/0.1.0\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:40
+msgid ""
+"To install a **fork's main branch** (in this case `tarrencev/dojo`'s main "
+"branch):"
+msgstr ""
+
+#: src/toolchain/dojoup.md:42
+msgid ""
+"```sh\n"
+"dojoup --repo tarrencev/dojo\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:46
+msgid ""
+"To install a **specific branch in a fork** (in this case the `patch-10` "
+"branch's latest commit in `tarrencev/dojo`):"
+msgstr ""
+
+#: src/toolchain/dojoup.md:48
+msgid ""
+"```sh\n"
+"dojoup --repo tarrencev/dojo --branch patch-10\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:52
+msgid "To install from a **specific Pull Request**:"
+msgstr ""
+
+#: src/toolchain/dojoup.md:54
+msgid ""
+"```sh\n"
+"dojoup --pr 1071\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:58
+msgid "To install from a **specific commit**:"
+msgstr ""
+
+#: src/toolchain/dojoup.md:60
+msgid ""
+"```sh\n"
+"dojoup -C 94bfdb2\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:64
+msgid ""
+"To install a local directory or repository (e.g. one located at "
+"`~/git/dojo`, assuming you're in the home directory)"
+msgstr ""
+
+#: src/toolchain/dojoup.md:66
+msgid ""
+"##### Note: --branch, --repo, and --version flags are ignored during local "
+"installations."
+msgstr ""
+
+#: src/toolchain/dojoup.md:68
+msgid ""
+"```sh\n"
+"dojoup --path ./git/dojo\n"
+"```"
+msgstr ""
+
+#: src/toolchain/dojoup.md:74
+msgid ""
+"**Tip**: All flags have a single character shorthand equivalent! You can use "
+"`-v` instead of `--version`, etc."
+msgstr ""
+
+#: src/toolchain/dojoup.md:78
+msgid "### Precompiled binaries"
+msgstr ""
+
+#: src/toolchain/dojoup.md:80
+msgid ""
+"Precompiled binaries are available from the [GitHub releases "
+"page](https://github.com/dojoengine/dojo/releases).\n"
+"These are better managed by using [Dojoup](#using-dojoup)."
+msgstr ""
+
+#: src/toolchain/dojoup.md:84
+msgid ""
+"> ℹ️ **Note**\n"
+">\n"
+"> If you're on Windows, you will need to install and use [Git "
+"BASH](https://gitforwindows.org/) or "
+"[WSL](https://learn.microsoft.com/en-us/windows/wsl/install),\n"
+"> as your terminal, since Dojoup currently does not support Powershell or "
+"Cmd."
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:1
+msgid "## Sozo"
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:3
+msgid ""
+"`sozo` is a powerful all-in-one tool for managing your Dojo projects. It "
+"helps with everything from scaffolding a new project, all the way to "
+"deploying and interacting with your Dojo Worlds. It includes a migration "
+"planning tool, designed to streamline the updating and deployment of AWs. It "
+"provides a robust command-line interface (CLI) that simplifies World "
+"management tasks, enabling you to focus on the creative aspects of "
+"World-building. In the future, it may include a GUI."
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:5
+msgid "## Features"
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:7
+msgid ""
+"- **Binary CLI**: Sozo provides an intuitive binary CLI, ensuring easy "
+"management of your Worlds, whether you're updating existing ones or "
+"deploying new ones."
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:9
+#: src/toolchain/katana/overview.md:10
+#: src/toolchain/torii/overview.md:14
+msgid "## Installation"
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:11
+msgid ""
+"`sozo` binary can be installed via "
+"[`dojoup`](../../getting-started/quick-start.md), our dedicated installation "
+"package manager."
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:13
+#: src/toolchain/torii/overview.md:18
+msgid "### Installing from Source"
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:15
+msgid ""
+"```sh\n"
+"git clone https://github.com/dojoengine/dojo\n"
+"cd dojo\n"
+"cargo install --path ./crates/sozo --locked --force\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:21
+msgid ""
+"This will install Sozo and the required dependencies on your local system."
+msgstr ""
+
+#: src/toolchain/sozo/overview.md:23
+msgid ""
+"> 📚 **Reference**\n"
+">\n"
+"> See the [`sozo` Reference](./reference.md) for a complete overview of all "
+"the available subcommands."
+msgstr ""
+
+#: src/toolchain/sozo/reference.md:1
+msgid "## sozo reference"
+msgstr ""
+
+#: src/toolchain/sozo/reference.md:3
+msgid "### Project Commands"
+msgstr ""
+
+#: src/toolchain/sozo/reference.md:5
+msgid ""
+"- [init](./project-commands/init.md)\n"
+"- [build](./project-commands/build.md)\n"
+"- [test](./project-commands/test.md)\n"
+"- [migrate](./project-commands/migrate.md)"
+msgstr ""
+
+#: src/toolchain/sozo/reference.md:10
+msgid "### World Commands"
+msgstr ""
+
+#: src/toolchain/sozo/reference.md:12
+msgid ""
+"- [execute](./world-commands/execute.md)\n"
+"- [register](./world-commands/register.md)\n"
+"- [system](./world-commands/system.md)\n"
+"- [component](./world-commands/component.md)\n"
+"- [events](./world-commands/events.md)\n"
+"- [auth](./world-commands/auth.md)"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/init.md:1
+msgid "## sozo init"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/init.md:3
+msgid ""
+"`init` is used to initialize a new project. It will initialize a new project "
+"in the current directory by cloning the "
+"[dojo-starter](https://github.com/dojoengine/dojo-starter)."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/init.md:5
+#: src/tutorial/onchain-chess/0-setup.md:21
+msgid ""
+"```sh\n"
+"sozo init\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/build.md:1
+msgid "## sozo build"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/build.md:3
+msgid ""
+"`build` is used to compile the cairo contracts, generating the necessary "
+"artifacts for deployment."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/build.md:5
+#: src/tutorial/onchain-chess/0-setup.md:38
+msgid ""
+"```sh\n"
+"sozo build\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/test.md:1
+msgid "## sozo test"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/test.md:3
+msgid ""
+"`test` is used to test the project's cairo contracts. It will run all tests "
+"found within the project."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/test.md:5
+msgid ""
+"```sh\n"
+"sozo test\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:1
+msgid "## sozo migrate"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:3
+msgid ""
+"`migrate` is used to perform the migration (deployment) process, declaring "
+"and deploying contracts as necessary to deploy or update the World."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:5
+msgid ""
+"Changes made to the local World after the initial deployment, can easily be "
+"pushed to the remote counterpart by running `sozo migrate --world "
+"` with `WORLD_ADDRESS` being the address of the remote World. "
+"In the background, `migrate` will compute the diffs of the local and remote "
+"World, then, start constructing a migration strategy to determine, if any, "
+"which part of the local World needs to be pushed upstream."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:7
+#: src/toolchain/sozo/world-commands/execute.md:7
+#: src/toolchain/sozo/world-commands/system.md:5
+#: src/toolchain/sozo/world-commands/component.md:5
+#: src/toolchain/katana/reference.md:7
+#: src/toolchain/torii/reference.md:7
+msgid "### USAGE"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:9
+msgid ""
+"```sh\n"
+"sozo migrate [OPTIONS]\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:13
+#: src/toolchain/sozo/world-commands/execute.md:13
+#: src/toolchain/sozo/world-commands/system.md:43
+#: src/toolchain/sozo/world-commands/component.md:61
+#: src/toolchain/katana/reference.md:105
+#: src/toolchain/torii/reference.md:33
+msgid "### OPTIONS"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:15
+#: src/toolchain/sozo/world-commands/execute.md:15
+#: src/toolchain/katana/reference.md:107
+#: src/toolchain/torii/reference.md:35
+msgid "#### General Options"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:17
+msgid ""
+"`--name` _NAME_ \n"
+" Name of the World. At the moment, the only usage for "
+"this option is to be used as a salt when deploying the World contract to "
+"avoid address conflicts. This option is **required** when performing the "
+"initial migration of the World."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:20
+#: src/toolchain/sozo/world-commands/execute.md:21
+#: src/toolchain/sozo/world-commands/system.md:45
+#: src/toolchain/sozo/world-commands/component.md:63
+msgid "#### World Options"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:22
+#: src/toolchain/sozo/world-commands/execute.md:23
+#: src/toolchain/sozo/world-commands/system.md:47
+#: src/toolchain/sozo/world-commands/component.md:65
+msgid ""
+"`--world` _WORLD_ADDRESS_ \n"
+" The address of the World contract. \n"
+" ENV: `DOJO_WORLD_ADDRESS`"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:26
+#: src/toolchain/sozo/world-commands/execute.md:27
+#: src/toolchain/sozo/world-commands/system.md:51
+#: src/toolchain/sozo/world-commands/component.md:69
+#: src/toolchain/katana/reference.md:139
+msgid "#### Starknet Options"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:28
+#: src/toolchain/sozo/world-commands/execute.md:29
+#: src/toolchain/sozo/world-commands/system.md:53
+#: src/toolchain/sozo/world-commands/component.md:71
+msgid ""
+"`--rpc-url` _URL_ \n"
+" The Starknet RPC endpoint. [default: "
+"http://localhost:5050] \n"
+" ENV: `STARKNET_RPC_URL`"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:32
+#: src/toolchain/sozo/world-commands/execute.md:33
+msgid "#### Account Options"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:34
+#: src/toolchain/sozo/world-commands/execute.md:35
+msgid ""
+"`--account-address` _ACCOUNT_ADDRESS_ \n"
+" The Starknet account address. \n"
+" ENV: `DOJO_ACCOUNT_ADDRESS`"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:38
+#: src/toolchain/sozo/world-commands/execute.md:39
+msgid "#### Signer Options - Raw"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:40
+#: src/toolchain/sozo/world-commands/execute.md:41
+msgid ""
+"`--private-key` _PRIVATE_KEY_ \n"
+" The raw private key associated with the account "
+"contract. \n"
+" ENV: `DOJO_PRIVATE_KEY`"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:44
+#: src/toolchain/sozo/world-commands/execute.md:45
+msgid "#### Signer Options - Keystore"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:46
+#: src/toolchain/sozo/world-commands/execute.md:47
+msgid ""
+"`--keystore` _PATH_ \n"
+" Use the keystore in the given folder or file."
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:49
+#: src/toolchain/sozo/world-commands/execute.md:50
+msgid ""
+"`--password` _PASSWORD_ \n"
+" The keystore password. Used with --keystore. \n"
+" ENV: `DOJO_KEYSTORE_PASSWORD`"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:53
+#: src/toolchain/sozo/world-commands/execute.md:54
+#: src/toolchain/sozo/world-commands/system.md:57
+#: src/toolchain/katana/reference.md:186
+msgid "### EXAMPLES"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:55
+msgid "1. Deploying your World for the first time to a local Katana node"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:57
+msgid ""
+"```sh\n"
+"sozo migrate --name ohayo --rpc-url http://localhost:5050\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:61
+msgid "2. Updating a remote World after making some changes"
+msgstr ""
+
+#: src/toolchain/sozo/project-commands/migrate.md:63
+msgid ""
+"```sh\n"
+"sozo migrate --world 0x123456\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:1
+msgid "## sozo execute"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:3
+msgid "`execute` is used to execute a World's system."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:5
+msgid ""
+"Performing a system execution requires sending a transaction, therefore, "
+"`execute` expects an account address as well as its respective private key "
+"in order to sign the transaction before sending it."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:9
+msgid ""
+"```sh\n"
+"sozo execute [OPTIONS]\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:17
+msgid ""
+"`--calldata` _CALLDATA_ \n"
+" The calldata to be passed to the system that you "
+"want to execute. \n"
+" Comma seperated values e.g., 0x12345,0x69420."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:56
+msgid ""
+"1. Executing the _position_ system which takes two values (_x_: 0x77 and "
+"_y_: 0x44)"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/execute.md:58
+msgid ""
+"```sh\n"
+"sozo execute position --calldata 0x77,0x44\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/register.md:1
+msgid "## sozo register"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/register.md:3
+msgid "`register` is used to register new systems and components."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/register.md:5
+msgid ""
+"```sh\n"
+"sozo register [OPTIONS] \n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/register.md:9
+msgid ""
+"```sh\n"
+"Commands:\n"
+" component Register a component to a world.\n"
+" system Register a system to a world.\n"
+" help Print this message or the help of the given subcommand(s)\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/register.md:16
+msgid ""
+"```sh\n"
+"# example: component - register a component to a world\n"
+"# this will register the Moves component to the world\n"
+"sozo register component Moves\n"
+"\n"
+"# example: system - register a system to a world\n"
+"# this will register the spawn system to the world\n"
+"sozo register system spawn\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:1
+msgid "## sozo system"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:3
+msgid ""
+"`system` is used to interact with a World's systems. It is useful for "
+"querying about a system's information."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:7
+msgid ""
+"```sh\n"
+"sozo system \n"
+"\n"
+"Commands:\n"
+" get Get the class hash of a system.\n"
+" dependency Retrieve the component dependencies of a system.\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:15
+#: src/toolchain/sozo/world-commands/component.md:16
+msgid "### SUBCOMMANDS"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:17
+#: src/toolchain/sozo/world-commands/component.md:18
+msgid "#### `get`"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:19
+msgid "Get the class hash of a system"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:21
+msgid ""
+"```sh\n"
+"sozo system get \n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:25
+#: src/toolchain/sozo/world-commands/system.md:38
+#: src/toolchain/sozo/world-commands/component.md:26
+#: src/toolchain/sozo/world-commands/component.md:39
+#: src/toolchain/sozo/world-commands/component.md:52
+msgid "##### Arguments"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:27
+#: src/toolchain/sozo/world-commands/system.md:40
+msgid "_`NAME`_ \n The name of the system"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:30
+msgid "#### `dependency`"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:32
+msgid "Retrieve the component dependencies of a system"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:34
+msgid ""
+"```sh\n"
+"sozo system dependency \n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:59
+msgid "1. Get the class hash of the _spawn_ system"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:61
+msgid ""
+"```sh\n"
+"sozo system get spawn\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:65
+msgid "2. Get the component dependencies of the _spawn_ system"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/system.md:67
+msgid ""
+"```sh\n"
+"sozo system dependency spawn\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:1
+msgid "## sozo component"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:3
+msgid ""
+"`component` is used to interact with a World's components. It is useful for "
+"querying about a component's information, or a component value of an entity."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:7
+msgid ""
+"```sh\n"
+"sozo component \n"
+"\n"
+"Commands:\n"
+" get Get the class hash of a component\n"
+" schema Retrieve the schema for a component\n"
+" entity Get the component value for an entity\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:20
+msgid "Get the class hash of a component"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:22
+msgid ""
+"```sh\n"
+"sozo component get \n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:28
+#: src/toolchain/sozo/world-commands/component.md:41
+msgid "_`NAME`_ \n The name of the component"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:31
+msgid "#### `schema`"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:33
+msgid "Retrieve the schema for a component"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:35
+msgid ""
+"```sh\n"
+"sozo component schema \n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:44
+msgid "#### `entity`"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:46
+msgid "Get the component value for an entity"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:48
+msgid ""
+"```sh\n"
+"sozo component entity [KEYS]...\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:54
+msgid "_`NAME`_ \n The name of the component"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/component.md:57
+msgid ""
+"_`KEYS`_ \n"
+" The keys of the entity that you want to query. \n"
+" Comma seperated values e.g., 0x12345,0x69420,..."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/events.md:1
+msgid "## sozo events"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/events.md:3
+msgid "`events` is used to queries world events."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/events.md:5
+msgid ""
+"```sh\n"
+"sozo events\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/auth.md:1
+msgid "## sozo auth"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/auth.md:3
+msgid "`auth` is used to manage world authorization."
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/auth.md:5
+msgid ""
+"```sh\n"
+"sozo auth [OPTIONS] \n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/auth.md:9
+msgid ""
+"```sh\n"
+"Commands:\n"
+" writer Auth a system with the given calldata.\n"
+" help Print this message or the help of the given subcommand(s)\n"
+"```"
+msgstr ""
+
+#: src/toolchain/sozo/world-commands/auth.md:15
+msgid ""
+"```sh\n"
+"# example: writer - auth a system with the given calldata\n"
+"# This will auth the spawn system with the writer role for Position "
+"component\n"
+"sozo auth writer Position spawn\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:1
+msgid "## Katana"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:3
+msgid ""
+"`katana` is a _blazingly fast_ local Starknet node, designed to support "
+"local development with Dojo."
+msgstr ""
+
+#: src/toolchain/katana/overview.md:5
+msgid "### Features"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:7
+msgid ""
+"- [Starknet JSON-RPC "
+"v0.3.0](https://github.com/starkware-libs/starknet-specs/tree/v0.3.0) "
+"support\n"
+"- Custom methods for manipulating the blockchain states"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:12
+msgid ""
+"`katana` binary is available via "
+"[`dojoup`](../../getting-started/quick-start.md)."
+msgstr ""
+
+#: src/toolchain/katana/overview.md:14
+msgid "### Installing from source"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:16
+msgid ""
+"```sh\n"
+"git clone https://github.com/dojoengine/dojo\n"
+"cd dojo\n"
+"cargo install --path ./crates/katana --locked --force\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:22
+msgid "### Usage"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:24
+msgid ""
+"```console\n"
+"$ katana\n"
+"\n"
+"\n"
+"\n"
+"██╗ ██╗ █████╗ ████████╗ █████╗ ███╗ ██╗ █████╗\n"
+"██║ ██╔╝██╔══██╗╚══██╔══╝██╔══██╗████╗ ██║██╔══██╗\n"
+"█████╔╝ ███████║ ██║ ███████║██╔██╗ ██║███████║\n"
+"██╔═██╗ ██╔══██║ ██║ ██╔══██║██║╚██╗██║██╔══██║\n"
+"██║ ██╗██║ ██║ ██║ ██║ ██║██║ ╚████║██║ ██║\n"
+"╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝\n"
+"\n"
+"\n"
+"\n"
+"PREFUNDED ACCOUNTS\n"
+"==================\n"
+"\n"
+"| Account address | "
+"0x3ee9e18edc71a6df30ac3aca2e0b02a198fbce19b7480a63a0d71cbd76652e0\n"
+"| Private key | "
+"0x300001800000000300000180000000000030000000000003006001800006600\n"
+"| Public key | "
+"0x1b7b37a580d91bc3ad4f9933ed61f3a395e0e51c9dd5553323b8ca3942bb44e\n"
+"\n"
+"| Account address | "
+"0x33c627a3e5213790e246a917770ce23d7e562baa5b4d2917c23b1be6d91961c\n"
+"| Private key | "
+"0x333803103001800039980190300d206608b0070db0012135bd1fb5f6282170b\n"
+"| Public key | "
+"0x4486e2308ef3513531042acb8ead377b887af16bd4cdd8149812dfef1ba924d\n"
+"\n"
+"\n"
+"ACCOUNTS SEED\n"
+"=============\n"
+"0\n"
+"\n"
+"\n"
+"🚀 JSON-RPC server started: http://127.0.0.1:5050\n"
+"\n"
+"\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/overview.md:60
+msgid ""
+"> 📚 **Reference**\n"
+">\n"
+"> See the [`katana` Reference](./reference.md) for an in depth reference and "
+"documentation on Katana."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:1
+msgid "## katana reference"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:3
+msgid "### NAME"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:5
+msgid ""
+"katana - Create a local testnet node for deploying and testing Starknet "
+"smart contracts."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:9
+msgid ""
+"```sh\n"
+"katana [OPTIONS]\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:13
+#: src/toolchain/torii/reference.md:13
+msgid "### DESCRIPTION"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:15
+msgid ""
+"Create a local testnet node for deploying and testing Starknet smart "
+"contracts. Katana supports deployment and execution of the **new** as well "
+"as the **legacy** (Cairo 0) Cairo contracts."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:17
+msgid ""
+"This section covers an extensive list of information about Mining Modes, "
+"Supported RPC Methods, Katana flags and their usages. You can run multiple "
+"flags at the same time."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:19
+msgid "#### Mining Modes"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:21
+msgid ""
+"In Katana, mining modes determine how frequent blocks are mined. By default, "
+"a new block is automatically mined as soon as a transaction is submitted."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:23
+msgid ""
+"You can switch from the default mining behaviour to interval mining, where a "
+"new block is created at a fixed time interval selected by the user. To "
+"enable this mode of mining, use the `--block-time ` flag, as "
+"demonstrated in the following example."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:25
+msgid ""
+"```sh\n"
+"# Produces a new block every 10 seconds\n"
+"katana --block-time 10\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:30
+msgid "#### Supported Transport Layers"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:32
+msgid ""
+"Only HTTP connection is supported at the moment. The server listens on port "
+"5050 by default, but it can be changed by running the following command:"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:34
+msgid ""
+"```sh\n"
+"katana --port \n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:38
+msgid "#### Starknet Feature Compatibility"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:40
+msgid "##### Supported Transaction Type"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:42
+msgid ""
+"| Type | Version |\n"
+"| -------------- | ------- |\n"
+"| INVOKE | 1 |\n"
+"| DECLARE | 1, 2 |\n"
+"| DEPLOY_ACCOUNT | |"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:48
+msgid "#### Supported RPC Methods"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:50
+msgid "##### Starknet Methods"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:52
+msgid ""
+"Katana supports version **v0.3.0** of the Starknet JSON-RPC specifications. "
+"The standard methods are based on "
+"[this](https://github.com/starkware-libs/starknet-specs/tree/v0.3.0) "
+"reference."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:54
+msgid ""
+"- `starknet_blockNumber`\n"
+"- `starknet_blockHashAndNumber`\n"
+"- `starknet_getBlockWithTxs`\n"
+"- `starknet_getBlockWithTxHashes`\n"
+"- `starknet_getBlockTransactionCount`\n"
+"- `starknet_getTransactionByHash`\n"
+"- `starknet_getTransactionByBlockIdAndIndex`\n"
+"- `starknet_getTransactionReceipt`\n"
+"- `starknet_pendingTransactions`\n"
+"- `starknet_getStateUpdate`\n"
+"\n"
+"- `starknet_call`\n"
+"- `starknet_estimateFee`\n"
+"\n"
+"- `starknet_chainId`\n"
+"\n"
+"- `starknet_getNonce`\n"
+"- `starknet_getEvents`\n"
+"- `starknet_getStorageAt`\n"
+"- `starknet_getClassHashAt`\n"
+"- `starknet_getClass`\n"
+"- `starknet_getClassAt`\n"
+"\n"
+"- `starknet_syncing`\n"
+"\n"
+"- `starknet_addInvokeTransaction`\n"
+"- `starknet_addDeclareTransaction`\n"
+"- `starknet_addDeployAccountTransaction`"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:83
+msgid "##### Custom Methods"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:85
+msgid ""
+"Katana provides a convenient set of custom RPC methods to quickly and easily "
+"configure the node to suit your testing environment."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:87
+msgid ""
+"`katana_generateBlock` \n"
+"Mine a new block which includes all currently pending transactions."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:90
+msgid "`katana_nextBlockTimestamp` \nGet the time for the next block."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:93
+msgid ""
+"`katana_increaseNextBlockTimestamp` \n"
+"Increase the time for the block by a given amount of time, in seconds."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:96
+msgid ""
+"`katana_setNextBlockTimestamp` \n"
+"Similar to `katana_increaseNextBlockTimestamp` but takes the exact timestamp "
+"that you want in the next block."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:99
+msgid ""
+"`katana_predeployedAccounts` \n"
+"Get the info for all of the predeployed accounts."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:102
+msgid "`katana_setStorageAt` \nSet an exact value of a contract's storage slot."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:109
+msgid "`--silent` \n Don't print anything on startup."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:112
+msgid ""
+"`--no-mining` \n"
+" Disable auto and interval mining, and mine on "
+"demand instead."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:115
+msgid ""
+"`-b, --block-time ` \n"
+" Block time in seconds for interval mining."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:118
+msgid ""
+"`--dump-state ` \n"
+" Dump the state of chain on exit to the given file. "
+"\n"
+" If the value is a directory, the state will be "
+"written to `/state.bin`."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:122
+msgid ""
+"`--load-state ` \n"
+" Initialize the chain from a previously saved state "
+"snapshot."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:125
+msgid ""
+"`-h, --help` \n"
+" Print help (see a summary with '-h')."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:128
+msgid "`-V, --version` \n Print version information."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:131
+msgid "#### Server Options"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:133
+msgid ""
+"`-p, --port ` \n"
+" Port number to listen on. [default: 5050]"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:136
+msgid ""
+"`--host ` \n"
+" The IP address the server will listen on."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:141
+msgid ""
+"`--seed ` \n"
+" Specify the seed for randomness of accounts to be "
+"predeployed."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:144
+msgid ""
+"`--accounts ` \n"
+" Number of pre-funded accounts to generate. "
+"[default: 10]"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:147
+msgid ""
+"`--disable-fee` \n"
+" Disable charging fee for transactions."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:150
+msgid "#### Environment Options"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:152
+msgid ""
+"`--chain-id ` \n"
+" The chain ID. [default: KATANA]"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:155
+msgid "`--gas-price ` \n The gas price."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:158
+msgid ""
+"`--validate-max-steps ` \n"
+" The maximum number of steps available for the "
+"account validation logic."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:161
+msgid ""
+"`--invoke-max-steps ` \n"
+" The maximum number of steps available for the "
+"account execution logic."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:164
+msgid "### Shell Completions"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:166
+msgid "`katana` completions shell"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:168
+msgid "Generates a shell completions script for the given shell."
+msgstr ""
+
+#: src/toolchain/katana/reference.md:170
+msgid "Supported shells are:"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:172
+msgid ""
+"- bash\n"
+"- elvish\n"
+"- fish\n"
+"- powershell\n"
+"- zsh"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:178
+msgid "#### EXAMPLES"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:180
+msgid ""
+"Generate shell completions script for `bash` and appends it to a `.bashrc` "
+"file:"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:182
+msgid ""
+"```bash\n"
+"katana completions bash >> ~/.bashrc\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:188
+msgid "1. Create 15 dev accounts and disable transaction fee mechanism"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:190
+msgid ""
+"```sh\n"
+"katana --accounts 15 --disable-fee\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:194
+msgid "2. Set the chain id to `SN_GOERLI` and run the server on port 8545"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:196
+msgid ""
+"```sh\n"
+"katana --chain-id SN_GOERLI --port 8545\n"
+"```"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:200
+msgid ""
+"3. Load previously stored state and dump the state of this session to a file "
+"on shutdown"
+msgstr ""
+
+#: src/toolchain/katana/reference.md:202
+msgid ""
+"```sh\n"
+"katana --load-state ./dump-state.bin --dump-state ./dump-state.bin\n"
+"```"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:1
+msgid "## Torii - Networking & Indexing"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:3
+msgid ""
+"Torii is an automatic indexer for dojo worlds. Built in rust to be blazingly "
+"fast and exceptionally scalable."
+msgstr ""
+
+#: src/toolchain/torii/overview.md:5
+msgid "### Dojo indexer"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:7
+msgid ""
+"Torii indexes your dojo worlds and exposes a GraphQL API to query them. "
+"Simply run:"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:9
+msgid ""
+"```sh\n"
+"torii\n"
+"```"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:12
+msgid "and you'll have a GraphQL API running on `http://localhost:8080`!"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:16
+msgid ""
+"The `torii` binary can be installed via "
+"[`dojoup`](../../getting-started/quick-start.md), our dedicated installation "
+"package manager."
+msgstr ""
+
+#: src/toolchain/torii/overview.md:20
+msgid "If you prefer to install from the source code:"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:22
+msgid ""
+"```sh\n"
+"cargo install --path ./crates/torii --profile local --force\n"
+"```"
+msgstr ""
+
+#: src/toolchain/torii/overview.md:26
+msgid ""
+"This will install Torii and the required dependencies on your local system."
+msgstr ""
+
+#: src/toolchain/torii/overview.md:28
+msgid ""
+"> 📚 **Reference**\n"
+">\n"
+"> See the [`torii` Reference](./reference.md) for a complete reference."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:1
+msgid "## torii reference"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:3
+msgid "### Name"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:5
+msgid "torii - An automatic indexer and networking layer for a world contract."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:9
+msgid ""
+"```sh\n"
+"torii [OPTIONS]\n"
+"```"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:15
+msgid ""
+"`torii` starts the indexer and exposes GraphQL/gRPC API endpoints. The "
+"indexer queries the specified Starknet RPC endpoint for transaction blocks "
+"and listens for transactions related to the world contract. These "
+"transactions can include component/system registrations, entity state "
+"updates, system calls, and events. The parsed data is then stored in a local "
+"SQLite database."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:17
+msgid ""
+"The GraphQL and gRPC API endpoints run in tandem with the indexer, providing "
+"custom queries specific to the world contract for client applications."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:19
+msgid "#### Database URL"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:21
+msgid ""
+"`torii` uses a sqlite database to store indexed data. The database can be "
+"stored either in-memory or persistently on the filesystem."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:23
+msgid ""
+"- The in-memory database is ephermal and only lasts as long as the indexer "
+"is running. This is a fast and simple option to start the indexer for "
+"development/testing.\n"
+"- Presistent storage should be used in production. It relies on the local "
+"filesystem for storage."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:26
+msgid ""
+"Note: If using in-memory db, the memory will be garbage collected after a "
+"period of inactivity, causing queries to result in errors. A workaround is "
+"to start `katana` with the `--block-time` option or use a persistent "
+"database."
+msgstr ""
+
+#: src/toolchain/torii/reference.md:28
+msgid ""
+"```sh\n"
+"# Persistent database storage using file indexer.db\n"
+"torii --database-url sqlite:indexer.db\n"
+"```"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:37
+msgid ""
+"`-w, --world`\n"
+" Address of the world contract to index"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:40
+msgid ""
+"`--rpc`\n"
+" Starknet RPC endpoing to use [default: "
+"http//localhost:5050]"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:43
+msgid ""
+"`-m, --manifest `\n"
+" Specify a local manifest to initialize from"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:46
+msgid ""
+"`-d, --database-url `\n"
+" Database URL (read more above) [default: "
+"sqlite::memory:]"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:49
+msgid ""
+"`-s, --start-block `\n"
+" Specify a block to start indexing from, ignored if "
+"stored head exists [default: 0]"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:52
+msgid "`-h, --help`\n Print help"
+msgstr ""
+
+#: src/toolchain/torii/reference.md:55
+msgid "`-V, --version`\n Print version"
+msgstr ""
+
+#: src/deployment/locally.md:1
+msgid "## Deploying Locally"
+msgstr ""
+
+#: src/deployment/locally.md:3
+msgid ""
+"Dojo is engineered for rapid development, boasting a lightning-fast local "
+"development environment named [Katana](./toolchain/katana/overview.md). "
+"Katana serves as an on-device Starknet blockchain, allowing you to "
+"rigorously test your smart contracts before transitioning them to the a "
+"remote testnet."
+msgstr ""
+
+#: src/deployment/locally.md:5
+msgid "### Katana Deployments"
+msgstr ""
+
+#: src/deployment/locally.md:7
+msgid "Deploying to Katana could not be easier."
+msgstr ""
+
+#: src/deployment/locally.md:9
+msgid ""
+"> This assumes you have followed the [Quick "
+"Start](./getting-started/quick-start.md) guide and have a project "
+"initialized."
+msgstr ""
+
+#: src/deployment/locally.md:11
+msgid "From your project directory, run:"
+msgstr ""
+
+#: src/deployment/locally.md:17
+msgid "This has started a local Katana which you can now deploy on!"
+msgstr ""
+
+#: src/deployment/locally.md:19
+msgid "### Deploying to Katana"
+msgstr ""
+
+#: src/deployment/locally.md:21
+msgid "To deploy your project to Katana, run:"
+msgstr ""
+
+#: src/deployment/locally.md:27
+msgid ""
+"Note - this will only work if you have compiled your contracts. If you have "
+"not, run:"
+msgstr ""
+
+#: src/deployment/remote.md:1
+msgid "## Deployment to Remote Network"
+msgstr ""
+
+#: src/deployment/remote.md:3
+msgid "> *IMPORTANT: Dojo is unaudited. Use at your own risk.*"
+msgstr ""
+
+#: src/deployment/remote.md:5
+msgid ""
+"Dojo makes it easy to deploy to remote networks, you just need to have a "
+"valid account and network endpoint."
+msgstr ""
+
+#: src/deployment/remote.md:7
+msgid "Scarb.toml"
+msgstr ""
+
+#: src/deployment/remote.md:9
+msgid ""
+"```toml\n"
+"[package]\n"
+"name = \"ohayoo\"\n"
+"version = \"0.1.0\"\n"
+"cairo-version = \"2.1.1\"\n"
+"\n"
+"[cairo]\n"
+"sierra-replace-ids = true\n"
+"\n"
+"[dependencies]\n"
+"dojo = { git = \"https://github.com/dojoengine/dojo.git\" }\n"
+"\n"
+"# # Katana\n"
+"# rpc_url = \"http://localhost:5050\"\n"
+"# account_address = "
+"\"0x03ee9e18edc71a6df30ac3aca2e0b02a198fbce19b7480a63a0d71cbd76652e0\"\n"
+"# private_key = "
+"\"0x0300001800000000300000180000000000030000000000003006001800006600\"\n"
+"\n"
+"#Madara\n"
+"rpc_url = \"https://api.cartridge.gg/x/shinai/madara\"\n"
+"account_address = \"0x2\"\n"
+"private_key = "
+"\"0xc1cf1490de1352865301bb8705143f3ef938f97fdf892f1090dcb5ac7bcd1d\"\n"
+"#world_address = "
+"\"0x5b328933afdbbfd44901fd69a2764a254edbb6e992ae87cf958c70493f2d201\"\n"
+"```"
+msgstr ""
+
+#: src/deployment/remote.md:33
+msgid "### Remote Katana"
+msgstr ""
+
+#: src/deployment/remote.md:35
+msgid ""
+"Katanas are able to be hosted and run as remote testnets, however this is "
+"not recommended for production use."
+msgstr ""
+
+#: src/deployment/remote.md:37
+msgid "__todo__: add instructions for deploying to remote katana"
+msgstr ""
+
+#: src/deployment/remote.md:40
+msgid "### Madara "
+msgstr ""
+
+#: src/deployment/remote.md:42
+msgid ""
+"[Madara](https://github.com/keep-starknet-strange/madara) is a blazinly fast "
+"Starknet sequencer. Built on the robust Substrate framework and fast, thanks "
+"to Rust 🦀, Madara delivers unmatched performance and scalability to power "
+"your Starknet-based Validity Rollup chain."
+msgstr ""
+
+#: src/deployment/remote.md:44
+msgid "A public Madara testnet is available for deployment:"
+msgstr ""
+
+#: src/deployment/remote.md:46
+msgid "**Testnet RPC:** https://api.cartridge.gg/x/shinai/madara"
+msgstr ""
+
+#: src/deployment/remote.md:48
+msgid "You can use the following account to deploy:"
+msgstr ""
+
+#: src/deployment/remote.md:50
+msgid ""
+"```toml\n"
+"# ...rest of Scarb.toml\n"
+"\n"
+"rpc_url = \"https://api.cartridge.gg/x/shinai/madara\"\n"
+"account_address = \"0x2\"\n"
+"private_key = "
+"\"0xc1cf1490de1352865301bb8705143f3ef938f97fdf892f1090dcb5ac7bcd1d\"\n"
+"```"
+msgstr ""
+
+#: src/deployment/remote.md:59
+msgid "### Starknet "
+msgstr ""
+
+#: src/deployment/remote.md:61
+msgid "__todo__: add instructions for deploying to remote Starknet"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:1
+msgid "# Building a Chess Game"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:3
+msgid "_\"I just finished reading The Dojo Book. What should I do next?\"_"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:5
+msgid ""
+"The answers to this question are always \"Make something!\", sometimes "
+"followed by a list of cool projects. This is a great answer for some people, "
+"but others might be looking for a little more direction."
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:7
+msgid ""
+"This guide is intended to fill the gap between heavily directed beginner "
+"tutorials and working on your projects. The primary goal here is to get you "
+"to write code. The secondary goal is to get you reading documentation."
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:9
+msgid ""
+"If you haven't read the Dojo Book yet, it is highly encouraged for you to do "
+"so before starting this project."
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:11
+msgid "## What are we building?"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:13
+msgid ""
+"We're building an on-chain chess game contract that lets you start a new "
+"game and play chess. This guide does not cover every rules of the chess "
+"game. You will build step by step as follows:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:15
+msgid ""
+"1. A system to spawn all the chess pieces\n"
+"2. A system to make pieces move\n"
+"3. Add some functions to check a legal move\n"
+"4. Play chess ♟♙ - integration test!"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:20
+msgid ""
+"The full code of tutorial is based on [this "
+"repo](https://github.com/rkdud007/chess-dojo/tree/tutorialv2)."
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:22
+msgid ""
+"If this seems too hard, don't worry! This guide is for beginners. If you "
+"know some basics about Cairo and Dojo, you're good. We won't make a full "
+"chess game with all the rules. We're keeping it simple."
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:24
+msgid "## What after this guide?"
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:26
+msgid ""
+"We're making another guide to help design the frontend. This will make our "
+"chess game complete."
+msgstr ""
+
+#: src/tutorial/onchain-chess/index.md:28
+msgid ""
+"After you finish all the five chapters, we can move on to the frontend guide."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:1
+msgid "# 0. Setup"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:3
+msgid ""
+"_Before starting recommend following the "
+"[`hello-dojo`](../../cairo/hello-dojo.md) chapter to gain a basic "
+"understanding of the Dojo game._"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:5
+msgid "## Initializing the Project"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:7
+msgid ""
+"Create a new Dojo project folder. You can name your project what you want."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:9
+msgid ""
+"```sh\n"
+"mkdir dojo-chess\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:13
+msgid "Open the project folder."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:15
+msgid ""
+"```sh\n"
+"cd dojo-chess\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:19
+msgid "And initialize the project using sozo init."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:25
+msgid "## Cleaning Up the Boilerplate"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:27
+msgid ""
+"The project comes with a lot of boilerplate codes. Clear it all. Make sure "
+"both `components.cairo` and `systems.cairo` files are empty."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:29
+msgid "In `lib.cairo`, retain only:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:31
+msgid ""
+"```rust,ignore\n"
+"mod components;\n"
+"mod systems;\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:36
+msgid "Compile your project with:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:42
+msgid "## Basic components"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:44
+msgid ""
+"While there are many ways to design a chess game using the ECS model, we'll "
+"follow this approach:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:46
+msgid ""
+"> Every square of the chess board (e.g., A1) will be treated as an entity. "
+"If a piece exists on a square, the square entity will hold that piece."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:48
+msgid ""
+"First, add this basic component to `components.cairo` file. If you are not "
+"familar with component syntax in Dojo engine, go back to this "
+"[chapter](../../cairo/components.md)."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:50
+msgid ""
+"```rust,ignore\n"
+"#[derive(Component)]\n"
+"struct Square {\n"
+" #[key]\n"
+" game_id: felt252,\n"
+" #[key]\n"
+" x: u32,\n"
+" #[key]\n"
+" y: u32,\n"
+" piece: Option,\n"
+"}\n"
+"\n"
+"enum PieceType {\n"
+" WhitePawn,\n"
+" WhiteKnight,\n"
+" WhiteBishop,\n"
+" WhiteRook,\n"
+" WhiteQueen,\n"
+" WhiteKing,\n"
+" BlackPawn,\n"
+" BlackKnight,\n"
+" BlackBishop,\n"
+" BlackRook,\n"
+" BlackQueen,\n"
+" BlackKing,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:78
+msgid "## Basic systems"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:80
+msgid ""
+"Starting from the next chapter, you will implement `initiate` and `move` "
+"systems one in each chapter. Let's create each system in its own file for "
+"better modularity."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:82
+msgid ""
+"Create a `systems` folder at `src`. Create `initiate.cairo`and `move.cairo` "
+"two files inside the folder. Each file should contain a basic system "
+"structure."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:84
+msgid "For example, `initiate.cairo` look like this:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:86
+msgid ""
+"```rust,ignore\n"
+"#[system]\n"
+"mod initiate_system {\n"
+"\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:93
+msgid "and in `systems.cairo` we will use `initiate_system` like this:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:95
+msgid ""
+"```rust,ignore\n"
+"mod initiate;\n"
+"\n"
+"use initiate::initiate_system;\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:101
+msgid "Do the same with the other systems. Update `systems.cairo` to:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:103
+msgid ""
+"```rust,ignore\n"
+"mod initiate;\n"
+"mod move;\n"
+"\n"
+"use initiate::initiate_system;\n"
+"use move::move_system;\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:111
+msgid "## Compile your project"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:113
+msgid "Now try `sozo build` to build. Faced some errors?"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:115
+#: src/tutorial/onchain-chess/0-setup.md:179
+msgid ""
+"```sh\n"
+"error: Trait has no implementation in context:\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:119
+msgid ""
+"You would probably faced some trait implementation errors, which you can "
+"implement as a derive like:"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:121
+msgid ""
+"```rust,ignore\n"
+"\n"
+"#[derive(Component, Drop, SerdeLen, Serde)]\n"
+"struct Square {\n"
+" #[key]\n"
+" game_id: felt252,\n"
+" #[key]\n"
+" x: u32,\n"
+" #[key]\n"
+" y: u32,\n"
+" piece: Option,\n"
+"}\n"
+"\n"
+"#[derive(Serde, Drop, Copy, PartialEq)]\n"
+"enum PieceType {\n"
+" WhitePawn,\n"
+" WhiteKnight,\n"
+" WhiteBishop,\n"
+" WhiteRook,\n"
+" WhiteQueen,\n"
+" WhiteKing,\n"
+" BlackPawn,\n"
+" BlackKnight,\n"
+" BlackBishop,\n"
+" BlackRook,\n"
+" BlackQueen,\n"
+" BlackKing,\n"
+"}\n"
+"```"
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:151
+msgid "Great! then let's solve this error."
+msgstr ""
+
+#: src/tutorial/onchain-chess/0-setup.md:153
+msgid ""
+"```sh\n"
+"error: Trait has no implementation in context: "
+"dojo::serde::SerdeLen::>\n"
+" --> Square:80:54\n"
+" dojo::SerdeLen::