create-mud 2.0.0-alpha.1.21 → 2.0.0-alpha.1.211

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.
Files changed (229) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +1 -1
  3. package/dist/templates/{minimal/packages/client → phaser}/.eslintrc +1 -3
  4. package/dist/templates/phaser/package.json +28 -0
  5. package/dist/templates/phaser/packages/art/.gitignore +0 -0
  6. package/dist/templates/phaser/packages/art/README.md +33 -0
  7. package/dist/templates/phaser/packages/art/config-sprites.json +21 -0
  8. package/dist/templates/phaser/packages/art/package.json +27 -0
  9. package/dist/templates/phaser/packages/art/scripts/cli.mjs +190 -0
  10. package/dist/templates/phaser/packages/art/scripts/export-tiled-types.ts +292 -0
  11. package/dist/templates/phaser/packages/art/sprites/golem/attack/0.png +0 -0
  12. package/dist/templates/phaser/packages/art/sprites/golem/attack/1.png +0 -0
  13. package/dist/templates/phaser/packages/art/sprites/golem/attack/2.png +0 -0
  14. package/dist/templates/phaser/packages/art/sprites/golem/attack/3.png +0 -0
  15. package/dist/templates/phaser/packages/art/sprites/golem/attack/4.png +0 -0
  16. package/dist/templates/phaser/packages/art/sprites/golem/attack/5.png +0 -0
  17. package/dist/templates/phaser/packages/art/sprites/golem/death/0.png +0 -0
  18. package/dist/templates/phaser/packages/art/sprites/golem/death/1.png +0 -0
  19. package/dist/templates/phaser/packages/art/sprites/golem/death/2.png +0 -0
  20. package/dist/templates/phaser/packages/art/sprites/golem/idle/0.png +0 -0
  21. package/dist/templates/phaser/packages/art/sprites/golem/idle/1.png +0 -0
  22. package/dist/templates/phaser/packages/art/sprites/golem/idle/2.png +0 -0
  23. package/dist/templates/phaser/packages/art/sprites/golem/idle/3.png +0 -0
  24. package/dist/templates/phaser/packages/art/tilesets/images/world.png +0 -0
  25. package/dist/templates/phaser/packages/art/tilesets/world.tsx +19 -0
  26. package/dist/templates/phaser/packages/client/.env +1 -0
  27. package/dist/templates/phaser/packages/client/.eslintrc +7 -0
  28. package/dist/templates/phaser/packages/client/index.html +39 -0
  29. package/dist/templates/phaser/packages/client/package.json +48 -0
  30. package/dist/templates/phaser/packages/client/public/assets/atlases/atlas.json +292 -0
  31. package/dist/templates/phaser/packages/client/public/assets/atlases/atlas.png +0 -0
  32. package/dist/templates/phaser/packages/client/public/assets/tilesets/world.png +0 -0
  33. package/dist/templates/phaser/packages/client/src/artTypes/world.ts +9 -0
  34. package/dist/templates/phaser/packages/client/src/index.tsx +11 -0
  35. package/dist/templates/phaser/packages/client/src/layers/network/createNetworkLayer.ts +24 -0
  36. package/dist/templates/phaser/packages/client/src/layers/phaser/configurePhaser.ts +91 -0
  37. package/dist/templates/phaser/packages/client/src/layers/phaser/constants.ts +22 -0
  38. package/dist/templates/phaser/packages/client/src/layers/phaser/createPhaserLayer.ts +33 -0
  39. package/dist/templates/phaser/packages/client/src/layers/phaser/systems/createCamera.ts +13 -0
  40. package/dist/templates/phaser/packages/client/src/layers/phaser/systems/createMapSystem.ts +32 -0
  41. package/dist/templates/phaser/packages/client/src/layers/phaser/systems/index.ts +1 -0
  42. package/dist/templates/phaser/packages/client/src/layers/phaser/systems/registerSystems.ts +8 -0
  43. package/dist/templates/phaser/packages/client/src/mud/contractComponents.ts +24 -0
  44. package/dist/templates/phaser/packages/client/src/mud/createClientComponents.ts +10 -0
  45. package/dist/templates/phaser/packages/client/src/mud/createSystemCalls.ts +21 -0
  46. package/dist/templates/phaser/packages/client/src/mud/getNetworkConfig.ts +53 -0
  47. package/dist/templates/phaser/packages/client/src/mud/setup.ts +16 -0
  48. package/dist/templates/phaser/packages/client/src/mud/setupNetwork.ts +102 -0
  49. package/dist/templates/phaser/packages/client/src/mud/supportedChains.ts +5 -0
  50. package/dist/templates/phaser/packages/client/src/mud/world.ts +3 -0
  51. package/dist/templates/phaser/packages/client/src/store.ts +38 -0
  52. package/dist/templates/phaser/packages/client/src/ui/App.tsx +23 -0
  53. package/dist/templates/phaser/packages/client/src/ui/LoadingScreen/BootScreen.tsx +42 -0
  54. package/dist/templates/phaser/packages/client/src/ui/LoadingScreen/LoadingBar.tsx +21 -0
  55. package/dist/templates/phaser/packages/client/src/ui/LoadingScreen/LoadingScreen.tsx +52 -0
  56. package/dist/templates/phaser/packages/client/src/ui/LoadingScreen/index.ts +1 -0
  57. package/dist/templates/phaser/packages/client/src/ui/PhaserLayer.tsx +20 -0
  58. package/dist/templates/phaser/packages/client/src/ui/UIRoot.tsx +20 -0
  59. package/dist/templates/phaser/packages/client/src/ui/Wrapper.tsx +5 -0
  60. package/dist/templates/phaser/packages/client/src/ui/hooks/useNetworkLayer.tsx +17 -0
  61. package/dist/templates/phaser/packages/client/src/ui/hooks/usePhaserLayer.tsx +87 -0
  62. package/dist/templates/phaser/packages/client/src/ui/hooks/usePromiseValue.ts +24 -0
  63. package/dist/templates/phaser/packages/client/src/ui/theme/ClickWrapper.tsx +18 -0
  64. package/dist/templates/phaser/packages/client/src/ui/theme/SpriteImage.tsx +52 -0
  65. package/dist/templates/{minimal → phaser}/packages/client/tsconfig.json +3 -4
  66. package/dist/templates/phaser/packages/client/vite.config.ts +15 -0
  67. package/dist/templates/phaser/packages/contracts/.env +8 -0
  68. package/dist/templates/{minimal → phaser}/packages/contracts/.gitignore +3 -2
  69. package/dist/templates/{minimal → phaser}/packages/contracts/.solhint.json +2 -1
  70. package/dist/templates/phaser/packages/contracts/foundry.toml +22 -0
  71. package/dist/templates/phaser/packages/contracts/mud.config.ts +10 -0
  72. package/dist/templates/phaser/packages/contracts/package.json +45 -0
  73. package/dist/templates/phaser/packages/contracts/remappings.txt +3 -0
  74. package/dist/templates/phaser/packages/contracts/script/PostDeploy.s.sol +17 -0
  75. package/dist/templates/phaser/packages/contracts/src/codegen/Tables.sol +6 -0
  76. package/dist/templates/phaser/packages/contracts/src/codegen/tables/Counter.sol +120 -0
  77. package/dist/templates/phaser/packages/contracts/src/codegen/world/IIncrementSystem.sol +8 -0
  78. package/dist/templates/phaser/packages/contracts/src/codegen/world/IWorld.sol +16 -0
  79. package/dist/templates/phaser/packages/contracts/src/systems/IncrementSystem.sol +14 -0
  80. package/dist/templates/phaser/packages/contracts/test/CounterTest.t.sol +38 -0
  81. package/dist/templates/phaser/packages/contracts/tsconfig.json +13 -0
  82. package/dist/templates/phaser/packages/contracts/worlds.json +5 -0
  83. package/dist/templates/react/.eslintrc +10 -0
  84. package/dist/templates/react/package.json +13 -3
  85. package/dist/templates/react/packages/client/.env +1 -0
  86. package/dist/templates/react/packages/client/.eslintrc +2 -12
  87. package/dist/templates/react/packages/client/package.json +18 -21
  88. package/dist/templates/react/packages/client/src/App.tsx +11 -13
  89. package/dist/templates/react/packages/client/src/MUDContext.tsx +21 -0
  90. package/dist/templates/react/packages/client/src/index.tsx +12 -31
  91. package/dist/templates/react/packages/client/src/mud/contractComponents.ts +24 -0
  92. package/dist/templates/react/packages/client/src/mud/createClientComponents.ts +10 -0
  93. package/dist/templates/react/packages/client/src/mud/createSystemCalls.ts +21 -0
  94. package/dist/templates/react/packages/client/src/mud/getNetworkConfig.ts +53 -0
  95. package/dist/templates/react/packages/client/src/mud/setup.ts +16 -0
  96. package/dist/templates/react/packages/client/src/mud/setupNetwork.ts +102 -0
  97. package/dist/templates/react/packages/client/src/mud/supportedChains.ts +5 -0
  98. package/dist/templates/react/packages/client/src/mud/world.ts +3 -0
  99. package/dist/templates/react/packages/client/tsconfig.json +0 -3
  100. package/dist/templates/react/packages/client/vite.config.ts +3 -0
  101. package/dist/templates/react/packages/contracts/.env +8 -0
  102. package/dist/templates/react/packages/contracts/.gitignore +3 -2
  103. package/dist/templates/react/packages/contracts/.solhint.json +2 -1
  104. package/dist/templates/react/packages/contracts/foundry.toml +13 -2
  105. package/dist/templates/react/packages/contracts/mud.config.ts +10 -0
  106. package/dist/templates/react/packages/contracts/package.json +25 -20
  107. package/dist/templates/react/packages/contracts/remappings.txt +3 -9
  108. package/dist/templates/react/packages/contracts/script/PostDeploy.s.sol +24 -0
  109. package/dist/templates/react/packages/contracts/src/codegen/Tables.sol +6 -0
  110. package/dist/templates/react/packages/contracts/src/codegen/tables/Counter.sol +120 -0
  111. package/dist/templates/react/packages/contracts/src/codegen/world/IIncrementSystem.sol +8 -0
  112. package/dist/templates/react/packages/contracts/src/codegen/world/IWorld.sol +16 -0
  113. package/dist/templates/react/packages/contracts/src/systems/IncrementSystem.sol +7 -15
  114. package/dist/templates/react/packages/contracts/test/CounterTest.t.sol +38 -0
  115. package/dist/templates/react/packages/contracts/tsconfig.json +9 -8
  116. package/dist/templates/react/packages/contracts/worlds.json +5 -0
  117. package/dist/templates/threejs/.eslintrc +10 -0
  118. package/dist/templates/threejs/.gitignore +1 -0
  119. package/dist/templates/threejs/.vscode/extensions.json +3 -0
  120. package/dist/templates/threejs/.vscode/settings.json +3 -0
  121. package/dist/templates/threejs/package.json +28 -0
  122. package/dist/templates/threejs/packages/client/.env +1 -0
  123. package/dist/templates/threejs/packages/client/.eslintrc +7 -0
  124. package/dist/templates/threejs/packages/client/.gitignore +3 -0
  125. package/dist/templates/threejs/packages/client/index.html +12 -0
  126. package/dist/templates/threejs/packages/client/package.json +41 -0
  127. package/dist/templates/threejs/packages/client/src/App.tsx +81 -0
  128. package/dist/templates/threejs/packages/client/src/MUDContext.tsx +21 -0
  129. package/dist/templates/threejs/packages/client/src/index.tsx +19 -0
  130. package/dist/templates/threejs/packages/client/src/mud/contractComponents.ts +26 -0
  131. package/dist/templates/threejs/packages/client/src/mud/createClientComponents.ts +10 -0
  132. package/dist/templates/threejs/packages/client/src/mud/createSystemCalls.ts +15 -0
  133. package/dist/templates/threejs/packages/client/src/mud/getNetworkConfig.ts +53 -0
  134. package/dist/templates/threejs/packages/client/src/mud/setup.ts +16 -0
  135. package/dist/templates/threejs/packages/client/src/mud/setupNetwork.ts +102 -0
  136. package/dist/templates/threejs/packages/client/src/mud/supportedChains.ts +5 -0
  137. package/dist/templates/threejs/packages/client/src/mud/world.ts +3 -0
  138. package/dist/templates/threejs/packages/client/src/useKeyboardMovement.ts +60 -0
  139. package/dist/templates/threejs/packages/client/tsconfig.json +19 -0
  140. package/dist/templates/threejs/packages/client/vite.config.ts +15 -0
  141. package/dist/templates/threejs/packages/contracts/.env +8 -0
  142. package/dist/templates/threejs/packages/contracts/.gitignore +11 -0
  143. package/dist/templates/threejs/packages/contracts/.prettierrc +8 -0
  144. package/dist/templates/threejs/packages/contracts/.solhint.json +12 -0
  145. package/dist/templates/threejs/packages/contracts/foundry.toml +22 -0
  146. package/dist/templates/threejs/packages/contracts/mud.config.ts +13 -0
  147. package/dist/templates/threejs/packages/contracts/package.json +45 -0
  148. package/dist/templates/threejs/packages/contracts/remappings.txt +3 -0
  149. package/dist/templates/threejs/packages/contracts/src/codegen/Tables.sol +6 -0
  150. package/dist/templates/threejs/packages/contracts/src/codegen/tables/Position.sol +263 -0
  151. package/dist/templates/threejs/packages/contracts/src/codegen/world/IMoveSystem.sol +8 -0
  152. package/dist/templates/threejs/packages/contracts/src/codegen/world/IWorld.sol +16 -0
  153. package/dist/templates/threejs/packages/contracts/src/systems/MoveSystem.sol +25 -0
  154. package/dist/templates/threejs/packages/contracts/tsconfig.json +13 -0
  155. package/dist/templates/threejs/packages/contracts/worlds.json +5 -0
  156. package/dist/templates/threejs/pnpm-workspace.yaml +2 -0
  157. package/dist/templates/vanilla/.eslintrc +10 -0
  158. package/dist/templates/vanilla/.gitignore +1 -0
  159. package/dist/templates/vanilla/.vscode/extensions.json +3 -0
  160. package/dist/templates/vanilla/.vscode/settings.json +3 -0
  161. package/dist/templates/vanilla/package.json +28 -0
  162. package/dist/templates/vanilla/packages/client/.env +1 -0
  163. package/dist/templates/vanilla/packages/client/.gitignore +3 -0
  164. package/dist/templates/vanilla/packages/client/package.json +32 -0
  165. package/dist/templates/vanilla/packages/client/src/index.ts +22 -0
  166. package/dist/templates/vanilla/packages/client/src/mud/contractComponents.ts +24 -0
  167. package/dist/templates/vanilla/packages/client/src/mud/createClientComponents.ts +10 -0
  168. package/dist/templates/vanilla/packages/client/src/mud/createSystemCalls.ts +21 -0
  169. package/dist/templates/vanilla/packages/client/src/mud/getNetworkConfig.ts +53 -0
  170. package/dist/templates/vanilla/packages/client/src/mud/setup.ts +16 -0
  171. package/dist/templates/vanilla/packages/client/src/mud/setupNetwork.ts +102 -0
  172. package/dist/templates/vanilla/packages/client/src/mud/supportedChains.ts +5 -0
  173. package/dist/templates/vanilla/packages/client/src/mud/world.ts +3 -0
  174. package/dist/templates/vanilla/packages/client/tsconfig.json +18 -0
  175. package/dist/templates/{minimal → vanilla}/packages/client/vite.config.ts +3 -0
  176. package/dist/templates/vanilla/packages/contracts/.env +8 -0
  177. package/dist/templates/vanilla/packages/contracts/.gitignore +11 -0
  178. package/dist/templates/vanilla/packages/contracts/.prettierrc +8 -0
  179. package/dist/templates/vanilla/packages/contracts/.solhint.json +12 -0
  180. package/dist/templates/vanilla/packages/contracts/foundry.toml +22 -0
  181. package/dist/templates/vanilla/packages/contracts/mud.config.ts +10 -0
  182. package/dist/templates/vanilla/packages/contracts/package.json +45 -0
  183. package/dist/templates/vanilla/packages/contracts/remappings.txt +3 -0
  184. package/dist/templates/vanilla/packages/contracts/script/PostDeploy.s.sol +24 -0
  185. package/dist/templates/vanilla/packages/contracts/src/codegen/Tables.sol +6 -0
  186. package/dist/templates/vanilla/packages/contracts/src/codegen/tables/Counter.sol +120 -0
  187. package/dist/templates/vanilla/packages/contracts/src/codegen/world/IIncrementSystem.sol +8 -0
  188. package/dist/templates/vanilla/packages/contracts/src/codegen/world/IWorld.sol +16 -0
  189. package/dist/templates/vanilla/packages/contracts/src/systems/IncrementSystem.sol +14 -0
  190. package/dist/templates/vanilla/packages/contracts/test/CounterTest.t.sol +38 -0
  191. package/dist/templates/vanilla/packages/contracts/tsconfig.json +13 -0
  192. package/dist/templates/vanilla/packages/contracts/worlds.json +5 -0
  193. package/dist/templates/vanilla/pnpm-workspace.yaml +2 -0
  194. package/package.json +14 -11
  195. package/dist/templates/minimal/package.json +0 -18
  196. package/dist/templates/minimal/packages/client/package.json +0 -37
  197. package/dist/templates/minimal/packages/client/src/config.ts +0 -22
  198. package/dist/templates/minimal/packages/client/src/index.ts +0 -37
  199. package/dist/templates/minimal/packages/contracts/chainSpec.json +0 -5
  200. package/dist/templates/minimal/packages/contracts/deploy.json +0 -4
  201. package/dist/templates/minimal/packages/contracts/exports.sh +0 -22
  202. package/dist/templates/minimal/packages/contracts/foundry.toml +0 -11
  203. package/dist/templates/minimal/packages/contracts/package.json +0 -40
  204. package/dist/templates/minimal/packages/contracts/remappings.txt +0 -9
  205. package/dist/templates/minimal/packages/contracts/src/components/CounterComponent.sol +0 -9
  206. package/dist/templates/minimal/packages/contracts/src/libraries/LibMath.sol +0 -10
  207. package/dist/templates/minimal/packages/contracts/src/systems/IncrementSystem.sol +0 -22
  208. package/dist/templates/minimal/packages/contracts/src/systems/README.md +0 -7
  209. package/dist/templates/minimal/packages/contracts/src/test/Deploy.sol +0 -19
  210. package/dist/templates/minimal/packages/contracts/src/test/Deploy.t.sol +0 -14
  211. package/dist/templates/minimal/packages/contracts/src/test/LibDeploy.sol +0 -22
  212. package/dist/templates/minimal/packages/contracts/tsconfig.json +0 -12
  213. package/dist/templates/react/packages/client/src/config.ts +0 -22
  214. package/dist/templates/react/packages/contracts/chainSpec.json +0 -5
  215. package/dist/templates/react/packages/contracts/deploy.json +0 -4
  216. package/dist/templates/react/packages/contracts/exports.sh +0 -22
  217. package/dist/templates/react/packages/contracts/src/components/CounterComponent.sol +0 -9
  218. package/dist/templates/react/packages/contracts/src/libraries/LibMath.sol +0 -10
  219. package/dist/templates/react/packages/contracts/src/systems/README.md +0 -7
  220. package/dist/templates/react/packages/contracts/src/test/Deploy.sol +0 -19
  221. package/dist/templates/react/packages/contracts/src/test/Deploy.t.sol +0 -14
  222. package/dist/templates/react/packages/contracts/src/test/LibDeploy.sol +0 -22
  223. /package/dist/templates/{minimal → phaser}/.gitignore +0 -0
  224. /package/dist/templates/{minimal → phaser}/.vscode/extensions.json +0 -0
  225. /package/dist/templates/{minimal → phaser}/.vscode/settings.json +0 -0
  226. /package/dist/templates/{minimal → phaser}/packages/client/.gitignore +0 -0
  227. /package/dist/templates/{minimal → phaser}/packages/contracts/.prettierrc +0 -0
  228. /package/dist/templates/{minimal → phaser}/pnpm-workspace.yaml +0 -0
  229. /package/dist/templates/{minimal → vanilla}/packages/client/index.html +0 -0
