1 个不稳定版本

0.1.0 2023年1月25日

#15 in #dex

Apache-2.0

200KB
5.5K 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。

部署

要将程序部署到测试网并上传 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 客户端以帮助您初始化和管理程序。默认情况下,脚本使用测试网集群。如果您计划在主网上执行这些命令,请将 -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。

现在,您可以使用以下命令行命令快速启动一个由以下三个代币组成的 TestPool1

Sol代币: 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或其任何组件,您接受并同意 免责声明


lib.rs:

Perpetuals程序入口点

依赖关系

~21–31MB
~522K SLoC