create-dubhe 1.2.0-pre.98 → 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 (361) 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 +8 -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 +8 -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/Move.toml +4 -0
  297. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/dapp_key.move +45 -31
  298. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/error.move +10 -0
  299. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/genesis.move +30 -13
  300. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/init_test.move +19 -14
  301. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter1.move +30 -20
  302. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2.move +35 -24
  303. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
  304. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/scripts/deploy_hook.move +6 -10
  305. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/systems/counter.move +7 -20
  306. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/tests/counter.move +14 -27
  307. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/Move.lock +33 -30
  308. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/Move.toml +8 -3
  309. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/dapp_key.move +45 -31
  310. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/error.move +170 -0
  311. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/genesis.move +16 -13
  312. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/init_test.move +8 -14
  313. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/account_key.move +1 -3
  314. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/dapp_service.move +1776 -137
  315. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/data_key.move +1 -20
  316. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/events.move +864 -25
  317. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/scripts/deploy_hook.move +15 -16
  318. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/scripts/migrate.move +0 -3
  319. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/address_system.move +25 -17
  320. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/dapp_system.move +2802 -343
  321. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/utils.move +1 -1
  322. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/address.move +173 -55
  323. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/dapp_test.move +769 -0
  324. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/fee_test.move +2965 -0
  325. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/integration_test.move +303 -0
  326. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/listing_test.move +1422 -0
  327. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/scene_session_test.move +269 -0
  328. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/session_test.move +624 -0
  329. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/storage_test.move +700 -0
  330. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/typed_object_test.move +177 -0
  331. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/typed_scene_test.move +452 -0
  332. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/user_storage_test.move +160 -0
  333. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/utils/math.move +4 -3
  334. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/utils/type_info.move +2 -2
  335. package/templates/101/sui-template/packages/contracts/src/counter/Move.lock +0 -41
  336. package/templates/101/sui-template/packages/contracts/src/counter/Published.toml +0 -9
  337. package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/errors.move +0 -12
  338. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/errors.move +0 -140
  339. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
  340. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
  341. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
  342. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
  343. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/dapp_store.move +0 -29
  344. package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/session_system.move +0 -44
  345. package/templates/contract/sui-template/src/dubhe/sources/codegen/errors.move +0 -140
  346. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
  347. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
  348. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
  349. package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
  350. package/templates/contract/sui-template/src/dubhe/sources/core/dapp_store.move +0 -29
  351. package/templates/contract/sui-template/src/dubhe/sources/systems/session_system.move +0 -44
  352. package/templates/nextjs/sui-template/packages/contracts/src/counter/Move.lock +0 -47
  353. package/templates/nextjs/sui-template/packages/contracts/src/counter/Published.toml +0 -9
  354. package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/errors.move +0 -12
  355. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/errors.move +0 -140
  356. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
  357. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
  358. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
  359. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
  360. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/dapp_store.move +0 -29
  361. package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/session_system.move +0 -44
@@ -7,19 +7,22 @@
7
7
  "// Utility Commands": "----------------",
8
8
  "account:gen": "pnpm dubhe generate-key",
9
9
  "check-balance": "pnpm dubhe check-balance --network",
10
- "config:store": "pnpm dubhe config-store --output-ts-path ./deployment.ts --network",
10
+ "config:store": "pnpm dubhe store-config --output-ts-path ./deployment.ts --network",
11
11
  "deploy": "pnpm dubhe publish --network",
12
12
  "faucet": "pnpm dubhe faucet --network",
13
13
  "format": "prettier --write .",
14
14
  "format:check": "prettier --check .",
15
+ "generate": "pnpm dubhe generate",
15
16
  "graphql": "docker-compose up --remove-orphans",
16
17
  "indexer": "dubhe-indexer --database-url postgres://postgres:postgres@localhost:5432/postgres --checkpoint-url .chk --config-json dubhe.config.json",
18
+ "indexer:mainnet": "dubhe-indexer --database-url postgres://postgres:postgres@localhost:5432/postgres --checkpoint-url https://checkpoints.mainnet.sui.io --config-json dubhe.config.json",
17
19
  "indexer:testnet": "dubhe-indexer --database-url postgres://postgres:postgres@localhost:5432/postgres --checkpoint-url https://checkpoints.testnet.sui.io --config-json dubhe.config.json",
18
20
  "prod:localnet": "pnpm config:store localnet && pnpm run indexer",
19
- "prod:testnet": "pnpm config:store testnet && pnpm run indexer",
20
- "schemagen": "pnpm dubhe schemagen",
21
+ "prod:mainnet": "pnpm config:store mainnet && pnpm run indexer:mainnet",
22
+ "prod:testnet": "pnpm config:store testnet && pnpm run indexer:testnet",
21
23
  "setup:localnet": "pnpm account:gen && pnpm faucet localnet && pnpm run deploy localnet && pnpm run config:store localnet && pnpm run indexer --force",
22
- "setup:testnet": "pnpm account:gen && pnpm check-balance testnet && pnpm run deploy testnet && pnpm run config:store testnet && pnpm run indexer --force",
24
+ "setup:mainnet": "pnpm account:gen && pnpm check-balance mainnet && pnpm run deploy mainnet && pnpm run config:store mainnet && pnpm run indexer:mainnet --force",
25
+ "setup:testnet": "pnpm account:gen && pnpm check-balance testnet && pnpm run deploy testnet && pnpm run config:store testnet && pnpm run indexer:testnet --force",
23
26
  "start:localnet": "pnpm dubhe node",
24
27
  "type-check": "tsc --noEmit",
25
28
  "upgrade": "pnpm dubhe upgrade --network",
@@ -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,8 @@
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
+
8
+ }
@@ -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
  }
