BTC区块大小、交易大小、opcode数量限制等问题探讨

24 views 下午9:43 0 Comments 2024年 10月 10日

来源:闪电HSL

在最新的BCH协议修改提案bch-vm-limits里,我读到了一个全新的概念“计算密度(density of computation)”。计算密度这个概念在其他UTXO链上是没有的。我很好奇这是个啥东西,做了点调研。

什么是计算密度?

比特币有区块大小限制1M交易区块体+3M的签名区块,针对每笔交易有尺寸大小、opcode数量的限制。以太坊的交易单个区块也有gas limits上限的限制。对EOS研究较深的朋友一定还知道,EOS有cpu、RAM和Net这三个资源,发eos交易是需要消耗这三个资源。

这些都是为了维持区块链网络安全,防止恶意交易攻击网络。

最经典的一个合法交易恶意攻击以太坊网络的案例是2018年的Fom3D最终大奖的领取当中那个经典的“针对以太网络攻击”事件。需要了解Fom3D的全貌需要大家自己搜索一下,本文不浪费字数来解释了。

当时攻击者在区块高度6191897和6191902之间构造了一笔特别的合约交易,消耗掉了区块里的所有gas limits,让其他用户的交易无法被打包,只能打包黑客自己的交易,从而最终领取走了10469ETH的大奖。

在防止区块链网络被恶意攻击的这三种经典设计里,Btc的区块大小和交易大小限制,ETH的区块 gaslimits限制,和EOS的CPU&RAM&Net资源限制。

BTC的设计是最原始,也是最安全的设计,久经考验。从BCH诞生至今,也是延续了一样的设计,只是在具体的参数上有所调整。

ETH的gas limits设计应该是最成功的设计,目前已经成为了行业标准。

EOS的设计到现在为止,应该说是一个失败的设计,RAM等资源没有履行设计理念,反而成为了一种炒作的代币。

题外话,ETH曾经也有一个叫gastoken的项目,允许用户把gas当成一个币来炒,但被V神他们给禁止了。

请注意上面的用户,btc是最安全的,gas limits是最成功的。

在衡量安全性和可编程性上,gas limits的设计在可编程性达到了极致,在EVM上实现了图灵完备,这是以太坊诞生了繁荣经济生态的决定性因素。

BTC等UTXO的生态则明显受困于可编程性,特别是交易的opcode数量限制,这加减乘除的数量都给你限制住了,你还怎么编程啊。但很明显,BTC这种区块大小和交易大小的限制,为比特币的去中心化和安全性提供了极致的安全性。比特币网络从未出现过被DDOS而产生大问题的情况,当“恶意的”海量交易或复杂的合约交易(P2SH)涌进来memepool时,唯一需要做的事就是等待区块慢慢打包,不会产生额外的问题。

UTXO技术,提高可编程性,很可能就会导致额外的安全性问题。

BCH的计算密度这个新概念,就是想平衡UTXO的可编程性和安全性,试图在保证BCH网络安全性的前提下大大提高UTXO的可编程性。

计算密度的定义是根据每个输入数据的字节长度,限制该输入能够执行的计算操作。即交易中每个输入会根据其大小(字节数)分配一定的计算预算,这个预算决定了节点在验证该交易时可以进行的最大计算量。

Bch-vm-limits协议里提供了计算公式,这个公式我看不懂,我只知道这个计算量主要是指哈希计算。这个太细节了,涉及到bch交易的构造和验证,管不了那么多了。

和gas limit将计算和gas费直接挂钩不同,计算密度并不改变BCH交易的矿工费设计,矿工费还是按一直以来的sats/byte来计算。

Gas limit的设计相当于只要你出钱(出gas费)你就可以设计任意复杂的合约,前提就是不要触及单个区块的gas limit上限。现在单个区块的gas limit是3000万gas,如果gas price是10gwei,消费光3000万gas limit需要0.3ETH。3000万gas是一个非常大的量,可以设计出非常非常复杂的合约。

BCH的计算密度,是约束单位交易大小的可计算量,我估计能设计出来的合约复杂程度肯定是远小于gas limit的设计,但远高于BTC和BCH当初的限制交易大小和opcode数量,文档描述是增强了100倍。

协议的设计者Jason Dreyzehner在文档里对计算密度的好处写了一箩筐,对比gas limit,各种夸。希望在真实的生产环节能兑现。

在实际的应用场景上,开发者就写的更夸张了,涉及到了量子密码学、零知识证明、同态加密,等加密数字货币技术领域的皇冠上的明珠级别的场景。但现在肯定无法辨别真伪了。

最后,感觉BCH的开发者还是挺有创新能力的,包括像2023年激活的cashtoken,以及今年要搞的计算密度,我都是在整个币圈第一次见到的技术。

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注