create-dubhe 1.2.0-pre.98 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/package.json +16 -16
- package/templates/101/sui-template/docker-compose.testnet.yml +73 -0
- package/templates/101/sui-template/packages/client/src/app/page.tsx +545 -41
- package/templates/101/sui-template/packages/client/src/app/providers.tsx +12 -4
- package/templates/101/sui-template/packages/contracts/Pub.localnet.toml +4 -4
- package/templates/101/sui-template/packages/contracts/counter.lock.json +20 -0
- package/templates/101/sui-template/packages/contracts/deployment.ts +8 -3
- package/templates/101/sui-template/packages/contracts/dubhe.config.json +59 -13
- package/templates/101/sui-template/packages/contracts/dubhe.config.ts +1 -4
- package/templates/101/sui-template/packages/contracts/metadata.json +1015 -68
- package/templates/101/sui-template/packages/contracts/package.json +7 -4
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/dapp_key.move +45 -31
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/error.move +8 -0
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/genesis.move +30 -13
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/init_test.move +19 -14
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2.move +198 -0
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2withkey.move +90 -0
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/resources/value.move +30 -20
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
- package/templates/101/sui-template/packages/contracts/src/counter/sources/scripts/deploy_hook.move +6 -11
- package/templates/101/sui-template/packages/contracts/src/counter/sources/systems/counter.move +23 -11
- package/templates/101/sui-template/packages/contracts/src/counter/sources/tests/counter.move +15 -14
- package/templates/101/sui-template/packages/contracts/src/dubhe/Move.lock +33 -30
- package/templates/101/sui-template/packages/contracts/src/dubhe/Move.toml +8 -3
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/dapp_key.move +45 -31
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/error.move +170 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/genesis.move +16 -13
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/init_test.move +8 -14
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/account_key.move +1 -3
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/dapp_service.move +1776 -137
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/data_key.move +1 -20
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/events.move +864 -25
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/scripts/deploy_hook.move +15 -16
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/scripts/migrate.move +0 -3
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/address_system.move +25 -17
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/dapp_system.move +2802 -343
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/utils.move +1 -1
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/address.move +173 -55
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/dapp_test.move +769 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/fee_test.move +2965 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/integration_test.move +303 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/listing_test.move +1422 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/scene_session_test.move +269 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/session_test.move +624 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/storage_test.move +700 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/typed_object_test.move +177 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/typed_scene_test.move +452 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/tests/user_storage_test.move +160 -0
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/utils/math.move +4 -3
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/utils/type_info.move +2 -2
- package/templates/contract/sui-template/dubhe.config.ts +0 -1
- package/templates/contract/sui-template/package.json +3 -3
- package/templates/contract/sui-template/src/dubhe/Move.lock +33 -30
- package/templates/contract/sui-template/src/dubhe/Move.toml +8 -3
- package/templates/contract/sui-template/src/dubhe/sources/codegen/dapp_key.move +45 -31
- package/templates/contract/sui-template/src/dubhe/sources/codegen/error.move +170 -0
- package/templates/contract/sui-template/src/dubhe/sources/codegen/genesis.move +16 -13
- package/templates/contract/sui-template/src/dubhe/sources/codegen/init_test.move +8 -14
- package/templates/contract/sui-template/src/dubhe/sources/core/account_key.move +1 -3
- package/templates/contract/sui-template/src/dubhe/sources/core/dapp_service.move +1776 -137
- package/templates/contract/sui-template/src/dubhe/sources/core/data_key.move +1 -20
- package/templates/contract/sui-template/src/dubhe/sources/core/events.move +864 -25
- package/templates/contract/sui-template/src/dubhe/sources/scripts/deploy_hook.move +15 -16
- package/templates/contract/sui-template/src/dubhe/sources/scripts/migrate.move +0 -3
- package/templates/contract/sui-template/src/dubhe/sources/systems/address_system.move +25 -17
- package/templates/contract/sui-template/src/dubhe/sources/systems/dapp_system.move +2802 -343
- package/templates/contract/sui-template/src/dubhe/sources/systems/utils.move +1 -1
- package/templates/contract/sui-template/src/dubhe/sources/tests/address.move +173 -55
- package/templates/contract/sui-template/src/dubhe/sources/tests/dapp_test.move +769 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/fee_test.move +2965 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/integration_test.move +303 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/listing_test.move +1422 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/scene_session_test.move +269 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/session_test.move +624 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/storage_test.move +700 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/typed_object_test.move +177 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/typed_scene_test.move +452 -0
- package/templates/contract/sui-template/src/dubhe/sources/tests/user_storage_test.move +160 -0
- package/templates/contract/sui-template/src/dubhe/sources/utils/math.move +4 -3
- package/templates/contract/sui-template/src/dubhe/sources/utils/type_info.move +2 -2
- package/templates/contract/sui-template/src/template/Move.toml +12 -0
- package/templates/contract/sui-template/src/template/sources/codegen/dapp_key.move +47 -0
- package/templates/contract/sui-template/src/template/sources/codegen/genesis.move +34 -0
- package/templates/contract/sui-template/src/template/sources/codegen/init_test.move +23 -0
- package/templates/contract/sui-template/src/template/sources/codegen/user_storage_init.move +27 -0
- package/templates/contract/sui-template/src/template/sources/scripts/deploy_hook.move +13 -0
- package/templates/contract/sui-template/src/template/sources/scripts/migrate.move +7 -0
- package/templates/nextjs/sui-card-duel/.gitignore_ +51 -0
- package/templates/nextjs/sui-card-duel/README.md +213 -0
- package/templates/nextjs/sui-card-duel/docker-compose.yml +34 -0
- package/templates/nextjs/sui-card-duel/mprocs.yaml +17 -0
- package/templates/nextjs/sui-card-duel/package.json +43 -0
- package/templates/nextjs/sui-card-duel/packages/client/.gitignore_ +48 -0
- package/templates/nextjs/sui-card-duel/packages/client/.prettierignore +1 -0
- package/templates/nextjs/sui-card-duel/packages/client/.prettierrc.json +8 -0
- package/templates/nextjs/sui-card-duel/packages/client/eslint.config.mjs +22 -0
- package/templates/nextjs/sui-card-duel/packages/client/next.config.mjs +8 -0
- package/templates/nextjs/sui-card-duel/packages/client/package.json +47 -0
- package/templates/nextjs/sui-card-duel/packages/client/postcss.config.mjs +8 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/admin/ArenaPanel.tsx +307 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/admin/page.tsx +622 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/brawl/[id]/page.tsx +559 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/collection/page.tsx +202 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/components/CardView.tsx +66 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/components/GameShell.tsx +294 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/components/icons.tsx +101 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/duel/[id]/page.tsx +477 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/favicon.ico +0 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/globals.css +85 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/hooks/useGame.ts +313 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/layout.tsx +24 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/leaderboard/page.tsx +123 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/lib/game.ts +77 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/lib/scenes.ts +226 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/market/page.tsx +418 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/page.tsx +427 -0
- package/templates/nextjs/sui-card-duel/packages/client/src/app/providers.tsx +69 -0
- package/templates/nextjs/sui-card-duel/packages/client/tailwind.config.ts +21 -0
- package/templates/nextjs/sui-card-duel/packages/client/tsconfig.json +30 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/.gitignore_ +51 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/.prettierignore +1 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/.prettierrc.json +8 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/Dockerfile +5 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/Pub.localnet.toml +13 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/card_duel.lock.json +66 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/docker-compose.yml +34 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/dubhe.config.ts +150 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/logs/combined.log +31383 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/package.json +49 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/config.ts +17 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-brawl.ts +270 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-duel.ts +272 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-lobby.ts +177 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-market.ts +219 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/e2e-session.ts +342 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/query-dapp-revenue.ts +95 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/seed.ts +92 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/scripts/withdraw-dapp-revenue.ts +56 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/Move.toml +15 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/dapp_key.move +46 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/enums/card_kind.move +47 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/enums/match_state.move +37 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/enums/rarity.move +37 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/error.move +126 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/genesis.move +33 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/init_test.move +23 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/objects/arena.move +137 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/permits/brawl_permit.move +125 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/permits/duel_permit.move +125 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/battle_state.move +255 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/card.move +282 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/deck.move +64 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/game_config.move +267 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/gold.move +205 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/resources/profile.move +255 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/scenes/brawl.move +313 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/scenes/duel.move +313 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/codegen/user_storage_init.move +26 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/scripts/deploy_hook.move +32 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/scripts/migrate.move +7 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/arena_system.move +57 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/brawl_system.move +559 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/card_system.move +146 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/duel_system.move +515 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/market_system.move +115 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/systems/player_system.move +37 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/tests/brawl_tests.move +385 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/tests/duel_tests.move +656 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/src/card_duel/sources/tests/test_helpers.move +31 -0
- package/templates/nextjs/sui-card-duel/packages/contracts/sui-indexer-schema.graphql +5973 -0
- package/templates/nextjs/sui-card-duel/pnpm-workspace.yaml +2 -0
- package/templates/nextjs/sui-farm/.gitignore_ +51 -0
- package/templates/nextjs/sui-farm/README.md +15 -0
- package/templates/nextjs/sui-farm/UPGRADE_NOTES.md +97 -0
- package/templates/nextjs/sui-farm/docker-compose.yml +34 -0
- package/templates/nextjs/sui-farm/mprocs.yaml +17 -0
- package/templates/nextjs/sui-farm/package.json +43 -0
- package/templates/nextjs/sui-farm/packages/client/.gitignore_ +48 -0
- package/templates/nextjs/sui-farm/packages/client/.prettierignore +1 -0
- package/templates/nextjs/sui-farm/packages/client/.prettierrc.json +8 -0
- package/templates/nextjs/sui-farm/packages/client/eslint.config.mjs +22 -0
- package/templates/nextjs/sui-farm/packages/client/next.config.mjs +8 -0
- package/templates/nextjs/sui-farm/packages/client/package.json +47 -0
- package/templates/nextjs/sui-farm/packages/client/postcss.config.mjs +8 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/admin/page.tsx +618 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/FarmLand.tsx +526 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/FarmPlotCard.tsx +215 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/PetAvatar.tsx +868 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/PetPanel.tsx +1360 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/PlantModal.tsx +147 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/ProxyCard.tsx +684 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/RanchLand.tsx +822 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/ResourceHUD.tsx +125 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/ShopPanel.tsx +232 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/components/icons/GameIcons.tsx +574 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/favicon.ico +0 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/globals.css +423 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/hooks/useWorldPermitId.ts +66 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/layout.tsx +23 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/leaderboard/page.tsx +185 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/lib/crops.ts +97 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/market/page.tsx +763 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/page.tsx +1173 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/providers.tsx +69 -0
- package/templates/nextjs/sui-farm/packages/client/src/app/state/index.tsx +5 -0
- package/templates/nextjs/sui-farm/packages/client/tailwind.config.ts +25 -0
- package/templates/nextjs/sui-farm/packages/client/tsconfig.json +30 -0
- package/templates/nextjs/sui-farm/packages/contracts/.gitignore_ +51 -0
- package/templates/nextjs/sui-farm/packages/contracts/.prettierignore +1 -0
- package/templates/nextjs/sui-farm/packages/contracts/.prettierrc.json +8 -0
- package/templates/nextjs/sui-farm/packages/contracts/Dockerfile +5 -0
- package/templates/nextjs/sui-farm/packages/contracts/Pub.localnet.toml +13 -0
- package/templates/nextjs/sui-farm/packages/contracts/counter.lock.json +14 -0
- package/templates/nextjs/sui-farm/packages/contracts/docker-compose.yml +34 -0
- package/templates/nextjs/sui-farm/packages/contracts/dubhe.config.ts +178 -0
- package/templates/nextjs/sui-farm/packages/contracts/harvest.lock.json +120 -0
- package/templates/nextjs/sui-farm/packages/contracts/package.json +48 -0
- package/templates/nextjs/sui-farm/packages/contracts/scripts/config.ts +17 -0
- package/templates/nextjs/sui-farm/packages/contracts/scripts/query-dapp-revenue.ts +95 -0
- package/templates/nextjs/sui-farm/packages/contracts/scripts/read-permit.ts +72 -0
- package/templates/nextjs/sui-farm/packages/contracts/scripts/seed.ts +85 -0
- package/templates/nextjs/sui-farm/packages/contracts/scripts/withdraw-dapp-revenue.ts +56 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/Move.toml +14 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/dapp_key.move +31 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/error.move +10 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/genesis.move +33 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/init_test.move +23 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/resources/counter1.move +64 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/resources/counter2.move +70 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/scripts/deploy_hook.move +8 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/scripts/migrate.move +8 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/systems/counter.move +13 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/tests/counter.move +28 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/Move.toml +14 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/dapp_key.move +46 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/crop_type.move +47 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/egg_type.move +42 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/pet_rarity.move +37 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/enums/pet_species.move +52 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/error.move +110 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/genesis.move +33 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/init_test.move +23 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/permits/world.move +125 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/carrot.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/carrot_seed.move +80 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/common_egg.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/corn.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/corn_seed.move +80 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/crow_charges.move +162 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/crow_damage.move +207 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/farm_plot.move +261 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/gold.move +80 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet.move +467 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_config.move +372 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_hatch.move +162 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_slot_index.move +83 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pet_slots.move +64 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/profile.move +162 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pumpkin.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/pumpkin_seed.move +80 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/rare_egg.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/scarecrow.move +64 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/season_config.move +197 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/season_stats.move +64 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/seasonal_egg.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/shop_config.move +267 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/trophy.move +245 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/wheat.move +136 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/wheat_seed.move +80 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/resources/world_permit_id.move +64 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/codegen/user_storage_init.move +26 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/scripts/deploy_hook.move +45 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/scripts/migrate.move +7 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/crow_system.move +96 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/farm_system.move +182 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/market_system.move +172 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/pet_system.move +495 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/season_system.move +70 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/shop_system.move +112 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/systems/world_system.move +34 -0
- package/templates/nextjs/sui-farm/packages/contracts/src/harvest/sources/tests/farm_tests.move +1192 -0
- package/templates/nextjs/sui-farm/pnpm-workspace.yaml +2 -0
- package/templates/nextjs/sui-template/packages/client/src/app/components/ProxyCard.tsx +683 -0
- package/templates/nextjs/sui-template/packages/client/src/app/page.tsx +510 -5
- package/templates/nextjs/sui-template/packages/client/src/app/providers.tsx +13 -5
- package/templates/nextjs/sui-template/packages/contracts/Pub.localnet.toml +4 -4
- package/templates/nextjs/sui-template/packages/contracts/counter.lock.json +14 -0
- package/templates/nextjs/sui-template/packages/contracts/deployment.ts +8 -3
- package/templates/nextjs/sui-template/packages/contracts/dubhe.config.json +9 -9
- package/templates/nextjs/sui-template/packages/contracts/dubhe.config.ts +0 -4
- package/templates/nextjs/sui-template/packages/contracts/metadata.json +180 -124
- package/templates/nextjs/sui-template/packages/contracts/package.json +8 -4
- package/templates/nextjs/sui-template/packages/contracts/src/counter/Move.toml +4 -0
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/dapp_key.move +45 -31
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/error.move +10 -0
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/genesis.move +30 -13
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/init_test.move +19 -14
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter1.move +30 -20
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/resources/counter2.move +35 -24
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/user_storage_init.move +26 -0
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/scripts/deploy_hook.move +6 -10
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/systems/counter.move +7 -20
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/tests/counter.move +14 -27
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/Move.lock +33 -30
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/Move.toml +8 -3
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/dapp_key.move +45 -31
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/error.move +170 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/genesis.move +16 -13
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/init_test.move +8 -14
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/account_key.move +1 -3
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/dapp_service.move +1776 -137
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/data_key.move +1 -20
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/events.move +864 -25
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/scripts/deploy_hook.move +15 -16
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/scripts/migrate.move +0 -3
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/address_system.move +25 -17
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/dapp_system.move +2802 -343
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/utils.move +1 -1
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/address.move +173 -55
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/dapp_test.move +769 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/fee_test.move +2965 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/integration_test.move +303 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/listing_test.move +1422 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/scene_session_test.move +269 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/session_test.move +624 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/storage_test.move +700 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/typed_object_test.move +177 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/typed_scene_test.move +452 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/tests/user_storage_test.move +160 -0
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/utils/math.move +4 -3
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/utils/type_info.move +2 -2
- package/templates/101/sui-template/packages/contracts/src/counter/Move.lock +0 -41
- package/templates/101/sui-template/packages/contracts/src/counter/Published.toml +0 -9
- package/templates/101/sui-template/packages/contracts/src/counter/sources/codegen/errors.move +0 -12
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/errors.move +0 -140
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/core/dapp_store.move +0 -29
- package/templates/101/sui-template/packages/contracts/src/dubhe/sources/systems/session_system.move +0 -44
- package/templates/contract/sui-template/src/dubhe/sources/codegen/errors.move +0 -140
- package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
- package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
- package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
- package/templates/contract/sui-template/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
- package/templates/contract/sui-template/src/dubhe/sources/core/dapp_store.move +0 -29
- package/templates/contract/sui-template/src/dubhe/sources/systems/session_system.move +0 -44
- package/templates/nextjs/sui-template/packages/contracts/src/counter/Move.lock +0 -47
- package/templates/nextjs/sui-template/packages/contracts/src/counter/Published.toml +0 -9
- package/templates/nextjs/sui-template/packages/contracts/src/counter/sources/codegen/errors.move +0 -12
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/errors.move +0 -140
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_config.move +0 -186
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_fee_state.move +0 -306
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dapp_metadata.move +0 -396
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/codegen/resources/dubhe_config.move +0 -246
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/core/dapp_store.move +0 -29
- package/templates/nextjs/sui-template/packages/contracts/src/dubhe/sources/systems/session_system.move +0 -44
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query dapp_revenue balance stored in DappStorage as a dynamic field.
|
|
3
|
+
*
|
|
4
|
+
* Run:
|
|
5
|
+
* cd templates/nextjs/sui-farm/packages/contracts
|
|
6
|
+
* npx tsx scripts/query-dapp-revenue.ts
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { SuiClient } from '@0xobelisk/sui-client';
|
|
10
|
+
import { Network, DappStorageId, FrameworkPackageId } from './config.ts';
|
|
11
|
+
|
|
12
|
+
const RPC: Record<string, string> = {
|
|
13
|
+
localnet: 'http://127.0.0.1:9000',
|
|
14
|
+
devnet: 'https://fullnode.devnet.sui.io',
|
|
15
|
+
testnet: 'https://fullnode.testnet.sui.io',
|
|
16
|
+
mainnet: 'https://fullnode.mainnet.sui.io'
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const COIN_SUI = '0x2::sui::SUI';
|
|
20
|
+
|
|
21
|
+
async function queryDappRevenue() {
|
|
22
|
+
const client = new SuiClient({ url: RPC[Network] ?? RPC.localnet });
|
|
23
|
+
|
|
24
|
+
console.log(`Network : ${Network}`);
|
|
25
|
+
console.log(`Storage : ${DappStorageId}`);
|
|
26
|
+
console.log(`Framework: ${FrameworkPackageId}`);
|
|
27
|
+
console.log('');
|
|
28
|
+
|
|
29
|
+
if (!FrameworkPackageId) {
|
|
30
|
+
console.error('FrameworkPackageId is undefined in deployment.ts');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ── 1. Query dapp_revenue via getDynamicFieldObject ────────────────────────
|
|
35
|
+
const revenueKeyType = `${FrameworkPackageId}::dapp_service::DappRevenueKey<${COIN_SUI}>`;
|
|
36
|
+
|
|
37
|
+
let revenueBalance = 0n;
|
|
38
|
+
try {
|
|
39
|
+
const result = await client.getDynamicFieldObject({
|
|
40
|
+
parentId: DappStorageId,
|
|
41
|
+
name: {
|
|
42
|
+
// Sui serializes empty structs with a synthetic dummy_field: bool
|
|
43
|
+
type: revenueKeyType,
|
|
44
|
+
value: { dummy_field: false }
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
if (result.error) {
|
|
49
|
+
// Field not yet created → balance is 0
|
|
50
|
+
console.log('dapp_revenue field not found (no fees collected yet)');
|
|
51
|
+
} else {
|
|
52
|
+
const fields = (result.data?.content as any)?.fields;
|
|
53
|
+
// Balance<SUI> is a struct with field `value: u64`
|
|
54
|
+
revenueBalance = BigInt(fields?.value ?? fields?.balance ?? 0);
|
|
55
|
+
}
|
|
56
|
+
} catch (e: any) {
|
|
57
|
+
// 404 / field not found → balance is 0
|
|
58
|
+
if (!e?.message?.includes('not found') && !e?.message?.includes('dynamic field')) {
|
|
59
|
+
throw e;
|
|
60
|
+
}
|
|
61
|
+
console.log('dapp_revenue dynamic field does not exist yet (0 revenue)');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const mist = revenueBalance;
|
|
65
|
+
const sui = Number(mist) / 1e9;
|
|
66
|
+
|
|
67
|
+
console.log(`─── DApp Revenue Balance ──────────────`);
|
|
68
|
+
console.log(` ${mist} MIST`);
|
|
69
|
+
console.log(` ${sui.toFixed(9)} SUI`);
|
|
70
|
+
console.log('');
|
|
71
|
+
|
|
72
|
+
// ── 2. Also read DappStorage basic info ───────────────────────────────────
|
|
73
|
+
const storageObj = await client.getObject({
|
|
74
|
+
id: DappStorageId,
|
|
75
|
+
options: { showContent: true }
|
|
76
|
+
});
|
|
77
|
+
const sf = (storageObj.data?.content as any)?.fields ?? {};
|
|
78
|
+
|
|
79
|
+
const creditPool = BigInt(sf.credit_pool ?? 0);
|
|
80
|
+
const freeCredit = BigInt(sf.free_credit ?? 0);
|
|
81
|
+
const totalSettled = BigInt(sf.total_settled ?? 0);
|
|
82
|
+
const settlementMode = Number(sf.settlement_mode ?? 0);
|
|
83
|
+
|
|
84
|
+
console.log(`─── DApp Storage Summary ───────────────`);
|
|
85
|
+
console.log(
|
|
86
|
+
` settlement_mode : ${settlementMode === 0 ? '0 (DAPP_SUBSIDIZES)' : '1 (USER_PAYS)'}`
|
|
87
|
+
);
|
|
88
|
+
console.log(` credit_pool : ${Number(creditPool) / 1e9} SUI (${creditPool} MIST)`);
|
|
89
|
+
console.log(` free_credit : ${Number(freeCredit) / 1e9} SUI (${freeCredit} MIST)`);
|
|
90
|
+
console.log(` total_settled : ${Number(totalSettled) / 1e9} SUI (${totalSettled} MIST)`);
|
|
91
|
+
console.log(` paused : ${sf.paused}`);
|
|
92
|
+
console.log(` version : ${sf.version}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
queryDappRevenue().catch(console.error);
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* read-permit.ts — Read the WorldPermit object ID from the deployed DappStorage.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* cd templates/nextjs/sui-farm/packages/contracts
|
|
6
|
+
* npx tsx scripts/read-permit.ts
|
|
7
|
+
*
|
|
8
|
+
* Outputs the WorldPermitId to add to deployment.ts.
|
|
9
|
+
*/
|
|
10
|
+
import { SuiClient, getFullnodeUrl } from '@0xobelisk/sui-client';
|
|
11
|
+
import { Network, DappStorageId, PackageId } from './config.ts';
|
|
12
|
+
|
|
13
|
+
async function main() {
|
|
14
|
+
const network = (process.argv[2] ?? Network) as any;
|
|
15
|
+
|
|
16
|
+
if (!DappStorageId || DappStorageId === '0x0') {
|
|
17
|
+
console.error('DappStorageId not set in deployment.ts. Deploy first.');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const client = new SuiClient({ url: getFullnodeUrl(network) });
|
|
22
|
+
|
|
23
|
+
let cursor: string | null | undefined = null;
|
|
24
|
+
let worldPermitId: string | null = null;
|
|
25
|
+
|
|
26
|
+
outer: while (true) {
|
|
27
|
+
const result = await client.getDynamicFields({
|
|
28
|
+
parentId: DappStorageId,
|
|
29
|
+
...(cursor ? { cursor } : {})
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
for (const field of result.data) {
|
|
33
|
+
const nameStr = JSON.stringify(field.name as any);
|
|
34
|
+
if (nameStr.includes('world_permit_id')) {
|
|
35
|
+
const fieldObj = await client.getDynamicFieldObject({
|
|
36
|
+
parentId: DappStorageId,
|
|
37
|
+
name: field.name
|
|
38
|
+
});
|
|
39
|
+
const fields = (fieldObj.data?.content as any)?.fields ?? {};
|
|
40
|
+
const valueFields = fields.value?.fields ?? fields;
|
|
41
|
+
const objectId = valueFields.object_id ?? valueFields.value ?? null;
|
|
42
|
+
if (objectId) {
|
|
43
|
+
worldPermitId = typeof objectId === 'string' ? objectId : JSON.stringify(objectId);
|
|
44
|
+
break outer;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!result.hasNextPage) break;
|
|
50
|
+
cursor = result.nextCursor;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!worldPermitId) {
|
|
54
|
+
console.log('Could not find world_permit_id in DappStorage dynamic fields.');
|
|
55
|
+
console.log('Trying to find ScenePermit objects...');
|
|
56
|
+
const objs = await client.queryEvents({
|
|
57
|
+
query: { MoveEventType: `${PackageId.split('::')[0]}::dapp_system::ScenePermitCreated` }
|
|
58
|
+
});
|
|
59
|
+
console.log('Events:', JSON.stringify(objs.data, null, 2));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
console.log('\n=== WorldPermitId found ===');
|
|
64
|
+
console.log(worldPermitId);
|
|
65
|
+
console.log('\nAdd to deployment.ts:');
|
|
66
|
+
console.log(`export const WorldPermitId = '${worldPermitId}';`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
main().catch((err) => {
|
|
70
|
+
console.error(err);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* seed.ts — Populate initial on-chain state after deployment.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* cd templates/nextjs/sui-farm/packages/contracts
|
|
6
|
+
* pnpm tsx scripts/seed.ts localnet
|
|
7
|
+
* pnpm tsx scripts/seed.ts testnet
|
|
8
|
+
*
|
|
9
|
+
* The deploy_hook.move already initialises shop_config, season_config, and the
|
|
10
|
+
* world permit during the publish transaction. This script is for one-off
|
|
11
|
+
* admin actions:
|
|
12
|
+
* 1. Kick off the first season.
|
|
13
|
+
* 2. Override shop prices for testing purposes.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import * as dotenv from 'dotenv';
|
|
17
|
+
import { Dubhe, Transaction, getFullnodeUrl, NetworkType } from '@0xobelisk/sui-client';
|
|
18
|
+
import { loadMetadata } from '@0xobelisk/sui-common';
|
|
19
|
+
import { Network, PackageId, DappHubId, DappStorageId, FrameworkPackageId } from './config.ts';
|
|
20
|
+
|
|
21
|
+
dotenv.config();
|
|
22
|
+
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Main
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
async function main() {
|
|
27
|
+
const networkArg = (process.argv[2] ?? Network) as NetworkType;
|
|
28
|
+
const privateKey = process.env.PRIVATE_KEY;
|
|
29
|
+
if (!privateKey) {
|
|
30
|
+
throw new Error('PRIVATE_KEY env var not set. Run: pnpm account:gen and set in .env');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (!PackageId || PackageId === '0x0') {
|
|
34
|
+
throw new Error('PackageId is 0x0 — deploy the contract first with: pnpm deploy ' + networkArg);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const metadata = await loadMetadata(networkArg, PackageId);
|
|
38
|
+
const dubhe = new Dubhe({
|
|
39
|
+
networkType: networkArg,
|
|
40
|
+
packageId: PackageId,
|
|
41
|
+
metadata,
|
|
42
|
+
secretKey: privateKey,
|
|
43
|
+
suiRpcUrl: getFullnodeUrl(networkArg),
|
|
44
|
+
dappHubId: DappHubId,
|
|
45
|
+
dappStorageId: DappStorageId,
|
|
46
|
+
frameworkPackageId: FrameworkPackageId
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const adminAddress = dubhe.getAddress();
|
|
50
|
+
console.log(`Admin address: ${adminAddress}`);
|
|
51
|
+
console.log(`Network: ${networkArg}`);
|
|
52
|
+
console.log(`Package ID: ${PackageId}`);
|
|
53
|
+
console.log('');
|
|
54
|
+
|
|
55
|
+
// ── 1. Start Season 1 ─────────────────────────────────────────────────────
|
|
56
|
+
const seasonDurationMs = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
57
|
+
const endMs = Date.now() + seasonDurationMs;
|
|
58
|
+
|
|
59
|
+
console.log('Starting Season 1...');
|
|
60
|
+
const tx1 = new Transaction();
|
|
61
|
+
await dubhe.tx.season_system.start_season({
|
|
62
|
+
tx: tx1,
|
|
63
|
+
params: [
|
|
64
|
+
tx1.pure.u8(1), // season_id = 1
|
|
65
|
+
tx1.pure.u64(endMs), // end_ms
|
|
66
|
+
tx1.pure.u8(1) // bonus_crop = Wheat (type 1)
|
|
67
|
+
]
|
|
68
|
+
});
|
|
69
|
+
const result1 = await dubhe.signAndSendTxn(tx1);
|
|
70
|
+
console.log(`Season 1 started! Digest: ${result1.digest}`);
|
|
71
|
+
|
|
72
|
+
// ── 2. Verify DApp storage fields ─────────────────────────────────────────
|
|
73
|
+
if (DappStorageId) {
|
|
74
|
+
console.log('\nDappStorage fields:');
|
|
75
|
+
const storageFields = await dubhe.getDappStorageFields(DappStorageId);
|
|
76
|
+
console.log(JSON.stringify(storageFields, null, 2));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
console.log('\nSeed complete!');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
main().catch((err) => {
|
|
83
|
+
console.error(err);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flush accumulated DApp revenue from DappStorage to the DApp admin wallet.
|
|
3
|
+
*
|
|
4
|
+
* Calls: dapp_system::withdraw_dapp_revenue<DappKey, SUI>(dh, dapp_storage, ctx)
|
|
5
|
+
* The Move function internally transfers the Coin to the stored dapp_admin address —
|
|
6
|
+
* anyone can trigger this (permissionless), only gas is needed.
|
|
7
|
+
*
|
|
8
|
+
* Run:
|
|
9
|
+
* cd templates/nextjs/sui-farm/packages/contracts
|
|
10
|
+
* PRIVATE_KEY="suiprivkey1q..." npx tsx scripts/withdraw-dapp-revenue.ts
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { Dubhe, NetworkType, Transaction } from '@0xobelisk/sui-client';
|
|
14
|
+
import { Network, DappHubId, DappStorageId, PackageId, FrameworkPackageId } from './config.ts';
|
|
15
|
+
|
|
16
|
+
const COIN_SUI = '0x2::sui::SUI';
|
|
17
|
+
const DAPP_KEY_TYPE = `${PackageId}::dapp_key::DappKey`;
|
|
18
|
+
|
|
19
|
+
async function main() {
|
|
20
|
+
const secretKey = process.env.PRIVATE_KEY;
|
|
21
|
+
if (!secretKey) {
|
|
22
|
+
console.error('Error: set PRIVATE_KEY env var (any key with enough SUI for gas)');
|
|
23
|
+
console.error(' PRIVATE_KEY="suiprivkey1q..." npx tsx scripts/withdraw-dapp-revenue.ts');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const dubhe = new Dubhe({
|
|
28
|
+
networkType: Network as NetworkType,
|
|
29
|
+
packageId: PackageId,
|
|
30
|
+
metadata: undefined,
|
|
31
|
+
secretKey
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
console.log(`Caller address : ${dubhe.getAddress()} (pays gas only)`);
|
|
35
|
+
console.log(`DappStorageId : ${DappStorageId}`);
|
|
36
|
+
console.log('');
|
|
37
|
+
|
|
38
|
+
// withdraw_dapp_revenue is void — the Move contract transfers funds to dapp_admin directly.
|
|
39
|
+
const tx = new Transaction();
|
|
40
|
+
tx.moveCall({
|
|
41
|
+
target: `${FrameworkPackageId}::dapp_system::withdraw_dapp_revenue`,
|
|
42
|
+
typeArguments: [DAPP_KEY_TYPE, COIN_SUI],
|
|
43
|
+
arguments: [tx.object(DappHubId), tx.object(DappStorageId)]
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
console.log('Sending withdraw_dapp_revenue transaction...');
|
|
47
|
+
const result = await dubhe.signAndSendTxn({ tx });
|
|
48
|
+
|
|
49
|
+
if (result.effects?.status?.status === 'success') {
|
|
50
|
+
console.log(`✅ Success! Digest: ${result.digest}`);
|
|
51
|
+
} else {
|
|
52
|
+
console.error('❌ Transaction failed:', result.effects?.status);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
main().catch(console.error);
|
package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/dapp_key.move
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright (c) Obelisk Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/* Autogenerated file. Do not edit manually. */
|
|
5
|
+
|
|
6
|
+
module counter::dapp_key {
|
|
7
|
+
use std::type_name;
|
|
8
|
+
use sui::address;
|
|
9
|
+
use std::ascii::String;
|
|
10
|
+
|
|
11
|
+
/// Authorization token for the app.
|
|
12
|
+
|
|
13
|
+
public struct DappKey has copy, drop {}
|
|
14
|
+
|
|
15
|
+
public(package) fun new(): DappKey {
|
|
16
|
+
DappKey {}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public fun to_string(): String {
|
|
20
|
+
type_name::with_defining_ids<DappKey>().into_string()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public fun package_id(): address {
|
|
24
|
+
let package_id_str = type_name::with_defining_ids<DappKey>().address_string();
|
|
25
|
+
address::from_ascii_bytes(package_id_str.as_bytes())
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public fun eq<DappKey1: copy + drop, DappKey2: copy + drop>(_: &DappKey1, _: &DappKey2): bool {
|
|
29
|
+
type_name::with_defining_ids<DappKey1>() == type_name::with_defining_ids<DappKey2>()
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright (c) Obelisk Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/* Autogenerated file. Do not edit manually. */
|
|
5
|
+
|
|
6
|
+
module counter::error {
|
|
7
|
+
#[error]
|
|
8
|
+
const EInvalidIncrement: vector<u8> = b"Number can't be incremented, must be more than 0";
|
|
9
|
+
public fun invalid_increment(condition: bool) { assert!(condition, EInvalidIncrement) }
|
|
10
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#[allow(lint(share_owned))]
|
|
2
|
+
module counter::genesis {
|
|
3
|
+
use sui::clock::Clock;
|
|
4
|
+
use dubhe::dapp_service::{DappHub, DappStorage};
|
|
5
|
+
use counter::dapp_key;
|
|
6
|
+
use dubhe::dapp_system;
|
|
7
|
+
use std::ascii::string;
|
|
8
|
+
|
|
9
|
+
// The one-shot guard is enforced inside dapp_system::create_dapp, which
|
|
10
|
+
// records the DappKey type in DappHub before returning DappStorage.
|
|
11
|
+
// genesis.move does not need to carry its own guard.
|
|
12
|
+
public fun run(dapp_hub: &mut DappHub, clock: &Clock, ctx: &mut TxContext) {
|
|
13
|
+
// create_dapp aborts with dapp_already_initialized_error on repeated calls.
|
|
14
|
+
let dapp_key = dapp_key::new();
|
|
15
|
+
let mut ds = dapp_system::create_dapp(dapp_key, dapp_hub, string(b"counter"), string(b"counter contract"), 1, clock, ctx);
|
|
16
|
+
|
|
17
|
+
// Set up initial DApp state (e.g. default resource values).
|
|
18
|
+
counter::deploy_hook::run(&mut ds, ctx);
|
|
19
|
+
|
|
20
|
+
// Share DappStorage so every transaction can access it.
|
|
21
|
+
transfer::public_share_object(ds);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Called during contract upgrades to register newly added resource tables
|
|
25
|
+
// and run any custom migration logic. `dubhe upgrade` rewrites the region
|
|
26
|
+
// between the separator comments; do not edit that block manually.
|
|
27
|
+
public(package) fun migrate(_dapp_hub: &mut DappHub, _dapp_storage: &mut DappStorage, _ctx: &mut TxContext) {
|
|
28
|
+
// ==========================================
|
|
29
|
+
// Add custom migration logic here (e.g. initialise new resource defaults).
|
|
30
|
+
// migrate_to_vN in migrate.move calls this function automatically.
|
|
31
|
+
// ==========================================
|
|
32
|
+
}
|
|
33
|
+
}
|
package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/codegen/init_test.move
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#[test_only]
|
|
2
|
+
|
|
3
|
+
module counter::init_test {
|
|
4
|
+
use dubhe::dapp_system;
|
|
5
|
+
|
|
6
|
+
/// Create a DappHub for testing without sharing it.
|
|
7
|
+
/// Suitable for unit tests that need a DappHub context.
|
|
8
|
+
public fun create_dapp_hub_for_testing(ctx: &mut TxContext): dubhe::dapp_service::DappHub {
|
|
9
|
+
dapp_system::create_dapp_hub_for_testing(ctx)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/// Create a DappStorage for this DApp without sharing it.
|
|
13
|
+
/// Suitable for unit tests that exercise global-resource functions.
|
|
14
|
+
public fun create_dapp_storage_for_testing(ctx: &mut TxContext): dubhe::dapp_service::DappStorage {
|
|
15
|
+
dubhe::dapp_system::create_dapp_storage_for_testing<counter::dapp_key::DappKey>(ctx)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/// Create a UserStorage for `owner` without sharing it.
|
|
19
|
+
/// Suitable for unit tests that exercise user-level resource functions.
|
|
20
|
+
public fun create_user_storage_for_testing(owner: address, ctx: &mut TxContext): dubhe::dapp_service::UserStorage {
|
|
21
|
+
dubhe::dapp_system::create_user_storage_for_testing<counter::dapp_key::DappKey>(owner, ctx)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -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 counter::counter1 {
|
|
7
|
+
use sui::bcs::{to_bytes};
|
|
8
|
+
use dubhe::dapp_service::UserStorage;
|
|
9
|
+
use dubhe::dapp_system;
|
|
10
|
+
use counter::dapp_key;
|
|
11
|
+
use counter::dapp_key::DappKey;
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
const TABLE_NAME: vector<u8> = b"counter1";
|
|
15
|
+
const OFFCHAIN: bool = false;
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
public fun has(user_storage: &UserStorage): bool {
|
|
19
|
+
let mut key_tuple = vector::empty();
|
|
20
|
+
key_tuple.push_back(TABLE_NAME);
|
|
21
|
+
dapp_system::has_record<DappKey>(user_storage, key_tuple)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public fun ensure_has(user_storage: &UserStorage) {
|
|
25
|
+
let mut key_tuple = vector::empty();
|
|
26
|
+
key_tuple.push_back(TABLE_NAME);
|
|
27
|
+
dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public fun ensure_has_not(user_storage: &UserStorage) {
|
|
31
|
+
let mut key_tuple = vector::empty();
|
|
32
|
+
key_tuple.push_back(TABLE_NAME);
|
|
33
|
+
dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
|
|
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"value"], ctx);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public fun get(user_storage: &UserStorage): (u32) {
|
|
43
|
+
let mut key_tuple = vector::empty();
|
|
44
|
+
key_tuple.push_back(TABLE_NAME);
|
|
45
|
+
let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
|
|
46
|
+
let mut value_bcs = sui::bcs::new(value_raw);
|
|
47
|
+
let value = sui::bcs::peel_u32(&mut value_bcs);
|
|
48
|
+
(value)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public(package) fun set(user_storage: &mut UserStorage, value: u32, ctx: &mut TxContext) {
|
|
52
|
+
let mut key_tuple = vector::empty();
|
|
53
|
+
key_tuple.push_back(TABLE_NAME);
|
|
54
|
+
let field_names = vector[b"value"];
|
|
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: u32): 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,70 @@
|
|
|
1
|
+
// Copyright (c) Obelisk Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/* Autogenerated file. Do not edit manually. */
|
|
5
|
+
|
|
6
|
+
module counter::counter2 {
|
|
7
|
+
use sui::bcs::{to_bytes};
|
|
8
|
+
use dubhe::dapp_service::UserStorage;
|
|
9
|
+
use dubhe::dapp_system;
|
|
10
|
+
use counter::dapp_key;
|
|
11
|
+
use counter::dapp_key::DappKey;
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
const TABLE_NAME: vector<u8> = b"counter2";
|
|
15
|
+
const OFFCHAIN: bool = false;
|
|
16
|
+
|
|
17
|
+
public fun has(user_storage: &UserStorage, data: u64): bool {
|
|
18
|
+
let mut key_tuple = vector::empty();
|
|
19
|
+
key_tuple.push_back(TABLE_NAME);
|
|
20
|
+
key_tuple.push_back(to_bytes(&data));
|
|
21
|
+
dapp_system::has_record<DappKey>(user_storage, key_tuple)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public fun ensure_has(user_storage: &UserStorage, data: u64) {
|
|
25
|
+
let mut key_tuple = vector::empty();
|
|
26
|
+
key_tuple.push_back(TABLE_NAME);
|
|
27
|
+
key_tuple.push_back(to_bytes(&data));
|
|
28
|
+
dapp_system::ensure_has_record<DappKey>(user_storage, key_tuple)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public fun ensure_has_not(user_storage: &UserStorage, data: u64) {
|
|
32
|
+
let mut key_tuple = vector::empty();
|
|
33
|
+
key_tuple.push_back(TABLE_NAME);
|
|
34
|
+
key_tuple.push_back(to_bytes(&data));
|
|
35
|
+
dapp_system::ensure_has_not_record<DappKey>(user_storage, key_tuple)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
public(package) fun delete(user_storage: &mut UserStorage, data: u64, ctx: &TxContext) {
|
|
40
|
+
let mut key_tuple = vector::empty();
|
|
41
|
+
key_tuple.push_back(TABLE_NAME);
|
|
42
|
+
key_tuple.push_back(to_bytes(&data));
|
|
43
|
+
dapp_system::delete_record<DappKey>(dapp_key::new(), user_storage, key_tuple, vector[b"value"], ctx);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public fun get(user_storage: &UserStorage, data: u64): u32 {
|
|
47
|
+
let mut key_tuple = vector::empty();
|
|
48
|
+
key_tuple.push_back(TABLE_NAME);
|
|
49
|
+
key_tuple.push_back(to_bytes(&data));
|
|
50
|
+
let value_raw = dapp_system::get_field<DappKey>(user_storage, key_tuple, b"value");
|
|
51
|
+
let mut value_bcs = sui::bcs::new(value_raw);
|
|
52
|
+
let value = sui::bcs::peel_u32(&mut value_bcs);
|
|
53
|
+
value
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public(package) fun set(user_storage: &mut UserStorage, data: u64, value: u32, ctx: &mut TxContext) {
|
|
57
|
+
let mut key_tuple = vector::empty();
|
|
58
|
+
key_tuple.push_back(TABLE_NAME);
|
|
59
|
+
key_tuple.push_back(to_bytes(&data));
|
|
60
|
+
let field_names = vector[b"value"];
|
|
61
|
+
let value_tuple = encode(value);
|
|
62
|
+
dapp_system::set_record<DappKey>(dapp_key::new(), user_storage, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public fun encode(value: u32): vector<vector<u8>> {
|
|
66
|
+
let mut value_tuple = vector::empty();
|
|
67
|
+
value_tuple.push_back(to_bytes(&value));
|
|
68
|
+
value_tuple
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright (c) Obelisk Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/* Autogenerated file. Do not edit manually. */
|
|
5
|
+
|
|
6
|
+
module counter::user_storage_init {
|
|
7
|
+
use dubhe::dapp_service::{DappHub, DappStorage};
|
|
8
|
+
use dubhe::dapp_system;
|
|
9
|
+
use counter::dapp_key;
|
|
10
|
+
use counter::dapp_key::DappKey;
|
|
11
|
+
use counter::migrate;
|
|
12
|
+
|
|
13
|
+
/// Create a UserStorage for the transaction sender within this DApp.
|
|
14
|
+
/// Must be called once before the user can interact with any user-level resources.
|
|
15
|
+
/// Aborts if the DApp version does not match this package, the DApp is paused,
|
|
16
|
+
/// or the framework version has advanced.
|
|
17
|
+
#[allow(lint(public_entry))]
|
|
18
|
+
public entry fun init_user_storage(
|
|
19
|
+
dapp_hub: &DappHub,
|
|
20
|
+
dapp_storage: &mut DappStorage,
|
|
21
|
+
ctx: &mut TxContext,
|
|
22
|
+
) {
|
|
23
|
+
dapp_system::ensure_latest_version<DappKey>(dapp_storage, migrate::on_chain_version());
|
|
24
|
+
dapp_system::create_user_storage(dapp_key::new(), dapp_hub, dapp_storage, ctx);
|
|
25
|
+
}
|
|
26
|
+
}
|
package/templates/nextjs/sui-farm/packages/contracts/src/counter/sources/scripts/deploy_hook.move
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module counter::deploy_hook {
|
|
2
|
+
use dubhe::dapp_service::DappStorage;
|
|
3
|
+
|
|
4
|
+
public(package) fun run(_dapp_storage: &mut DappStorage, _ctx: &mut TxContext) {
|
|
5
|
+
// No global state to initialize for a UserStorage-based counter.
|
|
6
|
+
// Each user initializes their own storage via user_storage_init::init_user_storage.
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module counter::counter_system {
|
|
2
|
+
use dubhe::dapp_service::UserStorage;
|
|
3
|
+
use counter::counter1;
|
|
4
|
+
|
|
5
|
+
public entry fun inc(user_storage: &mut UserStorage, number: u32, ctx: &mut TxContext) {
|
|
6
|
+
let curr = if (counter1::has(user_storage)) {
|
|
7
|
+
counter1::get(user_storage)
|
|
8
|
+
} else {
|
|
9
|
+
0u32
|
|
10
|
+
};
|
|
11
|
+
counter1::set(user_storage, curr + number, ctx);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#[test_only]
|
|
2
|
+
module counter::counter_test {
|
|
3
|
+
use sui::test_scenario;
|
|
4
|
+
use counter::counter_system;
|
|
5
|
+
use counter::counter1;
|
|
6
|
+
use dubhe::dapp_system;
|
|
7
|
+
use counter::dapp_key::DappKey;
|
|
8
|
+
|
|
9
|
+
const DEPLOYER: address = @0xA;
|
|
10
|
+
|
|
11
|
+
#[test]
|
|
12
|
+
public fun inc() {
|
|
13
|
+
let mut scenario = test_scenario::begin(DEPLOYER);
|
|
14
|
+
{
|
|
15
|
+
let ctx = test_scenario::ctx(&mut scenario);
|
|
16
|
+
let mut us = dapp_system::create_user_storage_for_testing<DappKey>(DEPLOYER, ctx);
|
|
17
|
+
|
|
18
|
+
counter_system::inc(&mut us, 10, ctx);
|
|
19
|
+
assert!(counter1::get(&us) == 10);
|
|
20
|
+
|
|
21
|
+
counter_system::inc(&mut us, 10, ctx);
|
|
22
|
+
assert!(counter1::get(&us) == 20);
|
|
23
|
+
|
|
24
|
+
dapp_system::destroy_user_storage(us);
|
|
25
|
+
};
|
|
26
|
+
scenario.end();
|
|
27
|
+
}
|
|
28
|
+
}
|