BCH侧链smartbch智能链白皮书(官方中文版)
Smart Bitcoin Cash:兼容EVM和Web3 API的⽐特币现⾦侧链概述
⽐特币现⾦致⼒于提供去中⼼化、⾼通量、低成本、且易⽤的加密货币基础设施,对其主⽹的任何修
改,都需要达到很⾼的共识,这阻碍了它进⾏试错、创新的进程。
因此,我们开发了Smart Bitcoin Cash——⼀条⽐特币现⾦的侧链,其⽬的是探索新的想法、解锁新的
可能性。它将会同以太坊的EVM和Web3 API相兼容,因为它们已经是区块链DApp⾏业中的事实标准
了。
以太坊通过逐步过渡到ETH2.0,正在解决其低通量、⾼成本的问题,但众所周知这个过程仍然需要若⼲
年才能最终完成。Smart Bitcoin Cash尝试以⼀种不同的路径来解决这些问题:优化EVM和Web3的底层
实现,以便充分利⽤硬件的能⼒,特别是其固有的⾼度并⾏的能⼒。我们相信Smart Bitcoin Cash能在
更短的时间内实现ETH2.0的承诺:⾼通量、低成本。
项目网址 https://smartbch.org/
动机
对于⽐特币现⾦,不同的⼈群期待不同的新特性。
⽐特币现⾦仍然坚持10分钟的区块间隔,相对于其他区块链的秒级出块,这显得太⻓了。尽管⽐特币现
⾦⽀持安全的零确认交易,但是⼀些复杂的、⽀付以外的场景,仍然需要较短的确认时间才能达到好的
⽤户体验,DeFi就是这样⼀种场景。
⽐特币现⾦有⼀个受限、⾮图灵完备的脚本系统。这使得它相对于以太坊的EVM更加难以使⽤。另外,
毫⽆疑问,EVM和Solidity提供了最佳的⽣态系统并且拥有最多的开发者,⾜以傲视其他智能合约开发平
台。⽐特币现⾦的⽣态中⽆法使⽤EVM是⾮常遗憾之事。
迄今为⽌,⽐特币现⾦已经证明其区块⼤⼩可以达到14MB。尽管现在它的区块⼤⼩基本在0.8MB左右,
但增⻓的速度⾮常快,⾃2021年开始以来,已经增⻓了3倍。如果它继续保持这样的增⻓率,在不远的
将来,它的区块⼤⼩就会稳定地超过14MB。由于⼤于14MB的区块仍然有很多未知问题,并没有在实践
中检验过,最好现在就能提前为进⼀步的扩容进⾏⼀些准备和探索。
Smart Bitcoin Cash对⽐特币现⾦的贡献是什么呢?它为新的功能提供了试验场,它拥有更短的确认时
间,它不但⽀持EVM和Web3,⽽且⽀持得⽐现有⽅案更好(通量更⾼)。它提供了⼀个新的渠道从⽽
邀请更多的开发者和⽤户加⼊到⽐特币现⾦的⽣态系统当中来。
随着Smart Bitcoin Cash变得越来越成熟,为它所开发的库,以及从它身上学到的经验教训,也能帮助
⽐特币现⾦主⽹的发展。 背景
Vitalik Buterin于2013年⾸次提出以太坊,迄今已有⼋年。⼋年间,智能合约诞⽣、发展,逐步繁荣。
如今以太坊已是最为成功的智能合约平台。对它的⽣态系统进⾏调研之后,我们有如下的⼀些观察:MacBook Pro in 2013 MacBook Pro in 2021 MacBook Pro in 2029
CPU核⼼数 2 8 32
CPU最⾼主频 2.9GHz 3.1GHz 3.3GHz
CPU制造⼯艺 22nm 5nm 1nm
单链的⽤户体验,是Sharding和Layer2⽅案所难以匹敌的。零延迟和原⼦性的智能合约互操作,只有
在单链的场景下才能实现。跨Shard或者Layer1和Layer1之间的交互必须经过链间通讯的过程,这⼀过
程将引⼊类似于在中⼼化交易所充值和提币的延迟。⼀些著名的机制,例如flash loan 和flash swap,
在跨链时⽆法⼯作。
低通量阻碍了普通⽤户同DApp直接交互。每个区块的Gas上限是固定的,矿池会优先打包那些Gas
Price较⾼的交易。同时,低Gas Price的交易需要等待很⻓时间才会被打包,甚⾄永远都不会被打包。⾃
然,只有那些⾼价值的交易才值得⾼Gas Price。因此普通⽤户在⽆法承受⾼Gas Price的情况下,只能将
⾃⼰的资⾦存⼊中⼼化的机构,委托它们代替⾃⼰操作这些资⾦。在DeFi世界中,只有少数的账户在发
送交易。这些账户拥有⼤笔资⾦,或者因为⾃⼰拥有很多,或者因为收集了委托者的资⾦。这是蛮讽刺
的⼀件事,如今的去中⼼化⾦融并没有那么地去中⼼化。
相对于执⾏智能合约所进⾏的计算,存储消耗了更多的资源。在以太坊的历史上,存储操作的Gas已经
被两个EIP增加过:EIP-1884和EIP-2200。但这仍然不够,有研究表明以太坊仍然低估了某些存储操作,
使得它容易受到DoS攻击。因此,另⼀个EIP-2929即将在下⼀次的柏林硬分叉升级中,进⼀步升⾼存储
操作的Gas。与此同时,EVM当中的256位⻓整数算术运算,在由Martin Holst Swende和Paweł Bylica
所开发的库当中,得到了显著的提速。
链外的QPS(Query Per Second)同链上的TPS(Transaction Per Second)同等重要。⼀个DApp
⼯作时,不仅要发送交易,⽽且要查询链的最新状态及其历史事件。交易只执⾏⼀次,但与之对应的事
件和状态更新可能会被查询很多次。因此对QPS的总需求远⾼于TPS。在以太坊的⽣态中,查询操作通过
Web3 API来完成。⽽Infura是Web3的最⼤提供商。Infura维护着⼀份Web3的优化实现,它⽐标准的全
节点客户端(例如go-ethereum)更强,因此并没有开源。很多开发者都选择使⽤Infura的低成本服
务,⽽不是⾃⼰运⾏全节点。这导致了,当Infura出现了严重的服务中断时,很多DApp和交易所就不能
⼯作了。
⽤户对于交易延迟容忍度较⾼,同时并不⼗分关⼼交易的具体排序。通常,我们使⽤像MetaMask这样
的钱包来签署交易,选择合适的Gas Price,然后⼴播交易。为了节省Gas费,我们经常会选择⼀个较低
的Gas Price,然后等待数分钟甚⾄数⼩时直到交易最终被确认,⽽不是选择极⾼的Gas Price让它下个块
就被确认。有时候其他⼈的交易会⽐你的交易更早确认,从⽽带来⼀些损失,例如更⼤的滑点。但⼤多
数⽤户可以容忍。
我们还观察到⾃从2013年以来,计算机发展的最重要的趋势是:CPU在多核的⽅向上⾛得更远了。让我
们来⽐较⼀下2013年和2021年的MacBook,同时预测⼀下2029年的MacBook。
MacBook Pro in 2013 MacBook Pro in 2021 MacBook Pro in 2029
CPU核⼼数 2 8 32
CPU最⾼主频 2.9GHz 3.1GHz 3.3GHz
CPU制造⼯艺 22nm 5nm 1nm
集成电路⼯艺在28nm之后,已经很难继续⼤幅度提升频率,但是它的每⼀代升级,仍然提供了更⾼的晶
体管密度。设计者利⽤这些晶体管,实现了越来越多的CPU核⼼。在过去的10年⾥,新创的编程语⾔都
在宣传⾃⼰能够⾮常容易地开发多核CPU的潜⼒:Go语⾔的 channels and goroutines,Dart语⾔的
isolates,以及Rust语⾔的fearless concurrency。
以上这些观察指导了Smart Bitcoin Cash的设计和实现。
Smart Bitcoin Cash的核⼼组件
Smart Bitcoin Cash的创新表现在若⼲程序库当中。它并没有发明很炫的共识算法或者密码学算法,⽽
是采⽤了另外⼀种⽅法学:开发底层的程序库,以便充分地发挥硬件的潜⼒,尤其是其内在的并⾏性。普通的⽤户和开发者在⼀个⽀持EVM和Web3的兼容层之上操作,底层贴近硬件的优化被这个兼容层完全隐藏了起来。在编码实现中,我们使⽤了开发代号Moeing,它被附加到各个程序库的名称上作为前缀。
利⽤这些强⼤的程序库,Smart Bitcoin Cash中期的⽬标是将区块的Gas上限提升到⼗亿。⻓期的⽬标是
通过Sharding和Rollup等技术进⼀步提升其通量。
MoeingEVM
MoeingEVM是⼀个并⾏执⾏引擎,它并发地管理多个EVM的上下⽂,同时执⾏多个交易。它的底层基于
来⾃evmone的优化实现,同时还发明了若⼲新技术以便使交易的并发度最⼤化。
随着多核CPU变得越来越流⾏,以太坊⻛格的单线程执⾏引擎成为了可扩展性的障碍。如果我们切换到
多线程的执⾏语义,那么多核CPU的开发将更加容易、⽅便和直接,最终获得更优的可扩展性。
因此,MoengEVM是按照多线程执⾏语义来开发的。
为了充分利⽤现代硬件中固有的并发度,我们尝试从两个⽅⾯来利⽤并⾏性:
1. 共识引擎和交易执⾏引擎可以同时运⾏
2. 不同的交易可以同时执⾏
为了让共识引擎和交易执⾏引擎同时运⾏,MoeingEVM采⽤了这样的策略:当⼀个新的区块被提交时,
其内部的交易并没有被⽴即执⾏;它们只是被存储了起来,作为世界状态的⼀部分;之后世界状态的
Merkle Root被计算出来让下⼀个区块可以被打包和投票,与此同时,之前被存储的交易会被检视和执
⾏。
为了让多个EVM同时执⾏,我们运⾏来⾃不同区块的交易被混合和重排序。在每个轮次中,⼀组
(bundle)不相关的交易被取出和并发执⾏,以最⼤化并发度。经过若⼲个轮次之后,所有的交易都被
执⾏,或者残留⼀些交易尚未被执⾏,这些残留的、未被执⾏的交易被重新保存到世界状态中,等待之
后被执⾏。由于交易被强制地划分为组,⽽且组内的交易都是并发执⾏的,这种策略被称为“强制组并
发”。
MoeingADS
为什么存储操作如此昂贵呢?以太坊的存储引擎MPT是根本原因。
MPT是不可或缺的吗?未必,很多区块链(包括⽐特币现⾦)不使⽤它也能⼯作得很好。但是,作为⼀
个可验证数据结构(Authenticated Data Structure),它可以证明状态的存在性和不存在性,这对于实
现去信任化(Trustless)⾮常重要,轻客户端和跨链都以此为基⽯。
因此我们开发了MoeingADS,⼀个可以替代MPT的可验证数据结构。
以太坊的存储引擎采⽤了双层架构。第⼀层是LevelDB,第⼆层是MPT。⽽其他的⼀些区块链,例如⽐
特币和⽐特币现⾦,使⽤单层的存储架构:它们直接使⽤LevelDB来存储UTXO结合。MPT在LevelDB提
供的功能之上,实现可验证数据结构,其付出的代价是更低的读写通量。每次EVM读写世界状态,MPT
需要对LevelDB执⾏若⼲次操作,⽽每个LevelDB的操作都需要访问若⼲次磁盘。这样整体的性能就降下
来了。MoeingADS使⽤单层架构,它直接访问底层的⽂件系统,不依赖于其他数据库。它是⼀个可以直接提供
存在性和不存在性证明的键值数据库。使⽤MoeingADS,读取键值对只需要读⼀次磁盘,覆盖已有的键
值对需要⼀次读和⼀次写,插⼊新的键值对需要两次读和两次写,删除键值对需要两次读和⼀次写。⽽
且,这⾥所有的写操作都是在⽂件末尾追加,这对于磁盘⽽⾔⾮常友好。
实验表明,MoeingADS⽐LevelDB还要快。它为此付出的代价是更多的RAM消耗:每个键值对需要16个
字节。
MoeingDB
除了⽤来⽀持MPT,LevelDB还被⼴泛地⽤于保存历史信息,例如区块、交易存根和⽇志。然⽽,
LevelDB并不是为了区块链的⼯作负载⽽优化的。区块链的⼯作负载具有如下的特征:
1. 读操作的数量要远多于写操作
2. 没有必要⽀持Read-Modify-Write的原⼦交易
3. 简单的读写锁⽐复杂的MVCC更好,因为修改操作都是按区块进⾏的批量写
4. 由于⼤多数键都是Hash ID,空间局部性不好,导致很难实现有效的缓存
5. 容易被DDoS攻击,除⾮冷数据的读延迟具有合理的上限
MoeingDB是⼀个领域定制的数据库,专⻔⽤来存储区块链的历史,它专⻔针对上⾯的负载特征⽽开
发。基于它的能⼒,可以开发出⼀个完全开源的、⾼QPS的Web3 API,这对于Smart Bitcoin Cash和以
太坊都有正⾯意义。我们希望它可以使得Web3 API供应市场变得更加去中⼼化。
MoeingKV
MoeingKV是⼀个⽐LevelDB更快的键值数据库,为了提升速度,它只⽀持读写操作,不⽀持迭代。
为了⽀持迭代功能,LevelDB进⾏了很多折衷设计和专⻔的优化。但是在绝⼤多数情况下,区块链存储
引擎并不是⼀定要依赖迭代功能,例如以太坊的MPT和⽐特币现⾦的UTXO存储。
在底层数据结构设计和代码实现过程中,MoeingKV为了加速普通的读写操作⽽进⾏折衷和优化。它可以
替代LevelDB,作为⽀持MPT的底层库。
在某些场合下,由于兼容性的原因,MPT不能被MoeingADS所代替,这时可以使⽤MoeingKV来⽀持
MPT。以MoeingKV为底层的MPT⽐MoeingADS要慢,但它⽐以LevelDB为底层的MPT还是快多了。
MoeingKV的⼀些关键思想来⾃于MoeingADS和MoeingDB,但它并没有被⽤于Smart Bitcoin Cash。
我们开发它,主要是希望其他项⽬可以从中获益。
MoeingAOT
MoeingAOT是EVM的AOT(Ahead-Of-Time)编译器。
在区块链领域,EVM相对于所有其他的虚拟机(例如WebAssembly)都要更加流⾏,已经是智能合约事
实上的标准了。
然⽽,EVM缺乏⼀些重要的加速⽅法,例如AOT编译器和JIT(just-in-time)编译器。在软件⾏业,⼏乎
每⼀种重要的VM都有其AOT编译器和(或)JIT编译器,例如:JVM、ART VM、Javascript V8、
DartVM、WebAssembly、LuaJIT和GraalVM。我们相信EVM⾜够重要,值得拥有它⾃⼰的编译器了。
实现⼀个AOT编译器是更容易的选择,因为EVM同Javascript和Lua这些动态语⾔不同,它是静态的。MoeingAOT将EVM字节码编译为机器码,这些机器码被保存为动态链接⽂件。在EVM解释器启动⼀个智
能合约之前,如果它找到了对应的动态链接库,它会载⼊这⼀动态链接库执⾏机器码,解释执⾏就不再
必要了。
对于常⽤的合约,例如USDT和UniSwap,AOT编译器是⾮常有⽤的,因为机器码⽐解释执⾏快很多,它
能够⼤⼤缩短合约的执⾏时间。
MoeingRollup
Rollup是⼀种“去负载”(offload)的⽅法学,⽤来提升区块链的通量。不同的项⽬(例如 optimistic
rollup和arbitrum rollup)有不同的实现。⼀般⽽⾔,Rollup意味着将整个状态集合归结为⼀个哈希
值,即状态根。通常,⼀个Rollup扩展实现在智能合约内部,由⼀个定序⼈(sequencer)来维护其状
态,他要负责把⽤户的交易打包,提交每个区块的状态根到合约中。相邻区块的状态根必须符合状态转
换的规则,第三⽅能利⽤⼀些证明数据来验证这⼀点。
⼀个诚实的定序⼈必须可靠地维护状态,中⽴地打包交易(不能进⾏审查)。他还必须向所有需要下载
状态和区块的⼈提供数据。否则,定序⼈就被⽤户驱逐,由新的定序⼈替代,这⼀过程借助智能合约中
定义的Staking机制来实现。
进⼀步,如果相邻区块的状态根不符合状态转换的规则,会有⼈向定序⼈提出挑战,定序⼈则必须给出
证明数据。如果他做不到,将被罚款和逐出。
智能合约中定义了⼀个Rullup扩展的运⾏规则的细节,这些细节千差万别。但不论如何,它们核⼼的机
制是通过证明数据来确认状态的转换是合法的。不幸的是,这⼀证明任务对于EVM⽽⾔太重了,实现起
来很困难。
MoeingRollup使⽤原⽣代码来实现这种证明任务。智能合约中利⽤它所提供的原语,可以简单且⾼效地
完成证明任务。证明数据中,⾄少包含如下三个部分:
1. 区块中的交易集合
2. 这些交易读取的键值对,以及它们的存在性证明
3. 这些交易输出的键值对,以及⼀些辅助数据,可以利⽤它们来⽣成新状态的状态根
MoeingRollup还提供了⼀些⼯具⽤来⽅便定序⼈的⼯作,例如⽣成证明数据等。
MoeingLink
Smart Bitcoin Cash以单Shard的⽅式启动,但⻓期来看,它在未来有可能包含更多的Shard,从⽽成为
⼀条多Shard的区块链。
MoeingLink是⼀个协议,它允许多个Shard可以直接互操作,⽽不必在⽐特币现⾦的主⽹上执⾏交易。
当前,所有主要的多Shard⽅案都需要⼀个链做中转。在ETH2.0⽅案中,由Beacon Chain来做;在
Polkadot⽅案中,由Relay Chain来做;在Cosmos⽅案中,由Hub Chain来做。随着越来越多的Shard
被创建,跨Shard的交易会给拥的Layer1造成很⼤的压⼒。
为了避免这些情况,MoeingLink允许各个Shard向其它Shard证明⾃⼰的状态,⽅法是将MoeingADS中
⽣成的世界状态的Merkle Root提交到Layer1之上。各个Shard能获知彼此的状态之后,它们即可在没有
Layer1协助的情况下进⾏交互。 共识算法
Smart Bitcoin Cash使⽤tendermint作为共识引擎。矿⼯和BCH持币⼈共同来选举验证者集合。在时间
上,验证者集合按照epoch来进⾏选举和履⾏职责。
⼀个epoch持续2016个块(⼤约两周时间)。在⼀个epoch内,BCH的持币⼈通过施加时间锁的UTXO来
证明⾃⼰的拥有权,并且使⽤其拥有的数额来为验证者投票;⽽矿池则使⽤coinbase交易来投票。这是
⼀种混合的共识模型:算⼒和币混合投票。投票的过程在⽐特币现⾦的主链上进⾏,并且是⽆许可的:
成为新的验证者只需要具备⾜够算⼒和(或)拥有⾜够的BCH。
⼀个epoch的结束时间是其中区块的最⼤时间戳,它的持续时间是相邻两个epoch的结束时间之差。在
⼀个epoch期间被选举出的验证者集合,会在⼀个"候任状态"中保持⼀段时间,其⻓度等于epoch的持续
时间的5%。之后,它们才会开始履⾏职责,等到下⼀个验证者集合的“候任状态”结束之时,它们停⽌履
⾏职责。
每个验证者都必须在Smart Bitcoin Cash侧链上锁定⼀些BCH作为抵押物。如果它在履职期间有不当的
⾏为,这些抵押物将被罚没。
Smart Bitcoin Cash启动后的第⼀个阶段,只有算⼒可以⽤来选举验证者集合。在主⽹上锁定BCH来选
举验证者的功能会在之后开发,并且通过⼀次硬分叉升级来⽣效。
代币和燃料
Smart Bitcoin Cash不会引⼊新的代币,它的原⽣代币就是BCH,⽽且使⽤BCH来⽀付Gas费。
交易的Gas费被收集之后,其中⼀半会在验证⼈集合卸任之时奖励给他们,另外⼀半则会被燃烧掉。这
⼀设计使得BCH成为⼀种通缩的货币。验证⼈必须有⾜够的BCH作为抵押才能获得Gas费奖励,这些奖
励在可以被验证⼈花掉之前,要经历⼀段锁定期。
回购后燃烧的机制,在平台币(BNB、HT、FTT、OKB等)和DeFi治理代币中⾮常普遍。Filecoin使⽤了
类似的机制来燃烧掉部分Gas fee,以太坊在硬分叉实施EIP-1559之后,也会实施这样的机制。这⼀机制
已经被证明是有效的,所以Smart Bitcoin Cash也会采⽤。
BCH可以在⽐特币现⾦主⽹和Smart Bitcoin Cash之间双向互转。我们可以在主⽹上锁定若⼲BCH,同
时在Smart Bitcoin Cash上解锁对应数额的BCH,反之亦然。为了能启动Smart Bitcoin Cash,我们正在
邀请⽐特币现⾦⽣态中的重要参与者⼀同来运⾏⼀个联盟式的双向楔⼊的⽹关。这个⽹关连接主⽹和
Smart Bitcoin Cash,BCH通过它双向流通,类似于RSK和Liquid所采⽤的机制。⽹关的参与者不⼀定要
在验证者集合中。
如今的加密社区已经⾮常适应“同⼀代币存在于多条链”的范式。例如,当提到USDT的时候,它可以指⽐
特币的Omni协议上的代币、⽐特币现⾦SLP协议上的代币、以太坊上的代币,或者波场上的代币,等
等。因此,我们不会使⽤另外的符号来表示Smart Bitcoin Cash上的BCH,以免引发误解。
我们明确知道BCH的脚本语⾔⾜以实现⾮托管的、去信任的⽹关,通过由⼀段锁定脚本来追踪在
coinbase交易当中进⾏的投票进程。然⽽这⼀技术路线并未在实践中被验证。我们将会撰写专⻔的⽂档
来描述这⼀技术,当它通过社区的评审之后,再使⽤CashScript来实现它。接下来,Smart Bitcoin
Cash将会通过⼀次硬分叉来切换⽹关。
同⽐特币现⾦上Layer-2⽅案的互操作
再⽐特币现⾦⽣态中,已经有若⼲中layer2扩展,⽀持发⾏同质化和异质化的代币。在这些扩展中,最
为成功和重要的是Simple Ledger Protocol。发⾏者在代币的⽣态中起到最为关键的作⽤,他可以帮助
进⾏代币在SLP和Smart Bitcoin Cash间的互转。
例如,如果Alice希望把10个XYZ代币从SLP转移到Smart Bitcoin Cash,她可以先将这些代币在主⽹上发
送给XYZ的发⾏者,然后发⾏者再在Smart Bitcoin Cash上把10个XYZ发送给她,反之亦然。为了让这个
过程更加安全,Alice可以使⽤原⼦交换来保证两处的代币转移要么都发⽣,要么都不发⽣。
路线图
MoeingADS、MoeingEVM和MoeingDB已经基本开发完毕,在Smart Bitcoin Cash正式启动之前,它们
还要经过详尽的测试。
MoeingAOT会在2021年底之前开发完毕,并且通过⼀次硬分叉升级来⽣效。MoeingKV同样会在2021
年开发,希望它能为⽐特币现⾦主⽹的扩容贡献⼀些⼒量。
MoeingRollup和MoeingLink将会在2022年开发。如果那时Smart Bitcoin Cash出现了拥堵的情况,它
们会被实施,以实现进⼀步的扩容。
结论
Smart Bitcoin Cash是⼀条兼容EVM和Web3的⽐特币现⾦的侧链。⽐特币现⾦的算⼒和持币⼈为它选举
验证者集合,它使⽤BCH作为燃料。它使⽤若⼲对硬件友好的程序库来实现扩容。我们相信它能够在更
短的时间内提供和ETH2.0相同的好处,使得单区块的Gas上限达到⼗亿。
我们开发了激进的技术来优化存储和执⾏引擎。Smart Bitcoin Cash,在很⼤程度上可以被视为这些新
的激进技术的实验场。同其他开源项⽬⼀样,它的设计和实现可能会有缺陷和漏洞。因此,当您将资产
(包括BCH)转移到Smart Bitcoin Cash侧链上之时,需要⾃⾏承担⻛险,保证您能够承受可能的损
失。
页:
[1]