@@ -0,0 +1,15 @@
1
+ import { defineConfig } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: {
7
+ port: 3000,
8
+ fs: {
9
+ strict: false,
10
+ },
11
+ },
12
+ build: {
13
+ target: "es2022",
14
+ },
15
+ });
@@ -0,0 +1,8 @@
1
+ # This .env file is for demonstration purposes only.
2
+ #
3
+ # This should usually be excluded via .gitignore and the env vars attached to
4
+ # your deployment enviroment, but we're including this here for ease of local
5
+ # development. Please do not commit changes to this file!
6
+ #
7
+ # Anvil default private key:
8
+ PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
@@ -3,8 +3,9 @@ cache/
3
3
  node_modules/
4
4
  bindings/
5
5
  artifacts/
6
- deployments
7
6
  abi/
8
7
  types/
9
8
  broadcast/
10
- .env
9
+
10
+ # Ignore MUD deploy artifacts
11
+ deploys/**/*.json
@@ -1,5 +1,6 @@
1
1
  {
2
- "extends": "solhint:recommended",
2
+ "extends": ["solhint:recommended", "mud"],
3
+ "plugins": ["mud"],
3
4
  "rules": {
4
5
  "compiler-version": ["error", ">=0.8.0"],
5
6
  "avoid-low-level-calls": "off",
@@ -0,0 +1,22 @@
1
+ [profile.default]
2
+ solc_version = "0.8.13"
3
+ ffi = false
4
+ fuzz_runs = 256
5
+ optimizer = true
6
+ optimizer_runs = 3000
7
+ verbosity = 2
8
+ src = "src"
9
+ test = "test"
10
+ out = "out"
11
+ allow_paths = ["../../node_modules", "../../../../packages"]
12
+ extra_output_files = [
13
+ "abi",
14
+ "evm.bytecode"
15
+ ]
16
+ fs_permissions = [{ access = "read", path = "./"}]
17
+
18
+ [profile.lattice-testnet]
19
+ eth_rpc_url = "https://follower.testnet-chain.linfra.xyz"
20
+
21
+ [profile.hackathon-testnet]
22
+ eth_rpc_url = "https://lattice-goerli-sequencer.optimism.io"
@@ -0,0 +1,10 @@
1
+ import { mudConfig } from "@latticexyz/world/register";
2
+
3
+ export default mudConfig({
4
+ tables: {
5
+ Counter: {
6
+ keySchema: {},
7
+ schema: "uint32",
8
+ },
9
+ },
10
+ });
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "contracts",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "license": "MIT",
6
+ "scripts": {
7
+ "build": "forge clean && forge build",
8
+ "deploy": "pnpm run initialize && mud deploy",
9
+ "deploy:hackathon": "pnpm run initialize && mud deploy --profile=hackathon-testnet",
10
+ "deploy:testnet": "pnpm run initialize && mud deploy --profile=lattice-testnet",
11
+ "dev": "pnpm mud dev-contracts --tsgenOutput ../client/src/mud",
12
+ "initialize": "pnpm run tablegen && pnpm run worldgen && pnpm run build && pnpm run worldtypes && pnpm run tsgen",
13
+ "lint": "pnpm run prettier && pnpm run solhint",
14
+ "prettier": "prettier --write 'src/**/*.sol'",
15
+ "solhint": "solhint --config ./.solhint.json 'src/**/*.sol' --fix",
16
+ "tablegen": "mud tablegen",
17
+ "test": "tsc --noEmit && mud test",
18
+ "tsgen": "mud tsgen --configPath mud.config.ts --out ../client/src/mud",
19
+ "worldgen": "mud worldgen",
20
+ "worldtypes": "rimraf types && typechain --target=ethers-v5 out/IWorld.sol/IWorld.json"
21
+ },
22
+ "dependencies": {
23
+ "@ethersproject/abi": "^5.7.0",
24
+ "@ethersproject/bytes": "^5.7.0",
25
+ "@ethersproject/providers": "^5.7.2",
26
+ "@latticexyz/cli": "{{mud-version}}",
27
+ "@latticexyz/schema-type": "{{mud-version}}",
28
+ "@latticexyz/std-contracts": "{{mud-version}}",
29
+ "@latticexyz/store": "{{mud-version}}",
30
+ "@latticexyz/world": "{{mud-version}}",
31
+ "ethers": "^5.7.2"
32
+ },
33
+ "devDependencies": {
34
+ "@typechain/ethers-v5": "^10.2.0",
35
+ "@types/node": "^18.15.11",
36
+ "ds-test": "https://github.com/dapphub/ds-test.git#c9ce3f25bde29fc5eb9901842bf02850dfd2d084",
37
+ "forge-std": "https://github.com/foundry-rs/forge-std.git#b4f121555729b3afb3c5ffccb62ff4b6e2818fd3",
38
+ "prettier": "^2.6.2",
39
+ "prettier-plugin-solidity": "^1.0.0-beta.19",
40
+ "solhint": "^3.3.7",
41
+ "solhint-config-mud": "{{mud-version}}",
42
+ "solhint-plugin-mud": "{{mud-version}}",
43
+ "typechain": "^8.1.1"
44
+ }
45
+ }
@@ -0,0 +1,3 @@
1
+ ds-test/=./node_modules/ds-test/src/
2
+ forge-std/=./node_modules/forge-std/src/
3
+ @latticexyz/=./node_modules/@latticexyz/
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ import { Script } from "forge-std/Script.sol";
5
+ import { console } from "forge-std/console.sol";
6
+ import { IWorld } from "../src/codegen/world/IWorld.sol";
7
+
8
+ contract PostDeploy is Script {
9
+ function run(address worldAddress) external {
10
+ // Load the private key from the `PRIVATE_KEY` environment variable (in .env)
11
+ uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
12
+
13
+ // Start broadcasting transactions from the deployer account
14
+ vm.startBroadcast(deployerPrivateKey);
15
+ vm.stopBroadcast();
16
+ }
17
+ }
@@ -0,0 +1,6 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ import { Counter, CounterTableId } from "./tables/Counter.sol";
@@ -0,0 +1,120 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ // Import schema type
7
+ import { SchemaType } from "@latticexyz/schema-type/src/solidity/SchemaType.sol";
8
+
9
+ // Import store internals
10
+ import { IStore } from "@latticexyz/store/src/IStore.sol";
11
+ import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol";
12
+ import { StoreCore } from "@latticexyz/store/src/StoreCore.sol";
13
+ import { Bytes } from "@latticexyz/store/src/Bytes.sol";
14
+ import { Memory } from "@latticexyz/store/src/Memory.sol";
15
+ import { SliceLib } from "@latticexyz/store/src/Slice.sol";
16
+ import { EncodeArray } from "@latticexyz/store/src/tightcoder/EncodeArray.sol";
17
+ import { Schema, SchemaLib } from "@latticexyz/store/src/Schema.sol";
18
+ import { PackedCounter, PackedCounterLib } from "@latticexyz/store/src/PackedCounter.sol";
19
+
20
+ bytes32 constant _tableId = bytes32(abi.encodePacked(bytes16(""), bytes16("Counter")));
21
+ bytes32 constant CounterTableId = _tableId;
22
+
23
+ library Counter {
24
+ /** Get the table's schema */
25
+ function getSchema() internal pure returns (Schema) {
26
+ SchemaType[] memory _schema = new SchemaType[](1);
27
+ _schema[0] = SchemaType.UINT32;
28
+
29
+ return SchemaLib.encode(_schema);
30
+ }
31
+
32
+ function getKeySchema() internal pure returns (Schema) {
33
+ SchemaType[] memory _schema = new SchemaType[](0);
34
+
35
+ return SchemaLib.encode(_schema);
36
+ }
37
+
38
+ /** Get the table's metadata */
39
+ function getMetadata() internal pure returns (string memory, string[] memory) {
40
+ string[] memory _fieldNames = new string[](1);
41
+ _fieldNames[0] = "value";
42
+ return ("Counter", _fieldNames);
43
+ }
44
+
45
+ /** Register the table's schema */
46
+ function registerSchema() internal {
47
+ StoreSwitch.registerSchema(_tableId, getSchema(), getKeySchema());
48
+ }
49
+
50
+ /** Register the table's schema (using the specified store) */
51
+ function registerSchema(IStore _store) internal {
52
+ _store.registerSchema(_tableId, getSchema(), getKeySchema());
53
+ }
54
+
55
+ /** Set the table's metadata */
56
+ function setMetadata() internal {
57
+ (string memory _tableName, string[] memory _fieldNames) = getMetadata();
58
+ StoreSwitch.setMetadata(_tableId, _tableName, _fieldNames);
59
+ }
60
+
61
+ /** Set the table's metadata (using the specified store) */
62
+ function setMetadata(IStore _store) internal {
63
+ (string memory _tableName, string[] memory _fieldNames) = getMetadata();
64
+ _store.setMetadata(_tableId, _tableName, _fieldNames);
65
+ }
66
+
67
+ /** Get value */
68
+ function get() internal view returns (uint32 value) {
69
+ bytes32[] memory _keyTuple = new bytes32[](0);
70
+
71
+ bytes memory _blob = StoreSwitch.getField(_tableId, _keyTuple, 0);
72
+ return (uint32(Bytes.slice4(_blob, 0)));
73
+ }
74
+
75
+ /** Get value (using the specified store) */
76
+ function get(IStore _store) internal view returns (uint32 value) {
77
+ bytes32[] memory _keyTuple = new bytes32[](0);
78
+
79
+ bytes memory _blob = _store.getField(_tableId, _keyTuple, 0);
80
+ return (uint32(Bytes.slice4(_blob, 0)));
81
+ }
82
+
83
+ /** Set value */
84
+ function set(uint32 value) internal {
85
+ bytes32[] memory _keyTuple = new bytes32[](0);
86
+
87
+ StoreSwitch.setField(_tableId, _keyTuple, 0, abi.encodePacked((value)));
88
+ }
89
+
90
+ /** Set value (using the specified store) */
91
+ function set(IStore _store, uint32 value) internal {
92
+ bytes32[] memory _keyTuple = new bytes32[](0);
93
+
94
+ _store.setField(_tableId, _keyTuple, 0, abi.encodePacked((value)));
95
+ }
96
+
97
+ /** Tightly pack full data using this table's schema */
98
+ function encode(uint32 value) internal view returns (bytes memory) {
99
+ return abi.encodePacked(value);
100
+ }
101
+
102
+ /** Encode keys as a bytes32 array using this table's schema */
103
+ function encodeKeyTuple() internal pure returns (bytes32[] memory _keyTuple) {
104
+ _keyTuple = new bytes32[](0);
105
+ }
106
+
107
+ /* Delete all data for given keys */
108
+ function deleteRecord() internal {
109
+ bytes32[] memory _keyTuple = new bytes32[](0);
110
+
111
+ StoreSwitch.deleteRecord(_tableId, _keyTuple);
112
+ }
113
+
114
+ /* Delete all data for given keys (using the specified store) */
115
+ function deleteRecord(IStore _store) internal {
116
+ bytes32[] memory _keyTuple = new bytes32[](0);
117
+
118
+ _store.deleteRecord(_tableId, _keyTuple);
119
+ }
120
+ }
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ interface IIncrementSystem {
7
+ function increment() external returns (uint32);
8
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ import { IBaseWorld } from "@latticexyz/world/src/interfaces/IBaseWorld.sol";
7
+
8
+ import { IIncrementSystem } from "./IIncrementSystem.sol";
9
+
10
+ /**
11
+ * The IWorld interface includes all systems dynamically added to the World
12
+ * during the deploy process.
13
+ */
14
+ interface IWorld is IBaseWorld, IIncrementSystem {
15
+
16
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ import { System } from "@latticexyz/world/src/System.sol";
5
+ import { Counter } from "../codegen/Tables.sol";
6
+
7
+ contract IncrementSystem is System {
8
+ function increment() public returns (uint32) {
9
+ uint32 counter = Counter.get();
10
+ uint32 newValue = counter + 1;
11
+ Counter.set(newValue);
12
+ return newValue;
13
+ }
14
+ }
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ import "forge-std/Test.sol";
5
+ import { MudV2Test } from "@latticexyz/std-contracts/src/test/MudV2Test.t.sol";
6
+ import { getKeysWithValue } from "@latticexyz/world/src/modules/keyswithvalue/getKeysWithValue.sol";
7
+
8
+ import { IWorld } from "../src/codegen/world/IWorld.sol";
9
+ import { Counter, CounterTableId } from "../src/codegen/Tables.sol";
10
+
11
+ contract CounterTest is MudV2Test {
12
+ IWorld public world;
13
+
14
+ function setUp() public override {
15
+ super.setUp();
16
+ world = IWorld(worldAddress);
17
+ }
18
+
19
+ function testWorldExists() public {
20
+ uint256 codeSize;
21
+ address addr = worldAddress;
22
+ assembly {
23
+ codeSize := extcodesize(addr)
24
+ }
25
+ assertTrue(codeSize > 0);
26
+ }
27
+
28
+ function testCounter() public {
29
+ // Expect the counter to be 1 because it was incremented in the PostDeploy script.
30
+ uint32 counter = Counter.get(world);
31
+ assertEq(counter, 1);
32
+
33
+ // Expect the counter to be 2 after calling increment.
34
+ world.increment();
35
+ counter = Counter.get(world);
36
+ assertEq(counter, 2);
37
+ }
38
+ }
@@ -0,0 +1,13 @@
1
+ // Visit https://aka.ms/tsconfig.json for all config options
2
+ {
3
+ "compilerOptions": {
4
+ "target": "ES2020",
5
+ "module": "commonjs",
6
+ "strict": true,
7
+ "resolveJsonModule": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "moduleResolution": "node"
12
+ }
13
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "31337": {
3
+ "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
4
+ }
5
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "root": true,
3
+ "parser": "@typescript-eslint/parser",
4
+ "plugins": ["@typescript-eslint"],
5
+ "extends": [
6
+ "eslint:recommended",
7
+ "plugin:@typescript-eslint/eslint-recommended",
8
+ "plugin:@typescript-eslint/recommended"
9
+ ]
10
+ }
@@ -3,13 +3,23 @@
3
3
  "private": true,
4
4
  "scripts": {
5
5
  "build": "pnpm recursive run build",
6
- "dev": "run-pty % pnpm dev:node % pnpm dev:client % pnpm dev:contracts",
6
+ "dev": "concurrently -n contracts,client -c cyan,magenta \"cd packages/contracts && pnpm run dev\" \"cd packages/client && pnpm run dev\"",
7
7
  "dev:client": "pnpm --filter 'client' run dev",
8
8
  "dev:contracts": "pnpm --filter 'contracts' dev",
9
- "dev:node": "pnpm --filter 'contracts' devnode"
9
+ "foundry:up": "curl -L https://foundry.paradigm.xyz | bash && bash $HOME/.foundry/bin/foundryup",
10
+ "initialize": "pnpm recursive run initialize",
11
+ "mud:up": "pnpm recursive exec mud set-version -v canary && pnpm install",
12
+ "prepare": "(forge --version || pnpm foundry:up)",
13
+ "test": "pnpm recursive run test"
10
14
  },
11
15
  "devDependencies": {
12
- "run-pty": "^4.0.3"
16
+ "@latticexyz/cli": "{{mud-version}}",
17
+ "@typescript-eslint/eslint-plugin": "5.46.1",
18
+ "@typescript-eslint/parser": "5.46.1",
19
+ "concurrently": "^8.0.1",
20
+ "eslint": "8.29.0",
21
+ "rimraf": "^3.0.2",
22
+ "typescript": "^4.9.5"
13
23
  },
14
24
  "engines": {
15
25
  "node": "18.x",
@@ -0,0 +1 @@
1
+ VITE_CHAIN_ID=31337
@@ -1,16 +1,6 @@
1
1
  {
2
- "env": {
3
- "node": true
4
- },
5
- "parser": "@typescript-eslint/parser",
6
- "plugins": ["@typescript-eslint", "react", "react-hooks"],
7
- "extends": [
8
- "eslint:recommended",
9
- "plugin:@typescript-eslint/eslint-recommended",
10
- "plugin:@typescript-eslint/recommended",
11
- "plugin:react/recommended",
12
- "plugin:react-hooks/recommended"
13
- ],
2
+ "extends": ["../../.eslintrc", "plugin:react/recommended", "plugin:react-hooks/recommended"],
3
+ "plugins": ["react", "react-hooks"],
14
4
  "rules": {
15
5
  "react/react-in-jsx-scope": "off"
16
6
  }
@@ -6,38 +6,35 @@
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "build": "vite build",
9
- "dev": "vite",
10
- "preview": "vite preview"
9
+ "dev": "wait-port localhost:8545 && vite",
10
+ "initialize": "pnpm build",
11
+ "preview": "vite preview",
12
+ "test": "tsc --noEmit"
11
13
  },
12
14
  "dependencies": {
13
- "@improbable-eng/grpc-web": "^0.15.0",
15
+ "@ethersproject/providers": "^5.7.2",
16
+ "@latticexyz/common": "{{mud-version}}",
17
+ "@latticexyz/dev-tools": "{{mud-version}}",
14
18
  "@latticexyz/network": "{{mud-version}}",
15
19
  "@latticexyz/react": "{{mud-version}}",
16
20
  "@latticexyz/recs": "{{mud-version}}",
17
- "@latticexyz/services": "{{mud-version}}",
21
+ "@latticexyz/schema-type": "{{mud-version}}",
18
22
  "@latticexyz/std-client": "{{mud-version}}",
19
23
  "@latticexyz/utils": "{{mud-version}}",
20
- "async-mutex": "^0.4.0",
24
+ "@latticexyz/world": "{{mud-version}}",
25
+ "@wagmi/chains": "^0.2.22",
21
26
  "contracts": "workspace:*",
22
27
  "ethers": "^5.7.2",
23
- "mobx": "^6.7.0",
24
- "nice-grpc": "^2.0.1",
25
- "nice-grpc-web": "^2.0.1",
26
- "proxy-deep": "^3.1.1",
27
28
  "react": "^18.2.0",
28
- "react-dom": "^18.2.0",
29
- "threads": "^1.7.0"
29
+ "react-dom": "^18.2.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@types/react": "^18.0.26",
33
- "@types/react-dom": "^18.0.9",
34
- "@typescript-eslint/eslint-plugin": "^5.46.1",
35
- "@typescript-eslint/parser": "^5.46.1",
36
- "@vitejs/plugin-react": "^3.0.0",
37
- "eslint": "^8.29.0",
38
- "eslint-plugin-react": "^7.31.11",
39
- "eslint-plugin-react-hooks": "^4.6.0",
40
- "typescript": "^4.9.5",
41
- "vite": "^4.2.1"
32
+ "@types/react": "^18.2.6",
33
+ "@types/react-dom": "^18.2.4",
34
+ "@vitejs/plugin-react": "^3.1.0",
35
+ "eslint-plugin-react": "7.31.11",
36
+ "eslint-plugin-react-hooks": "4.6.0",
37
+ "vite": "^4.2.1",
38
+ "wait-port": "^1.0.4"
42
39
  }
43
40
  }
@@ -1,17 +1,15 @@
1
- import { SingletonID, TxQueue } from "@latticexyz/network";
2
- import { World } from "@latticexyz/recs";
3
- import { SystemTypes } from "contracts/types/SystemTypes";
4
1
  import { useComponentValue } from "@latticexyz/react";
5
- import { components, singletonIndex } from ".";
2
+ import { useMUD } from "./MUDContext";
6
3
 
7
- type Props = {
8
- world: World;
9
- systems: TxQueue<SystemTypes>;
10
- components: typeof components;
11
- };
4
+ export const App = () => {
5
+ const {
6
+ components: { Counter },
7
+ systemCalls: { increment },
8
+ network: { singletonEntity },
9
+ } = useMUD();
10
+
11
+ const counter = useComponentValue(Counter, singletonEntity);
12
12
 
13
- export const App = ({ systems, components }: Props) => {
14
- const counter = useComponentValue(components.Counter, singletonIndex);
15
13
  return (
16
14
  <>
17
15
  <div>
@@ -19,9 +17,9 @@ export const App = ({ systems, components }: Props) => {
19
17
  </div>
20
18
  <button
21
19
  type="button"
22
- onClick={(event) => {
20
+ onClick={async (event) => {
23
21
  event.preventDefault();
24
- systems["system.Increment"].executeTyped(SingletonID);
22
+ console.log("new counter value:", await increment());
25
23
  }}
26
24
  >
27
25
  Increment
@@ -0,0 +1,21 @@
1
+ import { createContext, ReactNode, useContext } from "react";
2
+ import { SetupResult } from "./mud/setup";
3
+
4
+ const MUDContext = createContext<SetupResult | null>(null);
5
+
6
+ type Props = {
7
+ children: ReactNode;
8
+ value: SetupResult;
9
+ };
10
+
11
+ export const MUDProvider = ({ children, value }: Props) => {
12
+ const currentValue = useContext(MUDContext);
13
+ if (currentValue) throw new Error("MUDProvider can only be used once");
14
+ return <MUDContext.Provider value={value}>{children}</MUDContext.Provider>;
15
+ };
16
+
17
+ export const useMUD = () => {
18
+ const value = useContext(MUDContext);
19
+ if (!value) throw new Error("Must be used within a MUDProvider");
20
+ return value;
21
+ };
@@ -1,38 +1,19 @@
1
1
  import ReactDOM from "react-dom/client";
2
- import { setupMUDNetwork } from "@latticexyz/std-client";
3
- import { createWorld } from "@latticexyz/recs";
4
- import { SystemTypes } from "contracts/types/SystemTypes";
5
- import { SystemAbis } from "contracts/types/SystemAbis.mjs";
6
- import { defineNumberComponent } from "@latticexyz/std-client";
7
- import { config } from "./config";
2
+ import { mount as mountDevTools } from "@latticexyz/dev-tools";
8
3
  import { App } from "./App";
9
- import { SingletonID } from "@latticexyz/network";
4
+ import { setup } from "./mud/setup";
5
+ import { MUDProvider } from "./MUDContext";
10
6
 
11
7
  const rootElement = document.getElementById("react-root");
12
8
  if (!rootElement) throw new Error("React root not found");
13
9
  const root = ReactDOM.createRoot(rootElement);
14
10
 
15
- // The world contains references to all entities, all components and disposers.
16
- const world = createWorld();
17
- export const singletonIndex = world.registerEntity({ id: SingletonID });
18
-
19
- // Components contain the application state.
20
- // If a contractId is provided, MUD syncs the state with the corresponding
21
- // component contract (in this case `CounterComponent.sol`)
22
- export const components = {
23
- Counter: defineNumberComponent(world, {
24
- metadata: {
25
- contractId: "component.Counter",
26
- },
27
- }),
28
- };
29
-
30
- // This is where the magic happens
31
- setupMUDNetwork<typeof components, SystemTypes>(config, world, components, SystemAbis).then(
32
- ({ startSync, systems }) => {
33
- // After setting up the network, we can tell MUD to start the synchronization process.
34
- startSync();
35
-
36
- root.render(<App world={world} systems={systems} components={components} />);
37
- }
38
- );
11
+ // TODO: figure out if we actually want this to be async or if we should render something else in the meantime
12
+ setup().then((result) => {
13
+ root.render(
14
+ <MUDProvider value={result}>
15
+ <App />
16
+ </MUDProvider>
17
+ );
18
+ mountDevTools();
19
+ });
@@ -0,0 +1,24 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+
3
+ import { TableId } from "@latticexyz/utils";
4
+ import { defineComponent, Type as RecsType, World } from "@latticexyz/recs";
5
+
6
+ export function defineContractComponents(world: World) {
7
+ return {
8
+ Counter: (() => {
9
+ const tableId = new TableId("", "Counter");
10
+ return defineComponent(
11
+ world,
12
+ {
13
+ value: RecsType.Number,
14
+ },
15
+ {
16
+ metadata: {
17
+ contractId: tableId.toHexString(),
18
+ tableId: tableId.toString(),
19
+ },
20
+ }
21
+ );
22
+ })(),
23
+ };
24
+ }
@@ -0,0 +1,10 @@
1
+ import { SetupNetworkResult } from "./setupNetwork";
2
+
3
+ export type ClientComponents = ReturnType<typeof createClientComponents>;
4
+
5
+ export function createClientComponents({ components }: SetupNetworkResult) {
6
+ return {
7
+ ...components,
8
+ // add your client components or overrides here
9
+ };
10
+ }