Restaking 重新质押

本文档介绍了在 Solana 上进行 Restaking 的流程和关键概念。它涵盖了账户结构(如 Vaults、Receipt Token Mint)、指令(如 Deposit、Withdrawal Request)、以及代码验证方法。此外,还提到了未来功能的待定实现,例如奖励机制、Oracle 接口以及初始化前存款用户的验证器选择。

Restaking(重新质押)

该程序的高层流程如下图所示。

Restaking(重新质押)流程

账户

  • Vaults(金库):为每个白名单代币创建金库。金库是代币账户。账户的权限是一个 PDA,这意味着程序控制金库,并且任何从金库的借记都必须通过智能合约。

  • Receipt Token Mint(凭证代币铸币厂):凭证代币铸币厂是一个 NFT,它是存储有关质押数量、验证者和奖励信息的 PDA 的种子。 更多信息,请参考: https://docs.composable.finance/technology/solana-restaking/vaults/#receipt-token

  • Staking Params(质押参数):这是一个 PDA,它存储质押参数,并且也是 Receipt Token Mint(凭证代币铸币厂)和 Vaults(金库)的权限。

  • Vault Params(金库参数):PDA,它存储金库参数,这些参数是质押时间和为其质押的服务,以及何时申领奖励。

指令

当合约部署时,调用 initialize 方法,其中设置了白名单代币、管理密钥和奖励代币铸币厂。 最初,guest_chain_initialization 设置为 false。 任何对质押参数的更新只能由管理密钥完成。 还会为奖励代币铸币厂创建一个代币帐户,该帐户将分配奖励。 由于权限是 PDA,因此从帐户的任何借记都只能通过合约发生(目前仅在 claim 方法中)。 之后,用户可以开始质押。

  • Deposit(存款):用户可以质押任何白名单代币。 代币存储在金库中,并为用户铸造凭证代币。 向 Guest Chain 程序发出 CPI(跨程序调用)调用,其中更新指定验证者的质押。

  • Withdrawal Request(提款请求):用户可以请求提款,并且在解除绑定期限结束后,代币将被提款。 在此方法中,凭证 NFT 将转移到托管账户,并且凭证 NFT 代币账户将被关闭。 所有待处理的奖励都在此方法中转移,并且用户在解除绑定期间将没有资格获得奖励。

  • Cancel Withdrawal Request(取消提款请求):用户设置的提款请求可以取消,只要它们在解除绑定期间内,或者如果提款尚未执行。 他们将取回他们的凭证代币,并且提款请求将被取消。

  • Withdraw(提款):用户只能在解除绑定期限结束后提取他们的代币。 当用户想要提取代币时,最终质押金额将从 Guest Chain 中获取。 凭证代币被烧毁。 对 Guest Chain 进行 CPI 调用以相应地更新质押。

  • Claim Rewards(申领奖励):用户可以在不提取其质押的情况下申领奖励。 他们必须拥有不可替代的凭证代币才有资格申领奖励。

  • Set Service(设置服务):一旦桥接上线,之前已存款的用户可以调用此方法将其质押委托给验证者。 在将其质押委托给验证者之前,用户无法提取或申领任何奖励。 但是在桥接上线后将不再需要此方法,否则会 panic。

  • Update Guest chain Initialization(更新 Guest Chain 初始化):当桥接启动并运行时,管理员将调用此方法。 这会将 guest_chain_program_id 设置为指定的程序 ID,这将允许在存款期间进行 CPI 调用并将质押设置为验证者。

  • Update token Whitelist(更新代币白名单):管理员可以更新代币白名单。 只能由在 initialize 方法期间设置的管理员调用。

  • Withdraw Reward Funds(提取奖励资金):此方法只能由管理员调用,以从奖励代币账户中提取所有资金。 这是一种安全措施,因此只能在紧急情况下调用。

  • Change admin Proposal(更改管理员提案):当前管理员提出的用于更改管理员的提案。 现有管理员提议一个新的管理员,并且在新的管理员在 accept_admin_change 中批准之前,管理员不会更改。

  • Accept admin change(接受管理员更改):由现有管理员设置的新管理员预计会调用此方法。 当新的管理员调用此方法时,管理员将被更改。

  • Update Staking Cap(更新质押上限):设置质押上限的方法,该上限限制了可以在合约中设置的总质押量。 此方法期望质押上限高于之前才能成功执行。

验证代码

首先,从 emulated-light-client Github 存储库编译程序代码,以获取其字节码。

git clone https://github.com/ComposableFi/emulated-light-client.git
anchor build

现在,安装 Ellipsis Labs verifiable build crate。

cargo install solana-verify

从已编译的 Restaking 程序中获取字节码的可执行哈希

solana-verify get-executable-hash target/deploy/restaking.so

从你要验证的链上 Restaking 程序的字节码中获取哈希

solana-verify get-program-hash -u <cluster url> \
    8n3FHwYxFgQCQc2FNFkwDUf9mcqupxXcCvgfHbApMLv3

多重签名成员注意事项: 如果要验证升级程序缓冲区,则需要使用以下命令从缓冲区帐户获取字节码。 你可以从 squads 获取缓冲区帐户地址。

solana-verify get-buffer-hash -u <cluster url> <buffer address>

如果这两个命令的哈希输出匹配,则存储库中的代码与链上程序的代码匹配。

注意

  • 由于 Guest Chain 上尚未实施奖励,因此目前返回 nil 值。

  • 尚未添加 Oracle 接口以获取 Guest Chain 中质押代币以及治理代币的当前价格。

  • 在 Guest Chain 初始化之前已存款的用户可以选择以下三种方式之一选择验证者(尚未实施):

    • 随机选择一个验证者,
    • 从我们选择的前 10 名验证者列表中选择一个验证者,或者
    • 选择一个特定的验证者。
  • 原文链接: github.com/ComposableFi/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
composablefi
composablefi
江湖只有他的大名,没有他的介绍。