如何判断一个以太坊地址是是智能合约地址或者ETH普通地址

时间:2018-07-13作者:klpeng分类:IT综合浏览:12973评论:0

根据不同的应用场景分成两种

1.web3.js在DAPP应用开发时使用

2.solidity智能合约开发时使用

以下是具体实现

1.web3.js在DAPP应用开发时使用

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

 
  1. var code = web3.eth.getCode("0xbfb2e296d9cf3e593e79981235aed29ab9984c0f")

  2. if(code === '0x') console.log('普通账户')

  3. else console.log('合约账户')

2.solidity智能合约开发时使用

在solidity中实现在合约内,可以使用EVM汇编代码来获取指定地址处的代码大小,显然,普通账户地址将返回0:

 
  1. contract Demo {

  2.        function isContract(address addr) returns (bool) {

  3.        uint size;

  4.        assembly { size := extcodesize(addr) }

  5.        return size > 0;

  6.       }

  7. }

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