以太坊中有两类帐户,它们共用同一个地址空间。web
外部帐户的地址是由公钥决定的,合约帐户的地址是在建立该合约时肯定的。函数
合约帐户存储了代码,外部帐户则没有,除了这点之外,这两类帐户对于EVM来讲是同样的。 每一个帐户有一个key-value形式的持久化存储。其中key和value的长度都是256比特,名字叫作storage.区块链
另外,每一个帐户都有一个以太币余额(单位是“Wei"),该帐户余额能够经过向它发送带有以太币的交易来改变。ui
使用web3.eth.getCode()方法能够判断一个给定的地址的帐户是外部帐户,仍是合约帐户。这个函数返回指定地址的代码,因为外部帐户没有代码,所以仅仅会返回0x
,而合约帐户将会返回0x
开头的16进制代码字符串。例如:spa
var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8") if(code === '0x') console.log('外部帐户') else console.log('合约帐户')
在合约内,能够使用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