@@ -0,0 +1,198 @@
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 {
7
+ use sui::bcs::{to_bytes};
8
+ use std::ascii::{string, String, into_bytes};
9
+ use dubhe::dapp_service::UserStorage;
10
+ use dubhe::dapp_system;
11
+ use counter::dapp_key;
12
+ use counter::dapp_key::DappKey;
13
+
14
+
15
+ const TABLE_NAME: vector<u8> = b"counter2";
16
+ const OFFCHAIN: bool = false;
17
+
18
+ public struct Counter2 has copy, drop, store {
19
+ value: u32,
20
+ data: u64,
21
+ key: String,
22
+ }
23
+
24
+ public fun new(value: u32, data: u64, key: String): Counter2 {
25
+ Counter2 {
26
+ value,
27
+ data,
28
+ key,
29
+ }
30
+ }
31
+
32
+ public fun value(self: &Counter2): u32 {
33
+ self.value
34
+ }
35
+
36
+ public fun data(self: &Counter2): u64 {
37
+ self.data
38
+ }
39
+
40
+ public fun key(self: &Counter2): String {
41
+ self.key
42
+ }
43
+
44
+ public fun update_value(self: &mut Counter2, value: u32) {
45
+ self.value = value
46
+ }
47
+
48
+ public fun update_data(self: &mut Counter2, data: u64) {
49
+ self.data = data
50
+ }
51
+
52
+ public fun update_key(self: &mut Counter2, key: String) {
53
+ self.key = key
54
+ }
55
+
56
+ public fun has(user_storage: &UserStorage): bool {
57
+ let mut key_tuple = vector::empty();
58
+ key_tuple.push_back(TABLE_NAME);
59
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
60
+ }
61
+
62
+ public fun ensure_has(user_storage: &UserStorage) {
63
+ let mut key_tuple = vector::empty();
64
+ key_tuple.push_back(TABLE_NAME);
65
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
66
+ }
67
+
68
+ public fun ensure_has_not(user_storage: &UserStorage) {
69
+ let mut key_tuple = vector::empty();
70
+ key_tuple.push_back(TABLE_NAME);
71
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
72
+ }
73
+
74
+
75
+ public(package) fun delete(user_storage: &mut UserStorage, ctx: &TxContext) {
76
+ let mut key_tuple = vector::empty();
77
+ key_tuple.push_back(TABLE_NAME);
78
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"value", b"data", b"key"], ctx);
79
+ }
80
+
81
+ public fun get_value(user_storage: &UserStorage): u32 {
82
+ let mut key_tuple = vector::empty();
83
+ key_tuple.push_back(TABLE_NAME);
84
+ let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
85
+ let mut value_bcs = sui::bcs::new(value_raw);
86
+ let value = sui::bcs::peel_u32(&mut value_bcs);
87
+ value
88
+ }
89
+
90
+ public(package) fun set_value(user_storage: &mut UserStorage, value: u32, ctx: &mut TxContext) {
91
+ let mut key_tuple = vector::empty();
92
+ key_tuple.push_back(TABLE_NAME);
93
+ let value = to_bytes(&value);
94
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"value", value, ctx);
95
+ }
96
+
97
+ public fun get_data(user_storage: &UserStorage): u64 {
98
+ let mut key_tuple = vector::empty();
99
+ key_tuple.push_back(TABLE_NAME);
100
+ let data_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"data");
101
+ let mut data_bcs = sui::bcs::new(data_raw);
102
+ let data = sui::bcs::peel_u64(&mut data_bcs);
103
+ data
104
+ }
105
+
106
+ public(package) fun set_data(user_storage: &mut UserStorage, data: u64, ctx: &mut TxContext) {
107
+ let mut key_tuple = vector::empty();
108
+ key_tuple.push_back(TABLE_NAME);
109
+ let value = to_bytes(&data);
110
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"data", value, ctx);
111
+ }
112
+
113
+ public fun get_key(user_storage: &UserStorage): String {
114
+ let mut key_tuple = vector::empty();
115
+ key_tuple.push_back(TABLE_NAME);
116
+ let key_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"key");
117
+ let mut key_bcs = sui::bcs::new(key_raw);
118
+ let key = dubhe::bcs::peel_string(&mut key_bcs);
119
+ key
120
+ }
121
+
122
+ public(package) fun set_key(user_storage: &mut UserStorage, key: String, ctx: &mut TxContext) {
123
+ let mut key_tuple = vector::empty();
124
+ key_tuple.push_back(TABLE_NAME);
125
+ let value = to_bytes(&into_bytes(key));
126
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"key", value, ctx);
127
+ }
128
+
129
+ public fun get(user_storage: &UserStorage): (u32, u64, String) {
130
+ let mut key_tuple = vector::empty();
131
+ key_tuple.push_back(TABLE_NAME);
132
+ let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
133
+ let mut value_bcs = sui::bcs::new(value_raw);
134
+ let value = sui::bcs::peel_u32(&mut value_bcs);
135
+ let data_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"data");
136
+ let mut data_bcs = sui::bcs::new(data_raw);
137
+ let data = sui::bcs::peel_u64(&mut data_bcs);
138
+ let key_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"key");
139
+ let mut key_bcs = sui::bcs::new(key_raw);
140
+ let key = dubhe::bcs::peel_string(&mut key_bcs);
141
+ (value, data, key)
142
+ }
143
+
144
+ public(package) fun set(user_storage: &mut UserStorage, value: u32, data: u64, key: String, ctx: &mut TxContext) {
145
+ let mut key_tuple = vector::empty();
146
+ key_tuple.push_back(TABLE_NAME);
147
+ let field_names = vector[b"value", b"data", b"key"];
148
+ let value_tuple = encode(value, data, key);
149
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
150
+ }
151
+
152
+ public fun get_struct(user_storage: &UserStorage): Counter2 {
153
+ let mut key_tuple = vector::empty();
154
+ key_tuple.push_back(TABLE_NAME);
155
+ let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
156
+ let mut value_bcs = sui::bcs::new(value_raw);
157
+ let value = sui::bcs::peel_u32(&mut value_bcs);
158
+ let data_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"data");
159
+ let mut data_bcs = sui::bcs::new(data_raw);
160
+ let data = sui::bcs::peel_u64(&mut data_bcs);
161
+ let key_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"key");
162
+ let mut key_bcs = sui::bcs::new(key_raw);
163
+ let key = dubhe::bcs::peel_string(&mut key_bcs);
164
+ Counter2 { value, data, key }
165
+ }
166
+
167
+ public(package) fun set_struct(user_storage: &mut UserStorage, counter2: Counter2, ctx: &mut TxContext) {
168
+ let mut key_tuple = vector::empty();
169
+ key_tuple.push_back(TABLE_NAME);
170
+ let field_names = vector[b"value", b"data", b"key"];
171
+ let value_tuple = encode_struct(counter2);
172
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
173
+ }
174
+
175
+ public fun encode(value: u32, data: u64, key: String): vector<vector<u8>> {
176
+ let mut value_tuple = vector::empty();
177
+ value_tuple.push_back(to_bytes(&value));
178
+ value_tuple.push_back(to_bytes(&data));
179
+ value_tuple.push_back(to_bytes(&into_bytes(key)));
180
+ value_tuple
181
+ }
182
+
183
+ public fun encode_struct(counter2: Counter2): vector<vector<u8>> {
184
+ encode(counter2.value, counter2.data, counter2.key)
185
+ }
186
+
187
+ public fun decode(data: vector<u8>): Counter2 {
188
+ let mut bcs_type = sui::bcs::new(data);
189
+ let value = sui::bcs::peel_u32(&mut bcs_type);
190
+ let data = sui::bcs::peel_u64(&mut bcs_type);
191
+ let key = string(sui::bcs::peel_vec_u8(&mut bcs_type));
192
+ Counter2 {
193
+ value,
194
+ data,
195
+ key,
196
+ }
197
+ }
198
+ }
@@ -0,0 +1,90 @@
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::counter2withkey {
7
+ use sui::bcs::{to_bytes};
8
+ use std::ascii::String;
9
+ use dubhe::dapp_service::UserStorage;
10
+ use dubhe::dapp_system;
11
+ use counter::dapp_key;
12
+ use counter::dapp_key::DappKey;
13
+
14
+
15
+ const TABLE_NAME: vector<u8> = b"counter2withkey";
16
+ const OFFCHAIN: bool = false;
17
+
18
+ public fun has(user_storage: &UserStorage, data: u64, key: String): bool {
19
+ let mut key_tuple = vector::empty();
20
+ key_tuple.push_back(TABLE_NAME);
21
+ key_tuple.push_back(to_bytes(&data));
22
+ key_tuple.push_back(to_bytes(&key));
23
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
24
+ }
25
+
26
+ public fun ensure_has(user_storage: &UserStorage, data: u64, key: String) {
27
+ let mut key_tuple = vector::empty();
28
+ key_tuple.push_back(TABLE_NAME);
29
+ key_tuple.push_back(to_bytes(&data));
30
+ key_tuple.push_back(to_bytes(&key));
31
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
32
+ }
33
+
34
+ public fun ensure_has_not(user_storage: &UserStorage, data: u64, key: String) {
35
+ let mut key_tuple = vector::empty();
36
+ key_tuple.push_back(TABLE_NAME);
37
+ key_tuple.push_back(to_bytes(&data));
38
+ key_tuple.push_back(to_bytes(&key));
39
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
40
+ }
41
+
42
+
43
+ public(package) fun delete(user_storage: &mut UserStorage, data: u64, key: String, ctx: &TxContext) {
44
+ let mut key_tuple = vector::empty();
45
+ key_tuple.push_back(TABLE_NAME);
46
+ key_tuple.push_back(to_bytes(&data));
47
+ key_tuple.push_back(to_bytes(&key));
48
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"value"], ctx);
49
+ }
50
+
51
+ public fun get(user_storage: &UserStorage, data: u64, key: String): u32 {
52
+ let mut key_tuple = vector::empty();
53
+ key_tuple.push_back(TABLE_NAME);
54
+ key_tuple.push_back(to_bytes(&data));
55
+ key_tuple.push_back(to_bytes(&key));
56
+ let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
57
+ let mut value_bcs = sui::bcs::new(value_raw);
58
+ let value = sui::bcs::peel_u32(&mut value_bcs);
59
+ value
60
+ }
61
+
62
+ public(package) fun set(user_storage: &mut UserStorage, data: u64, key: String, value: u32, ctx: &mut TxContext) {
63
+ let mut key_tuple = vector::empty();
64
+ key_tuple.push_back(TABLE_NAME);
65
+ key_tuple.push_back(to_bytes(&data));
66
+ key_tuple.push_back(to_bytes(&key));
67
+ let field_names = vector[b"value"];
68
+ let value_tuple = encode(value);
69
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
70
+ }
71
+
72
+ public fun encode(value: u32): vector<vector<u8>> {
73
+ let mut value_tuple = vector::empty();
74
+ value_tuple.push_back(to_bytes(&value));
75
+ value_tuple
76
+ }
77
+
78
+
79
+ // ─── keys: mint (developer provides keys; framework ensures no duplicate) ─
80
+ // Choosing the ID strategy (fresh address, counter, coordinate pack, etc.)
81
+ // is intentionally left to the caller.
82
+ public(package) fun mint(
83
+ user_storage: &mut UserStorage,
84
+ data: u64, key: String, value: u32,
85
+ ctx: &mut TxContext,
86
+ ) {
87
+ ensure_has_not(user_storage, data, key);
88
+ set(user_storage, data, key, value, ctx);
89
+ }
90
+ }
@@ -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::value {
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::value {
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>> {
@@ -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,13 +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;
9
- use counter::value;
1
+ module counter::deploy_hook {
2
+ use dubhe::dapp_service::DappStorage;
10
3
 
11
- public(package) fun run(dapp_hub: &mut DappHub, ctx: &mut TxContext) {
12
- }
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
+ }
13
8
  }
@@ -1,16 +1,28 @@
1
1
  module counter::counter_system {
2
- use counter::errors::invalid_increment_error;
3
- use dubhe::dapp_service::DappHub;
2
+ use dubhe::dapp_service::UserStorage;
4
3
  use counter::value;
5
- use dubhe::address_system;
6
4
 
7
- public entry fun inc(dapp_hub: &mut DappHub, number: u32, ctx: &mut TxContext) {
8
- let sender = address_system::ensure_origin(ctx);
9
- if (value::has(dapp_hub, sender)) {
10
- let new_number = value::get(dapp_hub, sender) + number;
11
- value::set(dapp_hub, sender, new_number, ctx);
5
+ #[allow(lint(public_entry))]
6
+ public entry fun inc(user_storage: &mut UserStorage, ctx: &mut TxContext) {
7
+ let curr = if (value::has(user_storage)) {
8
+ value::get(user_storage)
12
9
  } else {
13
- value::set(dapp_hub, sender, number, ctx);
14
- }
10
+ 0u32
11
+ };
12
+ value::set(user_storage, curr + 1, ctx);
15
13
  }
16
- }
14
+
15
+ /// Guard-only entry function used for testing ensure_latest_version and
16
+ /// ensure_not_paused enforcement. Performs no writes.
17
+ #[allow(lint(public_entry))]
18
+ public entry fun check_version_guard(
19
+ dapp_storage: &dubhe::dapp_service::DappStorage,
20
+ _ctx: &mut TxContext
21
+ ) {
22
+ dubhe::dapp_system::ensure_latest_version<counter::dapp_key::DappKey>(
23
+ dapp_storage,
24
+ counter::migrate::on_chain_version()
25
+ );
26
+ dubhe::dapp_system::ensure_not_paused<counter::dapp_key::DappKey>(dapp_storage);
27
+ }
28
+ }