以太坊外部账户EOA与合约账户CA的区别
Posted sanqima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊外部账户EOA与合约账户CA的区别相关的知识,希望对你有一定的参考价值。
在以太坊中,账户拥有4个字段:{nonce,balance,codeHash,StorageRoot}。
一共分为2种账户:外部账户、合约账户。
外部账户,Externally Owned Accounts,简称EOA,它拥有私钥,其codeHash为空。
合约账户,Contact Account,简称CA,它没有私钥,其codeHash非空。
比较 | 外部账户 | 合约账户 |
---|---|---|
拥有私钥 | 是 | 否 |
codeHash内容 | 为空 | 非空 |
主动发起交易 | 是 | 否,只能被动发起交易 |
拥有余额 | 是 | 是 |
地址长度 | 20字节 | 20字节 |
判断一个地址是否为合约地址的方法如下:
//judge.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
library Address {
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {
codehash := extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
}
以上是关于以太坊外部账户EOA与合约账户CA的区别的主要内容,如果未能解决你的问题,请参考以下文章