为什么你开发一条链总是很慢很困难?
很可能是因为你不懂 Substrate!
话不多说,今天这篇文章,我们将会以一种让任何拥有哪怕一点点技术经验的人都能理解的方式,来试着解释 Substrate 区块链框架。
Substrate 是一个用来搭建区块链的可扩展的、模块化的以及开源的框架。但这到底是什么意思呢?Substrate 提供了搭建一个分布式区块链网络所需的全部核心组件:
数据库
网络连接
交易队列
共识
虽然这些层级是可扩展的,Substrate 通常假定一般的区块链开发人员不应该关心这些核心组件的具体实现细节。反之,Substrate 的核心理念是使一个区块链的状态转换功能的开发尽可能的灵活和简便。该层级被称为 Substrate 的运行环境。
然而在我们详细了解所有这些细节之前,首先需要达成一个关于 “区块链是什么” 的共识......
01「什么是区块链?」
从最基本的形式来看,区块链是一个简单的数据结构,其中数据的区块联结在一起形成一个有序的链。区块链的具体细节因链的功能性不同而有所差异。然而,总的来说,所有区块链应该拥有一些共同的属性。
区块
区块链中每个区块都拥有一些能够被用来生成一个对应该区块唯一识别符的数据。这些数据的其中一部分是前一个区块,即 “父块” 的唯一识别符。由于每个区块都有一个指示器连接它的父块,所有的区块都能以一个确定性的方式有序排列。
任何单一区块内数据的细微变化将更改它的唯一ID。由于该区块的ID被更改,在其后生成的区块(子区块)将也被更改。下一个子区块也同样,以及接下来的一个,再下一个......
事实上,所有在被改进的原始区块之后生成的区块将必须更改它们的唯一ID以维持整条链的稳定。这意味着通过简单检查链上最后一个区块的唯一识别符便能够轻松验证两条区块链是否拥有完全相同的数据。
学习更多关于区块链的基础内容,请访问演示/视频地址:
https://anders.com/blockchain/
区块的生成
因为这些特性,区块链系统被普遍用于记录一个共享分类账。该分类账的内容并非通过更改一个现有的区块来更改,而是根据有关如何在块与块之间更改分类账状态的指令说明,通过向区块链中添加新的区块来进行更改。这些指令通常被称为交易。
通常存在与分类账如何进行更改相关的规则,这些规则由一个状态转换功能来定义。对于加密货币系统来说,这些规则非常简单。例如:
规则:用户只能花费他们自己的资金。
这些规则也可以更加复杂,甚至允许区块链系统作为一个图灵完备的计算机,同时分类账作为该台计算机的存储。
一旦收集到一组有效的交易,它们将会被放入一个区块内,然后将该区块置于链的末端。这一区块生成的过程允许区块链的潜在状态随时间变化。
区块的最终确认
现在一个新的区块已经被生成了,它可以与其他趋于搭建相同共享分类账的区块共享数据。然而,由于区块链本质上是去中心化的,有时候会出现两个有差异却仍旧有效的区块在链的末端竞争同一个位置的情况。
不同的区块的最终确认机制能够被用来决定哪些区块所属的链是规范化的区块链。对于任何现有的区块链,共享分类账的真实最终状态应该只有一个。任何区块链的可替代状态都被称为“分叉”。
分叉是正常的、可预期的,且一般来说不是威胁。区块的最终确认过程旨在帮助非标准化链重新同步。我们将会在本文后半部分继续讲解分叉的内容。
节点
到了现在,你应该能够了解到区块链具有分布式和去中心化的特点。你希望全世界的多样化用户无需第三方中介机构便能够记录这一共享分类账。通过遵循以上的规则,每个该共享分类账的参与者能够运行一个节点。
该节点是一个遵循区块链网络规则,并与其它有着相同目的的节点相连接的计算机程序。所有的节点都无需中心化服务。
区块链系统通常是 “开源” 的系统,这意味着任何人都能够参与。为了阻止恶意行为者,激励良好行为并惩罚不良行为的机制被建立。伴随着以上这些机制的就位,一个区块链系统将成为一台不可阻挡的机器。
02「 Substrate 组件」
现在你有了一个对区块链是什么的更高层级的认识,我们可以开始了解 Substrate 是如何作为一个框架来进行搭建工作的。对于 Substrate 框架的第一个解释是可扩展性。这意味着它对如何设计区块链做了尽可能少的假设,并试图尽可能变得通用化。
数据库
就像我们曾梳理的那样,区块链的核心是它的共享分类账,必须对其进行维护和存储。Substrate 不对区块链中数据的内容或结构做出任何假设。底层的数据库使用简单的键值存储,并在其上实现了改进的 Patricia Merkle tree (trie)。
这一特殊的存储结构使我们可以轻松地验证某元素是否在该存储中。这对支持轻量级客户端特别重要,轻量级客户端将依据这些存储证明与区块链网络进行轻量级但去信任的交互。
网络连接
为了去中心化的区块链系统能够通信,需要搭建一个点对点的网络连接协议。Substrate 使用 libp2p 作为模块化的点对点网络连接堆栈。通过这一网络连接层,基于 Substrate 的区块链能够共享交易、区块、节点以及其他系统的关键细节而无需中心化的服务器。
遵循 Substrate 的理念,libp2p 的独特性在于它对任何特定的网络协议不带任何假设。因此,你能够在基于 Substrate 的区块链上实现及使用不同的协议。
交易序列
如上所述,交易被收集、形成区块,并最终定义了区块链状态的变化。然而,这些交易的顺序会对分类账的最终状态造成影响。Substrate 使你能够全权控制网络中交易的独立性和队列管理。
Substrate 只假定一笔交易具有权重和一组用于创建从属关系图表的先决条件标签。这些从属关系图表在最简单的情况下是线性的,但它们也可能变得更复杂。Substrate 将自动为你处理这些复杂的从属关系。
共识
区块链网络可以通过不同的方式依据链的变化达成共识。传统意义上,这些共识引擎与其它区块链组件紧密耦合。然而,Substrate 花费了额外的精力设计了一个能够在开发期间轻松更改的共识层。
实际上,该设计的最终目的是在链上线后能够进行共识的热交换!Substrate 中内建了多种不同的共识引擎比如传统的工作证明机制(POW),Aura (Authority Round),以及 Polkadot 共识。它的独特性在于将区块的生成过程(BABE)与区块的终结过程(GRANDPA)区分开来。
03「 Substrate 运行环境」
目前为止,我们已经讲解了所有 Substrate 能够提供的所有核心区块链组件。正如你曾读到的那样,Substrate 已经为保持通用性和可扩展性竭尽所能。
然而,可以说 Substrate 最能体现其定制化特点的部分是它的模块化运行环境。运行环境指的是早先提到的 Substrate 的状态转换功能。
Substrate 相信一般的区块链开发人员不需要对以上列出的区块链组件关心得太多。只要这些组件久经沙场且可以投入生产,实现过程的细节常常就没那么重要了。然而,决定一个网络中的内容是否有效的区块链的核心逻辑对于任何链来说通常都是相当重要的。
因此,Substrate 的核心理念是使得区块链运行的开发尽可能的灵活和简易。
Substrate Runtime Module Library (SRML)
一个区块链的运行环境可被分为不同的逻辑化组件,它们被称为运行模块。这些模块将控制区块链管理的链上逻辑的某些部分。你可以将这些模块想象成你系统中的“插件”。作为一名 Substrate 开发者,你可以挑选你希望加入链中的模块和功能。
比如,有个叫做“余额”的模块管理着链上的货币。同时也有一组模块比如“收集”、“民主”以及“选举”处理着链上的决策和治理过程。甚至还有一个被称为“合约”的模块能够将任何基于 Substrate 的链转到一个智能合约平台中。当你在 Substrate 上搭建时,将自动为你提供这些模块。
然而,你并不局限于使用 Substrate 提供的模块。事实上,开发者们可以轻松地搭建他们自己的运行模块,将其作为独立的逻辑化组件,甚至能够与其他运行模块直接进行交互以构建更复杂的逻辑。
我们相信长此以往,Substrate 中的模块系统将会变得更像一个“应用商店”,用户在其中可以轻松的挑选想囊括的功能,并以入门级的技术知识部署分布式区块链网络!
无分叉的运行更新
如果我们遵循 Substrate 模块化生态系统与应用商店的类比,那么我们还必须解决如何更新运行环境的问题。无论是漏洞修复,现有模块的常规改进,甚至是添加区块链的新功能,Substrate已经具备了一流的更改运行环境的能力。
然而,链上状态转换功能的更改也会影响网络的共识。如果运行在网络中的某个节点具有一个版本的运行逻辑,同时另一个节点拥有另一个不同的版本的运行逻辑,那么这两个节点将无法达成共识。
它们将从根本上否决分布账的真实状态,导致产生我们之前定义过的分叉的结果。这些不可协调的分叉会降低网络的安全性从而造成很坏的影响,导致只有一部分的节点会正确地生成和验证新区块。
Substrate 已经通过让网络就运行逻辑本身达成共识的方式解决了这个问题!通过使用 Wasm 二进制格式,我们能够将 Substrate 运行代码作为共享分类账的一部分放在区块链上。
这意味着任何运行一个节点的人都能够验证他们的节点是否拥有最新的逻辑。如果没有,链上的 Wasm 将会被直接执行!这意味着你的区块链的运行环境将能够在即时网络上实时更新,避免了产生分叉的风险!
Substrate 秉承着灵活性的精神,使你根本无需手动启动此功能。如果你想要禁用链上升级,你也可以做到。事实上,Substrate 将预先为你提供你的链所需的全部工具。
04「 免费和开源 」
Substrate 是一个完全免费且开源的项目。它通过使用 Rust 编程语言来搭建,该语言旨在帮助开发快速和固有安全性的软件。Substrate 的协调和开发通过 Github 和 Riot 等公共社区的超过100多位个人贡献者的帮助来进行。
Substrate 是 Polkadot 中孵化出的项目,Polkadot 是一个拥有许多可互操作区块链的更广阔的世界愿景。Substrate 除了能够帮助大多数成熟的链连接到 Polkadot 上之外,还赋予了生产级区块链项目连接到该网络的能力。
当 Polkadot 主网启动,你将因支持你的区块链的技术与为其他多种生产级区块链赋能的技术一致而感到安心。
Substrate 旨在成为区块链革新者的无可反驳的最佳平台和任何考虑搭建一个区块链网络的人的必然选择。
05「 总结 」
此时此刻,我希望你已经理解了我们说 Substrate 是一个搭建区块链系统的可扩展的、模块化的以及开源的平台。Substrate 开发过程中的每个时点都以保持通用性为首要前提。因此,Substrate 将作为一个平台被用于构建未来的技术,甚至是还从未被提及的那些。
基于此,我们想要给希望进一步深造和系统学习Substrate开发的同学更多的可能性,所以想要为你推荐一门课程——《Substrate 快速入门与开发实战》!
这门课程是由一块链习联合拥有着多年的全栈开发经验,为Substrate、Polkadot 贡献代码的Polkadot 社区大使陈锡亮老师,历时6个月打造的全球第一份Substrate 开发者的实战指南,期望能帮助更多区块链开发者完成入门。
这门课程第3期将在3周后(12月15日)开班,只需1699元,加入第三期课程学习,并且按时完成所有作业,即可获得一半学费返还!目前所剩的名额不多啦,若同学有意向报名学习课程,赶快扫描下方图片二维码前去抢座吧!
如果你还想再了解下这门课程,那不妨再为你介绍几个关键信息。
1、这门课程具体讲什么?
这门课程中,陈锡亮老师将结合自己多年的研究成果教给你:
共识,终结性和区块投票逻辑。即使你并不是在构建一个密码货币,这也是可取的,这意味着你可以免费获得拜占庭容错共识。因此,即使系统中的部分节点被攻破了,或者转为了恶意节点,系统也能够继续正常工作;
一个高效的、确定性的沙盒WebAssembly runtime(应用的运行环境)。它可用于运行智能合约,甚至运行其它基于Substrate的项目。你不需要使用WebAssembly,当然,你也可以编写自己的虚拟机解释器,但Polkadot团队坚信使用WebAssembly runtime的好处,这样做你就可以利用全球开发社区为其创建的各种工具;
能够在浏览器中无缝运行节点,它可与任何桌面或云节点进行通信;
跨平台的数据库和文件存储抽象,甚至它可以在浏览器中运作;
无缝客户端更新,任何可能影响共识的更新,都是通过将代码编译到WebAssembly,并将其部署为网络上的另一条消息来处理的。不仅如此,你还可以存储自己希望的多版本的共识代码,并且Substrate将处理相关复杂性,确保正在执行的本机代码与当前部署的WebAssembly代码保持一致。
当Polkadot网络正式上线时,你可以立即将自己的项目与Polkadot网络无缝对接。
除此之外,更为重要的是:在每一章节的课程学习之后,我们都有给到你相应的练习,帮你内化知识。如下:
学以致用,才是最好的学习方式,对于编程来说,更是如此。
2、课程导师是谁?
陈锡亮,Laminar CTO,Polkadot 社区大使,Substrate & Polkadot 代码贡献者。
陈锡亮老师拥有着多年的全栈开发经验,同时也是Substrate、Polkadot的代码贡献者以及Polkadot的社区大使,曾负责参与其项目的设计与开发。拥有丰富的Substrate使用经验,非常理解开发者即将要面对的问题及需求。
在这门课程里,他将结合自己多年的研究成果,深入浅出地为你讲解Substrate开发核心开发知识和典型应用,继而帮你从源头理解如何创建自定义Substrate链并利用Substrate实战开发出一个可产品化的区块链项目。
3、这门课程你能获得什么?
《substrate快速入门与开发实战》视频课将基于最新的技术,一切从实践出发。
开始学习之前,需要你最好已经掌握 Rust 的基础语法,会编写一些简单的Rust程序,整个课程老师会带你从 0 开始,完整地搭建一个包含全部常用功能的Substrate开发产品 。
在这个过程中,不但会和你交流最基础的系统级实现,还会帮助你从工程的角度理解流行的开源项目解决的问题、或者在实际工程中遇到的关键技术选型,使我们从工程的角度,重新理解 Substrate 整个体系的开发。
我们首先会让从 Substrate、Polkadot 生态圈讲起,让你了解及Substrate 底层代码实现,学会如何利用Substrate 开发一个可产品化的区块链项目。
之后会带你了解 并且掌握Polkadot.js SDK 使用与前端项目开发的能力,掌握如何设计与完善区块链项目的相关技巧,可以让你对整个Substrate开发的生态有全面的了解。
最后,你还可以通过这门课程结识全球第一批对 Substrate 技术充满热情对工程师。
学完这门课程之后,你将能够系统性的串联起琐碎的知识点,对面向Substrate的开发有一个基本的认识,快速的上手实现完整的可产品化的区块链项目。
同时我会帮你梳理产品中的主要模块,迅速理解在工作中实际项目的代码结构,快速构建产品体系。
我们产出这门课程内容的核心目的只有一个:深入浅出地为你讲解 Substrate 开发核心开发知识和典型应用,继而帮你从源头理解如何创建自定义Substrate链并利用Substrate实战开发出一个可产品化的区块链项目。
4、课程适合人群
本门课程重在强实操,因此适合以下五类人群:
区块链技术开发者 | 2年以上经验互联网开发者「入 学 必 备 技 能」
系统学习时间过一门编程语言 「入 学 必 备 技 能」
以推荐度排名:Rust, C++, Swift, C, Javascript, Go, Scala, OCaml, Java
对Unix命令行基本了解 「入 学 必 备 技 能」
基本的Web开发知识 (了解)
基本区块链知识(了解)
5、学习方式
一如既往,采用一块链习“魔鬼训练营”方式。
会以班级的形式来进行管理,全程讲师带班、助教批改作业以及每周一次班会点评,严防偷懒,同时也可以和同学间产生更多互动+讨论,确保你更高效的完成学习!
你要知道,这门仅售价1699元的课程,也配有“魔鬼训练营”意味着什么。
那就等于史上·无敌·超级·真·优惠。
6、课程学习周期
12月5日-1月19日,正常学习周期在5周左右,12个月课程有效期内可无限重复观看。
好啦,关于课程的介绍就到此为止了。如果你看到了这里,可能就要抓点紧了,毕竟第3期课程也就开放50个名额,现在也许名额已然不多了!赶快扫描下方图片二维码,前去报名吧!