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
@@ -0,0 +1,245 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module harvest::trophy {
7
+ use sui::bcs::{to_bytes};
8
+ use dubhe::dapp_service::{UserStorage, DappStorage};
9
+ use dubhe::dapp_system;
10
+ use harvest::dapp_key;
11
+ use harvest::dapp_key::DappKey;
12
+
13
+
14
+ const TABLE_NAME: vector<u8> = b"trophy";
15
+ const OFFCHAIN: bool = false;
16
+
17
+ public struct Trophy has copy, drop, store {
18
+ rank: u32,
19
+ total_earned: u64,
20
+ }
21
+
22
+ public fun new(rank: u32, total_earned: u64): Trophy {
23
+ Trophy {
24
+ rank,
25
+ total_earned,
26
+ }
27
+ }
28
+
29
+ public fun rank(self: &Trophy): u32 {
30
+ self.rank
31
+ }
32
+
33
+ public fun total_earned(self: &Trophy): u64 {
34
+ self.total_earned
35
+ }
36
+
37
+ public fun update_rank(self: &mut Trophy, rank: u32) {
38
+ self.rank = rank
39
+ }
40
+
41
+ public fun update_total_earned(self: &mut Trophy, total_earned: u64) {
42
+ self.total_earned = total_earned
43
+ }
44
+
45
+ public fun has(user_storage: &UserStorage, season: u8): bool {
46
+ let mut key_tuple = vector::empty();
47
+ key_tuple.push_back(TABLE_NAME);
48
+ key_tuple.push_back(to_bytes(&season));
49
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
50
+ }
51
+
52
+ public fun ensure_has(user_storage: &UserStorage, season: u8) {
53
+ let mut key_tuple = vector::empty();
54
+ key_tuple.push_back(TABLE_NAME);
55
+ key_tuple.push_back(to_bytes(&season));
56
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
57
+ }
58
+
59
+ public fun ensure_has_not(user_storage: &UserStorage, season: u8) {
60
+ let mut key_tuple = vector::empty();
61
+ key_tuple.push_back(TABLE_NAME);
62
+ key_tuple.push_back(to_bytes(&season));
63
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
64
+ }
65
+
66
+
67
+ public(package) fun delete(user_storage: &mut UserStorage, season: u8, ctx: &TxContext) {
68
+ let mut key_tuple = vector::empty();
69
+ key_tuple.push_back(TABLE_NAME);
70
+ key_tuple.push_back(to_bytes(&season));
71
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"rank", b"total_earned"], ctx);
72
+ }
73
+
74
+ public fun get_rank(user_storage: &UserStorage, season: u8): u32 {
75
+ let mut key_tuple = vector::empty();
76
+ key_tuple.push_back(TABLE_NAME);
77
+ key_tuple.push_back(to_bytes(&season));
78
+ let rank_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"rank");
79
+ let mut rank_bcs = sui::bcs::new(rank_raw);
80
+ let rank = sui::bcs::peel_u32(&mut rank_bcs);
81
+ rank
82
+ }
83
+
84
+ public(package) fun set_rank(user_storage: &mut UserStorage, season: u8, rank: u32, ctx: &mut TxContext) {
85
+ let mut key_tuple = vector::empty();
86
+ key_tuple.push_back(TABLE_NAME);
87
+ key_tuple.push_back(to_bytes(&season));
88
+ let value = to_bytes(&rank);
89
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"rank", value, ctx);
90
+ }
91
+
92
+ public fun get_total_earned(user_storage: &UserStorage, season: u8): u64 {
93
+ let mut key_tuple = vector::empty();
94
+ key_tuple.push_back(TABLE_NAME);
95
+ key_tuple.push_back(to_bytes(&season));
96
+ let total_earned_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"total_earned");
97
+ let mut total_earned_bcs = sui::bcs::new(total_earned_raw);
98
+ let total_earned = sui::bcs::peel_u64(&mut total_earned_bcs);
99
+ total_earned
100
+ }
101
+
102
+ public(package) fun set_total_earned(user_storage: &mut UserStorage, season: u8, total_earned: u64, ctx: &mut TxContext) {
103
+ let mut key_tuple = vector::empty();
104
+ key_tuple.push_back(TABLE_NAME);
105
+ key_tuple.push_back(to_bytes(&season));
106
+ let value = to_bytes(&total_earned);
107
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"total_earned", value, ctx);
108
+ }
109
+
110
+ public fun get(user_storage: &UserStorage, season: u8): (u32, u64) {
111
+ let mut key_tuple = vector::empty();
112
+ key_tuple.push_back(TABLE_NAME);
113
+ key_tuple.push_back(to_bytes(&season));
114
+ let rank_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"rank");
115
+ let mut rank_bcs = sui::bcs::new(rank_raw);
116
+ let rank = sui::bcs::peel_u32(&mut rank_bcs);
117
+ let total_earned_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"total_earned");
118
+ let mut total_earned_bcs = sui::bcs::new(total_earned_raw);
119
+ let total_earned = sui::bcs::peel_u64(&mut total_earned_bcs);
120
+ (rank, total_earned)
121
+ }
122
+
123
+ public(package) fun set(user_storage: &mut UserStorage, season: u8, rank: u32, total_earned: u64, ctx: &mut TxContext) {
124
+ let mut key_tuple = vector::empty();
125
+ key_tuple.push_back(TABLE_NAME);
126
+ key_tuple.push_back(to_bytes(&season));
127
+ let field_names = vector[b"rank", b"total_earned"];
128
+ let value_tuple = encode(rank, total_earned);
129
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
130
+ }
131
+
132
+ public fun get_struct(user_storage: &UserStorage, season: u8): Trophy {
133
+ let mut key_tuple = vector::empty();
134
+ key_tuple.push_back(TABLE_NAME);
135
+ key_tuple.push_back(to_bytes(&season));
136
+ let rank_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"rank");
137
+ let mut rank_bcs = sui::bcs::new(rank_raw);
138
+ let rank = sui::bcs::peel_u32(&mut rank_bcs);
139
+ let total_earned_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"total_earned");
140
+ let mut total_earned_bcs = sui::bcs::new(total_earned_raw);
141
+ let total_earned = sui::bcs::peel_u64(&mut total_earned_bcs);
142
+ Trophy { rank, total_earned }
143
+ }
144
+
145
+ public(package) fun set_struct(user_storage: &mut UserStorage, season: u8, trophy: Trophy, ctx: &mut TxContext) {
146
+ let mut key_tuple = vector::empty();
147
+ key_tuple.push_back(TABLE_NAME);
148
+ key_tuple.push_back(to_bytes(&season));
149
+ let field_names = vector[b"rank", b"total_earned"];
150
+ let value_tuple = encode_struct(trophy);
151
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
152
+ }
153
+
154
+ public fun encode(rank: u32, total_earned: u64): vector<vector<u8>> {
155
+ let mut value_tuple = vector::empty();
156
+ value_tuple.push_back(to_bytes(&rank));
157
+ value_tuple.push_back(to_bytes(&total_earned));
158
+ value_tuple
159
+ }
160
+
161
+ public fun encode_struct(trophy: Trophy): vector<vector<u8>> {
162
+ encode(trophy.rank, trophy.total_earned)
163
+ }
164
+
165
+ public fun decode(data: vector<u8>): Trophy {
166
+ let mut bcs_type = sui::bcs::new(data);
167
+ let rank = sui::bcs::peel_u32(&mut bcs_type);
168
+ let total_earned = sui::bcs::peel_u64(&mut bcs_type);
169
+ Trophy {
170
+ rank,
171
+ total_earned,
172
+ }
173
+ }
174
+
175
+
176
+ // ─── keys: mint (developer provides keys; framework ensures no duplicate) ─
177
+ // Choosing the ID strategy (fresh address, counter, coordinate pack, etc.)
178
+ // is intentionally left to the caller.
179
+ public(package) fun mint(
180
+ user_storage: &mut UserStorage,
181
+ season: u8, rank: u32, total_earned: u64,
182
+ ctx: &mut TxContext,
183
+ ) {
184
+ ensure_has_not(user_storage, season);
185
+ set(user_storage, season, rank, total_earned, ctx);
186
+ }
187
+
188
+ // ─── listable: market protocol (keyed) ──────────────────────────────
189
+ // Package-level helpers: call these from your system functions.
190
+ // Add pause checks, access control, and custom logic there.
191
+ public(package) fun list<CoinType>(
192
+ user_storage: &mut UserStorage,
193
+ season: u8,
194
+ price: u64,
195
+ listed_until: std::option::Option<u64>,
196
+ ctx: &mut TxContext,
197
+ ) {
198
+ let mut record_key = vector::empty();
199
+ record_key.push_back(TABLE_NAME);
200
+ record_key.push_back(sui::bcs::to_bytes(&season));
201
+ dubhe::dapp_system::take_record<DappKey, CoinType>(
202
+ dapp_key::new(),
203
+ user_storage,
204
+ b"trophy",
205
+ record_key,
206
+ vector[b"rank", b"total_earned"],
207
+ price,
208
+ listed_until,
209
+ ctx,
210
+ );
211
+ }
212
+
213
+ public(package) fun buy<CoinType>(
214
+ dh: &dubhe::dapp_service::DappHub,
215
+ dapp_storage: &mut DappStorage,
216
+ listing: dubhe::dapp_service::Listing<CoinType>,
217
+ user_storage: &mut UserStorage,
218
+ payment: sui::coin::Coin<CoinType>,
219
+ ctx: &mut TxContext,
220
+ ): sui::coin::Coin<CoinType> {
221
+ dubhe::dapp_system::buy_record<DappKey, CoinType>(
222
+ dapp_key::new(), dh, dapp_storage, listing, user_storage, payment, ctx
223
+ )
224
+ }
225
+
226
+ public(package) fun cancel_listing<CoinType>(
227
+ listing: dubhe::dapp_service::Listing<CoinType>,
228
+ user_storage: &mut UserStorage,
229
+ ctx: &TxContext,
230
+ ) {
231
+ dubhe::dapp_system::restore_record<DappKey, CoinType>(
232
+ dapp_key::new(), listing, user_storage, ctx
233
+ );
234
+ }
235
+
236
+ public(package) fun expire_listing<CoinType>(
237
+ listing: dubhe::dapp_service::Listing<CoinType>,
238
+ user_storage: &mut UserStorage,
239
+ ctx: &TxContext,
240
+ ) {
241
+ dubhe::dapp_system::expire_listing<DappKey, CoinType>(
242
+ dapp_key::new(), listing, user_storage, ctx
243
+ );
244
+ }
245
+ }
@@ -0,0 +1,136 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module harvest::wheat {
7
+ use sui::bcs::{to_bytes};
8
+ use dubhe::dapp_service::{UserStorage, DappStorage};
9
+ use dubhe::dapp_system;
10
+ use harvest::dapp_key;
11
+ use harvest::dapp_key::DappKey;
12
+
13
+
14
+ const TABLE_NAME: vector<u8> = b"wheat";
15
+ const OFFCHAIN: bool = false;
16
+
17
+ public fun has(user_storage: &UserStorage): bool {
18
+ let mut key_tuple = vector::empty();
19
+ key_tuple.push_back(TABLE_NAME);
20
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
21
+ }
22
+
23
+ public fun ensure_has(user_storage: &UserStorage) {
24
+ let mut key_tuple = vector::empty();
25
+ key_tuple.push_back(TABLE_NAME);
26
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
27
+ }
28
+
29
+ public fun ensure_has_not(user_storage: &UserStorage) {
30
+ let mut key_tuple = vector::empty();
31
+ key_tuple.push_back(TABLE_NAME);
32
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
33
+ }
34
+
35
+
36
+ public(package) fun delete(user_storage: &mut UserStorage, ctx: &TxContext) {
37
+ let mut key_tuple = vector::empty();
38
+ key_tuple.push_back(TABLE_NAME);
39
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"amount"], ctx);
40
+ }
41
+
42
+ public fun get(user_storage: &UserStorage): u64 {
43
+ let mut key_tuple = vector::empty();
44
+ key_tuple.push_back(TABLE_NAME);
45
+ let amount_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"amount");
46
+ let mut amount_bcs = sui::bcs::new(amount_raw);
47
+ let value = sui::bcs::peel_u64(&mut amount_bcs);
48
+ value
49
+ }
50
+
51
+ public(package) fun set(user_storage: &mut UserStorage, value: u64, ctx: &mut TxContext) {
52
+ let mut key_tuple = vector::empty();
53
+ key_tuple.push_back(TABLE_NAME);
54
+ let field_names = vector[b"amount"];
55
+ let value_tuple = encode(value);
56
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
57
+ }
58
+
59
+ public fun encode(value: u64): vector<vector<u8>> {
60
+ let mut value_tuple = vector::empty();
61
+ value_tuple.push_back(to_bytes(&value));
62
+ value_tuple
63
+ }
64
+
65
+
66
+ // ─── fungible add / sub ─────────────────────────────────────────────
67
+ #[error]
68
+ const EInsufficientAmount: vector<u8> = b"Insufficient amount";
69
+
70
+ public(package) fun add(user_storage: &mut UserStorage, amount: u64, ctx: &mut TxContext) {
71
+ let current = if (has(user_storage)) { get(user_storage) } else { 0 };
72
+ set(user_storage, current + amount, ctx);
73
+ }
74
+
75
+ public(package) fun sub(user_storage: &mut UserStorage, amount: u64, ctx: &mut TxContext) {
76
+ let current = get(user_storage);
77
+ assert!(current >= amount, EInsufficientAmount);
78
+ set(user_storage, current - amount, ctx);
79
+ }
80
+
81
+ // ─── listable: market protocol (fungible) ──────────────────────────
82
+ // Package-level helpers: call these from your system functions.
83
+ // Add pause checks, access control, and custom logic there.
84
+ public(package) fun list<CoinType>(
85
+ user_storage: &mut UserStorage,
86
+ amount: u64,
87
+ price: u64,
88
+ listed_until: std::option::Option<u64>,
89
+ ctx: &mut TxContext,
90
+ ) {
91
+ dubhe::dapp_system::take_fungible_record<DappKey, CoinType>(
92
+ dapp_key::new(),
93
+ user_storage,
94
+ b"wheat",
95
+ { let mut k = vector::empty(); k.push_back(TABLE_NAME); k },
96
+ b"amount",
97
+ amount,
98
+ price,
99
+ listed_until,
100
+ ctx,
101
+ );
102
+ }
103
+
104
+ public(package) fun buy<CoinType>(
105
+ dh: &dubhe::dapp_service::DappHub,
106
+ dapp_storage: &mut DappStorage,
107
+ listing: dubhe::dapp_service::Listing<CoinType>,
108
+ user_storage: &mut UserStorage,
109
+ payment: sui::coin::Coin<CoinType>,
110
+ ctx: &mut TxContext,
111
+ ): sui::coin::Coin<CoinType> {
112
+ dubhe::dapp_system::buy_fungible_record<DappKey, CoinType>(
113
+ dapp_key::new(), dh, dapp_storage, listing, user_storage, payment, ctx
114
+ )
115
+ }
116
+
117
+ public(package) fun cancel_listing<CoinType>(
118
+ listing: dubhe::dapp_service::Listing<CoinType>,
119
+ user_storage: &mut UserStorage,
120
+ ctx: &TxContext,
121
+ ) {
122
+ dubhe::dapp_system::cancel_fungible_listing<DappKey, CoinType>(
123
+ dapp_key::new(), listing, user_storage, ctx
124
+ );
125
+ }
126
+
127
+ public(package) fun expire_listing<CoinType>(
128
+ listing: dubhe::dapp_service::Listing<CoinType>,
129
+ user_storage: &mut UserStorage,
130
+ ctx: &TxContext,
131
+ ) {
132
+ dubhe::dapp_system::expire_fungible_listing<DappKey, CoinType>(
133
+ dapp_key::new(), listing, user_storage, ctx
134
+ );
135
+ }
136
+ }
@@ -0,0 +1,80 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module harvest::wheat_seed {
7
+ use sui::bcs::{to_bytes};
8
+ use dubhe::dapp_service::UserStorage;
9
+ use dubhe::dapp_system;
10
+ use harvest::dapp_key;
11
+ use harvest::dapp_key::DappKey;
12
+
13
+
14
+ const TABLE_NAME: vector<u8> = b"wheat_seed";
15
+ const OFFCHAIN: bool = false;
16
+
17
+ public fun has(user_storage: &UserStorage): bool {
18
+ let mut key_tuple = vector::empty();
19
+ key_tuple.push_back(TABLE_NAME);
20
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
21
+ }
22
+
23
+ public fun ensure_has(user_storage: &UserStorage) {
24
+ let mut key_tuple = vector::empty();
25
+ key_tuple.push_back(TABLE_NAME);
26
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
27
+ }
28
+
29
+ public fun ensure_has_not(user_storage: &UserStorage) {
30
+ let mut key_tuple = vector::empty();
31
+ key_tuple.push_back(TABLE_NAME);
32
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
33
+ }
34
+
35
+
36
+ public(package) fun delete(user_storage: &mut UserStorage, ctx: &TxContext) {
37
+ let mut key_tuple = vector::empty();
38
+ key_tuple.push_back(TABLE_NAME);
39
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"amount"], ctx);
40
+ }
41
+
42
+ public fun get(user_storage: &UserStorage): u64 {
43
+ let mut key_tuple = vector::empty();
44
+ key_tuple.push_back(TABLE_NAME);
45
+ let amount_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"amount");
46
+ let mut amount_bcs = sui::bcs::new(amount_raw);
47
+ let value = sui::bcs::peel_u64(&mut amount_bcs);
48
+ value
49
+ }
50
+
51
+ public(package) fun set(user_storage: &mut UserStorage, value: u64, ctx: &mut TxContext) {
52
+ let mut key_tuple = vector::empty();
53
+ key_tuple.push_back(TABLE_NAME);
54
+ let field_names = vector[b"amount"];
55
+ let value_tuple = encode(value);
56
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
57
+ }
58
+
59
+ public fun encode(value: u64): vector<vector<u8>> {
60
+ let mut value_tuple = vector::empty();
61
+ value_tuple.push_back(to_bytes(&value));
62
+ value_tuple
63
+ }
64
+
65
+
66
+ // ─── fungible add / sub ─────────────────────────────────────────────
67
+ #[error]
68
+ const EInsufficientAmount: vector<u8> = b"Insufficient amount";
69
+
70
+ public(package) fun add(user_storage: &mut UserStorage, amount: u64, ctx: &mut TxContext) {
71
+ let current = if (has(user_storage)) { get(user_storage) } else { 0 };
72
+ set(user_storage, current + amount, ctx);
73
+ }
74
+
75
+ public(package) fun sub(user_storage: &mut UserStorage, amount: u64, ctx: &mut TxContext) {
76
+ let current = get(user_storage);
77
+ assert!(current >= amount, EInsufficientAmount);
78
+ set(user_storage, current - amount, ctx);
79
+ }
80
+ }
@@ -0,0 +1,64 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /* Autogenerated file. Do not edit manually. */
5
+
6
+ module harvest::world_permit_id {
7
+ use sui::bcs::{to_bytes};
8
+ use dubhe::dapp_service::DappStorage;
9
+ use dubhe::dapp_system;
10
+ use harvest::dapp_key;
11
+ use harvest::dapp_key::DappKey;
12
+
13
+
14
+ const TABLE_NAME: vector<u8> = b"world_permit_id";
15
+ const OFFCHAIN: bool = false;
16
+
17
+ public fun has(dapp_storage: &DappStorage): bool {
18
+ let mut key_tuple = vector::empty();
19
+ key_tuple.push_back(TABLE_NAME);
20
+ dapp_system::has_global_record<DappKey>(dapp_storage, key_tuple)
21
+ }
22
+
23
+ public fun ensure_has(dapp_storage: &DappStorage) {
24
+ let mut key_tuple = vector::empty();
25
+ key_tuple.push_back(TABLE_NAME);
26
+ dapp_system::ensure_has_global_record<DappKey>(dapp_storage, key_tuple)
27
+ }
28
+
29
+ public fun ensure_has_not(dapp_storage: &DappStorage) {
30
+ let mut key_tuple = vector::empty();
31
+ key_tuple.push_back(TABLE_NAME);
32
+ dapp_system::ensure_has_not_global_record<DappKey>(dapp_storage, key_tuple)
33
+ }
34
+
35
+
36
+ public(package) fun delete(dapp_storage: &mut DappStorage) {
37
+ let mut key_tuple = vector::empty();
38
+ key_tuple.push_back(TABLE_NAME);
39
+ dapp_system::delete_global_record<DappKey>(dapp_key::new(), dapp_storage, key_tuple, vector[b"object_id"]);
40
+ }
41
+
42
+ public fun get(dapp_storage: &DappStorage): address {
43
+ let mut key_tuple = vector::empty();
44
+ key_tuple.push_back(TABLE_NAME);
45
+ let object_id_raw = dapp_system::get_global_field<DappKey>(dapp_storage, key_tuple, b"object_id");
46
+ let mut object_id_bcs = sui::bcs::new(object_id_raw);
47
+ let value = sui::bcs::peel_address(&mut object_id_bcs);
48
+ value
49
+ }
50
+
51
+ public(package) fun set(dapp_storage: &mut DappStorage, value: address) {
52
+ let mut key_tuple = vector::empty();
53
+ key_tuple.push_back(TABLE_NAME);
54
+ let field_names = vector[b"object_id"];
55
+ let value_tuple = encode(value);
56
+ dapp_system::set_global_record<DappKey>(dapp_key::new(), dapp_storage, key_tuple, field_names, value_tuple, OFFCHAIN);
57
+ }
58
+
59
+ public fun encode(value: address): vector<vector<u8>> {
60
+ let mut value_tuple = vector::empty();
61
+ value_tuple.push_back(to_bytes(&value));
62
+ value_tuple
63
+ }
64
+ }
@@ -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 harvest::user_storage_init {
7
+ use dubhe::dapp_service::{DappHub, DappStorage};
8
+ use dubhe::dapp_system;
9
+ use harvest::dapp_key;
10
+ use harvest::dapp_key::DappKey;
11
+ use harvest::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
+ }
@@ -0,0 +1,45 @@
1
+ module harvest::deploy_hook {
2
+ use dubhe::dapp_service::DappStorage;
3
+ use harvest::shop_config;
4
+ use harvest::season_config;
5
+ use harvest::pet_config;
6
+ use harvest::world;
7
+ use harvest::world_permit_id;
8
+
9
+ public(package) fun run(dapp_storage: &mut DappStorage, ctx: &mut TxContext) {
10
+ // Seed prices (wheat=5, corn=20, carrot=60, pumpkin=40, extra_plot=200)
11
+ shop_config::set(dapp_storage, 5, 20, 60, 40, 200);
12
+ // season_id=0, end_ms=0 (inactive), bonus_crop=0 (None)
13
+ season_config::set(dapp_storage, 0, 0, 0);
14
+
15
+ // Pet config:
16
+ // common_egg=80g rare_egg=300g seasonal_egg=500g
17
+ // common_hatch=5min rare_hatch=20min seasonal_hatch=10min
18
+ // slot2=200g slot3=500g
19
+ pet_config::set(
20
+ dapp_storage,
21
+ 80, // common_egg_price
22
+ 300, // rare_egg_price
23
+ 500, // seasonal_egg_price
24
+ 5 * 60 * 1000, // common_hatch_ms (5 minutes)
25
+ 20 * 60 * 1000, // rare_hatch_ms (20 minutes)
26
+ 10 * 60 * 1000, // seasonal_hatch_ms (10 minutes)
27
+ 200, // slot2_price
28
+ 500, // slot3_price
29
+ );
30
+
31
+ // Create the global World permit (unlimited participants, no expiry),
32
+ // save its ID so the frontend can locate it, then share it.
33
+ let permit = world::new_world(
34
+ dapp_storage,
35
+ vector::empty(),
36
+ std::option::none(),
37
+ std::option::none(),
38
+ ctx,
39
+ );
40
+ let permit_addr = sui::object::id_address(&permit);
41
+ world_permit_id::set(dapp_storage, permit_addr);
42
+ world::share_world(permit);
43
+ }
44
+ }
45
+
@@ -0,0 +1,7 @@
1
+ module harvest::migrate {
2
+ const ON_CHAIN_VERSION: u32 = 1;
3
+
4
+ public fun on_chain_version(): u32 {
5
+ ON_CHAIN_VERSION
6
+ }
7
+ }