Zihao

Make small but daily progress

0%

0x13--检测是否为合约地址

  1. 使用web3

    web3.eth.getCode()方法返回指定地址上代码的16进制字符串,由于普通账户地址处没有代码,因此将仅返回16进制前缀0x。利用这个我们可以进行判断该地址是普通地址还是合约地址。

    1
    2
    3
    4
    5
    var code = await this.web3.eth.getCode(address);
    if(code === '0x') {
    return false;
    }
    return true;
  1. 使用合约判断
    在合约内,可以使用EVM汇编代码来获取指定地址处的代码大小。
    普通账户地址因为没有代码将返回0:
    1
    2
    3
    4
    5
    6
    7
    contract EzDemo {
    function isContract(address addr) returns (bool) {
    uint size;
    assembly { size := extcodesize(addr) }
    return size > 0;
    }
    }

欢迎关注我的其它发布渠道