火星链 火星链
Ctrl+D收藏火星链

Substrate VS 智能合约 | part I: 概述

作者:

时间:1900/1/1 0:00:00

这个系列面向的是智能合约开发者,或者是在智能合约和自己定制区块链之间摇摆不定的从业者。希望读完这个系列之后,可以帮助大家更好地了解Substrate与智能合约的异同,面对不同的业务需求时,可以更加高效进行技术选型。同时,也希望可以给大家提供一些有趣的视角来看待Substrate,欢迎任何反馈。

简单来说,Substrate是一个构造区块链的“轮子”。在Substrate之前,如果大家想要快速构造一条链,选择是非常少,而且可定制化程度也很低。基本上公链会fork Bitcoin,联盟链会直接使用Hyperledger。Substrate是一个开箱即用的构造区块链的SDK,从简单的智能合约,到中层的链上逻辑,或者底层的p2p网络、数据库、共识,都可以自由定制。关于Substrate入门介绍文章已经很多了,这里就不赘述了。想入门的同学可以看看下面的资料:(注:由于微信订阅号无法跳转外部链接,下面几篇文章请移步 “阅读原文” 后点开)

Substrate初次亮相视频, 15分钟速成搭链, 什么是Substrate - from boka

mapping(uint8 => Student) students;    uint[] class;并且对array进行元素删除并且是一件O(n)的操作,这意味着我们无法支付的起昂贵的gas费用,并且涉及到多个存储的更改,稍不留神可能就会出现逻辑错误。

HuobiGlobal已支持SubDAO竞拍波卡平行链插槽:11月6日消息,HuobiGlobal已支持波卡基础设施SubDAO竞拍波卡平行链插槽。SubDAO将拿出代币总量的0.1%,即1,000,000枚的GOV作为早鸟奖励。在接下来的平行链竞拍中,SubDAO将最高拿出代币总量的30%,即3亿枚GOV,作为众贷贡献者的奖励。目前,确定支持SubDAO竞拍的渠道包括Polkadot-JS、Bifrost、Zenlink、Math钱包等去中心化平台,以及火币、Gate、MEXC等CEX平台。

SubDAO是波卡的DAO基础设施,已获得Web3基金会官方3个Grant,并完成HuobiVentures、OKExBlockdreamFund、Hypershere、CMS等数十家机构以及Messari创始人RyanSelkis在内的数百万美元融资。SubDAO创始团队由IBM集团前TechnicalTeamLeader和波卡多位早期知名开发者和波卡社区发起人组成。[2021/11/6 6:35:19]

Substrate中提供了多种map,包括map, linked_map, double_map。其中linked_map即是对map提供了iterate的功能。这使得存储和逻辑变得更加贴近真实。

想要深入学习Substrate中存储类型的童鞋,请移步Substratec存储类型概览

作为一个前智能合约er,深知dapp的痛:

gas费用太高,用户玩不起;

出块时间长,用户等不起;

一般dapp都会有自己的token,但是用户必须现有eth才可以玩,这对不习惯区块链的用户来说是一大门槛;

新用户经常弄丢私钥,资产都没了;

这当然不是智能合约的错。站在昨天,智能合约是划时代的产物;站在现在,智能合约的不足需要新的技术来弥补。

Gavin Wood:Substrate 3.0版本可能会在2021年上半年发布:12月31日消息,波卡Polkadot(DOT)创始人Gavin Wood在《2020年Polkadot总结》中指出,Substrate的下一个主要版本3.0版本可能会在2021年上半年发布,将给以太坊带来兼容性,以及新的改进、更多的惯用Frame PalletAPI以及一个更快的数据库后端和端到端权重体系。另外,2020年Polkadot财政库总共有超过1400万美元的资金被用于资助200多个项目;Polkadot目前的10.2亿DOT流通量中有61%被锁定在质押系统中;Polkadot目前拥有274个验证人,由大约200个独立运营商运营,并得到7000多个个人指定账户的支持;Polkadot目前有超过100个平行链正在开发中,还有超过50个寻找完整平行链的插槽。Cumulus(用以连接Substrate的平行链)正处于功能完善的初始阶段,准备与新的Rococo测试网和平行链v1代码一起使用。[2020/12/31 16:08:48]

有些dapp开发者选择不在eth公链上部署dapp,而是自己使用eth开发私链来部署自己的dapp,确实可以解决上述的部分问题,但是类似私钥、多种token对用户门槛的提高,仍然是无法避免的。

而Substrate作为区块链开发的“轮子”,因为优秀的框架设计和抽象分层,给开发者提供了多阶定制选择:

Substrate分层

这里简单介绍一下Substrate的分层,想要深入了解的童鞋可以自己搜索一下,

