Store internals, because it calls
StoreCore.initialize in its constructor.
World's own internals are initialized via the
deploy (opens in a new tab) cli utility (because they would exceed max contract size if called in a constructor).
NamespaceOwner is initialized in World's constructor, because it's needed for module access checks.
NamespaceOwner- maps namespace to its owner's address
ResourceAccess- maps selector (tableId / system selector) and caller address to access flag
InstalledModules- maps name and arguments hash (so a module can be installed multiple times) to the module's address
Systems- maps a system's selector (
name) to its contract addresses and
SystemRegistry- reverse maps a system's address to its selector
SystemHooks- maps a system's selector to an array of table hooks
ResourceType- maps selector to a
Resourceenum value. Helps differentiate between systems, tables, etc, because they all share the same resource pool
FunctionSelectors- maps selector of a function registered on World to its details: function's system namespace, name and selector. The system's function selector can be different from World's function selector.
Internal systems are in
core module's implementations (opens in a new tab) folder, because they're installed by
AccessManagementSystem- grants/revokes access to/from resources
BalanceTransferSystem- handles balance transfers between namespaces and from namespaces to addresses
ModuleInstallationSystem- installation of (non-root) modules in the World
StoreRegistrationSystem- its methods should not be used with the World framework. Surfaces the APIs necessary to register Tables on-chain, but lacks namespaces used by World for better permission checks
WorldRegistrationSystem- surfaces the APIs necessary to register Systems, Tables, and Namespaces on-chain