@latticexyz/world-consumer 2.2.21-581228bd857077023efdb496a9a44fa62ff89936 → 2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"id":"035195f71f276cfc878db57a98c5269a","source_id_to_path":{"0":"node_modules/@latticexyz/gas-report/src/GasReporter.sol","1":"node_modules/@latticexyz/schema-type/src/solidity/SchemaType.sol","2":"node_modules/@latticexyz/store/src/Bytes.sol","3":"node_modules/@latticexyz/store/src/EncodedLengths.sol","4":"node_modules/@latticexyz/store/src/FieldLayout.sol","5":"node_modules/@latticexyz/store/src/Hook.sol","6":"node_modules/@latticexyz/store/src/IERC165.sol","7":"node_modules/@latticexyz/store/src/IEncodedLengthsErrors.sol","8":"node_modules/@latticexyz/store/src/IFieldLayoutErrors.sol","9":"node_modules/@latticexyz/store/src/ISchemaErrors.sol","10":"node_modules/@latticexyz/store/src/ISliceErrors.sol","11":"node_modules/@latticexyz/store/src/IStore.sol","12":"node_modules/@latticexyz/store/src/IStoreErrors.sol","13":"node_modules/@latticexyz/store/src/IStoreEvents.sol","14":"node_modules/@latticexyz/store/src/IStoreHook.sol","15":"node_modules/@latticexyz/store/src/IStoreKernel.sol","16":"node_modules/@latticexyz/store/src/IStoreRead.sol","17":"node_modules/@latticexyz/store/src/IStoreRegistration.sol","18":"node_modules/@latticexyz/store/src/IStoreWrite.sol","19":"node_modules/@latticexyz/store/src/Memory.sol","20":"node_modules/@latticexyz/store/src/ResourceId.sol","21":"node_modules/@latticexyz/store/src/Schema.sol","22":"node_modules/@latticexyz/store/src/Slice.sol","23":"node_modules/@latticexyz/store/src/Storage.sol","24":"node_modules/@latticexyz/store/src/Store.sol","25":"node_modules/@latticexyz/store/src/StoreCore.sol","26":"node_modules/@latticexyz/store/src/StoreKernel.sol","27":"node_modules/@latticexyz/store/src/StoreRead.sol","28":"node_modules/@latticexyz/store/src/StoreSwitch.sol","29":"node_modules/@latticexyz/store/src/codegen/index.sol","30":"node_modules/@latticexyz/store/src/codegen/tables/Hooks.sol","31":"node_modules/@latticexyz/store/src/codegen/tables/ResourceIds.sol","32":"node_modules/@latticexyz/store/src/codegen/tables/StoreHooks.sol","33":"node_modules/@latticexyz/store/src/codegen/tables/Tables.sol","34":"node_modules/@latticexyz/store/src/constants.sol","35":"node_modules/@latticexyz/store/src/rightMask.sol","36":"node_modules/@latticexyz/store/src/storeHookTypes.sol","37":"node_modules/@latticexyz/store/src/storeResourceTypes.sol","38":"node_modules/@latticexyz/store/src/tightcoder/DecodeSlice.sol","39":"node_modules/@latticexyz/store/src/tightcoder/EncodeArray.sol","40":"node_modules/@latticexyz/store/src/tightcoder/TightCoder.sol","41":"node_modules/@latticexyz/store/src/version.sol","42":"node_modules/@latticexyz/world/src/AccessControl.sol","43":"node_modules/@latticexyz/world/src/Delegation.sol","44":"node_modules/@latticexyz/world/src/ERC165Checker.sol","45":"node_modules/@latticexyz/world/src/IDelegationControl.sol","46":"node_modules/@latticexyz/world/src/IERC165.sol","47":"node_modules/@latticexyz/world/src/IModule.sol","48":"node_modules/@latticexyz/world/src/IModuleErrors.sol","49":"node_modules/@latticexyz/world/src/ISystemHook.sol","50":"node_modules/@latticexyz/world/src/IWorldContextConsumer.sol","51":"node_modules/@latticexyz/world/src/IWorldErrors.sol","52":"node_modules/@latticexyz/world/src/IWorldEvents.sol","53":"node_modules/@latticexyz/world/src/IWorldKernel.sol","54":"node_modules/@latticexyz/world/src/Module.sol","55":"node_modules/@latticexyz/world/src/System.sol","56":"node_modules/@latticexyz/world/src/SystemCall.sol","57":"node_modules/@latticexyz/world/src/World.sol","58":"node_modules/@latticexyz/world/src/WorldContext.sol","59":"node_modules/@latticexyz/world/src/WorldResourceId.sol","60":"node_modules/@latticexyz/world/src/codegen/interfaces/IAccessManagementSystem.sol","61":"node_modules/@latticexyz/world/src/codegen/interfaces/IBalanceTransferSystem.sol","62":"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol","63":"node_modules/@latticexyz/world/src/codegen/interfaces/IBatchCallSystem.sol","64":"node_modules/@latticexyz/world/src/codegen/interfaces/IModuleInstallationSystem.sol","65":"node_modules/@latticexyz/world/src/codegen/interfaces/IRegistrationSystem.sol","66":"node_modules/@latticexyz/world/src/codegen/interfaces/IWorldRegistrationSystem.sol","67":"node_modules/@latticexyz/world/src/codegen/tables/Balances.sol","68":"node_modules/@latticexyz/world/src/codegen/tables/FunctionSelectors.sol","69":"node_modules/@latticexyz/world/src/codegen/tables/FunctionSignatures.sol","70":"node_modules/@latticexyz/world/src/codegen/tables/InitModuleAddress.sol","71":"node_modules/@latticexyz/world/src/codegen/tables/InstalledModules.sol","72":"node_modules/@latticexyz/world/src/codegen/tables/NamespaceDelegationControl.sol","73":"node_modules/@latticexyz/world/src/codegen/tables/NamespaceOwner.sol","74":"node_modules/@latticexyz/world/src/codegen/tables/ResourceAccess.sol","75":"node_modules/@latticexyz/world/src/codegen/tables/SystemHooks.sol","76":"node_modules/@latticexyz/world/src/codegen/tables/SystemRegistry.sol","77":"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol","78":"node_modules/@latticexyz/world/src/codegen/tables/UserDelegationControl.sol","79":"node_modules/@latticexyz/world/src/constants.sol","80":"node_modules/@latticexyz/world/src/modules/init/InitModule.sol","81":"node_modules/@latticexyz/world/src/modules/init/LimitedCallContext.sol","82":"node_modules/@latticexyz/world/src/modules/init/RegistrationSystem.sol","83":"node_modules/@latticexyz/world/src/modules/init/constants.sol","84":"node_modules/@latticexyz/world/src/modules/init/functionSignatures.sol","85":"node_modules/@latticexyz/world/src/modules/init/implementations/AccessManagementSystem.sol","86":"node_modules/@latticexyz/world/src/modules/init/implementations/BalanceTransferSystem.sol","87":"node_modules/@latticexyz/world/src/modules/init/implementations/BatchCallSystem.sol","88":"node_modules/@latticexyz/world/src/modules/init/implementations/ModuleInstallationSystem.sol","89":"node_modules/@latticexyz/world/src/modules/init/implementations/StoreRegistrationSystem.sol","90":"node_modules/@latticexyz/world/src/modules/init/implementations/WorldRegistrationSystem.sol","91":"node_modules/@latticexyz/world/src/modules/init/implementations/createDelegation.sol","92":"node_modules/@latticexyz/world/src/modules/init/types.sol","93":"node_modules/@latticexyz/world/src/requireInterface.sol","94":"node_modules/@latticexyz/world/src/requireNamespace.sol","95":"node_modules/@latticexyz/world/src/requireValidNamespace.sol","96":"node_modules/@latticexyz/world/src/revertWithBytes.sol","97":"node_modules/@latticexyz/world/src/systemHookTypes.sol","98":"node_modules/@latticexyz/world/src/version.sol","99":"node_modules/@latticexyz/world/src/worldResourceTypes.sol","100":"node_modules/@latticexyz/world/test/createInitModule.sol","101":"node_modules/@latticexyz/world/test/createWorld.sol","102":"node_modules/forge-std/src/Base.sol","103":"node_modules/forge-std/src/StdAssertions.sol","104":"node_modules/forge-std/src/StdChains.sol","105":"node_modules/forge-std/src/StdCheats.sol","106":"node_modules/forge-std/src/StdError.sol","107":"node_modules/forge-std/src/StdInvariant.sol","108":"node_modules/forge-std/src/StdJson.sol","109":"node_modules/forge-std/src/StdMath.sol","110":"node_modules/forge-std/src/StdStorage.sol","111":"node_modules/forge-std/src/StdStyle.sol","112":"node_modules/forge-std/src/StdToml.sol","113":"node_modules/forge-std/src/StdUtils.sol","114":"node_modules/forge-std/src/Test.sol","115":"node_modules/forge-std/src/Vm.sol","116":"node_modules/forge-std/src/console.sol","117":"node_modules/forge-std/src/console2.sol","118":"node_modules/forge-std/src/interfaces/IERC165.sol","119":"node_modules/forge-std/src/interfaces/IERC20.sol","120":"node_modules/forge-std/src/interfaces/IERC721.sol","121":"node_modules/forge-std/src/interfaces/IMulticall3.sol","122":"node_modules/forge-std/src/mocks/MockERC20.sol","123":"node_modules/forge-std/src/mocks/MockERC721.sol","124":"node_modules/forge-std/src/safeconsole.sol","125":"src/examples/SimpleVault.sol","126":"src/experimental/WorldConsumer.sol","127":"test/WorldConsumer.t.sol"},"language":"Solidity"}
1
+ {"id":"83e2a919446e0dcf0f3773965a164f69","source_id_to_path":{"0":"node_modules/@latticexyz/gas-report/src/GasReporter.sol","1":"node_modules/@latticexyz/schema-type/src/solidity/SchemaType.sol","2":"node_modules/@latticexyz/store/src/Bytes.sol","3":"node_modules/@latticexyz/store/src/EncodedLengths.sol","4":"node_modules/@latticexyz/store/src/FieldLayout.sol","5":"node_modules/@latticexyz/store/src/Hook.sol","6":"node_modules/@latticexyz/store/src/IERC165.sol","7":"node_modules/@latticexyz/store/src/IEncodedLengthsErrors.sol","8":"node_modules/@latticexyz/store/src/IFieldLayoutErrors.sol","9":"node_modules/@latticexyz/store/src/ISchemaErrors.sol","10":"node_modules/@latticexyz/store/src/ISliceErrors.sol","11":"node_modules/@latticexyz/store/src/IStore.sol","12":"node_modules/@latticexyz/store/src/IStoreErrors.sol","13":"node_modules/@latticexyz/store/src/IStoreEvents.sol","14":"node_modules/@latticexyz/store/src/IStoreHook.sol","15":"node_modules/@latticexyz/store/src/IStoreKernel.sol","16":"node_modules/@latticexyz/store/src/IStoreRead.sol","17":"node_modules/@latticexyz/store/src/IStoreRegistration.sol","18":"node_modules/@latticexyz/store/src/IStoreWrite.sol","19":"node_modules/@latticexyz/store/src/Memory.sol","20":"node_modules/@latticexyz/store/src/ResourceId.sol","21":"node_modules/@latticexyz/store/src/Schema.sol","22":"node_modules/@latticexyz/store/src/Slice.sol","23":"node_modules/@latticexyz/store/src/Storage.sol","24":"node_modules/@latticexyz/store/src/Store.sol","25":"node_modules/@latticexyz/store/src/StoreCore.sol","26":"node_modules/@latticexyz/store/src/StoreKernel.sol","27":"node_modules/@latticexyz/store/src/StoreRead.sol","28":"node_modules/@latticexyz/store/src/StoreSwitch.sol","29":"node_modules/@latticexyz/store/src/codegen/index.sol","30":"node_modules/@latticexyz/store/src/codegen/tables/Hooks.sol","31":"node_modules/@latticexyz/store/src/codegen/tables/ResourceIds.sol","32":"node_modules/@latticexyz/store/src/codegen/tables/StoreHooks.sol","33":"node_modules/@latticexyz/store/src/codegen/tables/Tables.sol","34":"node_modules/@latticexyz/store/src/constants.sol","35":"node_modules/@latticexyz/store/src/rightMask.sol","36":"node_modules/@latticexyz/store/src/storeHookTypes.sol","37":"node_modules/@latticexyz/store/src/storeResourceTypes.sol","38":"node_modules/@latticexyz/store/src/tightcoder/DecodeSlice.sol","39":"node_modules/@latticexyz/store/src/tightcoder/EncodeArray.sol","40":"node_modules/@latticexyz/store/src/tightcoder/TightCoder.sol","41":"node_modules/@latticexyz/store/src/version.sol","42":"node_modules/@latticexyz/world/src/AccessControl.sol","43":"node_modules/@latticexyz/world/src/Delegation.sol","44":"node_modules/@latticexyz/world/src/ERC165Checker.sol","45":"node_modules/@latticexyz/world/src/IDelegationControl.sol","46":"node_modules/@latticexyz/world/src/IERC165.sol","47":"node_modules/@latticexyz/world/src/IModule.sol","48":"node_modules/@latticexyz/world/src/IModuleErrors.sol","49":"node_modules/@latticexyz/world/src/ISystemHook.sol","50":"node_modules/@latticexyz/world/src/IWorldContextConsumer.sol","51":"node_modules/@latticexyz/world/src/IWorldErrors.sol","52":"node_modules/@latticexyz/world/src/IWorldEvents.sol","53":"node_modules/@latticexyz/world/src/IWorldKernel.sol","54":"node_modules/@latticexyz/world/src/Module.sol","55":"node_modules/@latticexyz/world/src/System.sol","56":"node_modules/@latticexyz/world/src/SystemCall.sol","57":"node_modules/@latticexyz/world/src/World.sol","58":"node_modules/@latticexyz/world/src/WorldContext.sol","59":"node_modules/@latticexyz/world/src/WorldResourceId.sol","60":"node_modules/@latticexyz/world/src/codegen/interfaces/IAccessManagementSystem.sol","61":"node_modules/@latticexyz/world/src/codegen/interfaces/IBalanceTransferSystem.sol","62":"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol","63":"node_modules/@latticexyz/world/src/codegen/interfaces/IBatchCallSystem.sol","64":"node_modules/@latticexyz/world/src/codegen/interfaces/IModuleInstallationSystem.sol","65":"node_modules/@latticexyz/world/src/codegen/interfaces/IRegistrationSystem.sol","66":"node_modules/@latticexyz/world/src/codegen/interfaces/IWorldRegistrationSystem.sol","67":"node_modules/@latticexyz/world/src/codegen/tables/Balances.sol","68":"node_modules/@latticexyz/world/src/codegen/tables/FunctionSelectors.sol","69":"node_modules/@latticexyz/world/src/codegen/tables/FunctionSignatures.sol","70":"node_modules/@latticexyz/world/src/codegen/tables/InitModuleAddress.sol","71":"node_modules/@latticexyz/world/src/codegen/tables/InstalledModules.sol","72":"node_modules/@latticexyz/world/src/codegen/tables/NamespaceDelegationControl.sol","73":"node_modules/@latticexyz/world/src/codegen/tables/NamespaceOwner.sol","74":"node_modules/@latticexyz/world/src/codegen/tables/ResourceAccess.sol","75":"node_modules/@latticexyz/world/src/codegen/tables/SystemHooks.sol","76":"node_modules/@latticexyz/world/src/codegen/tables/SystemRegistry.sol","77":"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol","78":"node_modules/@latticexyz/world/src/codegen/tables/UserDelegationControl.sol","79":"node_modules/@latticexyz/world/src/constants.sol","80":"node_modules/@latticexyz/world/src/modules/init/InitModule.sol","81":"node_modules/@latticexyz/world/src/modules/init/LimitedCallContext.sol","82":"node_modules/@latticexyz/world/src/modules/init/RegistrationSystem.sol","83":"node_modules/@latticexyz/world/src/modules/init/constants.sol","84":"node_modules/@latticexyz/world/src/modules/init/functionSignatures.sol","85":"node_modules/@latticexyz/world/src/modules/init/implementations/AccessManagementSystem.sol","86":"node_modules/@latticexyz/world/src/modules/init/implementations/BalanceTransferSystem.sol","87":"node_modules/@latticexyz/world/src/modules/init/implementations/BatchCallSystem.sol","88":"node_modules/@latticexyz/world/src/modules/init/implementations/ModuleInstallationSystem.sol","89":"node_modules/@latticexyz/world/src/modules/init/implementations/StoreRegistrationSystem.sol","90":"node_modules/@latticexyz/world/src/modules/init/implementations/WorldRegistrationSystem.sol","91":"node_modules/@latticexyz/world/src/modules/init/implementations/createDelegation.sol","92":"node_modules/@latticexyz/world/src/modules/init/types.sol","93":"node_modules/@latticexyz/world/src/requireInterface.sol","94":"node_modules/@latticexyz/world/src/requireNamespace.sol","95":"node_modules/@latticexyz/world/src/requireValidNamespace.sol","96":"node_modules/@latticexyz/world/src/revertWithBytes.sol","97":"node_modules/@latticexyz/world/src/systemHookTypes.sol","98":"node_modules/@latticexyz/world/src/version.sol","99":"node_modules/@latticexyz/world/src/worldResourceTypes.sol","100":"node_modules/@latticexyz/world/test/createInitModule.sol","101":"node_modules/@latticexyz/world/test/createWorld.sol","102":"node_modules/forge-std/src/Base.sol","103":"node_modules/forge-std/src/StdAssertions.sol","104":"node_modules/forge-std/src/StdChains.sol","105":"node_modules/forge-std/src/StdCheats.sol","106":"node_modules/forge-std/src/StdError.sol","107":"node_modules/forge-std/src/StdInvariant.sol","108":"node_modules/forge-std/src/StdJson.sol","109":"node_modules/forge-std/src/StdMath.sol","110":"node_modules/forge-std/src/StdStorage.sol","111":"node_modules/forge-std/src/StdStyle.sol","112":"node_modules/forge-std/src/StdToml.sol","113":"node_modules/forge-std/src/StdUtils.sol","114":"node_modules/forge-std/src/Test.sol","115":"node_modules/forge-std/src/Vm.sol","116":"node_modules/forge-std/src/console.sol","117":"node_modules/forge-std/src/console2.sol","118":"node_modules/forge-std/src/interfaces/IERC165.sol","119":"node_modules/forge-std/src/interfaces/IERC20.sol","120":"node_modules/forge-std/src/interfaces/IERC721.sol","121":"node_modules/forge-std/src/interfaces/IMulticall3.sol","122":"node_modules/forge-std/src/mocks/MockERC20.sol","123":"node_modules/forge-std/src/mocks/MockERC721.sol","124":"node_modules/forge-std/src/safeconsole.sol","125":"src/examples/SimpleVault.sol","126":"src/experimental/WorldConsumer.sol","127":"test/WorldConsumer.t.sol"},"language":"Solidity"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latticexyz/world-consumer",
3
- "version": "2.2.21-581228bd857077023efdb496a9a44fa62ff89936",
3
+ "version": "2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d",
4
4
  "description": "World Consumer Contracts",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,15 +20,15 @@
20
20
  "src"
21
21
  ],
