概要

二舅币来了,二舅他跑了,相信今天你已经被这样的新闻刷屏了,那他真的跑路了吗?

结论!所谓Twitter上安全专家发推,并引发无数媒体转发的二舅币,其实并没有跑路,并且在31号主动放弃项目管理员特权。

既然想辟谣就要有证据,笔者通过二舅币的智能合约源代码解读并结合链上交易记录的回溯,反证项目方的链上操作,带你分析本案原委。

先声明,我不是项目方,也完全不持有任何二舅币,本文仅从技术研究角度出发解读。


背景

回溯这次新闻传播,始于Twitter上的某安全专家发推,进而被无数媒体转发,通过前后信息传播链路,最初的原文如下图:

其实就传谣角度来说,确实这样的行文非常仿真,描述专业数值惊人,并且Tornado Cash确实也是清洗赃款常见途径,但真是如此吗?130W美元的损失是怎么算出来的。

项目方自己也有所回应:

一开始,项目方还想通过空投,来对其推特粉丝做奖励来形成增粉的目的。

这么一看,似乎真像是即将跑路的样子。

分析

此币部署在BSC币安智能链上并且做了开源验证,都可以通过下地址翻阅到若干证据。

区块链浏览器如何使用可见前文:

当我们在看Etherscan的时候,到底在看什么?

项目方地址:

0x469de2c6357666c69156722e83136ad1919a70aa

二舅币合约地址1

0x6e7ad49f67a9fa80d50f9659c3fc938296d68b58

二舅币合约地址2

0xe67cff48da0156e7978bc5a9a44d516a48d2a1d6

笔者从7.31号下午3点开始撰写本文,拉取到的二舅币链上交易共计1686条。

最初的部署操作的初始化环节,给项目方自己发了1,000,000,000,000,000个二舅币。

<初始化部署,来自bscscan,见附录link3>

其部署时初始化的函数有较大的改动,多数与构建交易池的交互方法有关,不过核心产生资产并转移的部分如下部分代码中的_mint,等于是谁部署,就一次性mint出来给他。

说明:constructor 是合约的初始化函数,仅在合约部署时会被调用执行一次,后续无法执行。

constructor(若干参数){    ..若干代码swapTokensAtAmount = totalSupply_.mul(2).div(10**6); // 0.002%_mint(owner(), totalSupply_);
}

上来全给自己,越看越像Rug的前兆,也难怪别人要谣言你。。

但是发币是发币,得有交易所交易池进行不同币种兑换,才能转成跑路的其他资金,在区块链上发币并不难,5行代码就能发个币,别说100亿个代币,最高能给自己发10后面跟78个0的代币呢,因为标准ERC20对余额的存储类型是uint256,最大值为2**256次方。

那这个代币可以直接进行兑换吗?

源代码合计有3000行,不仅包含标准ERC20以及多数常见的配套插件等,还内嵌了对接交易池的兑换代码。

要跑路,就得有资金交互吧,

  • 要么其他地址对合约进行交易带入

  • 要么项目方自己从交易所池子兑换

笔者读取二舅币的全部合约交易发现,带有value中BNB的仅有一笔交易,有且仅有注入0.126个BNB

虽然二舅币在交易所中已经有大量的交易转移记录了(8K条),从而导致了现在二舅币合计拥有的地址达到1600多个。

但是如果要判断是否跑路,得看项目方发行时给自己持有的代币,有多少通过池子转换成其他代币。

追踪项目方给自己大规模发放的代币的记录,除了部署时给自己的1,000,000,000,000,000

就仅有上图中的第二行的转移操作,项目方将自己的990,000,000,000,000 个代币转入了0地址。

并且计算项目方自己地址的全部交易,可以看到仅有项目方通过pancakeSwapV2,用二舅币换到的1.3个BNB被转出。说明:当前BNB对美元价格为271美金一个BNB。

好家伙,为几百刀就跑路??

所以为何会出现130W美金的说法呢?

