UNPKG

@suiware/ai-tools

Version:

Pluggable tools for Vercel AI SDK which allow AI assistants to interact with Sui Network and perform various actions.

1 lines 6.16 kB
{"version":3,"sources":["../src/services/SuiStakingService.ts"],"names":[],"mappings":"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","file":"chunk-EIQJRNDC.mjs","sourcesContent":["import { DelegatedStake } from '@mysten/sui/client'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { SUI_SYSTEM_STATE_OBJECT_ID } from '@mysten/sui/utils'\nimport { formatBalance, suiToMist } from '../core/utils/utils'\nimport { SuiService } from './SuiService'\n\nexport class SuiStakingService {\n private suiService: SuiService\n\n // @todo: Make the validator address configurable.\n private readonly VALIDATOR_ADDRESSES: Record<string, string> = {\n mainnet:\n '0x4fffd0005522be4bc029724c7f0f6ed7093a6bf3a09b90e62f61dc15181e1a3e', // Mysten-1\n testnet:\n '0x6d6e9f9d3d81562a0f9b767594286c69c21fea741b1c2303c5b7696d6c63618a', // Mysten-1\n }\n\n constructor() {\n this.suiService = SuiService.getInstance()\n }\n\n /**\n * Stake SUI tokens to a validator.\n *\n * @param amount - The amount to stake in whole SUI units.\n * @returns The transaction digest.\n */\n public async stake(amount: string | number): Promise<string> {\n const amountInMist = suiToMist(amount)\n\n const tx = new Transaction()\n\n const [coin] = tx.splitCoins(tx.gas, [tx.pure.u64(amountInMist)])\n\n const validatorAddress =\n this.VALIDATOR_ADDRESSES[this.suiService.getNetwork()]\n\n tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: [\n tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n coin,\n tx.pure.address(validatorAddress),\n ],\n })\n\n const response = await this.suiService.executeTransaction(tx)\n if (!response.digest) {\n throw new Error('Staking transaction failed')\n }\n\n return response.digest\n }\n\n /**\n * Unstake all stakes.\n *\n * @returns The transaction digests.\n */\n public async unstake(): Promise<string> {\n const stakedObjects = await this.getStakedObjects()\n\n if (stakedObjects.length === 0) {\n throw new Error('No staked objects found')\n }\n\n const tx = new Transaction()\n\n stakedObjects.forEach((x) => {\n x.stakes.forEach(({ stakedSuiId }) => {\n tx.moveCall({\n target: '0x3::sui_system::request_withdraw_stake',\n arguments: [\n tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n tx.object(stakedSuiId),\n ],\n })\n })\n })\n\n const response = await this.suiService.executeTransaction(tx)\n if (!response.digest) {\n throw new Error('Unstaking transaction failed')\n }\n\n return response.digest\n }\n\n /**\n * Get all staked objects.\n *\n * @returns Array of delegated stake objects.\n */\n public async getStakedObjects(): Promise<DelegatedStake[]> {\n const stakedObjects = await this.suiService.getSuiClient().getStakes({\n owner: this.suiService.getAddress(),\n })\n\n return stakedObjects\n }\n\n /**\n * Get the total staked Sui balance.\n *\n * @returns The total staked balance.\n */\n public async getTotalStakedBalance(): Promise<string> {\n const stakedObjects = await this.getStakedObjects()\n\n // Sum up all stake principals from all stakes.\n const amountMist = stakedObjects.reduce((total, delegatedStake) => {\n // Each delegated stake can have multiple stakes.\n const stakesTotal = delegatedStake.stakes.reduce(\n (stakeTotal, stake) => stakeTotal + BigInt(stake.principal),\n BigInt(0)\n )\n return total + stakesTotal\n }, BigInt(0))\n\n return formatBalance(amountMist, 9)\n }\n}\n"]}