@gala-chain/launchpad-mcp-server 5.0.5-beta.2 → 5.0.5-beta.21
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/README.md +25 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/generated/version.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/advanced-pools.d.ts +1 -7
- package/dist/prompts/advanced-pools.d.ts.map +1 -1
- package/dist/prompts/advanced-pools.js +4 -79
- package/dist/prompts/advanced-pools.js.map +1 -1
- package/dist/prompts/analysis.d.ts +0 -4
- package/dist/prompts/analysis.d.ts.map +1 -1
- package/dist/prompts/analysis.js +2 -67
- package/dist/prompts/analysis.js.map +1 -1
- package/dist/prompts/balances.js.map +1 -1
- package/dist/prompts/bridge.d.ts +0 -8
- package/dist/prompts/bridge.d.ts.map +1 -1
- package/dist/prompts/bridge.js +3 -54
- package/dist/prompts/bridge.js.map +1 -1
- package/dist/prompts/comments.js.map +1 -1
- package/dist/prompts/factories/filtered-list-prompt-factory.js.map +1 -1
- package/dist/prompts/factories/invite-management-factory.js +2 -2
- package/dist/prompts/factories/invite-management-factory.js.map +1 -1
- package/dist/prompts/liquidity-positions.d.ts +0 -12
- package/dist/prompts/liquidity-positions.d.ts.map +1 -1
- package/dist/prompts/liquidity-positions.js +2 -98
- package/dist/prompts/liquidity-positions.js.map +1 -1
- package/dist/prompts/manifest.d.ts +33 -0
- package/dist/prompts/manifest.d.ts.map +1 -0
- package/dist/prompts/manifest.js +2062 -0
- package/dist/prompts/manifest.js.map +1 -0
- package/dist/prompts/overseers.d.ts.map +1 -1
- package/dist/prompts/overseers.js +17 -2
- package/dist/prompts/overseers.js.map +1 -1
- package/dist/prompts/pools.d.ts +0 -20
- package/dist/prompts/pools.d.ts.map +1 -1
- package/dist/prompts/pools.js +4 -162
- package/dist/prompts/pools.js.map +1 -1
- package/dist/prompts/referrals.js.map +1 -1
- package/dist/prompts/trading.d.ts +0 -8
- package/dist/prompts/trading.d.ts.map +1 -1
- package/dist/prompts/trading.js +3 -51
- package/dist/prompts/trading.js.map +1 -1
- package/dist/prompts/utility-tools.js.map +1 -1
- package/dist/prompts/utils/pagination-helpers.d.ts +10 -24
- package/dist/prompts/utils/pagination-helpers.d.ts.map +1 -1
- package/dist/prompts/utils/pagination-helpers.js +11 -32
- package/dist/prompts/utils/pagination-helpers.js.map +1 -1
- package/dist/prompts/utils/workflowTemplates.d.ts.map +1 -1
- package/dist/prompts/utils/workflowTemplates.js +4 -2
- package/dist/prompts/utils/workflowTemplates.js.map +1 -1
- package/dist/prompts/validate-manifest.d.ts +42 -0
- package/dist/prompts/validate-manifest.d.ts.map +1 -0
- package/dist/prompts/validate-manifest.js +157 -0
- package/dist/prompts/validate-manifest.js.map +1 -0
- package/dist/schemas/common-schemas.d.ts +32 -39
- package/dist/schemas/common-schemas.d.ts.map +1 -1
- package/dist/schemas/common-schemas.js +113 -117
- package/dist/schemas/common-schemas.js.map +1 -1
- package/dist/scripts/test-all-prompts.d.ts +1 -17
- package/dist/scripts/test-all-prompts.d.ts.map +1 -1
- package/dist/scripts/test-all-prompts.js +16 -6
- package/dist/scripts/test-all-prompts.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +7 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +33 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/api-keys/index.js +13 -13
- package/dist/tools/api-keys/index.js.map +1 -1
- package/dist/tools/auth/index.js +4 -4
- package/dist/tools/auth/index.js.map +1 -1
- package/dist/tools/balance/helpers/format-balance.js +1 -1
- package/dist/tools/balance/helpers/format-balance.js.map +1 -1
- package/dist/tools/balance/index.js +9 -9
- package/dist/tools/balance/index.js.map +1 -1
- package/dist/tools/ban/index.d.ts.map +1 -1
- package/dist/tools/ban/index.js +23 -18
- package/dist/tools/ban/index.js.map +1 -1
- package/dist/tools/ban/onBanEnforcement.d.ts +9 -0
- package/dist/tools/ban/onBanEnforcement.d.ts.map +1 -0
- package/dist/tools/ban/onBanEnforcement.js +54 -0
- package/dist/tools/ban/onBanEnforcement.js.map +1 -0
- package/dist/tools/bridge/helpers/external-chain-balance-tools.js +4 -4
- package/dist/tools/bridge/helpers/external-chain-balance-tools.js.map +1 -1
- package/dist/tools/bridge/index.d.ts +10 -0
- package/dist/tools/bridge/index.d.ts.map +1 -1
- package/dist/tools/bridge/index.js +47 -39
- package/dist/tools/bridge/index.js.map +1 -1
- package/dist/tools/chat/index.d.ts +3 -2
- package/dist/tools/chat/index.d.ts.map +1 -1
- package/dist/tools/chat/index.js +12 -18
- package/dist/tools/chat/index.js.map +1 -1
- package/dist/tools/chat/pinChatMessage.js +2 -2
- package/dist/tools/chat/pinChatMessage.js.map +1 -1
- package/dist/tools/chat/unpinChatMessage.js +1 -1
- package/dist/tools/chat/unpinChatMessage.js.map +1 -1
- package/dist/tools/chat-messages/index.js +11 -11
- package/dist/tools/chat-messages/index.js.map +1 -1
- package/dist/tools/comments/index.d.ts +1 -1
- package/dist/tools/comments/index.d.ts.map +1 -1
- package/dist/tools/comments/index.js +13 -11
- package/dist/tools/comments/index.js.map +1 -1
- package/dist/tools/comments/onCommentCreated.d.ts +9 -0
- package/dist/tools/comments/onCommentCreated.d.ts.map +1 -0
- package/dist/tools/comments/onCommentCreated.js +50 -0
- package/dist/tools/comments/onCommentCreated.js.map +1 -0
- package/dist/tools/content-flags/index.js +14 -14
- package/dist/tools/content-flags/index.js.map +1 -1
- package/dist/tools/content-reactions/index.js +6 -6
- package/dist/tools/content-reactions/index.js.map +1 -1
- package/dist/tools/creation/index.js +14 -14
- package/dist/tools/creation/index.js.map +1 -1
- package/dist/tools/dex/helpers.d.ts +2 -2
- package/dist/tools/dex/helpers.js +1 -1
- package/dist/tools/dex/index.js +9 -9
- package/dist/tools/dex/index.js.map +1 -1
- package/dist/tools/dex-analytics/index.d.ts.map +1 -1
- package/dist/tools/dex-analytics/index.js +6 -6
- package/dist/tools/dex-analytics/index.js.map +1 -1
- package/dist/tools/dex-liquidity/index.d.ts.map +1 -1
- package/dist/tools/dex-liquidity/index.js +30 -30
- package/dist/tools/dex-liquidity/index.js.map +1 -1
- package/dist/tools/dex-pools/index.d.ts.map +1 -1
- package/dist/tools/dex-pools/index.js +17 -18
- package/dist/tools/dex-pools/index.js.map +1 -1
- package/dist/tools/global-feed/getGlobalFeedStatus.d.ts +16 -0
- package/dist/tools/global-feed/getGlobalFeedStatus.d.ts.map +1 -0
- package/dist/tools/global-feed/getGlobalFeedStatus.js +100 -0
- package/dist/tools/global-feed/getGlobalFeedStatus.js.map +1 -0
- package/dist/tools/global-feed/getSiteConfigState.d.ts +16 -0
- package/dist/tools/global-feed/getSiteConfigState.d.ts.map +1 -0
- package/dist/tools/global-feed/getSiteConfigState.js +131 -0
- package/dist/tools/global-feed/getSiteConfigState.js.map +1 -0
- package/dist/tools/global-feed/index.d.ts +22 -0
- package/dist/tools/global-feed/index.d.ts.map +1 -0
- package/dist/tools/global-feed/index.js +40 -0
- package/dist/tools/global-feed/index.js.map +1 -0
- package/dist/tools/global-feed/monitorGlobalFeedEvents.d.ts +16 -0
- package/dist/tools/global-feed/monitorGlobalFeedEvents.d.ts.map +1 -0
- package/dist/tools/global-feed/monitorGlobalFeedEvents.js +153 -0
- package/dist/tools/global-feed/monitorGlobalFeedEvents.js.map +1 -0
- package/dist/tools/global-feed/subscribeToGlobalFeed.d.ts +17 -0
- package/dist/tools/global-feed/subscribeToGlobalFeed.d.ts.map +1 -0
- package/dist/tools/global-feed/subscribeToGlobalFeed.js +110 -0
- package/dist/tools/global-feed/subscribeToGlobalFeed.js.map +1 -0
- package/dist/tools/global-feed/unsubscribeFromGlobalFeed.d.ts +16 -0
- package/dist/tools/global-feed/unsubscribeFromGlobalFeed.d.ts.map +1 -0
- package/dist/tools/global-feed/unsubscribeFromGlobalFeed.js +151 -0
- package/dist/tools/global-feed/unsubscribeFromGlobalFeed.js.map +1 -0
- package/dist/tools/handler-factories.d.ts +22 -48
- package/dist/tools/handler-factories.d.ts.map +1 -1
- package/dist/tools/handler-factories.js +15 -35
- package/dist/tools/handler-factories.js.map +1 -1
- package/dist/tools/holders/index.d.ts +55 -0
- package/dist/tools/holders/index.d.ts.map +1 -0
- package/dist/tools/holders/index.js +269 -0
- package/dist/tools/holders/index.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +100 -65
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/manifest.d.ts +33 -0
- package/dist/tools/manifest.d.ts.map +1 -0
- package/dist/tools/manifest.js +2945 -0
- package/dist/tools/manifest.js.map +1 -0
- package/dist/tools/messages/createMessage.d.ts +16 -0
- package/dist/tools/messages/createMessage.d.ts.map +1 -0
- package/dist/tools/messages/createMessage.js +79 -0
- package/dist/tools/messages/createMessage.js.map +1 -0
- package/dist/tools/messages/deleteMessage.d.ts +16 -0
- package/dist/tools/messages/deleteMessage.d.ts.map +1 -0
- package/dist/tools/messages/deleteMessage.js +45 -0
- package/dist/tools/messages/deleteMessage.js.map +1 -0
- package/dist/tools/messages/fetchMessages.d.ts +17 -0
- package/dist/tools/messages/fetchMessages.d.ts.map +1 -0
- package/dist/tools/messages/fetchMessages.js +82 -0
- package/dist/tools/messages/fetchMessages.js.map +1 -0
- package/dist/tools/messages/getPinnedMessage.d.ts +15 -0
- package/dist/tools/messages/getPinnedMessage.d.ts.map +1 -0
- package/dist/tools/messages/getPinnedMessage.js +42 -0
- package/dist/tools/messages/getPinnedMessage.js.map +1 -0
- package/dist/tools/messages/index.d.ts +38 -0
- package/dist/tools/messages/index.d.ts.map +1 -0
- package/dist/tools/messages/index.js +56 -0
- package/dist/tools/messages/index.js.map +1 -0
- package/dist/tools/messages/pinMessage.d.ts +15 -0
- package/dist/tools/messages/pinMessage.d.ts.map +1 -0
- package/dist/tools/messages/pinMessage.js +44 -0
- package/dist/tools/messages/pinMessage.js.map +1 -0
- package/dist/tools/messages/unpinMessage.d.ts +15 -0
- package/dist/tools/messages/unpinMessage.d.ts.map +1 -0
- package/dist/tools/messages/unpinMessage.js +43 -0
- package/dist/tools/messages/unpinMessage.js.map +1 -0
- package/dist/tools/messages/updateMessage.d.ts +16 -0
- package/dist/tools/messages/updateMessage.d.ts.map +1 -0
- package/dist/tools/messages/updateMessage.js +55 -0
- package/dist/tools/messages/updateMessage.js.map +1 -0
- package/dist/tools/moderators/getActiveModerators.d.ts +10 -0
- package/dist/tools/moderators/getActiveModerators.d.ts.map +1 -0
- package/dist/tools/moderators/getActiveModerators.js +44 -0
- package/dist/tools/moderators/getActiveModerators.js.map +1 -0
- package/dist/tools/moderators/index.d.ts.map +1 -1
- package/dist/tools/moderators/index.js +25 -17
- package/dist/tools/moderators/index.js.map +1 -1
- package/dist/tools/moderators/onModeratorChanged.d.ts +9 -0
- package/dist/tools/moderators/onModeratorChanged.d.ts.map +1 -0
- package/dist/tools/moderators/onModeratorChanged.js +49 -0
- package/dist/tools/moderators/onModeratorChanged.js.map +1 -0
- package/dist/tools/nft/index.js +21 -21
- package/dist/tools/nft/index.js.map +1 -1
- package/dist/tools/overseers/cache-management.d.ts +23 -0
- package/dist/tools/overseers/cache-management.d.ts.map +1 -0
- package/dist/tools/overseers/cache-management.js +151 -0
- package/dist/tools/overseers/cache-management.js.map +1 -0
- package/dist/tools/overseers/getOverseerUserSummary.js +2 -2
- package/dist/tools/overseers/getOverseerUserSummary.js.map +1 -1
- package/dist/tools/overseers/index.d.ts +11 -2
- package/dist/tools/overseers/index.d.ts.map +1 -1
- package/dist/tools/overseers/index.js +69 -27
- package/dist/tools/overseers/index.js.map +1 -1
- package/dist/tools/overseers/listOverseerUsers.d.ts +1 -0
- package/dist/tools/overseers/listOverseerUsers.d.ts.map +1 -1
- package/dist/tools/overseers/listOverseerUsers.js +16 -11
- package/dist/tools/overseers/listOverseerUsers.js.map +1 -1
- package/dist/tools/pagination-handler-factory.d.ts +30 -28
- package/dist/tools/pagination-handler-factory.d.ts.map +1 -1
- package/dist/tools/pagination-handler-factory.js +42 -36
- package/dist/tools/pagination-handler-factory.js.map +1 -1
- package/dist/tools/pools/checkPoolExists.js +3 -3
- package/dist/tools/pools/checkPoolExists.js.map +1 -1
- package/dist/tools/pools/fetchAllPools.js +5 -5
- package/dist/tools/pools/fetchAllPools.js.map +1 -1
- package/dist/tools/pools/fetchAllPriceHistory.js +3 -3
- package/dist/tools/pools/fetchAllPriceHistory.js.map +1 -1
- package/dist/tools/pools/fetchPoolDetails.js +1 -1
- package/dist/tools/pools/fetchPoolDetails.js.map +1 -1
- package/dist/tools/pools/fetchPools.d.ts.map +1 -1
- package/dist/tools/pools/fetchPools.js +10 -11
- package/dist/tools/pools/fetchPools.js.map +1 -1
- package/dist/tools/pools/fetchPriceHistory.js +7 -7
- package/dist/tools/pools/fetchPriceHistory.js.map +1 -1
- package/dist/tools/pools/fetchTokenDetails.js +1 -1
- package/dist/tools/pools/fetchTokenDetails.js.map +1 -1
- package/dist/tools/pools/getPoolRealtimeState.d.ts +10 -0
- package/dist/tools/pools/getPoolRealtimeState.d.ts.map +1 -0
- package/dist/tools/pools/getPoolRealtimeState.js +45 -0
- package/dist/tools/pools/getPoolRealtimeState.js.map +1 -0
- package/dist/tools/pools/index.d.ts.map +1 -1
- package/dist/tools/pools/index.js +51 -29
- package/dist/tools/pools/index.js.map +1 -1
- package/dist/tools/pools/onDexPoolCreation.js +3 -3
- package/dist/tools/pools/onDexPoolCreation.js.map +1 -1
- package/dist/tools/pools/onHolderCountChanged.d.ts +9 -0
- package/dist/tools/pools/onHolderCountChanged.d.ts.map +1 -0
- package/dist/tools/pools/onHolderCountChanged.js +44 -0
- package/dist/tools/pools/onHolderCountChanged.js.map +1 -0
- package/dist/tools/pools/onLaunchpadTokenCreation.js +2 -2
- package/dist/tools/pools/onLaunchpadTokenCreation.js.map +1 -1
- package/dist/tools/pools/onPoolUpdated.d.ts +9 -0
- package/dist/tools/pools/onPoolUpdated.d.ts.map +1 -0
- package/dist/tools/pools/onPoolUpdated.js +44 -0
- package/dist/tools/pools/onPoolUpdated.js.map +1 -0
- package/dist/tools/pools/updateTokenConfig.d.ts +15 -0
- package/dist/tools/pools/updateTokenConfig.d.ts.map +1 -0
- package/dist/tools/pools/updateTokenConfig.js +144 -0
- package/dist/tools/pools/updateTokenConfig.js.map +1 -0
- package/dist/tools/pools/validateToken.d.ts +8 -0
- package/dist/tools/pools/validateToken.d.ts.map +1 -0
- package/dist/tools/pools/validateToken.js +42 -0
- package/dist/tools/pools/validateToken.js.map +1 -0
- package/dist/tools/recordings/index.d.ts +28 -0
- package/dist/tools/recordings/index.d.ts.map +1 -0
- package/dist/tools/recordings/index.js +113 -0
- package/dist/tools/recordings/index.js.map +1 -0
- package/dist/tools/referrals/index.js +9 -9
- package/dist/tools/referrals/index.js.map +1 -1
- package/dist/tools/restricted-names/getRestrictedNames.d.ts +16 -0
- package/dist/tools/restricted-names/getRestrictedNames.d.ts.map +1 -0
- package/dist/tools/restricted-names/getRestrictedNames.js +47 -0
- package/dist/tools/restricted-names/getRestrictedNames.js.map +1 -0
- package/dist/tools/restricted-names/index.d.ts +22 -0
- package/dist/tools/restricted-names/index.d.ts.map +1 -0
- package/dist/tools/restricted-names/index.js +28 -0
- package/dist/tools/restricted-names/index.js.map +1 -0
- package/dist/tools/restricted-names/updateRestrictedNames.d.ts +16 -0
- package/dist/tools/restricted-names/updateRestrictedNames.d.ts.map +1 -0
- package/dist/tools/restricted-names/updateRestrictedNames.js +56 -0
- package/dist/tools/restricted-names/updateRestrictedNames.js.map +1 -0
- package/dist/tools/simulcasts/index.d.ts +25 -0
- package/dist/tools/simulcasts/index.d.ts.map +1 -0
- package/dist/tools/simulcasts/index.js +143 -0
- package/dist/tools/simulcasts/index.js.map +1 -0
- package/dist/tools/streaming/index.d.ts +4 -37
- package/dist/tools/streaming/index.d.ts.map +1 -1
- package/dist/tools/streaming/index.js +7 -240
- package/dist/tools/streaming/index.js.map +1 -1
- package/dist/tools/streaming/setNextLiveStreamCountdown.js +2 -2
- package/dist/tools/streaming/setNextLiveStreamCountdown.js.map +1 -1
- package/dist/tools/token-ban/index.d.ts.map +1 -1
- package/dist/tools/token-ban/index.js +14 -12
- package/dist/tools/token-ban/index.js.map +1 -1
- package/dist/tools/token-ban/onTokenBanChanged.d.ts +9 -0
- package/dist/tools/token-ban/onTokenBanChanged.d.ts.map +1 -0
- package/dist/tools/token-ban/onTokenBanChanged.js +43 -0
- package/dist/tools/token-ban/onTokenBanChanged.js.map +1 -0
- package/dist/tools/tool-factory.d.ts +6 -6
- package/dist/tools/tool-factory.js +8 -8
- package/dist/tools/tool-factory.js.map +1 -1
- package/dist/tools/trades/getRecentTrades.d.ts +10 -0
- package/dist/tools/trades/getRecentTrades.d.ts.map +1 -0
- package/dist/tools/trades/getRecentTrades.js +57 -0
- package/dist/tools/trades/getRecentTrades.js.map +1 -0
- package/dist/tools/trades/index.d.ts +1 -1
- package/dist/tools/trades/index.d.ts.map +1 -1
- package/dist/tools/trades/index.js +18 -14
- package/dist/tools/trades/index.js.map +1 -1
- package/dist/tools/trades/onTradeExecuted.d.ts +9 -0
- package/dist/tools/trades/onTradeExecuted.d.ts.map +1 -0
- package/dist/tools/trades/onTradeExecuted.js +52 -0
- package/dist/tools/trades/onTradeExecuted.js.map +1 -0
- package/dist/tools/trading/helpers/arg-extractors.d.ts +11 -11
- package/dist/tools/trading/helpers/arg-extractors.d.ts.map +1 -1
- package/dist/tools/trading/helpers/arg-extractors.js +1 -1
- package/dist/tools/trading/helpers/arg-extractors.js.map +1 -1
- package/dist/tools/trading/helpers/trading-schemas.d.ts +7 -7
- package/dist/tools/trading/helpers/trading-schemas.js +13 -13
- package/dist/tools/trading/helpers/trading-schemas.js.map +1 -1
- package/dist/tools/trading/index.d.ts.map +1 -1
- package/dist/tools/trading/index.js +20 -17
- package/dist/tools/trading/index.js.map +1 -1
- package/dist/tools/transfers/index.js +2 -2
- package/dist/tools/transfers/index.js.map +1 -1
- package/dist/tools/utils/clearCache.d.ts.map +1 -1
- package/dist/tools/utils/clearCache.js +1 -1
- package/dist/tools/utils/clearCache.js.map +1 -1
- package/dist/tools/utils/explainSdkUsage.d.ts +2 -0
- package/dist/tools/utils/explainSdkUsage.d.ts.map +1 -1
- package/dist/tools/utils/explainSdkUsage.js +403 -585
- package/dist/tools/utils/explainSdkUsage.js.map +1 -1
- package/dist/tools/utils/explainWebSocketEvents.d.ts +10 -0
- package/dist/tools/utils/explainWebSocketEvents.d.ts.map +1 -0
- package/dist/tools/utils/explainWebSocketEvents.js +97 -0
- package/dist/tools/utils/explainWebSocketEvents.js.map +1 -0
- package/dist/tools/utils/getEthereumAddressFromPrivateKey.js +1 -1
- package/dist/tools/utils/getEthereumAddressFromPrivateKey.js.map +1 -1
- package/dist/tools/utils/getEventSchema.d.ts +10 -0
- package/dist/tools/utils/getEventSchema.d.ts.map +1 -0
- package/dist/tools/utils/getEventSchema.js +168 -0
- package/dist/tools/utils/getEventSchema.js.map +1 -0
- package/dist/tools/utils/getPlatformStatus.d.ts +10 -0
- package/dist/tools/utils/getPlatformStatus.d.ts.map +1 -0
- package/dist/tools/utils/getPlatformStatus.js +35 -0
- package/dist/tools/utils/getPlatformStatus.js.map +1 -0
- package/dist/tools/utils/getPublicKeyFromPrivateKey.js +1 -1
- package/dist/tools/utils/getPublicKeyFromPrivateKey.js.map +1 -1
- package/dist/tools/utils/index.d.ts.map +1 -1
- package/dist/tools/utils/index.js +6 -0
- package/dist/tools/utils/index.js.map +1 -1
- package/dist/tools/utils/setWallet.js +1 -1
- package/dist/tools/utils/setWallet.js.map +1 -1
- package/dist/tools/utils/switchEnvironment.js +1 -1
- package/dist/tools/utils/switchEnvironment.js.map +1 -1
- package/dist/tools/validate-manifest.d.ts +35 -0
- package/dist/tools/validate-manifest.d.ts.map +1 -0
- package/dist/tools/validate-manifest.js +122 -0
- package/dist/tools/validate-manifest.js.map +1 -0
- package/dist/tools/websocket-admin/emitBalanceUpdated.d.ts +15 -0
- package/dist/tools/websocket-admin/emitBalanceUpdated.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitBalanceUpdated.js +64 -0
- package/dist/tools/websocket-admin/emitBalanceUpdated.js.map +1 -0
- package/dist/tools/websocket-admin/emitChatMessage.d.ts +15 -0
- package/dist/tools/websocket-admin/emitChatMessage.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitChatMessage.js +56 -0
- package/dist/tools/websocket-admin/emitChatMessage.js.map +1 -0
- package/dist/tools/websocket-admin/emitChatStatus.d.ts +15 -0
- package/dist/tools/websocket-admin/emitChatStatus.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitChatStatus.js +54 -0
- package/dist/tools/websocket-admin/emitChatStatus.js.map +1 -0
- package/dist/tools/websocket-admin/emitFeatureStatus.d.ts +15 -0
- package/dist/tools/websocket-admin/emitFeatureStatus.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitFeatureStatus.js +61 -0
- package/dist/tools/websocket-admin/emitFeatureStatus.js.map +1 -0
- package/dist/tools/websocket-admin/emitModeratorAdded.d.ts +15 -0
- package/dist/tools/websocket-admin/emitModeratorAdded.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitModeratorAdded.js +64 -0
- package/dist/tools/websocket-admin/emitModeratorAdded.js.map +1 -0
- package/dist/tools/websocket-admin/emitModeratorRemoved.d.ts +15 -0
- package/dist/tools/websocket-admin/emitModeratorRemoved.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitModeratorRemoved.js +54 -0
- package/dist/tools/websocket-admin/emitModeratorRemoved.js.map +1 -0
- package/dist/tools/websocket-admin/emitSiteConfigChanged.d.ts +15 -0
- package/dist/tools/websocket-admin/emitSiteConfigChanged.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitSiteConfigChanged.js +54 -0
- package/dist/tools/websocket-admin/emitSiteConfigChanged.js.map +1 -0
- package/dist/tools/websocket-admin/emitStreamCountdown.d.ts +15 -0
- package/dist/tools/websocket-admin/emitStreamCountdown.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitStreamCountdown.js +55 -0
- package/dist/tools/websocket-admin/emitStreamCountdown.js.map +1 -0
- package/dist/tools/websocket-admin/emitStreamStatus.d.ts +15 -0
- package/dist/tools/websocket-admin/emitStreamStatus.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitStreamStatus.js +59 -0
- package/dist/tools/websocket-admin/emitStreamStatus.js.map +1 -0
- package/dist/tools/websocket-admin/emitTokenBanned.d.ts +15 -0
- package/dist/tools/websocket-admin/emitTokenBanned.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitTokenBanned.js +60 -0
- package/dist/tools/websocket-admin/emitTokenBanned.js.map +1 -0
- package/dist/tools/websocket-admin/emitTokenUnbanned.d.ts +15 -0
- package/dist/tools/websocket-admin/emitTokenUnbanned.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitTokenUnbanned.js +54 -0
- package/dist/tools/websocket-admin/emitTokenUnbanned.js.map +1 -0
- package/dist/tools/websocket-admin/emitTradeExecuted.d.ts +15 -0
- package/dist/tools/websocket-admin/emitTradeExecuted.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitTradeExecuted.js +64 -0
- package/dist/tools/websocket-admin/emitTradeExecuted.js.map +1 -0
- package/dist/tools/websocket-admin/emitTypingIndicator.d.ts +15 -0
- package/dist/tools/websocket-admin/emitTypingIndicator.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitTypingIndicator.js +57 -0
- package/dist/tools/websocket-admin/emitTypingIndicator.js.map +1 -0
- package/dist/tools/websocket-admin/emitUserProfileUpdated.d.ts +15 -0
- package/dist/tools/websocket-admin/emitUserProfileUpdated.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitUserProfileUpdated.js +57 -0
- package/dist/tools/websocket-admin/emitUserProfileUpdated.js.map +1 -0
- package/dist/tools/websocket-admin/emitViewerCount.d.ts +15 -0
- package/dist/tools/websocket-admin/emitViewerCount.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitViewerCount.js +50 -0
- package/dist/tools/websocket-admin/emitViewerCount.js.map +1 -0
- package/dist/tools/websocket-admin/emitWebSocketEvent.d.ts +15 -0
- package/dist/tools/websocket-admin/emitWebSocketEvent.d.ts.map +1 -0
- package/dist/tools/websocket-admin/emitWebSocketEvent.js +98 -0
- package/dist/tools/websocket-admin/emitWebSocketEvent.js.map +1 -0
- package/dist/tools/websocket-admin/getConnectedClients.d.ts +15 -0
- package/dist/tools/websocket-admin/getConnectedClients.d.ts.map +1 -0
- package/dist/tools/websocket-admin/getConnectedClients.js +115 -0
- package/dist/tools/websocket-admin/getConnectedClients.js.map +1 -0
- package/dist/tools/websocket-admin/getOnlineOverseers.d.ts +15 -0
- package/dist/tools/websocket-admin/getOnlineOverseers.d.ts.map +1 -0
- package/dist/tools/websocket-admin/getOnlineOverseers.js +39 -0
- package/dist/tools/websocket-admin/getOnlineOverseers.js.map +1 -0
- package/dist/tools/websocket-admin/getOnlineUsers.d.ts +15 -0
- package/dist/tools/websocket-admin/getOnlineUsers.d.ts.map +1 -0
- package/dist/tools/websocket-admin/getOnlineUsers.js +54 -0
- package/dist/tools/websocket-admin/getOnlineUsers.js.map +1 -0
- package/dist/tools/websocket-admin/getTokenViewers.d.ts +15 -0
- package/dist/tools/websocket-admin/getTokenViewers.d.ts.map +1 -0
- package/dist/tools/websocket-admin/getTokenViewers.js +60 -0
- package/dist/tools/websocket-admin/getTokenViewers.js.map +1 -0
- package/dist/tools/websocket-admin/index.d.ts +74 -0
- package/dist/tools/websocket-admin/index.d.ts.map +1 -0
- package/dist/tools/websocket-admin/index.js +126 -0
- package/dist/tools/websocket-admin/index.js.map +1 -0
- package/dist/tools/websocket-admin/isUserOnline.d.ts +15 -0
- package/dist/tools/websocket-admin/isUserOnline.d.ts.map +1 -0
- package/dist/tools/websocket-admin/isUserOnline.js +49 -0
- package/dist/tools/websocket-admin/isUserOnline.js.map +1 -0
- package/dist/utils/default-values.d.ts +0 -40
- package/dist/utils/default-values.d.ts.map +1 -1
- package/dist/utils/default-values.js +2 -45
- package/dist/utils/default-values.js.map +1 -1
- package/dist/utils/handler-args.d.ts +8 -0
- package/dist/utils/handler-args.d.ts.map +1 -0
- package/dist/utils/handler-args.js +28 -0
- package/dist/utils/handler-args.js.map +1 -0
- package/package.json +10 -10
- package/dist/tools/pools/updateTokenSocials.d.ts +0 -16
- package/dist/tools/pools/updateTokenSocials.d.ts.map +0 -1
- package/dist/tools/pools/updateTokenSocials.js +0 -84
- package/dist/tools/pools/updateTokenSocials.js.map +0 -1
|
@@ -34,14 +34,14 @@ exports.TOPIC_METHOD_MAPPING = {
|
|
|
34
34
|
'token-distribution': ['fetchTokenDistribution', 'fetchUserHolderContext'],
|
|
35
35
|
'token-status': ['isTokenGraduated', 'onDexPoolCreation', 'onLaunchpadTokenCreation'],
|
|
36
36
|
// Portfolio Management
|
|
37
|
-
'multi-wallet': [], // Composite workflow topic
|
|
37
|
+
'multi-wallet': ['getAddress'], // Composite workflow topic
|
|
38
38
|
'transfers': ['transferGala', 'transferToken'],
|
|
39
39
|
'locks': ['lockTokens', 'unlockTokens', 'burnTokens', 'fetchLockedBalance'],
|
|
40
40
|
// DEX Trading
|
|
41
41
|
'dex-trading': ['getSwapQuoteExactInput', 'getSwapQuoteExactOutput', 'executeSwap', 'getSwapUserAssets', 'getAllSwapUserAssets', 'getSwapPoolInfo'],
|
|
42
|
-
'error-handling': [], // Cross-cutting concern
|
|
42
|
+
'error-handling': ['getBundlerTransactionResult'], // Cross-cutting concern
|
|
43
43
|
// Developer Tools
|
|
44
|
-
'installation': [], // Setup topic
|
|
44
|
+
'installation': ['getVersion'], // Setup topic
|
|
45
45
|
'local-calculations': ['calculateBuyAmountLocal', 'calculateSellAmountLocal', 'calculateBuyAmountExternal', 'calculateSellAmountExternal', 'calculateInitialBuyAmount'],
|
|
46
46
|
// Market Data
|
|
47
47
|
'price-history': ['fetchPriceHistory', 'fetchAllPriceHistory'],
|
|
@@ -65,7 +65,7 @@ exports.TOPIC_METHOD_MAPPING = {
|
|
|
65
65
|
// Event Subscriptions
|
|
66
66
|
'event-subscriptions': ['subscribeToStream', 'unsubscribeFromStream', 'onStreamStatusChanged', 'onUserBanned', 'onUserUnbanned', 'onBanEnforcement', 'onContentFlagged', 'onFlagResolved', 'onStreamChatMessage', 'onStreamChatUpdated', 'onStreamChatDeleted', 'onStreamChatPinned', 'onStreamChatUnpinned', 'onChatStatusChanged', 'onViewerCountChanged', 'onRecordingStatusChanged', 'onSimulcastStatusChanged', 'onDownloadReady', 'onUserTyping', 'onStreamReaction', 'onContentReactionAdded', 'onContentReactionRemoved', 'onStreamCountdownUpdated', 'onStreamLanguageUpdated', 'onStreamControlStatusChanged', 'onConnection', 'onAuthenticated', 'onTokenSubscribed', 'onTokenUnsubscribed', 'onRoomSubscribed', 'onRoomLeft', 'onDexPoolCreation', 'onLaunchpadTokenCreation'],
|
|
67
67
|
// MCP Integration
|
|
68
|
-
'mcp-to-sdk-mapping': [], // Composite workflow topic
|
|
68
|
+
'mcp-to-sdk-mapping': ['explainSdkUsage'], // Composite workflow topic
|
|
69
69
|
// Bridge Operations
|
|
70
70
|
'bridge-operations': [
|
|
71
71
|
'estimateBridgeFee', 'bridgeOut', 'bridgeIn', 'getBridgeStatus',
|
|
@@ -113,7 +113,7 @@ exports.TOPIC_METHOD_MAPPING = {
|
|
|
113
113
|
],
|
|
114
114
|
// Stream Chat
|
|
115
115
|
'stream-chat': [
|
|
116
|
-
'
|
|
116
|
+
'getChatStatus', 'disableChat', 'enableChat',
|
|
117
117
|
'getGlobalChatStatus', 'setGlobalChatEnabled',
|
|
118
118
|
'connectStreamWebSocket', 'authenticateStreamWebSocket', 'subscribeToStream',
|
|
119
119
|
'unsubscribeFromStream', 'sendStreamChatViaWebSocket', 'sendStreamReaction', 'disconnectStreamWebSocket',
|
|
@@ -166,6 +166,14 @@ exports.TOPIC_METHOD_MAPPING = {
|
|
|
166
166
|
'createNftTokenClass', 'fetchNftTokenClasses',
|
|
167
167
|
'mintNft', 'fetchNftBalances'
|
|
168
168
|
],
|
|
169
|
+
// Token Identification & Format Concepts (v5.14.0+)
|
|
170
|
+
// These are conceptual topics that help AI understand token formats
|
|
171
|
+
'token-identification': [
|
|
172
|
+
'fetchPools', 'isTokenGraduated', 'resolveTokenClassKey', 'fetchTokenPrice'
|
|
173
|
+
],
|
|
174
|
+
'graduation-detection': [
|
|
175
|
+
'isTokenGraduated', 'fetchPools', 'onDexPoolCreation', 'onLaunchpadTokenCreation'
|
|
176
|
+
],
|
|
169
177
|
};
|
|
170
178
|
/**
|
|
171
179
|
* Composite topics that don't map 1:1 to SDK methods
|
|
@@ -184,6 +192,8 @@ exports.COMPOSITE_TOPICS = new Set([
|
|
|
184
192
|
'session-auth', 'streaming', 'stream-chat', 'ban-management', 'api-key-management',
|
|
185
193
|
'moderator-invites', 'overseer-invites', 'content-flag-management', 'content-reactions', 'trade-history', 'token-ban-management',
|
|
186
194
|
'nft-collection-management',
|
|
195
|
+
// Token Concepts (v5.14.0+)
|
|
196
|
+
'token-identification', 'graduation-detection',
|
|
187
197
|
]);
|
|
188
198
|
/**
|
|
189
199
|
* SDK code examples organized by topic
|
|
@@ -220,10 +230,6 @@ async function buyTokens() {
|
|
|
220
230
|
type: 'native' // 'native' = GALA amount, 'exact' = token amount
|
|
221
231
|
});
|
|
222
232
|
|
|
223
|
-
console.log('Expected tokens:', calculation.amount);
|
|
224
|
-
console.log('RBC Fee:', calculation.reverseBondingCurveFee);
|
|
225
|
-
console.log('Transaction fee:', calculation.transactionFee);
|
|
226
|
-
|
|
227
233
|
// 3. Execute buy with slippage protection
|
|
228
234
|
const result = await sdk.buy({
|
|
229
235
|
tokenName: 'dragnrkti',
|
|
@@ -234,10 +240,6 @@ async function buyTokens() {
|
|
|
234
240
|
slippageToleranceFactor: 0.01 // 1% slippage tolerance (REQUIRED)
|
|
235
241
|
});
|
|
236
242
|
|
|
237
|
-
console.log('Transaction ID:', result.transactionId);
|
|
238
|
-
console.log('GALA spent:', result.inputAmount);
|
|
239
|
-
console.log('Tokens received:', result.outputAmount);
|
|
240
|
-
console.log('Total fees:', result.totalFees);
|
|
241
243
|
}
|
|
242
244
|
\`\`\`
|
|
243
245
|
|
|
@@ -266,9 +268,6 @@ async function sellTokens() {
|
|
|
266
268
|
type: 'exact' // 'exact' = exact tokens, 'native' = target GALA amount
|
|
267
269
|
});
|
|
268
270
|
|
|
269
|
-
console.log('Expected GALA:', calculation.amount);
|
|
270
|
-
console.log('RBC Fee:', calculation.reverseBondingCurveFee);
|
|
271
|
-
|
|
272
271
|
// 3. Execute sell with slippage protection
|
|
273
272
|
const result = await sdk.sell({
|
|
274
273
|
tokenName: 'dragnrkti',
|
|
@@ -279,8 +278,6 @@ async function sellTokens() {
|
|
|
279
278
|
slippageToleranceFactor: 0.01 // 1% slippage
|
|
280
279
|
});
|
|
281
280
|
|
|
282
|
-
console.log('Tokens sold:', result.inputAmount);
|
|
283
|
-
console.log('GALA received:', result.outputAmount);
|
|
284
281
|
}
|
|
285
282
|
\`\`\`
|
|
286
283
|
|
|
@@ -304,10 +301,6 @@ async function graduatePool() {
|
|
|
304
301
|
// Option 1: Calculate graduation cost first (recommended)
|
|
305
302
|
const calculation = await sdk.calculateBuyAmountForGraduation('dragnrkti');
|
|
306
303
|
|
|
307
|
-
console.log('GALA cost to graduate:', calculation.amount);
|
|
308
|
-
console.log('RBC Fee:', calculation.reverseBondingCurveFee);
|
|
309
|
-
console.log('Transaction fee:', calculation.transactionFee);
|
|
310
|
-
|
|
311
304
|
// Check if you have enough balance
|
|
312
305
|
const balance = await sdk.fetchGalaBalance();
|
|
313
306
|
// Use compareAmounts() instead of parseFloat for precision with currency amounts
|
|
@@ -321,10 +314,6 @@ async function graduatePool() {
|
|
|
321
314
|
slippageToleranceFactor: 0.01 // Optional: defaults to SDK config
|
|
322
315
|
});
|
|
323
316
|
|
|
324
|
-
console.log('Pool graduated!');
|
|
325
|
-
console.log('Transaction ID:', result.transactionId);
|
|
326
|
-
console.log('Total GALA spent:', result.inputAmount);
|
|
327
|
-
console.log('Tokens received:', result.outputAmount);
|
|
328
317
|
}
|
|
329
318
|
\`\`\`
|
|
330
319
|
|
|
@@ -367,9 +356,8 @@ async function basicPoolFetching() {
|
|
|
367
356
|
page: 1
|
|
368
357
|
});
|
|
369
358
|
|
|
370
|
-
console.log(\`Found \${pools.total} pools, page \${pools.page} of \${pools.totalPages}\`);
|
|
371
359
|
pools.pools.forEach(pool => {
|
|
372
|
-
|
|
360
|
+
|
|
373
361
|
});
|
|
374
362
|
}
|
|
375
363
|
|
|
@@ -382,7 +370,6 @@ async function fetchAllPools() {
|
|
|
382
370
|
type: 'recent'
|
|
383
371
|
});
|
|
384
372
|
|
|
385
|
-
console.log(\`Total pools: \${allPools.pools.length}\`);
|
|
386
373
|
}
|
|
387
374
|
|
|
388
375
|
// 3. POOL DETAILS - Complete information
|
|
@@ -391,10 +378,6 @@ async function getPoolDetails(tokenName) {
|
|
|
391
378
|
|
|
392
379
|
const details = await sdk.fetchPoolDetails(tokenName);
|
|
393
380
|
|
|
394
|
-
console.log('Sale status:', details.saleStatus); // 'Ongoing' or 'Completed'
|
|
395
|
-
console.log('Base price:', details.basePrice);
|
|
396
|
-
console.log('Max supply:', details.maxSupply);
|
|
397
|
-
console.log('Remaining tokens:', details.sellingTokenQuantity);
|
|
398
381
|
}
|
|
399
382
|
|
|
400
383
|
// 4. POOL DETAILS FOR CALCULATIONS - Optimized for math
|
|
@@ -404,10 +387,6 @@ async function getOptimizedPoolDetails(tokenName) {
|
|
|
404
387
|
// Returns only fields needed for bonding curve calculations
|
|
405
388
|
const poolData = await sdk.fetchPoolDetailsForCalculation(tokenName);
|
|
406
389
|
|
|
407
|
-
console.log('Current supply:', poolData.currentSupply);
|
|
408
|
-
console.log('Remaining tokens:', poolData.remainingTokens);
|
|
409
|
-
console.log('Max supply:', poolData.maxSupply);
|
|
410
|
-
console.log('Reverse bonding curve max fee:', poolData.reverseBondingCurveMaxFeeFactor);
|
|
411
390
|
}
|
|
412
391
|
|
|
413
392
|
// 5. VOLUME & OHLCV DATA - Historical candlestick data
|
|
@@ -423,7 +402,7 @@ async function getVolumeData(tokenName) {
|
|
|
423
402
|
});
|
|
424
403
|
|
|
425
404
|
volumeData.forEach(candle => {
|
|
426
|
-
|
|
405
|
+
|
|
427
406
|
});
|
|
428
407
|
}
|
|
429
408
|
|
|
@@ -434,9 +413,6 @@ async function getDexTokenPrices() {
|
|
|
434
413
|
// Fetch prices for multiple DEX tokens
|
|
435
414
|
const prices = await sdk.fetchTokenPrice(['GALA', 'SILK', 'MUSIC']);
|
|
436
415
|
|
|
437
|
-
console.log(\`GALA: $\${prices.GALA}\`);
|
|
438
|
-
console.log(\`SILK: $\${prices.SILK}\`);
|
|
439
|
-
console.log(\`MUSIC: $\${prices.MUSIC}\`);
|
|
440
416
|
}
|
|
441
417
|
|
|
442
418
|
// 7. LAUNCHPAD TOKEN SPOT PRICES (via smart router)
|
|
@@ -446,7 +422,6 @@ async function getLaunchpadTokenPrice(tokenName) {
|
|
|
446
422
|
// Get USD spot price for a launchpad token (anime, woohoo, etc.)
|
|
447
423
|
const price = await sdk.fetchTokenPrice({ tokenName });
|
|
448
424
|
|
|
449
|
-
console.log(\`\${tokenName} price: $\${price.price}\`);
|
|
450
425
|
}
|
|
451
426
|
|
|
452
427
|
// 8. RESOLVE UTILITY ADDRESSES
|
|
@@ -455,11 +430,10 @@ async function resolveAddresses(tokenName) {
|
|
|
455
430
|
|
|
456
431
|
// Get GalaChain vault address for token
|
|
457
432
|
const vaultAddress = await sdk.resolveVaultAddress(tokenName);
|
|
458
|
-
console.log(\`Vault address: \${vaultAddress}\`);
|
|
459
433
|
|
|
460
434
|
// Get TokenClassKey for token
|
|
461
435
|
const tokenClassKey = await sdk.resolveTokenClassKey(tokenName);
|
|
462
|
-
|
|
436
|
+
|
|
463
437
|
}
|
|
464
438
|
|
|
465
439
|
// 9. COMPLETE INVESTMENT ANALYSIS WORKFLOW
|
|
@@ -475,14 +449,11 @@ async function analyzeToken(tokenName) {
|
|
|
475
449
|
]);
|
|
476
450
|
|
|
477
451
|
// Analyze status
|
|
478
|
-
console.log(\`Pool Status: \${details.saleStatus}\`);
|
|
479
|
-
console.log(\`Supply: \${details.currentSupply} / \${details.maxSupply}\`);
|
|
480
452
|
|
|
481
453
|
// Analyze volume trend
|
|
482
454
|
// Note: For analytics/aggregation, we use safeParseFloat for performance. For trades, use BigNumber via SDK
|
|
483
455
|
const volumes = volumeData.map(v => safeParseFloat(v.volume, 0));
|
|
484
456
|
const avgVolume = volumes.reduce((a, b) => a + b, 0) / volumes.length;
|
|
485
|
-
console.log(\`Avg daily volume: $\${toBigNumberFixed(avgVolume, 2)}\`);
|
|
486
457
|
|
|
487
458
|
// Analyze distribution
|
|
488
459
|
// Use compareAmounts for precise balance comparisons
|
|
@@ -490,10 +461,9 @@ async function analyzeToken(tokenName) {
|
|
|
490
461
|
.sort((a, b) => compareAmounts(b.balance, a.balance) > 0 ? 1 : -1)
|
|
491
462
|
.slice(0, 5)
|
|
492
463
|
.reduce((sum, h) => sum + h.percentage, 0);
|
|
493
|
-
console.log(\`Top 5 holders: \${toBigNumberFixed(top5Ownership, 2)}%\`);
|
|
494
464
|
|
|
495
465
|
// Check badges
|
|
496
|
-
|
|
466
|
+
|
|
497
467
|
}
|
|
498
468
|
\`\`\`
|
|
499
469
|
|
|
@@ -530,9 +500,6 @@ async function checkBalances() {
|
|
|
530
500
|
|
|
531
501
|
// Check GALA balance
|
|
532
502
|
const galaBalance = await sdk.fetchGalaBalance();
|
|
533
|
-
console.log(\`GALA: \${galaBalance.balance}\`);
|
|
534
|
-
console.log(\`Decimals: \${galaBalance.decimals}\`);
|
|
535
|
-
console.log(\`Last updated: \${galaBalance.lastUpdated.toISOString()}\`);
|
|
536
503
|
|
|
537
504
|
// Check specific token balance
|
|
538
505
|
const tokenBalance = await sdk.fetchTokenBalance({
|
|
@@ -540,19 +507,14 @@ async function checkBalances() {
|
|
|
540
507
|
address: sdk.getAddress()
|
|
541
508
|
});
|
|
542
509
|
|
|
543
|
-
console.log(\`Token: \${tokenBalance.quantity}\`);
|
|
544
|
-
console.log(\`USD value: $\${tokenBalance.holdingPriceUsd}\`);
|
|
545
|
-
console.log(\`GALA value: \${tokenBalance.holdingPriceGala}\`);
|
|
546
|
-
|
|
547
510
|
// Check all tokens held
|
|
548
511
|
const portfolio = await sdk.fetchTokensHeld({
|
|
549
512
|
address: sdk.getAddress(),
|
|
550
513
|
limit: 20
|
|
551
514
|
});
|
|
552
515
|
|
|
553
|
-
console.log(\`Holding \${portfolio.total} different tokens\`);
|
|
554
516
|
portfolio.tokens.forEach(token => {
|
|
555
|
-
|
|
517
|
+
|
|
556
518
|
});
|
|
557
519
|
|
|
558
520
|
// Check tokens created by this wallet
|
|
@@ -561,18 +523,16 @@ async function checkBalances() {
|
|
|
561
523
|
limit: 10
|
|
562
524
|
});
|
|
563
525
|
|
|
564
|
-
console.log(\`Created \${createdTokens.total} tokens\`);
|
|
565
526
|
createdTokens.tokens.forEach(token => {
|
|
566
|
-
|
|
527
|
+
|
|
567
528
|
});
|
|
568
529
|
|
|
569
530
|
// Get user profile
|
|
570
531
|
const profile = await sdk.fetchProfile();
|
|
571
|
-
console.log(\`Profile: \${profile.fullName}\`);
|
|
572
532
|
|
|
573
533
|
// Check profile of another user
|
|
574
534
|
const otherProfile = await sdk.fetchProfile('eth|0x...');
|
|
575
|
-
|
|
535
|
+
|
|
576
536
|
}
|
|
577
537
|
\`\`\`
|
|
578
538
|
|
|
@@ -600,8 +560,6 @@ const locked = await sdk.fetchLockedTokens({
|
|
|
600
560
|
address: walletAddress
|
|
601
561
|
});
|
|
602
562
|
|
|
603
|
-
console.log('Available:', available.quantity);
|
|
604
|
-
console.log('Locked:', locked.lockedQuantity);
|
|
605
563
|
\`\`\`
|
|
606
564
|
`,
|
|
607
565
|
// ============================================================================
|
|
@@ -639,7 +597,6 @@ async function launchToken() {
|
|
|
639
597
|
|
|
640
598
|
// 2. Check launch fee
|
|
641
599
|
const launchFee = await sdk.fetchLaunchTokenFee();
|
|
642
|
-
console.log(\`Launch fee: \${launchFee} GALA\`);
|
|
643
600
|
|
|
644
601
|
// 3. Upload token image (Node.js only)
|
|
645
602
|
const imageUpload = await sdk.uploadTokenImage({
|
|
@@ -658,12 +615,9 @@ async function launchToken() {
|
|
|
658
615
|
preBuyQuantity: '100' // Optional: pre-buy with GALA
|
|
659
616
|
});
|
|
660
617
|
|
|
661
|
-
console.log('Token launched!');
|
|
662
|
-
console.log('Transaction ID:', result.transactionId);
|
|
663
|
-
|
|
664
618
|
// Get frontend URL
|
|
665
619
|
const url = sdk.getUrlByTokenName('mytoken');
|
|
666
|
-
|
|
620
|
+
|
|
667
621
|
}
|
|
668
622
|
\`\`\`
|
|
669
623
|
|
|
@@ -699,7 +653,6 @@ async function multiWalletExample() {
|
|
|
699
653
|
|
|
700
654
|
// Create a test wallet
|
|
701
655
|
const testWallet = createWallet();
|
|
702
|
-
console.log('Test wallet:', testWallet.address);
|
|
703
656
|
|
|
704
657
|
// 1. Fund test wallet from main wallet
|
|
705
658
|
await sdk.transferGala({
|
|
@@ -723,14 +676,10 @@ async function multiWalletExample() {
|
|
|
723
676
|
privateKey: testWallet.privateKey // Override to use test wallet
|
|
724
677
|
});
|
|
725
678
|
|
|
726
|
-
console.log('Test wallet bought tokens');
|
|
727
|
-
|
|
728
679
|
// 3. Check balances for both wallets
|
|
729
680
|
const mainBalance = await sdk.fetchGalaBalance(); // Main wallet
|
|
730
681
|
const testBalance = await sdk.fetchGalaBalance(testWallet.address); // Test wallet
|
|
731
682
|
|
|
732
|
-
console.log(\`Main wallet: \${mainBalance.balance} GALA\`);
|
|
733
|
-
console.log(\`Test wallet: \${testBalance.balance} GALA\`);
|
|
734
683
|
}
|
|
735
684
|
\`\`\`
|
|
736
685
|
|
|
@@ -761,9 +710,6 @@ async function transferTokens() {
|
|
|
761
710
|
uniqueKey: 'galaconnect-operation-my-transfer-123' // Optional idempotency
|
|
762
711
|
});
|
|
763
712
|
|
|
764
|
-
console.log('GALA transfer ID:', galaTransfer.transactionId);
|
|
765
|
-
console.log('Status:', galaTransfer.status);
|
|
766
|
-
|
|
767
713
|
// Transfer launchpad tokens
|
|
768
714
|
const tokenTransfer = await sdk.transferToken({
|
|
769
715
|
to: 'eth|5678...',
|
|
@@ -772,7 +718,6 @@ async function transferTokens() {
|
|
|
772
718
|
uniqueKey: 'galaconnect-operation-token-456'
|
|
773
719
|
});
|
|
774
720
|
|
|
775
|
-
console.log('Token transfer ID:', tokenTransfer.transactionId);
|
|
776
721
|
}
|
|
777
722
|
\`\`\`
|
|
778
723
|
|
|
@@ -817,9 +762,6 @@ async function tokenLockingAndBurning() {
|
|
|
817
762
|
}]
|
|
818
763
|
});
|
|
819
764
|
|
|
820
|
-
console.log('Lock transaction ID:', lockResult.transactionId);
|
|
821
|
-
console.log('Locked entries:', lockResult.locked);
|
|
822
|
-
|
|
823
765
|
// ============================================================================
|
|
824
766
|
// LOCK TOKENS - Multiple tokens in one transaction (batch)
|
|
825
767
|
// ============================================================================
|
|
@@ -833,8 +775,6 @@ async function tokenLockingAndBurning() {
|
|
|
833
775
|
]
|
|
834
776
|
});
|
|
835
777
|
|
|
836
|
-
console.log('Batch lock completed:', batchLock.locked.length, 'tokens locked');
|
|
837
|
-
|
|
838
778
|
// ============================================================================
|
|
839
779
|
// LOCK TOKENS - Advanced options
|
|
840
780
|
// ============================================================================
|
|
@@ -850,8 +790,6 @@ async function tokenLockingAndBurning() {
|
|
|
850
790
|
}]
|
|
851
791
|
});
|
|
852
792
|
|
|
853
|
-
console.log('Escrow lock created');
|
|
854
|
-
|
|
855
793
|
// Lock for time-based vesting
|
|
856
794
|
const vestingLock = await sdk.lockTokens({
|
|
857
795
|
tokens: [{
|
|
@@ -862,8 +800,6 @@ async function tokenLockingAndBurning() {
|
|
|
862
800
|
}]
|
|
863
801
|
});
|
|
864
802
|
|
|
865
|
-
console.log('Vesting lock created with expiry');
|
|
866
|
-
|
|
867
803
|
// ============================================================================
|
|
868
804
|
// UNLOCK TOKENS - Release locked tokens
|
|
869
805
|
// ============================================================================
|
|
@@ -876,9 +812,6 @@ async function tokenLockingAndBurning() {
|
|
|
876
812
|
}]
|
|
877
813
|
});
|
|
878
814
|
|
|
879
|
-
console.log('Unlock transaction ID:', unlockResult.transactionId);
|
|
880
|
-
console.log('Unlocked entries:', unlockResult.unlocked);
|
|
881
|
-
|
|
882
815
|
// Unlock multiple tokens in one transaction
|
|
883
816
|
const batchUnlock = await sdk.unlockTokens({
|
|
884
817
|
tokens: [
|
|
@@ -887,8 +820,6 @@ async function tokenLockingAndBurning() {
|
|
|
887
820
|
]
|
|
888
821
|
});
|
|
889
822
|
|
|
890
|
-
console.log('Batch unlock completed');
|
|
891
|
-
|
|
892
823
|
// ============================================================================
|
|
893
824
|
// BURN TOKENS - Permanently destroy (IRREVERSIBLE!)
|
|
894
825
|
// ============================================================================
|
|
@@ -901,9 +832,6 @@ async function tokenLockingAndBurning() {
|
|
|
901
832
|
}]
|
|
902
833
|
});
|
|
903
834
|
|
|
904
|
-
console.log('Burn transaction ID:', burnResult.transactionId);
|
|
905
|
-
console.log('Burned:', burnResult.burned);
|
|
906
|
-
|
|
907
835
|
// Batch burn multiple token types
|
|
908
836
|
const batchBurn = await sdk.burnTokens({
|
|
909
837
|
tokens: [
|
|
@@ -912,8 +840,6 @@ async function tokenLockingAndBurning() {
|
|
|
912
840
|
]
|
|
913
841
|
});
|
|
914
842
|
|
|
915
|
-
console.log('Batch burn completed:', batchBurn.burned.length, 'token types burned');
|
|
916
|
-
|
|
917
843
|
// ============================================================================
|
|
918
844
|
// QUERY LOCKED TOKENS - Check lock status
|
|
919
845
|
// ============================================================================
|
|
@@ -923,15 +849,11 @@ async function tokenLockingAndBurning() {
|
|
|
923
849
|
address: sdk.getAddress()
|
|
924
850
|
});
|
|
925
851
|
|
|
926
|
-
console.log('Locked quantity:', lockedTokens.lockedQuantity);
|
|
927
|
-
console.log('Active holds:', lockedTokens.holds);
|
|
928
|
-
|
|
929
852
|
// Each hold contains: lockAuthority, expires, name, quantity
|
|
930
853
|
for (const hold of lockedTokens.holds) {
|
|
931
|
-
|
|
932
|
-
if (hold.expires)
|
|
933
|
-
if (hold.name)
|
|
934
|
-
}
|
|
854
|
+
|
|
855
|
+
if (hold.expires) }\`);
|
|
856
|
+
if (hold.name) }
|
|
935
857
|
|
|
936
858
|
// ============================================================================
|
|
937
859
|
// STAKING WORKFLOW EXAMPLE
|
|
@@ -948,8 +870,6 @@ async function tokenLockingAndBurning() {
|
|
|
948
870
|
}]
|
|
949
871
|
});
|
|
950
872
|
|
|
951
|
-
console.log('Staked 5000 tokens for 90 days');
|
|
952
|
-
|
|
953
873
|
// Step 2: After staking period expires, unlock
|
|
954
874
|
const unstake = await sdk.unlockTokens({
|
|
955
875
|
tokens: [{
|
|
@@ -959,7 +879,6 @@ async function tokenLockingAndBurning() {
|
|
|
959
879
|
}]
|
|
960
880
|
});
|
|
961
881
|
|
|
962
|
-
console.log('Unstaked tokens after staking period');
|
|
963
882
|
return { stake, unstake };
|
|
964
883
|
}
|
|
965
884
|
|
|
@@ -978,8 +897,6 @@ async function tokenLockingAndBurning() {
|
|
|
978
897
|
}]
|
|
979
898
|
});
|
|
980
899
|
|
|
981
|
-
console.log('Escrow created: seller can release payment upon delivery');
|
|
982
|
-
|
|
983
900
|
// Step 2: Seller releases escrow after delivery (seller calls unlock)
|
|
984
901
|
// This would be executed by the seller's SDK instance
|
|
985
902
|
// const release = await sellerSdk.unlockTokens({
|
|
@@ -1075,13 +992,9 @@ async function dexTradingExample() {
|
|
|
1075
992
|
|
|
1076
993
|
// Quote 1: Exact input (spend known GALA amount)
|
|
1077
994
|
const quoteIn = await sdk.getSwapQuoteExactInput('GALA', 'GUSDC', '100');
|
|
1078
|
-
console.log('Spend 100 GALA → get ~' + quoteIn.estimatedOutput + ' GUSDC');
|
|
1079
|
-
console.log('Price impact: ' + quoteIn.priceImpact + '%');
|
|
1080
|
-
console.log('Fee tier: ' + quoteIn.feeTier + ' bps');
|
|
1081
995
|
|
|
1082
996
|
// Quote 2: Exact output (get known token amount)
|
|
1083
997
|
const quoteOut = await sdk.getSwapQuoteExactOutput('GALA', 'GUSDC', '100');
|
|
1084
|
-
console.log('Get exactly 100 GUSDC → need ~' + quoteOut.inputAmount + ' GALA');
|
|
1085
998
|
|
|
1086
999
|
// ============================================================================
|
|
1087
1000
|
// EXECUTE: Perform the swap with slippage protection
|
|
@@ -1096,18 +1009,14 @@ async function dexTradingExample() {
|
|
|
1096
1009
|
0.01 // 1% slippage tolerance
|
|
1097
1010
|
);
|
|
1098
1011
|
|
|
1099
|
-
console.log('Transaction ID: ' + result.transactionId);
|
|
1100
|
-
console.log('Status: ' + result.status);
|
|
1101
|
-
console.log('Received: ' + result.outputAmount + ' ' + result.toToken);
|
|
1102
|
-
|
|
1103
1012
|
// ============================================================================
|
|
1104
1013
|
// PORTFOLIO: Check balances and assets
|
|
1105
1014
|
// ============================================================================
|
|
1106
1015
|
|
|
1107
1016
|
const assets = await sdk.getSwapUserAssets(sdk.getEthereumAddress());
|
|
1108
|
-
|
|
1017
|
+
|
|
1109
1018
|
assets.forEach(asset => {
|
|
1110
|
-
|
|
1019
|
+
|
|
1111
1020
|
});
|
|
1112
1021
|
|
|
1113
1022
|
// ============================================================================
|
|
@@ -1115,10 +1024,9 @@ async function dexTradingExample() {
|
|
|
1115
1024
|
// ============================================================================
|
|
1116
1025
|
|
|
1117
1026
|
const allAssets = await sdk.getAllSwapUserAssets(sdk.getEthereumAddress());
|
|
1118
|
-
|
|
1119
|
-
console.log('Total assets: ' + allAssets.length);
|
|
1027
|
+
|
|
1120
1028
|
allAssets.forEach(asset => {
|
|
1121
|
-
|
|
1029
|
+
|
|
1122
1030
|
});
|
|
1123
1031
|
|
|
1124
1032
|
// ============================================================================
|
|
@@ -1126,10 +1034,7 @@ async function dexTradingExample() {
|
|
|
1126
1034
|
// ============================================================================
|
|
1127
1035
|
|
|
1128
1036
|
const pool = await sdk.getSwapPoolInfo('GALA', 'GUSDC');
|
|
1129
|
-
|
|
1130
|
-
console.log(' Liquidity: ' + pool.liquidity);
|
|
1131
|
-
console.log(' Available fee tiers: ' + pool.feeTiers.join(', ') + ' bps');
|
|
1132
|
-
console.log(' 24h swaps: ' + pool.swapCount);
|
|
1037
|
+
|
|
1133
1038
|
}
|
|
1134
1039
|
\`\`\`
|
|
1135
1040
|
|
|
@@ -1181,8 +1086,6 @@ async function errorHandlingExample() {
|
|
|
1181
1086
|
slippageToleranceFactor: 0.01
|
|
1182
1087
|
});
|
|
1183
1088
|
|
|
1184
|
-
console.log('Success:', result.transactionId);
|
|
1185
|
-
|
|
1186
1089
|
} catch (error) {
|
|
1187
1090
|
if (error instanceof ValidationError) {
|
|
1188
1091
|
console.error('Invalid input:', error.message);
|
|
@@ -1322,12 +1225,6 @@ async function localCalculationsExample() {
|
|
|
1322
1225
|
type: 'native' // 'native' = GALA amount, 'exact' = token amount
|
|
1323
1226
|
});
|
|
1324
1227
|
|
|
1325
|
-
console.log('LOCAL Buy Quote (instant):');
|
|
1326
|
-
console.log(' Tokens received:', localBuy.amount);
|
|
1327
|
-
console.log(' Transaction fee:', localBuy.transactionFee);
|
|
1328
|
-
console.log(' RBC Fee:', localBuy.reverseBondingCurveFee); // Always "0" for buys
|
|
1329
|
-
console.log(' Gas fee:', localBuy.gasFee);
|
|
1330
|
-
|
|
1331
1228
|
// 2. Sell calculation (local, requires pool details)
|
|
1332
1229
|
const poolDetails = await sdk.fetchPoolDetails('dragnrkti');
|
|
1333
1230
|
|
|
@@ -1341,11 +1238,6 @@ async function localCalculationsExample() {
|
|
|
1341
1238
|
maxFeePortion: poolDetails.reverseBondingCurveMaxFeeFactor || 0
|
|
1342
1239
|
});
|
|
1343
1240
|
|
|
1344
|
-
console.log('LOCAL Sell Quote (instant):');
|
|
1345
|
-
console.log(' GALA received:', localSell.amount);
|
|
1346
|
-
console.log(' RBC Fee:', localSell.reverseBondingCurveFee);
|
|
1347
|
-
console.log(' Transaction fee:', localSell.transactionFee);
|
|
1348
|
-
|
|
1349
1241
|
// ============================================================================
|
|
1350
1242
|
// EXTERNAL CALCULATIONS - Real-time network queries (explicit)
|
|
1351
1243
|
// ============================================================================
|
|
@@ -1357,9 +1249,6 @@ async function localCalculationsExample() {
|
|
|
1357
1249
|
type: 'native'
|
|
1358
1250
|
});
|
|
1359
1251
|
|
|
1360
|
-
console.log('EXTERNAL Buy Quote (network):');
|
|
1361
|
-
console.log(' Tokens received:', externalBuy.amount);
|
|
1362
|
-
|
|
1363
1252
|
// 4. External sell (explicit network call)
|
|
1364
1253
|
const externalSell = await sdk.calculateSellAmountExternal({
|
|
1365
1254
|
tokenName: 'dragnrkti',
|
|
@@ -1367,9 +1256,6 @@ async function localCalculationsExample() {
|
|
|
1367
1256
|
type: 'exact'
|
|
1368
1257
|
});
|
|
1369
1258
|
|
|
1370
|
-
console.log('EXTERNAL Sell Quote (network):');
|
|
1371
|
-
console.log(' GALA received:', externalSell.amount);
|
|
1372
|
-
|
|
1373
1259
|
// ============================================================================
|
|
1374
1260
|
// A/B COMPARISON - Verify local accuracy
|
|
1375
1261
|
// ============================================================================
|
|
@@ -1379,9 +1265,6 @@ async function localCalculationsExample() {
|
|
|
1379
1265
|
const buyDiff = Math.abs(safeParseNumber(localBuy.amount, 0) - safeParseNumber(externalBuy.amount, 0));
|
|
1380
1266
|
const buyPct = (buyDiff / safeParseNumber(externalBuy.amount, 1)) * 100;
|
|
1381
1267
|
|
|
1382
|
-
console.log('Local vs External Accuracy:');
|
|
1383
|
-
console.log(\` Buy difference: \${toBigNumberFixed(buyPct, 4)}% (should be <0.01%)\`);
|
|
1384
|
-
|
|
1385
1268
|
// ============================================================================
|
|
1386
1269
|
// PERFORMANCE BENEFIT - Local is instant
|
|
1387
1270
|
// ============================================================================
|
|
@@ -1444,9 +1327,6 @@ async function analyzePriceHistory() {
|
|
|
1444
1327
|
limit: 50
|
|
1445
1328
|
});
|
|
1446
1329
|
|
|
1447
|
-
console.log(\`Found \${history.snapshots.length} snapshots\`);
|
|
1448
|
-
console.log(\`Total available: \${history.total} (page \${history.page} of \${history.totalPages})\`);
|
|
1449
|
-
|
|
1450
1330
|
// Auto-paginated complete history
|
|
1451
1331
|
const allHistory = await sdk.fetchAllPriceHistory({
|
|
1452
1332
|
tokenId: 'GWETH|Unit|none|none',
|
|
@@ -1461,14 +1341,11 @@ async function analyzePriceHistory() {
|
|
|
1461
1341
|
const variance = prices.reduce((sum, p) => sum + Math.pow(p - avg, 2), 0) / prices.length;
|
|
1462
1342
|
const volatility = Math.sqrt(variance);
|
|
1463
1343
|
|
|
1464
|
-
console.log(\`Average: $\${toBigNumberFixed(avg, 4)}, Volatility: $\${toBigNumberFixed(volatility, 4)}\`);
|
|
1465
|
-
|
|
1466
1344
|
// Data export (CSV)
|
|
1467
1345
|
const csv = ['timestamp,price'].concat(
|
|
1468
1346
|
allHistory.snapshots.map(s => \`\${s.timestamp.toISOString()},\${s.price}\`)
|
|
1469
1347
|
).join('\\n');
|
|
1470
1348
|
|
|
1471
|
-
console.log('CSV export:', csv.split('\\n').slice(0, 3).join('\\n'));
|
|
1472
1349
|
}
|
|
1473
1350
|
\`\`\`
|
|
1474
1351
|
|
|
@@ -1513,15 +1390,6 @@ async function analyzeTokenDetails() {
|
|
|
1513
1390
|
// Fetch token metadata
|
|
1514
1391
|
const details = await sdk.fetchTokenDetails('GUSDC|Unit|none|eth:0x...');
|
|
1515
1392
|
|
|
1516
|
-
console.log('Token Information:');
|
|
1517
|
-
console.log(\` Name: \${details.name}\`);
|
|
1518
|
-
console.log(\` Symbol: \${details.symbol}\`);
|
|
1519
|
-
console.log(\` Decimals: \${details.decimals}\`);
|
|
1520
|
-
console.log(\` Verified: \${details.verified}\`);
|
|
1521
|
-
console.log(\` Trading: \${details.tradingEnabled}\`);
|
|
1522
|
-
console.log(\` Network: \${details.network}\`);
|
|
1523
|
-
console.log(\` Image: \${details.image}\`);
|
|
1524
|
-
|
|
1525
1393
|
// Pre-trading validation
|
|
1526
1394
|
async function validateBeforeTrade(tokenId: string) {
|
|
1527
1395
|
const token = await sdk.fetchTokenDetails(tokenId);
|
|
@@ -1548,7 +1416,7 @@ async function analyzeTokenDetails() {
|
|
|
1548
1416
|
);
|
|
1549
1417
|
|
|
1550
1418
|
const verified = details_list.filter(t => t?.verified).length;
|
|
1551
|
-
|
|
1419
|
+
|
|
1552
1420
|
}
|
|
1553
1421
|
\`\`\`
|
|
1554
1422
|
|
|
@@ -1595,40 +1463,37 @@ async function tokenPricing() {
|
|
|
1595
1463
|
// OPTION 1: SMART ROUTING (Recommended) - Automatic backend selection
|
|
1596
1464
|
// Use tokenId for ANY token (graduated or ungraduated)
|
|
1597
1465
|
// SDK automatically detects and routes to correct backend
|
|
1598
|
-
|
|
1466
|
+
|
|
1599
1467
|
const smartPrice = await sdk.fetchTokenPrice({
|
|
1600
1468
|
tokenId: 'Token|Unit|ANIME|eth:0x...' // Works for ANY token!
|
|
1601
1469
|
});
|
|
1602
|
-
|
|
1470
|
+
|
|
1603
1471
|
// ✅ Handles graduated tokens (DEX) automatically
|
|
1604
1472
|
// ✅ Handles ungraduated tokens (Launchpad) automatically
|
|
1605
1473
|
// ✅ No need to know token status beforehand
|
|
1606
1474
|
|
|
1607
1475
|
// OPTION 2: EXPLICIT DEX PRICING - Graduated tokens only
|
|
1608
1476
|
// Use tokenId directly for DEX tokens
|
|
1609
|
-
|
|
1477
|
+
|
|
1610
1478
|
const dexPrices = await sdk.fetchTokenPrice({
|
|
1611
1479
|
tokenId: 'GALA|Unit|none|none' // Or other DEX token
|
|
1612
1480
|
});
|
|
1613
|
-
console.log(\`DEX Token GALA: $\${dexPrices}\`);
|
|
1614
1481
|
|
|
1615
1482
|
// OPTION 3: TOKEN NAME PRICING - For launchpad tokens by name
|
|
1616
1483
|
// Use tokenName for simple lookup of launchpad tokens
|
|
1617
|
-
|
|
1484
|
+
|
|
1618
1485
|
const launchpadPrice = await sdk.fetchTokenPrice({ tokenName: 'anime' });
|
|
1619
|
-
console.log(\`Launchpad token anime: $\${launchpadPrice.price}\`);
|
|
1620
1486
|
|
|
1621
1487
|
// ADVANCED: The smart router handles fallback automatically!
|
|
1622
1488
|
// No need for manual fallback - fetchTokenPrice with tokenId detects
|
|
1623
1489
|
// ungraduated tokens and automatically falls back to launchpad pricing
|
|
1624
|
-
|
|
1490
|
+
|
|
1625
1491
|
const autoPrice = await sdk.fetchTokenPrice({
|
|
1626
1492
|
tokenId: 'Token|Unit|ANIME|eth:0x...' // Auto-fallback if ungraduated
|
|
1627
1493
|
});
|
|
1628
|
-
console.log(\`Auto-routed price: $\${autoPrice.price}\`);
|
|
1629
1494
|
|
|
1630
1495
|
// USECASE: Price comparison and discovery
|
|
1631
|
-
|
|
1496
|
+
|
|
1632
1497
|
async function comparePrices(tokenName: string) {
|
|
1633
1498
|
const launchpadPrice = await sdk.fetchTokenPrice({ tokenName });
|
|
1634
1499
|
|
|
@@ -1639,10 +1504,10 @@ async function tokenPricing() {
|
|
|
1639
1504
|
const dexPrice = await sdk.fetchTokenPrice({
|
|
1640
1505
|
tokenId: \`Token|Unit|\${tokenName.toUpperCase()}|eth:0x...\`
|
|
1641
1506
|
});
|
|
1642
|
-
|
|
1507
|
+
|
|
1643
1508
|
return { launchpadPrice, dexPrice, graduated: true };
|
|
1644
1509
|
} else {
|
|
1645
|
-
|
|
1510
|
+
|
|
1646
1511
|
return { launchpadPrice, graduated: false };
|
|
1647
1512
|
}
|
|
1648
1513
|
}
|
|
@@ -1692,7 +1557,7 @@ async function safePriceQuery(tokenId: string) {
|
|
|
1692
1557
|
return await sdk.fetchTokenPrice({ tokenId });
|
|
1693
1558
|
} catch (error) {
|
|
1694
1559
|
if (error.message.includes('not found')) {
|
|
1695
|
-
|
|
1560
|
+
|
|
1696
1561
|
// Could try fallback to launchpad pricing here
|
|
1697
1562
|
}
|
|
1698
1563
|
throw error;
|
|
@@ -1728,12 +1593,9 @@ async function manageUserProfiles() {
|
|
|
1728
1593
|
|
|
1729
1594
|
// Fetch current user profile
|
|
1730
1595
|
const myProfile = await sdk.fetchProfile();
|
|
1731
|
-
console.log(\`Name: \${myProfile.fullName}\`);
|
|
1732
|
-
console.log(\`Avatar: \${myProfile.profileImage}\`);
|
|
1733
1596
|
|
|
1734
1597
|
// Fetch another user's profile
|
|
1735
1598
|
const other = await sdk.fetchProfile('eth|0x...');
|
|
1736
|
-
console.log(\`Other user: \${other.fullName}\`);
|
|
1737
1599
|
|
|
1738
1600
|
// Update profile
|
|
1739
1601
|
const updated = await sdk.updateProfile({
|
|
@@ -1742,8 +1604,6 @@ async function manageUserProfiles() {
|
|
|
1742
1604
|
address: sdk.getAddress()
|
|
1743
1605
|
});
|
|
1744
1606
|
|
|
1745
|
-
console.log(\`Updated: \${updated.fullName}\`);
|
|
1746
|
-
|
|
1747
1607
|
// Upload profile image (Node.js only)
|
|
1748
1608
|
const imgResult = await sdk.uploadProfileImage({
|
|
1749
1609
|
imagePath: '/path/to/avatar.png'
|
|
@@ -1790,7 +1650,6 @@ async function manageUserProfiles() {
|
|
|
1790
1650
|
addresses.map(addr => sdk.fetchProfile(addr).catch(() => null))
|
|
1791
1651
|
);
|
|
1792
1652
|
|
|
1793
|
-
console.log('Profiles:', profiles.filter(p => p).map(p => p.fullName));
|
|
1794
1653
|
}
|
|
1795
1654
|
\`\`\`
|
|
1796
1655
|
|
|
@@ -1838,19 +1697,13 @@ async function analyzeTokenDistribution() {
|
|
|
1838
1697
|
// Fetch complete token distribution (all holders, non-paginated)
|
|
1839
1698
|
const distribution = await sdk.fetchTokenDistribution('anime');
|
|
1840
1699
|
|
|
1841
|
-
console.log(\`Total holders: \${distribution.totalHolders}\`);
|
|
1842
|
-
console.log(\`Total supply: \${distribution.totalSupply}\`);
|
|
1843
|
-
console.log(\`Last updated: \${distribution.lastUpdated.toISOString()}\`);
|
|
1844
|
-
|
|
1845
1700
|
// Analyze top holders
|
|
1846
1701
|
// Use compareAmounts for precise balance sorting with large numbers
|
|
1847
1702
|
distribution.holders
|
|
1848
1703
|
.sort((a, b) => compareAmounts(b.balance, a.balance) > 0 ? 1 : -1)
|
|
1849
1704
|
.slice(0, 5)
|
|
1850
1705
|
.forEach((holder, index) => {
|
|
1851
|
-
|
|
1852
|
-
console.log(\` Balance: \${holder.balance}\`);
|
|
1853
|
-
console.log(\` Ownership: \${toBigNumberFixed(holder.percentage, 2)}%\`);
|
|
1706
|
+
|
|
1854
1707
|
});
|
|
1855
1708
|
|
|
1856
1709
|
// Check concentration risk (e.g., top 5 holders own >80%)
|
|
@@ -1859,24 +1712,20 @@ async function analyzeTokenDistribution() {
|
|
|
1859
1712
|
.slice(0, 5)
|
|
1860
1713
|
.reduce((sum, holder) => sum + holder.percentage, 0);
|
|
1861
1714
|
|
|
1862
|
-
console.log(\`Top 5 holders control: \${toBigNumberFixed(top5Ownership, 2)}%\`);
|
|
1863
|
-
|
|
1864
1715
|
// Find specific holder
|
|
1865
1716
|
const myAddress = sdk.getAddress();
|
|
1866
1717
|
const myHolding = distribution.holders.find(h => h.address === myAddress);
|
|
1867
1718
|
|
|
1868
1719
|
if (myHolding) {
|
|
1869
|
-
|
|
1870
|
-
console.log(\`Your balance: \${myHolding.balance}\`);
|
|
1720
|
+
|
|
1871
1721
|
}
|
|
1872
1722
|
|
|
1873
1723
|
// Calculate concentration metrics
|
|
1874
1724
|
const giniCoefficient = calculateGini(distribution.holders);
|
|
1875
|
-
console.log(\`Gini coefficient: \${toBigNumberFixed(giniCoefficient, 4)}\`);
|
|
1876
1725
|
|
|
1877
1726
|
// Count whales (holders with >5%)
|
|
1878
1727
|
const whales = distribution.holders.filter(h => h.percentage > 5);
|
|
1879
|
-
|
|
1728
|
+
|
|
1880
1729
|
}
|
|
1881
1730
|
|
|
1882
1731
|
// Helper: Calculate Gini coefficient for wealth distribution
|
|
@@ -1941,15 +1790,13 @@ async function getUserCard() {
|
|
|
1941
1790
|
// }
|
|
1942
1791
|
|
|
1943
1792
|
if (holderContext.quantity !== null) {
|
|
1944
|
-
|
|
1945
|
-
console.log(\`Holder Tier: \${holderContext.holderTier?.tierName}\`);
|
|
1946
|
-
console.log(\`Owns: \${holderContext.percentage ? toBigNumberFixed(holderContext.percentage, 4) : 'N/A'}%\`);
|
|
1793
|
+
|
|
1947
1794
|
} else {
|
|
1948
|
-
|
|
1795
|
+
|
|
1949
1796
|
}
|
|
1950
1797
|
|
|
1951
1798
|
if (holderContext.isCreator) {
|
|
1952
|
-
|
|
1799
|
+
|
|
1953
1800
|
}
|
|
1954
1801
|
}
|
|
1955
1802
|
\`\`\`
|
|
@@ -2037,11 +1884,9 @@ Use \`getAllSwapUserLiquidityPositions()\` to fetch all positions without manual
|
|
|
2037
1884
|
// Fetch ALL positions automatically (handles pagination internally)
|
|
2038
1885
|
const allPositions = await sdk.getAllSwapUserLiquidityPositions(ownerAddress);
|
|
2039
1886
|
|
|
2040
|
-
console.log(\`Total positions: \${allPositions.length}\`);
|
|
2041
1887
|
allPositions.forEach(position => {
|
|
2042
1888
|
const fees = position.fees0 + position.fees1; // Total accumulated fees
|
|
2043
|
-
|
|
2044
|
-
console.log(\`Accumulated fees: \${fees}\`);
|
|
1889
|
+
|
|
2045
1890
|
});
|
|
2046
1891
|
\`\`\`
|
|
2047
1892
|
|
|
@@ -2080,9 +1925,7 @@ async function advancedDexAnalysis() {
|
|
|
2080
1925
|
const composite = await sdk.fetchCompositePoolData('anime');
|
|
2081
1926
|
|
|
2082
1927
|
if (composite.isGraduated) {
|
|
2083
|
-
|
|
2084
|
-
console.log('DEX Pool TVL:', composite.dexPool.tvl);
|
|
2085
|
-
console.log('DEX 24h Volume:', composite.dexPool.volume1d);
|
|
1928
|
+
|
|
2086
1929
|
}
|
|
2087
1930
|
|
|
2088
1931
|
// Step 2: Compare local vs external price calculations
|
|
@@ -2098,9 +1941,6 @@ async function advancedDexAnalysis() {
|
|
|
2098
1941
|
'100'
|
|
2099
1942
|
);
|
|
2100
1943
|
|
|
2101
|
-
console.log('Local calculation:', localQuote.outputAmount);
|
|
2102
|
-
console.log('External API:', externalQuote.outputAmount);
|
|
2103
|
-
console.log('Price difference:',
|
|
2104
1944
|
Math.abs(safeParseFloat(localQuote.outputAmount, 0) - safeParseFloat(externalQuote.outputAmount, 0))
|
|
2105
1945
|
);
|
|
2106
1946
|
|
|
@@ -2111,8 +1951,6 @@ async function advancedDexAnalysis() {
|
|
|
2111
1951
|
'100'
|
|
2112
1952
|
);
|
|
2113
1953
|
|
|
2114
|
-
console.log('Best route:', bestQuote.route); // 'local' or 'external'
|
|
2115
|
-
console.log('Best price:', bestQuote.outputAmount);
|
|
2116
1954
|
}
|
|
2117
1955
|
\`\`\`
|
|
2118
1956
|
|
|
@@ -2150,20 +1988,14 @@ async function tradingAnalytics() {
|
|
|
2150
1988
|
page: 1
|
|
2151
1989
|
});
|
|
2152
1990
|
|
|
2153
|
-
console.log(\`Analyzing \${trades.total} trades\`);
|
|
2154
|
-
|
|
2155
1991
|
// Calculate analytics
|
|
2156
1992
|
const totalVolume = trades.trades.reduce((sum, t) => sum + safeParseFloat(t.galaAmount, 0), 0);
|
|
2157
1993
|
const averageTradeSize = totalVolume / trades.trades.length;
|
|
2158
1994
|
const whaleTrades = trades.trades.filter(t => safeParseFloat(t.galaAmount, 0) > 1000);
|
|
2159
1995
|
|
|
2160
|
-
console.log(\`Total volume: \${totalVolume} GALA\`);
|
|
2161
|
-
console.log(\`Average trade size: \${averageTradeSize} GALA\`);
|
|
2162
|
-
console.log(\`Whale trades (>1000 GALA): \${whaleTrades.length}\`);
|
|
2163
|
-
|
|
2164
1996
|
// Most recent trades
|
|
2165
1997
|
trades.trades.slice(0, 10).forEach(trade => {
|
|
2166
|
-
|
|
1998
|
+
|
|
2167
1999
|
});
|
|
2168
2000
|
}
|
|
2169
2001
|
|
|
@@ -2173,13 +2005,11 @@ async function queryTradesV1() {
|
|
|
2173
2005
|
|
|
2174
2006
|
// Query all trades for a specific token
|
|
2175
2007
|
const { trades, meta } = await sdk.getV1Trades({ tokenName: 'anime' });
|
|
2176
|
-
console.log(\`Found \${meta.totalItems} trades for anime\`);
|
|
2177
2008
|
|
|
2178
2009
|
// Query all trades by a specific user
|
|
2179
2010
|
const userTrades = await sdk.getV1Trades({
|
|
2180
2011
|
userAddress: 'eth|1234567890abcdef...'
|
|
2181
2012
|
});
|
|
2182
|
-
console.log(\`User has \${userTrades.meta.totalItems} trades across all tokens\`);
|
|
2183
2013
|
|
|
2184
2014
|
// Query a user's trades on a specific token with pagination
|
|
2185
2015
|
const filteredTrades = await sdk.getV1Trades({
|
|
@@ -2188,11 +2018,10 @@ async function queryTradesV1() {
|
|
|
2188
2018
|
page: 2,
|
|
2189
2019
|
limit: 20
|
|
2190
2020
|
});
|
|
2191
|
-
console.log(\`Page \${filteredTrades.meta.currentPage} of \${filteredTrades.meta.totalPages}\`);
|
|
2192
2021
|
|
|
2193
2022
|
// Analyze trade types
|
|
2194
2023
|
filteredTrades.trades.forEach(trade => {
|
|
2195
|
-
|
|
2024
|
+
|
|
2196
2025
|
});
|
|
2197
2026
|
}
|
|
2198
2027
|
\`\`\`
|
|
@@ -2225,12 +2054,11 @@ Essential helper methods for development, debugging, and special use cases.
|
|
|
2225
2054
|
\`\`\`typescript
|
|
2226
2055
|
// Get current GALA price in USD
|
|
2227
2056
|
const galaPrice = await sdk.fetchGalaPrice();
|
|
2228
|
-
console.log(\`GALA: $\${galaPrice}\`);
|
|
2229
2057
|
|
|
2230
2058
|
// Get token supply metrics from GalaChain
|
|
2231
2059
|
const supplies = await sdk.fetchTokenClassesWithSupply();
|
|
2232
2060
|
supplies.forEach(token => {
|
|
2233
|
-
|
|
2061
|
+
|
|
2234
2062
|
});
|
|
2235
2063
|
\`\`\`
|
|
2236
2064
|
|
|
@@ -2239,7 +2067,7 @@ supplies.forEach(token => {
|
|
|
2239
2067
|
\`\`\`typescript
|
|
2240
2068
|
// Check transaction status
|
|
2241
2069
|
const status = await sdk.getBundlerTransactionResult('tx-id-123');
|
|
2242
|
-
|
|
2070
|
+
|
|
2243
2071
|
\`\`\`
|
|
2244
2072
|
|
|
2245
2073
|
### Advanced Swap Queries
|
|
@@ -2247,11 +2075,9 @@ console.log('Status:', status.status); // 'pending' | 'success' | 'failed'
|
|
|
2247
2075
|
\`\`\`typescript
|
|
2248
2076
|
// Get pool price without full quote
|
|
2249
2077
|
const price = await sdk.getSwapPoolPrice('GALA|Unit|none|none', 'GUSDC|Unit|none|none');
|
|
2250
|
-
console.log(\`Pool price: \${price}\`);
|
|
2251
2078
|
|
|
2252
2079
|
// Auto-paginated asset fetch
|
|
2253
2080
|
const allAssets = await sdk.getAllSwapUserAssets('eth|0x...', { limit: 100 });
|
|
2254
|
-
console.log(\`Total assets: \${allAssets.length}\`);
|
|
2255
2081
|
|
|
2256
2082
|
// Direct position lookup (if you have compound key)
|
|
2257
2083
|
const position = await sdk.fetchSwapPositionDirect({
|
|
@@ -2267,7 +2093,7 @@ const position = await sdk.fetchSwapPositionDirect({
|
|
|
2267
2093
|
\`\`\`typescript
|
|
2268
2094
|
// Calculate initial buy amount for token launch
|
|
2269
2095
|
const buyAmount = await sdk.calculateInitialBuyAmount('100');
|
|
2270
|
-
|
|
2096
|
+
|
|
2271
2097
|
\`\`\`
|
|
2272
2098
|
|
|
2273
2099
|
### SDK Cleanup
|
|
@@ -2285,7 +2111,6 @@ const tradeResult = await sdk.buy({ tokenName, amount, type: 'native', expectedA
|
|
|
2285
2111
|
|
|
2286
2112
|
// Poll for completion
|
|
2287
2113
|
const status = await sdk.getBundlerTransactionResult(tradeResult.transactionId);
|
|
2288
|
-
console.log('Status:', status.status); // PENDING, PROCESSING, COMPLETED, FAILED
|
|
2289
2114
|
|
|
2290
2115
|
// Wait with polling
|
|
2291
2116
|
let attempts = 0;
|
|
@@ -2334,22 +2159,21 @@ async function manageDexSeasons() {
|
|
|
2334
2159
|
|
|
2335
2160
|
// Display season information
|
|
2336
2161
|
seasons.forEach(season => {
|
|
2337
|
-
|
|
2338
|
-
console.log(\`Duration: \${season.start} to \${season.end}\`);
|
|
2162
|
+
|
|
2339
2163
|
});
|
|
2340
2164
|
|
|
2341
2165
|
// Get current season
|
|
2342
2166
|
const activeSeason = await sdk.fetchCurrentDexSeason();
|
|
2343
2167
|
if (activeSeason) {
|
|
2344
|
-
|
|
2168
|
+
|
|
2345
2169
|
} else {
|
|
2346
|
-
|
|
2170
|
+
|
|
2347
2171
|
}
|
|
2348
2172
|
|
|
2349
2173
|
// Verify season is active
|
|
2350
2174
|
const now = new Date();
|
|
2351
2175
|
const isActive = activeSeason && now >= activeSeason.start && now <= activeSeason.end;
|
|
2352
|
-
|
|
2176
|
+
|
|
2353
2177
|
}
|
|
2354
2178
|
\`\`\`
|
|
2355
2179
|
|
|
@@ -2376,29 +2200,26 @@ async function viewLeaderboards() {
|
|
|
2376
2200
|
const leaderboard = await sdk.fetchDexLeaderboardBySeasonId(4);
|
|
2377
2201
|
|
|
2378
2202
|
// Display top 10 ranked players
|
|
2379
|
-
|
|
2203
|
+
|
|
2380
2204
|
leaderboard.entries.slice(0, 10).forEach(entry => {
|
|
2381
|
-
|
|
2382
|
-
console.log(\` XP: \${entry.totalXp} (Liquidity: \${entry.liquidityXp}, Trading: \${entry.tradingXp})\`);
|
|
2205
|
+
|
|
2383
2206
|
});
|
|
2384
2207
|
|
|
2385
2208
|
// Analyze mastery titles
|
|
2386
2209
|
const topPlayer = leaderboard.entries[0];
|
|
2387
2210
|
topPlayer.masteryTitles.forEach(title => {
|
|
2388
|
-
|
|
2211
|
+
|
|
2389
2212
|
});
|
|
2390
2213
|
|
|
2391
2214
|
// Option 2: Get current leaderboard (convenience method)
|
|
2392
2215
|
const currentBoard = await sdk.fetchCurrentDexLeaderboard();
|
|
2393
2216
|
|
|
2394
2217
|
if (currentBoard) {
|
|
2395
|
-
console.log(\`Season \${currentBoard.seasonId} is active\`);
|
|
2396
|
-
console.log(\`Total participants: \${currentBoard.entries.length}\`);
|
|
2397
2218
|
|
|
2398
2219
|
// Top 3 performers
|
|
2399
2220
|
const topThree = currentBoard.entries.slice(0, 3);
|
|
2400
2221
|
topThree.forEach(entry => {
|
|
2401
|
-
|
|
2222
|
+
|
|
2402
2223
|
});
|
|
2403
2224
|
}
|
|
2404
2225
|
}
|
|
@@ -2426,24 +2247,17 @@ async function analyzeVolumeTrends() {
|
|
|
2426
2247
|
const summary = await sdk.fetchDexAggregatedVolumeSummary();
|
|
2427
2248
|
|
|
2428
2249
|
// Display volumes
|
|
2429
|
-
console.log(\`1-Day Volume: $\${summary.volume1d.toLocaleString()}\`);
|
|
2430
|
-
console.log(\`7-Day Volume: $\${summary.volume7d.toLocaleString()}\`);
|
|
2431
|
-
console.log(\`30-Day Volume: $\${summary.volume30d.toLocaleString()}\`);
|
|
2432
2250
|
|
|
2433
2251
|
// Analyze trends
|
|
2434
2252
|
const trend1d = summary.volume1dDelta > 0 ? '📈 UP' : '📉 DOWN';
|
|
2435
2253
|
const trend7d = summary.volume7dDelta > 0 ? '📈 UP' : '📉 DOWN';
|
|
2436
2254
|
const trend30d = summary.volume30dDelta > 0 ? '📈 UP' : '📉 DOWN';
|
|
2437
2255
|
|
|
2438
|
-
console.log(\`1-Day Trend: \${trend1d} (\${toBigNumberFixed(summary.volume1dDelta * 100, 2)}%)\`);
|
|
2439
|
-
console.log(\`7-Day Trend: \${trend7d} (\${toBigNumberFixed(summary.volume7dDelta * 100, 2)}%)\`);
|
|
2440
|
-
console.log(\`30-Day Trend: \${trend30d} (\${toBigNumberFixed(summary.volume30dDelta * 100, 2)}%)\`);
|
|
2441
|
-
|
|
2442
2256
|
// Growth analysis
|
|
2443
2257
|
if (summary.volume30dDelta > 0.1) {
|
|
2444
|
-
|
|
2258
|
+
|
|
2445
2259
|
} else if (summary.volume30dDelta < -0.1) {
|
|
2446
|
-
|
|
2260
|
+
|
|
2447
2261
|
}
|
|
2448
2262
|
}
|
|
2449
2263
|
\`\`\`
|
|
@@ -2468,26 +2282,23 @@ async function queryDexPools() {
|
|
|
2468
2282
|
// Option 1: Fetch pools with pagination
|
|
2469
2283
|
const pools = await sdk.fetchDexPools({
|
|
2470
2284
|
search: 'GALA',
|
|
2471
|
-
sortBy: '
|
|
2285
|
+
sortBy: 'TVL', // Sort by: TVL, volume30d, volume1d
|
|
2472
2286
|
limit: 20,
|
|
2473
2287
|
page: 1
|
|
2474
2288
|
});
|
|
2475
2289
|
|
|
2476
|
-
console.log(\`Found \${pools.total} pools, page \${pools.page} of \${pools.totalPages}\`);
|
|
2477
2290
|
pools.pools.forEach(pool => {
|
|
2478
|
-
|
|
2291
|
+
|
|
2479
2292
|
});
|
|
2480
2293
|
|
|
2481
2294
|
// Option 2: Fetch ALL pools automatically (handles pagination)
|
|
2482
2295
|
const allPools = await sdk.fetchAllDexPools({
|
|
2483
|
-
sortBy: '
|
|
2296
|
+
sortBy: 'TVL'
|
|
2484
2297
|
});
|
|
2485
2298
|
|
|
2486
|
-
console.log(\`Total pools: \${allPools.pools.length}\`);
|
|
2487
|
-
|
|
2488
2299
|
// Analyze pool metrics
|
|
2489
|
-
const avgTvl = allPools.pools.reduce((sum, p) => sum + safeParseFloat(p.
|
|
2490
|
-
|
|
2300
|
+
const avgTvl = allPools.pools.reduce((sum, p) => sum + safeParseFloat(p.TVL, 0), 0) / allPools.pools.length;
|
|
2301
|
+
|
|
2491
2302
|
}
|
|
2492
2303
|
\`\`\`
|
|
2493
2304
|
|
|
@@ -2530,10 +2341,10 @@ async function monitorTokenStatus() {
|
|
|
2530
2341
|
const isGraduated = await sdk.isTokenGraduated('anime');
|
|
2531
2342
|
|
|
2532
2343
|
if (isGraduated) {
|
|
2533
|
-
|
|
2344
|
+
|
|
2534
2345
|
// Use DEX trading methods: executeSwap(), getSwapQuoteExactInput(), etc.
|
|
2535
2346
|
} else {
|
|
2536
|
-
|
|
2347
|
+
|
|
2537
2348
|
// Use bonding curve methods: buy(), sell(), calculateBuyAmount(), etc.
|
|
2538
2349
|
}
|
|
2539
2350
|
|
|
@@ -2543,12 +2354,6 @@ async function monitorTokenStatus() {
|
|
|
2543
2354
|
|
|
2544
2355
|
// Set up listener for new DEX pools
|
|
2545
2356
|
const cleanupDexPool = sdk.onDexPoolCreation((poolData) => {
|
|
2546
|
-
console.log('New DEX pool created!');
|
|
2547
|
-
console.log(\` Token: \${poolData.tokenName}\`);
|
|
2548
|
-
console.log(\` Token0: \${poolData.token0}\`);
|
|
2549
|
-
console.log(\` Token1: \${poolData.token1}\`);
|
|
2550
|
-
console.log(\` Fee Tier: \${poolData.feeTier}\`);
|
|
2551
|
-
console.log(\` Initial TVL: \${poolData.tvl}\`);
|
|
2552
2357
|
|
|
2553
2358
|
// Take action on new pool
|
|
2554
2359
|
// Example: Automatically provide liquidity or execute arbitrage
|
|
@@ -2560,12 +2365,6 @@ async function monitorTokenStatus() {
|
|
|
2560
2365
|
|
|
2561
2366
|
// Set up listener for new token launches
|
|
2562
2367
|
const cleanupTokenCreation = sdk.onLaunchpadTokenCreation((tokenData) => {
|
|
2563
|
-
console.log('New token launched!');
|
|
2564
|
-
console.log(\` Name: \${tokenData.tokenName}\`);
|
|
2565
|
-
console.log(\` Symbol: \${tokenData.tokenSymbol}\`);
|
|
2566
|
-
console.log(\` Creator: \${tokenData.creator}\`);
|
|
2567
|
-
console.log(\` Max Supply: \${tokenData.maxSupply}\`);
|
|
2568
|
-
console.log(\` Base Price: \${tokenData.basePrice}\`);
|
|
2569
2368
|
|
|
2570
2369
|
// Take action on new token
|
|
2571
2370
|
// Example: Automatically buy early or analyze opportunity
|
|
@@ -2578,7 +2377,6 @@ async function monitorTokenStatus() {
|
|
|
2578
2377
|
async function autoTrade() {
|
|
2579
2378
|
// Monitor new tokens
|
|
2580
2379
|
sdk.onLaunchpadTokenCreation(async (token) => {
|
|
2581
|
-
console.log(\`New token: \${token.tokenName}\`);
|
|
2582
2380
|
|
|
2583
2381
|
// Wait for graduation
|
|
2584
2382
|
const checkGraduation = setInterval(async () => {
|
|
@@ -2586,27 +2384,25 @@ async function monitorTokenStatus() {
|
|
|
2586
2384
|
|
|
2587
2385
|
if (graduated) {
|
|
2588
2386
|
clearInterval(checkGraduation);
|
|
2589
|
-
console.log(\`\${token.tokenName} graduated! Switching to DEX trading.\`);
|
|
2590
2387
|
|
|
2591
2388
|
// Now use DEX methods instead of bonding curve
|
|
2592
2389
|
const quote = await sdk.getSwapQuoteExactInput('GALA', token.tokenName, '100');
|
|
2593
|
-
|
|
2390
|
+
|
|
2594
2391
|
}
|
|
2595
2392
|
}, 60000); // Check every minute
|
|
2596
2393
|
});
|
|
2597
2394
|
|
|
2598
2395
|
// Monitor new DEX pools
|
|
2599
2396
|
sdk.onDexPoolCreation(async (pool) => {
|
|
2600
|
-
console.log(\`New pool: \${pool.tokenName}\`);
|
|
2601
2397
|
|
|
2602
2398
|
// Analyze liquidity opportunity
|
|
2603
2399
|
const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);
|
|
2604
|
-
|
|
2400
|
+
|
|
2605
2401
|
});
|
|
2606
2402
|
}
|
|
2607
2403
|
|
|
2608
2404
|
// Keep process running
|
|
2609
|
-
|
|
2405
|
+
|
|
2610
2406
|
await new Promise(() => {}); // Run forever
|
|
2611
2407
|
|
|
2612
2408
|
// Cleanup when done
|
|
@@ -2623,7 +2419,7 @@ async function monitorTokenStatus() {
|
|
|
2623
2419
|
- **Price Discovery**: Track token lifecycle from launch to DEX
|
|
2624
2420
|
|
|
2625
2421
|
**Event Data:**
|
|
2626
|
-
- **DEX Pool Creation**: tokenName, token0, token1, feeTier,
|
|
2422
|
+
- **DEX Pool Creation**: tokenName, token0, token1, feeTier, TVL, timestamp
|
|
2627
2423
|
- **Token Launch**: tokenName, tokenSymbol, creator, maxSupply, basePrice, timestamp
|
|
2628
2424
|
|
|
2629
2425
|
**MCP Tool Equivalents:**
|
|
@@ -2663,11 +2459,9 @@ async function sdkUtilities() {
|
|
|
2663
2459
|
|
|
2664
2460
|
// Get GalaChain address (eth|0x... format)
|
|
2665
2461
|
const galaAddress = sdk.getAddress();
|
|
2666
|
-
console.log(\`GalaChain address: \${galaAddress}\`); // "eth|0x1234..."
|
|
2667
2462
|
|
|
2668
2463
|
// Get Ethereum address (0x... format)
|
|
2669
2464
|
const ethAddress = sdk.getEthereumAddress();
|
|
2670
|
-
console.log(\`Ethereum address: \${ethAddress}\`); // "0x1234..."
|
|
2671
2465
|
|
|
2672
2466
|
// ============================================================================
|
|
2673
2467
|
// WALLET MANAGEMENT - Check and update wallet
|
|
@@ -2675,18 +2469,16 @@ async function sdkUtilities() {
|
|
|
2675
2469
|
|
|
2676
2470
|
// Check if SDK has wallet configured
|
|
2677
2471
|
if (sdk.hasWallet()) {
|
|
2678
|
-
console.log('Wallet configured - can execute trades');
|
|
2679
2472
|
|
|
2680
2473
|
// Get wallet instance (for advanced use)
|
|
2681
2474
|
const wallet = sdk.getWallet();
|
|
2682
|
-
|
|
2475
|
+
|
|
2683
2476
|
} else {
|
|
2684
|
-
|
|
2477
|
+
|
|
2685
2478
|
}
|
|
2686
2479
|
|
|
2687
2480
|
// Update wallet at runtime
|
|
2688
2481
|
sdk.setWallet('new-private-key');
|
|
2689
|
-
console.log(\`New address: \${sdk.getAddress()}\`);
|
|
2690
2482
|
|
|
2691
2483
|
// ============================================================================
|
|
2692
2484
|
// CONFIGURATION ACCESS - Get SDK config
|
|
@@ -2694,10 +2486,6 @@ async function sdkUtilities() {
|
|
|
2694
2486
|
|
|
2695
2487
|
// Get SDK configuration
|
|
2696
2488
|
const config = sdk.getConfig();
|
|
2697
|
-
console.log(\`Base URL: \${config.baseUrl}\`);
|
|
2698
|
-
console.log(\`Environment: \${config.env}\`);
|
|
2699
|
-
console.log(\`Debug: \${config.debug}\`);
|
|
2700
|
-
console.log(\`Timeout: \${config.timeout}ms\`);
|
|
2701
2489
|
|
|
2702
2490
|
// ============================================================================
|
|
2703
2491
|
// VERSION INFORMATION - Get SDK version
|
|
@@ -2705,7 +2493,6 @@ async function sdkUtilities() {
|
|
|
2705
2493
|
|
|
2706
2494
|
// Get SDK version
|
|
2707
2495
|
const version = sdk.getVersion();
|
|
2708
|
-
console.log(\`SDK Version: \${version}\`); // "4.0.4-beta.0"
|
|
2709
2496
|
|
|
2710
2497
|
// ============================================================================
|
|
2711
2498
|
// URL GENERATION - Get frontend URLs for tokens
|
|
@@ -2713,7 +2500,7 @@ async function sdkUtilities() {
|
|
|
2713
2500
|
|
|
2714
2501
|
// Generate frontend URL for token
|
|
2715
2502
|
const url = sdk.getUrlByTokenName('anime');
|
|
2716
|
-
|
|
2503
|
+
|
|
2717
2504
|
// "https://launchpad.gala.com/token/anime" (production)
|
|
2718
2505
|
// "https://lpad-dev1.defi.gala.com/token/anime" (development)
|
|
2719
2506
|
|
|
@@ -2725,7 +2512,6 @@ async function sdkUtilities() {
|
|
|
2725
2512
|
});
|
|
2726
2513
|
|
|
2727
2514
|
const tokenUrl = sdk.getUrlByTokenName('mytoken');
|
|
2728
|
-
console.log(\`Share your token: \${tokenUrl}\`);
|
|
2729
2515
|
|
|
2730
2516
|
// ============================================================================
|
|
2731
2517
|
// MULTI-WALLET SCENARIO - Check multiple addresses
|
|
@@ -2735,15 +2521,10 @@ async function sdkUtilities() {
|
|
|
2735
2521
|
const wallet1 = createLaunchpadSDK({ wallet: 'private-key-1' });
|
|
2736
2522
|
const wallet2 = createLaunchpadSDK({ wallet: 'private-key-2' });
|
|
2737
2523
|
|
|
2738
|
-
console.log(\`Wallet 1: \${wallet1.getAddress()}\`);
|
|
2739
|
-
console.log(\`Wallet 2: \${wallet2.getAddress()}\`);
|
|
2740
|
-
|
|
2741
2524
|
// Compare balances
|
|
2742
2525
|
const balance1 = await wallet1.fetchGalaBalance();
|
|
2743
2526
|
const balance2 = await wallet2.fetchGalaBalance();
|
|
2744
2527
|
|
|
2745
|
-
console.log(\`Wallet 1 balance: \${balance1.balance}\`);
|
|
2746
|
-
console.log(\`Wallet 2 balance: \${balance2.balance}\`);
|
|
2747
2528
|
}
|
|
2748
2529
|
|
|
2749
2530
|
// ============================================================================
|
|
@@ -2754,11 +2535,8 @@ async function sdkUtilities() {
|
|
|
2754
2535
|
// Create SDK without wallet (read-only mode)
|
|
2755
2536
|
const readOnlySdk = createLaunchpadSDK();
|
|
2756
2537
|
|
|
2757
|
-
console.log(\`Has wallet: \${readOnlySdk.hasWallet()}\`); // false
|
|
2758
|
-
|
|
2759
2538
|
// Can fetch public data
|
|
2760
2539
|
const pools = await readOnlySdk.fetchPools({ type: 'recent', limit: 10 });
|
|
2761
|
-
console.log(\`Found \${pools.total} pools\`);
|
|
2762
2540
|
|
|
2763
2541
|
// Cannot execute trades (will throw error)
|
|
2764
2542
|
try {
|
|
@@ -2779,17 +2557,12 @@ async function sdkUtilities() {
|
|
|
2779
2557
|
config: { env: 'production' }
|
|
2780
2558
|
});
|
|
2781
2559
|
|
|
2782
|
-
console.log(\`Prod config: \${prodSdk.getConfig().baseUrl}\`);
|
|
2783
|
-
console.log(\`Prod URL: \${prodSdk.getUrlByTokenName('anime')}\`);
|
|
2784
|
-
|
|
2785
2560
|
// Development SDK
|
|
2786
2561
|
const devSdk = createLaunchpadSDK({
|
|
2787
2562
|
wallet: 'your-private-key',
|
|
2788
2563
|
config: { env: 'development' }
|
|
2789
2564
|
});
|
|
2790
2565
|
|
|
2791
|
-
console.log(\`Dev config: \${devSdk.getConfig().baseUrl}\`);
|
|
2792
|
-
console.log(\`Dev URL: \${devSdk.getUrlByTokenName('anime')}\`);
|
|
2793
2566
|
}
|
|
2794
2567
|
}
|
|
2795
2568
|
\`\`\`
|
|
@@ -2844,30 +2617,17 @@ async function subscribeToEvents() {
|
|
|
2844
2617
|
|
|
2845
2618
|
// Subscribe to liquidity additions
|
|
2846
2619
|
const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {
|
|
2847
|
-
|
|
2848
|
-
console.log(\` Pool: \${event.token0}-\${event.token1}\`);
|
|
2849
|
-
console.log(\` Amount0: \${event.amount0}\`);
|
|
2850
|
-
console.log(\` Amount1: \${event.amount1}\`);
|
|
2851
|
-
console.log(\` Owner: \${event.owner}\`);
|
|
2852
|
-
console.log(\` Position ID: \${event.positionId}\`);
|
|
2620
|
+
|
|
2853
2621
|
});
|
|
2854
2622
|
|
|
2855
2623
|
// Subscribe to liquidity changes (compound events)
|
|
2856
2624
|
const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {
|
|
2857
|
-
|
|
2858
|
-
console.log(\` Type: \${event.type}\`); // 'added', 'removed', 'modified'
|
|
2859
|
-
console.log(\` Pool: \${event.token0}-\${event.token1}\`);
|
|
2860
|
-
console.log(\` Delta: \${event.liquidityDelta}\`);
|
|
2625
|
+
|
|
2861
2626
|
});
|
|
2862
2627
|
|
|
2863
2628
|
// Subscribe to liquidity removals
|
|
2864
2629
|
const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {
|
|
2865
|
-
|
|
2866
|
-
console.log(\` Pool: \${event.token0}-\${event.token1}\`);
|
|
2867
|
-
console.log(\` Amount0: \${event.amount0}\`);
|
|
2868
|
-
console.log(\` Amount1: \${event.amount1}\`);
|
|
2869
|
-
console.log(\` Owner: \${event.owner}\`);
|
|
2870
|
-
console.log(\` Fees collected: \${event.fees0}, \${event.fees1}\`);
|
|
2630
|
+
|
|
2871
2631
|
});
|
|
2872
2632
|
|
|
2873
2633
|
// ============================================================================
|
|
@@ -2876,12 +2636,6 @@ async function subscribeToEvents() {
|
|
|
2876
2636
|
|
|
2877
2637
|
// Subscribe to new DEX pool creation
|
|
2878
2638
|
const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {
|
|
2879
|
-
console.log('New DEX pool created!');
|
|
2880
|
-
console.log(\` Token: \${pool.tokenName}\`);
|
|
2881
|
-
console.log(\` Token0: \${pool.token0}\`);
|
|
2882
|
-
console.log(\` Token1: \${pool.token1}\`);
|
|
2883
|
-
console.log(\` Fee Tier: \${pool.feeTier}\`);
|
|
2884
|
-
console.log(\` Initial TVL: \${pool.tvl}\`);
|
|
2885
2639
|
|
|
2886
2640
|
// Auto-provide liquidity to new pools
|
|
2887
2641
|
sdk.addSwapLiquidityByPrice({
|
|
@@ -2892,7 +2646,7 @@ async function subscribeToEvents() {
|
|
|
2892
2646
|
maxPrice: '1.05',
|
|
2893
2647
|
amount0Desired: '1000',
|
|
2894
2648
|
amount1Desired: '1000'
|
|
2895
|
-
}).then(() =>
|
|
2649
|
+
}).then(() => );
|
|
2896
2650
|
});
|
|
2897
2651
|
|
|
2898
2652
|
// ============================================================================
|
|
@@ -2901,16 +2655,10 @@ async function subscribeToEvents() {
|
|
|
2901
2655
|
|
|
2902
2656
|
// Subscribe to DEX swap executions
|
|
2903
2657
|
const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {
|
|
2904
|
-
console.log('DEX swap executed!');
|
|
2905
|
-
console.log(\` Pair: \${swap.tokenIn} → \${swap.tokenOut}\`);
|
|
2906
|
-
console.log(\` Amount In: \${swap.amountIn}\`);
|
|
2907
|
-
console.log(\` Amount Out: \${swap.amountOut}\`);
|
|
2908
|
-
console.log(\` Trader: \${swap.trader}\`);
|
|
2909
|
-
console.log(\` Fee Tier: \${swap.feeTier}\`);
|
|
2910
2658
|
|
|
2911
2659
|
// Track volume and price impact
|
|
2912
2660
|
const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);
|
|
2913
|
-
|
|
2661
|
+
|
|
2914
2662
|
});
|
|
2915
2663
|
|
|
2916
2664
|
// ============================================================================
|
|
@@ -2919,12 +2667,6 @@ async function subscribeToEvents() {
|
|
|
2919
2667
|
|
|
2920
2668
|
// Subscribe to new token launches
|
|
2921
2669
|
const cleanupToken = sdk.subscribeToTokenCreations((token) => {
|
|
2922
|
-
console.log('New token launched!');
|
|
2923
|
-
console.log(\` Name: \${token.tokenName}\`);
|
|
2924
|
-
console.log(\` Symbol: \${token.tokenSymbol}\`);
|
|
2925
|
-
console.log(\` Creator: \${token.creator}\`);
|
|
2926
|
-
console.log(\` Max Supply: \${token.maxSupply}\`);
|
|
2927
|
-
console.log(\` Base Price: \${token.basePrice}\`);
|
|
2928
2670
|
|
|
2929
2671
|
// Auto-buy new tokens
|
|
2930
2672
|
sdk.buy({
|
|
@@ -2932,7 +2674,7 @@ async function subscribeToEvents() {
|
|
|
2932
2674
|
amount: '100',
|
|
2933
2675
|
type: 'native',
|
|
2934
2676
|
slippageToleranceFactor: 0.01
|
|
2935
|
-
}).then(() =>
|
|
2677
|
+
}).then(() => );
|
|
2936
2678
|
});
|
|
2937
2679
|
|
|
2938
2680
|
// ============================================================================
|
|
@@ -2952,7 +2694,6 @@ async function subscribeToEvents() {
|
|
|
2952
2694
|
|
|
2953
2695
|
if (divergence > 0.01) {
|
|
2954
2696
|
// 1% arbitrage opportunity
|
|
2955
|
-
console.log(\`Arbitrage opportunity: \${divergence * 100}%\`);
|
|
2956
2697
|
|
|
2957
2698
|
// Execute arbitrage trade
|
|
2958
2699
|
await sdk.executeSwap(
|
|
@@ -2968,13 +2709,12 @@ async function subscribeToEvents() {
|
|
|
2968
2709
|
|
|
2969
2710
|
// Monitor liquidity additions for new opportunities
|
|
2970
2711
|
sdk.subscribeToDexLiquidityAdded(async (event) => {
|
|
2971
|
-
console.log(\`New liquidity in \${event.token0}-\${event.token1}\`);
|
|
2972
2712
|
|
|
2973
2713
|
// Check if pool has sufficient depth for arbitrage
|
|
2974
2714
|
const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);
|
|
2975
2715
|
// Use compareAmounts for precise liquidity threshold comparison
|
|
2976
2716
|
if (compareAmounts(poolInfo.liquidity, '100000') > 0) {
|
|
2977
|
-
|
|
2717
|
+
|
|
2978
2718
|
}
|
|
2979
2719
|
});
|
|
2980
2720
|
}
|
|
@@ -2988,7 +2728,6 @@ async function subscribeToEvents() {
|
|
|
2988
2728
|
|
|
2989
2729
|
// Auto-add liquidity to new pools
|
|
2990
2730
|
sdk.subscribeToDexPoolAdded(async (pool) => {
|
|
2991
|
-
console.log(\`New pool: \${pool.tokenName}\`);
|
|
2992
2731
|
|
|
2993
2732
|
// Wait for some initial swaps to establish price
|
|
2994
2733
|
setTimeout(async () => {
|
|
@@ -3007,24 +2746,22 @@ async function subscribeToEvents() {
|
|
|
3007
2746
|
amount1Desired: '10000'
|
|
3008
2747
|
});
|
|
3009
2748
|
|
|
3010
|
-
console.log('Liquidity added to new pool');
|
|
3011
2749
|
}
|
|
3012
2750
|
}, 60000); // Wait 1 minute
|
|
3013
2751
|
});
|
|
3014
2752
|
|
|
3015
2753
|
// Monitor liquidity removals (potential exit signal)
|
|
3016
2754
|
sdk.subscribeToDexLiquidityRemoved((event) => {
|
|
3017
|
-
console.log(\`Large liquidity removal: \${event.amount0}, \${event.amount1}\`);
|
|
3018
2755
|
|
|
3019
2756
|
// Check if we should also exit
|
|
3020
2757
|
if (isLargeRemoval(event)) {
|
|
3021
|
-
|
|
2758
|
+
|
|
3022
2759
|
}
|
|
3023
2760
|
});
|
|
3024
2761
|
}
|
|
3025
2762
|
|
|
3026
2763
|
// Keep subscriptions running
|
|
3027
|
-
|
|
2764
|
+
|
|
3028
2765
|
await new Promise(() => {}); // Run forever
|
|
3029
2766
|
|
|
3030
2767
|
// Cleanup when done
|
|
@@ -3054,7 +2791,7 @@ async function subscribeToEvents() {
|
|
|
3054
2791
|
|
|
3055
2792
|
**DexPoolAdded:**
|
|
3056
2793
|
- tokenName, token0, token1
|
|
3057
|
-
- feeTier,
|
|
2794
|
+
- feeTier, TVL
|
|
3058
2795
|
- timestamp
|
|
3059
2796
|
|
|
3060
2797
|
**SwapExecuted:**
|
|
@@ -3083,10 +2820,10 @@ async function subscribeToEvents() {
|
|
|
3083
2820
|
// Handle connection lifecycle events
|
|
3084
2821
|
await sdk.connectStreamWebSocket({
|
|
3085
2822
|
onConnect: () => {
|
|
3086
|
-
|
|
2823
|
+
|
|
3087
2824
|
},
|
|
3088
2825
|
onDisconnect: (reason) => {
|
|
3089
|
-
|
|
2826
|
+
|
|
3090
2827
|
// Implement reconnection logic if needed
|
|
3091
2828
|
},
|
|
3092
2829
|
onError: (error) => {
|
|
@@ -3096,7 +2833,7 @@ await sdk.connectStreamWebSocket({
|
|
|
3096
2833
|
|
|
3097
2834
|
// Check connection state
|
|
3098
2835
|
if (sdk.isStreamWebSocketConnected()) {
|
|
3099
|
-
|
|
2836
|
+
|
|
3100
2837
|
}
|
|
3101
2838
|
\`\`\`
|
|
3102
2839
|
|
|
@@ -3107,9 +2844,9 @@ if (sdk.isStreamWebSocketConnected()) {
|
|
|
3107
2844
|
await sdk.connectStreamWebSocket({
|
|
3108
2845
|
onTypingIndicator: (event) => {
|
|
3109
2846
|
if (event.isTyping) {
|
|
3110
|
-
|
|
2847
|
+
|
|
3111
2848
|
} else {
|
|
3112
|
-
|
|
2849
|
+
|
|
3113
2850
|
}
|
|
3114
2851
|
}
|
|
3115
2852
|
});
|
|
@@ -3375,41 +3112,30 @@ async function getCurrentSeason() {
|
|
|
3375
3112
|
const currentSeason = await sdk.fetchCurrentDexSeason();
|
|
3376
3113
|
|
|
3377
3114
|
if (currentSeason) {
|
|
3378
|
-
console.log('Current DEX Season:');
|
|
3379
|
-
console.log(\` Season ID: \${currentSeason.id}\`);
|
|
3380
|
-
console.log(\` Name: \${currentSeason.name}\`);
|
|
3381
|
-
console.log(\` Start: \${currentSeason.start.toISOString()}\`);
|
|
3382
|
-
console.log(\` End: \${currentSeason.end.toISOString()}\`);
|
|
3383
3115
|
|
|
3384
3116
|
// Check if season is currently active
|
|
3385
3117
|
const now = new Date();
|
|
3386
3118
|
const isActive = now >= currentSeason.start && now <= currentSeason.end;
|
|
3387
3119
|
|
|
3388
|
-
console.log(\` Active: \${isActive}\`);
|
|
3389
|
-
|
|
3390
3120
|
// Calculate time remaining
|
|
3391
3121
|
const timeRemaining = currentSeason.end.getTime() - now.getTime();
|
|
3392
3122
|
const daysRemaining = Math.floor(timeRemaining / (1000 * 60 * 60 * 24));
|
|
3393
3123
|
|
|
3394
|
-
console.log(\` Days remaining: \${daysRemaining}\`);
|
|
3395
|
-
|
|
3396
3124
|
// Fetch leaderboard for current season
|
|
3397
3125
|
const leaderboard = await sdk.fetchDexLeaderboardBySeasonId(currentSeason.id);
|
|
3398
|
-
console.log(\` Total participants: \${leaderboard.entries.length}\`);
|
|
3399
3126
|
|
|
3400
3127
|
// Show top 3 players
|
|
3401
3128
|
leaderboard.entries.slice(0, 3).forEach((entry, index) => {
|
|
3402
|
-
|
|
3129
|
+
|
|
3403
3130
|
});
|
|
3404
3131
|
} else {
|
|
3405
|
-
console.log('No active season (between seasons)');
|
|
3406
3132
|
|
|
3407
3133
|
// Fetch all seasons to see when next one starts
|
|
3408
3134
|
const allSeasons = await sdk.fetchAllDexSeasons();
|
|
3409
3135
|
const futureSeason = allSeasons.find(s => s.start > new Date());
|
|
3410
3136
|
|
|
3411
3137
|
if (futureSeason) {
|
|
3412
|
-
|
|
3138
|
+
|
|
3413
3139
|
}
|
|
3414
3140
|
}
|
|
3415
3141
|
}
|
|
@@ -3421,7 +3147,6 @@ async function participateInSeason() {
|
|
|
3421
3147
|
const season = await sdk.fetchCurrentDexSeason();
|
|
3422
3148
|
|
|
3423
3149
|
if (season) {
|
|
3424
|
-
console.log(\`Active season: \${season.name}\`);
|
|
3425
3150
|
|
|
3426
3151
|
// Execute trades to earn XP
|
|
3427
3152
|
const quote = await sdk.getSwapQuoteExactInput('GALA', 'GUSDC', '100');
|
|
@@ -3434,8 +3159,6 @@ async function participateInSeason() {
|
|
|
3434
3159
|
0.01
|
|
3435
3160
|
);
|
|
3436
3161
|
|
|
3437
|
-
console.log('Trade executed - XP earned!');
|
|
3438
|
-
|
|
3439
3162
|
// Check updated leaderboard position
|
|
3440
3163
|
const leaderboard = await sdk.fetchCurrentDexLeaderboard();
|
|
3441
3164
|
const myPosition = leaderboard?.entries.find(
|
|
@@ -3443,11 +3166,10 @@ async function participateInSeason() {
|
|
|
3443
3166
|
);
|
|
3444
3167
|
|
|
3445
3168
|
if (myPosition) {
|
|
3446
|
-
|
|
3447
|
-
console.log(\`Total XP: \${myPosition.totalXp}\`);
|
|
3169
|
+
|
|
3448
3170
|
}
|
|
3449
3171
|
} else {
|
|
3450
|
-
|
|
3172
|
+
|
|
3451
3173
|
}
|
|
3452
3174
|
}
|
|
3453
3175
|
\`\`\`
|
|
@@ -3502,11 +3224,9 @@ async function bridgeOperations() {
|
|
|
3502
3224
|
|
|
3503
3225
|
// 2. Get supported bridge tokens
|
|
3504
3226
|
const supportedTokens = await sdk.getSupportedBridgeTokens('Ethereum');
|
|
3505
|
-
console.log('Bridgeable to Ethereum:', supportedTokens.map(t => t.symbol));
|
|
3506
3227
|
|
|
3507
3228
|
// 3. Check if specific token is bridgeable
|
|
3508
3229
|
const canBridge = await sdk.isTokenBridgeableToEthereum('GALA');
|
|
3509
|
-
console.log('GALA bridgeable to Ethereum:', canBridge.bridgeable);
|
|
3510
3230
|
|
|
3511
3231
|
// 4. Estimate bridge fee (calculated externally by GalaConnect API)
|
|
3512
3232
|
const fee = await sdk.estimateBridgeFee({
|
|
@@ -3514,7 +3234,6 @@ async function bridgeOperations() {
|
|
|
3514
3234
|
destinationChain: 'Ethereum',
|
|
3515
3235
|
amount: '100',
|
|
3516
3236
|
});
|
|
3517
|
-
console.log('Bridge fee:', fee.totalFee, 'GALA');
|
|
3518
3237
|
|
|
3519
3238
|
// 5. Bridge Out: GalaChain → Ethereum
|
|
3520
3239
|
const bridgeOutTx = await sdk.bridgeOut({
|
|
@@ -3523,15 +3242,12 @@ async function bridgeOperations() {
|
|
|
3523
3242
|
destinationChain: 'Ethereum',
|
|
3524
3243
|
recipientAddress: '0x5678...',
|
|
3525
3244
|
});
|
|
3526
|
-
console.log('Bridge out TX:', bridgeOutTx.transactionHash);
|
|
3527
3245
|
|
|
3528
3246
|
// 6. Get bridge status
|
|
3529
3247
|
const status = await sdk.getBridgeStatus(bridgeOutTx.transactionHash);
|
|
3530
|
-
console.log('Bridge status:', status.status);
|
|
3531
3248
|
|
|
3532
3249
|
// 7. Get Ethereum transaction status
|
|
3533
3250
|
const ethTxStatus = await sdk.getEthereumTransactionStatus(bridgeOutTx.transactionHash);
|
|
3534
|
-
console.log('ETH TX confirmed:', ethTxStatus.confirmed);
|
|
3535
3251
|
|
|
3536
3252
|
// 8. Query external chain balances
|
|
3537
3253
|
const ethBalance = await sdk.fetchEthereumWalletNativeBalance();
|
|
@@ -3540,7 +3256,7 @@ async function bridgeOperations() {
|
|
|
3540
3256
|
|
|
3541
3257
|
// 9. Discover all bridgeable tokens
|
|
3542
3258
|
const allBridgeable = await sdk.fetchAllBridgeableTokensByNetwork('ETHEREUM');
|
|
3543
|
-
|
|
3259
|
+
|
|
3544
3260
|
}
|
|
3545
3261
|
\`\`\`
|
|
3546
3262
|
|
|
@@ -3589,18 +3305,16 @@ async function discoverDexTokens() {
|
|
|
3589
3305
|
limit: 20
|
|
3590
3306
|
});
|
|
3591
3307
|
|
|
3592
|
-
console.log(\`Found \${tokens.total} tokens, page \${tokens.page} of \${tokens.totalPages}\`);
|
|
3593
3308
|
tokens.items.forEach(token => {
|
|
3594
|
-
|
|
3309
|
+
|
|
3595
3310
|
});
|
|
3596
3311
|
|
|
3597
3312
|
// Option 2: Fetch ALL tokens (auto-pagination)
|
|
3598
3313
|
const allTokens = await sdk.fetchAllAvailableDexTokens();
|
|
3599
|
-
console.log(\`Total DEX tokens: \${allTokens.length}\`);
|
|
3600
3314
|
|
|
3601
3315
|
// Option 3: Search for specific tokens
|
|
3602
3316
|
const searchResults = await sdk.fetchAllAvailableDexTokens({ search: 'USD' });
|
|
3603
|
-
|
|
3317
|
+
|
|
3604
3318
|
}
|
|
3605
3319
|
\`\`\`
|
|
3606
3320
|
|
|
@@ -3641,7 +3355,6 @@ async function wrapToken() {
|
|
|
3641
3355
|
memo: 'Wrapping for DEX trading' // Optional
|
|
3642
3356
|
});
|
|
3643
3357
|
|
|
3644
|
-
console.log('Wrap transaction:', result.transactionId);
|
|
3645
3358
|
}
|
|
3646
3359
|
\`\`\`
|
|
3647
3360
|
|
|
@@ -3659,7 +3372,6 @@ async function unwrapToken() {
|
|
|
3659
3372
|
memo: 'Unwrapping after trading' // Optional
|
|
3660
3373
|
});
|
|
3661
3374
|
|
|
3662
|
-
console.log('Unwrap transaction:', result.transactionId);
|
|
3663
3375
|
}
|
|
3664
3376
|
\`\`\`
|
|
3665
3377
|
|
|
@@ -3671,11 +3383,10 @@ async function estimateFees() {
|
|
|
3671
3383
|
|
|
3672
3384
|
// Estimate wrap fee (uses cross_channel_authorization)
|
|
3673
3385
|
const wrapFee = await sdk.estimateWrapFee('MUSIC', '100');
|
|
3674
|
-
console.log('Wrap fee:', wrapFee);
|
|
3675
3386
|
|
|
3676
3387
|
// Estimate unwrap fee (uses automatic authorization)
|
|
3677
3388
|
const unwrapFee = await sdk.estimateUnwrapFee('GMUSIC', '100');
|
|
3678
|
-
|
|
3389
|
+
|
|
3679
3390
|
}
|
|
3680
3391
|
\`\`\`
|
|
3681
3392
|
|
|
@@ -3686,7 +3397,7 @@ async function checkStatus() {
|
|
|
3686
3397
|
const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
|
|
3687
3398
|
|
|
3688
3399
|
const status = await sdk.getWrapStatus('transaction-id-here');
|
|
3689
|
-
|
|
3400
|
+
|
|
3690
3401
|
}
|
|
3691
3402
|
\`\`\`
|
|
3692
3403
|
|
|
@@ -3710,7 +3421,7 @@ async function discoverWrappableTokens() {
|
|
|
3710
3421
|
|
|
3711
3422
|
// Check if token is wrappable
|
|
3712
3423
|
const isWrappable = await sdk.isTokenWrappable('$MUSIC|Unit|none|none');
|
|
3713
|
-
|
|
3424
|
+
|
|
3714
3425
|
}
|
|
3715
3426
|
\`\`\`
|
|
3716
3427
|
|
|
@@ -3741,7 +3452,7 @@ async function getReferralUrl() {
|
|
|
3741
3452
|
|
|
3742
3453
|
// Get your unique referral URL
|
|
3743
3454
|
const result = await sdk.fetchReferralUrl();
|
|
3744
|
-
|
|
3455
|
+
|
|
3745
3456
|
}
|
|
3746
3457
|
\`\`\`
|
|
3747
3458
|
|
|
@@ -3758,9 +3469,8 @@ async function fetchReferrals() {
|
|
|
3758
3469
|
limit: 20
|
|
3759
3470
|
});
|
|
3760
3471
|
|
|
3761
|
-
console.log('Total referrals:', referrals.total);
|
|
3762
3472
|
referrals.items.forEach(ref => {
|
|
3763
|
-
|
|
3473
|
+
|
|
3764
3474
|
});
|
|
3765
3475
|
}
|
|
3766
3476
|
\`\`\`
|
|
@@ -3773,7 +3483,7 @@ async function fetchAllReferrals() {
|
|
|
3773
3483
|
|
|
3774
3484
|
// Get ALL referrals with auto-pagination
|
|
3775
3485
|
const allReferrals = await sdk.fetchAllReferrals({ address: '0x...' });
|
|
3776
|
-
|
|
3486
|
+
|
|
3777
3487
|
}
|
|
3778
3488
|
\`\`\`
|
|
3779
3489
|
|
|
@@ -3784,8 +3494,7 @@ async function getReferralSummary() {
|
|
|
3784
3494
|
const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
|
|
3785
3495
|
|
|
3786
3496
|
const summary = await sdk.fetchReferralsSummary({ address: '0x...' });
|
|
3787
|
-
|
|
3788
|
-
console.log('Total rewards earned:', summary.totalRewards);
|
|
3497
|
+
|
|
3789
3498
|
}
|
|
3790
3499
|
\`\`\`
|
|
3791
3500
|
|
|
@@ -3813,14 +3522,12 @@ async function registerAccount() {
|
|
|
3813
3522
|
|
|
3814
3523
|
// Register the SDK wallet
|
|
3815
3524
|
const result = await sdk.registerAccount();
|
|
3816
|
-
console.log('Account exists:', result.exists);
|
|
3817
|
-
console.log('Wallet alias:', result.walletAlias);
|
|
3818
3525
|
|
|
3819
3526
|
// Register a specific address
|
|
3820
3527
|
const otherResult = await sdk.registerAccount({
|
|
3821
3528
|
address: '0x1234...' // Supports eth|, 0x, or client| formats
|
|
3822
3529
|
});
|
|
3823
|
-
|
|
3530
|
+
|
|
3824
3531
|
}
|
|
3825
3532
|
\`\`\`
|
|
3826
3533
|
|
|
@@ -3858,24 +3565,18 @@ async function manageStream() {
|
|
|
3858
3565
|
|
|
3859
3566
|
// Start a stream for your token
|
|
3860
3567
|
const stream = await sdk.startStream('mytoken');
|
|
3861
|
-
|
|
3862
|
-
console.log('RTMP URL:', stream.rtmpUrl);
|
|
3863
|
-
console.log('Playback URL:', stream.playbackUrl);
|
|
3568
|
+
|
|
3864
3569
|
// Use stream.streamKey in OBS or other RTMP software
|
|
3865
3570
|
|
|
3866
3571
|
// Get stream info (public endpoint)
|
|
3867
3572
|
const info = await sdk.getStreamInfo('mytoken');
|
|
3868
|
-
console.log('Status:', info.status); // IDLE, ACTIVE, DISABLED
|
|
3869
|
-
console.log('Is Live:', info.isLive);
|
|
3870
|
-
console.log('Viewers:', info.viewerCount);
|
|
3871
3573
|
|
|
3872
3574
|
// Stop the stream when done
|
|
3873
3575
|
await sdk.stopStream('mytoken');
|
|
3874
|
-
console.log('Stream stopped');
|
|
3875
3576
|
|
|
3876
3577
|
// Reset stream key if compromised
|
|
3877
3578
|
const newKey = await sdk.resetStreamKey('mytoken');
|
|
3878
|
-
|
|
3579
|
+
|
|
3879
3580
|
}
|
|
3880
3581
|
\`\`\`
|
|
3881
3582
|
|
|
@@ -3891,18 +3592,13 @@ async function manageRecordings() {
|
|
|
3891
3592
|
page: 1,
|
|
3892
3593
|
limit: 20,
|
|
3893
3594
|
});
|
|
3894
|
-
console.log('Total recordings:', recordings.total);
|
|
3895
3595
|
|
|
3896
3596
|
for (const rec of recordings.recordings) {
|
|
3897
|
-
|
|
3898
|
-
console.log('Duration:', rec.duration, 'seconds');
|
|
3899
|
-
console.log('Status:', rec.status); // READY, PROCESSING, ERRORED
|
|
3597
|
+
|
|
3900
3598
|
}
|
|
3901
3599
|
|
|
3902
3600
|
// Get download URL for a recording
|
|
3903
3601
|
const download = await sdk.getRecordingDownload('mytoken', 'asset-123');
|
|
3904
|
-
console.log('Download URL:', download.downloadUrl);
|
|
3905
|
-
console.log('Expires:', download.expiresAt);
|
|
3906
3602
|
|
|
3907
3603
|
// Delete a recording
|
|
3908
3604
|
await sdk.deleteRecording('mytoken', 'asset-123');
|
|
@@ -3919,8 +3615,6 @@ async function manageSimulcast() {
|
|
|
3919
3615
|
|
|
3920
3616
|
// Get existing simulcast targets
|
|
3921
3617
|
const targets = await sdk.getSimulcastTargets('mytoken');
|
|
3922
|
-
console.log('Max targets:', targets.maxTargets);
|
|
3923
|
-
console.log('Current targets:', targets.targets.length);
|
|
3924
3618
|
|
|
3925
3619
|
// Add YouTube simulcast
|
|
3926
3620
|
const youtube = await sdk.addSimulcastTarget({
|
|
@@ -3930,7 +3624,6 @@ async function manageSimulcast() {
|
|
|
3930
3624
|
streamKey: 'your-youtube-stream-key',
|
|
3931
3625
|
name: 'My YouTube Channel',
|
|
3932
3626
|
});
|
|
3933
|
-
console.log('Added target:', youtube.target.targetId);
|
|
3934
3627
|
|
|
3935
3628
|
// Add Twitch simulcast
|
|
3936
3629
|
await sdk.addSimulcastTarget({
|
|
@@ -3965,7 +3658,6 @@ async function adminOperations() {
|
|
|
3965
3658
|
|
|
3966
3659
|
// Get global streaming status
|
|
3967
3660
|
const globalStatus = await sdk.getGlobalStreamingStatus();
|
|
3968
|
-
console.log('Global streaming enabled:', globalStatus.enabled);
|
|
3969
3661
|
|
|
3970
3662
|
// Enable/disable streaming globally (maintenance mode)
|
|
3971
3663
|
await sdk.setGlobalStreamingEnabled(false); // Disable all streams
|
|
@@ -4038,7 +3730,7 @@ async function restChat() {
|
|
|
4038
3730
|
});
|
|
4039
3731
|
|
|
4040
3732
|
for (const msg of messages.messages) {
|
|
4041
|
-
|
|
3733
|
+
|
|
4042
3734
|
}
|
|
4043
3735
|
|
|
4044
3736
|
// Send a chat message via REST
|
|
@@ -4046,20 +3738,18 @@ async function restChat() {
|
|
|
4046
3738
|
tokenName: 'mytoken',
|
|
4047
3739
|
content: 'Hello everyone!',
|
|
4048
3740
|
});
|
|
4049
|
-
console.log('Message ID:', sent.message.messageId);
|
|
4050
3741
|
|
|
4051
3742
|
// Delete a chat message (user can delete own, admin can delete any)
|
|
4052
3743
|
const deleted = await sdk.deleteChatMessage({
|
|
4053
3744
|
tokenName: 'mytoken',
|
|
4054
3745
|
messageId: sent.message.messageId,
|
|
4055
3746
|
});
|
|
4056
|
-
console.log('Message deleted:', deleted.deleted);
|
|
4057
3747
|
|
|
4058
3748
|
// Check chat status
|
|
4059
3749
|
const status = await sdk.getChatStatus('mytoken');
|
|
4060
|
-
|
|
3750
|
+
|
|
4061
3751
|
if (!status.enabled) {
|
|
4062
|
-
|
|
3752
|
+
|
|
4063
3753
|
}
|
|
4064
3754
|
}
|
|
4065
3755
|
\`\`\`
|
|
@@ -4077,17 +3767,17 @@ async function webSocketChat() {
|
|
|
4077
3767
|
|
|
4078
3768
|
// Connect with event callbacks
|
|
4079
3769
|
await sdk.connectStreamWebSocket({
|
|
4080
|
-
onConnect: () =>
|
|
4081
|
-
onDisconnect: (reason) =>
|
|
3770
|
+
onConnect: () => ,
|
|
3771
|
+
onDisconnect: (reason) => ,
|
|
4082
3772
|
onError: (error) => console.error('Error:', error),
|
|
4083
3773
|
onChatMessage: (msg) => {
|
|
4084
|
-
|
|
3774
|
+
|
|
4085
3775
|
},
|
|
4086
3776
|
onViewerCount: (data) => {
|
|
4087
|
-
|
|
3777
|
+
|
|
4088
3778
|
},
|
|
4089
3779
|
onStreamStatus: (status) => {
|
|
4090
|
-
|
|
3780
|
+
|
|
4091
3781
|
},
|
|
4092
3782
|
});
|
|
4093
3783
|
|
|
@@ -4096,7 +3786,6 @@ async function webSocketChat() {
|
|
|
4096
3786
|
|
|
4097
3787
|
// Subscribe to a stream's events
|
|
4098
3788
|
const subscribed = await sdk.subscribeToStream('mytoken');
|
|
4099
|
-
console.log('Subscribed, stream status:', subscribed.status);
|
|
4100
3789
|
|
|
4101
3790
|
// Send message via WebSocket (lower latency)
|
|
4102
3791
|
await sdk.sendStreamChatViaWebSocket('mytoken', 'Hello via WebSocket!');
|
|
@@ -4129,7 +3818,6 @@ async function adminChat() {
|
|
|
4129
3818
|
|
|
4130
3819
|
// Get global chat status
|
|
4131
3820
|
const globalStatus = await sdk.getGlobalChatStatus();
|
|
4132
|
-
console.log('Global chat enabled:', globalStatus.enabled);
|
|
4133
3821
|
|
|
4134
3822
|
// Disable/enable chat globally
|
|
4135
3823
|
await sdk.setGlobalChatEnabled(false); // Disable all chat
|
|
@@ -4199,36 +3887,30 @@ const sdk = createLaunchpadSDK({
|
|
|
4199
3887
|
|
|
4200
3888
|
// 1. Login to get JWT token
|
|
4201
3889
|
const session = await sdk.login();
|
|
4202
|
-
console.log('Authenticated:', session.address);
|
|
4203
|
-
console.log('Token expires in:', session.expiresIn, 'seconds');
|
|
4204
3890
|
|
|
4205
3891
|
// 2. Check authentication status
|
|
4206
3892
|
if (sdk.isAuthenticated()) {
|
|
4207
|
-
|
|
3893
|
+
|
|
4208
3894
|
}
|
|
4209
3895
|
|
|
4210
3896
|
// 3. Get current session info
|
|
4211
3897
|
const info = await sdk.getSession();
|
|
4212
|
-
console.log('Session issued at:', info.issuedAt);
|
|
4213
|
-
console.log('Session expires at:', info.expiresAt);
|
|
4214
3898
|
|
|
4215
3899
|
// 4. Access token directly (for custom requests)
|
|
4216
3900
|
const token = sdk.getAccessToken();
|
|
4217
|
-
console.log('JWT token:', token);
|
|
4218
3901
|
|
|
4219
3902
|
// 5. Refresh token before expiry
|
|
4220
3903
|
if (sdk.shouldRefreshToken()) {
|
|
4221
3904
|
const refreshed = await sdk.refreshToken();
|
|
4222
|
-
|
|
3905
|
+
|
|
4223
3906
|
}
|
|
4224
3907
|
|
|
4225
3908
|
// 6. Ensure valid token (auto-refreshes if needed)
|
|
4226
3909
|
const validToken = await sdk.ensureValidToken();
|
|
4227
|
-
console.log('Valid token obtained');
|
|
4228
3910
|
|
|
4229
3911
|
// 7. Logout when done
|
|
4230
3912
|
sdk.logout();
|
|
4231
|
-
|
|
3913
|
+
|
|
4232
3914
|
\`\`\`
|
|
4233
3915
|
|
|
4234
3916
|
## Auto-Refresh Behavior
|
|
@@ -4351,7 +4033,6 @@ const permanentBan = await sdk.createBan({
|
|
|
4351
4033
|
userAddress: 'eth|0x1234567890abcdef1234567890abcdef12345678',
|
|
4352
4034
|
reason: 'Spamming chat',
|
|
4353
4035
|
});
|
|
4354
|
-
console.log('Permanent ban created:', permanentBan.ban.id);
|
|
4355
4036
|
|
|
4356
4037
|
// Create a temporary ban (1 hour)
|
|
4357
4038
|
const tempBan = await sdk.createBan({
|
|
@@ -4360,14 +4041,13 @@ const tempBan = await sdk.createBan({
|
|
|
4360
4041
|
reason: 'Inappropriate behavior',
|
|
4361
4042
|
durationSeconds: BAN_DURATIONS.ONE_HOUR, // 3600 seconds
|
|
4362
4043
|
});
|
|
4363
|
-
console.log('Temp ban expires:', tempBan.ban.expiresAt);
|
|
4364
4044
|
|
|
4365
4045
|
// Remove a ban (unban user)
|
|
4366
4046
|
const unbanned = await sdk.removeBan({
|
|
4367
4047
|
tokenName: 'mytoken',
|
|
4368
4048
|
userAddress: 'eth|0x1234567890abcdef1234567890abcdef12345678',
|
|
4369
4049
|
});
|
|
4370
|
-
|
|
4050
|
+
|
|
4371
4051
|
\`\`\`
|
|
4372
4052
|
|
|
4373
4053
|
## Duration Presets
|
|
@@ -4398,12 +4078,9 @@ const allBans = await sdk.listBans({
|
|
|
4398
4078
|
page: 1,
|
|
4399
4079
|
limit: 20,
|
|
4400
4080
|
});
|
|
4401
|
-
console.log('Total bans:', allBans.meta.total);
|
|
4402
4081
|
|
|
4403
4082
|
for (const ban of allBans.bans) {
|
|
4404
|
-
|
|
4405
|
-
console.log(\` Permanent: \${ban.isPermanent}\`);
|
|
4406
|
-
console.log(\` Expires: \${ban.expiresAt || 'Never'}\`);
|
|
4083
|
+
|
|
4407
4084
|
}
|
|
4408
4085
|
|
|
4409
4086
|
// Search bans by user
|
|
@@ -4430,12 +4107,9 @@ const status = await sdk.getBanStatus({
|
|
|
4430
4107
|
});
|
|
4431
4108
|
|
|
4432
4109
|
if (status.banned) {
|
|
4433
|
-
|
|
4434
|
-
console.log('Reason:', status.ban?.reason);
|
|
4435
|
-
console.log('Permanent:', status.ban?.isPermanent);
|
|
4436
|
-
console.log('Expires:', status.ban?.expiresAt);
|
|
4110
|
+
|
|
4437
4111
|
} else {
|
|
4438
|
-
|
|
4112
|
+
|
|
4439
4113
|
}
|
|
4440
4114
|
\`\`\`
|
|
4441
4115
|
|
|
@@ -4449,14 +4123,12 @@ const viewers = await sdk.getActiveUsers({
|
|
|
4449
4123
|
tokenName: 'mytoken',
|
|
4450
4124
|
type: ACTIVE_USER_TYPE.VIEWERS, // or 'viewers'
|
|
4451
4125
|
});
|
|
4452
|
-
console.log('Active viewers:', viewers.total);
|
|
4453
4126
|
|
|
4454
4127
|
// Get only chat participants
|
|
4455
4128
|
const chatters = await sdk.getActiveUsers({
|
|
4456
4129
|
tokenName: 'mytoken',
|
|
4457
4130
|
type: ACTIVE_USER_TYPE.CHAT_PARTICIPANTS, // or 'chat_participants'
|
|
4458
4131
|
});
|
|
4459
|
-
console.log('Chat participants:', chatters.total);
|
|
4460
4132
|
|
|
4461
4133
|
// Search active users
|
|
4462
4134
|
const searchActive = await sdk.getActiveUsers({
|
|
@@ -4465,8 +4137,7 @@ const searchActive = await sdk.getActiveUsers({
|
|
|
4465
4137
|
});
|
|
4466
4138
|
|
|
4467
4139
|
for (const user of searchActive.users) {
|
|
4468
|
-
|
|
4469
|
-
console.log(\` In chat: \${user.isChatParticipant}\`);
|
|
4140
|
+
|
|
4470
4141
|
}
|
|
4471
4142
|
\`\`\`
|
|
4472
4143
|
|
|
@@ -4499,17 +4170,14 @@ Ban events are broadcast to affected users via WebSocket:
|
|
|
4499
4170
|
// Listen for ban events
|
|
4500
4171
|
sdk.connectStreamWebSocket({
|
|
4501
4172
|
onUserBanned: (event) => {
|
|
4502
|
-
|
|
4503
|
-
console.log('Reason:', event.reason);
|
|
4504
|
-
console.log('Expires:', event.expiresAt);
|
|
4173
|
+
|
|
4505
4174
|
},
|
|
4506
4175
|
onUserUnbanned: (event) => {
|
|
4507
|
-
|
|
4176
|
+
|
|
4508
4177
|
},
|
|
4509
4178
|
onBanEnforcement: (event) => {
|
|
4510
4179
|
// Received when banned user tries to chat/react
|
|
4511
|
-
|
|
4512
|
-
console.log('Reason:', event.reason);
|
|
4180
|
+
|
|
4513
4181
|
},
|
|
4514
4182
|
});
|
|
4515
4183
|
\`\`\`
|
|
@@ -4555,17 +4223,16 @@ await sdk.login();
|
|
|
4555
4223
|
// Create a moderator key for specific tokens
|
|
4556
4224
|
const result = await sdk.createApiKey({
|
|
4557
4225
|
role: API_KEY_ROLE.MODERATOR,
|
|
4558
|
-
description: 'Chat moderation bot',
|
|
4226
|
+
description: 'Chat moderation bot.',
|
|
4559
4227
|
delegateAllTokens: false,
|
|
4560
4228
|
tokenNames: ['mytoken', 'othertoken'],
|
|
4561
4229
|
expiresAt: '2025-12-31T23:59:59Z', // Optional expiration
|
|
4562
4230
|
});
|
|
4563
4231
|
|
|
4564
4232
|
// CRITICAL: Save this immediately - shown only once!
|
|
4565
|
-
|
|
4233
|
+
|
|
4566
4234
|
// Format: glp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
4567
|
-
|
|
4568
|
-
console.log('Prefix:', result.keyPrefix);
|
|
4235
|
+
|
|
4569
4236
|
\`\`\`
|
|
4570
4237
|
|
|
4571
4238
|
## Role Hierarchy
|
|
@@ -4598,14 +4265,14 @@ const canOwn = roleHasSufficientPermission('MODERATOR', 'OWNER'); // false
|
|
|
4598
4265
|
// Delegate all tokens (current and future)
|
|
4599
4266
|
const allTokensKey = await sdk.createApiKey({
|
|
4600
4267
|
role: API_KEY_ROLE.MODERATOR,
|
|
4601
|
-
description: 'All tokens moderator',
|
|
4268
|
+
description: 'All tokens moderator.',
|
|
4602
4269
|
delegateAllTokens: true,
|
|
4603
4270
|
});
|
|
4604
4271
|
|
|
4605
4272
|
// Delegate specific tokens only
|
|
4606
4273
|
const specificKey = await sdk.createApiKey({
|
|
4607
4274
|
role: API_KEY_ROLE.MANAGER,
|
|
4608
|
-
description: 'Project manager for specific tokens',
|
|
4275
|
+
description: 'Project manager for specific tokens.',
|
|
4609
4276
|
delegateAllTokens: false,
|
|
4610
4277
|
tokenNames: ['token1', 'token2', 'token3'], // Case-insensitive
|
|
4611
4278
|
});
|
|
@@ -4619,18 +4286,14 @@ const list = await sdk.listApiKeys({
|
|
|
4619
4286
|
page: 1,
|
|
4620
4287
|
limit: 20,
|
|
4621
4288
|
});
|
|
4622
|
-
console.log('Total keys:', list.meta.total);
|
|
4623
4289
|
|
|
4624
4290
|
for (const key of list.apiKeys) {
|
|
4625
|
-
|
|
4626
|
-
console.log(\` Description: \${key.description || 'None'}\`);
|
|
4627
|
-
console.log(\` Last used: \${key.lastUsedAt || 'Never'}\`);
|
|
4628
|
-
console.log(\` Expires: \${key.expiresAt || 'Never'}\`);
|
|
4291
|
+
|
|
4629
4292
|
}
|
|
4630
4293
|
|
|
4631
4294
|
// Get single API key by ID
|
|
4632
4295
|
const key = await sdk.getApiKey(123);
|
|
4633
|
-
|
|
4296
|
+
|
|
4634
4297
|
\`\`\`
|
|
4635
4298
|
|
|
4636
4299
|
## Updating API Keys
|
|
@@ -4638,7 +4301,7 @@ console.log('Key details:', key);
|
|
|
4638
4301
|
\`\`\`typescript
|
|
4639
4302
|
// Update description
|
|
4640
4303
|
const updated = await sdk.updateApiKey(123, {
|
|
4641
|
-
description: 'Updated description',
|
|
4304
|
+
description: 'Updated description.',
|
|
4642
4305
|
});
|
|
4643
4306
|
|
|
4644
4307
|
// Upgrade role
|
|
@@ -4673,7 +4336,6 @@ await sdk.updateApiKey(123, {
|
|
|
4673
4336
|
\`\`\`typescript
|
|
4674
4337
|
// Revoke (soft delete) an API key
|
|
4675
4338
|
await sdk.revokeApiKey(123);
|
|
4676
|
-
console.log('API key revoked');
|
|
4677
4339
|
|
|
4678
4340
|
// Key is now unusable - attempts to use it will fail with 401
|
|
4679
4341
|
\`\`\`
|
|
@@ -4683,7 +4345,7 @@ console.log('API key revoked');
|
|
|
4683
4345
|
\`\`\`typescript
|
|
4684
4346
|
// Get list of valid roles
|
|
4685
4347
|
const roles = sdk.getApiKeyRoles();
|
|
4686
|
-
|
|
4348
|
+
|
|
4687
4349
|
// ['MODERATOR', 'TECHNICAL_PRODUCER', 'MANAGER', 'OWNER']
|
|
4688
4350
|
\`\`\`
|
|
4689
4351
|
|
|
@@ -4698,13 +4360,13 @@ import {
|
|
|
4698
4360
|
|
|
4699
4361
|
// Validate role string
|
|
4700
4362
|
if (isValidApiKeyRole('MODERATOR')) {
|
|
4701
|
-
|
|
4363
|
+
|
|
4702
4364
|
}
|
|
4703
4365
|
|
|
4704
4366
|
// Validate creation options
|
|
4705
4367
|
const createErrors = validateCreateApiKeyOptions({
|
|
4706
4368
|
role: 'MODERATOR',
|
|
4707
|
-
description: 'Test key',
|
|
4369
|
+
description: 'Test key.',
|
|
4708
4370
|
});
|
|
4709
4371
|
if (createErrors.length > 0) {
|
|
4710
4372
|
console.error('Validation errors:', createErrors);
|
|
@@ -4767,14 +4429,12 @@ await sdk.login();
|
|
|
4767
4429
|
const result = await sdk.createModeratorInvite({
|
|
4768
4430
|
tokenName: 'mytoken',
|
|
4769
4431
|
role: MODERATOR_ROLE.MODERATOR,
|
|
4770
|
-
description: 'John - Friday stream moderator',
|
|
4432
|
+
description: 'John - Friday stream moderator.',
|
|
4771
4433
|
expiresAt: '2025-12-31T23:59:59Z', // Optional expiration
|
|
4772
4434
|
});
|
|
4773
4435
|
|
|
4774
4436
|
// Share this URL with the intended moderator
|
|
4775
|
-
|
|
4776
|
-
console.log('Invite Code:', result.invite.inviteCode);
|
|
4777
|
-
console.log('Status:', result.invite.status); // PENDING
|
|
4437
|
+
|
|
4778
4438
|
\`\`\`
|
|
4779
4439
|
|
|
4780
4440
|
## Moderator Roles
|
|
@@ -4799,14 +4459,8 @@ const list = await sdk.listModeratorInvites({
|
|
|
4799
4459
|
limit: 20,
|
|
4800
4460
|
});
|
|
4801
4461
|
|
|
4802
|
-
console.log('Total invites:', list.meta.totalItems);
|
|
4803
|
-
|
|
4804
4462
|
for (const invite of list.invites) {
|
|
4805
|
-
|
|
4806
|
-
console.log(\` Status: \${invite.status}\`);
|
|
4807
|
-
console.log(\` Description: \${invite.description || 'None'}\`);
|
|
4808
|
-
console.log(\` Created: \${invite.createdAt}\`);
|
|
4809
|
-
console.log(\` Expires: \${invite.expiresAt || 'Never'}\`);
|
|
4463
|
+
|
|
4810
4464
|
}
|
|
4811
4465
|
\`\`\`
|
|
4812
4466
|
|
|
@@ -4823,9 +4477,6 @@ const result = await sdk.claimModeratorInvite({
|
|
|
4823
4477
|
inviteCode: inviteCode,
|
|
4824
4478
|
});
|
|
4825
4479
|
|
|
4826
|
-
console.log('Claimed token:', result.token.tokenName);
|
|
4827
|
-
console.log('Your role:', result.token.role);
|
|
4828
|
-
console.log('Claimed at:', result.token.claimedAt);
|
|
4829
4480
|
// Token now appears in /studio dashboard
|
|
4830
4481
|
\`\`\`
|
|
4831
4482
|
|
|
@@ -4835,11 +4486,6 @@ console.log('Claimed at:', result.token.claimedAt);
|
|
|
4835
4486
|
// Preview invite details before logging in (public endpoint)
|
|
4836
4487
|
const preview = await sdk.getModeratorInviteByCode('abc123...');
|
|
4837
4488
|
|
|
4838
|
-
console.log('Token:', preview.tokenName);
|
|
4839
|
-
console.log('Symbol:', preview.tokenSymbol);
|
|
4840
|
-
console.log('Role offered:', preview.role);
|
|
4841
|
-
console.log('Status:', preview.status);
|
|
4842
|
-
console.log('Invited by:', preview.invitedBy.fullName);
|
|
4843
4489
|
\`\`\`
|
|
4844
4490
|
|
|
4845
4491
|
## Getting Moderated Tokens (Studio Dashboard)
|
|
@@ -4854,9 +4500,7 @@ const tokens = await sdk.getModeratedTokens({
|
|
|
4854
4500
|
});
|
|
4855
4501
|
|
|
4856
4502
|
for (const token of tokens.tokens) {
|
|
4857
|
-
|
|
4858
|
-
console.log(\` Role: \${token.role}\`);
|
|
4859
|
-
console.log(\` Stream status: \${token.muxStreamStatus}\`);
|
|
4503
|
+
|
|
4860
4504
|
}
|
|
4861
4505
|
\`\`\`
|
|
4862
4506
|
|
|
@@ -4865,7 +4509,6 @@ for (const token of tokens.tokens) {
|
|
|
4865
4509
|
\`\`\`typescript
|
|
4866
4510
|
// Revoke by invite ID (owner only)
|
|
4867
4511
|
await sdk.revokeModeratorInvite(123);
|
|
4868
|
-
console.log('Invite revoked');
|
|
4869
4512
|
|
|
4870
4513
|
// If already claimed, moderator loses access immediately
|
|
4871
4514
|
// If pending, invite can no longer be claimed
|
|
@@ -4917,18 +4560,16 @@ const sdk = createLaunchpadSDK({
|
|
|
4917
4560
|
|
|
4918
4561
|
// Option 1: Using Admin API key
|
|
4919
4562
|
const result = await sdk.createOverseerInvite({
|
|
4920
|
-
description: 'John - Platform Support Team',
|
|
4563
|
+
description: 'John - Platform Support Team.',
|
|
4921
4564
|
expiresAt: '2025-12-31T23:59:59Z', // Optional
|
|
4922
4565
|
});
|
|
4923
4566
|
|
|
4924
4567
|
// Option 2: Using JWT (as existing Overseer)
|
|
4925
4568
|
await sdk.login();
|
|
4926
4569
|
const result = await sdk.createOverseerInvite({
|
|
4927
|
-
description: 'Platform team member',
|
|
4570
|
+
description: 'Platform team member.',
|
|
4928
4571
|
});
|
|
4929
4572
|
|
|
4930
|
-
console.log('Share this link:', result.invite.inviteUrl);
|
|
4931
|
-
console.log('Invite Code:', result.invite.inviteCode);
|
|
4932
4573
|
\`\`\`
|
|
4933
4574
|
|
|
4934
4575
|
## Claiming Overseer Invites
|
|
@@ -4939,13 +4580,10 @@ await sdk.login();
|
|
|
4939
4580
|
|
|
4940
4581
|
// Claim the invite
|
|
4941
4582
|
const claimed = await sdk.claimOverseerInvite('abc123...');
|
|
4942
|
-
console.log('Now an overseer!');
|
|
4943
|
-
console.log('Status:', claimed.invite.status); // CLAIMED
|
|
4944
4583
|
|
|
4945
4584
|
// Check own status
|
|
4946
4585
|
const status = await sdk.getMyOverseerStatus();
|
|
4947
|
-
|
|
4948
|
-
console.log('Granted at:', status.overseer?.createdAt);
|
|
4586
|
+
|
|
4949
4587
|
\`\`\`
|
|
4950
4588
|
|
|
4951
4589
|
## Listing Overseers and Invites
|
|
@@ -4959,9 +4597,7 @@ const invites = await sdk.listOverseerInvites({
|
|
|
4959
4597
|
});
|
|
4960
4598
|
|
|
4961
4599
|
for (const invite of invites.invites) {
|
|
4962
|
-
|
|
4963
|
-
console.log(\` Status: \${invite.status}\`);
|
|
4964
|
-
console.log(\` Created by: \${invite.invitedBy.fullName || invite.invitedBy.address}\`);
|
|
4600
|
+
|
|
4965
4601
|
}
|
|
4966
4602
|
|
|
4967
4603
|
// List all active overseers
|
|
@@ -4972,8 +4608,7 @@ const overseers = await sdk.listOverseers({
|
|
|
4972
4608
|
});
|
|
4973
4609
|
|
|
4974
4610
|
for (const overseer of overseers.overseers) {
|
|
4975
|
-
|
|
4976
|
-
console.log(\` Since: \${overseer.createdAt}\`);
|
|
4611
|
+
|
|
4977
4612
|
}
|
|
4978
4613
|
\`\`\`
|
|
4979
4614
|
|
|
@@ -4983,10 +4618,6 @@ for (const overseer of overseers.overseers) {
|
|
|
4983
4618
|
// Get public info about an invite (no auth required)
|
|
4984
4619
|
const preview = await sdk.getOverseerInviteByCode('abc123...');
|
|
4985
4620
|
|
|
4986
|
-
console.log('Status:', preview.status);
|
|
4987
|
-
console.log('Description:', preview.description);
|
|
4988
|
-
console.log('Invited by:', preview.invitedBy.fullName);
|
|
4989
|
-
console.log('Expires:', preview.expiresAt);
|
|
4990
4621
|
\`\`\`
|
|
4991
4622
|
|
|
4992
4623
|
## Revoking Access
|
|
@@ -4994,11 +4625,10 @@ console.log('Expires:', preview.expiresAt);
|
|
|
4994
4625
|
\`\`\`typescript
|
|
4995
4626
|
// Revoke an invite by ID
|
|
4996
4627
|
await sdk.revokeOverseerInvite(123);
|
|
4997
|
-
console.log('Invite revoked');
|
|
4998
4628
|
|
|
4999
4629
|
// Revoke an overseer by wallet address
|
|
5000
4630
|
await sdk.revokeOverseer('eth|1234567890abcdef...');
|
|
5001
|
-
|
|
4631
|
+
|
|
5002
4632
|
\`\`\`
|
|
5003
4633
|
|
|
5004
4634
|
## SDK Methods Reference
|
|
@@ -5057,8 +4687,6 @@ const flag = await sdk.createFlag({
|
|
|
5057
4687
|
reason: 'Spam/harassment',
|
|
5058
4688
|
});
|
|
5059
4689
|
|
|
5060
|
-
console.log('Flag ID:', flag.id);
|
|
5061
|
-
console.log('Status:', flag.status); // PENDING
|
|
5062
4690
|
\`\`\`
|
|
5063
4691
|
|
|
5064
4692
|
## Listing Flags
|
|
@@ -5073,9 +4701,7 @@ const flags = await sdk.listFlags({
|
|
|
5073
4701
|
});
|
|
5074
4702
|
|
|
5075
4703
|
for (const flag of flags.flags) {
|
|
5076
|
-
|
|
5077
|
-
console.log(\` Reason: \${flag.reason}\`);
|
|
5078
|
-
console.log(\` Reporter: \${flag.reporterAddress}\`);
|
|
4704
|
+
|
|
5079
4705
|
}
|
|
5080
4706
|
\`\`\`
|
|
5081
4707
|
|
|
@@ -5116,14 +4742,12 @@ const comments = await sdk.getComments({
|
|
|
5116
4742
|
});
|
|
5117
4743
|
|
|
5118
4744
|
for (const comment of comments.comments) {
|
|
5119
|
-
console.log(\`ID: \${comment.id}, MessageId: \${comment.messageId}\`);
|
|
5120
|
-
console.log(\`\${comment.userAddress}: \${comment.content}\`);
|
|
5121
4745
|
|
|
5122
4746
|
// Check reactions on this comment
|
|
5123
4747
|
if (comment.reactions) {
|
|
5124
|
-
|
|
4748
|
+
|
|
5125
4749
|
for (const reaction of comment.reactions.reactions) {
|
|
5126
|
-
|
|
4750
|
+
|
|
5127
4751
|
}
|
|
5128
4752
|
}
|
|
5129
4753
|
}
|
|
@@ -5134,7 +4758,6 @@ const newComment = await sdk.createComment({
|
|
|
5134
4758
|
tokenName: 'mytoken',
|
|
5135
4759
|
content: 'Great project! Looking forward to the launch.',
|
|
5136
4760
|
});
|
|
5137
|
-
console.log('Comment messageId:', newComment.comment.messageId);
|
|
5138
4761
|
|
|
5139
4762
|
// Add a reaction to a comment using its messageId
|
|
5140
4763
|
await sdk.addReaction({
|
|
@@ -5196,9 +4819,8 @@ const result = await sdk.getTrades({
|
|
|
5196
4819
|
page: 1
|
|
5197
4820
|
});
|
|
5198
4821
|
|
|
5199
|
-
console.log(\`Found \${result.trades.length} trades\`);
|
|
5200
4822
|
for (const trade of result.trades) {
|
|
5201
|
-
|
|
4823
|
+
|
|
5202
4824
|
}
|
|
5203
4825
|
\`\`\`
|
|
5204
4826
|
|
|
@@ -5248,16 +4870,15 @@ const userTrades = await sdk.getTrades({
|
|
|
5248
4870
|
### Pagination
|
|
5249
4871
|
|
|
5250
4872
|
\`\`\`typescript
|
|
5251
|
-
// Paginate through all trades
|
|
5252
|
-
let
|
|
4873
|
+
// Paginate through all trades using offset-based pagination
|
|
4874
|
+
let offset = 0;
|
|
5253
4875
|
let hasMore = true;
|
|
5254
4876
|
|
|
5255
4877
|
while (hasMore) {
|
|
5256
|
-
const result = await sdk.getTrades({ tokenName: 'anime',
|
|
5257
|
-
console.log(\`Page \${page}: \${result.trades.length} trades\`);
|
|
4878
|
+
const result = await sdk.getTrades({ tokenName: 'anime', offset, limit: 50 });
|
|
5258
4879
|
|
|
5259
4880
|
hasMore = result.trades.length === 50;
|
|
5260
|
-
|
|
4881
|
+
offset += 50;
|
|
5261
4882
|
}
|
|
5262
4883
|
\`\`\`
|
|
5263
4884
|
|
|
@@ -5306,9 +4927,6 @@ const result = await sdk.banToken({
|
|
|
5306
4927
|
tokenName: 'scamtoken',
|
|
5307
4928
|
reason: 'Fraudulent project - reported by multiple users',
|
|
5308
4929
|
});
|
|
5309
|
-
console.log('Token banned:', result.tokenName);
|
|
5310
|
-
console.log('Ban ID:', result.ban.id);
|
|
5311
|
-
console.log('Banned by:', result.ban.bannedBy);
|
|
5312
4930
|
|
|
5313
4931
|
// Ban without reason (optional)
|
|
5314
4932
|
await sdk.banToken({ tokenName: 'problematictoken' });
|
|
@@ -5319,8 +4937,6 @@ await sdk.banToken({ tokenName: 'problematictoken' });
|
|
|
5319
4937
|
\`\`\`typescript
|
|
5320
4938
|
// Remove a token ban
|
|
5321
4939
|
const result = await sdk.unbanToken({ tokenName: 'scamtoken' });
|
|
5322
|
-
console.log('Ban removed:', result.removed); // true
|
|
5323
|
-
console.log('Token:', result.tokenName);
|
|
5324
4940
|
|
|
5325
4941
|
// Token is now:
|
|
5326
4942
|
// - Visible in pool listings again
|
|
@@ -5336,12 +4952,9 @@ console.log('Token:', result.tokenName);
|
|
|
5336
4952
|
const status = await sdk.isTokenBanned({ tokenName: 'sometoken' });
|
|
5337
4953
|
|
|
5338
4954
|
if (status.banned) {
|
|
5339
|
-
|
|
5340
|
-
console.log('Reason:', status.ban?.reason);
|
|
5341
|
-
console.log('Banned by:', status.ban?.bannedBy);
|
|
5342
|
-
console.log('Banned at:', status.ban?.createdAt);
|
|
4955
|
+
|
|
5343
4956
|
} else {
|
|
5344
|
-
|
|
4957
|
+
|
|
5345
4958
|
}
|
|
5346
4959
|
|
|
5347
4960
|
// getTokenBan is an alias - use whichever is more readable
|
|
@@ -5353,12 +4966,9 @@ const details = await sdk.getTokenBan({ tokenName: 'sometoken' });
|
|
|
5353
4966
|
\`\`\`typescript
|
|
5354
4967
|
// Get first page with default limit (20)
|
|
5355
4968
|
const page1 = await sdk.listTokenBans({});
|
|
5356
|
-
console.log('Total banned tokens:', page1.meta.total);
|
|
5357
4969
|
|
|
5358
4970
|
for (const ban of page1.items) {
|
|
5359
|
-
|
|
5360
|
-
console.log(\` Banned by: \${ban.bannedBy}\`);
|
|
5361
|
-
console.log(\` Date: \${ban.createdAt}\`);
|
|
4971
|
+
|
|
5362
4972
|
}
|
|
5363
4973
|
|
|
5364
4974
|
// Search for specific tokens (partial match, case-insensitive)
|
|
@@ -5369,16 +4979,16 @@ const searchResults = await sdk.listTokenBans({
|
|
|
5369
4979
|
});
|
|
5370
4980
|
|
|
5371
4981
|
// Paginate through all banned tokens
|
|
5372
|
-
let
|
|
4982
|
+
let cursor: string | undefined;
|
|
5373
4983
|
let hasMore = true;
|
|
5374
4984
|
while (hasMore) {
|
|
5375
|
-
const results = await sdk.listTokenBans({
|
|
5376
|
-
|
|
4985
|
+
const results = await sdk.listTokenBans({ cursor, limit: 20 });
|
|
4986
|
+
|
|
5377
4987
|
for (const ban of results.items) {
|
|
5378
|
-
|
|
4988
|
+
|
|
5379
4989
|
}
|
|
5380
|
-
hasMore =
|
|
5381
|
-
|
|
4990
|
+
hasMore = results.pageInfo.hasNextPage;
|
|
4991
|
+
cursor = results.pageInfo.nextCursor;
|
|
5382
4992
|
}
|
|
5383
4993
|
\`\`\`
|
|
5384
4994
|
|
|
@@ -5422,11 +5032,10 @@ const sdk = createLaunchpadSDK({ privateKey: 'your-private-key' });
|
|
|
5422
5032
|
|
|
5423
5033
|
// Check if a collection name is available
|
|
5424
5034
|
const available = await sdk.isNftCollectionAvailable('MyEpicNFTs');
|
|
5425
|
-
console.log('Collection available:', available);
|
|
5426
5035
|
|
|
5427
5036
|
// Get fee for claiming a collection
|
|
5428
5037
|
const claimFee = await sdk.getNftCollectionClaimFee();
|
|
5429
|
-
|
|
5038
|
+
|
|
5430
5039
|
\`\`\`
|
|
5431
5040
|
|
|
5432
5041
|
## Claim a Collection
|
|
@@ -5435,16 +5044,13 @@ console.log('Claim fee:', claimFee); // Usually "10000" GALA
|
|
|
5435
5044
|
// Claim an available collection name
|
|
5436
5045
|
const result = await sdk.claimNftCollection({
|
|
5437
5046
|
collectionName: 'MyEpicNFTs',
|
|
5438
|
-
description: 'Epic NFT collection for gaming',
|
|
5047
|
+
description: 'Epic NFT collection for gaming.',
|
|
5439
5048
|
});
|
|
5440
|
-
console.log('Collection claimed:', result.collectionName);
|
|
5441
|
-
console.log('Transaction ID:', result.transactionId);
|
|
5442
5049
|
|
|
5443
5050
|
// Fetch your owned collections
|
|
5444
5051
|
const collections = await sdk.fetchNftCollections(walletAddress);
|
|
5445
5052
|
for (const collection of collections) {
|
|
5446
|
-
|
|
5447
|
-
console.log(\` Status: \${collection.status}\`);
|
|
5053
|
+
|
|
5448
5054
|
}
|
|
5449
5055
|
\`\`\`
|
|
5450
5056
|
|
|
@@ -5453,13 +5059,12 @@ for (const collection of collections) {
|
|
|
5453
5059
|
\`\`\`typescript
|
|
5454
5060
|
// Get fee for creating a token class
|
|
5455
5061
|
const classCreateFee = await sdk.getNftTokenClassCreateFee();
|
|
5456
|
-
console.log('Create fee:', classCreateFee); // Usually "1000" GALA
|
|
5457
5062
|
|
|
5458
5063
|
// Create a token class (rarity tier)
|
|
5459
5064
|
const classResult = await sdk.createNftTokenClass({
|
|
5460
5065
|
collectionName: 'MyEpicNFTs',
|
|
5461
5066
|
tokenClassName: 'LegendaryWizard',
|
|
5462
|
-
description: 'Ultra-rare legendary wizard NFTs',
|
|
5067
|
+
description: 'Ultra-rare legendary wizard NFTs.',
|
|
5463
5068
|
maximumSupply: '100', // Max NFTs of this type
|
|
5464
5069
|
data: {
|
|
5465
5070
|
rarity: 'legendary',
|
|
@@ -5467,15 +5072,13 @@ const classResult = await sdk.createNftTokenClass({
|
|
|
5467
5072
|
power: '9000',
|
|
5468
5073
|
},
|
|
5469
5074
|
});
|
|
5470
|
-
console.log('Token class created:', classResult.tokenClassName);
|
|
5471
5075
|
|
|
5472
5076
|
// Fetch token classes for your collection
|
|
5473
5077
|
const classes = await sdk.fetchNftTokenClasses({
|
|
5474
5078
|
collectionName: 'MyEpicNFTs',
|
|
5475
5079
|
});
|
|
5476
5080
|
for (const tokenClass of classes) {
|
|
5477
|
-
|
|
5478
|
-
console.log(\` Current Supply: \${tokenClass.currentSupply}/\${tokenClass.maxSupply}\`);
|
|
5081
|
+
|
|
5479
5082
|
}
|
|
5480
5083
|
\`\`\`
|
|
5481
5084
|
|
|
@@ -5488,7 +5091,6 @@ const mintFeeEstimate = await sdk.estimateNftMintFee({
|
|
|
5488
5091
|
tokenClassName: 'LegendaryWizard',
|
|
5489
5092
|
quantity: 5,
|
|
5490
5093
|
});
|
|
5491
|
-
console.log('Estimated mint fee:', mintFeeEstimate); // Dynamic fee in GALA
|
|
5492
5094
|
|
|
5493
5095
|
// Estimate multiple operations at once
|
|
5494
5096
|
const bundleFee = await sdk.estimateNftOperationFees({
|
|
@@ -5498,9 +5100,9 @@ const bundleFee = await sdk.estimateNftOperationFees({
|
|
|
5498
5100
|
{ type: 'mint', quantity: 10 },
|
|
5499
5101
|
],
|
|
5500
5102
|
});
|
|
5501
|
-
|
|
5103
|
+
|
|
5502
5104
|
for (const op of bundleFee.breakdown) {
|
|
5503
|
-
|
|
5105
|
+
|
|
5504
5106
|
}
|
|
5505
5107
|
\`\`\`
|
|
5506
5108
|
|
|
@@ -5520,13 +5122,11 @@ const mintResult = await sdk.mintNft({
|
|
|
5520
5122
|
],
|
|
5521
5123
|
},
|
|
5522
5124
|
});
|
|
5523
|
-
console.log('Minted:', mintResult.quantityMinted);
|
|
5524
|
-
console.log('Transaction ID:', mintResult.transactionId);
|
|
5525
5125
|
|
|
5526
5126
|
// Check NFT balances
|
|
5527
5127
|
const balances = await sdk.fetchNftBalances(walletAddress);
|
|
5528
5128
|
for (const balance of balances) {
|
|
5529
|
-
|
|
5129
|
+
|
|
5530
5130
|
}
|
|
5531
5131
|
|
|
5532
5132
|
// Filter by collection
|
|
@@ -5543,18 +5143,16 @@ if (!available) throw new Error('Collection name taken');
|
|
|
5543
5143
|
// 2. Claim collection (10,000 GALA)
|
|
5544
5144
|
const claimResult = await sdk.claimNftCollection({
|
|
5545
5145
|
collectionName: 'MyEpicNFTs',
|
|
5546
|
-
description: 'My epic NFT collection',
|
|
5146
|
+
description: 'My epic NFT collection.',
|
|
5547
5147
|
});
|
|
5548
|
-
console.log('✓ Collection claimed');
|
|
5549
5148
|
|
|
5550
5149
|
// 3. Create token class (1,000 GALA)
|
|
5551
5150
|
const classResult = await sdk.createNftTokenClass({
|
|
5552
5151
|
collectionName: 'MyEpicNFTs',
|
|
5553
5152
|
tokenClassName: 'Legendary',
|
|
5554
|
-
description: 'Legendary tier NFTs',
|
|
5153
|
+
description: 'Legendary tier NFTs.',
|
|
5555
5154
|
maximumSupply: '1000',
|
|
5556
5155
|
});
|
|
5557
|
-
console.log('✓ Token class created');
|
|
5558
5156
|
|
|
5559
5157
|
// 4. Estimate mint fee
|
|
5560
5158
|
const fee = await sdk.estimateNftMintFee({
|
|
@@ -5562,7 +5160,6 @@ const fee = await sdk.estimateNftMintFee({
|
|
|
5562
5160
|
tokenClassName: 'Legendary',
|
|
5563
5161
|
quantity: 100,
|
|
5564
5162
|
});
|
|
5565
|
-
console.log(\`✓ Mint fee: \${fee} GALA\`);
|
|
5566
5163
|
|
|
5567
5164
|
// 5. Mint NFTs
|
|
5568
5165
|
const mintResult = await sdk.mintNft({
|
|
@@ -5571,11 +5168,10 @@ const mintResult = await sdk.mintNft({
|
|
|
5571
5168
|
quantity: 100,
|
|
5572
5169
|
to: userWallet,
|
|
5573
5170
|
});
|
|
5574
|
-
console.log('✓ Minted:', mintResult.quantityMinted);
|
|
5575
5171
|
|
|
5576
5172
|
// 6. Verify ownership
|
|
5577
5173
|
const balances = await sdk.fetchNftBalances(userWallet, 'MyEpicNFTs');
|
|
5578
|
-
|
|
5174
|
+
|
|
5579
5175
|
\`\`\`
|
|
5580
5176
|
|
|
5581
5177
|
**MCP Tool Equivalents:**
|
|
@@ -5590,6 +5186,226 @@ console.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity
|
|
|
5590
5186
|
- \`gala_launchpad_fetch_nft_token_classes\`
|
|
5591
5187
|
- \`gala_launchpad_mint_nft\`
|
|
5592
5188
|
- \`gala_launchpad_fetch_nft_balances\`
|
|
5189
|
+
`,
|
|
5190
|
+
// ============================================================================
|
|
5191
|
+
// TOKEN IDENTIFICATION: Understanding Token Formats (v5.14.0+)
|
|
5192
|
+
// ============================================================================
|
|
5193
|
+
// These conceptual topics help AI assistants understand when to use which
|
|
5194
|
+
// token identifier format (tokenName vs tokenClassKey).
|
|
5195
|
+
// ============================================================================
|
|
5196
|
+
'token-identification': `
|
|
5197
|
+
# Token Identification in Launchpad SDK
|
|
5198
|
+
|
|
5199
|
+
The SDK uses **TWO distinct token identifier formats**. Using the wrong format causes errors.
|
|
5200
|
+
|
|
5201
|
+
## Format 1: Token Name (Launchpad/Bonding Curve Tokens)
|
|
5202
|
+
|
|
5203
|
+
- **Format**: Simple lowercase string, 3-20 alphanumeric characters
|
|
5204
|
+
- **Examples**: \`"anime"\`, \`"demonkpop"\`, \`"shoewars"\`
|
|
5205
|
+
- **Parameter**: Usually \`tokenName\`
|
|
5206
|
+
- **Used for**: Bonding curve operations (before graduation)
|
|
5207
|
+
|
|
5208
|
+
\`\`\`typescript
|
|
5209
|
+
// ✅ CORRECT - Bonding curve buy
|
|
5210
|
+
await sdk.buy({ tokenName: 'anime', amount: '100', type: 'native' });
|
|
5211
|
+
|
|
5212
|
+
// ✅ CORRECT - Bonding curve sell
|
|
5213
|
+
await sdk.sell({ tokenName: 'anime', amount: '50', type: 'tokens' });
|
|
5214
|
+
|
|
5215
|
+
// ✅ CORRECT - Check pool status
|
|
5216
|
+
const pool = await sdk.fetchPools({ tokenName: 'anime' });
|
|
5217
|
+
\`\`\`
|
|
5218
|
+
|
|
5219
|
+
## Format 2: TokenClassKey (GalaChain/DEX Tokens)
|
|
5220
|
+
|
|
5221
|
+
- **Format**: Pipe-delimited string: \`collection|category|type|additionalKey\`
|
|
5222
|
+
- **Examples**: \`"GALA|Unit|none|none"\`, \`"GUSDC|Unit|none|eth:0xa0b..."\`
|
|
5223
|
+
- **Parameter**: Usually \`tokenId\`, \`fromToken\`, \`toToken\`
|
|
5224
|
+
- **Used for**: DEX swaps, LP operations, standard GalaChain tokens
|
|
5225
|
+
|
|
5226
|
+
\`\`\`typescript
|
|
5227
|
+
// ✅ CORRECT - DEX swap (requires full tokenClassKey)
|
|
5228
|
+
const quote = await sdk.getSwapQuoteExactInput('GALA|Unit|none|none', 'GUSDC|Unit|none|eth:0xa0b...', '100');
|
|
5229
|
+
await sdk.executeSwap('GALA|Unit|none|none', 'GUSDC|Unit|none|eth:0xa0b...', '100', quote.estimatedOutput, quote.feeTier);
|
|
5230
|
+
|
|
5231
|
+
// ✅ CORRECT - Add DEX liquidity
|
|
5232
|
+
await sdk.addSwapLiquidityByPrice({
|
|
5233
|
+
token0: 'GALA|Unit|none|none',
|
|
5234
|
+
token1: 'GUSDC|Unit|none|eth:0xa0b...',
|
|
5235
|
+
fee: 3000,
|
|
5236
|
+
minPrice: '0.01',
|
|
5237
|
+
maxPrice: '0.05',
|
|
5238
|
+
amount0Desired: '1000',
|
|
5239
|
+
amount1Desired: '50'
|
|
5240
|
+
});
|
|
5241
|
+
\`\`\`
|
|
5242
|
+
|
|
5243
|
+
## Common Mistakes
|
|
5244
|
+
|
|
5245
|
+
\`\`\`typescript
|
|
5246
|
+
// ❌ WRONG - Bare symbol for DEX (throws ValidationError)
|
|
5247
|
+
await sdk.executeSwap('GALA', 'GUSDC', '100', output, fee);
|
|
5248
|
+
|
|
5249
|
+
// ❌ WRONG - TokenClassKey for bonding curve
|
|
5250
|
+
await sdk.buy({ tokenName: 'Token|Unit|ANIME|client:gala-launchpad', amount: '100' });
|
|
5251
|
+
|
|
5252
|
+
// ❌ WRONG - Simple name for DEX quote
|
|
5253
|
+
await sdk.getSwapQuoteExactInput('anime', 'GALA|Unit|none|none', '100');
|
|
5254
|
+
\`\`\`
|
|
5255
|
+
|
|
5256
|
+
## Method-to-Format Quick Reference
|
|
5257
|
+
|
|
5258
|
+
| Method | tokenName | tokenClassKey | Notes |
|
|
5259
|
+
|--------|:---------:|:-------------:|-------|
|
|
5260
|
+
| \`buy()\` | ✅ | ❌ | Bonding curve only |
|
|
5261
|
+
| \`sell()\` | ✅ | ❌ | Bonding curve only |
|
|
5262
|
+
| \`graduateToken()\` | ✅ | ❌ | Triggers DEX migration |
|
|
5263
|
+
| \`executeSwap()\` | ❌ | ✅ | DEX only |
|
|
5264
|
+
| \`getSwapQuote*()\` | ❌ | ✅ | DEX quotes |
|
|
5265
|
+
| \`addSwapLiquidity*()\` | ❌ | ✅ | LP operations |
|
|
5266
|
+
| \`transferToken()\` | ✅ | ✅ | Both work |
|
|
5267
|
+
| \`fetchTokenPrice()\` | ✅ | ✅ | Smart router |
|
|
5268
|
+
|
|
5269
|
+
## Getting TokenClassKey for a Graduated Token
|
|
5270
|
+
|
|
5271
|
+
**⚠️ IMPORTANT: Never construct a tokenClassKey manually!**
|
|
5272
|
+
|
|
5273
|
+
The tokenClassKey contains the token's **symbol** (set at creation), which may differ
|
|
5274
|
+
from the tokenName. Always query for it:
|
|
5275
|
+
|
|
5276
|
+
\`\`\`typescript
|
|
5277
|
+
// From pool data after graduation (RECOMMENDED)
|
|
5278
|
+
const pool = await sdk.fetchPools({ tokenName: 'anime' });
|
|
5279
|
+
const tokenClassKey = pool.items[0]?.tokenClassKey;
|
|
5280
|
+
// → Returns the actual tokenClassKey (symbol may differ from tokenName!)
|
|
5281
|
+
|
|
5282
|
+
// Or use the resolver
|
|
5283
|
+
const resolved = await sdk.resolveTokenClassKey('anime');
|
|
5284
|
+
// → Queries backend for the correct tokenClassKey
|
|
5285
|
+
\`\`\`
|
|
5286
|
+
|
|
5287
|
+
## Well-Known Token Constants
|
|
5288
|
+
|
|
5289
|
+
\`\`\`typescript
|
|
5290
|
+
const GALA = 'GALA|Unit|none|none';
|
|
5291
|
+
const GUSDC = 'GUSDC|Unit|none|eth:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
5292
|
+
const WETH = 'GETH|Unit|none|eth:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
|
|
5293
|
+
\`\`\`
|
|
5294
|
+
|
|
5295
|
+
**See Also:** \`src/types/token.types.ts\` for full type definitions and utilities.
|
|
5296
|
+
`,
|
|
5297
|
+
'graduation-detection': `
|
|
5298
|
+
# Detecting Token Graduation Status
|
|
5299
|
+
|
|
5300
|
+
Launchpad tokens transition from bonding curve to DEX when they "graduate."
|
|
5301
|
+
This affects which SDK methods work and which token format to use.
|
|
5302
|
+
|
|
5303
|
+
## Checking Graduation Status
|
|
5304
|
+
|
|
5305
|
+
\`\`\`typescript
|
|
5306
|
+
import { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';
|
|
5307
|
+
|
|
5308
|
+
async function checkGraduationStatus(tokenName: string) {
|
|
5309
|
+
const sdk = createLaunchpadSDK();
|
|
5310
|
+
|
|
5311
|
+
// Method 1: Check via pool data (recommended)
|
|
5312
|
+
const pool = await sdk.fetchPools({ tokenName });
|
|
5313
|
+
const isGraduated = pool.items[0]?.isGraduated ?? false;
|
|
5314
|
+
|
|
5315
|
+
// Method 2: Use the helper method
|
|
5316
|
+
const graduated = await sdk.isTokenGraduated(tokenName);
|
|
5317
|
+
|
|
5318
|
+
return graduated;
|
|
5319
|
+
}
|
|
5320
|
+
\`\`\`
|
|
5321
|
+
|
|
5322
|
+
## Handling Graduated vs Non-Graduated Tokens
|
|
5323
|
+
|
|
5324
|
+
\`\`\`typescript
|
|
5325
|
+
async function tradeToken(tokenName: string, galaAmount: string) {
|
|
5326
|
+
const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });
|
|
5327
|
+
|
|
5328
|
+
// Check graduation status first
|
|
5329
|
+
const pool = await sdk.fetchPools({ tokenName });
|
|
5330
|
+
const isGraduated = pool.items[0]?.isGraduated ?? false;
|
|
5331
|
+
|
|
5332
|
+
if (isGraduated) {
|
|
5333
|
+
// Token is on DEX - use tokenClassKey format
|
|
5334
|
+
const tokenClassKey = pool.items[0]?.tokenClassKey;
|
|
5335
|
+
if (!tokenClassKey) throw new Error('Token graduated but no tokenClassKey found');
|
|
5336
|
+
|
|
5337
|
+
const quote = await sdk.getSwapQuoteExactInput(
|
|
5338
|
+
'GALA|Unit|none|none',
|
|
5339
|
+
tokenClassKey,
|
|
5340
|
+
galaAmount
|
|
5341
|
+
);
|
|
5342
|
+
|
|
5343
|
+
const result = await sdk.executeSwap(
|
|
5344
|
+
'GALA|Unit|none|none',
|
|
5345
|
+
tokenClassKey,
|
|
5346
|
+
galaAmount,
|
|
5347
|
+
quote.estimatedOutput,
|
|
5348
|
+
quote.feeTier
|
|
5349
|
+
);
|
|
5350
|
+
|
|
5351
|
+
return { method: 'DEX', result };
|
|
5352
|
+
} else {
|
|
5353
|
+
// Token is on bonding curve - use simple tokenName
|
|
5354
|
+
const calc = await sdk.calculateBuyAmount({
|
|
5355
|
+
tokenName,
|
|
5356
|
+
amount: galaAmount,
|
|
5357
|
+
type: 'native'
|
|
5358
|
+
});
|
|
5359
|
+
|
|
5360
|
+
const result = await sdk.buy({
|
|
5361
|
+
tokenName,
|
|
5362
|
+
amount: galaAmount,
|
|
5363
|
+
type: 'native',
|
|
5364
|
+
expectedAmount: calc.amount,
|
|
5365
|
+
slippageToleranceFactor: 0.01
|
|
5366
|
+
});
|
|
5367
|
+
|
|
5368
|
+
return { method: 'BondingCurve', result };
|
|
5369
|
+
}
|
|
5370
|
+
}
|
|
5371
|
+
\`\`\`
|
|
5372
|
+
|
|
5373
|
+
## Subscribing to Graduation Events
|
|
5374
|
+
|
|
5375
|
+
\`\`\`typescript
|
|
5376
|
+
// Listen for new DEX pool creation (graduation event)
|
|
5377
|
+
sdk.onDexPoolCreation((event) => {
|
|
5378
|
+
console.log(\`Token graduated: \${event.tokenName}\`);
|
|
5379
|
+
console.log(\`New tokenClassKey: \${event.tokenClassKey}\`);
|
|
5380
|
+
// Update your local state to use DEX trading
|
|
5381
|
+
});
|
|
5382
|
+
|
|
5383
|
+
// Listen for new launchpad token creation
|
|
5384
|
+
sdk.onLaunchpadTokenCreation((event) => {
|
|
5385
|
+
console.log(\`New token launched: \${event.tokenName}\`);
|
|
5386
|
+
// This token is on bonding curve, use tokenName
|
|
5387
|
+
});
|
|
5388
|
+
\`\`\`
|
|
5389
|
+
|
|
5390
|
+
## Key Differences: Pre vs Post Graduation
|
|
5391
|
+
|
|
5392
|
+
| Aspect | Pre-Graduation | Post-Graduation |
|
|
5393
|
+
|--------|----------------|-----------------|
|
|
5394
|
+
| Trading venue | Bonding curve | GalaSwap DEX |
|
|
5395
|
+
| Token format | \`tokenName\` ("anime") | \`tokenClassKey\` ("Token\\|Unit\\|ANIME\\|...") |
|
|
5396
|
+
| Buy method | \`sdk.buy()\` | \`sdk.executeSwap()\` |
|
|
5397
|
+
| Sell method | \`sdk.sell()\` | \`sdk.executeSwap()\` |
|
|
5398
|
+
| Liquidity | None | LP positions available |
|
|
5399
|
+
| Price source | Bonding curve formula | DEX pool |
|
|
5400
|
+
|
|
5401
|
+
## Why This Matters
|
|
5402
|
+
|
|
5403
|
+
- **Wrong format = Error**: Using tokenName for DEX throws \`ValidationError\`
|
|
5404
|
+
- **Wrong method = Error**: Using \`buy()\` for graduated token may fail
|
|
5405
|
+
- **Performance**: Checking graduation once avoids repeated API calls
|
|
5406
|
+
- **User experience**: Show appropriate UI based on trading venue
|
|
5407
|
+
|
|
5408
|
+
**Related Topics:** \`token-identification\`, \`dex-trading\`, \`buy-tokens\`, \`pool-graduation\`
|
|
5593
5409
|
`,
|
|
5594
5410
|
};
|
|
5595
5411
|
/**
|
|
@@ -5597,7 +5413,7 @@ console.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity
|
|
|
5597
5413
|
*/
|
|
5598
5414
|
exports.explainSdkUsageTool = {
|
|
5599
5415
|
name: 'gala_launchpad_explain_sdk_usage',
|
|
5600
|
-
description: 'Get detailed SDK code examples for all 224 MCP tools (mapping to ~208 SDK methods) organized into
|
|
5416
|
+
description: 'Get detailed SDK code examples for all 224 MCP tools (mapping to ~208 SDK methods) organized into 51 composite workflow topics covering: buy-tokens, sell-tokens, pool-graduation, fetch-pools, balances, token-creation, token-status, dex-trading, liquidity-positions, advanced-dex-analysis, price-history, token-details, token-distribution, profile-management, multi-wallet, transfers, locks, trading-analytics, utilities-and-helpers, utilities-system, error-handling, installation, local-calculations, spot-prices-smart-routing, event-subscriptions, mcp-to-sdk-mapping, DEX leaderboards, bridge-operations, dex-token-discovery, wrap-unwrap-operations, referral-system, account-management, session-auth, streaming, stream-chat, ban-management, api-key-management, moderator-invites, overseer-invites, content-flag-management, content-reactions, trade-history, token-ban-management, nft-collection-management, token-identification (explains tokenName vs tokenClassKey formats), and graduation-detection (how to check if a token has graduated from bonding curve to DEX).',
|
|
5601
5417
|
inputSchema: {
|
|
5602
5418
|
type: 'object',
|
|
5603
5419
|
properties: {
|
|
@@ -5653,8 +5469,10 @@ exports.explainSdkUsageTool = {
|
|
|
5653
5469
|
'trade-history',
|
|
5654
5470
|
'token-ban-management',
|
|
5655
5471
|
'nft-collection-management',
|
|
5472
|
+
'token-identification',
|
|
5473
|
+
'graduation-detection',
|
|
5656
5474
|
],
|
|
5657
|
-
description: 'The SDK usage topic to explain',
|
|
5475
|
+
description: 'The SDK usage topic to explain.',
|
|
5658
5476
|
},
|
|
5659
5477
|
},
|
|
5660
5478
|
required: ['topic'],
|