在世界上的大多数地方,您需要一个能够存储本国货币的银行账户。没有这样的银行账户,您将没有地方接收应得的资金。以太币(ETH)或几乎任何其他加密货币也是同样的情况。为了接收和存储 ETH,您需要一个以太坊账户。
账户是最基本的存储需求单元,就像比特币协议中的地址一样。账户的概念与钱包的概念不同,钱包实际上可以管理多个账户。在以太坊上有两种类型的账户——即外部拥有的账户和合约账户,这两者在本质上有所不同,但也有某些相似之处。
##账户类型 首先,从控制方式来看,有两种类型的账户。外部拥有的账户,也称为 EOA,是普通用户账户,基本上就是私钥和公钥的对。另一种类型是所谓的合约账户。与由私钥控制的外部拥有的账户不同,合约账户由代码控制。
外部拥有的账户的基本功能是它可以持有以太币余额。外部拥有的账户还能够发送和接收交易。
外部拥有的账户的概念与比特币协议中的地址概念相似。也就是说,一个以太坊账户由与其公钥对应的私钥控制。后者被哈希以确定账户地址,而前者用于生成签名和授权出站交易。
但因为以太坊区块链的功能性扩展超出了比特币协议,所以从外部拥有的账户发送交易不仅限于加密货币转账。相反,账户还能触发合约代码,这意味着它可以用来部署智能合约或触发智能合约功能。
与外部拥有的账户类似,合约账户(有时拼写为合约账户)也可以持有以太币或 ERC-20 代币的余额。然而,外部拥有的账户是由私钥控制的,合约账户则不是。
与外部拥有的账户不同,合约账户由智能合约代码控制。这意味着没有私钥可以让账户的外部拥有者花费存储在合约账户地址上的货币。而是代码执行是由来自其他合约的交易或消息(即调用)触发的。
每当被调用时,合约账户执行各种任意复杂的操作。合约账户可以操纵其持久存储(即使您未连接到以太坊网络也会保留的存储;类似于您的计算机上的 HDD 与 RAM),这意味着其状态并不总是相同的,当账户被调用时可以改变。此外,合约账户能够调用其他合约。
不论是考虑外部拥有的账户(由私钥控制的用户账户)还是合约账户(由代码控制的账户),每个以太坊账户都有一个基本状态,总是包括以下四个要素: