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,207 @@
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::crow_damage {
7
+ use sui::bcs::{to_bytes};
8
+ use dubhe::dapp_service::UserStorage;
9
+ use dubhe::dapp_service::ScenePermit;
10
+ use dubhe::dapp_system;
11
+ use harvest::dapp_key;
12
+ use harvest::dapp_key::DappKey;
13
+
14
+
15
+ const TABLE_NAME: vector<u8> = b"crow_damage";
16
+ const OFFCHAIN: bool = false;
17
+
18
+ public struct CrowDamage has copy, drop, store {
19
+ expires_at: u64,
20
+ damage_pct: u8,
21
+ }
22
+
23
+ public fun new(expires_at: u64, damage_pct: u8): CrowDamage {
24
+ CrowDamage {
25
+ expires_at,
26
+ damage_pct,
27
+ }
28
+ }
29
+
30
+ public fun expires_at(self: &CrowDamage): u64 {
31
+ self.expires_at
32
+ }
33
+
34
+ public fun damage_pct(self: &CrowDamage): u8 {
35
+ self.damage_pct
36
+ }
37
+
38
+ public fun update_expires_at(self: &mut CrowDamage, expires_at: u64) {
39
+ self.expires_at = expires_at
40
+ }
41
+
42
+ public fun update_damage_pct(self: &mut CrowDamage, damage_pct: u8) {
43
+ self.damage_pct = damage_pct
44
+ }
45
+
46
+ public fun has(user_storage: &UserStorage): bool {
47
+ let mut key_tuple = vector::empty();
48
+ key_tuple.push_back(TABLE_NAME);
49
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
50
+ }
51
+
52
+ public fun ensure_has(user_storage: &UserStorage) {
53
+ let mut key_tuple = vector::empty();
54
+ key_tuple.push_back(TABLE_NAME);
55
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
56
+ }
57
+
58
+ public fun ensure_has_not(user_storage: &UserStorage) {
59
+ let mut key_tuple = vector::empty();
60
+ key_tuple.push_back(TABLE_NAME);
61
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
62
+ }
63
+
64
+
65
+ public(package) fun delete(user_storage: &mut UserStorage, ctx: &TxContext) {
66
+ let mut key_tuple = vector::empty();
67
+ key_tuple.push_back(TABLE_NAME);
68
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"expires_at", b"damage_pct"], ctx);
69
+ }
70
+
71
+ public fun get_expires_at(user_storage: &UserStorage): u64 {
72
+ let mut key_tuple = vector::empty();
73
+ key_tuple.push_back(TABLE_NAME);
74
+ let expires_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"expires_at");
75
+ let mut expires_at_bcs = sui::bcs::new(expires_at_raw);
76
+ let expires_at = sui::bcs::peel_u64(&mut expires_at_bcs);
77
+ expires_at
78
+ }
79
+
80
+ public(package) fun set_expires_at(user_storage: &mut UserStorage, expires_at: u64, ctx: &mut TxContext) {
81
+ let mut key_tuple = vector::empty();
82
+ key_tuple.push_back(TABLE_NAME);
83
+ let value = to_bytes(&expires_at);
84
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"expires_at", value, ctx);
85
+ }
86
+
87
+ public fun get_damage_pct(user_storage: &UserStorage): u8 {
88
+ let mut key_tuple = vector::empty();
89
+ key_tuple.push_back(TABLE_NAME);
90
+ let damage_pct_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"damage_pct");
91
+ let mut damage_pct_bcs = sui::bcs::new(damage_pct_raw);
92
+ let damage_pct = sui::bcs::peel_u8(&mut damage_pct_bcs);
93
+ damage_pct
94
+ }
95
+
96
+ public(package) fun set_damage_pct(user_storage: &mut UserStorage, damage_pct: u8, ctx: &mut TxContext) {
97
+ let mut key_tuple = vector::empty();
98
+ key_tuple.push_back(TABLE_NAME);
99
+ let value = to_bytes(&damage_pct);
100
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"damage_pct", value, ctx);
101
+ }
102
+
103
+ public fun get(user_storage: &UserStorage): (u64, u8) {
104
+ let mut key_tuple = vector::empty();
105
+ key_tuple.push_back(TABLE_NAME);
106
+ let expires_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"expires_at");
107
+ let mut expires_at_bcs = sui::bcs::new(expires_at_raw);
108
+ let expires_at = sui::bcs::peel_u64(&mut expires_at_bcs);
109
+ let damage_pct_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"damage_pct");
110
+ let mut damage_pct_bcs = sui::bcs::new(damage_pct_raw);
111
+ let damage_pct = sui::bcs::peel_u8(&mut damage_pct_bcs);
112
+ (expires_at, damage_pct)
113
+ }
114
+
115
+ public(package) fun set(user_storage: &mut UserStorage, expires_at: u64, damage_pct: u8, ctx: &mut TxContext) {
116
+ let mut key_tuple = vector::empty();
117
+ key_tuple.push_back(TABLE_NAME);
118
+ let field_names = vector[b"expires_at", b"damage_pct"];
119
+ let value_tuple = encode(expires_at, damage_pct);
120
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
121
+ }
122
+
123
+ public fun get_struct(user_storage: &UserStorage): CrowDamage {
124
+ let mut key_tuple = vector::empty();
125
+ key_tuple.push_back(TABLE_NAME);
126
+ let expires_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"expires_at");
127
+ let mut expires_at_bcs = sui::bcs::new(expires_at_raw);
128
+ let expires_at = sui::bcs::peel_u64(&mut expires_at_bcs);
129
+ let damage_pct_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"damage_pct");
130
+ let mut damage_pct_bcs = sui::bcs::new(damage_pct_raw);
131
+ let damage_pct = sui::bcs::peel_u8(&mut damage_pct_bcs);
132
+ CrowDamage { expires_at, damage_pct }
133
+ }
134
+
135
+ public(package) fun set_struct(user_storage: &mut UserStorage, crow_damage: CrowDamage, ctx: &mut TxContext) {
136
+ let mut key_tuple = vector::empty();
137
+ key_tuple.push_back(TABLE_NAME);
138
+ let field_names = vector[b"expires_at", b"damage_pct"];
139
+ let value_tuple = encode_struct(crow_damage);
140
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
141
+ }
142
+
143
+ public fun encode(expires_at: u64, damage_pct: u8): vector<vector<u8>> {
144
+ let mut value_tuple = vector::empty();
145
+ value_tuple.push_back(to_bytes(&expires_at));
146
+ value_tuple.push_back(to_bytes(&damage_pct));
147
+ value_tuple
148
+ }
149
+
150
+ public fun encode_struct(crow_damage: CrowDamage): vector<vector<u8>> {
151
+ encode(crow_damage.expires_at, crow_damage.damage_pct)
152
+ }
153
+
154
+ public fun decode(data: vector<u8>): CrowDamage {
155
+ let mut bcs_type = sui::bcs::new(data);
156
+ let expires_at = sui::bcs::peel_u64(&mut bcs_type);
157
+ let damage_pct = sui::bcs::peel_u8(&mut bcs_type);
158
+ CrowDamage {
159
+ expires_at,
160
+ damage_pct,
161
+ }
162
+ }
163
+
164
+
165
+ // ─── reactive: cross-user write variants ───────────────────────────
166
+ // Package-level helpers: add pause checks and access control in your system
167
+ // functions before calling these.
168
+ public(package) fun set_reactive<PermType>(
169
+ permit: &ScenePermit<PermType>,
170
+ from: &mut UserStorage,
171
+ target: &mut UserStorage,
172
+ expires_at: u64, damage_pct: u8,
173
+ ctx: &mut TxContext,
174
+ ) {
175
+ let mut key_tuple = vector::empty();
176
+ key_tuple.push_back(TABLE_NAME);
177
+ let field_names = vector[b"expires_at", b"damage_pct"];
178
+ let value_tuple = encode(expires_at, damage_pct);
179
+ dapp_system::set_record_reactive<DappKey, PermType>(dapp_key::new(), permit, from, target, key_tuple, field_names, value_tuple, ctx);
180
+ }
181
+
182
+ public(package) fun set_expires_at_reactive<PermType>(
183
+ permit: &ScenePermit<PermType>,
184
+ from: &mut UserStorage,
185
+ target: &mut UserStorage,
186
+ expires_at: u64,
187
+ ctx: &mut TxContext,
188
+ ) {
189
+ let mut key_tuple = vector::empty();
190
+ key_tuple.push_back(TABLE_NAME);
191
+ let value = sui::bcs::to_bytes(&expires_at);
192
+ dapp_system::set_field_reactive<DappKey, PermType>(dapp_key::new(), permit, from, target, key_tuple, b"expires_at", value, ctx);
193
+ }
194
+
195
+ public(package) fun set_damage_pct_reactive<PermType>(
196
+ permit: &ScenePermit<PermType>,
197
+ from: &mut UserStorage,
198
+ target: &mut UserStorage,
199
+ damage_pct: u8,
200
+ ctx: &mut TxContext,
201
+ ) {
202
+ let mut key_tuple = vector::empty();
203
+ key_tuple.push_back(TABLE_NAME);
204
+ let value = sui::bcs::to_bytes(&damage_pct);
205
+ dapp_system::set_field_reactive<DappKey, PermType>(dapp_key::new(), permit, from, target, key_tuple, b"damage_pct", value, ctx);
206
+ }
207
+ }
@@ -0,0 +1,261 @@
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::farm_plot {
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"farm_plot";
15
+ const OFFCHAIN: bool = false;
16
+
17
+ public struct FarmPlot has copy, drop, store {
18
+ crop_type: u8,
19
+ count: u64,
20
+ planted_at: u64,
21
+ harvest_at: u64,
22
+ }
23
+
24
+ public fun new(crop_type: u8, count: u64, planted_at: u64, harvest_at: u64): FarmPlot {
25
+ FarmPlot {
26
+ crop_type,
27
+ count,
28
+ planted_at,
29
+ harvest_at,
30
+ }
31
+ }
32
+
33
+ public fun crop_type(self: &FarmPlot): u8 {
34
+ self.crop_type
35
+ }
36
+
37
+ public fun count(self: &FarmPlot): u64 {
38
+ self.count
39
+ }
40
+
41
+ public fun planted_at(self: &FarmPlot): u64 {
42
+ self.planted_at
43
+ }
44
+
45
+ public fun harvest_at(self: &FarmPlot): u64 {
46
+ self.harvest_at
47
+ }
48
+
49
+ public fun update_crop_type(self: &mut FarmPlot, crop_type: u8) {
50
+ self.crop_type = crop_type
51
+ }
52
+
53
+ public fun update_count(self: &mut FarmPlot, count: u64) {
54
+ self.count = count
55
+ }
56
+
57
+ public fun update_planted_at(self: &mut FarmPlot, planted_at: u64) {
58
+ self.planted_at = planted_at
59
+ }
60
+
61
+ public fun update_harvest_at(self: &mut FarmPlot, harvest_at: u64) {
62
+ self.harvest_at = harvest_at
63
+ }
64
+
65
+ public fun has(user_storage: &UserStorage, plot_id: u8): bool {
66
+ let mut key_tuple = vector::empty();
67
+ key_tuple.push_back(TABLE_NAME);
68
+ key_tuple.push_back(to_bytes(&plot_id));
69
+ dapp_system::has_record<DappKey>(user_storage, key_tuple)
70
+ }
71
+
72
+ public fun ensure_has(user_storage: &UserStorage, plot_id: u8) {
73
+ let mut key_tuple = vector::empty();
74
+ key_tuple.push_back(TABLE_NAME);
75
+ key_tuple.push_back(to_bytes(&plot_id));
76
+ dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
77
+ }
78
+
79
+ public fun ensure_has_not(user_storage: &UserStorage, plot_id: u8) {
80
+ let mut key_tuple = vector::empty();
81
+ key_tuple.push_back(TABLE_NAME);
82
+ key_tuple.push_back(to_bytes(&plot_id));
83
+ dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
84
+ }
85
+
86
+
87
+ public(package) fun delete(user_storage: &mut UserStorage, plot_id: u8, ctx: &TxContext) {
88
+ let mut key_tuple = vector::empty();
89
+ key_tuple.push_back(TABLE_NAME);
90
+ key_tuple.push_back(to_bytes(&plot_id));
91
+ dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"crop_type", b"count", b"planted_at", b"harvest_at"], ctx);
92
+ }
93
+
94
+ public fun get_crop_type(user_storage: &UserStorage, plot_id: u8): u8 {
95
+ let mut key_tuple = vector::empty();
96
+ key_tuple.push_back(TABLE_NAME);
97
+ key_tuple.push_back(to_bytes(&plot_id));
98
+ let crop_type_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"crop_type");
99
+ let mut crop_type_bcs = sui::bcs::new(crop_type_raw);
100
+ let crop_type = sui::bcs::peel_u8(&mut crop_type_bcs);
101
+ crop_type
102
+ }
103
+
104
+ public(package) fun set_crop_type(user_storage: &mut UserStorage, plot_id: u8, crop_type: u8, ctx: &mut TxContext) {
105
+ let mut key_tuple = vector::empty();
106
+ key_tuple.push_back(TABLE_NAME);
107
+ key_tuple.push_back(to_bytes(&plot_id));
108
+ let value = to_bytes(&crop_type);
109
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"crop_type", value, ctx);
110
+ }
111
+
112
+ public fun get_count(user_storage: &UserStorage, plot_id: u8): u64 {
113
+ let mut key_tuple = vector::empty();
114
+ key_tuple.push_back(TABLE_NAME);
115
+ key_tuple.push_back(to_bytes(&plot_id));
116
+ let count_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"count");
117
+ let mut count_bcs = sui::bcs::new(count_raw);
118
+ let count = sui::bcs::peel_u64(&mut count_bcs);
119
+ count
120
+ }
121
+
122
+ public(package) fun set_count(user_storage: &mut UserStorage, plot_id: u8, count: u64, ctx: &mut TxContext) {
123
+ let mut key_tuple = vector::empty();
124
+ key_tuple.push_back(TABLE_NAME);
125
+ key_tuple.push_back(to_bytes(&plot_id));
126
+ let value = to_bytes(&count);
127
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"count", value, ctx);
128
+ }
129
+
130
+ public fun get_planted_at(user_storage: &UserStorage, plot_id: u8): u64 {
131
+ let mut key_tuple = vector::empty();
132
+ key_tuple.push_back(TABLE_NAME);
133
+ key_tuple.push_back(to_bytes(&plot_id));
134
+ let planted_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"planted_at");
135
+ let mut planted_at_bcs = sui::bcs::new(planted_at_raw);
136
+ let planted_at = sui::bcs::peel_u64(&mut planted_at_bcs);
137
+ planted_at
138
+ }
139
+
140
+ public(package) fun set_planted_at(user_storage: &mut UserStorage, plot_id: u8, planted_at: u64, ctx: &mut TxContext) {
141
+ let mut key_tuple = vector::empty();
142
+ key_tuple.push_back(TABLE_NAME);
143
+ key_tuple.push_back(to_bytes(&plot_id));
144
+ let value = to_bytes(&planted_at);
145
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"planted_at", value, ctx);
146
+ }
147
+
148
+ public fun get_harvest_at(user_storage: &UserStorage, plot_id: u8): u64 {
149
+ let mut key_tuple = vector::empty();
150
+ key_tuple.push_back(TABLE_NAME);
151
+ key_tuple.push_back(to_bytes(&plot_id));
152
+ let harvest_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"harvest_at");
153
+ let mut harvest_at_bcs = sui::bcs::new(harvest_at_raw);
154
+ let harvest_at = sui::bcs::peel_u64(&mut harvest_at_bcs);
155
+ harvest_at
156
+ }
157
+
158
+ public(package) fun set_harvest_at(user_storage: &mut UserStorage, plot_id: u8, harvest_at: u64, ctx: &mut TxContext) {
159
+ let mut key_tuple = vector::empty();
160
+ key_tuple.push_back(TABLE_NAME);
161
+ key_tuple.push_back(to_bytes(&plot_id));
162
+ let value = to_bytes(&harvest_at);
163
+ dapp_system::set_field<DappKey>(dapp_key::new(), user_storage, key_tuple, b"harvest_at", value, ctx);
164
+ }
165
+
166
+ public fun get(user_storage: &UserStorage, plot_id: u8): (u8, u64, u64, u64) {
167
+ let mut key_tuple = vector::empty();
168
+ key_tuple.push_back(TABLE_NAME);
169
+ key_tuple.push_back(to_bytes(&plot_id));
170
+ let crop_type_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"crop_type");
171
+ let mut crop_type_bcs = sui::bcs::new(crop_type_raw);
172
+ let crop_type = sui::bcs::peel_u8(&mut crop_type_bcs);
173
+ let count_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"count");
174
+ let mut count_bcs = sui::bcs::new(count_raw);
175
+ let count = sui::bcs::peel_u64(&mut count_bcs);
176
+ let planted_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"planted_at");
177
+ let mut planted_at_bcs = sui::bcs::new(planted_at_raw);
178
+ let planted_at = sui::bcs::peel_u64(&mut planted_at_bcs);
179
+ let harvest_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"harvest_at");
180
+ let mut harvest_at_bcs = sui::bcs::new(harvest_at_raw);
181
+ let harvest_at = sui::bcs::peel_u64(&mut harvest_at_bcs);
182
+ (crop_type, count, planted_at, harvest_at)
183
+ }
184
+
185
+ public(package) fun set(user_storage: &mut UserStorage, plot_id: u8, crop_type: u8, count: u64, planted_at: u64, harvest_at: u64, ctx: &mut TxContext) {
186
+ let mut key_tuple = vector::empty();
187
+ key_tuple.push_back(TABLE_NAME);
188
+ key_tuple.push_back(to_bytes(&plot_id));
189
+ let field_names = vector[b"crop_type", b"count", b"planted_at", b"harvest_at"];
190
+ let value_tuple = encode(crop_type, count, planted_at, harvest_at);
191
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
192
+ }
193
+
194
+ public fun get_struct(user_storage: &UserStorage, plot_id: u8): FarmPlot {
195
+ let mut key_tuple = vector::empty();
196
+ key_tuple.push_back(TABLE_NAME);
197
+ key_tuple.push_back(to_bytes(&plot_id));
198
+ let crop_type_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"crop_type");
199
+ let mut crop_type_bcs = sui::bcs::new(crop_type_raw);
200
+ let crop_type = sui::bcs::peel_u8(&mut crop_type_bcs);
201
+ let count_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"count");
202
+ let mut count_bcs = sui::bcs::new(count_raw);
203
+ let count = sui::bcs::peel_u64(&mut count_bcs);
204
+ let planted_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"planted_at");
205
+ let mut planted_at_bcs = sui::bcs::new(planted_at_raw);
206
+ let planted_at = sui::bcs::peel_u64(&mut planted_at_bcs);
207
+ let harvest_at_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"harvest_at");
208
+ let mut harvest_at_bcs = sui::bcs::new(harvest_at_raw);
209
+ let harvest_at = sui::bcs::peel_u64(&mut harvest_at_bcs);
210
+ FarmPlot { crop_type, count, planted_at, harvest_at }
211
+ }
212
+
213
+ public(package) fun set_struct(user_storage: &mut UserStorage, plot_id: u8, farm_plot: FarmPlot, ctx: &mut TxContext) {
214
+ let mut key_tuple = vector::empty();
215
+ key_tuple.push_back(TABLE_NAME);
216
+ key_tuple.push_back(to_bytes(&plot_id));
217
+ let field_names = vector[b"crop_type", b"count", b"planted_at", b"harvest_at"];
218
+ let value_tuple = encode_struct(farm_plot);
219
+ dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
220
+ }
221
+
222
+ public fun encode(crop_type: u8, count: u64, planted_at: u64, harvest_at: u64): vector<vector<u8>> {
223
+ let mut value_tuple = vector::empty();
224
+ value_tuple.push_back(to_bytes(&crop_type));
225
+ value_tuple.push_back(to_bytes(&count));
226
+ value_tuple.push_back(to_bytes(&planted_at));
227
+ value_tuple.push_back(to_bytes(&harvest_at));
228
+ value_tuple
229
+ }
230
+
231
+ public fun encode_struct(farm_plot: FarmPlot): vector<vector<u8>> {
232
+ encode(farm_plot.crop_type, farm_plot.count, farm_plot.planted_at, farm_plot.harvest_at)
233
+ }
234
+
235
+ public fun decode(data: vector<u8>): FarmPlot {
236
+ let mut bcs_type = sui::bcs::new(data);
237
+ let crop_type = sui::bcs::peel_u8(&mut bcs_type);
238
+ let count = sui::bcs::peel_u64(&mut bcs_type);
239
+ let planted_at = sui::bcs::peel_u64(&mut bcs_type);
240
+ let harvest_at = sui::bcs::peel_u64(&mut bcs_type);
241
+ FarmPlot {
242
+ crop_type,
243
+ count,
244
+ planted_at,
245
+ harvest_at,
246
+ }
247
+ }
248
+
249
+
250
+ // ─── keys: mint (developer provides keys; framework ensures no duplicate) ─
251
+ // Choosing the ID strategy (fresh address, counter, coordinate pack, etc.)
252
+ // is intentionally left to the caller.
253
+ public(package) fun mint(
254
+ user_storage: &mut UserStorage,
255
+ plot_id: u8, crop_type: u8, count: u64, planted_at: u64, harvest_at: u64,
256
+ ctx: &mut TxContext,
257
+ ) {
258
+ ensure_has_not(user_storage, plot_id);
259
+ set(user_storage, plot_id, crop_type, count, planted_at, harvest_at, ctx);
260
+ }
261
+ }
@@ -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::gold {
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"gold";
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
+ }