3

Popcornswap合约解析+教你如何避免大部分土矿风险

 3 years ago
source link: https://www.jinse.com/blockchain/992927.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近惊闻BSC上2个土矿又跑路了,金额在千万级别,有一个矿朋友还中招了,实在是看不下去,和大家谈谈,如何避免大部分土矿的坑。

土矿一般来讲,抽走资金一般这几个步骤:

  1. 通过高APY吸引你冲动梭哈(注意,很多鸡贼的土矿都是写APR,看起来更高,用APR的土矿求稳可以直接关闭),毕竟高APY都是真金白银支撑的,收益这么高大户早来了,正所谓的收益越高,风险越大

  2. 通过一些“所谓的”安全措施(timelock等)让你觉得风险很低

  3. 盗取资金之后马上换为非erc代币或者无法冻结的代币,然后等待混币机会逃走

看到了这个步骤,你应该明白了,如果能够做到:

  • 不开源的土矿一律不碰,不管他APY写的多么诱人

  • 开源的土矿,如果要参与,一定是在diff合约,检查变量参数之后,少量资金参与。(然而可能还有风险,比如popcornswap,会详解)

那么相信你能规避大部分风险,下面简单讲一下怎么diff合约,怎么检查参数,以及一些衍生的思考。(小白向)

第一步:diff

这里以在线对比工具 https://www.diffchecker.com/ 为例

注意一点,diff的合约需要是你真实要转币进去的合约地址(可以转非常少的量去拿地址)

首先拿到原版的MasterChef代码(这里以pancakeswap为例):

https://bscscan.com/address/0x73feaa1ee314f8c655e354234017be2193c9e24e#code

接着这里以popcornswap为例:

https://bscscan.com/address/0x584527ded17aceb3dc617c40b04e8fe9afc57096#code

分别吧代码复制到两边,开始diff

这里我保存了diff结果,可以直接点这个link:https://www.diffchecker.com/VqaCP3DK

像结果中字符串(名称等)的修改,或者// 后的内容(注释)都可以忽略

6bEFbiR.jpg!mobile

如上图这种,可以忽略

如果是原版添加的代码,土狗删除的,一般也不重要,重点是土狗和原版代码不同的地方:

JruaMj.jpg!mobile

上图为关键差异, 土狗修改了原版的migrator方法,还增加了个一个叫做preUpgrade的函数

看到这里,如果你对合约一无所知,安全期间,就可以直接 关闭页面 保平安了。

这里简单分析一下差异,首先migrate方法,这个是sushiswap继承的代码, 原版代码就有将池子里钱掏空的可能性 (所以土狗如果有migrate方法,求稳就不要去玩)。

popcorn这里, 新的preUpgrade方法,是public的,代表所有人都能调用 ,就是一个非常可疑的点,理论上在migrator设置为恶意地址的时候能够让migrator掏空所有的钱。

第二步:检查变量

点击土狗合约的这个按钮:

eMjuqmb.jpg!mobile

检查migrator,owner等变量:( owner是核心

EbQ7zmM.jpg!mobile

可以看到migrator是0,owner是一个timelock地址,土狗的一种套路是, 声称自己有timelock,给出了合约地址,但owner并不是timelock的地址,那明显就是骗局了

当然 timelock合约,也可以做小动作 ,所以也需要做diff操作,这里他的timelock没有问题,就不赘述了

那么完成了上面两步,很多资深矿工可能会觉得, timelock有的,合约变量没问题虽然有代码存在风险,但是有timelock啊,没事,冲tmd ,对低级土狗而言,可能确实就无风险了,但很可惜,popcornswap是一个略高级的土狗。看我下面分解盗币过程:

项目方通过调用:

https://bscscan.com/tx/0x38f75296e3343228c0309f8c99a24ca4f4812372f2b032f38ce25ac5a992b768

preUpgrade方法,让自己的地址有了 合约里token的transferFrom权限 (简单理解为uniswap交易之前你需要allow合约花你的币,这里是allow自己花合约里的币)

看前面的代码可以发现, preUpgrade确实又这个功能,但他只会给migrator这个权限,而migrator又是0,修改migrator需要经过时间锁 ,那么他是怎么做到的呢?(这个问题其实也困扰了我一会)

答案是:项目方在部署合约后,加timelock之前,把migrator改成了自己的地址,并通过preUpgrade提前获取了里面所有token的allowance,然后 再改回migrator,添加时间锁

因为这些tx混在项目方 添加池子的tx中普通人根本不可能去检查一个池子之前的每一个tx ,所以popcornswap得以在2小时内盗取2mil的代币。

这个作案手法也引起了我的思考,目前 并没有有效的工具,能够查出一个合约地址里,token allow给其他地址的情况 ,因此非常难发现问题。 普通的用户,没有能力,也不太可能发现这个端倪,甚至我相信在本次事件中,一些对合约代码有所了解的土矿老司机也一并翻车

那么popcornswap的解析就讲到哪里,下面是我个人的一些思考,以及私货(不愿意看的朋友就可以关闭文章了)

后续思考

本次作案手法曝光之后,相信 未来的土矿也很有可能利用类似的手法进行盗币 ,而对普通用户而言防不胜防,事实上最近2天bsc上就有2个矿翻车,金额还都不小。

作为交易所公链,不管是bsc,还是heco,他们的 核心竞争力是什么?是去中心化吗?

我个人认为不是的。

bsc,heco等,他们最大的优势应该是 1. 低手续费 2. 交易所公信力背书

以bsc为例, 作为一个类似DPos的设计公链,跨链桥非去中心化,以及上面的大部分资产都是币安发放的情况下,即使代码开源,谈何去中心化

个人认为, 反而应该反其道行之,引入类似EOS的仲裁机制,最大程度的保证用户在链上的的财产安全才是生存之道。

本次popcornswap事件以及最新翻车的土矿, 币安目前都还在踢皮球阶段,要求用户去报案或者说我们在监视黑客地址等等,而不是想办法帮用户挽回损失 ,长此以往,当土矿跑路越来越多的情况下,请问币安,谁还会去用BSC?

如果类似事件在Heco或者其他交易所公链发生,而他们拥有类似的安全机制,保证了用户的资产安全,这样大部分散户才敢放心的在上面继续使用, 毕竟,你作为交易所背书的公链,优势不是,也不可能会是去中心化。

希望所有交易所公链技术团队三思, 通过代码升级保证自己公链的安全性来差异化竞争,也许还不太晚。

原标题:Popcornswap合约解析+教你如何避免大部分土矿风险

作者:iNexusPro


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK