账户模型是共享账本(区块链)的主要记账模型。与 UTXO 模型一样,它用于记录、存储和执行链上交易。账户模型被以太坊所使用。
什么是 UTXO 模型?UTXO 模型有什么特点?请参考“什么是 UTXO 模型”章节。
账户模型使用账户内余额作为交易的会计计量单位。 这是它与 UTXO 模型的主要区别。 UTXO 模型使用交易中未花费的加密货币部分作为会计衡量标准。 账户模型可以看作是传统银行的数字版本。 在该模型中,数字资产被记录为账户内的余额,就像传统的银行账户一样。
账户模型是一个计算模型。 当交易发生时,系统会根据用户的交易指令,触发节点改变账户余额。 然后由系统计算每个账户中余额的变化并记录余额的最新状态。
在以太坊中,账户的状态不存储在区块链上,而是由节点在本地计算和存储。区块链上只存储交易指令。
在以太坊中,有两种类型的账户:外部所有账户(EOA)和合约账户。
指由私钥控制的用户帐户。
用户可以在 MetaMask 钱包中创建此类账户。 每个 EOA 都有一个私钥和一个地址,它可以直接发起交易。
指由智能合约代码控制的账户。
与 EOA 不同,合约账户没有私钥,它拥有一个智能合约代码。 该账户由其智能合约代码运行。 代码在合约账户创建时记录在链上,并由 EVM 执行。
合约账户不能像 EOA 一样发起交易,它只能调用其他合约内的函数来响应交易指令。 简单来说,交易指令会调用合约内的函数,提取参数(比如 $ETH 数量)来改变账户余额,从而完成交易。
每当有人向合约地址发送交易时,它都会导致合约在 EVM 中运行,并将交易作为其输入。 发送到合约地址的交易可能有 $ETH 或数据,或两者都有。 如果它们包含 $ETH,它将“存入”到合约余额中。 如果它们包含数据,数据可以在合约中指定一个命名函数并调用它,将参数传递给函数。
在账户模型中,交易的结果取决于余额状态。账户余额必须大于交易输出。因此,交易顺序验证和余额验证对于使用帐户模型的网络非常重要。账户模型中的节点在收到交易指令时会检查发送者的余额状态(看它是否大于或等于转移的输出量)。