UTXO 模型

钱包的一个主要功能是方便进行资产转移。NEO中的资产分为两类。一种基于UTXO模型(未花费的交易输出),另一种则是基于账户模型。在NEO中,NEO和GAS都遵循UTXO模型,而NEP-5代币则遵循账户模型。下面让我们详细地讨论下这两个模型。

首先,让我们来考虑下用户持有10个NEO的简单示例。这10个NEO实际上由多个UTXO组成。所有UTXO的总和必须等于10。例如,这10个NEO可能由3个UTXO组成。 UTXO_1为2 NEO,UTXO_2为3 NEO,UTXO_3为5 NEO,三者相加是10 NEO。因此,如果我们需要给别人发送3个NEO,那么我们可以简单地使用UTXO_2中的3个NEO作为交易的输入,而接收方接收到的输出UTXO也是3 NEO。

如果想尝试发送5个NEO,那么我们可以将UTXO_1和UTXO_2组合在一起作为交易输入,而接收方会收到作为交易的单个输出的5 NEO。当我们需要发送的金额不能通过对UTXO进行组合求和来满足时,情况就会变得稍微复杂一些。

现在我们想要向他人发送4个NEO。对UTXO进行组合无法直接得到这4个NEO。我们所能做的就是同时使用UTXO_1和UTXO_2,组合得到5个NEO。所以我们将UTXO_1和UTXO_2作为交易的输入,但与之前只有单一的输出不同,这时我们需要输出2个UTXO。为接收方生成一个值为4 NEO的UTXO,然后创建一个值为1 NEO的UTXO作为零钱发送回我们的账户。

对于NEO网络上的有效交易,必须满足以下这个公式:Sum(NEO_i) + Sum(GAS_i) = Sum(NEO_o) + (Sum(GAS_I) - Sum(GAS_sys_fee) - Sum(GAS_net_fee))

从这个意义上说,UTXO不会被创建或销毁,而是会在新的UTXO中重新使用。加入UTXO可以并行地执行交易,因为每个UTXO都是唯一的,因此不可能出现双花的情况。

账户模型

其他一些区块链平台(如以太坊)所使用的账户模型会为每个拥有资金的账户创建一个全局状态。因此,你可以简单地使用与账户相关联的余额10,而不用持有一组用于交易的UTXO。因此,所有账户的全局状态必须存储在网络节点上。交易通过网络中的虚拟机解释执行,并对全局状态中的所有账户进行相应的状态更改。

在NEO网络上部署的NEP-5资产合约通常都遵循账户余额模型。它们没有关联任何的UTXO数据,余额状态的变化是通过执行智能合约完成的。这些执行由NEO虚拟机进行解释执行,并记录在智能合约存储区中。

返回目录