如果你关注了Polkadot项目,可能会多次看到“Substrate”这个词。 它是Polkadot项目的重要组成部分,但有关它的信息非常少。 白皮书或黄皮书里找不到, 至少没有专门的介绍“Substrate”。 从较高的层面来看,Substrate是一个可以创建数字货币和其他去中心化系统的框架。 这太笼统了,本文详细说说。

首先,Parity Substrate是独立于Polkadot的项目。 Polkadot是基于Substrate构建的,现在你可以使用Substrate来构建新的区块链项目,而不用等Polkadot开发进度。

那到底什么是Substrate呢? 它是一个框架,类似于Express框架或其他Web应用程序框架,只不过是用于构建分布式或去中心化系统,比如加密货币项目,或消息总线系统。 正如大多数Web应用程序不需要重新实现自己的HTTP一样,我们认为创建新区块链也不需要从头实现网络和共识部分的代码。网络和共识的开发需要密码学专家、网络安全专家、网络工程师、网络运维人员等等,但是其实你应该专注在产品的核心业务逻辑上。 所以如果你使用Substrate,只需要实现非常少量的回调,就能得到这些特性:

·共识机制,不可逆性,出块投票逻辑。 即使你的项目不需要构建加密货币,甚至不是需要区块链的项目,Substrate也可以用于需要拜占庭容错机制的项目,比如网络中部分节点宕机、失效或者被恶意控制,但整个网络仍然可以继续正常工作。

· p2p网络。比如p2p节点的搜索,同步等等。

· 运行时的WebAssembly虚拟机。可以运行智能合约,或者其他基于Substrate开发的项目。 虽然你可以编写自己的虚拟机解释器,但我们坚信使用WebAssembly运行时的好处是,可以让你利用在WebAssembly社区的工作成果;

· 在浏览器中运行一个节点,并与其他节点通信;

· 跨平台的数据库/文件存储系统,还支持浏览器环境;

· 客户端平滑更新。对于可能影响共识的更新,会将代码编译成WebAssembly的执行文件,然后部署时作为网络上的一条消息。 这样的机制提供了这种可能,就是你还可以本地保有多个版本的共识代码,并在本地执行一个与部署环境不同版本的共识,Substrate会去处理本机环境与部署环境的差异。因为WebAssembly有回退机制,所以保证不会有不受控制的硬分叉或其他难以解决的共识导致的问题。

· Polkadot发布时立即接入你的项目。 虽然说使用Substrate构建的项目可以编译出一个独立的客户端程序(就像现有的区块链项目一样),但是把你的项目接入Polkadot就可以共享Polkadot的安全性和链之间的互操作性。 Polkadot本身就是使用Substrate构建的。Polkadot实现了Substrate API,会对Substrate框架中的任何漏洞进行快速反馈,很方便的运行Polkadot测试网,甚至再启动一个Polkadot链作为侧链。 这篇博客比较详细的介绍了Polkadot。https://medium.com/polkadot-network/how-polkadot-tackles-the-biggest-problems-facing-blockchain-innovators-1affc1309b0f

那你需要自己实现哪些东西呢?从本质上讲,Substrate是状态机,可以包括交易等内容。为了使Substrate尽可能通用,它本身没有任何交易。它有我们所谓的“Extrinsic外部交易”,这个“外部交易”是一个二进制BLOB,可以用来存储你想要的任何数据。对于大多数链而言,这些BLOB数据包括了交易,但使用Substrate,你完全可以从网络中去掉货币的概念,然后创建一个分散的Erlang样式的actor模型并发系统,赋予该系统一组受信任的权限,来验证网络行为的正确性。

如果你需要货币和交易,那么可能更简单 , 只要约定一个协议和一个数据库来访问数据。它比其他分布式架构(如微服务)更容易 ,因为运行的代码和数据存储在同一个地方,仅为数据存储提供向后兼容性就可以。对于具有私有交易的链,实现要复杂一些。

下面简要介绍启动并运行一个完整的区块链需要做什么:

1、初始化块的函数。该函数根据前一个块的头创建一个新的块。

块的头包括:1. 块高度; 2.块状态的加密索引,主要用于轻客户端验证块是否正确。 加密索引类似于hash; 3.块中二进制BLOB的加密索引; 4.父块的hash值;

2、块头的自定义数据。轻客户端仅同步块头,更新轻客户端时,注意处理块头中自定义的数据。

3、将交易写入块的函数。 这个函数也更新链的状态(例如,账户余额);

4、生成块的函数。生成一个写好头、写好BLOB数据的块。这个块就可以广播出去了。

5、校验块的函数。 全节点运行这个函数,确认接收到的块在接受之前是有效的。 例如,在资产链中,你可以检查是否有人人花费超过其自身余额的钱。

需要注意的是,块头包含块状态的信息,在生成块的函数里,要把块状态从初始状态设为完成状态,校验块的函数里,要把从完成状态变成校验通过状态。 块状态错了的话可能会导致共识问题。虽然以后可能会用其他方式来处理块状态,但是现在还需要这么做。当前的方式也不会太麻烦,额外写一个校验BLOB数据的工具函数就好了。

此外,你需要自己维护一个公钥集合,用于验证块的签名。块的签名验证与链使用的共识机制无关。 给块签名的私钥所对应的公钥应该放进这个公钥集合, 集合里的公钥可以变化,但每个块都由块创建时选择的集合进行验证。公钥集合里的公钥变化会产生的不同的公钥集合版本,以及由此引出的问题Substrate都会自动处理好。 公钥越少,安全性越低,公钥越多,验证耗费越多,这里要自己衡量。 通过签名验证后,块就被认为是“最终的”(即不可逆的)²。

