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