质押协议审计指南

质押协议审计指南

阅读时间: 6 分钟

在此博客中,我们概述了流动性质押协议的概念和质押协议的审计指南。 该指南涵盖了一系列漏洞点,例如取款机制、舍入错误、外部调用、费用逻辑、循环、结构、质押期限等。这篇博文将成为审核质押协议的有用参考,并可以帮助您识别潜在的错误.

什么是流动性质押?

流动性质押允许用户在不牺牲流动性的情况下质押其持有的加密货币并获得奖励。 用户无需在固定期限内锁定他们的代币,而是可以获得代表其抵押资产的流动代币。 该代币可以像任何其他加密货币一样进行交易或使用,允许用户随心所欲地使用他们的资产,同时仍能获得质押奖励。

审计质押协议指南 PlatoBlockchain 数据智能。垂直搜索。人工智能。

例如,您有 100 个 ETH 想要质押在以太坊网络上。 您可以使用像 Lido 这样的流动性质押服务来质押您的 ETH,并获得名为 stETH 的流动性代币作为回报,而不是将您的 ETH 锁定一段固定的时间。 使用 stETH,您仍然可以在获得质押奖励的同时交易或使用质押的 ETH。

让我们开始审计质押合约:

在开始合同代码之前检查所有可用的审计规范。 它可以是白皮书、README 文件或其他形式。 这些将使您了解合同代码将包含的内容。

在查看质押合约的审计规范文件时,请查找以下几点:

  • 基于费用的类型及其计算。
  • 质押代币的奖励机制
  • 拥有人的权力
  • 合约会持有 ETH 吗?
  • 合约将持有哪些代币?
  • 分叉的原始合约

检查规格是否与代码匹配。 从费用和代币经济学开始,然后验证所有者的权限。 检查所有奖励和费用值是否与文档一致。

要寻找的脆弱点?

一、奖励提现机制:

检查质押代币奖励机制是否正确实施,以及奖励是否公平且按比例分配给所有质押者。 项目可以通过两种方式分配奖励:自动、定期或根据用户自己的请求。 可以根据协议的业务逻辑实现和定制取款功能。
以下是几个检查点:

  • 检查是否有任何用户能够提取超过其奖励 + 质押金额的金额。
  • 检查金额计算中的上溢/下溢
  • 检查某些参数是否会对计算过程中的奖励产生负面影响。
  • 该函数中是否使用了 block.timestamp 或 block.number。 检查它是否可以以任何方式被利用。

2.费用逻辑:

如果存款和取款需要支付一定的费用,那么请确认没有任何单个用户可以绕过该费用。 此外,请警惕任何潜在的溢出或下溢问题。 只有管​​理员或所有者才有权更改费用设置。 还要验证是否已建立最高费用阈值,以防止管理员将其设置过高。

3. LP Token 的铸造/销毁机制:

验证是否已正确实施铸造和燃烧机制。 burn 函数应该反转 mint 函数所做的所有状态更改。 此外,当池为空时,验证用户在第一次质押期间是否收到适当数量的代币至关重要。

铸造和燃烧功能的逻辑可以通过数学验证来发现任何隐藏的漏洞。 此外,铸造的 LP 代币的总供应量不应超过质押资产。

4.舍入误差:

尽管某些小的舍入错误通常是不可避免的且无需担心,但当它们有可能成倍增加时,它们可能会显着增加。 寻找可以通过反复质押和取消质押从舍入误差中获利的边缘案例。

为了确定舍入误差是否会在一段较长的时间内累积到相当大的数量,我们可以用数学方法计算出可能的舍入误差的范围。

5.质押时间:

确保合约中的质押期限计算符合指定的业务逻辑。 通过绕过持续时间检查,验证用户无法在质押持续时间结束之前兑换奖励。 此外,检查质押的持续时间是否可以被攻击者利用以获得更多奖励。

6. 外部调用和令牌处理:

大多数外部调用将针对代币合约。 因此,我们必须确定质押合约将处理哪些类型的代币。 必须检查外部调用是否存在任何错误和重入攻击。 通货紧缩代币或带有转账费用的代币,如 Safemoon,如果其逻辑未正确实施,可能会造成问题。

7. 价格操纵检查:

通过闪电贷操纵价格是 DeFi 项目中最常见的黑客攻击之一。 可能存在恶意行为者可以在质押或取消质押大量代币期间使用闪电贷来操纵价格的情况。 仔细审查质押和取消质押功能,以避免可能导致基于闪贷的价格操纵攻击和其他用户资金损失的边缘情况。

8. 一些额外的检查:

  • 循环: 如果合约逻辑涉及遍历数组,确保不超过区块 gas 限制很重要。 当数组大小非常大时可能会发生这种情况,因此您应该调查哪些函数可以增加数组的大小以及是否有任何用户可以利用它来引起 DoS 攻击。 看看这个 报告.
  • 结构: 质押合约使用结构类型来存储用户或矿池数据。 在函数内声明或访问结构时,指定是使用“内存”还是“存储”很重要。 它可能会帮助我们节省一些汽油。 欲了解更多信息,请参阅 到这篇文章.
  • 前跑:寻找恶意行为者可以提前运行任何交易以获取优势的任何场景。
  • 功能可见性/访问控制检查: 任何声明为外部或公共的函数都可以被任何人访问。 因此,重要的是要确保任何公共功能都不能执行任何敏感操作。 验证质押协议是否实施了适当的控制以防止未经授权访问质押硬币和系统基础设施至关重要。
  • 中心化风险: 重要的是不要给所有者过多的权力。 如果管理员地址被泄露,可能会对协议造成重大损害。 验证所有者或管理员权限是否适当,并确保协议有适当的计划来处理管理员私钥泄露的情况。
  • ETH / WETH处理: 合约通常包含处理 ETH 的特定逻辑。 例如,当 msg.value > 0 时,合约可以将 ETH 转换为 WETH,同时仍允许直接接收 WETH。 当用户将 WETH 指定为货币但在调用时发送 ETH 时,这可能会破坏某些不变量并导致不正确的行为。

到目前为止,我们已经讨论了流动性质押协议和此类协议的审计指南。 简而言之,Liquidity Staking 允许用户在不牺牲流动性的情况下获得 Staking 奖励。 我们概述了审计员必须注意的质押合约中的薄弱环节,例如提款机制、费用逻辑、LP 代币铸造/销毁机制、舍入误差、质押期限、外部调用和价格操纵检查。 

我们建议审计员检查审计规范文件,将规范与代码进行匹配,并检查费用和代币经济学验证。 我们还建议进行额外的检查,例如遍历数组、为结构类型数据指定内存或存储以及抢先运行场景。 这些指南将有助于审核质押协议并帮助识别潜在的错误。


11 观点

时间戳记:

更多来自 散列