致命缺陷的解决方法

MasterChef 有一些缺陷可以在使用过程中修复,但前提是用户知道它们以及他们可以做什么。 这是解决方法,根据 格列布·齐科夫 和弗拉德·科罗夫尼科夫的 哈希表.

去中心化交易所 (DEXes)仅在短短两年前还相当罕见,但今天,它们似乎无处不在。 许多项目都有自己的个人 DEX。 发生这种情况是因为,当区块链项目决定启动 DEX 时,他们并没有完全从头开始。 相反,DEX 代码的基础通常是两个主要 DEX 之一的分支—— 寿司交换 or 薄煎饼交换.

主厨智能合约

得益于名为 MasterChef 的特殊智能合约,这两家交易所几乎彻底改变了 DEX 空间。 MasterChef 出现在它们两者中,因此它也出现在作为这两者之一的分支的任何 DEX 中。 每个新的 DEX 都可以共享相同的功能。 但这也意味着它共享 MasterChef 的缺点和漏洞。 

那么让我们来看看用户和开发者在与MasterChef打交道时可能会遇到哪些问题。 他们应该注意什么? 应该如何接近它们?

DEX 是如何工作的?

首先要注意的是,MasterChef 合约是用 Solidity 编写的智能合约,它控制农场可以做什么以及如何做。 在大多数项目中,有多个智能合约分担责任和工作。 但是,当涉及到基于 MasterChef 的协议时,正是这个单一的合同负责处理与农业有关的所有事情。

去中心化交易所允许您交换加密货币,而无需在交易所存钱 电子钱包把钱转出. 相反,您从自己的钱包中将资金存入智能合约。 如果合约没有后门或漏洞,您是唯一可以控制它并且可以访问您自己的资金的人。

另一个区别在于 CEX 使用订单簿进行买卖。 这意味着它们将买家与卖家相匹配,而 DEX 使用 AMM(自动化市场 制造者) 交易协议,根据投资的流动性计算资产价格。

流动性来自流动性池,用户可以为特定货币对存入资金并为协议提供资金。 然后,当有人尝试使用该货币对购买资产时,他们的订单会立即使用池中的资金完成。 同时,将资金存入流动性池的人会获得该特定池的 LP 代币。 这为他们提供了分享奖励的权利。

而且,如果他们想拿回他们的资金,他们需要做的就是归还他们收到的 LP 代币。

如您所知,有多种生成方法 产量 来自加密资产。 农场为提供流动性提供额外的奖励。 用户为 DEX 增加流动性,获得 LP 代币,并将其存入农场。

MasterChef:漏洞和缺陷

我们已经介绍了 DEX 的工作方式以及流动性池的工作方式。 因此,让我们仔细看看 MasterChef 漏洞的来源,它们如何影响流程,以及您需要采取什么方法来确保事情顺利进行。

MasterChef 是一个单一的智能合约,用于通过在 DEX 中提供流动性来提高产量。 不幸的是,它有一些可以在使用过程中修复的缺陷,但前提是用户知道它们以及他们可以做什么。

被盗账户

需要注意的最大问题之一是所有者帐户被盗。 基本上,SushiSwap 发明了一种方法,使其能够在对抗 Uniswap 时获得优势。 该方法围绕将资产从一个交易所迁移到另一个交易所。 这由合约使用一个单独的函数来处理,该函数只能由合约的所有者访问。

然而,这种迁移最终可能会被调整到基本上任何合同,没有任何限制,这最终成为一个重大疏忽。 因此,如果所有者帐户被盗,这可能会导致新的迁移合约将所有农场池中的所有基本 LP 代币发送到任意地址。 这将导致投资资产的巨大损失。

需要注意的是,这个功能现在对开发者来说已经很熟悉了,所以它最终在 叉子. 但是,如果它仍然存在,则应立即将其视为危险信号。

另一件需要注意的事情是,在一些 MasterChef 分叉中,合约的所有者可以无限制地更改排放率。 但是,如果帐户被盗用,攻击者可能会设置非常高的排放率,这将导致代币贬值。

有一种相当简单的方法可以解决这个问题,只需确保合约所有者可用的所有功能都需要多重签名授权。 这样,如果单个地址被泄露,不良行为者将无能为力。 另一件事是在调用迁移函数时添加一个临时块(Timelock 合约)。 这样,用户就有更多时间做出决定,交易所必须通知你迁移或任何其他可疑交易。

添加相同的养殖池

另一个相当明显但被忽视的问题出现在原始合同没有考虑处理相同的耕作池时,这意味着该合同可能会错误地计算耕作奖励。

如果正确使用 MasterChef,这不是一个大问题,因为所有者不会故意添加相同的池。 事实上,在正常运行的交易所中,这些东西都是经过验证的,并且强烈禁止创建重复池。 因此,如果您开始创建池并沿着创建现有池的副本的路径前进,则系统应该能够报告错误。 或者,建议您将资金添加到现有池中,而不是创建新池。

不计算存入代币数量

出于某种原因,人们往往忘记考虑如果将带有转账佣金的代币或 rebase 代币作为池添加到 MasterChef 合约中会发生什么。 实际发生的情况是计算奖励的方式发生了故障,因为合约代码仅通过调用某些函数将资产添加到池中。 这意味着向地址添加代币会将它们与池中已有的资产结合起来。 但是此类代币的奖励计算可能会被破坏,从而导致漏洞。

运营良好的平台,应通过核对考虑佣金的实际划转金额,分别计算转入养殖资金的数量。 这样,奖励计算就正确完成了。

主厨:结论

MasterChef 是一个单一的智能合约,用于通过在 DEX 中提供流动性来提高产量。 不幸的是,它有一些可以在使用过程中修复的缺陷,但前提是用户知道它们以及他们可以做什么。 

上面我们介绍了可能发生的几件事以及如何避免这些问题。 但应该注意的是,其中还有更多,例如如果将代币直接发送到合约地址会导致奖励稀释、起始块更改问题、gas 优化等等。 

换句话说,有一些漏洞和问题需要牢记和关注。 但总的来说,MasterChef 是一个革命性的合约,它几乎可以实现去中心化交易。 因此,只要您继续谨慎使用它并始终了解它的缺陷以及如何修复它们,就应该没问题。

关于作者

格列布·齐科夫

格列布·齐科夫 是一家联合创始人兼首席技术官 DEFI 保安 和分析公司 哈希表.

â€<A <弗拉德·科罗夫尼科夫 是初级智能合约审计员和开发人员。

有一些t兴说 Masterchef 变通办法或其他什么? 联系我们 或加入我们的讨论 电报频道。 您也可以关注我们 托克, FacebookTwitter.

免责声明

我们网站上包含的所有信息都是真诚发布的,仅供一般参考。 读者对我们网站上的信息采取的任何措施均完全自担风险。

资料来源:https://beincrypto.com/masterchef-smart-contracts-the-workarounds-for-the-fatal-flaws/