从构建Hyperledger Fabric v1.0到运行first-network的过程
我最近调查了最近很受欢迎的区块链技术,并将其整理成备忘录。
首先
区块链是一种分布式数据库(区块链数据库),它将数据库的交易分成块,并在每个块中嵌入哈希值(以链状连接的形式),以确保数据的一致性和防止篡改。
区块链数据库与分布式文件系统(如Hadoop(HDFS))不同,在点对点网络(P2P网络)中,可以自主管理数据,而无需关注服务器的位置。
请在维基百科等网站上查看有关区块链的详细说明。
代表性的区块链基础构架
有几个开源的区块链基础设施,我将简单介绍一下代表性的区块链基础设施。
Bitcoin Core(旧:Bitcoin-Qt)是一种针对比特币(加密货币)的核心,专注于虚拟货币的支付和交易的区块链。
以太坊与比特币核心专注于加密货币不同,它可以构建通用的区块链。此外,以太坊的智能合约使用类似JavaScript的高级语言Solidity编写。
Hyperledger Fabric是一个基础架构,可用于开发应用程序和解决方案,并通过插拔方式提供共识和成员服务等组件。
Hyperledger Fabric利用容器技术来构建系统的应用逻辑,并实现称为”链码”的智能合约。
Hyperledger Fabric v1.0.0于2017年7月11日发布(最新版本是v1.0.3)。
其他区块链平台(或类似平台)
Corda:由R3联盟主导开发的金融基础设施
Chain Open Standard 1:以企业使用为前提,具有特色功能
mijin:由Tech Bureau(开发方)开发的私有区块链
Orb1:开发了独特的分布式账本技术“Orb DLT”及相关Fintech解决方案
Monax(前身为Eris):衍生自Ethereum的区块链技术
※ 因为akitoh先生的文章《各种区块链技术》比我的写得更详细,对我有所帮助。
关于术语的问题
区块
由区块链数据库中的一系列交易和前一个区块生成的哈希值组成的数据单元。
在区块链技术中,存在分支。分支的链条最终必须收敛于一方。(仅适用于公共类型的区块链)
其中有两种类型的分支,软分叉和硬分叉。
-
- ソフトフォーク:ブロックチェーン自体に変更を行わずアカウントやコントラクトを変更させる。
- ハードフォーク:ブロックチェーン自体の内容を巻き戻し、ある時点から再開させる。
智能合约是指能够以智能方式执行合约(契约)的协议。换句话说,智能合约就是合约的自动化,可以自动执行合约的条件确认和履行。智能合约在通用区块链中使用,以太坊使用Solidity语言,Hyperledger Fabric使用GO语言或Java语言进行编写。
共识算法是一种用于分布式(P2P)网络中存在信息传递延迟情况下获得单一结果的分散一致性形成算法。在区块链中,它被用于验证区块的有效性并将其反映到区块链中。
-
- Proof of Work(PoW)アルゴリズム
-
- 計算量による証明。参加者は確率的に解答が困難な問題を一番早く解くことができた参加者にブロック作成許可と報酬を与える。
-
- Proof of Stake(PoS)アルゴリズム
-
- 仮想通貨ではより多くコインを所有している参加者が優先的にブロック作成許可を得る。
Practical Byzantine Fault Tolelance(PBFT)
ネットワークの全ての参加者をあらかじめ知っておき、管理者から全ての参加者へ要求を送ります。その要求に対する結果を集計し、多数を占めている値を採用する。
コアノードにブロックの生成権限を集中させ、コアノードによる合議制において、トランザクションの承認を行う仕組み
状态数据库是在区块链中使用的数据库。
关于Hyperledger Fabric v1.0的环境
IBM社提供的云服务”IBM Bluemix”上提供了各种界面,可用于构建区块链服务,可以在云上方便地进行构建,价格也适中。
本次将介绍如何在本地环境下载Hyperledger Fabric的Docker容器,并执行Hyperledger Fabric的示例代码的方法。
执行环境 (shí
操作系统:Red Hat Enterprise Linux 7.2
Docker 版本:1.13.1
Docker-Compose 版本:1.16.1
由于不同的平台有不同的安装步骤,因此我们略过Docker的安装步骤。
# 步骤
下载Hyperledger Fabric v1.0.2的docker容器,并执行从示例程序启动Hyperledger Fabric的操作。
1. 下载x509工具和docker容器
2. 部署fabric-samples
3. 启动fabric-samples中的first-network
1. 下载X509工具和Docker容器
下载包含已安装了加密(X509)工具和Hyperledger Fabric的docker容器。
# mkdir /opt/docker
# cd /opt/docker/
# curl -sSL https://goo.gl/Gci9ZX | bash
# chown -R root:root bin
我要检查Docker镜像的状态。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hyperledger/fabric-ca x86_64-1.0.2 7e53be14f804 4 weeks ago 238.3 MB
hyperledger/fabric-ca latest 7e53be14f804 4 weeks ago 238.3 MB
docker.io/hyperledger/fabric-tools x86_64-1.0.2 ba9750b2565d 4 weeks ago 1.328 GB
hyperledger/fabric-tools latest ba9750b2565d 4 weeks ago 1.328 GB
docker.io/hyperledger/fabric-couchdb x86_64-1.0.2 3f922f54bd68 4 weeks ago 1.469 GB
hyperledger/fabric-couchdb latest 3f922f54bd68 4 weeks ago 1.469 GB
hyperledger/fabric-kafka latest 0b4b1d249e65 4 weeks ago 1.286 GB
docker.io/hyperledger/fabric-kafka x86_64-1.0.2 0b4b1d249e65 4 weeks ago 1.286 GB
docker.io/hyperledger/fabric-zookeeper x86_64-1.0.2 1efb063147d3 4 weeks ago 1.301 GB
hyperledger/fabric-zookeeper latest 1efb063147d3 4 weeks ago 1.301 GB
docker.io/hyperledger/fabric-orderer x86_64-1.0.2 6efd17e86e65 4 weeks ago 151.2 MB
hyperledger/fabric-orderer latest 6efd17e86e65 4 weeks ago 151.2 MB
docker.io/hyperledger/fabric-peer x86_64-1.0.2 0e2ed51971c9 4 weeks ago 154.1 MB
hyperledger/fabric-peer latest 0e2ed51971c9 4 weeks ago 154.1 MB
docker.io/hyperledger/fabric-javaenv x86_64-1.0.2 0be45dbd7ff4 4 weeks ago 1.414 GB
hyperledger/fabric-javaenv latest 0be45dbd7ff4 4 weeks ago 1.414 GB
docker.io/hyperledger/fabric-ccenv x86_64-1.0.2 d0f166e1a89e 4 weeks ago 1.282 GB
hyperledger/fabric-ccenv latest d0f166e1a89e 4 weeks ago 1.282 GB
docker.io/hyperledger/fabric-baseos x86_64-0.3.2 bbcbb9da2d83 5 weeks ago 128.8 MB
将下载的X509工具/opt/docker/bin添加到环境变量PATH中。
2. Fabric-Samples的部署
将GitHub上公开的fabric-samples下载下来,并部署到任意目录中。
3. 启动fabric-samples:first-network。
创建fabric-samples:first-network的证书并启动first-network。
# cd [任意のディレクトリ]/fabric-samples-release/first-network/
# ./byfn.sh -m generate
# ./byfn.sh -m up
通过确认以下消息的显示,以确保Hyperledger Fabric已成功启动。
========= All GOOD, BYFN execution completed ===========
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
使用docker ps命令来确认Docker容器的运行状态。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cca60322ac63 dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca865e87959c9a126e86d764c8d01f8346ab "chaincode -peer.addr" 40 seconds ago Up 38 seconds dev-peer1.org2.example.com-mycc-1.0
7399010a74d5 dev-peer0.org1.example.com-mycc-1.0-384f11f484b9302df90b453200cfb25174305fce8f53f4e94d45ee3b6cab0ce9 "chaincode -peer.addr" About a minute ago Up About a minute dev-peer0.org1.example.com-mycc-1.0
c094f9b95262 dev-peer0.org2.example.com-mycc-1.0-15b571b3ce849066b7ec74497da3b27e54e0df1345daff3951b94245ce09c42b "chaincode -peer.addr" About a minute ago Up About a minute dev-peer0.org2.example.com-mycc-1.0
2b79531a74e5 hyperledger/fabric-tools "/bin/bash -c './scri" 2 minutes ago Up 2 minutes cli
eb1c70cf917b hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
fce3b9141d56 hyperledger/fabric-orderer "orderer" 3 minutes ago Up 2 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
4c158b7b078f hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
14e532038e48 hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
a74783dd25e6 hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
执行以下命令来停止fabric-samples:first-network。
# ./byfn.sh -m down
最終了
本次记录了从下载到启动Docker容器的步骤。
每个步骤都在Hyperledger Fabric的官方文档中有详细记录,请参考那里获取更多信息。
Hyperledger Fabric 教程:首个网络