平衡与UTXO模型

平衡与UTXO模型

当有人设计区块链时,一个重要的问题是基础系统。它应该是余额还是UTXO系统?让我们描述它们,然后比较它们,看看它们之间发生了什么权衡。
让我们从历史原因(比特币架构)开始使用UTXO。什么是真正的UTXO?它代表未花费的交易输出。这是一个跟踪付款是否有效的系统。实际上,UTXO是一个数据库。如果交易不在UTXO数据库中,那么消费者会尝试花费不存在的东西,或者尝试加倍花钱。无论哪种方式,交易都被标记为无效并被拒绝。
让我们来看看这种架构的后果:首先,它需要RAM。随着链的增长,对RAM的需求变得越来越大。这会给节点带来压力。如果需要RAM达到高水平,那么一些节点可以停止运行。这对链条不利,因为较少的节点意味着更多的集中化。
另一个缺点是工厂的复杂性。如果链条支持智能合约,那么开发人员可能会头疼。
另一方面,我们有平衡系统。平衡系统更简单。每个公共地址都有余额。简单的检查可以显示地址所包含的金额,使智能合约的编码更容易。这使得架构更加开发友好。当然,不需要大RAM,因为不需要跟踪未花费的事务。
出现了一个问题,为什么Satoshi选择了UTXO模型。他知道平衡模型的替代方案。但我们知道他对安保人员非常敏感。他对“双重攻击”威胁非常谨慎。事实上,在他的白皮书(以及使得存在并购的可能性的创新)中解决了双重支出问题。考虑到这一点,他采用UTXO模型似乎很自然。
那么平衡系统如何对抗双重支出?事实证明,双重支出攻击对于平衡系统来说也不是一个大问题:区分交易的东西可以防止双重支出。例如,以太坊使用每次都在增加的数字(随机数)。事务必须具有不同的nonce才有效。
从上面看,看起来平衡模型更适合具有智能合约功能的链条。平衡(以太坊)架构非常有意义。
但不是那么快。UTXO能够并行执行事务。对于公共链,我们还没有提到最重要的问题:可扩展性。可伸缩性意味着什么?基本上,这意味着随着公共链规模的扩大,可用性保持在合理的良好水平。简而言之,用户可以轻松访问链条并使用它,或者至少没有严重问题。
UTXO模型可以更好地适应平衡模型。这是事实,因为它可以使用“轻钱包”。用户可以使用不需要整个链的客户端(钱包)来进行交易。UTXO数据库提供足够的信息以确保金额​​未花费。这称为简化付款验证(SPV)。SPV确保用户事务已经写入块中,并且还在该块的顶部显示确认。因此,用户无需拥有整个链的数据来进行或接受付款。
在余额模型中,要获得任何公共地址的当前余额,您需要扫描整个链。如果钱包“不同步”,则必须“重新索引”(即再次扫描链条)以获得实际余额。即使对于第三方(许多其他人使用它们)来说也不同寻常,并且在一段时间内“显示”错误的余额。
轻型钱包对于手机或平板电脑等设备非常重要,因为无法下载整个链条。当然,有些应用程序可以将钱包用于平衡系统的小型设备。但是有一个很大的区别:这些应用程序被迫使用第三方应用程序(服务器中的一个节点保持整个链)。这带来了安全问题,并以某种方式破坏了公共链的目的。您必须信任第三方或节点,但公共链的全部意义在于它们可以在没有任何信任的情况下使用(无信任财产)。最后需要注意的是,今天即使台式机在下载大型区块链(例如以太坊)的链条时也存在问题。这需要很长时间,你需要一个快速的驱动器才能获得成功。即使在使用ext4文件系统的Linux中,在没有SSD的情况下下载链并同步钱包真的很难或不可能。硬盘无法完成这项工作。随着链条的增长,这种情况越来越严重。
此外,还存在隐私问题。在这方面,UTXO比平衡模型更好。公平地说,平衡模型可以通过实施环签名或零知识方案来对抗这种情况。这些解决方案很复杂并且有一些缺点。我现在不打算分析它们。
因此,如果有人希望将UTXO模型用于实现智能合约功能的链条,他必须首先回答两个问题:a)开发人员如何编程而不会对UTXO模型感到烦恼?b)需要高RAM的问题会发生什么?
第一个问题的答案是链的一个特殊功能可以克服这个问题。虚拟机可能与UTXO支付系统完全无关。这样,开发人员不需要担心与支付相关的任何事情,因为智能合约使用平衡系统。链代码自动选择UTXO事务并创建新事务。因此,需要一个中间层来连接这两个模型。这是可以实现的(已经有一些连锁店实施了它)。
第二个问题可以通过使用内存交换来处理。现在,我必须澄清一下,由于UTXO模型,轻钱包没有真正的问题。问题出现在节点上,即保持整个链条的机器。为什么有人必须保持整个链条?显然,链分散是基于节点的。从节点的角度来看,如果它想要“挖掘”或“铸造”,它需要整个链条。使用交换内存可以减轻节点,因为与内存相比,磁盘空间非常便宜。那么问题是什么,有人可能会问。答案是内存交换速度较慢。这意味着每个新块创建开始时节点可能需要几秒钟。这可能看起来不像一个大表盘,但它是工作证明链中的一个问题:使用内存交换可能会使节点处于不利地位,因为与在物理内存中具有整个UTXO数据库的另一台机器相比,它开始挖掘的时间更短。如果块创建时间很短,这个问题就很严重:如果平均块的创建时间少于30秒,那么即使是两三秒也会使矿工处于劣势,使得游戏“不公平”,或者更确切地说,它让小球员处于劣势。鼓励规模经济,从长远来看迫使节点总数减少。这将对链条的分散化产生影响。然后甚至两三秒钟让一名矿工处于劣势,使得游戏“不公平”,或者更准确地说,它让小玩家陷入劣势。鼓励规模经济,从长远来看迫使节点总数减少。这将对链条的分散化产生影响。然后甚至两三秒钟让一名矿工处于劣势,使得游戏“不公平”,或者更准确地说,它让小玩家陷入劣势。鼓励规模经济,从长远来看迫使节点总数减少。这将对链条的分散化产生影响。
但上述问题在证明共识协议中并不存在问题。要理解这一点很简单:节点每n秒提交一次哈希。即使对于小粒度(例如8),节点在他可以提交其第一个“散列”之前还有8整秒,因此即使对于想要发薄的“小”节点也没有缺点。您可以在另一篇文章中看到我对PoS共识工作的解释中的粒度。
对于上述内容,我们决定将UTXO模型用于我们的链。我们相信它会增加我们公共链的可用性。我们对可扩展性没有错误的期望,总链规模必须以与技术进步类似的速度增长(基本上根据硬件和网络成本)。但我们坚信,从长远来看,UTXO将成为更好的车型。