Uniswap V2 经常遇到的一些错误代码

Uniswap V2 经常遇到的一些错误代码,第1张

常见错误

本文档涵盖了在 Uniswap V2 上构建时经常遇到的一些错误代码。

UniswapV2:K

这是一个经常遇到的错误,需要一些上下文来理解它。

Uniswap 常数乘积公式为“X * Y = K”。其中 X 和 Y 代表两个 ERC-20 代币各自的储备余额,“K”代表储备的乘积。“K”错误所指的正是这个“K”。

本质上,“K”错误意味着尝试进行的交易以某种方式使交易对的储备金少于应有的储备金,因此交易被撤销。

这可能有几个不同的原因。

转让

最常见的例子是由“转账费用”代币引起的。

转账

在大多数情况下,转账代币的费用会消耗或转移每笔转账的一小部分,这样转账的接收者最终会比发送者支付的要少一些。这被称为转让的“包容性”费用。

在转账代币包含费用的情况下,您可以使用路由器合约中以"Supporting FeeON Transfer"结尾的相应兑换功能。这些函数通过在计算不变量时调整“amountOutMin”参数来检查收件人金额而不是发送金额来成功。

转让

另一种类型的转账代币“独家”费用通过在初次转账后从发送地址发送额外转账来工作。因为路由器合约在计算不变量时无法预料到这种尾随传输,所以交易将要么恢复,要么通过发送主传输而部分成功,但在尾随传输时破坏池。

在转让代币专属费用的情况下,SupportingFeeOnTransfer 功能可能会起作用,但会有一些代币设计成从根本上破坏路由器。如果您在使用这些功能时仍然收到“K”错误,您可能需要创建一个适合您的代币设计的路由器合约的分叉。

变基代

“K”错误的不太常见的实例是重新定位令牌的结果。

变基代币可以任意改变任何持有其代币的地址的余额。这通常在预先指定的时间间隔内起作用,并且是由于在变基代币的经济学中使用了一些变量。

变基令牌通常以两种方式工作。

负变基代

更常见的变体是负变基代币,它会压缩代币所有者的余额。因为 rebase 不是由传输触发的,所以路由器无法预期 rebase 何时或如何发生。一旦这样做,该货币对的储备将不平衡,下一个与该货币对进行交易的人将承担因重新设置基准而产生的增量成本。

不用说,一个令人羡慕的位置。

负变基代币通过更改其代币合约以在涉及 Uniswap 路由器合约的每笔交易结束时调用交易对上的同步来解决此错误,那些对分叉路由器合约感兴趣的人应该预料到,在令牌合约更新以适应您的新路由器之前,负变基令牌将破坏该对。

积极的变基代

正变基代币任意增加代币持有者的余额。当一个正的 rebase 发生时,它会在交易对中产生一个未计入的盈余。由于交易对中的额外代币下落不明,因此任何人都可以在交易对上调用 skim() 并有效地窃取重新平衡的正差。

虽然正向再平衡不会破坏 Uniswap 的任何功能,但对它们感兴趣的人应该知道,在任何货币对中发现的正向余额都可以免费获取。

关于变基代

对于那些有兴趣构建变基代币的人,请注意:许多涉及去中心化交易和流动性供应的合约将在与您的代币交互时中断。可以在CHAI中找到一个示例方法,该方法将导致在未来协议中更容易集成。CHAI 使用包含包装器内重新平衡的包装器功能,以便可赎回代币可以轻松集成到许多不同的系统中。

UniswapV2:锁定

LOCKED 错误是路由器合约中内置的保护措施,可防止自定义重入合约在交易结束时尝试将恶意代码返回到路由器合约中。

在使用 Ganache CLI 将以太坊主网分叉到本地实例作为开发环境的一部分时,通常会遇到此错误。该错误是 Ganache-Cli 中的一个错误,希望 truffle 团队在未来的版本中修复它。

只需重新启动本地分叉即可获得临时修复。

无法访问存档节点

这是 Metamask 或 Ganache-CLI 的错误。它通常发生在实例化本地分叉并部署合约但有一个失败的事务之后。

可以通过重新启动本地分叉并重置元掩码来临时修复。

UniswapV2:TRANSFER_FAILED

这意味着核心合约无法将代币发送给收件人。这很可能是由于代币诈骗,代币所有者以允许用户购买代币但不出售代币的方式恶意禁用了转账功能。

UniswapV2:已过期

这是由于交易时间过长而无法广播到主网的结果。

Uniswap 本身并不设置 gas 价格,因此大多数用户默认使用 metamask 中建议的 gas 价格。但是,有时 metamask 会出错,并将 gas 价格设置得太低。如果交换执行时间超过 20 分钟,核心合约将不允许它通过。

找到准确的汽油价格可能是一个挑战,目前,我们喜欢GAS NOW。

行动需要积极的储备

处理事务时出现 VM 异常: *** 作需要活动预留

这可能是处理闪存交换时遇到的一个 ganache 错误。我们还没有弄清楚它的来源。

无法在前端批准交易

在极少数情况下,用户无法在 Uniswap 前端批准令牌。

这是因为一些代币合约采取了措施来防御恶意合约,这些合约试图抢先获得批准并窃取用户代币。只有当用户试图将批准限额从预先分配的金额增加到更大的金额时才会发生这种情况,并且只会发生在少数代币合约中。

解决方案是让用户手动将路由器合同批准数量设置为零,然后设置为他们想要的数量。最简单的方法是通过 Etherscan。

欢迎各位大神萌新一起专研分享技术。。欢迎加入【IT技术交流群】:958319786

学如逆水行舟,不进则退。心似平原跑马,易放难收。IT技术是指掌握多种技能,并能利用多种技能独立完成产品的人。 也叫全端工程师(同时具备前端和后台能力),英文Full Stack engineer。【人工智能】【区块链】【系统/网络/运维】【云计算/大数据】【数据库】【移动开发】【后端开发】【游戏开发】【UI设计】【微服务】【爬虫】【Java】【Go】【C++】【PHP】【Python】【Android/IOS】【HTML/CSS】【JavaScript】【Node】。
————————————————

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/925458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存