前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【源码解读】火爆的二舅币真的跑路了吗?

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

作者头像
十四君
发布2023-02-18 17:53:56
2780
发布2023-02-18 17:53:56
举报
文章被收录于专栏:Urlteam

概要

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

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

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

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


背景

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

<来自推特,见附录link>

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

项目方自己也有所回应:

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

<来自推特,见附录link>

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

分析

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

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

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

项目方地址:

0x469de2c6357666c69156722e83136ad1919a70aa

二舅币合约地址1

0x6e7ad49f67a9fa80d50f9659c3fc938296d68b58

二舅币合约地址2

0xe67cff48da0156e7978bc5a9a44d516a48d2a1d6

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

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

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

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

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

代码语言:javascript
复制
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

<来自bscscan对合约交易记录的批量下载>

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

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

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

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

<销毁99%的token,来自bscscan,见附录link4>

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

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

<来自bscscan对合约交易记录的批量下载>

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

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

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

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

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

<来自推特,见附录link> 放弃管理权

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

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

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

确实可以

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

代码语言:javascript
复制
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的方法,这种外部无法调用,仅能被合约内已经定义好的方法调用

代码语言:javascript
复制
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 修饰,所以后续都将无法使用了。

代码语言:javascript
复制
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


前文回顾

NFT租赁提案EIP-5006步入最后审核!让海外大型游戏的链改成为可能 【解读合约审计】Harmony链桥被盗一亿美金分析? 【源码解读】新标准4907是怎样实现NFT租赁的? 【解密】OpenSea免费创造的NFT都没上链竟能出现在我的钱包里? 【源码解读】你买的NFT到底是什么?

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 十四君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析
  • 所以为何会出现130W美金的说法呢?
  • 总结
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档