盲猜一波,可能这个安全专家是以为转出的是1.3B 的美金?然后觉得太离谱就以为这个”B”不是billion(十亿)而是million(百万)?

当然,如今交易池池子总量里的代币占总量只有0.55%这倒是对的,因为项目方自己销毁了99%的代币。而他的销毁,并没有修改totalSupply (这确实不应该,他的销毁不是调用标准的Burn方法)

总是目前为止,确实可以说,项目方并没有从中恶意牟利到多少钱,

并且,项目方也对谣言发起方反问,也并没有得到回复。

放弃管理权

在31号下午,项目方自己面对流言四起,也做了一个决定性的操作,即放弃项目方的管理员权限。

可以上面图中看到,项目方地址最后的两笔交易操作,即对二舅币的两个合约地址做了所有权转0的操作。

这样真的可以彻底如猴子NFT一样放弃新Mint权吗?

确实可以

放弃所有权执行的是renounceOwnership方法,会将_owner 设置0地址,而这样一来整个合约中,被用onlyOwner修饰过的方法均将无法调度使用了


function renounceOwnership() public virtual onlyOwner {_setOwner(address(0)); // 调度下方函数修改新的管理员
}
function _setOwner(address newOwner) private {address oldOwner = _owner;_owner = newOwner;emit OwnershipTransferred(oldOwner, newOwner);
}
modifier onlyOwner() {require(owner() == _msgSender(), "Ownable: caller is not the owner");_;
}

而无法使用的函数大概有20个,而清除管理员权限最重要的是清除掉Mint出新的token的方法,整个3000行代码里,仅有_setBalance 是调度Mint权限的,当然虽然他没有出现onlyOwner 符号修饰他,是因为他是个internal的方法,这种外部无法调用,仅能被合约内已经定义好的方法调用


function _setBalance(address account, uint256 newBalance) internal {uint256 currentBalance = balanceOf(account);if (newBalance > currentBalance) {uint256 mintAmount = newBalance.sub(currentBalance);_mint(account, mintAmount);} else if (newBalance < currentBalance) {uint256 burnAmount = currentBalance.sub(newBalance);_burn(account, burnAmount);}}

而对应会使用他的两个函数如下,很明显被onlyOwner 修饰,所以后续都将无法使用了。

