如何在 Solana 上创建 Liquid 质押代币

流动性质押是一种Web3概念,允许用户质押自己的代币,同时仍具有流动性以参与去中心化金融(DeFi)。通过将SOL放入流动性质押池,池管理员会将其分发给经过筛选的验证者组。作为交换,您将获得一个代表代币(或流动性质押代币),该代币反映了您质押的SOL。与质押的SOL不同,这种新代币

<!--StartFragment-->

流动性质押是一种 Web3 概念,允许用户质押自己的代币,同时仍具有流动性以参与去中心化金融 (DeFi)。通过将 SOL 放入流动性质押池,池管理员会将其分发给经过筛选的验证者组。作为交换,您将获得一个代表代币(或流动性质押代币),该代币反映了您质押的 SOL。与质押的 SOL 不同,这种新代币具有流动性,可以在 DeFi 平台中交换、出售、移动和使用。

流动性质押作为一种帮助保护网络同时保持流动性以参与去中心化金融 (DeFi) 的方式越来越受欢迎。Solana 有一个用于创建流动性质押池和代币的原生程序。本指南将介绍如何使用Solana 质押池计划在 Solana 上创建流动性质押池。

你将做

  • 在 Solana 上创建 Liquid 质押池
  • 将验证者添加到池中
  • 将 SOL 存入池中以换取 Liquid Staking 代币
  • 将质押的 SOL 分配给验证者

