自动做市机智能合约
此代码未经审计,使用者自行承担风险
参见 https://docs.solana.com/developing/programming-model/overview
- 拥有者
- 用户
-
创建
拥有者创建amm pool,创建时转入一定数量的两种token
由此产生固定的k,k值为转入的token数额之积
-
swap
用户转入一种token,换取另外一种token
转入转出的数额满足以下公式
$$ (a-∆a)*(b+∆b)=k $$ 实际由于计算精度有限,会存在一定误差
-
终止
拥有者终止amm pool,提取其中所有的token,并关闭所有账户
-
fee
用户swap时向amm pool中额外转入一定数额的token作为fee
fee的mint和倍率由拥有者在创建时指定
拥有者可随时提取fee
终止时,拥有者提取所有fee
-
安装 rustc v1.56.1,参见https://www.rust-lang.org/tools/install
-
安装 solana cli v1.9.5,参见https://docs.solana.com/cli/install-solana-cli-tools
-
确认 id.json 文件路径
-
build
cargo build-bpf
-
确认 id.json 文件钱包中拥有足够的SOL
-
部署
solana program deploy target/deploy/amm.so
-
编辑js/index.js中的AmmProgramId
-
测试
npm run test
- src/ 合约代码
- js/ 调用合约的js代码
- client/ 客户端应用
- 当某一token数额为0,或将变为0时,swap失败
- fee以amm pool中的一种token数额为基础计算,可能由于精度问题无法计算
- 尚无合理方法检查swap误差
超级swap
假设有两个amm pool,其token分别为a/b和b/c,则进行两次swap,以b为中间量,直接swap a/c.
export PATH="/home/ubuntu/.local/share/solana/install/active_release/bin:$PATH"
solana program deploy amm.so