Substrate Node: 节点层。在这一层基本上不做什么改动。就是编译一下就可以运行一个节点了。如果想要做一些改动,就重写一下创世配置文件就好了。重新定义链中的参数,但是无法修改链的运行逻辑。

波卡生态Moons:将于9月参与插槽竞拍,联合Substrate将信息孤岛连在一起:Moons运营团队表示,将在9月筹备参与插槽竞拍,加入波卡生态。Moons与Polkadot一样,都是基于Substrate,并且将跨链技术走出钱包,将会运用到更多的生态当中。Moons具有完善的治理系统,所有利益相关者都有发言权。网络升级在链上进行协调并自主制定,以确保Moons的发展能够反映社区的价值并避免停滞。目前Moons已获得Web3基金会认可,同时也是Substrate成员。在Moons平台上,可以体验到区块链给人们带来最明显帮助。聚合链简单来说,即是“联盟链+跨链+公有链”三链合一,未来会有千千万万不同的联盟链和私有链,但是每个链都是独立分开的,而Moons将会把这些千千万万的信息孤岛连在一起,信息互通,产生价值。并且通过大数据风险测评,与社区自治理机制,弥补传统的区块链无监管泛滥,同是又拥有强大隐蔽性。[2020/8/31]

Substrate FRAME: runtime层。基本上绝大部分的定制化都发生在这一层。在这一层大家可以做的事情很多,概括起来就是修改区块链的运行逻辑。比如转账、治理、链上升级逻辑、staking等都发生在这一层。是智能合约开发者最需要关注的一部分。

Substrate Core: 核心层。整个FRAME/runtime层在Core面前都可以被忽略。可以用任何语言从0开始搭建一个runtime,只要它最终可以被编译成WebAssembly. 这一层主要包括区块链的一些底层组件,包括共识、数据库、p2p网络等。

对于智能合约开发者而言,我们把大部分目光放在FRAME层就可以了。

在这一层中,大家可以实现任何可以用智能合约实现的功能,以及用智能合约办不到的事情。比如:

自定义token system,除了转账,还实现链逻辑层面上的锁仓、自定义释放规则等;

自定义区块间隔时间和手续费:这里,所有原先区块链的出快慢、手续费高的烦恼都可以丢掉,开发者可以自定义出块时长,以及操作手续费多少;

实现链逻辑的整体升级;

实现链的治理;

实现多种账户支持,例如在用户丢失私钥的情况下,如果保证用户的资产不受损失;

....

所有对区块链操作门槛、用户友好、响应速度的抱怨,都可以在runtime层通过巧妙地设计来化解。接下来会详细聊到其中的一些部分。

solidity智能合约开发者,还有一层痛苦就是,需要不停地ctrl+C和ctrl+V。因为solidity是独立于现有编程语言系统的,没有任何可以直接调用的依赖;solidity里自带的library,与其说是library,更像是一段“不配拥有地址的”代码引用。即使有import,前提也是依赖必须自己写。哪怕复制粘贴。

这使得大家在写solidity代码的时候,无法直接找到现有轮子,然后下载引入;而是复制粘贴+改写,某种程度上,分散了dapp开发者的注意力,进一步阻碍了dapp的生态进步。毕竟,除了注意复杂的业务逻辑和防不胜防的安全漏洞之外,还要自己写轮子。

对此dapp开发者有一段心酸地自嘲,“只要能用solidity写出log(n)就足以创建一个项目了”。

Substrate的FRAME,目前parity自己使用Rust语言进行开发,但任何可以编译成WebAssembly的语言都可以用来写FRAME。终于,开发区块链逻辑也可以像正常写程序一样正常进行了。(这里的痛可能只有dapp开发者能体会了)

这里举个例子,比如著名的BTC-Relay项目,实现了BTC -> ETH的跨链,方法是用solidity在智能合约中实现了一个BTC的SPV(Simplified Payment Verification),其中最关键的一步就是验证比特币网络中的交易的有效性。

验证交易有效性在solidity中的实现,也得益于solidity中提供的precompile的hash function和在BTC中使用的一样(SHA256),否则可以想见,这样著名的项目,可能就不会出现。

所以,自由地使用各种现有的基础设施,不仅帮助开发者节省时间和精力,更是鼓励整个应用生态层层推进,向水更深、更未知的方向去探索。如果说之前dapp开发者是带着镣铐在跳舞,那现在substrate就是在帮助他们卸下枷锁,更自由地舞蹈。

ETH是没有延后执行或者自动执行功能的,所有的交易必须手动触发。有一些区块链平台已经实现了延后执行的功能,但是不能精准控制执行的时间和条件。

在Substrate中有一个很棒的自定义功能,on_initialize和on_finalize两个功能会在validator构造区块的开始和结束时自动执行,也就是如果有一些很重要的功能,需要根据是否达到时间点或者条件阈值而触发时,这是一个不错的选择。

