如何做到十五分钟开发一条区块链?
The following article is from PolkaWorld Author Shawn Tabrizi
为什么你开发一条链总是很慢很困难?
很可能是因为你不懂 Substrate!
话不多说,今天这篇文章,我们将会以一种让任何拥有哪怕一点点技术经验的人都能理解的方式,来试着解释 Substrate 区块链框架。
Substrate 是一个用来搭建区块链的可扩展的、模块化的以及开源的框架。但这到底是什么意思呢?Substrate 提供了搭建一个分布式区块链网络所需的全部核心组件:
数据库 网络连接 交易队列 共识
01
「什么是区块链?」
区块
区块链中每个区块都拥有一些能够被用来生成一个对应该区块唯一识别符的数据。这些数据的其中一部分是前一个区块,即 “父块” 的唯一识别符。由于每个区块都有一个指示器连接它的父块,所有的区块都能以一个确定性的方式有序排列。
区块的生成
因为这些特性,区块链系统被普遍用于记录一个共享分类账。该分类账的内容并非通过更改一个现有的区块来更改,而是根据有关如何在块与块之间更改分类账状态的指令说明,通过向区块链中添加新的区块来进行更改。这些指令通常被称为交易。
通常存在与分类账如何进行更改相关的规则,这些规则由一个状态转换功能来定义。对于加密货币系统来说,这些规则非常简单。例如:
区块的最终确认
现在一个新的区块已经被生成了,它可以与其他趋于搭建相同共享分类账的区块共享数据。然而,由于区块链本质上是去中心化的,有时候会出现两个有差异却仍旧有效的区块在链的末端竞争同一个位置的情况。不同的区块的最终确认机制能够被用来决定哪些区块所属的链是规范化的区块链。对于任何现有的区块链,共享分类账的真实最终状态应该只有一个。任何区块链的可替代状态都被称为“分叉”。
分叉是正常的、可预期的,且一般来说不是威胁。区块的最终确认过程旨在帮助非标准化链重新同步。我们将会在本文后半部分继续讲解分叉的内容。
节点
到了现在,你应该能够了解到区块链具有分布式和去中心化的特点。你希望全世界的多样化用户无需第三方中介机构便能够记录这一共享分类账。通过遵循以上的规则,每个该共享分类账的参与者能够运行一个节点。该节点是一个遵循区块链网络规则,并与其它有着相同目的的节点相连接的计算机程序。所有的节点都无需中心化服务。
02
「 Substrate 组件」
现在你有了一个对区块链是什么的更高层级的认识,我们可以开始了解 Substrate 是如何作为一个框架来进行搭建工作的。对于 Substrate 框架的第一个解释是可扩展性。这意味着它对如何设计区块链做了尽可能少的假设,并试图尽可能变得通用化。
数据库
就像我们曾梳理的那样,区块链的核心是它的共享分类账,必须对其进行维护和存储。Substrate 不对区块链中数据的内容或结构做出任何假设。底层的数据库使用简单的键值存储,并在其上实现了改进的 Patricia Merkle tree (trie)。这一特殊的存储结构使我们可以轻松地验证某元素是否在该存储中。这对支持轻量级客户端特别重要,轻量级客户端将依据这些存储证明与区块链网络进行轻量级但去信任的交互。
网络连接
为了去中心化的区块链系统能够通信,需要搭建一个点对点的网络连接协议。Substrate 使用 libp2p 作为模块化的点对点网络连接堆栈。通过这一网络连接层,基于 Substrate 的区块链能够共享交易、区块、节点以及其他系统的关键细节而无需中心化的服务器。
交易序列
共识
区块链网络可以通过不同的方式依据链的变化达成共识。传统意义上,这些共识引擎与其它区块链组件紧密耦合。然而,Substrate 花费了额外的精力设计了一个能够在开发期间轻松更改的共识层。实际上,该设计的最终目的是在链上线后能够进行共识的热交换!Substrate 中内建了多种不同的共识引擎比如传统的工作证明机制(POW),Aura (Authority Round),以及 Polkadot 共识。它的独特性在于将区块的生成过程(BABE)与区块的终结过程(GRANDPA)区分开来。
03
「 Substrate 运行环境」
Substrate Runtime Module Library (SRML)
一个区块链的运行环境可被分为不同的逻辑化组件,它们被称为运行模块。这些模块将控制区块链管理的链上逻辑的某些部分。你可以将这些模块想象成你系统中的“插件”。作为一名 Substrate 开发者,你可以挑选你希望加入链中的模块和功能。
无分叉的运行更新
如果我们遵循 Substrate 模块化生态系统与应用商店的类比,那么我们还必须解决如何更新运行环境的问题。无论是漏洞修复,现有模块的常规改进,甚至是添加区块链的新功能,Substrate已经具备了一流的更改运行环境的能力。
Substrate 已经通过让网络就运行逻辑本身达成共识的方式解决了这个问题!通过使用 Wasm 二进制格式,我们能够将 Substrate 运行代码作为共享分类账的一部分放在区块链上。这意味着任何运行一个节点的人都能够验证他们的节点是否拥有最新的逻辑。如果没有,链上的 Wasm 将会被直接执行!这意味着你的区块链的运行环境将能够在即时网络上实时更新,避免了产生分叉的风险!
04
「 免费和开源 」
Substrate 是一个完全免费且开源的项目。它通过使用 Rust 编程语言来搭建,该语言旨在帮助开发快速和固有安全性的软件。Substrate 的协调和开发通过 Github 和 Riot 等公共社区的超过100多位个人贡献者的帮助来进行。
05
「 总结 」
此时此刻,我希望你已经理解了我们说 Substrate 是一个搭建区块链系统的可扩展的、模块化的以及开源的平台。Substrate 开发过程中的每个时点都以保持通用性为首要前提。因此,Substrate 将作为一个平台被用于构建未来的技术,甚至是还从未被提及的那些。
基于此,我们想要给希望进一步深造和系统学习Substrate开发的同学更多的可能性,所以想要为你推荐一门课程——《Substrate 快速入门与开发实战》!
这门课程是由一块链习联合拥有着多年的全栈开发经验,为Substrate、Polkadot 贡献代码的Polkadot 社区大使陈锡亮老师,历时6个月打造的全球第一份Substrate 开发者的实战指南,期望能帮助更多区块链开发者完成入门。
这门课程第3期将在3周后(12月15日)开班,原价1699元,现在报名早鸟价1499!活动将在本周日截止!加入第三期课程学习,并且按时完成所有作业,即可获得一半学费返还!目前所剩的名额不多啦,若同学有意向报名学习课程,赶快扫描下方图片二维码前去抢座吧!
这门课程中,陈锡亮老师将结合自己多年的研究成果教给你:
共识,终结性和区块投票逻辑。即使你并不是在构建一个密码货币,这也是可取的,这意味着你可以免费获得拜占庭容错共识。因此,即使系统中的部分节点被攻破了,或者转为了恶意节点,系统也能够继续正常工作; 一个高效的、确定性的沙盒WebAssembly runtime(应用的运行环境)。它可用于运行智能合约,甚至运行其它基于Substrate的项目。你不需要使用WebAssembly,当然,你也可以编写自己的虚拟机解释器,但Polkadot团队坚信使用WebAssembly runtime的好处,这样做你就可以利用全球开发社区为其创建的各种工具; 能够在浏览器中无缝运行节点,它可与任何桌面或云节点进行通信;
跨平台的数据库和文件存储抽象,甚至它可以在浏览器中运作;
无缝客户端更新,任何可能影响共识的更新,都是通过将代码编译到WebAssembly,并将其部署为网络上的另一条消息来处理的。不仅如此,你还可以存储自己希望的多版本的共识代码,并且Substrate将处理相关复杂性,确保正在执行的本机代码与当前部署的WebAssembly代码保持一致。 当Polkadot网络正式上线时,你可以立即将自己的项目与Polkadot网络无缝对接。
课程导师是谁?
这门课程你能获得什么?
学完这门课程之后,你将能够系统性的串联起琐碎的知识点,对面向Substrate的开发有一个基本的认识,快速的上手实现完整的可产品化的区块链项目。
同时我会帮你梳理产品中的主要模块,迅速理解在工作中实际项目的代码结构,快速构建产品体系。
我们产出这门课程内容的核心目的只有一个:深入浅出地为你讲解 Substrate 开发核心开发知识和典型应用,继而帮你从源头理解如何创建自定义Substrate链并利用Substrate实战开发出一个可产品化的区块链项目。
课程适合人群
本门课程重在强实操,因此适合以下五类人群:
区块链技术开发者 | 2年以上经验互联网开发者「入 学 必 备 技 能」
系统学习时间过一门编程语言 「入 学 必 备 技 能」
以推荐度排名:Rust, C++, Swift, C, Javascript, Go, Scala, OCaml, Java
对Unix命令行基本了解 「入 学 必 备 技 能」
基本的Web开发知识 (了解)
基本区块链知识(了解)
课程学习周期