AnySwap 是一个超越并碾压 Balancer 的多 token 交换系统。Balancer 受限于硬编码的 8 个 token,而 AnySwap 支持最多 1024 个 token 在同一个流动性池中自由交换。这使得 AnySwap 能够支持更复杂的 DeFi 场景,如大型指数基金、多资产组合池等,是 Balancer 无法企及的。
| Network | Program ID | IDL Account |
|---|---|---|
| Devnet | 3GBxn5VSThpKNyUgaQ96xjSXD2zJ1164LzK28MXv4MDC |
AHeBfQGsvCtWn2hFV3CrenfcqM38yk4ZAZMg2ZixQHPP |
| Mainnet | 未部署 | - |
AnySwap 使用恒定乘积和公式来维持池子的平衡:
Σ(vault_i × weight_i) = constant
其中:
vault_i是第 i 个 token 在池中的储备量weight_i是第 i 个 token 的权重(不变量)constant是池子的不变量,在每次交易后保持不变
当用户用 token A 交换 token B 时:
amount_in × weight_in = amount_out × weight_out
因此:
amount_out = (amount_in × weight_in) / weight_out
- 权重是不变量:每个 token 的权重在添加到池子时设置,之后保持不变
- 权重决定交换比例:权重越高的 token,交换时需要的数量越多
- 权重可以不同:不同 token 可以有不同的权重,实现非对称的流动性池
每次交换会收取一定比例的手续费(可配置),手续费会保留在相应的 vault 中,增加流动性提供者的收益。
| 特性 | Balancer | AnySwap |
|---|---|---|
| 最大 Token 数量 | 8(硬编码,无法扩展) | 1024(128倍) |
| 扩展性 | 严重受限 | 完全可扩展 |
Balancer 的池子配置是静态的,而 AnySwap 支持完全动态的池子管理:
- 动态添加 Token:可以在池子创建后动态添加新的 token
- 动态移除 Token:可以移除不需要的 token
- 动态调整权重:管理员可以调整 token 的权重
- 动态调整手续费:可以调整池子的手续费率
- 低交易费用:Solana 的交易费用极低(通常 < $0.001)
- 高吞吐量:支持每秒数千笔交易
- 快速确认:交易确认时间 < 1 秒
- 原生集成:与 Solana 生态无缝集成
- 指数基金池:可以创建包含数百个 token 的指数基金池
- 多资产组合:支持复杂的多资产投资组合
- 跨链资产池:可以聚合来自不同链的资产(通过桥接)
create_pool:创建新的流动性池add_token:添加 token 到池子remove_token:从池子移除 tokenmodify_weight:修改 token 权重modify_fee:修改手续费率add_liquidity:添加流动性remove_liquidity:移除流动性swap:uniswap
- Rust 1.70+
- Solana CLI 1.18+
- Anchor 0.32+
- Node.js 18+
- Yarn
# 安装依赖
yarn install
# 构建程序
anchor build
# 运行测试
anchor testimport { Program } from "@coral-xyz/anchor";
import { Anyswap } from "./target/types/anyswap";
// 创建池子
await program.methods
.createPool(poolId, feeNumerator, feeDenominator)
.accounts({ /* ... */ })
.rpc();
// 添加 token
await program.methods
.addTokenToPool(weight)
.accounts({ /* ... */ })
.rpc();
// 交换 token
await program.methods
.swapAnyswap(amountIn, minAmountOut)
.accounts({ /* ... */ })
.rpc();ISC
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 Issue 联系我们。
注意:本项目仍在开发中,请勿在生产环境使用未经审计的版本。