使用Substrate创建链需要手动的处理POS,不是所有项目都要在链上发行数字货币。比如,测试网的币就没价值,还有消息总线的项目根本不需要数字货币。但是,在Substrate上编写一个库可以很容易地发行数字货币,并自动支持交易和POS共识³。比较推荐的使用Substrate方式,是在Substrate上构建更高级别的库,把Substrate作为项目的模块。随着Substrate的完善,会像编写现代Web应用程序一样轻松构建新链。

现在Substrate还没什么学习资料。 如果不是Polkadot团队的成员,很难学会本文讲的东西。 不过Substrate教程和文档很快就会有了。

补充3点:

你可能希望有向后兼容性,以便外部工具可以轻松地与你的链进行交互,你可以使用protobuf免费获得高效的向后兼容存储。

举一个例子,像比特币或以太坊这样的纯POW链根本不具有终结性,因为可能的验证器集是无限的。

例如,一个简单的POS链可能会在每个区块设置一次验证器,通过选择拥有最多权益的100个账户,并在获得不当行为证明时惩罚它们的权益。

最初于2018年7月9日在paritytech.io上发表,原文 https://medium.com/paritytech/what-is-substrate-29af4231d7e0

Polkadot的Substrate基础链简介相关推荐

  1. Substrate 基础 -- 教程(Tutorials)

    官网 github DOC 面向未来的区块链框架 Substrate 使开发人员能够快速.轻松地构建适合任何用例的未来 证明区块链(future proof blockchains). Substra ...

  2. 蚂蚁区块链投票案例(一)---蚂蚁链简介

    文章目录 摘要 背景 蚂蚁链简介 联盟链(合约体验链) 开放联盟链 开发者测试链 总结 遗留问题 测试环境和生产环境的问题? 摘要 计划用三篇文章,一个月左右的时间来实现一个蚂蚁开放联盟链上的区块链投 ...

  3. 前端基础 - HTML简介及开发环境

    前端基础 - HTML简介及开发环境 HTML简介及开发环境 HTML简介: 英文:Hyper Text Markup Language(超级文本标记语言) 超级文本:普通文本只能显示文字,超级文本, ...

  4. 区块链快速入门(一)——区块链简介

    一.区块链简介 1.分布式记帐技术简介 2009年1月,基于区块链结构的比特币网络悄然问世,其融合了现代密码学和分布式网络技术等重要成果.在比特币出现后的数年里,在纯分布式场景下比特币网络稳定支持了海 ...

  5. Linux中文件描述符1,linux内核中的文件描述符(一)--基础知识简介

    原标题:linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blo ...

  6. VRML语法基础跟简介

    VRML语法基础和简介 VRML简介和基础语法 -------------------------------------------- 一.VRML是什么 VRML是虚拟现实造型语言 (Virtua ...

  7. SpringCloud(1) 架构演进和基础知识简介

    一.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive 1.单体应用:开发速度慢.启动时间长.依赖庞大.等等 2.微服务:易开发.理 ...

  8. 【Java程序设计】Java基础类库简介

    Java基础类库简介 文章目录 Java基础类库简介 一.Java基础类库介绍 二.语言包(java.lang) (1)数据类型包裹类 1.生成数据类型包裹类对象的方法 2.得到基本数据类型数据的方法 ...

  9. C#基础编程——简介及基础语法

    C#基础编程--简介及基础语法 百科介绍 C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言.运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计 ...

最新文章

  1. rsync+inotify
  2. java返回值变为文件_Java 文件操作-File
  3. 表单input中disabled提交后得不到值的解决办法
  4. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题
  5. VIM查找替换归纳总结
  6. Neo4j CQL - (3) -RETURN子句
  7. oppo r17听筒测试软件,【OPPOR17评测】ColorOS变智能 OPPO R17堪称生活小秘书(全文)_OPPO R17(6GB RAM/全网通)_手机评测-中关村在线...
  8. 搭建高可用 RocketMQ 集群
  9. 黑马redis实战-秒杀页面
  10. 2021年阿里笔试题分享——大数相加(附源码)
  11. centos7基于k8s安装部署prometheus(普罗米修斯)
  12. SpringBoot优雅停机的正确姿势!
  13. SparkStreaming任务保持运行,定时任务监控进程
  14. 《scikit-learn机器学习实战》简介
  15. tensorflow使用GPU加速
  16. N76E003AT20筋膜枪单片机设计方案
  17. ASCII 碼: 转义字符,正则表达式,特殊字符,模式匹配
  18. idea完美激活 转载
  19. vue 设置滚动条的位置
  20. 两位数合并成一个四位数的C++代码

热门文章

  1. 阿里云 天池学习python(上)
  2. 电商在线支付学习摘录
  3. python对每一列进行归一化_对python3 一组数值的归一化处理方法详解
  4. 【2020算法练习一】笔试选择题 快手2020校园招聘秋招笔试--算法A试卷
  5. vue-element-admin实现login和logout
  6. JS-inArray检查数组中是否存在某个值
  7. CollapsingToolbarLayout的使用及折叠事件监听
  8. 数据分析实战:python热门音乐分析 附代码+数据 +论文(PCA 主成分分析,sklearn 机器学习,pytorch 神经网络,k-means 聚类,Librosa 音频处理,midi 音序)
  9. 怎样使Pp标签变为可编辑的
  10. linux ubuntu安装GPU