create-dubhe 1.2.0-pre.99 → 2.0.0

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 (360) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/cli.js.map +1 -1
  3. package/package.json +16 -16
  4. package/templates/101/sui-template/docker-compose.testnet.yml +73 -0
  5. package/templates/101/sui-template/packages/client/src/app/page.tsx +545 -41
  6. package/templates/101/sui-template/packages/client/src/app/providers.tsx +12 -4
  7. package/templates/101/sui-template/packages/contracts/Pub.localnet.toml +4 -4
  8. package/templates/101/sui-template/packages/contracts/counter.lock.json +20 -0
  9. package/templates/101/sui-template/packages/contracts/deployment.ts +8 -3
  10. package/templates/101/sui-template/packages/contracts/dubhe.config.json +59 -13
  11. package/templates/101/sui-template/packages/contracts/dubhe.config.ts +1 -4
  12. package/templates/101/sui-template/packages/contracts/metadata.json +1015 -68
  13. package/templates/101/sui-template/packages/contracts/package.json +7 -4
  14. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/dapp_key.move +45 -31
  15. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/error.move +8 -0
  16. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/genesis.move +30 -13
  17. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/init_test.move +19 -14
  18. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2.move +198 -0
  19. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2withkey.move +90 -0
  20. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/resources/value.move +30 -20
  21. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
  22. package/templates/101/sui-template/packages/contracts/src/counter/sources/scripts/deploy_hook.move +6 -11
  23. package/templates/101/sui-template/packages/contracts/src/counter/sources/systems/counter.move +23 -11
  24. package/templates/101/sui-template/packages/contracts/src/counter/sources/tests/counter.move +15 -14
  25. package/templates/101/sui-template/packages/contracts/src/dubhe/Move.lock +33 -30
  26. package/templates/101/sui-template/packages/contracts/src/dubhe/Move.toml +4 -3
  27. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/dapp_key.move +45 -31
  28. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/error.move +170 -0
  29. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/genesis.move +16 -13
  30. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/init_test.move +8 -14
  31. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/account_key.move +1 -3
  32. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/dapp_service.move +1776 -137
  33. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/data_key.move +1 -20
  34. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/events.move +864 -25
  35. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/scripts/deploy_hook.move +15 -16
  36. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/scripts/migrate.move +0 -3
  37. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/address_system.move +25 -17
  38. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/dapp_system.move +2802 -343
  39. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/utils.move +1 -1
  40. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/address.move +173 -55
  41. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/dapp_test.move +769 -0
  42. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/fee_test.move +2965 -0
  43. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/integration_test.move +303 -0
  44. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/listing_test.move +1422 -0
  45. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/scene_session_test.move +269 -0
  46. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/session_test.move +624 -0
  47. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/storage_test.move +700 -0
  48. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/typed_object_test.move +177 -0
  49. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/typed_scene_test.move +452 -0
  50. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/user_storage_test.move +160 -0
  51. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/utils/math.move +4 -3
  52. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/utils/type_info.move +2 -2
  53. package/templates/contract/sui-template/dubhe.config.ts +0 -1
  54. package/templates/contract/sui-template/package.json +3 -3
  55. package/templates/contract/sui-template/src/dubhe/Move.lock +33 -30
  56. package/templates/contract/sui-template/src/dubhe/Move.toml +4 -3
  57. package/templates/contract/sui-template/src/dubhe/sources/codegen/dapp_key.move +45 -31
  58. package/templates/contract/sui-template/src/dubhe/sources/codegen/error.move +170 -0
  59. package/templates/contract/sui-template/src/dubhe/sources/codegen/genesis.move +16 -13
  60. package/templates/contract/sui-template/src/dubhe/sources/codegen/init_test.move +8 -14
  61. package/templates/contract/sui-template/src/dubhe/sources/core/account_key.move +1 -3
  62. package/templates/contract/sui-template/src/dubhe/sources/core/dapp_service.move +1776 -137
  63. package/templates/contract/sui-template/src/dubhe/sources/core/data_key.move +1 -20
  64. package/templates/contract/sui-template/src/dubhe/sources/core/events.move +864 -25
  65. package/templates/contract/sui-template/src/dubhe/sources/scripts/deploy_hook.move +15 -16
  66. package/templates/contract/sui-template/src/dubhe/sources/scripts/migrate.move +0 -3
  67. package/templates/contract/sui-template/src/dubhe/sources/systems/address_system.move +25 -17
  68. package/templates/contract/sui-template/src/dubhe/sources/systems/dapp_system.move +2802 -343
  69. package/templates/contract/sui-template/src/dubhe/sources/systems/utils.move +1 -1
  70. package/templates/contract/sui-template/src/dubhe/sources/tests/address.move +173 -55
  71. package/templates/contract/sui-template/src/dubhe/sources/tests/dapp_test.move +769 -0
  72. package/templates/contract/sui-template/src/dubhe/sources/tests/fee_test.move +2965 -0
  73. package/templates/contract/sui-template/src/dubhe/sources/tests/integration_test.move +303 -0
  74. package/templates/contract/sui-template/src/dubhe/sources/tests/listing_test.move +1422 -0
  75. package/templates/contract/sui-template/src/dubhe/sources/tests/scene_session_test.move +269 -0
  76. package/templates/contract/sui-template/src/dubhe/sources/tests/session_test.move +624 -0
  77. package/templates/contract/sui-template/src/dubhe/sources/tests/storage_test.move +700 -0
  78. package/templates/contract/sui-template/src/dubhe/sources/tests/typed_object_test.move +177 -0
  79. package/templates/contract/sui-template/src/dubhe/sources/tests/typed_scene_test.move +452 -0
  80. package/templates/contract/sui-template/src/dubhe/sources/tests/user_storage_test.move +160 -0
  81. package/templates/contract/sui-template/src/dubhe/sources/utils/math.move +4 -3
  82. package/templates/contract/sui-template/src/dubhe/sources/utils/type_info.move +2 -2
  83. package/templates/contract/sui-template/src/template/Move.toml +12 -0
  84. package/templates/contract/sui-template/src/template/sources/codegen/dapp_key.move +47 -0
  85. package/templates/contract/sui-template/src/template/sources/codegen/genesis.move +34 -0
  86. package/templates/contract/sui-template/src/template/sources/codegen/init_test.move +23 -0
  87. package/templates/contract/sui-template/src/template/sources/codegen/user_storage_init.move +27 -0
  88. package/templates/contract/sui-template/src/template/sources/scripts/deploy_hook.move +13 -0
  89. package/templates/contract/sui-template/src/template/sources/scripts/migrate.move +7 -0
  90. package/templates/nextjs/sui-card-duel/.gitignore_ +51 -0
  91. package/templates/nextjs/sui-card-duel/README.md +213 -0
  92. package/templates/nextjs/sui-card-duel/docker-compose.yml +34 -0
  93. package/templates/nextjs/sui-card-duel/mprocs.yaml +17 -0
  94. package/templates/nextjs/sui-card-duel/package.json +43 -0
  95. package/templates/nextjs/sui-card-duel/packages/client/.gitignore_ +48 -0
  96. package/templates/nextjs/sui-card-duel/packages/client/.prettierignore +1 -0
  97. package/templates/nextjs/sui-card-duel/packages/client/.prettierrc.json +8 -0
  98. package/templates/nextjs/sui-card-duel/packages/client/eslint.config.mjs +22 -0
  99. package/templates/nextjs/sui-card-duel/packages/client/next.config.mjs +8 -0
  100. package/templates/nextjs/sui-card-duel/packages/client/package.json +47 -0
  101. package/templates/nextjs/sui-card-duel/packages/client/postcss.config.mjs +8 -0
  102. package/templates/nextjs/sui-card-duel/packages/client/src/app/admin/ArenaPanel.tsx +307 -0
  103. package/templates/nextjs/sui-card-duel/packages/client/src/app/admin/page.tsx +622 -0
  104. package/templates/nextjs/sui-card-duel/packages/client/src/app/brawl/[id]/page.tsx +559 -0
  105. package/templates/nextjs/sui-card-duel/packages/client/src/app/collection/page.tsx +202 -0
  106. package/templates/nextjs/sui-card-duel/packages/client/src/app/components/CardView.tsx +66 -0
  107. package/templates/nextjs/sui-card-duel/packages/client/src/app/components/GameShell.tsx +294 -0
  108. package/templates/nextjs/sui-card-duel/packages/client/src/app/components/icons.tsx +101 -0
  109. package/templates/nextjs/sui-card-duel/packages/client/src/app/duel/[id]/page.tsx +477 -0
  110. package/templates/nextjs/sui-card-duel/packages/client/src/app/favicon.ico +0 -0
  111. package/templates/nextjs/sui-card-duel/packages/client/src/app/globals.css +85 -0
  112. package/templates/nextjs/sui-card-duel/packages/client/src/app/hooks/useGame.ts +313 -0
  113. package/templates/nextjs/sui-card-duel/packages/client/src/app/layout.tsx +24 -0
  114. package/templates/nextjs/sui-card-duel/packages/client/src/app/leaderboard/page.tsx +123 -0
  115. package/templates/nextjs/sui-card-duel/packages/client/src/app/lib/game.ts +77 -0
  116. package/templates/nextjs/sui-card-duel/packages/client/src/app/lib/scenes.ts +226 -0
  117. package/templates/nextjs/sui-card-duel/packages/client/src/app/market/page.tsx +418 -0
  118. package/templates/nextjs/sui-card-duel/packages/client/src/app/page.tsx +427 -0
  119. package/templates/nextjs/sui-card-duel/packages/client/src/app/providers.tsx +69 -0
  120. package/templates/nextjs/sui-card-duel/packages/client/tailwind.config.ts +21 -0
  121. package/templates/nextjs/sui-card-duel/packages/client/tsconfig.json +30 -0
  122. package/templates/nextjs/sui-card-duel/packages/contracts/.gitignore_ +51 -0
  123. package/templates/nextjs/sui-card-duel/packages/contracts/.prettierignore +1 -0
  124. package/templates/nextjs/sui-card-duel/packages/contracts/.prettierrc.json +8 -0
  125. package/templates/nextjs/sui-card-duel/packages/contracts/Dockerfile +5 -0
  126. package/templates/nextjs/sui-card-duel/packages/contracts/Pub.localnet.toml +13 -0
  127. package/templates/nextjs/sui-card-duel/packages/contracts/card_duel.lock.json +66 -0
  128. package/templates/nextjs/sui-card-duel/packages/contracts/docker-compose.yml +34 -0
  129. package/templates/nextjs/sui-card-duel/packages/contracts/dubhe.config.ts +150 -0
  130. package/templates/nextjs/sui-card-duel/packages/contracts/logs/combined.log +31383 -0
  131. package/templates/nextjs/sui-card-duel/packages/contracts/package.json +49 -0
  132. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/config.ts +17 -0
  133. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-brawl.ts +270 -0
  134. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-duel.ts +272 -0
  135. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-lobby.ts +177 -0
  136. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-market.ts +219 -0
  137. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-session.ts +342 -0
  138. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/query-dapp-revenue.ts +95 -0
  139. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/seed.ts +92 -0
  140. package/templates/nextjs/sui-card-duel/packages/contracts/scripts/withdraw-dapp-revenue.ts +56 -0
  141. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/Move.toml +15 -0
  142. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/dapp_key.move +46 -0
  143. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/enums/card_kind.move +47 -0
  144. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/enums/match_state.move +37 -0
  145. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/enums/rarity.move +37 -0
  146. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/error.move +126 -0
  147. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/genesis.move +33 -0
  148. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/init_test.move +23 -0
  149. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/objects/arena.move +137 -0
  150. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/permits/brawl_permit.move +125 -0
  151. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/permits/duel_permit.move +125 -0
  152. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/battle_state.move +255 -0
  153. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/card.move +282 -0
  154. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/deck.move +64 -0
  155. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/game_config.move +267 -0
  156. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/gold.move +205 -0
  157. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/profile.move +255 -0
  158. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/scenes/brawl.move +313 -0
  159. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/scenes/duel.move +313 -0
  160. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/user_storage_init.move +26 -0
  161. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/scripts/deploy_hook.move +32 -0
  162. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/scripts/migrate.move +7 -0
  163. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/arena_system.move +57 -0
  164. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/brawl_system.move +559 -0
  165. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/card_system.move +146 -0
  166. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/duel_system.move +515 -0
  167. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/market_system.move +115 -0
  168. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/player_system.move +37 -0
  169. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/tests/brawl_tests.move +385 -0
  170. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/tests/duel_tests.move +656 -0
  171. package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/tests/test_helpers.move +31 -0
  172. package/templates/nextjs/sui-card-duel/packages/contracts/sui-indexer-schema.graphql +5973 -0
  173. package/templates/nextjs/sui-card-duel/pnpm-workspace.yaml +2 -0
  174. package/templates/nextjs/sui-farm/.gitignore_ +51 -0
  175. package/templates/nextjs/sui-farm/README.md +15 -0
  176. package/templates/nextjs/sui-farm/UPGRADE_NOTES.md +97 -0
  177. package/templates/nextjs/sui-farm/docker-compose.yml +34 -0
  178. package/templates/nextjs/sui-farm/mprocs.yaml +17 -0
  179. package/templates/nextjs/sui-farm/package.json +43 -0
  180. package/templates/nextjs/sui-farm/packages/client/.gitignore_ +48 -0
  181. package/templates/nextjs/sui-farm/packages/client/.prettierignore +1 -0
  182. package/templates/nextjs/sui-farm/packages/client/.prettierrc.json +8 -0
  183. package/templates/nextjs/sui-farm/packages/client/eslint.config.mjs +22 -0
  184. package/templates/nextjs/sui-farm/packages/client/next.config.mjs +8 -0
  185. package/templates/nextjs/sui-farm/packages/client/package.json +47 -0
  186. package/templates/nextjs/sui-farm/packages/client/postcss.config.mjs +8 -0
  187. package/templates/nextjs/sui-farm/packages/client/src/app/admin/page.tsx +618 -0
  188. package/templates/nextjs/sui-farm/packages/client/src/app/components/FarmLand.tsx +526 -0
  189. package/templates/nextjs/sui-farm/packages/client/src/app/components/FarmPlotCard.tsx +215 -0
  190. package/templates/nextjs/sui-farm/packages/client/src/app/components/PetAvatar.tsx +868 -0
  191. package/templates/nextjs/sui-farm/packages/client/src/app/components/PetPanel.tsx +1360 -0
  192. package/templates/nextjs/sui-farm/packages/client/src/app/components/PlantModal.tsx +147 -0
  193. package/templates/nextjs/sui-farm/packages/client/src/app/components/ProxyCard.tsx +684 -0
  194. package/templates/nextjs/sui-farm/packages/client/src/app/components/RanchLand.tsx +822 -0
  195. package/templates/nextjs/sui-farm/packages/client/src/app/components/ResourceHUD.tsx +125 -0
  196. package/templates/nextjs/sui-farm/packages/client/src/app/components/ShopPanel.tsx +232 -0
  197. package/templates/nextjs/sui-farm/packages/client/src/app/components/icons/GameIcons.tsx +574 -0
  198. package/templates/nextjs/sui-farm/packages/client/src/app/favicon.ico +0 -0
  199. package/templates/nextjs/sui-farm/packages/client/src/app/globals.css +423 -0
  200. package/templates/nextjs/sui-farm/packages/client/src/app/hooks/useWorldPermitId.ts +66 -0
  201. package/templates/nextjs/sui-farm/packages/client/src/app/layout.tsx +23 -0
  202. package/templates/nextjs/sui-farm/packages/client/src/app/leaderboard/page.tsx +185 -0
  203. package/templates/nextjs/sui-farm/packages/client/src/app/lib/crops.ts +97 -0
  204. package/templates/nextjs/sui-farm/packages/client/src/app/market/page.tsx +763 -0
  205. package/templates/nextjs/sui-farm/packages/client/src/app/page.tsx +1173 -0
  206. package/templates/nextjs/sui-farm/packages/client/src/app/providers.tsx +69 -0
  207. package/templates/nextjs/sui-farm/packages/client/src/app/state/index.tsx +5 -0
  208. package/templates/nextjs/sui-farm/packages/client/tailwind.config.ts +25 -0
  209. package/templates/nextjs/sui-farm/packages/client/tsconfig.json +30 -0
  210. package/templates/nextjs/sui-farm/packages/contracts/.gitignore_ +51 -0
  211. package/templates/nextjs/sui-farm/packages/contracts/.prettierignore +1 -0
  212. package/templates/nextjs/sui-farm/packages/contracts/.prettierrc.json +8 -0
  213. package/templates/nextjs/sui-farm/packages/contracts/Dockerfile +5 -0
  214. package/templates/nextjs/sui-farm/packages/contracts/Pub.localnet.toml +13 -0
  215. package/templates/nextjs/sui-farm/packages/contracts/counter.lock.json +14 -0
  216. package/templates/nextjs/sui-farm/packages/contracts/docker-compose.yml +34 -0
  217. package/templates/nextjs/sui-farm/packages/contracts/dubhe.config.ts +178 -0
  218. package/templates/nextjs/sui-farm/packages/contracts/harvest.lock.json +120 -0
  219. package/templates/nextjs/sui-farm/packages/contracts/package.json +48 -0
  220. package/templates/nextjs/sui-farm/packages/contracts/scripts/config.ts +17 -0
  221. package/templates/nextjs/sui-farm/packages/contracts/scripts/query-dapp-revenue.ts +95 -0
  222. package/templates/nextjs/sui-farm/packages/contracts/scripts/read-permit.ts +72 -0
  223. package/templates/nextjs/sui-farm/packages/contracts/scripts/seed.ts +85 -0
  224. package/templates/nextjs/sui-farm/packages/contracts/scripts/withdraw-dapp-revenue.ts +56 -0
  225. package/templates/nextjs/sui-farm/packages/contracts/src/counter/Move.toml +14 -0
  226. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/dapp_key.move +31 -0
  227. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/error.move +10 -0
  228. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/genesis.move +33 -0
  229. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/init_test.move +23 -0
  230. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/resources/counter1.move +64 -0
  231. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/resources/counter2.move +70 -0
  232. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
  233. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/scripts/deploy_hook.move +8 -0
  234. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/scripts/migrate.move +8 -0
  235. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/systems/counter.move +13 -0
  236. package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/tests/counter.move +28 -0
  237. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/Move.toml +14 -0
  238. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/dapp_key.move +46 -0
  239. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/crop_type.move +47 -0
  240. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/egg_type.move +42 -0
  241. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/pet_rarity.move +37 -0
  242. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/pet_species.move +52 -0
  243. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/error.move +110 -0
  244. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/genesis.move +33 -0
  245. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/init_test.move +23 -0
  246. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/permits/world.move +125 -0
  247. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/carrot.move +136 -0
  248. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/carrot_seed.move +80 -0
  249. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/common_egg.move +136 -0
  250. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/corn.move +136 -0
  251. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/corn_seed.move +80 -0
  252. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/crow_charges.move +162 -0
  253. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/crow_damage.move +207 -0
  254. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/farm_plot.move +261 -0
  255. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/gold.move +80 -0
  256. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet.move +467 -0
  257. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_config.move +372 -0
  258. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_hatch.move +162 -0
  259. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_slot_index.move +83 -0
  260. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_slots.move +64 -0
  261. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/profile.move +162 -0
  262. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pumpkin.move +136 -0
  263. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pumpkin_seed.move +80 -0
  264. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/rare_egg.move +136 -0
  265. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/scarecrow.move +64 -0
  266. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/season_config.move +197 -0
  267. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/season_stats.move +64 -0
  268. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/seasonal_egg.move +136 -0
  269. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/shop_config.move +267 -0
  270. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/trophy.move +245 -0
  271. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/wheat.move +136 -0
  272. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/wheat_seed.move +80 -0
  273. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/world_permit_id.move +64 -0
  274. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/user_storage_init.move +26 -0
  275. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/scripts/deploy_hook.move +45 -0
  276. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/scripts/migrate.move +7 -0
  277. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/crow_system.move +96 -0
  278. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/farm_system.move +182 -0
  279. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/market_system.move +172 -0
  280. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/pet_system.move +495 -0
  281. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/season_system.move +70 -0
  282. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/shop_system.move +112 -0
  283. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/world_system.move +34 -0
  284. package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/tests/farm_tests.move +1192 -0
  285. package/templates/nextjs/sui-farm/pnpm-workspace.yaml +2 -0
  286. package/templates/nextjs/sui-template/packages/client/src/app/components/ProxyCard.tsx +683 -0
  287. package/templates/nextjs/sui-template/packages/client/src/app/page.tsx +510 -5
  288. package/templates/nextjs/sui-template/packages/client/src/app/providers.tsx +13 -5
  289. package/templates/nextjs/sui-template/packages/contracts/Pub.localnet.toml +4 -4
  290. package/templates/nextjs/sui-template/packages/contracts/counter.lock.json +14 -0
  291. package/templates/nextjs/sui-template/packages/contracts/deployment.ts +8 -3
  292. package/templates/nextjs/sui-template/packages/contracts/dubhe.config.json +9 -9
  293. package/templates/nextjs/sui-template/packages/contracts/dubhe.config.ts +0 -4
  294. package/templates/nextjs/sui-template/packages/contracts/metadata.json +180 -124
  295. package/templates/nextjs/sui-template/packages/contracts/package.json +8 -4
  296. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/dapp_key.move +45 -31
  297. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/error.move +10 -0
  298. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/genesis.move +30 -13
  299. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/init_test.move +19 -14
  300. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter1.move +30 -20
  301. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2.move +35 -24
  302. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
  303. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/scripts/deploy_hook.move +6 -10
  304. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/systems/counter.move +7 -20
  305. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/tests/counter.move +14 -27
  306. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/Move.lock +33 -30
  307. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/Move.toml +4 -3
  308. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/dapp_key.move +45 -31
  309. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/error.move +170 -0
  310. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/genesis.move +16 -13
  311. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/init_test.move +8 -14
  312. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/account_key.move +1 -3
  313. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/dapp_service.move +1776 -137
  314. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/data_key.move +1 -20
  315. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/events.move +864 -25
  316. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/scripts/deploy_hook.move +15 -16
  317. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/scripts/migrate.move +0 -3
  318. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/address_system.move +25 -17
  319. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/dapp_system.move +2802 -343
  320. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/utils.move +1 -1
  321. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/address.move +173 -55
  322. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/dapp_test.move +769 -0
  323. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/fee_test.move +2965 -0
  324. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/integration_test.move +303 -0
  325. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/listing_test.move +1422 -0
  326. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/scene_session_test.move +269 -0
  327. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/session_test.move +624 -0
  328. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/storage_test.move +700 -0
  329. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/typed_object_test.move +177 -0
  330. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/typed_scene_test.move +452 -0
  331. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/user_storage_test.move +160 -0
  332. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/utils/math.move +4 -3
  333. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/utils/type_info.move +2 -2
  334. package/templates/101/sui-template/packages/contracts/src/counter/Move.lock +0 -41
  335. package/templates/101/sui-template/packages/contracts/src/counter/Published.toml +0 -9
  336. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/errors.move +0 -12
  337. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/errors.move +0 -140
  338. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
  339. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
  340. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
  341. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
  342. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/dapp_store.move +0 -29
  343. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/session_system.move +0 -44
  344. package/templates/contract/sui-template/src/dubhe/sources/codegen/errors.move +0 -140
  345. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
  346. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
  347. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
  348. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
  349. package/templates/contract/sui-template/src/dubhe/sources/core/dapp_store.move +0 -29
  350. package/templates/contract/sui-template/src/dubhe/sources/systems/session_system.move +0 -44
  351. package/templates/nextjs/sui-template/packages/contracts/src/counter/Move.lock +0 -47
  352. package/templates/nextjs/sui-template/packages/contracts/src/counter/Published.toml +0 -9
  353. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/errors.move +0 -12
  354. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/errors.move +0 -140
  355. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
  356. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
  357. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
  358. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
  359. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/dapp_store.move +0 -29
  360. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/session_system.move +0 -44
