其他
CKB,版本控制与区块链演进
The following article is from Nervos 中文社区 Author Jan Xie
CKB 是 Git
这不是一个区块链
按照你喜欢的方式给 Cell 命名
重用代码/数据
因为 cell 是可引用的存储单元,所以在 CKB 上重用代码/数据很容易。假设在 cell 0xbeef#1(交易 0xbeef 的输出 1)中存储了一些共享代码/数据,要重用它,首先需要加载 cell 0xbeef#1 作为交易依赖项(cell_deps),然后使用 ckb_load_cell_data 系统调用从它那里读取数据,如默认的锁定脚本所示。一旦将 cell 0xbeef#1 中的数据加载到 VM 内存中,那么就可以根据您的需要[3],将其视为代码或数据使用。通过这种方式,CKB 就类似于一个代码和数据共享库,供运行在上面的智能合约使用。如果我们能通过组合现有的安全乐高积木来构建一个智能合约[4],是不是很酷?而不需要从 GitHub 上的某个地方复制代码,并且一次又一次地部署相同的代码,这既浪费了时间,也浪费了链上的空间。一项对以太坊合约[5][6]的分析中表明,95%~99%的合约都是重复的。
Ethereum 上重复最多的智能合约
无惧依赖删除
在 Ethereum 上的确是这样的。如果你在这个领域待的时间足够长,你可能会知道 2017 年关于 2.8 亿美元的意外事故[7]。整个悲剧是由 Ethereum 上一个智能合约的意外删除引发的,这个合约被许多其他智能合约使用。这次删除导致所有依赖它的智能合约都功能失调,所有存储在这些智能合约中的资产都被冻结。
而在 CKB 上,这样的意外并不会造成什么影响,因为任何保存代码副本的人(例如那些运行全节点或复杂的轻客户端)都可以在链上再次部署相同的代码,代码哈希的引用仍然有效。我们只需使用新的依赖 cell 来构造交易即可。没有人会因此受到损失,一切都仍将正常运转。
从依赖删除中恢复
实际锁定脚本代码的部署可以延迟到您想要解锁这些 cell 之时。如果想要解锁,首先需要在链上部署脚本代码,然后像往常一样发送另一个交易来解锁这些 cell。在 cell 被解锁之后,您可以删除部署的代码并索回被占用的 CKByte,以减少不必要的存储成本。先使用后部署的额外好处是更好的隐私性:在你解锁之前,没有人知道这个新锁的逻辑是什么。
进化的 CKB
是的!这就是为什么一些 CKB 核心功能,如交易签名验证[8]和 Nervos DAO[9]都是以智能合约形式实现的原因。以交易签名验证为例——这是几乎所有区块链的核心功能,并且是用原生语言硬编码的(比如比特币中用 C 语言编写,go-ethereum 中用 Go 语言编写)。
我们还可以做到更好。在 CKB 上,每个用户都拥有自己的数据,所以一份合约更像是用户和 CKB 之间的两方协议,个人可以做出独立的选择。如果你通过代码哈希[11]来使用合约,这意味着「我同意了这个特定版本的合约」。你不必担心有一天开发者会升级合约代码,因为新合约的代码哈希是不一样的,你的 lock/type 仍然会引用旧的合约而不是新的合约。新版本部署后,会与系统中的旧版本共存。如果您通过其代码哈希使用系统合约,那么新版本对您不会造成影响,您可以自主决定是否升级。如果答案是 yes,那么你可以更新所有 cell 以使用新版本。如果是 no,则什么都不需要做,继续使用旧版本。
系统脚本升级
正如我们在定位白皮书中所说的那样,虽然目前有很多有趣的建议,但我们还没有看到一个切实可行的治理模式。一旦我们找到了合适的治理模式,我们就可以用「治理锁」来代替不可解锁的锁,让系统智能合约在征得社区同意的情况下进行升级,比如投票的结果。在此之前,我们会暂时坚持不完善的链下治理模式,但 CKB 治理和演进的脊梁已经存在。
END
Nervos CKB 网址:https://www.nervos.org/ 中文电报群:https://t.me/ckbcn中文推特:https://twitter.com/CKB_CN《CKB 入门手册》:123.ckbdapps.com