diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index d2fc80d..da9039e 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -10,7 +10,7 @@ jobs: sozo-test: runs-on: ubuntu-latest env: - DOJO_VERSION: v1.0.0-rc.1 + DOJO_VERSION: v1.0.0-rc.2 steps: - uses: actions/checkout@v3 - run: curl -L https://install.dojoengine.org | bash diff --git a/.gitignore b/.gitignore index 1de5659..b0ebca7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -target \ No newline at end of file +target +dojo_mainnet.toml diff --git a/Scarb.lock b/Scarb.lock index 2479a35..2258692 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -4,7 +4,7 @@ version = 1 [[package]] name = "dojo" version = "1.0.0-rc.0" -source = "git+https://github.com/dojoengine/dojo?tag=v1.0.0-rc.1#c789997f1a7cf5628d6b3fc01ce2851fca7a35bf" +source = "git+https://github.com/dojoengine/dojo?tag=v1.0.0-rc.2#6725a8f20af56213fa7382aa1e158817f3ee623c" dependencies = [ "dojo_plugin", ] @@ -12,7 +12,7 @@ dependencies = [ [[package]] name = "dojo_cairo_test" version = "1.0.0-rc.0" -source = "git+https://github.com/dojoengine/dojo?tag=v1.0.0-rc.1#c789997f1a7cf5628d6b3fc01ce2851fca7a35bf" +source = "git+https://github.com/dojoengine/dojo?tag=v1.0.0-rc.2#6725a8f20af56213fa7382aa1e158817f3ee623c" dependencies = [ "dojo", ] @@ -20,11 +20,11 @@ dependencies = [ [[package]] name = "dojo_plugin" version = "2.8.4" -source = "git+https://github.com/dojoengine/dojo?tag=v1.0.0-rc.1#c789997f1a7cf5628d6b3fc01ce2851fca7a35bf" +source = "git+https://github.com/dojoengine/dojo?tag=v1.0.0-rc.2#6725a8f20af56213fa7382aa1e158817f3ee623c" [[package]] name = "dojo_starter" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" dependencies = [ "dojo", "dojo_cairo_test", diff --git a/Scarb.toml b/Scarb.toml index 179b1ab..d45f595 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -1,7 +1,7 @@ [package] cairo-version = "=2.8.4" name = "dojo_starter" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" [cairo] sierra-replace-ids = true @@ -12,10 +12,10 @@ spawn = "sozo execute dojo_starter-actions spawn --wait" # scarb run spawn move = "sozo execute dojo_starter-actions move -c 1 --wait" # scarb run move [dependencies] -dojo = { git = "https://github.com/dojoengine/dojo", tag = "v1.0.0-rc.1" } +dojo = { git = "https://github.com/dojoengine/dojo", tag = "v1.0.0-rc.2" } [[target.starknet-contract]] build-external-contracts = ["dojo::world::world_contract::world"] [dev-dependencies] -dojo_cairo_test = { git = "https://github.com/dojoengine/dojo", tag = "v1.0.0-rc.1" } +dojo_cairo_test = { git = "https://github.com/dojoengine/dojo", tag = "v1.0.0-rc.2" } diff --git a/manifest_dev.json b/manifest_dev.json index 57b0c1c..0b74764 100644 --- a/manifest_dev.json +++ b/manifest_dev.json @@ -1,9 +1,32 @@ { "world": { - "class_hash": "0x139239a99d627697b19b9856beaef7896fc75375caf3d750dd76982a7afeb78", - "address": "0x6171ed98331e849d6084bf2b3e3186a7ddf35574dd68cab4691053ee8ab69d7", + "class_hash": "0x79d9ce84b97bcc2a631996c3100d57966fc2f5b061fb1ec4dfd0040976bcac6", + "address": "0xe2ea9b5dd9804d13903edf712998943b7d5d606c139dd0f13eeb8f5b84da8d", "seed": "dojo_starter", "name": "Dojo starter", + "entrypoints": [ + "uuid", + "set_metadata", + "register_namespace", + "register_event", + "register_model", + "register_contract", + "init_contract", + "upgrade_event", + "upgrade_model", + "upgrade_contract", + "emit_event", + "emit_events", + "set_entity", + "set_entities", + "delete_entity", + "delete_entities", + "grant_owner", + "revoke_owner", + "grant_writer", + "revoke_writer", + "upgrade" + ], "abi": [ { "type": "impl", @@ -83,16 +106,12 @@ ] }, { - "type": "enum", - "name": "core::bool", - "variants": [ - { - "name": "False", - "type": "()" - }, + "type": "struct", + "name": "core::array::Span::>", + "members": [ { - "name": "True", - "type": "()" + "name": "snapshot", + "type": "@core::array::Array::>" } ] }, @@ -188,6 +207,30 @@ } ] }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "enum", + "name": "core::bool", + "variants": [ + { + "name": "False", + "type": "()" + }, + { + "name": "True", + "type": "()" + } + ] + }, { "type": "interface", "name": "dojo::world::iworld::IWorld", @@ -398,10 +441,26 @@ { "name": "values", "type": "core::array::Span::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "emit_events", + "inputs": [ + { + "name": "event_selector", + "type": "core::felt252" }, { - "name": "historical", - "type": "core::bool" + "name": "keys", + "type": "core::array::Span::>" + }, + { + "name": "values", + "type": "core::array::Span::>" } ], "outputs": [], @@ -431,6 +490,30 @@ ], "state_mutability": "view" }, + { + "type": "function", + "name": "entities", + "inputs": [ + { + "name": "model_selector", + "type": "core::felt252" + }, + { + "name": "indexes", + "type": "core::array::Span::" + }, + { + "name": "layout", + "type": "dojo::meta::layout::Layout" + } + ], + "outputs": [ + { + "type": "core::array::Span::>" + } + ], + "state_mutability": "view" + }, { "type": "function", "name": "set_entity", @@ -455,6 +538,30 @@ "outputs": [], "state_mutability": "external" }, + { + "type": "function", + "name": "set_entities", + "inputs": [ + { + "name": "model_selector", + "type": "core::felt252" + }, + { + "name": "indexes", + "type": "core::array::Span::" + }, + { + "name": "values", + "type": "core::array::Span::>" + }, + { + "name": "layout", + "type": "dojo::meta::layout::Layout" + } + ], + "outputs": [], + "state_mutability": "external" + }, { "type": "function", "name": "delete_entity", @@ -475,6 +582,26 @@ "outputs": [], "state_mutability": "external" }, + { + "type": "function", + "name": "delete_entities", + "inputs": [ + { + "name": "model_selector", + "type": "core::felt252" + }, + { + "name": "indexes", + "type": "core::array::Span::" + }, + { + "name": "layout", + "type": "dojo::meta::layout::Layout" + } + ], + "outputs": [], + "state_mutability": "external" + }, { "type": "function", "name": "is_owner", @@ -849,11 +976,6 @@ "type": "core::starknet::contract_address::ContractAddress", "kind": "key" }, - { - "name": "historical", - "type": "core::bool", - "kind": "key" - }, { "name": "keys", "type": "core::array::Span::", @@ -1121,14 +1243,24 @@ }, "contracts": [ { - "address": "0x20b3efe3ee5116904f4e08ca391715c5bf6703f630b6e91677010e308aebfc1", - "class_hash": "0x3a76e1a2e46f31a17ada7d52f1406ad8b877e639384dd91812012a4314c4935", + "address": "0x58b83bea84766c5725c12e239c1ec9e1fde679ddf709b772fe7a8fdfd3cda27", + "class_hash": "0x3f87eccb39c9dc7bb70d372350f4360ae1ff9da43bd72c89a96e336402a569b", "abi": [ { "type": "impl", "name": "actions__ContractImpl", "interface_name": "dojo::contract::interface::IContract" }, + { + "type": "interface", + "name": "dojo::contract::interface::IContract", + "items": [] + }, + { + "type": "impl", + "name": "actions__DeployedContractImpl", + "interface_name": "dojo::meta::interface::IDeployedResource" + }, { "type": "struct", "name": "core::byte_array::ByteArray", @@ -1149,7 +1281,7 @@ }, { "type": "interface", - "name": "dojo::contract::interface::IContract", + "name": "dojo::meta::interface::IDeployedResource", "items": [ { "type": "function", @@ -1337,31 +1469,40 @@ ], "init_calldata": [], "tag": "dojo_starter-actions", - "systems": [] + "selector": "0x7a1c71029f2d0b38e3ac89b09931d08b6e48417e079c289ff19a8698d0cba33", + "systems": [ + "spawn", + "move", + "upgrade" + ] } ], "models": [ { "members": [], - "class_hash": "0x7ba1920c35f44c82d82d0ff47cbbf04e60226c28027b1a45731aa07bceea9d1", - "tag": "DirectionsAvailable" + "class_hash": "0x7deb48ccf95cc441a0489cfefdae54aeb6f8ec462ba13ff25e23f080e66cc2f", + "tag": "dojo_starter-DirectionsAvailable", + "selector": "0x77844f1facb51e60e546a9832d56c6bd04fa23be4fd5b57290caae5e9a3c1e4" }, { "members": [], - "class_hash": "0x469117d9c5cac8ee02e521addae16a36da3571b2d977971395771d4c2db73e0", - "tag": "Moves" + "class_hash": "0x70edf8f3be0b118e78f856f3ea9ebb652cba3684abaf7f299bfa6f93bf907c9", + "tag": "dojo_starter-Moves", + "selector": "0x2a29373f1af8348bd366a990eb3a342ef2cbe5e85160539eaca3441a673f468" }, { "members": [], - "class_hash": "0x445a1f5bdb78726083b9b577e775e066f6145f0240162d59f105a1251c2b016", - "tag": "Position" + "class_hash": "0x2283c68ecba5c60bbbbd3b00659808a02244468e41a1d2cdba1312d65b83594", + "tag": "dojo_starter-Position", + "selector": "0x2ac8b4c190f7031b9fc44312e6b047a1dce0b3f2957c33a935ca7846a46dd5b" } ], "events": [ { "members": [], - "class_hash": "0x5f6b87c8f5260f907795382b962e1f04ab0e98b754b6946eedcee27921819a9", - "tag": "Moved" + "class_hash": "0x5be0a05a5df3bd3b4fc17f8b1feb395cb463ced20ea41d4fbb9b86a4d7efc66", + "tag": "dojo_starter-Moved", + "selector": "0x504403e5c02b6442527721fc464d9ea5fc8f1ee600ab5ccd5c0845d36fd45f1" } ] } \ No newline at end of file diff --git a/src/tests/test_world.cairo b/src/tests/test_world.cairo index 8b4bc0d..4d3ad29 100644 --- a/src/tests/test_world.cairo +++ b/src/tests/test_world.cairo @@ -1,8 +1,9 @@ #[cfg(test)] mod tests { - use dojo::model::{ModelStorage, ModelValueStorage, ModelStorageTest}; + use dojo_cairo_test::WorldStorageTestTrait; +use dojo::model::{ModelStorage, ModelValueStorage, ModelStorageTest}; use dojo::world::WorldStorageTrait; - use dojo_cairo_test::{spawn_test_world, NamespaceDef, TestResource, ContractDefTrait}; + use dojo_cairo_test::{spawn_test_world, NamespaceDef, TestResource, ContractDefTrait, ContractDef}; use dojo_starter::systems::actions::{actions, IActionsDispatcher, IActionsDispatcherTrait}; use dojo_starter::models::{Position, m_Position, Moves, m_Moves, Direction}; @@ -10,26 +11,35 @@ mod tests { fn namespace_def() -> NamespaceDef { let ndef = NamespaceDef { namespace: "dojo_starter", resources: [ - TestResource::Model(m_Position::TEST_CLASS_HASH.try_into().unwrap()), - TestResource::Model(m_Moves::TEST_CLASS_HASH.try_into().unwrap()), - TestResource::Event(actions::e_Moved::TEST_CLASS_HASH.try_into().unwrap()), - TestResource::Contract( - ContractDefTrait::new(actions::TEST_CLASS_HASH, "actions") - .with_writer_of([dojo::utils::bytearray_hash(@"dojo_starter")].span()) - ) + TestResource::Model(m_Position::TEST_CLASS_HASH), + TestResource::Model(m_Moves::TEST_CLASS_HASH), + TestResource::Event(actions::e_Moved::TEST_CLASS_HASH), + TestResource::Contract(actions::TEST_CLASS_HASH) ].span() }; ndef } + fn contract_defs() -> Span { + [ + ContractDefTrait::new(@"dojo_starter", @"actions") + .with_writer_of([dojo::utils::bytearray_hash(@"dojo_starter")].span()) + ].span() + } + #[test] fn test_world_test_set() { // Initialize test environment let caller = starknet::contract_address_const::<0x0>(); let ndef = namespace_def(); + + // Register the resources. let mut world = spawn_test_world([ndef].span()); + // Ensures permissions and initializations are synced. + world.sync_perms_and_inits(contract_defs()); + // Test initial position let mut position: Position = world.read_model(caller); assert(position.vec.x == 0 && position.vec.y == 0, 'initial position wrong'); @@ -56,6 +66,7 @@ mod tests { let ndef = namespace_def(); let mut world = spawn_test_world([ndef].span()); + world.sync_perms_and_inits(contract_defs()); let (contract_address, _) = world.dns(@"actions").unwrap(); let actions_system = IActionsDispatcher { contract_address };