1 个不稳定版本

0.1.0 2023年4月4日

#17 in #dex

Apache-2.0

260KB
7K SLoC

Solana 永续合约

简介

Solana 永续合约协议是一个开源的非托管去中心化交易所实现,支持多种资产的杠杆交易。

快速入门

设置环境

  1. https://github.com/askibin/perpetuals.git 克隆仓库。
  2. https://docs.solana.com/cli/install-solana-cli-tools 安装最新的 Solana 工具。如果您已经安装了 Solana 工具,运行 solana-install update 以获取最新兼容版本。
  3. https://rustup.rs/ 安装最新的 Rust 稳定版。如果您已经安装了 Rust,运行 rustup update 以获取最新版本。
  4. https://www.anchor-lang.com/docs/installation 安装最新的 Anchor 框架。如果您已经安装了 Anchor,运行 avm update 以获取最新版本。

Rustfmt 用于格式化代码。它需要激活 nightly 功能

  1. 安装 nightly rust 工具链。 https://rust-lang.github.io/rustup/installation/index.html#installing-nightly
  2. 执行 git config core.hooksPath .githooks 以激活 pre-commit 钩子。

[可选] Vscode 设置

  1. 安装 rust-analyzer 扩展
  2. 如果格式化不起作用,请确保 rust-analyzer.rustfmt.extraArgs 设置为 +nightly

构建

首先,使用 solana-keygen new -o <PROG_ID_JSON> 为程序地址生成新密钥。然后在 Anchor.tomlprograms/perpetuals/src/lib.rs 中替换现有的程序 ID。

此外,请确保在Anchor.toml中您钱包的路径正确。或者,在运行Anchor部署或测试命令时,您可以使用--provider.wallet参数指定您的钱包。钱包的公钥将在程序初始部署时设置为升级权限。强烈建议在主网上部署时,将升级权限设置为多签。

要从perpetuals目录构建程序,请运行anchor build命令。

cd perpetuals
anchor build

测试

使用cargo test命令执行单元测试。

cargo test -- --nocapture

以下是如何启动集成测试(Rust):

cargo test-bpf -- --nocapture

以下是如何启动集成测试(Typescript):

npm install
anchor test -- --features test

默认情况下,集成测试在本地验证器上执行,因此不会消耗任何SOL。

部署

要将程序部署到devnet并上传IDL,请使用以下命令:

anchor deploy --provider.cluster devnet --program-keypair <PROG_ID_JSON>
anchor idl init --provider.cluster devnet --filepath ./target/idl/perpetuals.json <PROGRAM ID>

初始化

包含了一个小的CLI Typescript客户端,以帮助您初始化和管理程序。默认情况下,脚本使用devnet集群。如果您计划在主网上执行这些命令,请将-u https://api.mainnet-beta.solana.com添加到所有命令中。

要初始化已部署的程序,请运行以下命令:

cd app
npm install
npm install -g npx
npx ts-node src/cli.ts -k <ADMIN_WALLET> init --min-signatures <int> <ADMIN_PUBKEY1> <ADMIN_PUBKEY2> ...

其中,<ADMIN_WALLET>是程序部署时设置为升级权限的钱包文件路径。<ADMIN_PUBKEY1><ADMIN_PUBKEY2>等,将被设置为协议管理员,并且需要min-signatures才能执行特权指令。要提供多个签名,只需多次执行完全相同的命令,并指定不同的<ADMIN_WALLET>-k选项。中间状态被记录在链上,以便可以在不同的计算机上执行命令。

要更改协议管理员或最低所需的签名,请运行:

npx ts-node src/cli.ts -k <ADMIN_WALLET> set-authority --min-signatures <int> <ADMIN_PUBKEY1> <ADMIN_PUBKEY2> ...

要验证初始化的程序

npx ts-node src/cli.ts -k <ADMIN_WALLET> get-multisig
npx ts-node src/cli.ts -k <ADMIN_WALLET> get-perpetuals

在程序可以接受任何流动性或开启交易之前,您需要创建一个代币池,并向其中添加一个或多个代币保管。

npx ts-node src/cli.ts -k <ADMIN_WALLET> add-pool <POOL_NAME>
npx ts-node src/cli.ts -k <ADMIN_WALLET> add-custody <POOL_NAME> <TOKEN_MINT> <TOKEN_ORACLE> <IS_STABLE>

其中,<POOL_NAME>是您希望分配给池的随机名称,<TOKEN_MINT>是代币的铸造地址,<TOKEN_ORACLE>是可以在此页面找到的相应Pyth价格账户。<IS_STABLE>指定保管是否为稳定币。例如

npx ts-node src/cli.ts -k <ADMIN_WALLET> add-pool TestPool1
npx ts-node src/cli.ts -k <ADMIN_WALLET> add-custody TestPool1 So11111111111111111111111111111111111111112 J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix false

要验证添加的池和保管,请运行

npx ts-node src/cli.ts -k <ADMIN_WALLET> get-pool <POOL_NAME>
npx ts-node src/cli.ts -k <ADMIN_WALLET> get-custody <POOL_NAME> <TOKEN_MINT>

npx ts-node src/cli.ts -k <ADMIN_WALLET> get-pools
npx ts-node src/cli.ts -k <ADMIN_WALLET> get-custodies <POOL_NAME>

CLI提供了其他有用的命令。您可以通过运行以下命令来获取它们的列表:

npx ts-node src/cli.ts --help

UI

我们为智能合约实现了相应的UI,使用Typescript/Tailwind/Next编写。要快速启动与合约链接的UI,首先按照之前的说明构建合约并初始化交易所。

在主目录中,运行./migrations/migrate-target.sh将目标构建目录复制到ui。

现在,您可以使用以下CLI命令快速启动一个包含以下三个代币的TestPool1

Sol Token: J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix

测试令牌预言机:BLArYBCUYhdWiY8PCUTpvFE21iaJq85dvxLk9bYMobcU

USDC 预言机:5SSkXsEKQepHHAewytPVwdej4epN1nxgLVM84L4KXgy7

cd app

npx ts-node src/cli.ts -k <ADMIN_WALLET> add-pool TestPool1

npx ts-node src/cli.ts -k <ADMIN_WALLET> add-custody TestPool1 So11111111111111111111111111111111111111112 J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix

npx ts-node src/cli.ts -k <ADMIN_WALLET> add-custody TestPool1 6QGdQbaZEgpXqqbGwXJZXwbZ9xJnthfyYNZ92ARzTdAX BLArYBCUYhdWiY8PCUTpvFE21iaJq85dvxLk9bYMobcU

npx ts-node src/cli.ts -k <ADMIN_WALLET> add-custody TestPool1 Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr 5SSkXsEKQepHHAewytPVwdej4epN1nxgLVM84L4KXgy7 true

现在,使用以下命令构建和运行 UI,(导航到 localhost:3000 使用 UI)

cd ../ui
yarn install
yarn dev

支持

如果您在使用 Perpetuals 代码库时遇到技术困难,请将问题发布在 StackExchange(用 perpetuals 标记您的问题)。

如果您在代码中发现错误,您可以在 Github 上提出问题。但如果这是一个安全问题,请不要在 Github 或公共渠道中公开。请将信息发送至 [email protected]

贡献

欢迎贡献。请参考贡献指南获取更多信息。

许可

Solana Perpetuals 代码库是在Apache License 2.0下发布的。

免责声明

通过访问或使用 Solana Perpetuals 或其任何组件,您接受并同意免责声明

依赖项

~21–30MB
~523K SLoC