from Jan 我是 Linus 的粉丝。他创造了一个随处可见的开源操作系统,与人合著了一本我非常喜欢的书,还建立了一个几乎每个开发者每天都在使用的分布式版本控制系统。 我在见到 Git 的那一刻就开始用上了 Git,并被它的速度和优雅所吸引。开发者用版本控制系统[1]来管理源代码,这样他们就可以随时掌握代码的更新情况,与朋友和同事共享修改,在出现新错误时回滚到之前没有 bug 的版本等等。Git 让生活变得更加有趣,我希望 CKB 也可以做到这一点。 我们在创建 CKB 和 Cell 模型的过程受到了 Git 的启发。Git 的出现是出于 Linus 对 Linux 内核开发方便的渴望,人们无论何时想要组织一些东西,从注释到博客文章,到图片,都可以使用它。它是一个具有极好历史跟踪功能支持的知识库。 Git 知识库被称为「存储库(repository)」,在内部维护着一个不可变的只可追加的对象数据库(想起来了吗?)。Git 中的基本存储单元是Blob(二进制大对象),它是一个包含人们存储在存储库中数据的对象,就像 CKB 中的一个 Cell 一样。Git 会为每个文件的每个版本都创建一个 blob 对象。每当创建一个新文件时,都将创建一个新的 blob。每当修改现有文件时,都要创建一个具有新内容的 blob,而不需要修改旧的 blob(是不是听起来很熟悉?)。每个 blob 都会被哈希,并且该 blob 哈希会被用作引用 blob 的标识符。工作了几个小时之后,您创建了一些新文件并修改了一些现有文件,然后将所有更改提交到存储库中,将新的提交同步给同事们,便收工了。 一个提交是 Git 中的基本历史点,存储库历史由一系列提交组成,这些提交包括从存储库的起源到最近的更新。提交是某个特定时间的存储库版本,包括版本元数据,如作者、时间戳、上一个提交和对 blob tree 的引用。就像区块头通过写下矿机地址、时间戳、父块哈希和交易 merkle tree 的根来为区块链的每次更新保存元数据一样。您和您的同事们通过扩展 git 存储库的历史来获得报酬,就像矿工通过扩展区块的历史来获得区块奖励一样。 Git 存储库也可以有 Fork。人们在不同的分支上工作,但是哪个分支是「正确的」是由存储库维护者决定的,而不是通过共识。Git 是一个没有共识的分布式系统,依赖于特殊的点对点通信(如 ssh 或电子邮件)进行数据交换。 Git 和区块链之间有着相似之处,这也意味着我们应该更谨慎地将 Git 的想法融入到区块链中,而不应该将相互冲突的设计选择引入到区块链中,这样区块链或智能合约开发者就可以享受到 Git 的一些已被证明的优点。这就是 CKB 内在的真实样子:一个拥有真正的 p2p 网络、全球共识和增强 blob 的唯一大型 Git 库,由一群匿名者不断进行更新。 这不是一个区块链
Ethereum 上重复最多的智能合约
从依赖删除中恢复 实际上,我们甚至可以有意地利用这一点来实现代码的「先使用后部署」。假设您想使用一个新的自定义锁定脚本(智能合约)来保护你的 cell。与通常的先部署后使用流程不同,您可以在不进行部署的情况下使用它。只需要将新的锁定脚本(代码实现)的代码哈希放入 cell lock(代码使用)中,那么这些 cell 就会被新的 lock 保护,且立即生效。
为了升级区块链,人们必须在大多数节点上分发和部署新的软件版本(软/硬分叉),这需要大量的协调工作。对于 CKB 来说,交易签名验证可以和其它智能合约一样,通过在链上部署新版本来进行升级。这让 CKB 具备了 Tezos[10]提出的长期可升级性。
这对那些可能不经常在线的持有者来说是一个友好的保证,因为他们可以保证在创建时附加在他们 cell 上的合约不会被更改。人们的资产将始终按照他们锁定时指定的方式进行锁定。这是对 SoV 用户的终极保证,也是 CKB 资产不同于其它区块链上资产的原因。这和比特币通过「只遵循软分叉」的方式来为持有者提供保障是一样的。唯一的缺点是,当进行安全升级时,您需要承担「太晚」的风险。因此,为了方便起见,有些人可能还是喜欢一直使用最新的版本,因为他们相信开发团队,不需要操心去审核合约和手动升级,在这种情况下,他们会使用type id[12]来引用合约。大致来说,type id就类似于 Git 中的HEAD,一个可更新的引用总是指向当前的版本。通过提供这两种选项(通过代码哈希引用和 type id 引用)我们将选择合适升级策略的权利还给了用户。有选择总是好的。我们可以有不同的选择,没有人会被强迫升级。 系统脚本升级 从长远来看,CKB 将越来越抽象化、模块化,更多的核心功能将会在链上智能合约中被提取和实现。在其完整的形态下,我们应该可以无需通过软/硬分叉就能升级 CKB。这其中缺失的一环是,我们,即社区如何决定升级系统合约与否,或者说 CKB 的治理模式是什么?更准确地说,是我们如何决定升级一个系统合约的type id。 今天,CKB 使用的是和比特币一样的链下治理模式,我们仍然依赖于软/硬分叉。为了让使用其type id引用的人启用新版本的系统脚本,需要硬分叉来更新type id引用以指向最新版本,因为代码 cell 是被一个可解锁的 lock 锁定(https://explorer.nervos.org/address/ckb1qgqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhzeqga,检查一下它的代码哈希)。不使用核心团队控制的多签签名锁是一个有意的选择,因为系统脚本的升级应该遵循社区制定的治理决策。 Ref:[1]:https://en.wikipedia.org/wiki/Version_control[2]:https://talk.nervos.org/t/first-class-asset/405[3]:https://github.com/nervosnetwork/ckb-system-scripts/blob/master/c/secp256k1_helper.h#L40-L66[4]:https://talk.nervos.org/t/rfc-swappable-signature-verification-protocol-spec/4802[5]:https://www.researchgate.net/publication/332799463_Characterizing_Code_Clones_in_the_Ethereum_Smart_Contract_Ecosystem [6]:https://security.cse.iitk.ac.in/sites/default/files/17111011.pdf[7]:https://medium.com/hackernoon/what-caused-the-latest-100-million-ethereum-bug-and-a-detection-tool-for-similar-bugs-7b80f8ab7279[8]:https://github.com/nervosnetwork/ckb-system-scripts/blob/master/c/secp256k1_blake160_sighash_all.c[9]:https://github.com/nervosnetwork/ckb-system-scripts/blob/master/c/dao.c[10]:https://tezos.com/[11]:https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0022-transaction-structure/0022-transaction-structure.md#upgradable-script[12]:https://docs.ckb.dev/blog/ckbscript-06 —- 编译者/作者:Nervos 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
CKB,版本控制与区块链演进
2020-07-14 Nervos 来源:区块链网络
LOADING...
相关阅读:
- #快银大奖#赢10000KEY | 总计奖励超15000KEY | CKB吧#迷踪解密#活动第37期2020-08-02
- 比特币强势拉涨迎来新阶段多头趋势仍未完结耐心等待下一波触发信号2020-08-02
- 月白:八月伊始比特币拉升再破年内新高周末震荡蓄力有望二次拉升2020-08-02
- 雷凯趋势:比特币冲高受阻回落后市多头情绪依旧浓重2020-08-02
- 比特币期货/合约对目前市场的影响2020-08-02