22
22
  "dependencies": {
23
- "@latticexyz/schema-type": "2.2.21-581228bd857077023efdb496a9a44fa62ff89936",
24
- "@latticexyz/store": "2.2.21-581228bd857077023efdb496a9a44fa62ff89936",
25
- "@latticexyz/world": "2.2.21-581228bd857077023efdb496a9a44fa62ff89936"
23
+ "@latticexyz/schema-type": "2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d",
24
+ "@latticexyz/store": "2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d",
25
+ "@latticexyz/world": "2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d"
26
26
  },
27
27
  "devDependencies": {
28
28
  "forge-std": "https://github.com/foundry-rs/forge-std.git#1eea5bae12ae557d589f9f0f0edae2faa47cb262",
29
29
  "solhint": "^3.3.7",
30
- "@latticexyz/abi-ts": "2.2.21-581228bd857077023efdb496a9a44fa62ff89936",
31
- "@latticexyz/gas-report": "2.2.21-581228bd857077023efdb496a9a44fa62ff89936"
30
+ "@latticexyz/abi-ts": "2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d",
31
+ "@latticexyz/gas-report": "2.2.21-a1b22c2778fe67a4457042f68a7240465c07183d"
32
32
  },
33
33
  "publishConfig": {
34
34
  "access": "public"
@@ -17,15 +17,18 @@ interface IERC20 {
17
17
  /**
18
18
  * @title SimpleVault (NOT AUDITED)
19
19
  * @dev Simple example of a Vault that allows accounts with namespace access to transfer its tokens out
20
- * IMPORTANT: this contract expects an existing namespace
21
20
  */
22
21
  contract SimpleVault is WorldConsumer {
23
22
  error SimpleVault_TransferFailed();
24
23
 
25
- constructor(IBaseWorld world, bytes14 namespace) WorldConsumer(world, namespace, false) {}
24
+ bytes14 immutable namespace;
25
+
26
+ constructor(IBaseWorld world, bytes14 _namespace) WorldConsumer(world) {
27
+ namespace = _namespace;
28
+ }
26
29
 
27
30
  // Only accounts with namespace access (e.g. namespace systems) can transfer the ERC20 tokens held by this contract
28
- function transferTo(IERC20 token, address to, uint256 amount) external onlyWorld {
31
+ function transferTo(IERC20 token, address to, uint256 amount) external onlyNamespace(namespace) {
29
32
  require(token.transfer(to, amount), "Transfer failed");
30
33
  }
31
34
 
@@ -6,65 +6,54 @@ import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol";
6
6
  import { ResourceIds } from "@latticexyz/store/src/codegen/tables/ResourceIds.sol";
7
7
  import { ResourceId } from "@latticexyz/store/src/ResourceId.sol";
8
8
  import { ResourceAccess } from "@latticexyz/world/src/codegen/tables/ResourceAccess.sol";
9
+ import { NamespaceOwner } from "@latticexyz/world/src/codegen/tables/NamespaceOwner.sol";
9
10
  import { IBaseWorld } from "@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol";
10
11
  import { WorldResourceIdLib } from "@latticexyz/world/src/WorldResourceId.sol";
11
12
  import { WorldContextConsumer } from "@latticexyz/world/src/WorldContext.sol";
12
13
  import { System } from "@latticexyz/world/src/System.sol";
13
14
 
14
15
  abstract contract WorldConsumer is System {
15
- bytes14 public immutable namespace;
16
- ResourceId public immutable namespaceId;
17
-
18
16
  error WorldConsumer_RootNamespaceNotAllowed(address worldAddress);
19
- error WorldConsumer_NamespaceAlreadyExists(address worldAddress, bytes14 namespace);
20
- error WorldConsumer_NamespaceDoesNotExists(address worldAddress, bytes14 namespace);
21
17
  error WorldConsumer_CallerHasNoNamespaceAccess(address worldAddress, bytes14 namespace, address caller);
18
+ error WorldConsumer_CallerIsNotNamespaceOwner(address worldAddress, bytes14 namespace, address caller);
22
19
  error WorldConsumer_CallerIsNotWorld(address worldAddress, address caller);
23
20
  error WorldConsumer_ValueNotAllowed(address worldAddress);
24
21
 
25
22
  modifier onlyWorld() {
26
23
  address world = _world();
27
- if (world != msg.sender) {
28
- revert WorldConsumer_CallerIsNotWorld(world, msg.sender);
29
- }
24
+ checkWorldIsCaller(world);
30
25
  _;
31
26
  }
32
27
 
33
- modifier onlyNamespace() {
28
+ modifier onlyNamespace(bytes14 namespace) {
34
29
  address world = _world();
35
- if (world != msg.sender) {
36
- revert WorldConsumer_CallerIsNotWorld(world, msg.sender);
37
- }
30
+ checkWorldIsCaller(world);
38
31
 
39
32
  // We use WorldContextConsumer directly as we already know the world is the caller
40
33
  address sender = WorldContextConsumer._msgSender();
41
- if (!ResourceAccess.get(namespaceId, sender)) {
34
+ if (!ResourceAccess.get(WorldResourceIdLib.encodeNamespace(namespace), sender)) {
42
35
  revert WorldConsumer_CallerHasNoNamespaceAccess(world, namespace, sender);
43
36
  }
44
37
 
45
38
  _;
46
39
  }
47
40
 
48
- constructor(IBaseWorld _world, bytes14 _namespace, bool registerNamespace) {
49
- address worldAddress = address(_world);
50
- StoreSwitch.setStoreAddress(worldAddress);
41
+ modifier onlyNamespaceOwner(bytes14 namespace) {
42
+ address world = _world();
43
+ checkWorldIsCaller(world);
51
44
 
52
- if (_namespace == bytes14(0)) {
53
- revert WorldConsumer_RootNamespaceNotAllowed(worldAddress);
45
+ // We use WorldContextConsumer directly as we already know the world is the caller
46
+ address sender = WorldContextConsumer._msgSender();
47
+ if (NamespaceOwner.get(WorldResourceIdLib.encodeNamespace(namespace)) != sender) {
48
+ revert WorldConsumer_CallerIsNotNamespaceOwner(world, namespace, sender);
54
49
  }
55
50
 
56
- namespace = _namespace;
57
- namespaceId = WorldResourceIdLib.encodeNamespace(_namespace);
58
- bool namespaceExists = ResourceIds.getExists(namespaceId);
51
+ _;
52
+ }
59
53
 
60
- if (registerNamespace) {
61
- if (namespaceExists) {
62
- revert WorldConsumer_NamespaceAlreadyExists(worldAddress, _namespace);
63
- }
64
- _world.registerNamespace(namespaceId);
65
- } else if (!namespaceExists) {
66
- revert WorldConsumer_NamespaceDoesNotExists(worldAddress, _namespace);
67
- }
54
+ constructor(IBaseWorld _world) {
55
+ address worldAddress = address(_world);
56
+ StoreSwitch.setStoreAddress(worldAddress);
68
57
  }
69
58
 
70
59
  function _msgSender() public view virtual override returns (address sender) {
@@ -79,4 +68,10 @@ abstract contract WorldConsumer is System {
79
68
 
80
69
  return WorldContextConsumer._msgValue();
81
70
  }
71
+
72
+ function checkWorldIsCaller(address world) internal view {
73
+ if (world != msg.sender) {
74
+ revert WorldConsumer_CallerIsNotWorld(world, msg.sender);
75
+ }
76
+ }
82
77
  }