在区块链中常见的两种记录模式:UTXO(Unspent Transaction Output,未花费的交易输出)模型
和Account(账户)模型
1.UTXO模型:区块链中的现金类比
在基于 UTXO 的区块链中,加密货币账户余额只是拥有的 UTXO 的总和,如实体钱包中拥有不同面额的钞票一样。
没有身份的概念,只有关联到不同钱包地址的 UTXO 或者说 “未花费的代币”。
比特币协议不追踪用户的余额,而是追踪 UTXO 以及这些 UTXO 分别属于哪些地址。
2.采用UTXO模型的交易步骤
确定交易金额:发送方确定要发送的加密货币金额。
选择UTXO:发送方的钱包查找足够覆盖交易金额的UTXO。这些UTXO是之前收到但尚未花费的交易输出。
创建交易:钱包创建一笔新的交易,这笔交易包含以下部分:
- 输入(Inputs):选择的UTXO列表,这些将被用于支付交易金额。
- 输出(Outputs):至少包含两个输出,一个是支付给接收方的金额,另一个是找零(如果原始UTXO的总和大于所需支付的金额)。
- 交易费(Transaction Fee):为了激励矿工将交易纳入区块链,发送方需要支付一定的交易费。
签署交易:发送方使用与其钱包地址相关联的私钥对交易进行数字签名。这个签名证明了交易是由拥有私钥的用户发起的。
广播交易:签署后的交易被广播到区块链网络中,网络中的节点会接收这笔交易。
节点验证:网络中的节点接收到交易后,会进行验证,确保:
- 交易格式正确。
- 输入的UTXO是有效的,且未被花费过。
- 签名与UTXO的公钥匹配。
- 交易费用合理。
交易池(Mempool):验证通过的交易会被放入节点的交易池(mempool)中,等待被矿工打包进区块。
矿工打包交易:矿工从交易池中选择交易进行打包,创建一个新的区块。
区块链更新:当新区块被成功挖出并添加到区块链上时,交易被认为是确认的。此时,UTXO集会更新:
- 交易中使用的输入UTXO从UTXO集中移除。
- 新创建的输出成为新的UTXO,添加到UTXO集中。
交易确认:随着区块被添加到区块链上,交易得到网络的确认。
通常需要多个后续区块(
即几个确认
)来增加交易的安全性。- 1个确认:交易已经被打包进最新的区块,但仍然存在被回滚(reorg)的风险,尤其是当矿工算力非常集中时。
- 3个确认:交易被认为相对安全,因为它需要重新计算3个区块的工作量证明才能被更改。
- 6个确认:这通常被认为是一个较高的安全标准,需要更多的时间和资源来回滚交易。
在一些高价值交易或对安全性有更高要求的场景中,可能会等待更多的确认来确保交易不可逆。
接收方确认:
- 接收方或其钱包会检查区块链,确认交易已经被纳入区块并且有足够的确认。
3.UTXO模型优缺点
优点:
- 提高隐私性:由于每次交易都可以使用新的地址,UTXO模型提供了较高的隐私保护,使得追踪用户的资金流向更加困难。
- 支持并行处理:UTXO模型允许区块链网络并行处理交易,因为每个交易的验证不依赖于其他交易,这有助于提高交易吞吐量。
- 无状态性:UTXO模型是无状态的,意味着节点不需要维护一个全局的状态表,这使得系统更加简洁和易于维护。
缺点:
- 缺乏可编程性:UTXO模型本身不支持复杂的脚本和智能合约功能,限制了区块链的可编程性和灵活性。
- 交易灵活性降低:在UTXO模型中,每笔交易都需要精确地花费一个或多个UTXO,并产生找零,这增加了交易的复杂性。
4.Account模型:区块链中的银行账户类比
最初由以太坊采用,类似于传统银行账户的处理方式。在这种模型中,交易直接反映在用户账户的余额变化上。
在账户余额上做加减操作,由网络节点来维护用户余额的分布式账本,存在身份的概念通常于与账户或者地址关联
5.采用Account模型的交易步骤
- 创建交易:发送方决定交易的接收方地址和要发送的金额。
- 交易签名:发送方使用他们的私钥对交易进行签名,以证明身份并授权这笔交易。
- 交易广播:签名后的交易被发送到区块链网络中的节点。
- 交易验证:网络中的节点接收到交易后,会进行一系列验证,包括检查签名的有效性、确保发送方账户有足够的余额以及交易是否符合其他网络规则。
- 交易费用计算:根据交易的复杂性和大小,计算所需的交易费用。
- 交易池存储:验证通过的交易被存储在节点的交易池(mempool)中,等待被打包进区块。
- 区块打包:矿工或验证者从交易池中选择交易,并将其打包进新的区块。
- 共识机制:通过工作量证明(Proof of Work)或权益证明(Proof of Stake)等共识机制,新区块被添加到区块链中。
- 状态更新:当新区块被确认后,账户的状态(余额和非货币属性)会根据交易内容进行更新。
- 交易确认:交易被网络中的其他节点确认,并且随着区块的增加,交易的确认深度也会增加,从而提高交易的安全性。
- 交易完成:一旦交易被确认并且相应的状态变更被记录在区块链上,交易就被认为是完成的。
6.Account模型优缺点
优点:
易于理解:Account模型类似于传统的银行账户系统,用户容易理解账户余额和交易的概念。
可编程性:Account模型通常支持图灵完备的智能合约,允许开发者编写复杂的逻辑和去中心化应用。
简化的交易结构:交易通常只需要包含发送者、接收者、金额和数据,结构相对简单。
缺点:
- 状态存储需求:Account模型需要存储每个账户的状态,随着用户数量的增加,状态数据可能会迅速增长。
- 隐私性:由于账户地址与所有交易直接关联,可能更容易分析和追踪用户的行为模式。
- 网络拥堵:Account模型通常需要按顺序处理交易,这在高需求时可能导致网络拥堵。