Hi Guest

More contents, please log on!

Bitmere.com 区块链技术 Content

ERC223: 防止转账黑洞

24 0 0
以太坊的智能合约和普通用户的地址是被一样对待的,没法判断一个地址是智能合约还是普通用户。当你误操作向一个智能合约转账,就真的转过去了,然后 token 就丢了。

There is no way in solidity to check if an address is a contract. One of the goals of Ethereum is for humans and smart contracts to both be treated equally.

  • 给智能合约转 Ether,作为 gas;
  • 比如向 bancor 的智能合约转 token 抵押在那里,转进去的 token 在卖出操作时会转出;

    但是大多数 smart contract 的 token 是不能转出的,只要合约里没写转出的逻辑,就不能转出。以太坊将智能合约看做是独立的个体,没人知道它的私钥,给不支持转出的智能合约转 token 就等于销毁了。
    当我们要转账时,会转到交易方的地址,不会闲着没事给智能合约转 token。但是这种事情仍然会发生,不断有人给 EOSTokenContract 转 EOS(见下图),EOSTokenContract 账户下现在有 154,834 EOS,价值 $1,176,738.4(价格 $7.6)。类似的,QtumTokenContract 账户下现在有 22,293 QTUM,价值 $158,280.3(价格 $7.1)。
    这些 token 都都都都销毁了 (⊙?⊙)

    Dexaran 认识到了这个问题,

    Contracts that are not designed to work with tokens must reject incoming token transactions. Otherwise, each token becomes a potential token trap.
    ERC20 token standard issues.(google docs)

    并在 github 创建了一个 issue。
    tokenFallback 函数,当转账到不能转出的智能合约地址时,将自动取消。
    contract ERC223 {
      function transfer(address to, uint value, bytes data) {
            uint codeLength;
            assembly {
                codeLength := extcodesize(_to)
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            if(codeLength>0) {
                // Require proper transaction handling.
                ERC223Receiver receiver = ERC223Receiver(_to);
                receiver.tokenFallback(msg.sender, _value, _data);

    The biggest change is that ERC223 no longer allow token to be transferred to a contract that does not allow token to be withdrawn.
  • BitMere.com is Information release platform,just provides information storage space services.
    The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
    You have to log in before you can reply Login | 立即注册

    Points Rules

    Write the first review

    杨小公子君莫邪 初中生
    • Follow


    • Following


    • Articles