8月 数字 SDK
TypeScript SDK用于与August Digital金库交互,跨越EVM,索拉纳,斯特拉尔和Sui链.
安装
npm install @augustdigital/sdk ethers
# or
pnpm add @augustdigital/sdk ethers
# or
yarn add @augustdigital/sdk ethers
瓦格米/维姆支助
SDK既支持醚又支持wagmi/viem符号. 如果你在反应应用中使用wagmi, 也安装viem:
npm install viem
SDK 自动转换viem WalletClient 与醚兼容的符号.
快速启动
import AugustSDK from '@augustdigital/sdk';
const sdk = new AugustSDK({
// Required: stable kebab-case slug identifying your application.
appName: 'acme-trader',
providers: {
1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
42161: 'https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY',
-1: 'https://api.mainnet-beta.solana.com', // Solana
},
keys: {
august: 'YOUR_API_KEY', // Optional: vault reads, allocations and vault-linked sub-account reads work without it
},
monitoring: {
env: 'DEV', // Optional: 'DEV' enables console logging (defaults to 'PROD')
},
});
// Fetch all vaults
const vaults = await sdk.getVaults();
// Fetch a specific vault with loans and allocations
const vault = await sdk.getVault({
vault: '0x...',
options: { loans: true, allocations: true },
});
// Get user positions
const positions = await sdk.getVaultPositions({
wallet: '0x...',
showAllVaults: true,
});
应用程序名称
appName 需要每个 AugustSDK 建筑师呼叫。 通过一个稳定的kebab- case 弹片
识别您的申请(例如). 'acme-trader', (中文(简体) ), 'my-defi-app':
- 何等为用. 8月 数字标记分析事件
app.name = <yourSlug>改为 属性错误标记和优先排序错误修正 . - 事实并非如此. 不是秘密 不是执照钥匙 不是显示标签 选一发子弹 并在部署中重复使用.
- 制约因素. 3-64个字符,仅限
[a-zA-Z0-9._-]。SDK同步从 如果数值缺失或无效,则该构建器.
// Will throw — appName is required.
new AugustSDK({ providers: { /* ... */ } } as any);
// Will throw — spaces not allowed. Use 'acme-trader'.
new AugustSDK({ appName: 'Acme Trader', providers: { /* ... */ } });
// Correct.
new AugustSDK({ appName: 'acme-trader', providers: { /* ... */ } });
起源- 代码归属( SwapRouter)
在交换室上注册的拥有原产地(参考/费用分享)代码的集成商将它安装在 SDK实例。 通过SDK实现的存款然后在链上携带:
const sdk = new AugustSDK({
appName: 'acme-trader',
providers: { 1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY' },
attribution: {
originCode: '0x…', // bytes32 registered on the SwapRouter with addOrigin
strictOrigin: false, // optional: true throws instead of falling back
},
});
// Check the code before you ship it.
const { registered, originFeeBps, collector } = await sdk.getOriginInfo({
chainId: 1,
originCode: '0x…',
});
-
只有伊特鲁姆主网. 实例代码发送于链 1 (
ORIGIN_ATTRIBUTION_CHAINS没有其他 链,即使配置了交换路器. -
适用之处.
vaultDeposit发送保证金通过SwapRouter.deposit密码sdk.evm.getDepositRoute()返回时via: 'router':金库在路由器上注册,金库接受 资产原地(其参考资产,或Tokenized Vault V2 白上市资产——从未互换),路由器 白列资产,路由器不被暂停,押金不是许可,本地或适配器押金, 并注册了密码.swapRouterDeposit, (中文(简体) ),swapAndDeposit, (中文(简体) ),depositViaSwapRouter财务报告和审定财务报表depositNativeViaSwapRouter也发去. -
先入正觉. 一个
originCode传递到路由器方法,然后是实例代码,然后是全零 sentinel(无来源费). 传出零哨,选择一个呼叫. -
倒倒倒地来. 当代码无法应用时——它没有注册,链条不是主网,路由器 暂停( e)
router-paused,用15秒缓存检查)或不将资产白化,金库会 不接受,或未在路由器上注册,或是一种许可、本地托存或适配存款——vaultDeposit使用金库的本地路径和日志vaultDeposit:attribution-skipped带有原因( 哨兵标记)sdk.attribution.origin=skipped) (中文(简体) ). 路由器 方法发送未注册实例代码和日志的0 sentinel<method>:attribution-skipped。 。 。 . 与strictOrigin: true未注册实例代码抛出AugustValidationError任何批准之前 相反;一个被暂停的路由器甚至会回到原生地. 一个originCode传递到路由器方法,即 未注册总是丢AugustValidationError在任何批准之前。 当路由器被暂停时 路由器方法抛出AugustSDKError(单位:千美元)context.reason: 'router-paused'任何批准之前. -
核准
route.spender不是金库. 换接器提取了路由押金.vaultDeposit财务报告和审定财务报表approve操作此选项; 如果您自己发送批准文件, 请先读到支出者 :const route = await sdk.evm.getDepositRoute({ target: vault, depositAsset: usdc }); // route.spender is the SwapRouter when route.via === 'router', else the vault (or adapter wrapper) -
气来. 在主网叉上测量(将1,000美元存款汇入核心USDC):直接存款102,067个气体; 路由器为0%,编码为161.744 (+59.7k);路由器为1%,编码为173,135 (+71.1k). 路由存款还需要一个 一次性批准路由器每令牌.
-
零费码. 以 0 bps 收费注册的代码仅对归属有效,但路由器发出否
OriginFeeApplied活动。 其存款仅来自交易 calldata和SDK 遥测. -
进程-全球.
attribution是进程- 全球: 最后一个AugustSDK构造胜出,一个 建造无attribution释出. 每个进程运行一个归属配置.
建筑
src.ts/
├── main.ts # Main SDK class (AugustSDK)
├── core/ # Base utilities
│ ├── base.class.ts # Base SDK functionality
│ ├── fetcher.ts # API client with retry logic
│ └── web3.helpers.ts # Blockchain utilities
├── adapters/ # Chain-specific implementations
│ ├── evm/ # EVM adapter (approve, deposit, redeem, read helpers)
│ ├── solana/ # Solana program adapters
│ ├── stellar/ # Stellar vault adapters
│ └── sui/ # Sui (Ember) vault adapters
├── evm/ # EVM cross-chain (LayerZero OVault)
├── modules/ # Feature modules
│ ├── vaults/ # Vault read operations
│ ├── sub-accounts/ # Sub-account queries
│ └── api/ # August backend API integration
├── services/ # External service integrations
│ ├── debank/ # DeFi allocation data
│ ├── coingecko/ # Token pricing
│ └── subgraph/ # Historical transaction data
└── types/ # TypeScript interfaces
关键概念
多钱支持
- EVM 链:伊特鲁姆,阿比特鲁姆, Base, BSC, Avalanche, 以及更多——
wagmi/viem财务报告和审定财务报表ethers支持的签名符 - 索拉纳: 具有完整金库功能的原生索拉纳程序支持
- 斯特拉尔: Stellar 保险库存款、赎回和职位查询
- 苏: Ember 金库读取操作
- 跨越所有链条的统一接口
默认版本
evm-0/evm-1: 遗产金库合同evm-2: 当前 EVM 金库架构( 单独的收件符)sol-0: 索拉纳程序金库stellar-0: 以 Starr 为主的金库
数据浓缩
所有金库查询都支持可选浓缩 :
loans: 包含主动贷款数据allocations: DeFi/CeFi/OTC位置细分wallet: 用户特定位置数据
API 参考
断层查询
| 方法 | 说明 |
|---|---|
getVaults(options?) | 跨链取出所有金库 |
getVault({ vault, chainId?, options? }) | 获取单个金库细节 |
getVaultLoans({ vault, chainId? }) | 获取活动贷款 |
getVaultAllocations({ vault, chainId? }) | 获取分配细目 |
getVaultHistoricalTimeseries({ vault, chainId? }) | 历史上的APY和TVL时间序列 |
getVaultApy({ vault, historical? }) | @ 已过期 ——使用 getVaultHistoricalTimeseries |
getVaultTvl({ vault, historical? }) | 目前/历史 TVL |
getVaultAnnualizedApy({ vault }) | 将APY用作保险库 |
getVaultSummary({ vault }) | 汇总金库摘要 |
getVaultPnl({ vault, chainId? }) | 默认级别 PnL |
getVaultUnrealizedPnlHistory({ vault, chainId?, ... }) | 未实现的 PnL 时间序列 |
getLatestUnrealizedPnl() | 所有金库的最新未实现的PnL快照 |
getYieldLastRealizedOn({ vault, chainId? }) | 最后产量实现的时间戳 |
getTotalDeposited(options?) | 整个保险库的存款总额 |
用户位置
| 方法 | 说明 |
|---|---|
getVaultPositions({ wallet?, vault?, chainId? }) | 用户金库位置 |
getVaultAvailableRedemptions({ vault, wallet?, chainId, verbose? }) | 索赔的赎回 |
getVaultRedemptionHistory({ vault, wallet?, chainId? }) | 历史的救赎 |
getVaultUserHistory({ wallet, vault?, chainId? }) | 交易历史 |
getVaultUserTransfers({ wallet, vault?, chainId? }) | 传输历史 |
getVaultUserLifetimePnl({ wallet, vault?, chainId? }) | 钱包终身 PnL |
getVaultStakingPositions({ wallet, chainId }) | 担任职务 |
getVaultBorrowerHealthFactor(props?) | 借款人健康因素 |
getVaultWithdrawals({ vault, chainId? }) | 待提取 |
点
| 方法 | 说明 |
|---|---|
getUserPoints(userAddress) | 钱包的分数平衡 |
registerUserForPoints({ wallet, referral? }) | 为分数程序注册钱包 |
fetchPointsLeaderboard(params?) | 点头板 |
写操作( 顶级)
| 方法 | 说明 |
|---|---|
vaultDeposit(signer, options) | 存入金库 |
previewRedemption(props) | 广播前预览还原输出 |
横琴 (LayerZero)
| 方法 | 说明 |
|---|---|
getLayerZeroDeposits({ wallet?, chainId? }) | 图层Zero储量历史 |
getLayerZeroRedeems(props?) | 图层Zero救赎历史 |
公用事业
| 方法 | 说明 |
|---|---|
getPrice(symbol) | 汇兑价格(美元) |
switchNetwork(chainId) | 更改活动链 |
updateWallet(address) | 设置正在运行的跟踪钱包 |
分账户sdk.subAccountsModule(中文(简体) )
| 方法 | 说明 |
|---|---|
getSubaccountHealthFactor(address) | 一个分账户的健康因素 |
getSubaccountLoans(address) | 用于子账户的积极贷款 |
getSubaccountCefiPositions(address) | CeFi 职位 |
getSubaccountOtcPositions(address) | OTC职位 |
getSubaccountSummary(address) | 合计分账户汇总 |
EVM 适应器sdk.evm(中文(简体) )
在调用写法前设置一个签名符 :
// ethers
import { JsonRpcProvider, Wallet } from 'ethers';
const wallet = new Wallet(process.env.PRIVATE_KEY!, new JsonRpcProvider(rpcUrl));
sdk.evm.setSigner(wallet);
// wagmi/viem (browser)
import { useWalletClient } from 'wagmi';
const { data: walletClient } = useWalletClient();
if (walletClient) sdk.evm.setSigner(walletClient);
写入方法 :
| 方法 | 说明 |
|---|---|
vaultApprove(options) | 批准为金库支付代币 |
approve(options) | 一般性ERC-20核准 |
vaultDeposit(options) | 将资产存入金库 |
vaultRequestRedeem(options) | 请求撤回/撤销 |
vaultRedeem(signer, options) | 要求可获得的补偿 |
depositNative(options) | 保存本地地物(ETH等) |
swapAndDeposit(options) | 换一换一换 |
depositViaSwapRouter(options) | 通过互换路由器存款 |
depositNativeViaSwapRouter(options) | 通过互换路由器交存本地 |
读取助手( 返回原始) bigint:
| 方法 | 说明 |
|---|---|
previewDeposit(options) | 按存款金额计价的股份 |
previewRedeem(options) | 退回的资产,份额 |
allowance(options) | 向金库发放ERC-20津贴 |
balanceOf(options) | ERC-20 任何令牌/所有者的余额 |
maxDeposit(options) | 保险库接受的最大存款 |
vaultAllowance(options) | 特定故障津贴检查 |
getDeposited(options) | 本期存款余额 |
getRemainingAllocations(options) | 剩余分配能力 |
isWhitelisted(options) | 检查白名单状态 |
索拉纳适应器sdk.solana(中文(简体) )
| 方法 | 说明 |
|---|---|
getVaultState(...) | 索拉纳计划中的故障状态 |
getVaultStateReadOnly(...) | 只读金库状态 |
getToken(mintAddress) | SPL 令牌信息 |
getTokenSymbol(mintAddress) | 脚本符号 |
fetchUserTokenBalance(publicKey, mint) | 用户 SPL 符号余额 |
fetchUserShareBalance(publicKey, vault) | 用户共享余额 |
fetchUserShareBalanceRaw(publicKey, vault) | 原始份额余额( 比克特) |
斯特拉尔适配器( S)sdk.stellar(中文(简体) )
| 方法 | 说明 |
|---|---|
vaultDeposit(options) | 存入斯泰拉金库 |
vaultRedeem(options) | 从斯泰拉金库取出 |
submitTransaction(signedXdr) | 提交签名的 XDR 交易 |
getUserPosition(options) | 用户在 Stellar 金库中的位置 |
convertToShares(options) | 将资产金额转换为股份 |
Sui 适配器( R)sdk.sui(中文(简体) )
| 方法 | 说明 |
|---|---|
getEmberVaults() | 列出所有 Ember (Sui) 金库 |
getEmberTVL(limit?) | 整个安伯金库锁定的总值 |
守则公约
命名图案
- 接口: 前缀为
I(例如,IVault, (中文(简体) ),IVaultLoan(中文(简体) ) - ABIs 函数: 前缀为
ABI_(例如,ABI_LENDING_POOL_V2(中文(简体) ) - 类型:描述性名称(如:,
IAddress, (中文(简体) ),IChainId(中文(简体) )
特殊注释标签
搜索密码库以找到重要区域 :
@todo: 计划改进或缺失特征@hardcoded: 可能需要配置的硬码值@solana: 索拉纳语特定逻辑或注释
处理错误
每种公用方法都会打出子类错误 AugustSDKError数字 :
import { AugustValidationError, AugustTimeoutError, AugustSDKError } from '@augustdigital/sdk';
try {
await sdk.evm.vaultDeposit({ target: '0x...', wallet: owner, amount: '1' });
} catch (err) {
if (err instanceof AugustValidationError) showFormError(err.message);
else if (err instanceof AugustTimeoutError) scheduleRetry(err.timeoutMs);
else if (err instanceof AugustSDKError) reportError(err.code, err.cause);
else throw err;
}
- 网络错误自动重试, 以指数倒置
- 90秒请求超时(可以通过
REQUEST_TIMEOUT_MS(中文(简体) ) - 调试出错的关联ID
环境配置
// Development mode — enables console logging
const sdk = new AugustSDK({ appName: 'my-app', providers: { /* ... */ }, monitoring: { env: 'DEV' } });
// Production mode — default, no console logs
const sdk = new AugustSDK({ appName: 'my-app', providers: { /* ... */ } });
发展
运行测试
pnpm test
大楼
pnpm build
支助
- 问题数字 : GitHub 问题
- 文档数字 : (原始内容存档于2017-03-21). docs.augustigital.io
- 示例应用数字 : 财务