在我看来,区块链驱动世界唯一可行的未来是通过分层架构创造经济通用基础设施。
三大编程模型
——UTXO模型
首先,从比特币开始,比特币也被称为点对点电子支付系统UTXO编程模型(与比特币地址相关的比特币金额是包含数据和可执行代码的数据结构)。
最简单的方法就是做UTXO它被视为一个盒子。盒子包含代表货币价值的数字和锁。只有持有相应钥匙的人才能打开盒子。转账时,持有钥匙的所有者或个人使用钥匙解锁,找到另一个空盒子,将新面值放入新盒子中,并添加新所有者的锁。
整个交易可以概括为打开盒子,拿出里面的钱,摧毁原来的盒子,然后放在另一个盒子里
总之,盒子表示存储数据UTXO模型,锁表示所有权。
——Account模型
除了UTXO模型,还有Account模型。以太坊是这个模型最著名的例子。
除数据外,以太坊Account计算逻辑也存在于模型中。ERC20合同想象成盒子,盒子里没有钱,而是一组复杂的逻辑和数字。
与UTXO不同,Account模型盒可重复使用,在其生命周期内无法打开。
当Account当制作模型盒时,一套规则会写进盒子里,一些按钮会放在盒子里,这样人们就可以与盒子互动。例如,规则可能意味着如果一方想转账,她或他或他需要出示身份证并输入密码。一旦完成以上步骤,您需要以下信息:转账金额、收件人和其他信息。一旦进入,她或他或他需要按下转账按钮才能完成转账。收到信息后,它将从您的金额中扣除并更改到另一方的账户,然后更新所有内部数据。
熟悉编程的人很快就会发现Account模型类似于现实世界中的模型OOP(面向对象编程,计算机编程架构),按钮的概念与API(应用程序编程接口)。
如果我们扩展盒子隐喻,以太坊的功能更像ATM机。
在Account盒子在模型中保存逻辑和数据。将逻辑写入工厂设置的盒子后,永远不要改变它。您只能在需要修改数据时使用外部按钮。每个人的钱都记录在盒子里。事务是,只需输入事务信息,盒子将根据规则处理的要求更新数据。
——Cell模型
在Cell我们也可以在模型中Cell它被认为是一个盒子,因为它和它在一起UTXO模型非常相似,可以包含任何锁定对象。
您可以执行并编写一组规则来指定盒子可以存储什么。这样,单位中的数据就可以表示货物或加密猫等资产。UTXO中间的锁也是如此。但在单元格模型中,用户可以自由更改和使用定制锁。(您可以将普通锁与指纹锁或数字锁进行比较)
总的来说,Cell模型是广义的UTXO该模型具有以下两种含义:第一,锁是可定制的; 第二,盒子可以存储用户定义的数据。
Nervos核心项目(分层架构分布式应用网络)CKB 有一种编程模型结合了比特币编程模型和以太坊编程模型的优点。
有些人可能是对的Cell好奇模型是如何使用它的编程模型的。
首先,了解区块链系统的演变是非常重要的。比特币是p2p支付系统的衍生后来诞生了更广泛的分散应用平台——以太坊。区块链的进一步发展带来了越来越多样化的新项目。
区块链不可避免地具有较高的交易和存储成本,区块链不可避免地采用了一种结构。该架构允许在一致同意的范围内实现灵活性,以便大规模交付低成本交易。
两大障碍
——可扩展性问题
阻碍区块链发展的障碍之一是可扩展性。如果这个问题不能缓解,区块链的能力就会受到限制。我们将看不到强大的先进应用程序开发,然后释放分散经济的真正潜力。
可扩展性是区块链三难的一部分,包括安全性和分散性。区块链系统最多有两个困难。
——交易成本
第二个障碍是交易成本。降低社会整体交易成本是衡量技术规模可行性的最有力指标之一。由于整个网络需要共识的交易和存储成本高,因此,区块链不可避免地采用了一种结构。该架构允许在一致同意的范围内实现灵活性,从而允许它们大规模交付低成本交易。
解决方案:分层结构
计算机爱好者知道他们的设备包含复杂的分层架构。分层架构包括内存、硬盘、多级缓存和各种寄存器。该架构允许公众以低成本使用,并利用其可伸缩性来满足日益增长的计算挑战。
我们可以在区块链中应用相同的设计原则。通过分层结构,我们可以创造经济实惠的通用基础设施。在我看来,这是区块链驱动的世界唯一可行的未来。Lightning、(闪电网络),Plasma(以太坊扩展的四种解决方案之一)以及支付渠道的兴起,我们可以看到这种类型的架构正在兴起和推广用例。检查构成区块链系统的三种不同数据模型之间的关系:UTXO模型,Account模型和Cell模型。
——验证和计算模型
Cell模型源自UTXO因此,模型验证模型。Account模型是计算模型。
当资产从第二层返回到第一层时,第二层解决方案将使用证书提交和验证机制(如闪电网络)。因为第一层扮演验证角色,而不是计算角色,我们可以看到UTXO或Cell该模型适用于该结构。
——解决规模扩大问题
目前,以太坊和下一代区块链面临着规模扩张的严峻挑战。虽然大规模采用取得了突破,但整个节点的数据存储成本正在增加,包括各种僵尸账户的扩大,这也使情况更糟。
使用Account在模型中,所有用户的资产都存储在合同中。如果没有直接的方法来划分每个用户的状态,就很难根据每个用户的容量和持续时间向他们收费。
与此同时,这也挑战了支付渠道费用的实施。目前,在以太坊,交易费用是一次性支付,并授予永久存储。但由于区块链是一个公共基础设施,这种模式是不可持续的。我们可以看到,持续支付存储空间租金是一种更合理的方式。
在单元模型中,每个用户的数字资产分别存储在自己的单元中。如果用户不想继续持有资产,他们可以释放单元中的数据,出售或借给其他用户存储容量。该设计确保了第一层不会无限期地存储废弃资产,并为状态存储开辟了新的可能性。
结论
一般来说,在考虑存储和验证要求时,单元模型最适合分层区块链架构。
附:UTXO与ACCOUNT优缺点对比如何开户注册新手学炒币?
UTXO 模型
UTXO在 模型中,交易只代表 UTXO 集合变更。账户和余额的概念是 UTXO 集合更抽象,账户和余额的概念只存在于钱包中。
优点:
在链外计算,交易本身既是结果,也是证明。节点只能验证,不需要额外的计算或存储状态。交易本身的输出 UTXO 的计算是在钱包里完成的,所以交易的计算负担完全由钱包承担,在一定程度上减轻了链条的负担。
除 Coinbase 交易外,交易Input 总是链接在某个 UTXO 后面。交易不能重放,交易顺序和依赖关系容易验证,交易是否消费也容易证明。
UTXO 模型无状态,更容易并发处理。
对于 P2SH 型交易隐私性更好。Input 不相关,可以用 CoinJoin 这种技术可以增加一定的隐私。
缺点:
一些复杂的逻辑无法实现,可编程性差。逻辑复杂或需要状态保存的合同难以实现,状态空间利用率相对较低。
当 Input 更多时候,见证脚本会增加。签名本身消耗 CPU 存储空间。
ACCOUNT 模型
对于 Account 模型,Account 模型保存世界状态,链状态一般在块中 StateRoot 和 ReceiptRoot 以其他形式达成共识。交易只是事件本身,不包括结果。本质上,交易共识和状态共识是可以隔离的。新手怎么看炒币?k黄线图
优点:
合同以代码的形式保存 Account 中,Account 有自己的状态。该模型具有更好的可编程性,易于开发人员理解,场景更广泛。
批量交易成本较低。假设矿池向矿主支付手续费,UTXO因为每个 Input 和 Out 都需要单独 Witness script 或者 Locking script,交易本身将非常大,签名验证和交易存储需要在链上消耗宝贵的资源。Account 模型可以通过合同大大降低成本。
缺点:
Account 模型交易之间没有依赖性,需要解决重放问题。
实现闪电网/雷电网,Plasma 等,用户证据需要更复杂的 Proof 认证机制需要更复杂的协议将子链迁移到主链。
UTXO VS ACCOUNT
我们将比较上述优缺点。
第一,关于计算。
UTXO 交易本身对区块链没有复杂的计算,这并不完全准确。主要原因是 Bitcoin 本身的交易多为 P2SH,且 Witness script 非图灵完整,无循环语句。Account 模型,如 Ethereum,由于计算主要在链上,图灵完整,一般计算复杂,合同安全容易成为一个大问题。当然,图灵是否完整并不直接关系到账户模型是否完整。然而,在引入账户模型后,合同可以作为一个不受任何人控制的独立实体存在,具有重要意义。
第二,关于 UTXO 更容易并发。
在 UTXO 模型中的世界状态是 UTXO 为了更快地验证交易,节点需要将所有 存储在内存中UTXO因此 UTXO 很贵。长期不消费的 UTXO,它将永远占用节点的内存。因此,理论上应鼓励用户减少这种模型的生产 UTXO,多消耗 UTXO。但如果要用的话UTXO 平行交易需要更多的 UTXO 作为输入,产生更多 UTXO 保证并发性本质上是对网络粉尘的攻击。而且因为交易是在钱包里结构的,钱包的设计需要更加复杂。另一方面 Account 模型,每个账户都可以被视为一台不相互影响的单独状态机器,账户通过信息通信。因此,理论上,当用户发起多笔交易时,这些交易不会相互呼叫Account 交易可以并发执行。
第三,关于 Account 模型交易重放。
Ethereum 在 使用Account 中增加 nonce 的方式,每笔交易对应一个 nonce,nonce 每次增加。虽然这种方法旨在解决重放问题,但同时引入了顺序问题,使交易无法平行。例如,Ethereum如果第一笔交易打包失败,用户发送多笔交易,将导致后续多笔交易打包失败。CITA 我们使用随机 nonce 方案,使用户交易之间没有顺序依赖,不会导致串联失败,同时平行处理交易。
第四,存储问题。
因为 UTXO 模型只能在交易中保存。Account节点保存了 模型的状态,Ethereum 中使用MPT 储存方式,Block 中只需要共识 StateRoot 等等。对于链上的数据,Account 模
类型实际上更小,网络传输量更小,而状态在节点本地使用 MPT 在空间使用中保存更有效率。A 向 B如果在 UTXO 中假设 2 Input 和2个 Output,需要 2 个 Witness script 和 2 个Locking script;在 Account 模型只需要一个签名,交易内容只包含金额。最新的隔离见证实现后,Bitcoin交易数据量也大大降低,但事实上,验证节点和全节点仍需针对 Witness script 传输和验证。
第五,对于轻节点地址状态,UTXO 更复杂。
例如,在钱包中,所有关于某个地址的 都需要向整个节点请求UTXO,全节点可以发送部分 UTXO,钱包要验证 UTXO
是否已经被消费,有一定的难度,而且钱包很难去证明 UTXO 是全集而不是部分集合。而对于 Account 模型则简单很多,根据地址找到 State 中对应状态,当前状态的 State Proof 则可以证明合约数据的真伪。当然对于 UTXO 也可以在每个区块中对 UTXO 的 root 进行验证,这一点与当前 Bitcoin 的实现有关,并非 UTXO 的特点。