相信很多朋友已经在使用Substrate2.0构建自己的runtime模块,但官方Substrate开发者中心还没有2.0版本的教程。
在本文中,我整理总结了如何使用Substrate2.0启动一个区块链网络,并使用你选择的验证者/管理者集合。
你需要:
一个Linux或Mac操作系统下的命令行客户端
Git
你将学习到:
从源代码编译一个Substrate节点
为区块链网络中的验证人生成ed25519密钥对
创建和编辑chainspecjson文件
编译所需工具
Substrate是一个开源区块链开发框架,用来构建你自己的区块链,以及可以用来开发各种各样的去中心化应用程序。
目前Substrate没有提供二进制安装包,因此必须从源代码中编译它,这可能是一个耗时的过程。
Substrate仓库会经常更新,请确保参加此网络的每个节点都有同样版本的Substrate以保证成功。在实践中,类似但不完全相同的版本通常可以正常工作,但是依靠这个通常会让人感到沮丧。
我们将使用master分支的这个commit来获取更多的一致性。
首次操作
首先,我们将通过gitclone下载Substrate代码。目前还没有v2.0的分支。
gitclonehttps://github.com/paritytech/substrate
cdsubstrate
仓库中包含一个名为subkey的工具,我们需要用它来生成和检查密钥对。让我们先编译它。--force选项意味着我们将移除之前安装的版本,重新安装此版本。
cargoinstall--force--pathsubkeysubkey
现在让我们编译我们将要运行的区块链节点。由于Substrate是一个框架,使用它编写自定义的runtime代码。之前写过文章详细涵盖了这方面的内容。
CoinGeek创始人:Kleiman案不会影响技术 无论输赢对BSV来说都是好事:今日有推特网友称,毫无疑问,CSW(Craig Wright)就是中本聪,但很多事情对郁金香信托没有多大意义。Kleiman一案肯定对他不利,如果你的钱都在BSV里,这是在。对此CoinGeek创始人Calvin Ayre回复道,这是错误的,Kleiman一案不会影响这项技术。这个案子是关于中本聪代币的,即使输掉官司也会证明CSW对每个人来说就是中本聪,这对BSV来说是好事。[2020/3/12]
Substrate仓库本身已经有两个随时可以运行的节点环境。
第一个在node目录,它包含了许多功能,可以构建实际可运行的区块链。事实上,它看起来和Polkadot类似,它也是基于Substrate构建的。
第二个是在node-template目录下的最小化runtime代码。我们将在本文中使用节点模板node-template,因为它比较简单,通常是编写自定义runtime的起点。
#切换到node-template目录
cdnode-template
#确保你的rusttoolchain是最新的
./scripts/init.sh
#编译本地节点版本
cargobuild
下次更新
更新或改变Substrate版本时,这个过程类似,但构建速度更快。
cdnode-template
./scripts/init.sh
cargobuild
提示:如果想要node-template安装在可执行文件路径下,你可以在上一步使用cargoinstall代替cargobuild。
Alice和Bob启动区块链
在我们生成自己的密钥并启动一个真正特定的Substrate网络之前,让我们了解下基础知识,首先使用一个预先定义的网络规范,称为local,使用两个预先定义的密钥,称为Alice和Bob。
声音 | 中科院院士:加快融合区块链等技术 有利于助推智慧社会高速发展:12月18日,以“智聚赋能 创新未来”为主题的2019山东省创新驱动发展高峰论坛在山东济南召开。围绕“密码学与区块链技术”主题,中国科学院院士王小云在现场表示,密码是保障网络与信息安全的核心技术和基础支撑,而区块链技术创造性地解决了如何在无许可环境下达成共识的问题。在发展供应链金融方面,区块链可解决多个行业痛点,加速普惠金融。加快融合区块链、人工智能等信息技术,有利于助推智慧社会高速发展。(中新网济南)[2019/12/18]
Alice首先启动
Alice应该从Substrate仓库的根目录运行此命令。
#如果你仍然在node-template/目录
cd..
#启动节点
./target/debug/node-template
--base-path/tmp/alice
--chain=local
--alice
我们了解一下这些命令选项的含义:
--base-path指定一个目录,Substrate用它来存储与此链有关的所有数据。如果目录不存在,将创建它。如果已经存在其它区块链的数据,启动将会报错。这种情况下,要么清除目录,要么选择不同的目录。
--chain=local指定要使用的链规范。有几个预先准备的选项,包括local,dev等,但我们要指定自己的chainspec文件。
--alice指定我们正在使用预定义的Alice密钥作为此节点的验证者。这里是和v1.0的不同之处,v2.0使用这个快捷方式替代v1.0中--nameAlice--validator,同时Alice的会话密钥会被添加到keystore文件中。
chainspec文件和keystore文件,这两个我们将在稍后阶段说明。
当节点启动后,你应该看到类似下面的输出:
2019-09-0407:25:11SubstrateNode
2019-09-0407:25:11version2.0.0-d8589ad-x86_64-macos
现场 | 刘航:区块链是可信的数据技术 必将与大数据融合发展:金色财经现场报道,由中关村科技园区管理委员会、中国信息协会指导,中国信息化发展研究院、中国通信工业协会区块链专委会主办的“区块链&数字经济高峰论坛暨2019第八届中关村大数据日”于12月12日在北京中关村举行。中关村科技园区管理委员会副巡视员刘航发表致辞,他表示本次大会是加强合作,共谋发展的好时机。当今随着人工智能、大数据、物联网、5G,特别是区块链应用的创新,区块链技术快速迈向万物互联,万物上链的规模化阶段,催生了一批新产业新业态新模式。区块链实际上是可信的数据技术,必将与大数据融合发展。中关村率先布局大数据展业,2016年成立中关村区块产业联盟,成立了25家大数据领域的协同创新平台,支持基金超过累计2亿元,大数据企业达到1600余家,产业规模增长达到20%以上,领先全国。[2019/12/12]
2019-09-0407:25:11byAnonymous,2017,2018
2019-09-0407:25:11Chainspecification:LocalTestnet
2019-09-0407:25:11Nodename:Alice
2019-09-0407:25:11Roles:AUTHORITY
2019-09-0407:25:11InitializingGenesisblock/state(state:0x2b2e…9b06,header-hash:0x7d3d…f9e9)
2019-09-0407:25:11LoadingGRANDPAauthoritysetfromgenesisonwhatappearstobefirststartup.
2019-09-0407:25:11Loadedblock-time=BabeConfiguration{slot_duration:10000,c:(1,4),median_required_blocks:1000}secondsfromgenesisonfirst-launch
2019-09-0407:25:11CreatingemptyBABEepochchangesonwhatappearstobefirststartup.
金色晨讯 | 人民日报:区块链不只是下一代互联网技术 更是下一代合作机制和组织形式;BitMEX泄漏的用户邮箱至少有23000个:1.上周8只区块链概念股接交易所监管函 “炒作股价配合股东减持”成问询重点;
2.爱沙尼亚加密交易所DX.Exchange暂时关闭交易所,寻求合并或出售;
3.上海市人民政府参事:区块链第一重要的是落地 要为实体经济服务;
4.人民日报:区块链不只是下一代互联网技术 更是下一代合作机制和组织形式;
5.全球化智库副主席:区块链会对诚信、信任带来一次革命性的变化;
6.Ripple创始人:美国制定明确的指导方针以支持区块链等金融科技解决方案至关重要;
7.雄安新区4大水利防洪项目将于近期实施 建设内容要求以区块链等为基础
8.济南市副市长:基于区块链技术和大数据的新系统助力政府审批流程;;
9.报告:全球Top10的加密基金主要集中在美国;
10.Calibra产品副总裁:无法决定Libra何时发布,这是Libra协会的事;
11.数据:Bakkt比特币月度期货合约交易量近期增长明显;
12.报告:64%的数字证券投资者来自传统风投公司,仅28%来自区块链风投公司;
13.云南省委:积极应用区块链技术,大力发展云南中医药事业;
14.The Block研究总监:BitMEX泄漏的用户邮箱至少有23000个。[2019/11/4]
2019-09-0407:25:11Highestknownblockat#0
2019-09-0407:25:11UsingdefaultprotocolID"sup"becausenoneisconfiguredinthechainspecs
2019-09-0407:25:11Localnodeidentityis:QmbqmYrUEMcPFqnKjBAjZXgZBgpFs9Xsp5zhpbPXtENngE
2019-09-0407:25:16Idle(0peers),best:#0(0x7d3d…f9e9),finalized#0(0x7d3d…f9e9),?0?0
你可以通过节点在命令行中产生的输出了解很多信息。需要注意的几行:
Nodename:Alice显示指定的节点名称,这里是预定义的Alice
声音 | 大连港:将继续开拓区块链技术 深入开展创新工作:金色财经报道,大连港(601880)被提问“除了区块链电子放货平台之外,接下来还有什么区块链项目落地”时表示,目前,大连港利用区块链的去中心化、不可篡改、共享账本等特征所建立的区块链信任机制,使业务信息公开透明公正,借助区块链的数据加密作用强化数据信息安全功能,确保数据的安全性、完整性和一致性,使船、轮驳公司、智慧港口平台各方都能实时、安全、无缝地传递拖轮作业信息,实现全程留痕和全程可追溯,满足轮驳业务的安全性和准确性要求。未来大连港还将继续开拓区块链技术业务实现场景,深入开展创新工作,在全港口领域推行区块链技术应用落地。(上证e互动)[2019/10/30]
Localnodeidentityis:QmbqmYrUEMcPFqnKjBAjZXgZBgpFs9Xsp5zhpbPXtENngE节点ID,Bob节点启动时需要依赖此ID
还有一些选项,大家可以通过./target/debug/node-template--help去了解,比如:
--port30333指定节点将监听的p2p端口。默认是30333,如果Bob的节点在同一物理机上运行,就需要明确指定一个不同的端口。
--ws-external默认情况下,节点监听9944端口上的RPC连接,只有本地主机的连接会被接受,但你可以通过指定它改变此行为。你也可以通过指定--ws-port12345更改端口。
--rpc-cors指定允许访问HTTP和WSRPC服务器的浏览器来源Origins。它是以逗号分隔的来源列表。all值将禁用来源验证。默认是允许localhost,https://polkadot.js.org和https://substrate-ui.parity.io这些来源。此处有个坑!在--dev模式下运行时,默认设置为允许所有来源。
连接UI
有一个很好的图形用户界面,称为PolkadotJsAppsUI,可以用它连接你的节点。之前写过文章详细涵盖了这方面的内容。
点击链接会跳转到该UI的官方页面,非常方便,但与你正在运行的Substrate版本相比可能已经过时。在UI页面过期的情况下,你可以通过从github获取代码在本地运行该应用。一般来说,其仓库中的指令将是你的最佳指南,但大致过程应该是这样的。
#抓取代码
gitclonehttps://github.com/polkadot-js/apps
cdapps
#安装依赖
yarn
#启动项目
yarnrunstart
你会注意到,在命令行和用户界面中,还没有产生任何块。一旦另一个验证者加入网络,将开始生成区块。
Bob加入
现在,Alice节点已经启动并运行,Bob可以通过引导节点来加入网络。他的启动命令类似下面:
./target/debug/node-template
--base-path/tmp/bob
--chain=local
--bob
--bootnodes/ip4//tcp//p2p/
上面已经解释了大多数这些选项,但有几个要注意的地方:
如果这两个节点在同一物理机器上运行,Bob必须指定一个不同的路径--base-path和端口--port。
--bootnodes选项,Bob必须正确指定以下三项:
Alice的IP地址,格式192.168.1.1
Alice的端口,可能为30333
Alice节点ID,从上面日志输出中复制(QmbqmYrUEMcPFqnKjBAjZXgZBgpFs9Xsp5zhpbPXtENngE)
如果所有进展顺利,在几秒之后,节点应该相互连接,开始生成区块。你应该看到类似下面的内容:
Idle(1peers),best:#1(0x9f1b…9b57),finalized#1(0x28be…45e5),?1.7kiB/s?1.4kiB/s
此行显示,Bob有对等节点Alice(1peers),它们产生了一个区块(best:#1(0x9f1b…9b57)),并且区块已被最终确定/敲定(finalized#1(0x28be…45e5))。
这也是v2.0和v1.0的区别之处。v2.0的节点模板中增加引用了Grandpa模块来做最终一致性,而在v1.0的网络中,只有创世区块会被最终敲定,v1.0的节点模板中没有最终一致性模块。
生成密钥
现在我们知道了基本原理和命令行选项,是时候生成我们自己的密钥而不是使用众所周知的Alice和Bob密钥。
每个想要加入这个区块链网络的人,都可以使用我们之前提到的subkey工具,或PolkadotJSAppsUI生成自己的密钥。在本文中,我们将使用RPC调用。该小节是本文更有价值的一部分内容。
生成key
对于大多数想要运行验证节点的用户,可以使用author_rotateKeys这个RPC调用。该RPC调用将生成会话密钥sessionkey,并返回其公钥publickey。命令如下:
curl-H'Content-Type:application/json'--data'{“jsonrpc”:“2.0”,“method”:“author_rotateKeys”,“id”:1}'localhost:9933
导入keystore
如果会话密钥需要匹配固定种子seed,则可以按类型单独设置它们。RPC调用需要密钥种子和密钥类型。此处列出了Substrate中默认支持的类型。命令如下:
curl-H'Content-Type:application/json'--data'{"jsonrpc":"2.0","method":"author_insertKey","params":,"id":1}'localhost:9933
KEY_TYPE-需要用4个字符的类型标识符替换,比如:ed25
SEED-是密钥的种子seed
PUBLIC-给定密钥的公钥
启动你的私有区块链
上一次,我们使用--chain=local这是一个预定义的chainspec,它将Alice和Bob指定为验证人以及许多其他的默认值。本节将介绍如何创建自己的chainspec。
创建chainspec
我们不是从头开始完全编写chainpec,而是对我们之前使用的那个进行一些修改。
首先,我们需要将chainspec导出到json文件。
./target/debug/node-templatebuild-spec--chain=local>customSpec.json
我们刚创建的文件包含几个字段,人们可以通过探索它们来学习很多东西。目前,最长的字段是一个十六进制编码的数据,它是我们runtime的wasm的二进制。
我们感兴趣的部分,是像这样的验证人地址:
"consensus":{
"authorities":[
"5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu",
"5GoNkf6WdbxCFnPdAnYYQyCjAKPJgLNxXwPjwTh6DGg6gN3E",
],
"code":
}
我们需要做的就是将列出的验证人地址更改为我们在上一步中生成的地址。
注意:应该由一个人执行这些步骤,并共享生成的文件给其他验证人。因为从rust->wasm的构建不是“可重现的”,每个人都会得到一个略有不同的wasmblob,如果每个参与者自己生成文件,这将破坏共识。
准备好chainspec后,将其转换为“raw”chainspec。regular和raw之间的区别只是所有字段在"raw"chainspec中编码为了十六进制。
./target/debug/node-templatebuild-spec--chaincustomSpec.json--raw>customSpecRaw.json
最后与网络中的所有其他验证人共享customSpecRaw.json。
启动链
你已完成所有必要的准备工作,现在准备好启动链。此过程非常类似于之前以Alice和Bob的身份启动链。
从干净的目录开始非常重要,如果你打算使用之前的目录,请删除该目录中的所有内容。
第一位参与者启动节点:
./target/debug/node-template
--chain./customSpecRaw.json
--validator
--namelester
以下是我们启动Alice时的一些不同之处。
--validator表示节点将参与出块而不是仅仅同步网络数据。
--name给节点取个可读性高的名字。
后续验证人现在可以像Bob之前一样加入网络,确保使用新的chainspec和密钥。你可以使用网络中任意已有的节点引导,而不仅是之前的节点。
小结
恭喜你!你已启动了自己的区块链!
在本文中,你学会了编译节点模板,生成自己的公私钥对,创建一个自定义的链,使用这些密钥对,并根据自定义chainspec和节点模板启动了一个私有区块链网络。
标签:ALILICSUBRAT代币化基金Realio创始人:花三年时SLICEBitsubishijubilation和celebration
1、对于减半到底来不来,怎么来的问题,尽管矿场作好了最坏的打算,比如比特大陆裁员等。但是大多数人还是倾向于认为减半牛市将至的观点.
1900/1/1 0:00:00亲爱的SilkTrader星客用户:??应ETKS项目方要求,SilkTrader星客将于2020年02月10日10:00下线ETKS交易对.
1900/1/1 0:00:00公告编号2020021003各位关心ZBG的投资者们和项目方:ZBG.com将于HKT2020年2月12日上线ZEC,并开放ZEC/USDT交易对,具体时间如下.
1900/1/1 0:00:00公告编号2020020303各位关心ZBG的投资者们和项目方:?EOS及EOS代币:IQ、MEETONE、GGS因钱包维护现已暂停充提币功能,具体恢复时间将另行公告,给您带来不便深感抱歉.
1900/1/1 0:00:00目前多数人对于挖矿的认识主要来自于比特币挖矿,比特币挖矿属于PoW挖矿,PoW挖矿相对说来比较简单。用户可以自己购买矿机加入,也可以加入矿池。只需简单配置,几乎不用维护.
1900/1/1 0:00:00以太坊联合创始人VitalikButerin提出了一种使用加密货币交易中央银行数字货币的方法。Buterin在推特上提出了一个问题,即央行数字货币交易是否可以通过加密方式证明?也就是说,是否可以.
1900/1/1 0:00:00