荣杰
说明: 恩杰快来了 本文中记录的API为: 早期整合和反馈;金库可用性和生产准备 将提前宣布.
Earn Kit是DeFi出借金库收入流的圆形SDK. 它提供类型 用于发现金库、取取钱包位置、预览的操作 押金、提款、奖励债权、执行押金、提款、以及 债权奖励交易.
安装
npm install @circle-fin/earn-kit
# or
yarn add @circle-fin/earn-kit
为您使用的钱包堆栈安装适配器 。 对于EVM流量:
npm install @circle-fin/adapter-viem-v2 viem
# or
yarn add @circle-fin/adapter-viem-v2 viem
快速启动
import { Blockchain, EarnChain, EarnKit } from '@circle-fin/earn-kit'
import { createViemAdapterFromPrivateKey } from '@circle-fin/adapter-viem-v2'
const kit = new EarnKit()
const adapter = createViemAdapterFromPrivateKey({
privateKey: process.env.PRIVATE_KEY,
})
const quote = await kit.getDepositQuote({
from: { adapter, chain: EarnChain.Arc_Testnet },
vaultAddress: '0xAabbeF1D3971c710276ed41eC791BbE14CdB8E88',
amount: '100.50',
})
console.log(`Expected shares: ${quote.expectedShares.amount}`)
const depositResult = await kit.deposit({
from: { adapter, chain: EarnChain.Arc_Testnet },
vaultAddress: '0xAabbeF1D3971c710276ed41eC791BbE14CdB8E88',
amount: '100.50',
})
console.log(`Deposit submitted: ${depositResult.txHash}`)
存款
同链存款保持现有批准和收益行动流动。 跨链
只有在 to 已存在 to.chain 与
from.chain。 。 。 .
const bridgeDeposit = await kit.deposit({
from: { adapter, chain: Blockchain.Ethereum_Sepolia },
to: {
chain: EarnChain.Arc_Testnet,
recipientAddress: '0x1234567890123456789012345678901234567890',
},
vaultAddress: '0xAabbeF1D3971c710276ed41eC791BbE14CdB8E88',
amount: '100.50',
})
console.log(`Bridge deposit submitted: ${bridgeDeposit.execId}`)
对于跨链存款, to.recipientAddress 是目的地钱包
接收金库位置 from.address 可作为可选
源钱包覆盖 。 返回的结果包含桥执行ID,
提交状态、源链、目的地链、金库地址、金额和
准备捆绑过期时间戳。 SDK 生成桥执行 ID
财务报告和审定财务报表 retry() 失败后恢复同一桥的行刑.
跨链收益存款目前支持Ethereum Sepolia, Arbitrum Sepolia, 以 CArc Testnet 为源链 链条.
退出费
提款时引出 quote.fees. 环取费
标记为 type: 'circle' 因此,集成器可以显示收费预览
电话 withdraw。 。 。 .
const quote = await kit.getWithdrawalQuote({
from: { adapter, chain: EarnChain.Arc_Testnet },
vaultAddress: '0xAabbeF1D3971c710276ed41eC791BbE14CdB8E88',
amount: '50.00',
})
const circleFee = quote.fees.find((fee) => fee.type === 'circle')
if (circleFee === undefined) {
console.log('Circle fee: 0')
} else {
console.log(`Circle fee: ${circleFee.amount} ${circleFee.symbol}`)
}
当不适用圆形收费,包括后端收费旗被禁用时,
quote.fees 没有 type: 'circle' 输入。 EinKit 格式收费金额
人类可读小数字符串, 与工具箱级其他引用一致
表面。 读取返回的收费项 symbol 而不是假设一个固定
收费标志.
断接操作( SCA 钱包)
同链 deposit 财务报告和审定财务报表 withdraw 通常提交两个顺序
交易: ERC-20/金库共享 approve 然后是恩典 execute。 。 。 .
当连接的适配器支持原子分批时, SDK 将
approve 财务报告和审定财务报表 execute 换成一批 适配器可以提交
批次通过EIP-5792, Circle钱包挑战,或ERC-4337用户操作.
这将删除用户批准但从未执行的部分状态窗口
,并在单个钱包交互中确认.
Batching是自动的,不需要更改代码——它只有在 全部 如下情况:
- 行动是 同链
deposit或者说withdraw(连锁存款) 使用EIP-3009签名,而不是approve+ 键execute因此批量处理不 (适用). - 这个
from.chain是一个EVM链. - 所签有效载荷含有正向符号拉出并未得到批准 跳过.
- 钱包适配器报告对链和地址的原子批次支持.
SDK在提交前先读取当前备抵. 当需要补上时,
批发 [approve, execute];当津贴已经支付该数额时,
它提交 [execute] 无需通过同一批次的 API
核准。 操作中没有带有批准符号的输入、EOA钱包和
没有批次支持的钱包保持现有相继行为不变.
要强迫相继流动, 即使一个批量的可处理钱包, 设置
batchTransactions: false 操作中 config数字 :
await kit.deposit({
from: { adapter, chain: EarnChain.Arc_Testnet },
vaultAddress: '0xAabbeF1D3971c710276ed41eC791BbE14CdB8E88',
amount: '100.50',
config: { batchTransactions: false }, // always use sequential approve -> execute
})
发现缺陷
将链条上可用的每个金库进行平移, 不管理平移 :
for await (const vault of kit.exploreVaultsIterator({
chain: 'Arc_Testnet',
sortBy: 'apy',
})) {
console.log(`${vault.name}: ${(vault.currentApy * 100).toFixed(2)}% APY`)
}
对于需要总计的已页 UI, 一次获取一页 :
const { vaults, pagination } = await kit.exploreVaults({
chain: 'Arc_Testnet',
page: 1,
})
console.log(`Page 1 of ${pagination.totalPages} (${pagination.totalCount} vaults)`)
支持的链条
使用 kit.getSupportedChains() 函数 getSupportedChains(context)
帮助从配置的收入提供者读取支持的链条定义 .
核心业务
getVaults: 获取一个或多个金库的金库元数据.exploreVaultsIterator: 懒散地将链条上可用的每个金库都填平 带有任择议定书、资产、APY和TVL过滤器。 获取页面于 需求,所以没有页面算术来管理.exploreVaults: 以 pagination 元数据, 用于页面化的 UIs .getPosition: 获取金库的钱包位置 .getDepositQuote:预览押金.getWithdrawalQuote: 预览退出.getClaimRewardsQuote: 预览可要求的奖励.deposit:执行存款交易.withdraw:执行退出交易.claimRewards:要求奖励,或在没有交易的情况下返回 可索赔.getCrossChainDepositStatus: 读取当前跨链桥状态 存款人execId。 。 。 .waitForCrossChainDeposit: 调查跨链存款,直到其达到 终端桥站状态(或等待预算缓冲).
配置
Ein Kit 没有 API 密钥。 API 密钥可以在每次操作中传递 允许的访问和归属 :
await kit.getVaults({
vaults: [
{
chain: 'Arc_Testnet',
vaultAddress: '0xAabbeF1D3971c710276ed41eC791BbE14CdB8E88',
},
],
config: {
apiKey: process.env.CIRCLE_API_KEY,
},
})
API密钥是服务器唯一的秘密——由浏览器投掷提供. 别动 在您的服务器上, 并将准备的交易转发给客户端 .
从
kitKey数字 :config.kitKey以有利于config.apiKey它继续工作 和遗产KIT_KEY:<keyId>:<keySecret>值仍然被接受,所以您可以按照自己的速度移动。 当两者 字段已经设置,apiKey赢了.
许可证
这个项目根据Apache 2.0许可证获得许可. 联系人 支助 详细情况.