特立独行的 CKB
本文由Nervos架构师志伟在2019年6月1日北京的分享整理而成,完整视频可以查看:https://v.qq.com/x/page/w0880ml3s3a.html
特立独行的 CKB AgendaIntroduction
Introduction区块链核心价值
区块链的核心价值是提供信任。 区块链是通过全局共识的方式实现信任,而全局共 识必然是一个很慢、很贵的东西。
没有共识算法能比没有共识的共识算法更快。 分布式、去中心化系统的共识,不可能做得比中心化的共识更快。 区块链最应该考虑的是如何能够把信任的价值发挥出来。
共同知识(Common Knowledge)是博弈论里的概念,所有人都知道的知识还不是共同知识,公共知识是指所有人都知道所有人都知道的知识。
共同知识的形成是个很慢的过程,需要不断的猜疑,不断的挑战和传播。
例子:如果在场有人问我是谁,过了3秒没人回答,说明大家都知道没有知道这个人是谁,这个就是共同知识。
我们希望CKB(Common Knowledge Base)是全人类色共同知识库。
分层架构 VS 单一架构 区块链扩容的不可能三角扩容方案都是有代价的: 联合挖矿,大区块,超级节点等方案影响去中心化。
多链,分片等方案降低安全性。
分层
分层架构大部分情况下需要局部的共识就够了。
两个公司有争端,先找局部法院,如果解决不了再上升到更高级的法院
如果上层不能保证安全,可以找更下一层来保证安全
Layer1 关注去中心化和安全,Layer2 关注性能。
需求也是分层的: 大部分情况下只需要局部的共识。 越大范围的共识代价越大。 即使中心化系统也是如此。
不同的角色: 状态和计算。 Layer1 负责状态的验证和存储 Layer2 状态的生成(计算)。
和多链的区别
很多多链是同构的,ckb上的不同层之间是有不同的角色的。
POW & POS
共识就是少数服从多数。
最常用的方式就是投票。
区块链不能帮你解决分歧,不能达成一致就分叉。
直接举手表决会存在的一个问题是刷票,技术术语叫做“女巫攻击”。
女巫攻击
女巫攻击其实就是刷票。 解决方案就要让投票和所需付出的成本成线性或者更高比例。
PoW和PoS都能解决女巫攻击的问题。
确定性
确定性BFT有绝对确定性的。投票节点是提前确定的,投票超过2/3就确定了。如果有四个节点,有三个投了赞成票,那理论上就没有逆转结果的可能了,结果就是确定了。
POS有一定的确定性。在指定的时刻,Stake总量是固定的值。POS会按照Stake的量来计算投票的权重。
POW没有最终确定性。在指定的时刻,算力总量不是一个固定的值。而且更夸张的是,你还可以去挖以前的块,当然肯定是无效的块。
所以,POW有动力吸引更多的算力保证网络安全。新矿工没有门槛。PoS没有动力去增发Stake。系统的安全性也跟这个没有直接关系。新的验证者门槛较高。
PoW相比之下更开放,安全性更可量化,与Layer2更互补。
共识算法
共识算法CKB希望做一个对ASIC持中性态度的POW共识。希望算力是分散的。希望有尽量多的算力。
NC-MAX
带宽实际上是区块链吞吐量的最大限制。
NC-Max 有三个主要的创新:
- 采用两步交易确认来降低孤块率。
- 锚定因素是孤块率
- 不能直接打包新的交易,要打包2个块之前的提案区的交易
- 动态调整区块间隔和区块奖励来更好的提升带宽利用率。
- 吞吐量,出块时间和区块奖励都是变化的
- 出块时间短后,区块奖励也会变少
- 在难度调整的时候考虑周期中的所有区块,来抵御自私挖矿攻击。
- 自私挖矿解释:挖到块后不发,藏了几个块,然后之后发布覆盖了别人的链
- 会减少挖出块的数量
- 比特币会降低难度,因为一段时间正常可以挖出来100个块,结果只挖了90个出来,所以会降低挖矿难度。这样让自私挖矿更有利可图
- ckb的难度调整:
- 和比特币不一样
* 会考虑到所有区块,包括孤块,把孤块的算力也加入进来
* 自私挖矿不会有收益,因为自私挖矿不会导致难度调整
- 和比特币不一样
RISC-V & EVM & WASM
RISC-V & EVM & WASMVM in blockchain
VM in blockchainVM(虚拟机)作用是解析收到的交易,根据交易来修改链的状态,生成新的状态。
VM必须要做到下面两点:
- 要保证确定性的状态
- 每一个计算都会在所有节点上进行
- 每个节点的计算结果要保证一致
- 可以停机
- 图灵完备的系统中,可以写无限循环导致系统无法停机
- 以太坊有gas limit来解决
另外:
- 指令集要非常稳定
- 要不然硬分叉代价很大
- 灵活
- 支持图灵完备的智能合约,这样可以实现所有的功能
- 工具链的支持
- 合约要编译成字节码,所以工具链支持也很重要
对比
RISV-V
是一个真正的硬件的指令集,WASM和EVM是软件的指令集
CPU的指令集可以实现所有的功能
指令集非常简洁,只有50个
VM architecture,Register Based效率也会好一点
WASM
并不是为了区块链而设计的,很多是浮点运算,但在区块链上是不太用的
EVM
设计有点粗糙,有些指令是重复的
Words size是256位,是为了便于操作hash,导致EVM很低效,都是软件模拟的。
CPU是32/64位的,对32/64的支持更好,更高效。
Toolchain虽然solc在区块链领域很流行,但和GCC/LLVM的工具链的生态还是没法比
Memory Model
Memory ModelEVM有code,storage,stack,memory。
Solidity是编译成字节码部署到链上。
EVM执行时可以访问链上的任何数据。
CKB用的是Linux ELF文件格式,合约其实就是一个可执行文件,比如说C语言,就是一个main函数的程序,编译后就是Linux下的一个可执行文件,然后就可以把可执行文件放到链上去。这样工具链方面,可以用gdb去调试。
CKB使用32位寄存器
EVM执行时可以访问链上的任何数据,CKB通过syscall来访问数据,而且只能访问交易相关的几个cell
Cell Model vs Account Model
Cell Model vs Account ModelProgramming model and Problems
Programming model is about State:编程模型就是关于状态的
State generation(off-chain)
State verification(CKB-VM)
State storage (Cell Model)
EVM的问题:
- 只支付给计算
- 存储免费:公地悲剧,全节点有很大负担
计算和验证应该分离。
以太坊上没有验证,每次转账只需要知道给谁转,转账多少,具体转账的执行时在节点上进行的,不会进行验证input的总和等于output的总和。
所以以太坊上可能存在的一个情况是,给一个账户减掉1,可以给另外一个账户加2。
对比
对比Cryptographic Primitive(密码学原语),比如验签在比特币和以太坊上是内置的,就是说系统编译出来后就内置了这样的系统合约了。CKB上是没有的,要自己去写验签,好处是灵活,坏处是要自己去写这个逻辑。
Cell Model
Cell ModelCell model
- 泛化的UTXO
- Cell是一个byte数组,可以放任何的数据
- Data是一个序列化后的数据
- Type是一个script,用来规定data可以放什么样的类型的数据
Account model
- like OOP
- Function in contract like method in Class
- Storage variable like member of Class
- Transaction like message computation on nodes
Cell model
- 更像一个纯的函数式编程(FP)
- 一旦一个cell作为input被使用,它就不能被再使用了。就像bitcoin一样,一个UTXO被使用后就被销毁了
- Lock像callback,等下一个有人要用这个cell的时候才会触发这个script
- 计算在客户端,验证在chain上(always recompute)
Example
Examplehttps://github.com/rink1969/ckb-contract-examples
- Most simple script.
- Vote - Map Reduce.
- HTLC. Multi-Signature.