你需要

  • Liquid Staking 的基本知识(指南:什么是 Liquid Staking 以及如何进行 Liquid Staking SOL
  • 已安装Solana CLI最新版本
  • 安装了SPL-Stake-Tool CLI最新版本(安装 CLI 需要最新版本的 Rust)
  • Devnet SOL(5-10 SOL):你可以在Solana Faucet申请一些
  • Solana Devnet 端点
依赖 版本
solana 命令行工具 1.16.10
spl-权益池 0.6.4
rustc 1.69.0

设置您的本地环境

在我们的演示中,我们将使用 Solana CLI 来管理两个钱包:一个 Pool Authority 钱包和一个 User 钱包。Pool Authority 钱包将用于创建池并添加验证者。User 钱包将把 SOL 存入池中并接收流动质押代币。

安装Solana CLI和SPL-Stake-Tool CLI后,为你的项目创建一个新目录并在终端中导航到该目录:

mkdir solana-liquid && cd solana-liquid

用于简化调试的日志

您现在可以访问 RPC 端点的日志,从而帮助您更有效地解决问题。如果您在 RPC 调用中遇到问题,只需检查 QuickNode 仪表板中的日志即可快速识别和解决问题。在我们的定价页面上了解有关日志历史记录限制的更多信息。

让我们创建用于此演示的两个钱包。我们将使用solana-keygen命令创建两个新钱包:AUTHORIY.jsonUSER.json。在您的终端中,输入:

solana-keygen new --no-bip39-passphrase -s -o AUTHORITY.json && solana-keygen new --no-bip39-passphrase -s -o USER.json

AUTHORITY.json通过在终端中输入以下命令来更新 Solana 配置以指向钱包和 Solana 的开发网络:

solana config set -ud -k ./AUTHORITY.json

您应该能够进入solana config get并查看您的端点并确认您的钱包已正确配置。

将 Devnet SOL 存入您的钱包

使用以下solana address命令获取您创建的新钱包的钱包地址:

solana address -k AUTHORITY.json && solana address -k USER.json

这会将两个钱包地址记录到您的终端。此演示需要每个钱包中大约 5 个 SOL。您可以从Solana Faucet请求 SOL 。有关获取 Devnet SOL 的其他方法,请查看我们在 Solana 上空投测试 SOL 的完整指南。

在进入下一步之前,请使用以下solana balance命令验证两个钱包中都有 SOL:

solana balance -k AUTHORITY.json && solana balance -k USER.json

您应该在终端中看到如下响应:

5 SOL
5 SOL

让我们继续创建我们的流动权益池。

Solana 权益池计划

[Solana 质押池计划]是一个 Solana 程序,用于将 SOL 汇集在一起​​,以便在一组池定义的验证器中进行质押。简而言之,该计划(ID:[SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy])为团队创建了一个标准,用于建立质押池、实施验证器分配策略、收取费用以及从池中存入/提取资金。Solana 的质押池 CLI 使团队可以轻松创建和管理自己的流动质押池。在创建我们的池之前,让我们先介绍一下该计划的一些要素。

权益池账户

每个权益池包含两个数据账户:

  • 权益池:权益池的详细信息(费用、流动性权益代币铸造信息、权益金额等)
  • 验证者列表:验证者质押账户和余额的数组,这些账户和余额是池的一部分

权益池包含有关池的整体信息,包括费用、池代币铸造、管理金额等。

由于权益池可以拥有大量验证者,并且 Solana 对交易规模有严格的限制,因此更新权益池的总价值可能需要多个交易(这由权益池 CLI 处理)。

权益账户

与传统质押类似,质押池有三种类型的质押账户(或质押状态):

  • 验证者质押:活跃/委托给验证者的质押账户
  • 临时质押:正在激活或停用的质押账户(合并到储备或验证者质押)
  • 储备质押:未委托给验证者的质押账户(由质押机构用来重新平衡池子)

费用

权益池计划允许当局对权益池实施不同类型的费用:

费用类型 描述
SOL 存款 当用户将 SOL 存入池中时向用户收取的百分比
质押保证金 当用户将权益账户委托给权益池时,向用户收取的费用百分比
SOL 提款 当用户从池中提取 SOL 时向用户收取的百分比
提现权益 当用户将 SOL 提取到已激活的质押账户时,向用户收取的百分比
Epoch(权益奖励) 每个时期结束时从矿池中扣除的矿池质押奖励百分比
推荐 分配给合作伙伴应用程序或钱包的池存款费用的百分比

\

避免经济攻击

了解权益池费用对于避免针对权益池的某些经济攻击至关重要

在最简单的攻击中,在每个时期结束之前,恶意池代币持有者会找到该时期池中表现最好的验证者,提取价值相当于其所有池代币的活跃质押,等到时期结束,获得最大质押奖励,然后存回质押池。实际上,恶意存款人总是被委托给质押池中表现最好的验证者,而实际上从未向该验证者承诺质押。最重要的是,恶意存款人会绕过任何时期费用。为了使这种攻击不可行,质押池管理员可以设置存款或取款费用。如果质押池的整体表现为 6% APY / \~3.3 个基点/时期,而最佳验证者的表现为 6.15% APY / \~3.37 个基点/时期,则最低质押存款/取款费用为 0.07 个基点。

让我们创建我们的流动权益池。

创建流动性质押池

spl-stake-pool在终端中输入查看命令选项spl-stake-pool -h。您应该会看到一个选项列表。您应该会看到create-pool一个选项。让我们也探索一下它的选项,然后使用它来创建我们的池。在您的终端中,运行spl-stake-pool create-pool -h以查看创建池的选项。您应该会看到我们需要指定我们的 epoch 费用和最大验证者数量。我们还可以选择指定其他费用和权限。让我们创建一个流动质押池,收取提款的 0.1% 费用和 5% 的 epoch(质押)奖励。

在您的终端中,输入以下命令来创建一个新的流动权益池:

spl-stake-pool create-pool \
    --epoch-fee-numerator 5 \
    --epoch-fee-denominator 100 \
    --max-validators 10 \
    --withdrawal-fee-denominator 1000 \
    --withdrawal-fee-numerator 1

你应该在终端中看到类似这样的内容:

Creating reserve stake FW97PaKCuUEws2hcwgFojXtcs886KcWtcNZkBDqgA3PY
Creating mint 9rb1D5DKpGRChr8wpvbwgiTC324GFnkx9o85c2LKX5Uf
Creating associated token account 2moXNUzN5zuk2qake7TWBsypU99cWjDdbEnVDAVZfVRM to receive stake pool tokens of mint 9rb1D5DKpGRChr8wpvbwgiTC324GFnkx9o85c2LKX5Uf, owned by EST7AuMSjdoPG1UvpJRKpWzirzrPbBJGhiTzUh8gjJRk
Creating pool fee collection account 2moXNUzN5zuk2qake7TWBsypU99cWjDdbEnVDAVZfVRM
Signature: 4e5gymVC9JfWWKims2mLzeytjuxrDjggQ6ZTMsSovfv3nhxT4W9KLgPyryhps6ihTR13McVH4j2B3TtJ6K7iUo7
Creating stake pool Co6uQcNnMq9i5NgFvtehDv8Yo83TStNwBMGhgWkKXCU7 with validator list HVmBDKny4X8t77X3UKWfB2KvU7cNzr4VsSkF1PgUiZmW
Signature: LuCzBhesbsUEti4qZtAiaQgieEGySRJLCi5MGyarjG67bVmjv1KxQEg2mdxPDHfLzefnSrF7F9fnVgQMgHZTZ8Y

恭喜!您刚刚创建了第一个流动质押池。以下是已创建账户的摘要及其用途:

  • 储备质押账户:此账户将持有未委托给验证者的 SOL。此账户将用于重新平衡池。
  • 铸币:此帐户是您的新流动质押代币特有的 SPL 代币铸币(这相当于 mSOL 或任何其他流动质押代币)。
  • 关联代币账户:此账户是 SPL 代币账户,将保存您(AUTHORITY.json钱包)的流动权益代币。
  • 矿池费用收取账户:该账户将存放矿池收取的费用。
  • 权益池账户:此账户包含权益池的详细信息。

您现在可以通过在终端中输入以下命令来查看有关您的池的详细信息(确保包含上述步骤中的权益池地址):

spl-stake-pool list -v &lt;YOUR_STAKE_POOL_ADDRESS>

您应该会看到有关您的权益池及其相关账户和权益的信息:

权益池详细信息

虽然用户可以立即将 SOL 存入池中,但池仍然需要验证者。让我们向池中添加一些验证者。

将验证者添加到池中

要将验证者添加到新池中,您需要知道验证者的投票账户公钥。如果您在主网上执行此操作,您可能已经通过自己的研究知道了您希望质押的特定验证者。您可以通过在各种浏览器或社区验证者跟踪器上查找验证者的投票账户密钥来找到它:

  • 索拉纳海滩
  • Validators.app
  • 索拉纳指南针

由于是在 devnet 上操作,我们只需从 CLI 获取验证器列表。在您的终端中,输入以下命令来获取验证器列表:

solana validators

您应该会看到验证者列表及其投票账户密钥。我将寻找使用 Solana 最新版本且佣金较低的验证者。我将选择它FwR3PbjS5iyqzLiLugrBqKSa5EKZ4vK9SKs7eQXtT59f作为我的第一个验证者。您可以随意挑选一个您喜欢的验证者——我们稍后可以添加更多验证者或删除这个验证者。

验证者列表

在您的终端中,使用add-validator命令将验证者添加到您的池中(您可以运行spl-stake-pool add-validator -h以查看此命令可用的所有标志和选项)。确保包含验证者的投票账户密钥和您的池的地址:

spl-stake-pool add-validator &lt;YOUR_STAKE_POOL_ADDRESS> &lt;VOTE_ACCOUNT_ADDRESS>

干得好。实际上,您现在拥有一个流动质押池,其中只有一个验证者,但没有质押(您可以重新运行spl-stake-pool list -v &lt;YOUR_STAKE_POOL_ADDRESS>以查看更新的详细信息)。您可以随意重复此步骤,将多个验证者添加到您的质押池中。

让我们将一些 SOL 存入池中并接收我们的流动质押代币。

将 SOL 存入/提取至资金池

要将 SOL 存入池中,您需要使用deposit-sol命令。虽然我们可以使用任何钱包(包括我们的权限)执行此操作,但让我们将我们的账户/角色分开,并使用USER.json钱包将 SOL 存入池中。使用solana config set命令将您的钱包设置为USER.json钱包:

solana config set -k ./USER.json

您需要指定要存入的 SOL 数量以及要用于存入 SOL 的钱包。在您的终端中,输入以下命令将 2 SOL 存入池中:

spl-stake-pool deposit-sol &lt;YOUR_STAKE_POOL_ADDRESS>  2

您应该能够检查终端中返回的交易以确保存款成功。将交易 ID 复制并粘贴到Solana Explorer中以查看交易详细信息(确保选择 Devnet)。您应该看到您的 SOL 余额减少了 2 SOL,而您的流动质押代币余额增加了 2:

存入 SOL

如果你在资源管理器中向下滚动,你应该会看到mint_to创建流动质押代币的指令:

薄荷指南

让我们从池中提取一些 SOL,以熟悉该功能。这是可能的,因为 SOL 尚未委托给验证者(我们的池在其储备账户中有余额)。让我们从池中提取 0.1 SOL。在您的终端中,输入以下命令:

spl-stake-pool withdraw-sol &lt;YOUR_STAKE_POOL_ADDRESS> ./USER.json 0.1

请注意,该withdraw-sol功能要求我们传递资金的目的地(我们已经通过了我们的./USER.json钱包)。

您应该在终端中看到类似的交易确认。如果您在 Solana Explorer 中查看此交易,您应该会看到您的 SOL 余额增加了 0.1 SOL,而您的流动质押代币余额减少了 0.1。您还将看到 LST 已被质押池计划烧毁(或销毁):

刻录说明

让我们继续将 SOL 委托给验证者。

将 SOL 委托给验证者

在委托 SOL 之前,我们必须先将钱包设置回钱包AUTHORITY.json。在终端中,输入以下命令:

solana config set -k ./AUTHORITY.json

如果你完全按照步骤操作,你的储备账户应该有 1.9 SOL 可供质押。你可以在终端中输入以下命令来确认储备余额:

spl-stake-pool list -v &lt;YOUR_STAKE_POOL_ADDRESS>

你应该在终端中看到类似这样的内容:

Stake Pool Info
===============
Stake Pool: 35YFYPM2e6oRNh54ZbJzgyAQLeLxzouHWeZpDFxdRt7m
//...
Stake Accounts
--------------
Reserve Account: 8mq8jPQ5U289k8sbZxG3Pk8xF2HDfHzNcTqVS5ndSCbr   Available Balance: ◎1.900000000
//...
Vote Account: FwR3PbjS5iyqzLiLugrBqKSa5EKZ4vK9SKs7eQXtT59f  Stake Account: H5j8BLLDqU1zrdjRb9jkoZDXAo5Gom3h6PUZVDAY13oH Active Balance: ◎0.000000000    Transient Stake Account: 5L7DdJvD9Y9WZqriD2inPh526syCZJkH4knWqLHTwFnn   Transient Balance: ◎0.000000000 Last Update Epoch: 557

让我们使用 将 1 SOL 委托给验证者increase-validator-stake(请记住,您可以使用-h标志查看与此命令相关的所有选项)。您将需要上一步中验证者的STAKE_POOL_ADDRESS和。在您的终端中,输入以下内容:VOTE_ACCOUNT_ADDRESS

spl-stake-pool increase-validator-stake &lt;YOUR_STAKE_POOL_ADDRESS> &lt;VOTE_ACCOUNT_ADDRESS> [AMOUNT]

您应该会收到交易确认。您可以随意在 Solana Explorer 中浏览该交易,然后重新运行spl-stake-pool list -v &lt;YOUR_STAKE_POOL_ADDRESS>命令以查看池的更新详细信息。您应该会看到您的储备余额减少了 1 SOL,而您的验证者临时质押增加了 1 SOL:

//...
Stake Accounts
--------------
Reserve Account: 8mq8jPQ5U289k8sbZxG3Pk8xF2HDfHzNcTqVS5ndSCbr   Available Balance: ◎0.900000000
//...
Vote Account: FwR3PbjS5iyqzLiLugrBqKSa5EKZ4vK9SKs7eQXtT59f  Stake Account: H5j8BLLDqU1zrdjRb9jkoZDXAo5Gom3h6PUZVDAY13oH Active Balance: ◎0.000000000    Transient Stake Account: 5L7DdJvD9Y9WZqriD2inPh526syCZJkH4knWqLHTwFnn   Transient Balance: ◎1.000000000 Last Update Epoch: 557

SOL 将在下一个纪元开始时质押。您可以通过重新运行list命令来检查质押的状态。您可以通过在终端中输入以下命令来检查当前纪元的状态:

solana epoch-info

继续建设

探索你的权益池

干得好,到达了这一步。现在,您有了自己的权益池,您可以在其中管理权益分配,用户可以轻松存入和提取 SOL。我们鼓励您探索权益池 CLI(可通过 访问spl-stake-pool -h)中可用的其他命令,并探索权益池计划,以了解有关该计划及其功能的更多信息。以下是一些值得尝试的建议:

  • 向您的池中添加更多验证者

  • 将现有的质押账户转移到你的权益池(使用deposit-stake命令)

  • 下一个纪元之后:

    • 检查你的权益池和验证者权益的状态
    • 运行spl-stake-pool update以计算权益池代币的正确价值
    • 从验证者中移除质押(使用decrease-validator-stake命令)
    • 从权益池中移除活跃权益以换取池代币(使用withdraw-stake命令)
  • 从池中删除验证者(使用remove-validator命令)

  • 修改费用

  • 探索 Solana用于重新平衡验证者池的示例脚本

  • 添加元数据(流动质押代币的图标、名称和描述)

您可能会注意到,您只能withdraw-sol从储备账户和withdraw-stake活跃的验证者质押账户进行质押。这意味着您的用户将无法使用临时资金(待激活或停用质押)。在探索质押池演示时,您可能会发现,管理流动性、用户体验和用户对流动性的期望是流动质押池的重要考虑因素。

<!--EndFragment-->

  • 原创
  • 学分: 0
  • 分类: Solana
  • 标签:
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
加密女士
加密女士
无代码发币平台