主页 > imtoken下载链接 > 如何判断以太坊账户类型

如何判断以太坊账户类型

imtoken下载链接 2024-01-26 05:12:32

2019年独角兽企业招聘Python工程师标准>>>

hot3.png

以太坊中有两种类型的账户,它们共享相同的地址空间。

外部账户地址由公钥确定以太坊有哪两种账户,合约账户地址在创建合约时确定。

合约账户存储代码以太坊有哪两种账户,外部账户不存储代码,除此之外,两类账户对于 EVM 是相同的。 每个账户都有一个键值对形式的持久化存储。 key和value的长度都是256位,名字是storage。

此外,每个账户都有一个以太币余额(以“Wei”为单位),可以通过向其发送以太币交易来更改。

web3 实现

使用 web3.eth.getCode() 方法判断给定地址的账户是外部账户还是合约账户。 此函数返回指定地址的代码。 由于外部账户没有code,所以只会返回0x,而合约账户会返回以0x开头的十六进制代码串。 例如:

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

扎实实施

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

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

推荐两篇以太坊相关的实用教程:

更多内容可以访问博客: