V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dappreview
V2EX  ›  区块链

关于昨天蔡文胜的 BEC 智能合约出现漏洞,又一个要归零的币 = =

  •  2
     
  •   dappreview · 2018-04-23 08:23:26 +08:00 · 7057 次点击
    这是一个创建于 2411 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为该智能合约批量转帐函数中一行代码的疏忽,导致溢出了。。。
    所以出现以下奇观。
    一笔高达 57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000 的代币转账

    该笔交易围观地址:

    https://etherscan.io/tx/0xad89ff16fd1ebe3a0a7cf4ed282302c06626c1af33221ebe0d3a470aba4a660f

    看了一下智能合约代码
    出现问题的函数在 255 行这个 batchTransfer

    function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) {
        uint cnt = _receivers.length;
        uint256 amount = uint256(cnt) * _value;
        require(cnt > 0 && cnt <= 20);
        require(_value > 0 && balances[msg.sender] >= amount);
    
        balances[msg.sender] = balances[msg.sender].sub(amount);
        for (uint i = 0; i < cnt; i++) {
            balances[_receivers[i]] = balances[_receivers[i]].add(_value);
            Transfer(msg.sender, _receivers[i], _value);
        }
        return true;
      }
    

    合约围观地址
    https://etherscan.io/address/0xc5d105e63711398af9bbff092d4b6769c82f793d#code

    注意到这一行

    uint256 amount = uint256(cnt) * _value;
    

    没有对 amount 做溢出的检测。。 传入的_value 值在第一张图中 8000000000000000000000000000000000000000000000000000000000000000

    转账地址为 2 个,所以 cnt =2
    于是乎 amount 就溢出了。。

    不是 Copy 一个智能合约改一改就叫区块链了

    第 1 条附言  ·  2018-04-23 13:16:45 +08:00
    小广告
    对 DApp 和智能合约开发感兴趣的小伙伴,欢迎关注微信公众号:DAppReview
    专注于技术类分享和深度干货,非资讯类公众号
    不喜勿关
    16 条回复    2018-04-26 19:22:18 +08:00
    muziki
        1
    muziki  
       2018-04-23 08:27:48 +08:00 via iPhone
    讲道理 涉及数值操作下意识就是溢出之类的安全检查吧……
    dappreview
        2
    dappreview  
    OP
       2018-04-23 08:30:52 +08:00
    @muziki 在 5 分钟就能发币赚钱的生意里面,什么测试啦、code review 啦、代码安全审计啦 都是浮云
    jellybool
        3
    jellybool  
       2018-04-23 08:32:36 +08:00 via iPhone
    灵车
    ob
        4
    ob  
       2018-04-23 09:08:16 +08:00 via Android
    这就归零了。。
    maichael
        5
    maichael  
       2018-04-23 09:13:16 +08:00
    抄都抄出问题,怕不是自己留的后门。
    ariesjia
        6
    ariesjia  
       2018-04-23 09:38:32 +08:00
    好好地用 safeMath 好好地, 都应该用上 lint 所有的运算符都不允许使用 必须 safeMath
    DearMark
        7
    DearMark  
       2018-04-23 09:49:47 +08:00
    说归零,就归零,牛币。
    deadEgg
        8
    deadEgg  
       2018-04-23 10:07:37 +08:00
    人可以投票回滚,和原来以太坊一样

    清零是什么说法?
    skadi
        9
    skadi  
       2018-04-23 10:08:10 +08:00
    2^255 笑死.
    OrangeM21
        10
    OrangeM21  
       2018-04-23 10:40:38 +08:00
    你给的传入的数值是 16 进账的,真正传的数值是 10 进制。hahaha.
    drakeet
        11
    drakeet  
       2018-04-23 10:50:10 +08:00   ❤️ 1
    龟苓膏
    Hconk
        12
    Hconk  
       2018-04-23 12:11:50 +08:00 via Android
    @deadEgg 这种 token 出漏洞是不可能让以太坊回滚区块的,除非是以太坊自身的漏洞才有可能投票回滚。
    清零是币价归零。
    deadEgg
        13
    deadEgg  
       2018-04-23 15:49:19 +08:00
    @Hconk 哦 我理解错了,那看起来得清零了
    gftfl
        14
    gftfl  
       2018-04-23 20:22:47 +08:00
    以前 265 的那个蔡老板吗?
    davidqw
        15
    davidqw  
       2018-04-24 03:40:27 +08:00
    人家币种牛逼,还可以停服的
    haidaotao
        16
    haidaotao  
       2018-04-26 19:22:18 +08:00
    这韭菜割得连根都没剩下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5574 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 01:33 · PVG 09:33 · LAX 17:33 · JFK 20:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.