原作:Christine Avanessians | Senior Program Manager
翻译:David Yan | China DX TE
概述
微软Azure云平台在Azure Quick Start Templates 上推出了以太坊联盟区块链网络部署模板,从根本上简化了在Azure上部署联盟区块链网络的工作流程。我们可以使用该模板,通过Azure Portal或者命令行的模式快速部署配置一个私有以太坊区块链。尽管目前在公有链上有很多有价值的应用场景,但我们期望在一些企业场景中,你会希望使用以太坊平台搭建自己的联盟链网络。
读过这篇文章后,你会了解:
- 获得区块链、以太坊以及联盟链网络架构的知识
- 学习使用公开的ARM模板去部署配置一个多节点以太坊联盟链
关于区块链
对于区块链新手来说,使用Azure云平台快速搭建区块链能够帮助你更好了解区块链技术。区块链是比特币的基础技术,但是它不仅仅是一种虚拟货币,它是将现有的数据库、分布式系统、加密等技术结合,为多方计算提供安全保证,具有不变性、可验证、易审查以及抗攻击的特性。
这篇文章不会涉及过多以太坊协议、架构、公共网络等细节内容,但是简单介绍一个应用和网络架构可以帮助我们更好理解部署层面的选择。最后,目前没有一种固定的网络架构,需要结合不同情况和阶段来选择。
数据库和应用交互相似,去中心化应用会和以太坊区块链进行交互,执行一些逻辑。一个私有链网络包含一个p2p的去中心化节点网络。这些节点都保留一份数据拷贝(比如分布式账本),通过运行虚机来支持对账本的计算操作,并保持一致性。智能合约机制允许在网络上进行这些复杂的计算,就好比传统数据库中存储的程序。
节点分为矿工和交易两种类型。交易节点保留着分布式账本的一个拷贝,用来提交或者查询网络上的交易情况。这些应用程序使用以太坊Web3 JavaScript对象来和这些节点交互,在应用内执行或者存储重要的交易数据。通常公有链上的一个交易节点备份一个钱包。矿工节点处理提交交易到底层分布式数据库(如账本),保持数据一致性。
让我们开始吧~
由于我们部署区块链需要一些虚机和标准存储账号的支持,所以我们需要有一个Azure订阅。大多数订阅类型默认支持小规模部署,无需增加容量。
然后我们就可以登录Azure Quick Start Templates ,搜索“Ethereum Consortium Blockchain Network”。
选择对应的模板链接,进入模板页。然后点击“Deploy to Azure”按钮,网页会跳转到Azure门户网站。注意,如果还没有登录Azure账号,这时会跳转到登录页面进行登录操作。
登陆之后,会跳转到下面的页面。模板部分会根据azuredeploy.json ARM模板文件自动填充。
如果你想要深入了解模板参数或者修改模板,可以选择模板标签,在Azure门户中打开编辑器进行编辑操作。如果想要更为深入了解内容,可以选择点击“Browse on Github”,微软已经将该模板在github开源。
在参数方面,我们还需要设置以下几个参数:
参数含义如下:
参数名称
| 描述
| 取值范围
| 默认值
| Name Prefix (namePrefix)
| 字符串类型,是部署资源的名称。
| 最多9个字符
| NA
| Administrator User Name (adminUserName)
| 即是部署虚机的管理员账户名称,也是创建以太坊账号的名称。
| | gethadmin
| Administrator User Password (adminUserPassword)
| 部署虚机时对应用户名的密码,默认所有虚机密码一致,部署之后可以分别修改密码。
| | NA
| Ethereum Account Password (ethereumAccountPsswd)
| 以太坊账户密码,这个账户是创世块,并且内部有1,000,000,000,000 以太币
| | NA
| Private Key For Prefunded Account (privateKeyForPrefundedAccount)
| 用来创建以太坊账户的私钥。可以使用多种方法生成公钥/私钥对。Azure门户会提示使用mytherwallet.com网站生成私钥(建议使用chrome打开)
| | NA
| Ethereum Network ID (ethereumNetworkID)
| 以太坊联盟链的网络ID。每一个以太坊网络都有自己的ID,ID为1代表公有链。尽管我们已经对矿工节点严格限制其网络权限,但是我们仍然建议使用一个大的ID,以免发生冲突。
| | 10101010
| Number of Consortium Members (numConsortiumMembers)
| 网络中的成员数。每一个联盟成员会有一个子网络,并包含一个矿工节点(虚机),这些都存储在一个存储账号中作为初始值。
| 2-5
| 2
| Number of Additional Mining Nodes per Member (numAdditionalMiningNodesPerMember)
| 每一个子网中出单独矿工节点外,其余矿工节点的数量。
总的矿工节点数= numConsortiumMembers + numConsortiumMembers * numAdditionalMiningNodesPerMember
| 1-19
| 1
| Mining Node VM Size (mnNodeVMSize)
| 矿工节点虚机使用的大小
| Standard A, Standard D, Standard D-v2,
Standard F series
| Standard A1
| Number of Transactional Nodes ( numTransactionalNodes)
| 网络中部署的交易节点数量
| 1-5
| 1
| Transaction Node VM Size (txNodeVMSize)
| 交易节点虚机使用的大小
| Standard A, Standard D, Standard D-v2,
Standard F series
| Standard A1
| 填写好这些参数后,还要设置一个资源组和部署地域。我们建议使用一个新的资源组,便于管理和删除。最后,通读一下条文,点击创建。根据部署的虚机数量不同,部署时间会从几分钟到十几分钟不等。
以太坊联盟链在Azure上的架构
尽管目前对于联盟链还没有一个权威的架构,这个模板提供一个更快上手的架构示例。从基础上来说,这个网络包含一些交易节点,应用程序可以利用这些节点进行交易,同时每个联盟成员包含一些矿工节点,来记录交易。所有的节点都在同一个虚拟网络中,但是每一个联盟成员的子网络可以通过应用程序网关和个人虚拟网络进行沟通。网络结构图如下:
矿工节点
每一个联盟成员都会分配一个独立的子网络,其中包含一个或者多个矿工节点,这些节点保存在一个存储账号中。子网中第一个默认的虚机被配置成启动节点,用来支持网络中节点的动态发现。矿工节点之间互相沟通,保持底层分布式账本的一致性。你的应用程序不必担心和这些几点的通信。我们专注于私有链,所以这些节点和公有链是完全隔绝的,这保证了第二级别的防护。尽管每个成员的虚机在不同的子网中,私有节点仍然可以通过以太坊协议和其他节点连接沟通。
所有节点都已经安装最新稳定版的Geth客户端软件,并被配置成矿工节点。所有节点都有一个以太坊账户(以太坊地址和键值对),该账户需要使用密码进入。公钥/私钥对存储在每个Geth节点上。当矿工节点工作时,他们会收集计算增加到该账户的钱。
交易节点
所有的联盟成员共享一套负载均衡的交易节点。这些节点可以再虚拟网络外部进行连接,所以应用程序可以使用这些节点来提交交易或者在区块链网络中执行智能合约。所有的节点都有最新稳定版的Geth客户端软件,并保存一套完整的分布式账本的拷贝数据。
我们明确地将矿工节点和交易节点分离,以免二者争抢资源。我们同样对交易节点进行负载均衡保证高可用性。
以太坊配置
除了基础设置和配置以外,区块链网络也自动创建。创世块配置有设置的以太坊网络ID,一个合适的挖矿难度以及一个预先配置好的账户。挖矿难度随着矿工节点的数量而变化,以保证即使在最开始其挖矿时间也保证很短。预先设置好的账户包含一万亿的以太币,来保证联盟链有足够的gas来处理成千上万的交易数据。而且矿工节点使用这个账户可以保证矿工挣得钱返回账户维持平衡。
管理员页面
一旦部署成功,所有的资源都已经配置完成,你就可以去管理员页面查看你的区块链网络。
管理员网站的链接就是负载均衡器的DNS名称。
通过查看以太坊节点状态,可以对区块链的拓扑结构有一个更高级别的认识。这个页面包含所有节点的主机名和参与者ID。同时也显示出peer count(网络中矿工节点数目的最小值,最大为25,一般出现在公有链中。)
创建以太坊账户
创建以太坊账户有很多种方法,这里介绍一种方法,可以使用一种Chrome插件MetaMask,连接多种以太坊网络,无论是公有链、测试还是自定义的。使用方法官网有介绍,这里就不赘述了。
安装成功之后,打开MetaMask,创建一个库。新创建的库会默认连接到测试网络。你需要将其连接到部署的私有联盟链中。复制以太坊RPC端点(接口8545)的链接,填写到MetaMask的custom RPC中。
可以添加多个账户
初始化初始以太币分配
在管理员页面,你可以创建一个交易,将预置账户的以太币发送到指定账户中。
再MetaMask钱包中,选中以太坊账户,复制其地址,然后进入管理员页面。将复制的地址填写到“Address of Recipient”中,点击提交并等待交易被写入区块中。
当交易被写入被挖掘到的区块中,MetaMask中的账户就会增加1000以太币。
账户之间以太币的传递
现在你已经可以在你自己的私有联盟链中执行交易了。最简单的交易就是将以太币从一个账户转移到另一个账户。
注意,每次交易都需要交纳一笔挖矿的费用。
下一步
现在你可以在你的私有联盟链区块链网络中专注于应用程序和智能合约的开发了。
Coding 快乐!!
资料
1、 原文:https://gallery.technet.microsoft.com/Bletchley-Ethereum-be397219
2、 GitHub开源代码:https://github.com/Azure/azure-quickstart-templates/tree/master/ethereum-consortium-blockchain-network
3、 Project Bletchley (BlockChain as a Service, BaaS):https://azure.microsoft.com/en-us/blog/project-bletchley-blockchain-infrastructure-made-easy/ |