以太坊中有两类账户,它们共用同一个地址空间。
- 外部账户,该类账户被公钥-私钥对控制(人类)。
- 合约账户,该类账户被存储在账户中的代码控制。
外部账户的地址是由公钥决定的,合约账户的地址是在创建该合约时确定的。
合约账户存储了代码,外部账户则没有,除了这点以外,这两类账户对于EVM来说是一样的。 每个账户有一个key-value形式的持久化存储。其中key和value的长度都是256比特,名字叫做storage.
另外,每个账户都有一个以太币余额(单位是“Wei"),该账户余额可以通过向它发送带有以太币的交易来改变。
web3实现
使用web3.eth.getCode()方法可以判断一个给定的地址的账户是外部账户,还是合约账户。这个函数返回指定地址的代码,由于外部账户没有代码,因此仅仅会返回
0x
,而合约账户将会返回
0x
开头的16进制代码字符串。例如:
var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")
if(code === '0x') console.log('外部账户')
else console.log('合约账户')
在solidity中实现
在合约内,可以使用EVM汇编代码来获取指定地址处的代码大小,显然,普通账户地址将返回
:
|
推荐两个以太坊相关的实战教程:
- 区块链初学者 : 以太坊 DApp 实战开发入门
- 区块链开发进阶:去中心化以太坊 DApp 电商平台实战开发
更多的内容可以访问博客:
http://blog.hubwiz.com/2018/02/12/how-to-check-ethereum-address/
版权声明:本文为CSDN博主「weixin_33859231」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_33859231/article/details/92415142