以太坊帐户类型如何判断

以太坊中有两类帐户,它们共用同一个地址空间。web

  • 外部帐户,该类帐户被公钥-私钥对控制(人类)。
  • 合约帐户,该类帐户被存储在帐户中的代码控制。

外部帐户的地址是由公钥决定的,合约帐户的地址是在建立该合约时肯定的。函数

合约帐户存储了代码,外部帐户则没有,除了这点之外,这两类帐户对于EVM来讲是同样的。 每一个帐户有一个key-value形式的持久化存储。其中key和value的长度都是256比特,名字叫作storage.区块链

另外,每一个帐户都有一个以太币余额(单位是“Wei"),该帐户余额能够经过向它发送带有以太币的交易来改变。ui

web3实现

使用web3.eth.getCode()方法能够判断一个给定的地址的帐户是外部帐户,仍是合约帐户。这个函数返回指定地址的代码,因为外部帐户没有代码,所以仅仅会返回0x,而合约帐户将会返回0x开头的16进制代码字符串。例如:spa

var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")
if(code === '0x') console.log('外部帐户')
else console.log('合约帐户')

 

在solidity中实现

在合约内,能够使用EVM汇编代码来获取指定地址处的代码大小,显然,普通帐户地址将返回0.net

contract EzDemo {
    function isContract(address addr) returns (bool) {
    uint size;
    assembly { size := extcodesize(addr) }
    return size > 0;
  }
}

 

推荐两个以太坊相关的实战教程:3d

更多的内容能够访问博客:code

http://blog.hubwiz.com/2018/02/12/how-to-check-ethereum-address/blog

相关文章
相关标签/搜索