使用web3
web3.eth.getCode()方法返回指定地址上代码的16进制字符串,由于普通账户地址处没有代码,因此将仅返回16进制前缀
0x
。利用这个我们可以进行判断该地址是普通地址还是合约地址。1
2
3
4
5var code = await this.web3.eth.getCode(address);
if(code === '0x') {
return false;
}
return true;
- 使用合约判断
在合约内,可以使用EVM汇编代码来获取指定地址处的代码大小。
普通账户地址因为没有代码将返回0:1
2
3
4
5
6
7contract EzDemo {
function isContract(address addr) returns (bool) {
uint size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}