? ? 在以太坊中,账户拥有4个字段:{nonce,balance,codeHash,StorageRoot}。 ? ? 一共分为2种账户:外部账户、合约账户。 ? ? 外部账户,Externally Owned Accounts,简称EOA,它拥有私钥,其codeHash为空。 ? ? 合约账户,Contact Account,简称CA,它没有私钥,其codeHash非空。
比较 | 外部账户 | 合约账户 |
---|
拥有私钥 | 是 | 否 | codeHash内容 | 为空 | 非空 | 主动发起交易 | 是 | 否,只能被动发起交易 | 拥有余额 | 是 | 是 | 地址长度 | 20字节 | 20字节 |
? ? 判断一个地址是否为合约地址的方法如下: ? ? //judge.sol
pragma solidity ^0.6.2;
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly {
codehash := extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
}
|