不建议大规模使用,因为如果需要消耗太多算力的话,会影响到validator的打包出块5. Off-chain worker在写智能合约时,如果想要获取链下数据比如随机数,第一可以自己手动写进去,这样缺乏公信力;或者也可以去请求oracle服务,贵且数据源选择不多。

Substrate有一个功能叫做off-chain worker, 用来执行一些计算密集并且计算周期长的操作。例如在获取链下数据时,可以把http请求操作写在offchain worker中,可以在runtime中被触发执行,获取链下数据并在请求成功之后把结果返回给链上进行相关计算操作。

这不仅给了dapp开发者带来了很多便利,例如随机数请求;更给区块链开发者带来了全新的想象空间。比如在联盟链领域,之前通常的做法就是往左走区块链架构,往右走传统存储服务,因为区块链天然和链下世界隔离的特点,好像很难把两件事情融合在一起。

有了off-chain worker,是不是可以发现一些新的交叉地带?请大家此处放飞想象力。

说了这么多不同,个人感觉,在开发Substrate runtime时,和开发智能合约在思路上,还是很类似的。

无论写智能合约还是runtime,首先都会进行填空题操作:

以上部分在Solidity中直接按照写代码的方式声明变量和方法就可以了,在Susbtrate中则是在相应的宏内声明,详见上表。

所以对于智能合约开发者来说,所需要的只是学习Rust相关的语法,在逻辑构造环节,无缝迁移。

Substrate runtime相关资料,请参考:Substrate Runtime

当然Substrate也不是全都是好处,最大的缺点,就是上手开发确实比智能合约要难。这里的难不仅体现在Rust语法上,还体现在Substrate runtime中的方法不像智能合约一样可以原子调用。即在智能合约中,如果其中一个逻辑失败,那么整个交易执行失败,所有存储更改全部回滚(不会发生)。但是在Substrate中,即使一笔交易在某一处逻辑判断失败,但是在这之前的执行,还是会发生。所以强烈提醒Substrate runtime开发者在开发runtime时,一定要 Verify first, Write Last。

作为系列开篇,简单地总结一下Substrate和合约开发的异同。在接下来的系列文章中,会从具体的例子出发,希望可以帮助大家在实操层面,感受到Substrate开发的自由。

欢迎任何反馈和问题。

本文经作者王大锤授权,转载自「Substrate 区块链开发」知乎专栏,原文链接:https://zhuanlan.zhihu.com/p/108000025

欢迎学习 Substrate: 

https://substrate.dev/

关注 Substrate 进展:

https://github.com/paritytech/substrate

关注 Polkadot 进展:

https://github.com/paritytech/polkadot

申请 Bootcamp: 

https://bootcamp.web3.foundation/

标签:NBSBSPSUBSTRnbs币官网BSPNetworkSUBAWUAstroDoggy

比特币最新价格热门资讯
BTC:二月海外交易所BTC整体流出 中国交易所余额增量显著

回望2月,比特币经历了一次完整的过山车式行情,价格从月初的9400一路上涨到10400,到月末又回到8500。虽然经历了回落,但二月收盘价格仍明显高于去年11-12月的低点水平.

1900/1/1 0:00:00
FOMO:如何避免比特币交易中常犯的7个错误?

比特币作为一类新型的数字资产交易形式,受到了不少人的追捧,但在实际交易中会有如下7种错误时常发生,作为交易者,我们应该避而远之.

1900/1/1 0:00:00
COIN:毕马威: 自2017年有98亿美元加密货币被盗 机构托管是关键

根据毕马威(KPMG)3月2日与彭博社(Bloomberg)分享的一份报告,机构投资者仍然认为拥有加密货币是一种风险。该会计师事务所估计,自2017年以来,共计有价值98亿多美元的加密货币被盗.

1900/1/1 0:00:00
BTC:金色趋势丨回看历史 BTC绝佳的抄底机会来了吗?

时事新闻金色财经报道,Alternative数据显示,今日恐慌与贪婪指数为17(昨日为33),恐慌程度大幅上升,等级由恐慌转为极度恐慌.

1900/1/1 0:00:00
FILE:以太坊研究员:以太坊 2.0 的设计抉择

编者注:本文为研究员 Aditya Asgaonkar 在 EthCC 大会上的演讲幻灯片,据其自述,是为了向智能合约开发者说明 Eth2 的设计方案.

1900/1/1 0:00:00
TUBE:YouTube的加密货币禁令再度来袭

在又一轮审查中,YouTube从两个独立的加密货币频道中删除了两段视频。加密货币程序设计师伊万(Ivan)在推特?上说,YouTube在3月9日删除了他的一段视频.

1900/1/1 0:00:00