@cetusprotocol/ vaults-sdk (英语)
SDK提供了一个用于自动化流动性管理的Vaults模块. 这一模块使用户能够自动管理其流动性状况,包括及时再投资费用和奖励,以及在必要时进行再平衡。 当用户将信使存入地壳时,这些信使用于提供地壳所持有位置内的流动性,而LP信使被铸造来代表其在流动性中的份额.
开始
如何使用断层SDK?
安装
开始使用 Vaults SDK,您首先需要在您的 TypeScript 项目中安装:
npm 链接 : https://www.npmjs.com/package/@cetusprotocol/vaults-sdk (中文(简体) )
npm install @cetusprotocol/vaults-sdk
设置
将 SDK 导入到您打算使用的 TypeScript 文件 :
import { CetusVaultsSDK } from '@cetusprotocol/vaults-sdk'
初始化 SDK
以所需的配置参数初始化 SDK. 这通常包括必要时设置网络和API密钥.
如果您想使用主网和官方的Sui rpc url,可以如下方式进行:
const sdk = CetusVaultsSDK.createSDK()
如果您想要设置自己的完整节点URL或网络( 您可以选择网络的“ mainnet ” 或“ testnet ” ), 您可以选择如下:
const env = 'mainnet'
const full_rpc_url = 'YOUR_FULL_NODE_URL'
const wallet = 'YOUR_WALLET_ADDRESS'
const sdk = CetusVaultsSDK.createSDK({ env })
如果您想要设置自己的完整节点 URL 或 SuiGrpcClient, 您可以按以下方式设置 :
const sdk = CetusVaultsSDK.createSDK({ env, sui_client })
// or
const sdk = CetusVaultsSDK.createSDK({ env, full_rpc_url })
使用量
连接钱包后,如果需要使用钱包地址来做某事,应当设置在 sdk.setSenderAddress。 。 。 .
const wallet = 'YOUR_WALLET_ADDRESS'
sdk.setSenderAddress(wallet)
如果您需要更改您的 rpc url, 您可以按以下方式进行 :
const new_rpc_url = 'YOUR_NEW_FULL_NODE_URL'
sdk.updateFullRpcUrl(new_rpc_url)
1. 按所有者地址获取默认值
这种方法可以检索所有与特定所有者地址相关的金库 .
const owner = '0x...'
const vaults_result = await sdk.Vaults.getOwnerVaultsBalance(owner)
// result
[
{
vault_id: '0x5732b81e659bd2db47a5b55755743dde15be99490a39717abc80d62ec812bcb6',
clmm_pool_id: '0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535',
owner: '0x...',
lp_token_type: '0xb490d6fa9ead588a9d72da07a02914da42f6b5b1339b8118a90011a42b67a44f::lp_token::LP_TOKEN',
lp_token_balance: '739242144247',
liquidity: '799210772591',
tick_lower_index: 100,
tick_upper_index: 394,
amount_a: '5514867803',
amount_b: '6197505499',
coin_type_a: '0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT',
coin_type_b: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI'
},
// ...more vaults
]
2. 通过身份识别获取默认值
这种方法可以获取特定金库的详细信息.
const vault_id = 'YOUR_VAULT_ID'
const vault = await sdk.Vaults.getVault(vault_id)
3. 获取地壳资产
这种方法为特定金库取回了LP符号余额.
const ft_asset = await sdk.getOwnerCoinBalances('0x0..', vault?.lp_token_type)
4. 存款业务
将流动资金存入金库。 用户可以存入硬币A和硬币B,相關的LP Token会被刻制给用户.
const input_amount = toDecimalsAmount(3, 9).toString()
const InputType = {
Both: 'both',
OneSide: 'oneSide',
}
// Calculate deposit amount
const result = await sdk.Vaults.calculateDepositAmount({
vault_id,
fix_amount_a: false,
input_amount,
slippage: 0.01,
side: InputType.OneSide,
})
// Build and send transaction
const tx = new Transaction()
const params: DepositParams = {
vault_id,
slippage: 0.01,
deposit_result: result,
coin_object_b: VaultsUtils.buildCoinWithBalance(
BigInt(input_amount),
'0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',
tx
),
return_lp_token: true,
}
const lp_coin = await sdk.Vaults.deposit(params, tx)
if (lp_coin) {
tx.transferObjects([lp_coin], '0x0..')
}
5. 撤出行动
从保险库取出流动资金。 用户可以取出LP代币并接收所基于的资产.
/**
* @param {Object} params - The parameters for the calculateWithdrawAmount function.
* @param {string} params.vault_id - The ID of the vault.
* @param {boolean} params.fix_amount_a - Whether to fix the amount of token A. If true, the input_amount represents token A amount; if false, it represents token B amount.
* @param {string} params.input_amount - The input amount. If is_ft_input is true, this is the LP token amount; if false, this is the token amount (either A or B based on fix_amount_a).
* @param {number} params.slippage - The slippage percentage (eg: 0.01 = 1%)
* @param {boolean} params.is_ft_input - Whether the input is LP token. If true, input_amount is LP token amount; if false, input_amount is token amount.
* @param {InputType} params.side - The withdrawal type. Both for withdrawing both tokens, OneSide for withdrawing a single token.
* @param {string} params.max_ft_amount - The amount of LP tokens held by the user. In OneSide mode, this value is used to balance the withdrawal amount.
*/
const result = await sdk.Vaults.calculateWithdrawAmount({
vault_id,
fix_amount_a: true,
input_amount: '1000000000',
slippage: 0.01,
is_ft_input: false,
side: InputType.Both,
max_ft_amount: '',
})
/**
* @param {Object} params - The parameters for the withdraw function.
* @param {string} params.vault_id - The ID of the vault.
* @param {number} params.slippage - The slippage percentage (0-1).
* @param {string} params.ft_amount - The amount of LP tokens to burn.
* @param {string} params.return_coin - Optional. If set to true, returns the coin object. The user needs to handle it.
*/
const tx = new Transaction()
const { return_coin_a, return_coin_b } = await sdk.Vaults.withdraw(
{
vault_id,
slippage: 0.01,
ft_amount: result.burn_ft_amount,
return_coin: true,
},
tx
)
if (return_coin_a) {
tx.transferObjects([return_coin_a], sdk.senderAddress)
}
if (return_coin_b) {
tx.transferObjects([return_coin_b], sdk.senderAddress)
}
const send_key_pair = 'THE_KEY_PAIR_GENERATED_BY_YOUR_PRIVATE_KEY'
const tx_result = await sdk.fullClient.sendTransaction(send_key_pair, payload)
6. Vest业务
6.1 获取 Vault 的 Vest 信息列表
为多个保险库获取背心信息.
const vestInfoList = await sdk.Vest.getVaultsVestInfoList([vaultId])
6.2 获得单位断层最优信息
找一个金库的背心信息.
async getVaultsVestInfo(vault_id: string, force_refresh = true): Promise<VaultsVestInfo>
6.3 获取用户的 Vault Vest NFT 列表
获取指定地址拥有的所有 Vault Vest NFT 。 每个NFT包含以下信息:
- 编号: NFT ID
- 索引:索引
- 保险库 id: 默认 ID
- lp amount: LP 令牌数量
- 已赎回的金额 amount: redeemed ment
- 已损坏 a:已损坏
- 损坏 b:托肯 B 损坏
- 周期 infos: 期间信息
- uRL: NFT URL (英语)
- 名称: NFT 名称
- 发件人 id: Vester ID
const vestNFTList = await sdk.Vest.getOwnerVaultVestNFT(senderAddress)
6.4 构建重置交易
构建赎回交易有效载荷. 参数描述 :
- 选项:赎回选项的组合,每个选项包含:
- 保险库 id: 默认 ID
- 背书 nft id: Vesting NFT ID
- 期间:
- 硬币类型 a:token A类型
- 硬币类型 b:托肯 B类型
- tx: 可选交易对象
const vestInfo = await sdk.Vest.getVaultsVestInfo(vaultId)
const tx = await sdk.Vest.buildRedeemPayload([
{
vault_id: vaultId,
vesting_nft_id: '0x...',
period: 1,
coin_type_a: vestInfo.coin_type_a,
coin_type_b: vestInfo.coin_type_b,
}
])
// Execute transaction
const transferTxn = await sdk.FullClient.executeTx(send_key_pair, tx, false)
7. 合同出错代码
cetus 智能合同可能返回以下错误代码:
| 模块 | 错误代码 | 说明 | 合同方法 |
|---|---|---|---|
| 地窖: 地窖 | 1个 | 低于分钟限额的数额 | 删除 |
| 地窖: 地窖 | 2个 | 位置大小错误 | 存款、转移、再投资、移动、流动、再平衡、收割、收割、收割、收割、收割、收割、收割、收割、收割、收割等 |
| 地窖: 地窖 | 3个 | 套件版本贬值 | 检查( p) |
| 地窖: 地窖 | 页:1 | 超额 | 存款 |
| 地窖: 地窖 | 页:1 | 切入量为 0 | 删除, 保存 |
| 地窖: 地窖 | 6个 | 池已暂停 | 获取 收获 资产 by amount |
| 地窖: 地窖 | 第7条 | 无效的硬币类型 | 迁移 流动性 |
| 地窖: 地窖 | 第8条 | 重新平衡增加流动性出错 | 删除 |
| 地窖: 地窖 | 第9条 | 钱不够 | 删除 |
| 地窖: 地窖 | 10个 | 无效的协议收费标准 | 更新 protocol fee rate |
| 地窖: 地窖 | 第11个 | 没有协议费申请许可 | 检查 protocol fee claim 作用 |
| 地窖: 地窖 | 第12条 | 没有操作管理权限 | 检查 再投资 作用,检查 操作 作用 |
| 地窖: 地窖 | 第13条 | 没有池管理权限 | 复选( pool manager 作用) |
| 地窖: 地窖 | 页:1 | 非法财务管制 | 创建默认( v) |
| 地窖: 地窖 | 15个 | 错误的软件包版本 | 更新 package version |
| 地窖: 地窖 | 16个 | 达到的配额 | 存款 |
| 地窖: 地窖 | 页:1 | 未运行 | 回收者、收割者、收割者、收费者、流动者、再投资者、回收者、存款者 |
| 地窖: 地窖 | 第 18 条 | 未重新平衡错失 | 重新平衡 |
| 地窖: 地窖 | 第 19 条 | 配额类型名称出错 | 计算( u) |
| 地窖: 地窖 | 20国 | 相同的硬币类型 | 新组合 key |
| 地窖: 地窖 | 21国 | 无效的硬币类型序列 | 添加文件夹( o) |
| 地窖: 地窖 | 22个 | 铜对存在 | 再投资 收割 资产, flash loan, update slipppage, remove oracle pool |
| 地窖: 地窖 | 第23条 | 无性别歧视的阴茎对 | 闪出( l) |
| 地窖: 地窖 | 24个 | 不正确的闪存贷款金额 | 偿还( f) |
| 地窖: 地窖 | 第25条 | 答错 | 闪出( l) |
| 地窖: 地窖 | 第 26 条 | 甲骨文池出错 | 重新平衡 |
| 地窖: 地窖 | 27个 | Flashloan 计数非零 | 重新平衡 |
| 地窖: 地窖 | 第28条 | 完成不匹配的再平衡阈值 | 重新平衡 |
| 地窖: 地窖 | 29个 | 收获资产不足 | 获取 收获 资产 by amount |
| 地窖: 地窖 | 30个 | 无效的金库操作 | 再投资 收成 资产 |
更多关于 Cetus
使用以下链接来进一步了解 Cetus :
学习更多与Cetus合作 Cetus 文档。 。 。 .
加入Cetus社区 Cetus 迪斯科尔。 。 。 .
许可证
麻省理工学院