如何基于波卡开发区块链项目?
2020年10月20日,密码极客发起了第一期【波卡生态系列分享会】。我们非常荣幸邀请到了Parity亚洲区技术总监贾瑶琪博士做客密码极客大咖直播间,为大家讲解《如何基于波卡开发区块链项目》。
1、在波卡上如何开发区块链系统?
大家作为不管是开发者或者是区块链从业人员,应该都能感觉到从零开始构造一个区块链是一个非常困难的事情,为什么说是很困难的事情?
图1
大家可以看一下图1,其实要从头开发一个区块链,你要考虑到的就不只是数据库公式算法,还要考虑到处理各种各样的交易相关的一个转换函数。与此同时,如果你想加一些比较复杂或者先进的一个逻辑在里边,例如零知识证明,这样就要在开发区关联时候额外添加这些比较复杂的算法以及功能。
那么大家其实就会想到我们如何使用已经有的这些,不管是公链技术或者是联盟链技术来进行二次开发。其实在过去的十几年当中,特别是从09年比特币白皮书这样的一个上线,以及15年以太坊系统的上线,大家可以看到区块链不止可以做支付,而且还可以在上边部署一些智能合约。那么的话就有很多开发者是基于比特币做二次开发,以及一些比较有意思的这种utxo模型的这样的一个区块链系统,还有根据以太坊做的一些调整,然而这些基于已有的区块链开进行二次开发来做一些新的链这样的一个系统,他们最大的问题就是由于像比特币或者以太坊早期的这些项目,他们也有一个比较好的开发框架,其实大家都是在源码基础上进行改动的,这样就要求开发者对于源码的理解是比较高的。与此同时的话,由于这些源码没有比较好的模块化来作为一个框架,其实开发起来的难度是很大的。
而我们Parity其实从 Gavin在很早期15年建立Parity的时候,我们在最初就在帮以太坊开发它的Rust客户端,之前是叫做Parity Ethereum现在改名叫做Open Ethereum,我们积累了很多各种各样的对区块链的开发经验,特别是在从18年开始积极的开发Polkadot跨链项目,我们吸收以及总结了很多开发供应链的这样的一些经验,然后从这些经验里边,我们抽取以及进一步的深化,做出了这样的一个区块链开发框架。而这套框架我们命名为Substrate。
图2
因为波卡是一个跨链项目,那么我们为了帮助开发者更快的开发自己的一个区块链系统,我们就开发了Substrate这样的一套框架,来方便开发者去开发相关的这样一个区块链系统,我们叫做平行链。大家可以看到 Substrate其实包含了很多刚刚我提到的这种区块链的核心组件,例如数据库层、网络层以及可插拔的共识协议。
同时,我在之后也会提到包含了比较有意思的链下工作机以及链上的这种可升级的功能,这样就可以帮助开发者在开发的时候,其实大家只选用自己想使用的一个模块,就可以很快速的开发相关的一个区块链系统,可以快到哪种程度,Gavin其实在18年的时候,在Web3峰会做了这样的一个演讲,就是拿出了崭新的苹果电脑,然后开始装这样的一个Substrate相关的 dependency,然后到最终编译出一个区块链只花了15分钟,大家可想而知,这个是18年的不稳定版本,现在的话Substrate已经到了2.0版本,那么在这个版本上进行一个开发,其实会有更好的用户体验,是更加快速的。回到咱们今天讲的主题,在波卡上如何开发区块链系统,那么相信大家现在已经有了一个比较好的眉目,其实就是使用Substrate这样的一个开发框架来进行一个开发。
图3
2、Substrate开发出来的系统有哪几种方式可以进行部署?
图4
其实除了作为波卡的平行链或者平行线程之外,也可以直接部署成为独立的链。特别是在国内这种特有的环境下,大家也可以使用Substrate搭建自己对应的这种商业逻辑的联盟链或者私有链,以及一些对于吞吐量要求比较高的,可以针对某一个应用,例如游戏单独搭一条链并部署在自己相对应的环境下边,当然了目前大家在Substrate进行开发的时候,比较有利的一点是经过三年,从这个图可以看到,整个波卡生态的壮大以及开发者持续的开发,Substrate的开发生态以及工具是有很多的,大家可以用PolkaDOT-js,当然内置的话也是有一个比较好的这种区块浏览器,大家也可以使用Parity Signer这样的一个离线的硬件钱包。
3、怎么使用Substrate进行Rust开发?
图5
与此同时,除了图5上面提到的这种ink! 智能合约。这种ink!.Rust类型的智能合约,我们目前也兼容了evm其实大家可以使用这些去编写智能合约,然后在自己对应的消费链上面进行一个运行。接下来我就大致跟大家分享一下怎么使用Substrate进行这种Rust开发。因为Substrate是跟其他的智能合约开发比较不太一样,因为你是相当于开发一个区块链,虽然区块链底层,像数据库、网络、控制协议都搭好了,但是针对你自己特殊的这种需求,例如你要做游戏的一个区块链,或者是偏支付的这样一个链,这种核心的商业逻辑还是需要你进行开发的。
图6
那么进行开发的话需要这种Substrate Runtime的。图6里边大家可以看到,由于Substrate跟我们平时开发智能合约不太一样,那么的话它是有一些这种开发上面的一些这种policy需要大家去记住的。例如第一点,在Substrate Runtime你如果发了一个我们叫做extrinsic,或者你就把它当做交易,发交易的时候,如果这个交易进行时发生了问题的,那么交易对状态的改变是不会回滚的。
然后在以太坊上面进行solidity的开发的话,如果交易执行不成功,那么其实它的状态是会回滚的。这就要求了我们在开发Substrate runtime的时候,最好是我们先自己验证一下他这样的一个逻辑对不对?然后再写。
接下来这几页的图片,大家可以看一下,在写这种runtime或者相对应的这种逻辑的时候,需要大家在里边填充自己的这种代码的,大家可以看模块定义通常是包含怎么定义存储事件以及错误,还有就是一些相关的这样的一个函数。
图7
对于这种如果大家想引用其他的相关的这样的一些trait的话,因为整个Substrate都用Rust写,所以这也会用到一些trait,如果大家想知道更多这种Rust相关的信息的话,再可以在网上查一下Rust的相关课程,或者加入我们Substrate的课程,我们会介绍一些 Rust的相关的这种基础。然后像存储的话,大家可以看到其实里边有一些比较简单的类型、最简单的方法,大家就可以学习已经有的这些简单的类型或者这种例子,然后根据自己的实际情况,然后去改一下相关的这种变量名字,进行这样的一个操作。与此同时的话类似于我们写智能合约,在做一些操作的时候都要触发事件或者发出事件,那么这里边你也可以去定义一个事件。
当然了这里面还有一个地方就是decl_module,其实就是要定义自己相对应的这种runtime的函数,我在最后会提到的叫做Substrate.dev这样的一个网站上面有很多各种各样的教程,大家可以跟随教程去学习,以及做一些比较简单的例子去深入学习,怎么去根据这几个模块定义对应的这样的一个事件存储和函数,来完成自己对应的这样的一个Runtime,以及相对应的逻辑的定义以及操作。
4、Substrate应用链跟智能合约的差异性在哪?
在这里简单类比下Substrate应用链或者Runtime跟智能合约的差异性。
图8
大家都知道写智能合约,特别是以太坊上面的solidity这样的一个智能合约,很多时候由于solidity以及以太坊本身的限制——比如它存储量较低、手续费较高,同时像solidity它本身的限制也是比较多,可能更多时候是只能操作整数这种类型。
这就是为什么大家看到的目前以太坊上面比较火热的应用都是跟通证相关,而不是跟更广泛的Web3.0相关的原因。
而大家使用Substrate进行开发的时候,就不存在这样的问题。
因为大家使用Substrate开发的时候,整个链都是为开发者所控制的。所以当大家在进行开发的时候,不管是链上链下数据,或是对应的一些solidity没有的接口,Substrate都可以进行一个提供。
并且大家也可以看到,Substrate本身的吞吐量也是比较高的,所以可以给应用提供更多的处理交易与逻辑的空间。
与此同时,Substrate本身也会提供一个off-chain worker链下工作机,可以帮助做Substrate应用开发的开发者能够更快的处理相关的链下数据,实现链上处理链下数据,这样就打通了链上与链下。
5、无缝无分叉的链上升级
熟悉区块链行业的朋友都知道,在过去,所有的公链项目包括一些联盟链项目,如果想要做升级的话,都需要进行一个硬分叉。像比特币,特别是以太坊。大家都知道在16年由于“The DAO”事件,由于矿工意见不同,最终从以太坊分出了经典以太。
我们为什么要做链相关的升级?这其实涉及到了一个计算机或者编程行业。
大家其实默认这样一个现象:没有任何一个程序员可以写出没有漏洞的代码。
不管是写传统的应用,还是写区块链得应用,或者智能合约。通常情况下你写的代码越多,那么你可能产生的安全漏洞就越多。
回顾过去的几年,不管是defi还是链本身,大家都会发现很多各种各样的漏洞,导致很多用户有各种各样的财产损失。
这就使得区块链本身需要一个比较好的升级——不管是智能合约升级还是链本身的升级。
但如果我们频频地去使用这种硬分叉进行升级,首先时间赶不上,因为升级需要“各个矿工在很短的时间内,把自己的软件升级到最新的版本,然后在某一个特定时间内大家共同去升级到这样的版本,最后从旧链切入到新链上面”的这样的一个逻辑。
然而,由于硬分叉,这种升级模式成本极高,而且很多时候可能会导致你本身的链又分叉出其它的链。
那么像Substrate就有一个无缝的链上升级。其实就是将开发者相对应的一个Runtime提交到链上面,然后进行一个验证者链上投票,大家可以看到这其实是跟链上治理相关的。
链上投票完成以后,如果绝大多数人同意进行对应的一个升级,那么开发者提交的一个Runtime就会被写入到整个链的Runtime里边,进行对应的升级。
有了这样一个无分叉链上升级,就可以保证区块链开发者可以更安心的运行自己的区块链。
即使出现一些问题,也可以很快的去进行修复或改正。
图9
6、链下工作机(off-chain worker)
大家都知道,在以太坊上面我们有各种各样的预言机,例如chainlink 。
在过去的半年,预言机是很受到各种各样的人的关注的。
因为以太坊本身无法打通链上链下的渠道,所以链上如果想要获得链下数据——例如各种各样的通证价格,就需要这种预言机将数据发送到链上。
而Substrate本身就是链下工作机的运行原理——其实就是链上的这些节点,它们会通过链下工作机去取得链下的相对应的数据。
图10
那么这些链上的验证节点,就可以对链条数据直接进行处理。
未来的话可以对处理结果——例如在链上形成共识,来保证可以更快、更方便的拿到链下信息,并进行相关的计算。
像在波卡或Substrate对应的生态里,就不太需要这种单独的预言机。因为对应的这种链下工作机的接口已经写的比较好了。
与此同时,大家也可以看到对应的这样一个场景:除了我刚刚提到的想去拿一些链下数据;还有就是使用链下工作机的一些场景。
例如某些比较庞大的计算,我们就可以使用链下工作机来完成,结果完成后再返回给对应的一个链上验证者。
这里有一些链下工作机的相关学习资源,大家可以进行一个参考。
图11
7、如何更好的接入到波卡里面?
前面我讲了一些关于例如波卡是如何使用Substrate进行开发的,以及Substrate写出来的Runtime大概是什么样的,同时还有Substrate进行开发的优点的话题。
那么大家可能也更想知道:如果用Substrate去开发出一套区块链系统,我是如何更好的接入到波卡里面的?
大家可以看一下图12,其实就是关于波卡整个的一个框架。
熟悉波卡都知道,Polkadot最中间、最核心的是叫做Relay Chain或者叫做中继链。中继链里面跑了很多对应的验证节点,叫做区块验证节点(Validators)。
图12
不同的链如果接入到中继链里边,它们就会作为一个平行链接入到中继链里边。
很多比较大的区块链系统,例如比特币或者以太坊,它们如果想接入到波卡里面,就需要通过桥首先调节到一个平行链上面,再通过平行链与其他的平行链沟通。
作为平行链,它们对于内容的或者区块的验证要通过中继链相关的验证节点来完成。
那么的话大家就会问,平行链本身需要什么节点?这就像图里面提到的一样,需要叫做collator的这样一个类型的节点。
这些节点就负责采集每个平行链对应的区块,然后提交给中继链随机选择的一些区块验证节点。这些区块验证节点就会去验证平行链里对应的区块。
与此同时,使用Substrate写出来的区块链,还需要另外一个模块叫做Cumulus。大家可以在用Substrate写完这个Cumulus后,再进行稍微的改进,就可以用Cumulus连入到平行链里面。
当然,不是每一个Substrate链都可以连入到平行链和中继链,或者波卡里面——这就涉及到一个平行链插槽的拍卖。
图13
8、Web3基金会如何支持波卡生态发展?
波卡生态里面的项目特别活跃。大家可以看一下,不管是基金会还是Parity,我们对波卡生态项目的支持,都是很高的。
例如我们在大概3月的时候,就已经发放了超过100个项目对应的Web3项目,与Web3基金市场grant的支持。
与此同时,我们也会有叫做builder program去帮助社区一些相对成熟的团队,给他们提供技术及商务市场的一个服务。
当然,作为一个不太熟悉技术的社区成员,你也可以参加我们的大使计划,去帮忙推广波卡相关的技术及理念。
图14
在亚洲或者国内,大家可以看到从今年5月份开始,我们跟万向合作做了Web3训练营,孵化了15支团队。
这15支团队大部分已经上了相关的测试网和主网。然后像做融资等也都是非常受欢迎的。
未来,我们也希望有更多、更好的团队可以加入到我们的Web3训练营里。我们会提供技术、商务以及市场相关的支持。
全球已经有超过100个团队基于Substrate进行开发区块链。
我们作为亚洲团队或者说中国团队,大家可以看到,在过去的一段时间里,我们已经为大家提供了各种各样的Substrate开发的相关中文资料。
不管是知乎专栏、Polkadot公众号,还是线上、线下活动,包括哔哩哔哩直播,都欢迎大家去搜索Substrate,或搜索我们的社区,积极加入到我们的活动里面。
与此同时,我们也有一些最新的活动——例如在月底我们要举办国内首次web3大会,主题就是开放、开源、互联。
我们会邀请海内外——不只是区块链行业或波卡生态项目及嘉宾,我们还会邀请海内外比较出名的、对Web3整个领域贡献比较大的嘉宾,去分享他们对Web3的理解,以及对Web3生态的贡献。
图15
大家如果感兴趣,可以去学习这样的一个教程,去体验一下Substrate新的开发框架——不管是链上升级,还是链下工作机。以及我们提供的各种各样的模块,来搭建自己的区块链。
很高兴今天能收到密码极客的邀请,今天为大家分享了这么多,也希望大家未来不管是在波卡生态,还是在区块链生态,都能够更好的开发、融入到我们的区块链行业,谢谢大家!
问答环节
问题一,来自网易区块链创新业务负责人胡志敏。
胡志敏:如果作为一个开发者,想在波卡生态中和基于Substrate上进行区块链创业的话,一定会需要一些启动资金,我想了解polkadot官方基金对于区块链应用的扶持策略,比如对于什么样的项目会启用官方投资?
贾瑶琪博士:关于波卡生态和机器设备进行开发的相关项目和团队,我刚刚已经讲过,不管是基金会还是parity,都会提供比较大的支持。
关于资金方面,基金会会根据项目相关的资质来进行评估。
大家可以去申请一个叫做Web3 grant这样的一个项目。对于一些相对比较好的项目,基金会会提供大概3万美金的一个支持。
当然,对于比较复杂的项目也会提供更高资金的支持,但是需要花费更长的时间进行审核。
对于一些相对成熟的、有产品或者有测试网的项目,可以申请我们比较成熟的、相关的一些program。例如builder program或者我们的web3 bootcamp,web3训练营。我们会对这些项目提供技术市场以及商务相关的指导与帮助。
与此同时,我们也会联系波卡生态里比较积极,支持我们的相关投资人或者海内外投资人,去帮忙观察一下这些项目,并且进行一些相关的投资。
问题二和问题三来自Coinversation代码贡献者,北大毕业,有12年程序开发经验的清欢。
问题二
清欢:如果开发平行链,后续平行链接入卡槽的成本会是多少?
贾瑶琪博士:针对第一个问题,如果开发平行链,那么插槽的成本会是多少?目前来讲,我们还没有一个很明确的计算。例如大概多少的dot你可以拿到插槽。但就目前来看——因为我们的插槽不是直接去买卖的,而是需要用户去锁自己对应的一个dot——那么的话,其实我们还是鼓励不同的团队去更好的发展自己的社区,在未来可以通过众筹的方式或去发展自己平行链这样的一个盈利能力,然后就可以用自己盈利获得的资金去进行插槽拍卖。
问题三
清欢:Coinversation使用ink!智能合约开发项目,目前从开发工具到智能合约测试再到部署都相对比较烦琐,后续如何能降低这些开发的门槛?
贾瑶琪博士:ink!现在已经出到第三个版本,具体情况大家可以去看一下。
关于ink!相关的开发、开发的模块以及相关的组件,我们也在逐步进行开发完善,从而方便更多的开发者去更好的使用ink!科技来进行开发。
目前你讲得也很对,可能有些开发工具确实不是那么地到位。但我们的Web3基金会已经给了一些开发工具的团队在做类似于remix的一个Ide,来帮助开发者使用ink!进行开发。
问题四
Polkadot社区1群成员:波卡或Substrate的应用开发必须要作为平行链吗?这样每个应用都开发链,平行链的插槽不够了怎么办?
贾瑶琪博士:除了平行链,其实还是有其他的方法。
第一个方法就是我刚刚提到的,可以去通过平行线程,然后接入到系统里面。
平行线程不需要一个平行链团队独占一个插槽超过半年或两年。它只按需竞拍不同的区块,然后把自己的区块写入到波卡系统里面。
当然,还有一些方式。如果你只是搭建一个比较简单的应用,那么可以尝试使用ink! 或Solidity编写智能合约,然后可以将自己的智能合约或者相关的应用部署在智能合约平行链上面。通过智能合约平行链去调用以及提供数据给其他的平行链,还可以利用到波卡对应的跨链优势。
还有,也可以搭建一个单独的Substrate的链。未来通过某种方式桥接到一些平行链上面,那么通过平行链就可以将自己链的数据与其他平行链进行沟通。
大致的话通过以上三种方式,再加上拍卖平行链插槽,然后接入波卡。一共四种方式来接入到波卡的系统里面。
Scan QR code with WeChat