Nervos 从项目诞生之初,就一直秉持着本身的设计理念,坚持分层的设计方案,底层去解决安全和去中心化的问题,上层去解决效率、扩容、多功能的问题,但愿能够经过这样的方式去解决区块链世界的不可能三角问题。Nervos 是一套完整的解决方案,经济模型、共识、虚拟机、Cell 模型、Layer 2 等等,相互之间环环相扣,造成一个完整又紧密的系统。 编程
回到一个开发者所关心的问题,如今已经诞生这么多公链平台,那么在 Nervos CKB 上进行编程,究竟会有什么不同凡响的体验?在 CKB 上编程,又有什么样的优点呢? 后端
本文试着从 CKB 中资产是一等公民、编程上的灵活性,以及状态的肯定性这三个角度进行阐述。安全
在 Nervos CKB 的设计哲学中,若是要将智能合约的风险降到最低,那么必需要将这些智能合约的「状态」去中心化。由于状态决定了资产的全部权,惟有将其去中心化,才能避免因状态的中心化而致使的智能合约漏洞,进而产生系统性风险,最终形成所有人的资产损失。 工具
回顾过去,咱们能够看到ERC20 的 Token 存在着许多系统的脆弱性,例如著名的 The DAO 事件,以及 2018 年美链的合约漏洞,它们都由于智能合约中有 bug,进而形成无数资产全部者的损失。区块链
为何单个合约漏洞就能形成如此大的伤害呢?由于 ERC20 发行的 Token 本质上是将全部用户的资产都存在一个合约地址中,所以当这些 dApp 产生漏洞时,全部该资产的状态均可能发生变更,从而形成经济损失。在 ERC20 这样的模型下发行的资产,就像将该种资产所有都锁进大金库中。可想而知,只要金库的任何一个地方发生了漏洞,那么外来的人就能够进入金库,并将全部的资产都搬走。 spa
发行资产是区块链开发者的一项重要的需求,原生代币和其它发行的资产,都应该是一等公民(First-class Asset),也就是任何一个资产的全部者能够拥有本身的状态全部权,而不是像 ERC20 Token 那样,全部持有者的同类型资产都必须共用一把钥匙。所以,在 Nervos CKB 中,不管是持有 CKByte 这样的原生代币,仍是持有其余用户自定义的 Token(User Defined Token,UDT),用户都是将这些资产分别锁在本身独自全部的小格子之中,而且只有用户本身才有解锁的钥匙。 设计
为何可以让资产成为一等公民?这是由于在 Nervos CKB 中,全部的资产都储存在泛化的 UTXO 模型——Cell 之中,而且能够经过 Cell 中的 lock script 验证全部权,以及经过 type script 验证新 cell 的生成,这样的状态储存与验证规则同时适用于 CKByte 和 UDT,所以下降了任何资产发行时,因合约漏洞而形成资产损失的风险。3d
Nervos CKB?哦,这是条公链啊?那他们的智能合约用啥语言写啊?
这样的问题在 CKB 上是不存在的,由于 CKB VM 是基于开源的 RISC-V 指令集开发的,使用了普遍实现的 ELF 格式,也就是说,任何能够编译成 RISC-V 程序的语言都可以直接用来为 CKB 开发智能合约;同时结合 Cell 模型这样的编程模型,咱们能够将待验证的合约放在 type script 中,并将全部权的验证放在 lock script 中,这两大设计可让在 CKB 上的编程拥有很是大的灵活性。 blog
咱们简单列举了一些优点来告诉你 Nervos CKB 究竟灵活在哪里: 事件
1.任何语言都有可能在 CKB 上开发:
CKB 核心只定义了底层的虚拟机模型,理论上任何提供了 RISC-V 后端的语言都可以用来开发 CKB 合约,而不须要局限在特定语言才可以进行编程,所以这样的设计在将来能够下降更多开发者的进入门槛,而且更可以捕获使用各类语言的开发者进入 CKB 生态之中。
2.你能够用各类密码学原语来做为资产的钥匙:
在 CKB 虚拟机上没有写死的密码学原语,所以任何密码学原语理论上均可以像普通的脚本同样被部署在 cell 中。这让 Nervos 的生态能够在不须要分叉的状况下,有了使用各类密码学技术的可能性。
这种特性的威力是巨大的,举例来讲,你能够用以太坊和其余公链的地址和私钥去签署和收发 CKB 上的交易,所以如 MetaMask 等,这类在其余链上拥有成千上万用户的工具,能够在开发者开发好一款 CKB 上的产品以后直接为他所用,目前 Lay2 团队 的 ckb.pw 正在作这个方向的努力;另外,像各类先进的密码学技术如 Schnorr 签名、BLS 签名,和 zkSNARKs/zkSTARKs 等,均可以在 CKB 上使用。这也让安全性相关的签名机制、异构跨链、zk rollup 或 BLS rollup 等分层的实验性技术将来更有机会在 Nervos 上实现。
3.CKB 上能够实现可更新合约
合约部署后没法更新一直是区块链开发者的心头之痛,然而由于 CKB 交易中,能够验证 input cell 中 lock script 中的全部权,以及验证 type script 中的生成规则,而且还能经过 cell dep 引用其余的 cell,因此咱们可以在 CKB 上产生像是 Type ID 这样的利器。所谓 Type ID 是指某个 Cell 在肯定只有某个独一无二的 Type ID 的条件下,持续更新合约,兼顾可升级与肯定性,让开发者更灵活地部署并升级本身的合约脚本。
4.能够更灵活的支付手续费
对于 CKB 而言,其实交易的手续费支付具备很是大的灵活性,咱们能够经过 Open Transaction 的方式,将各个交易进行构造,这样的状况下咱们不但能够更灵活的用各类非原生的代币支付手续费,绕开因原生代币不足而没法支付手续费 ,交易没法成功的窘境,甚至在构造交易时,咱们还能够选择让交易的另外一方帮你支付手续费。
5.Cell dep 调用的灵活性
若是您曾经在以太坊上进行开发,就会知道在以太坊上没法经过一个交易调用两个先前的合约,由于本质上咱们须要调用的是两个合约帐户,这时候就必须得到两次的合约受权(Approved),但在 CKB 中,咱们能够将许多的合约经过 cell dep 与 type script 被调用,能够在使用更少的资源下实现更高的组合性。
除了上面提到了灵活性以外,在 CKB 上的开发者还能够在拥抱灵活编程模型的同时,享有肯定性。由于作为 Layer 1 的 Nervos CKB,它只负责执行状态的验证,状态的生成发生在链下,所以它并不会像以太坊那样,开发者的合约须要通过计算才能获得成果。在 CKB 中,咱们在链下就可以预期交易的输出状态,让总体交易的执行能够知足「肯定性」这个去中心化应用的核心要求。因此,在状态具备肯定性的特性下,开发者的合约能够避免被挪做它用,或是受到恶意攻击。这样一来,咱们就可以最大程度的确保总体系统的稳定性。
最后,CKB 为你们提供了极大的灵活性和安全性,而对于它的探索还只是刚刚开始,它的不少功能和潜力还远远没有被你们发现。你是否也想进入 CKB 的世界遨游一番?正好,咱们为开发者们精心准备了一个 CKB 编程体验课 😜
课程中,除了深刻浅出的实操技能外,咱们还为你们安排了多位可爱的助教。有兴趣的伙伴们趁着如今赶忙一块儿加入吧,欢迎扫码报名,或者点击阅读原文了解这门「CKB 编程体验课」。
👇👇👇
👆👆👆开发者们,快来扫码报名!