@@ -1,32 +1,46 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::dapp_key {
8
- use std::type_name;
9
- use sui::address;
10
- use std::ascii::String;
11
-
12
- /// Authorization token for the app.
13
-
14
- public struct DappKey has copy, drop {}
15
-
16
- public(package) fun new(): DappKey {
17
- DappKey { }
18
- }
19
-
20
- public fun to_string(): String {
21
- type_name::get<DappKey>().into_string()
22
- }
23
-
24
- public fun package_id(): address {
25
- let package_id_str = type_name::get<DappKey>().get_address();
26
- address::from_ascii_bytes(package_id_str.as_bytes())
27
- }
28
-
29
- public fun eq<DappKey1: copy + drop, DappKey2: copy + drop>(_: &DappKey1, _: &DappKey2): bool {
30
- type_name::get<DappKey1>() == type_name::get<DappKey2>()
31
- }
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module counter::dapp_key {
7
+ use std::type_name;
8
+ use sui::address;
9
+ use std::ascii::String;
10
+
11
+ /// DappKey — package-level authorization token for this DApp.
12
+ ///
13
+ /// SECURITY: `new()` is intentionally `public(package)`.
14
+ /// Only code compiled into this package can construct a DappKey instance.
15
+ /// All framework write functions (`set_record`, `set_field`,
16
+ /// `take_record`, `create_user_storage`, …) require `_auth: DappKey`
17
+ /// as proof that the call originated from inside this package — an
18
+ /// external PTB cannot fabricate that proof.
19
+ ///
20
+ /// NEVER change `new()` to `public`, and never accept a DappKey
21
+ /// value as a parameter from an external caller. Either mistake removes
22
+ /// every package-level access guard, allowing any PTB to write arbitrary
23
+ /// user data or register UserStorages without going through the DApp's
24
+ /// own entry functions.
25
+
26
+ public struct DappKey has copy, drop {}
27
+
28
+ /// Constructs an authorization token. Callable only from within this package.
29
+ /// Pass the result as `_auth` to any framework function that requires it.
30
+ public(package) fun new(): DappKey {
31
+ DappKey {}
32
+ }
33
+
34
+ public fun to_string(): String {
35
+ type_name::with_defining_ids<DappKey>().into_string()
36
+ }
37
+
38
+ public fun package_id(): address {
39
+ let package_id_str = type_name::with_defining_ids<DappKey>().address_string();
40
+ address::from_ascii_bytes(package_id_str.as_bytes())
41
+ }
42
+
43
+ public fun eq<DappKey1: copy + drop, DappKey2: copy + drop>(_: &DappKey1, _: &DappKey2): bool {
44
+ type_name::with_defining_ids<DappKey1>() == type_name::with_defining_ids<DappKey2>()
45
+ }
32
46
  }
@@ -0,0 +1,10 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module counter::error {
7
+ #[error]
8
+ const EInvalidIncrement: vector<u8> = b"Number can't be incremented, must be more than 0";
9
+ public fun invalid_increment(condition: bool) { assert!(condition, EInvalidIncrement) }
10
+ }
@@ -1,16 +1,33 @@
1
- #[allow(lint(share_owned))]module counter::genesis {
2
- use sui::clock::Clock;
3
- use dubhe::dapp_service::DappHub;
4
- use counter::dapp_key;
5
- use dubhe::dapp_system;
6
- use std::ascii::string;
1
+ #[allow(lint(share_owned))]
2
+ module counter::genesis {
3
+ use sui::clock::Clock;
4
+ use dubhe::dapp_service::{DappHub, DappStorage};
5
+ use counter::dapp_key;
6
+ use dubhe::dapp_system;
7
+ use std::ascii::string;
7
8
 
8
- public entry fun run(dapp_hub: &mut DappHub, clock: &Clock, ctx: &mut TxContext) {
9
- // Create Dapp
10
- let dapp_key = dapp_key::new();
11
- dapp_system::create_dapp(dapp_hub, dapp_key, string(b"counter"), string(b"counter contract"), clock, ctx);
9
+ // The one-shot guard is enforced inside dapp_system::create_dapp, which
10
+ // records the DappKey type in DappHub before returning DappStorage.
11
+ // genesis.move does not need to carry its own guard.
12
+ public fun run(dapp_hub: &mut DappHub, clock: &Clock, ctx: &mut TxContext) {
13
+ // create_dapp aborts with dapp_already_initialized_error on repeated calls.
14
+ let dapp_key = dapp_key::new();
15
+ let mut ds = dapp_system::create_dapp(dapp_key, dapp_hub, string(b"counter"), string(b"counter contract"), 1, clock, ctx);
12
16
 
13
- // Logic that needs to be automated once the contract is deployed
14
- counter::deploy_hook::run(dapp_hub, ctx);
15
- }
17
+ // Set up initial DApp state (e.g. default resource values).
18
+ counter::deploy_hook::run(&mut ds, ctx);
19
+
20
+ // Share DappStorage so every transaction can access it.
21
+ transfer::public_share_object(ds);
22
+ }
23
+
24
+ // Called during contract upgrades to register newly added resource tables
25
+ // and run any custom migration logic. `dubhe upgrade` rewrites the region
26
+ // between the separator comments; do not edit that block manually.
27
+ public(package) fun migrate(_dapp_hub: &mut DappHub, _dapp_storage: &mut DappStorage, _ctx: &mut TxContext) {
28
+ // ==========================================
29
+ // Add custom migration logic here (e.g. initialise new resource defaults).
30
+ // migrate_to_vN in migrate.move calls this function automatically.
31
+ // ==========================================
32
+ }
16
33
  }
@@ -1,18 +1,23 @@
1
- #[test_only]module counter::init_test {
2
- use sui::clock;
3
- use sui::test_scenario;
4
- use sui::test_scenario::Scenario;
5
- use dubhe::dapp_service::DappHub;
1
+ #[test_only]
2
+
3
+ module counter::init_test {
6
4
  use dubhe::dapp_system;
7
5
 
8
- public fun deploy_dapp_for_testing(scenario: &mut Scenario): DappHub {
9
- let ctx = test_scenario::ctx(scenario);
10
- let clock = clock::create_for_testing(ctx);
11
- let mut dapp_hub = dapp_system::create_dapp_hub_for_testing(ctx);
12
- dubhe::genesis::run(&mut dapp_hub, &clock, ctx);
13
- counter::genesis::run(&mut dapp_hub, &clock, ctx);
14
- clock::destroy_for_testing(clock);
15
- test_scenario::next_tx(scenario, ctx.sender());
16
- dapp_hub
6
+ /// Create a DappHub for testing without sharing it.
7
+ /// Suitable for unit tests that need a DappHub context.
8
+ public fun create_dapp_hub_for_testing(ctx: &mut TxContext): dubhe::dapp_service::DappHub {
9
+ dapp_system::create_dapp_hub_for_testing(ctx)
10
+ }
11
+
12
+ /// Create a DappStorage for this DApp without sharing it.
13
+ /// Suitable for unit tests that exercise global-resource functions.
14
+ public fun create_dapp_storage_for_testing(ctx: &mut TxContext): dubhe::dapp_service::DappStorage {
15
+ dubhe::dapp_system::create_dapp_storage_for_testing<counter::dapp_key::DappKey>(ctx)
16
+ }
17
+
18
+ /// Create a UserStorage for `owner` without sharing it.
19
+ /// Suitable for unit tests that exercise user-level resource functions.
20
+ public fun create_user_storage_for_testing(owner: address, ctx: &mut TxContext): dubhe::dapp_service::UserStorage {
21
+ dubhe::dapp_system::create_user_storage_for_testing<counter::dapp_key::DappKey>(owner, ctx)
17
22
  }
18
23
  }
@@ -1,14 +1,11 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::counter1 {
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module counter::counter1 {
8
7
  use sui::bcs::{to_bytes};
9
- use std::ascii::{string, String, into_bytes};
10
- use dubhe::table_id;
11
- use dubhe::dapp_service::{Self, DappHub};
8
+ use dubhe::dapp_service::UserStorage;
12
9
  use dubhe::dapp_system;
13
10
  use counter::dapp_key;
14
11
  use counter::dapp_key::DappKey;
@@ -18,32 +15,45 @@
18
15
  const OFFCHAIN: bool = false;
19
16
 
20
17
 
21
- public fun has(dapp_hub: &DappHub, resource_account: String): bool {
18
+ public fun has(user_storage: &UserStorage): bool {
19
+ let mut key_tuple = vector::empty();
20
+ key_tuple.push_back(TABLE_NAME);
21
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
22
+ }
23
+
24
+ public fun ensure_has(user_storage: &UserStorage) {
25
+ let mut key_tuple = vector::empty();
26
+ key_tuple.push_back(TABLE_NAME);
27
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
28
+ }
29
+
30
+ public fun ensure_has_not(user_storage: &UserStorage) {
22
31
  let mut key_tuple = vector::empty();
23
32
  key_tuple.push_back(TABLE_NAME);
24
- dapp_system::has_record<DappKey>(dapp_hub, resource_account, key_tuple)
33
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
25
34
  }
26
35
 
27
- public(package) fun delete(dapp_hub: &mut DappHub, resource_account: String) {
36
+ public(package) fun delete(user_storage: &mut UserStorage, ctx: &TxContext) {
28
37
  let mut key_tuple = vector::empty();
29
38
  key_tuple.push_back(TABLE_NAME);
30
- dapp_system::delete_record<DappKey>(dapp_hub, dapp_key::new(), key_tuple, resource_account);
39
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"value"], ctx);
31
40
  }
32
41
 
33
- public fun get(dapp_hub: &DappHub, resource_account: String): (u32) {
42
+ public fun get(user_storage: &UserStorage): (u32) {
34
43
  let mut key_tuple = vector::empty();
35
44
  key_tuple.push_back(TABLE_NAME);
36
- let value_tuple = dapp_system::get_record<DappKey>(dapp_hub, resource_account, key_tuple);
37
- let mut bsc_type = sui::bcs::new(value_tuple);
38
- let value = sui::bcs::peel_u32(&mut bsc_type);
45
+ let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
46
+ let mut value_bcs = sui::bcs::new(value_raw);
47
+ let value = sui::bcs::peel_u32(&mut value_bcs);
39
48
  (value)
40
49
  }
41
50
 
42
- public(package) fun set(dapp_hub: &mut DappHub, resource_account: String, value: u32, ctx: &mut TxContext) {
51
+ public(package) fun set(user_storage: &mut UserStorage, value: u32, ctx: &mut TxContext) {
43
52
  let mut key_tuple = vector::empty();
44
53
  key_tuple.push_back(TABLE_NAME);
54
+ let field_names = vector[b"value"];
45
55
  let value_tuple = encode(value);
46
- dapp_system::set_record(dapp_hub, dapp_key::new(), key_tuple, value_tuple, resource_account, OFFCHAIN, ctx);
56
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
47
57
  }
48
58
 
49
59
  public fun encode(value: u32): vector<vector<u8>> {
@@ -1,14 +1,11 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::counter2 {
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module counter::counter2 {
8
7
  use sui::bcs::{to_bytes};
9
- use std::ascii::{string, String, into_bytes};
10
- use dubhe::table_id;
11
- use dubhe::dapp_service::{Self, DappHub};
8
+ use dubhe::dapp_service::UserStorage;
12
9
  use dubhe::dapp_system;
13
10
  use counter::dapp_key;
14
11
  use counter::dapp_key::DappKey;
@@ -17,51 +14,52 @@
17
14
  const TABLE_NAME: vector<u8> = b"counter2";
18
15
  const OFFCHAIN: bool = false;
19
16
 
20
- public fun has(dapp_hub: &DappHub, resource_account: String, data: u64): bool {
17
+ public fun has(user_storage: &UserStorage, data: u64): bool {
21
18
  let mut key_tuple = vector::empty();
22
19
  key_tuple.push_back(TABLE_NAME);
23
20
  key_tuple.push_back(to_bytes(&data));
24
- dapp_system::has_record<DappKey>(dapp_hub, resource_account, key_tuple)
21
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
25
22
  }
26
23
 
27
- public fun ensure_has(dapp_hub: &DappHub, resource_account: String, data: u64) {
24
+ public fun ensure_has(user_storage: &UserStorage, data: u64) {
28
25
  let mut key_tuple = vector::empty();
29
26
  key_tuple.push_back(TABLE_NAME);
30
27
  key_tuple.push_back(to_bytes(&data));
31
- dapp_system::ensure_has_record<DappKey>(dapp_hub, resource_account, key_tuple)
28
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
32
29
  }
33
30
 
34
- public fun ensure_has_not(dapp_hub: &DappHub, resource_account: String, data: u64) {
31
+ public fun ensure_has_not(user_storage: &UserStorage, data: u64) {
35
32
  let mut key_tuple = vector::empty();
36
33
  key_tuple.push_back(TABLE_NAME);
37
34
  key_tuple.push_back(to_bytes(&data));
38
- dapp_system::ensure_has_not_record<DappKey>(dapp_hub, resource_account, key_tuple)
35
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
39
36
  }
40
37
 
41
38
 
42
- public(package) fun delete(dapp_hub: &mut DappHub, resource_account: String, data: u64) {
39
+ public(package) fun delete(user_storage: &mut UserStorage, data: u64, ctx: &TxContext) {
43
40
  let mut key_tuple = vector::empty();
44
41
  key_tuple.push_back(TABLE_NAME);
45
42
  key_tuple.push_back(to_bytes(&data));
46
- dapp_system::delete_record<DappKey>(dapp_hub, dapp_key::new(), key_tuple, resource_account);
43
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"value"], ctx);
47
44
  }
48
45
 
49
- public fun get(dapp_hub: &DappHub, resource_account: String, data: u64): u32 {
46
+ public fun get(user_storage: &UserStorage, data: u64): u32 {
50
47
  let mut key_tuple = vector::empty();
51
48
  key_tuple.push_back(TABLE_NAME);
52
49
  key_tuple.push_back(to_bytes(&data));
53
- let value = dapp_system::get_field<DappKey>(dapp_hub, resource_account, key_tuple, 0);
54
- let mut bsc_type = sui::bcs::new(value);
55
- let value = sui::bcs::peel_u32(&mut bsc_type);
50
+ let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
51
+ let mut value_bcs = sui::bcs::new(value_raw);
52
+ let value = sui::bcs::peel_u32(&mut value_bcs);
56
53
  value
57
54
  }
58
55
 
59
- public(package) fun set(dapp_hub: &mut DappHub, resource_account: String, data: u64, value: u32, ctx: &mut TxContext) {
56
+ public(package) fun set(user_storage: &mut UserStorage, data: u64, value: u32, ctx: &mut TxContext) {
60
57
  let mut key_tuple = vector::empty();
61
58
  key_tuple.push_back(TABLE_NAME);
62
59
  key_tuple.push_back(to_bytes(&data));
60
+ let field_names = vector[b"value"];
63
61
  let value_tuple = encode(value);
64
- dapp_system::set_record(dapp_hub, dapp_key::new(), key_tuple, value_tuple, resource_account, OFFCHAIN, ctx);
62
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
65
63
  }
66
64
 
67
65
  public fun encode(value: u32): vector<vector<u8>> {
@@ -69,4 +67,17 @@
69
67
  value_tuple.push_back(to_bytes(&value));
70
68
  value_tuple
71
69
  }
70
+
71
+
72
+ // ─── keys: mint (developer provides keys; framework ensures no duplicate) ─
73
+ // Choosing the ID strategy (fresh address, counter, coordinate pack, etc.)
74
+ // is intentionally left to the caller.
75
+ public(package) fun mint(
76
+ user_storage: &mut UserStorage,
77
+ data: u64, value: u32,
78
+ ctx: &mut TxContext,
79
+ ) {
80
+ ensure_has_not(user_storage, data);
81
+ set(user_storage, data, value, ctx);
82
+ }
72
83
  }
@@ -0,0 +1,26 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module counter::user_storage_init {
7
+ use dubhe::dapp_service::{DappHub, DappStorage};
8
+ use dubhe::dapp_system;
9
+ use counter::dapp_key;
10
+ use counter::dapp_key::DappKey;
11
+ use counter::migrate;
12
+
13
+ /// Create a UserStorage for the transaction sender within this DApp.
14
+ /// Must be called once before the user can interact with any user-level resources.
15
+ /// Aborts if the DApp version does not match this package, the DApp is paused,
16
+ /// or the framework version has advanced.
17
+ #[allow(lint(public_entry))]
18
+ public entry fun init_user_storage(
19
+ dapp_hub: &DappHub,
20
+ dapp_storage: &mut DappStorage,
21
+ ctx: &mut TxContext,
22
+ ) {
23
+ dapp_system::ensure_latest_version<DappKey>(dapp_storage, migrate::on_chain_version());
24
+ dapp_system::create_user_storage(dapp_key::new(), dapp_hub, dapp_storage, ctx);
25
+ }
26
+ }
@@ -1,12 +1,8 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::deploy_hook {
8
- use dubhe::dapp_service::DappHub;
1
+ module counter::deploy_hook {
2
+ use dubhe::dapp_service::DappStorage;
9
3
 
10
- public(package) fun run(_dapp_hub: &mut DappHub, _ctx: &mut TxContext) {
11
- }
4
+ public(package) fun run(_dapp_storage: &mut DappStorage, _ctx: &mut TxContext) {
5
+ // No global state to initialize for a UserStorage-based counter.
6
+ // Each user initializes their own storage via user_storage_init::init_user_storage.
7
+ }
12
8
  }
@@ -1,26 +1,13 @@
1
1
  module counter::counter_system {
2
- use dubhe::dapp_service::DappHub;
3
- use dubhe::address_system;
4
- // use counter::counter0;
2
+ use dubhe::dapp_service::UserStorage;
5
3
  use counter::counter1;
6
- use counter::counter2;
7
4
 
8
- public entry fun inc(dapp_hub: &mut DappHub, number: u32, ctx: &mut TxContext) {
9
- let sender = address_system::ensure_origin(ctx);
10
-
11
- if (counter1::has(dapp_hub, sender)) {
12
- let new_number = counter1::get(dapp_hub, sender) + number;
13
- counter1::set(dapp_hub, sender, new_number, ctx);
14
- } else {
15
- counter1::set(dapp_hub, sender, number, ctx);
16
- };
17
-
18
- let data_key = (number as u64);
19
- if (counter2::has(dapp_hub, sender, data_key)) {
20
- let new_number = counter2::get(dapp_hub, sender, data_key) + number;
21
- counter2::set(dapp_hub, sender, data_key, new_number, ctx);
5
+ public entry fun inc(user_storage: &mut UserStorage, number: u32, ctx: &mut TxContext) {
6
+ let curr = if (counter1::has(user_storage)) {
7
+ counter1::get(user_storage)
22
8
  } else {
23
- counter2::set(dapp_hub, sender, data_key, number, ctx);
9
+ 0u32
24
10
  };
11
+ counter1::set(user_storage, curr + number, ctx);
25
12
  }
26
- }
13
+ }
@@ -2,40 +2,27 @@
2
2
  module counter::counter_test {
3
3
  use sui::test_scenario;
4
4
  use counter::counter_system;
5
- use counter::init_test;
6
5
  use counter::counter1;
7
- use counter::counter2;
8
- use dubhe::address_system;
6
+ use dubhe::dapp_system;
7
+ use counter::dapp_key::DappKey;
8
+
9
+ const DEPLOYER: address = @0xA;
9
10
 
10
11
  #[test]
11
12
  public fun inc() {
12
- let deployer = @0xA;
13
- let mut scenario = test_scenario::begin(deployer);
14
-
15
- let mut dapp_hub = init_test::deploy_dapp_for_testing(&mut scenario);
16
- let ctx = test_scenario::ctx(&mut scenario);
17
-
18
- // Resolve sender as String (hex-encoded address), matching ensure_origin behavior
19
- let sender = address_system::ensure_origin(ctx);
20
-
21
- // First increment: number=10, data_key=10u64
22
- counter_system::inc(&mut dapp_hub, 10, ctx);
23
- assert!(counter1::get(&dapp_hub, sender) == 10);
24
- assert!(counter2::has(&dapp_hub, sender, 10u64));
25
- assert!(counter2::get(&dapp_hub, sender, 10u64) == 10);
13
+ let mut scenario = test_scenario::begin(DEPLOYER);
14
+ {
15
+ let ctx = test_scenario::ctx(&mut scenario);
16
+ let mut us = dapp_system::create_user_storage_for_testing<DappKey>(DEPLOYER, ctx);
26
17
 
27
- // Second increment: number=20, data_key=20u64 (different key, counter1 accumulates)
28
- counter_system::inc(&mut dapp_hub, 20, ctx);
29
- assert!(counter1::get(&dapp_hub, sender) == 30);
30
- assert!(counter2::has(&dapp_hub, sender, 20u64));
31
- assert!(counter2::get(&dapp_hub, sender, 20u64) == 20);
18
+ counter_system::inc(&mut us, 10, ctx);
19
+ assert!(counter1::get(&us) == 10);
32
20
 
33
- // Third increment: number=10 again, same data_key=10u64, value accumulates
34
- counter_system::inc(&mut dapp_hub, 10, ctx);
35
- assert!(counter1::get(&dapp_hub, sender) == 40);
36
- assert!(counter2::get(&dapp_hub, sender, 10u64) == 20);
21
+ counter_system::inc(&mut us, 10, ctx);
22
+ assert!(counter1::get(&us) == 20);
37
23
 
38
- dapp_hub.destroy();
24
+ dapp_system::destroy_user_storage(us);
25
+ };
39
26
  scenario.end();
40
27
  }
41
28
  }
@@ -1,38 +1,41 @@
1
- # @generated by Move, please check-in and do not edit manually.
1
+ # Generated by move; do not edit
2
+ # This file should be checked in.
2
3
 
3
4
  [move]
4
- version = 3
5
- manifest_digest = "9E441545FB5525E6DED36D5515A5D25F03199A6CD5699C95CF663AFB76CAB789"
6
- deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"
7
- dependencies = [
8
- { id = "Sui", name = "Sui" },
9
- ]
5
+ version = 4
10
6
 
11
- [[move.package]]
12
- id = "MoveStdlib"
13
- source = { git = "https://github.com/MystenLabs/sui.git", rev = "mainnet-v1.46.3", subdir = "crates/sui-framework/packages/move-stdlib" }
7
+ [pinned.mainnet.Dubhe]
8
+ source = { root = true }
9
+ use_environment = "mainnet"
10
+ manifest_digest = "2AF62652675929717F20B988B31D3936712B319F150E7B7E069948FF27B34E0E"
11
+ deps = { Sui = "Sui" }
14
12
 
15
- [[move.package]]
16
- id = "Sui"
17
- source = { git = "https://github.com/MystenLabs/sui.git", rev = "mainnet-v1.46.3", subdir = "crates/sui-framework/packages/sui-framework" }
13
+ [pinned.mainnet.MoveStdlib]
14
+ source = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/move-stdlib", rev = "3c0f387ebb40b8be292d3b7bd3f5bee8ad226d33" }
15
+ use_environment = "mainnet"
16
+ manifest_digest = "C4FE4C91DE74CBF223B2E380AE40F592177D21870DC2D7EB6227D2D694E05363"
17
+ deps = {}
18
18
 
19
- dependencies = [
20
- { id = "MoveStdlib", name = "MoveStdlib" },
21
- ]
19
+ [pinned.mainnet.Sui]
20
+ source = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "3c0f387ebb40b8be292d3b7bd3f5bee8ad226d33" }
21
+ use_environment = "mainnet"
22
+ manifest_digest = "CD547CB1ACCE0880C835DAED2D8FFCB91D56C833AE5240D3AA5B918398263195"
23
+ deps = { MoveStdlib = "MoveStdlib" }
22
24
 
23
- [move.toolchain-version]
24
- compiler-version = "1.40.1"
25
- edition = "2024"
26
- flavor = "sui"
25
+ [pinned.testnet.Dubhe]
26
+ source = { root = true }
27
+ use_environment = "testnet"
28
+ manifest_digest = "B50A32218E466AACB70E7FB4A9B0991CFCF16B50B77AA0D5FBEC6A0730F28D67"
29
+ deps = { Sui = "Sui" }
27
30
 
28
- [env.localnet]
29
- chain-id = "31a2786f"
30
- original-published-id = "0x090035fe80abad17e6f7dbfc933a5f73736043fed333d32250725275ef63d7b6"
31
- latest-published-id = "0x090035fe80abad17e6f7dbfc933a5f73736043fed333d32250725275ef63d7b6"
32
- published-version = "1"
31
+ [pinned.testnet.MoveStdlib]
32
+ source = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/move-stdlib", rev = "3c0f387ebb40b8be292d3b7bd3f5bee8ad226d33" }
33
+ use_environment = "testnet"
34
+ manifest_digest = "C4FE4C91DE74CBF223B2E380AE40F592177D21870DC2D7EB6227D2D694E05363"
35
+ deps = {}
33
36
 
34
- [env.testnet]
35
- chain-id = "4c78adac"
36
- original-published-id = "0x8817b4976b6c607da01cea49d728f71d09274c82e9b163fa20c2382586f8aefc"
37
- latest-published-id = "0x8817b4976b6c607da01cea49d728f71d09274c82e9b163fa20c2382586f8aefc"
38
- published-version = "1"
37
+ [pinned.testnet.Sui]
38
+ source = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "3c0f387ebb40b8be292d3b7bd3f5bee8ad226d33" }
39
+ use_environment = "testnet"
40
+ manifest_digest = "7AFB66695545775FBFBB2D3078ADFD084244D5002392E837FDE21D9EA1C6D01C"
41
+ deps = { MoveStdlib = "MoveStdlib" }
@@ -4,15 +4,16 @@ edition = "2024"
4
4
  version = "1.0.0"
5
5
  license = "apache2.0"
6
6
  authors = ["Obelisk Labs"]
7
- published-at = "0x8817b4976b6c607da01cea49d728f71d09274c82e9b163fa20c2382586f8aefc"
7
+ published-at = "0x1a79c1611ab49723b388510813553ad912d96a4f1a9ed5fdbdb57e446c6fe946"
8
8
 
9
9
  [dependencies]
10
- Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.46.3" }
10
+ Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.68.1", override = true }
11
11
 
12
12
  [addresses]
13
- dubhe = "0x8817b4976b6c607da01cea49d728f71d09274c82e9b163fa20c2382586f8aefc"
13
+ dubhe = "0x1a79c1611ab49723b388510813553ad912d96a4f1a9ed5fdbdb57e446c6fe946"
14
14
 
15
15
  [environments]
16
16
  testnet = "4c78adac"
17
17
  mainnet = "35834a8a"
18
+ localnet = "d3e1a0e6"
18
19