function excludeFromDividends(address account) external onlyOwner {
function setBalance(address payable account, uint256 newBalance) external onlyOwner

我也进一步分析存储余额的_balances 变量是否有偷留后门来用其他的名字来做绕过,确实也没有发现,至于是否其他的后门,就仰赖高级合约审计大佬们出手了。

总结

项目方确实没跑路,或许是造谣者恶意,或许是他的小编看到下跌以及项目方转走了1.3BNB以为是1.3Milion。

但是链上交易记录不会骗人,合约代码也不会骗人,代码里定义是如何,就不会有所变化。

引用:

安全专家发布:

https://twitter.com/WhoCares_News/status/1552659993530609665

项目方回复:

https://twitter.com/SecondUncle_Dao/status/1553621587697381376

二舅币合约部署交易:

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

项目方得到1.3BNB:

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

项目方转走1.3BNB:

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

写在最后:

前文回顾

EIP-5058 能否防止NFT项目方提桶跑路?

当我们在看Etherscan的时候,到底在看什么?

当奈飞的NFT忘记了web2的业务安全

欢迎你从后台提交技术问题

关注十四,用技术视角带给你价值

【源码解读】火爆的二舅币真的跑路了吗?相关推荐

  1. Evil.js源码解读

    https://github.com/duo001/evil.js 火爆全网的 Evil.js 源码解读 火爆全网的 Evil.js 源码解读 什么?黑心996公司要让你提桶跑路了? 想在离开前给你们 ...

  2. Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_3细说invokeBeanDefinitionRegistryPostProcessors

    文章目录 Pre 细说invokeBeanDefinitionRegistryPostProcessors 流程图 源码分析 解析配置类 parser.parse(candidates) 配置类注册到 ...

  3. IOCP 网络通讯模型源码解读

    From: http://hi.baidu.com/tsingsing/item/1aa5062fa27791fa50fd87b7 以前写服务器的时候用的是iocp,最近偶然发现windows的 网络 ...

  4. php yii框架源码,yii 源码解读

    date: 2017-11-21 18:15:18 title: yii 源码解读 本篇博客阅读指南: php & 代码提示: 工欲善其事必先利其器 yii 源码阅读指南: 整体上全貌上进行了 ...

  5. Slim 框架源码解读

    0x00 前言 Slim 是由<PHP The Right Way>作者开发的一款 PHP 微框架,代码量不算多(比起其它重型框架来说),号称可以一下午就阅读完(我觉得前提是熟悉 Slim ...

  6. 当我们谈论Virtual DOM时,我们在说什么——etch源码解读

    etch简介 首先我们有必要介绍一下etch. etch是atom团队下的开源项目,是一套非常简洁然而功能十分完善的virtualDOM机制.我在偶然的情况下接触到了这个开源项目,在读README时为 ...

  7. 【Deformable DETR 论文+源码解读】Deformable Transformers for End-to-End Object Detection

    目录 前言 一.背景和改进思路 二.细节原理和源码讲解 2.1.多尺度特征 2.1.1.backbone生成多尺度特征 2.1.2.多尺度位置编码 2.2.多尺度可变形注意力 2.2.1.普通多头注意 ...

  8. 知秋源码解读分享系列(转)

    前序 知秋:人称飞哥,Java 界真·大佬.我线上认识的朋友,线下也见过好多次.认识这么多年以来给我的印象就是:人好技术更好,在 Java 响应式编程这个领域有着自己独到的见解,并且一直以来都默默无闻 ...

  9. ThinkPhp 源码解读 Model篇

    ThinkPhp 源码解读 Model篇 本篇主要讲解TP下 Model Query Connection DB Builder 类的关系 最终理解 model('xxx')->startTra ...

最新文章

  1. 合工大python期末复习知识点汇总
  2. QFile练习(20200213)
  3. cloud foundry_Spring 3.1,Cloud Foundry和本地开发
  4. linux 喂狗时间,狗狗正确喂食时间表,喂狗最佳时间指南
  5. 3月3日发布!realme V25正式官宣:超大内存的国潮手机
  6. PMP教程第6版中文 网盘下载
  7. python怎么安装requests包_python怎么安装requests库
  8. 个人喜欢的sublime主题Boxy
  9. VS项目下写.bat脚本清理中间文件,减少内存空间
  10. powerdesigner16 license key过期问题
  11. 大数据分析应用的九大领域
  12. 后进市场如何盈利?来看汉庭加盟经营逻辑
  13. dns服务器不可用了怎么修复,dns服务器可能不可用怎么解决(dns服务器最有效的解决方法)...
  14. View事件分发机制
  15. 百度前端学院--斌斌学院--demo---3
  16. 谷歌眼镜Mirror API开发指南之Timeline
  17. 根据卡号前6位判断开户银行
  18. Nginx学习之Nginx高性能的实现原理
  19. 心电图多少为正常范围_正常心电图波形特点和正常值 是多少?
  20. Google排名新算法之二

热门文章

  1. 做个简单的Java学生考勤系统01--实体类的创建与建表
  2. 30 天精通 RxJS (03): Functional Programming 通用函数
  3. FlinK运行一段时间后任务任务自己挂掉的问题排查
  4. JavaScript交互式网页设计——函数与事件
  5. 树-堆结构练习——合并果子之哈夫曼树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descrip
  6. AI 文件怎么变线框了?
  7. 鸿蒙系统能装在小米电视上吗,小米会用鸿蒙系统吗_小米会不会用鸿蒙系统
  8. python keyboard方法_python 偷懒技巧——使用 keyboard 录制键盘事件
  9. 程序员怎么提高自己的编程能力?大厂技术总监的建议
  10. 15年的游戏生涯中刺激到我的那些片段