- Date
04/03 2017
- FabricGithub
- FabricVersion
v1.0.0-alpha
Hyperledger Fabric 项目是 一个分布式中心化区块链。
- Fabric CA(Certificate Authority)
它的作用在于为 整个网络的通信节点颁发 数字证书,使整个网络的通信运行在一个安全的加密环境中。该功能并不是必须的(如果你不需要 TLS 加密)
- Fabric Orderer
为区块链写入操作提供时序保证(即分布式开发里面的数据竞态问题), 具体实现可以是共识算法(SBFT)或者是分布式的消息订阅消费系统(如 Kafka )
- Fabric Peer
区块链节点当中的 终端用户或程序(User or Application) , 以 背书(EndorserPeer) 角色或 数据写入(CommitterPeer) 角色运行
- Fabric Chaintool
chaintool 是 ChainCode (指智能合约或链码) 的编译器,采用 Clojure 语言编写,所以你得需要 一个 Java 环境 。。。。。
- Fabric Configtxgen
这是一个数字证书生成 工具,当然你也可以使用 fabric-ca-server 来生成 证书。
可执行文件列表:
- peer
github.com/hyperledger/fabric/peer/main.go
- orderer
github.com/hyperledger/fabric/orderer/main.go
- ca-server
github.com/hyperledger/fabric-ca/cmd/fabric-ca-server/main.go
- ca-client
github.com/hyperledger/fabric-ca/cmd/fabric-ca-client/main.go
- configtxgen
github.com/hyperledger/fabric/common/configtx/tool/configtxgen/main.go
- cert-gen
github.com/hyperledger/fabric/core/comm/testdata/certs/generate.go
- chaintool
Node:
一个 Orderer 和 若干个 Peer 组成 一个 节点(Node)
Orderer
| | | |
Peer0 Peer1 Peer2 PeerN
Network:
若干个 节点(Node) 组成 区块链网络.
水平网络:
Node0 <--> Node1 <--> Node2 <--> NodeN
垂直网络
Node0 <--> Node1 <--> Node2 <--> NodeN
| |
Node1-1 (Sub Node) Node2-1(Sub Node)
在 以太坊 区块链架构当中, Chain 指 一个独立的 区块链。比如代号 Frontier 和 Homestead 。 以太坊 并没有 Channel 的概念。
在 Fabric 架构里面, Channel 概念和 Chain 概念比较模糊(体现在代码层次上) , 当然从文档描述上来看, Channel 指 一条 Chain 里面的多个分区。即 多个 Channel 共用一条 Chain 。
值得一提的是, 在 Fabric 当前的存储结构中,并没有把该概念清晰的体现出来。
Fabric 存储结构:
/var/hyperledger/production/ledgersData/chains/chains/
channel-1/
channel-2/
实际上应该是这样:
/var/hyperledger/production/ledgersData/chains/chains/
chain-1/
channel-1/
channel-2/
该概念目前在代码当中的定位并不清晰 ,比如 配置层面 (Config) , Fabric 也把 Chain 和 Channel 一直在混用:
peer channel create --chain testchain
# 正确的应该是: peer channel create --chain Homestead --channel testchannel
以下测试数据来源 Hyperledger Fabric 项目组官方报告。
共识算法测试:
- [通过] SOLO
- [通过] Kafka (基于 分布式消息订阅消费系统 Apache Kafka 实现的 所谓 "共识" )
- [未测试] SBFT
Note
经过测试, v1.0.0-alpha 版本的 SBFT 共识算法无法通过。
详细测试结果及场景: v1.0 Release Testing
官方 BUG 汇报收集地址 : fab-issues
已复现严重(并且至今未修复):
- [严重] [FAB-2951] , Instantiate Chaincode Fails (GRPC: Timed OUT)
- [严重] [FAB-2922] , Chaincode names and version with periods fail query.
Note
这些 BUG 意味着 我们的 代码无法正常 运行下去。
未复现 BUG:
- [严重] [FAB-2955] , back to register enroll unroll seem to fail - timing related.
- [严重] [FAB-2957] , After upgrading the chaincode to newer version, unable to query the older version of chaincode
- [严重] [FAB-2942] , Enabling TLS causes problems for peer who isn't a gossip leader
- [严重] [FAB-2865] , Modifying chaincode and compiling causes a failure on cli install command
Note
这些 BUG 意味着,我们可以通过 预设的 DEMO 测试,但在正常操作可能会出现的问题(比如升级 ChainCode, GetChainCode 等 )
二进制目标文件:
bin/peer
bin/orderer
bin/ca-server
bin/ca-client
bin/configtxgen
bin/certgen
bin/chaintool
前置依赖:
# java >= 8
brew install caskroom/cask/java
# Golang >= 1.8
brew install golang@1.8
Makefile:
PROJECT_NAME = fabric
BASE_VERSION = v1.0.0-alpha
export GOPATH = $(PWD)
ifeq ($(shell uname),Darwin)
export GOROOT = /usr/local/Cellar/go/1.8/libexec
endif
ifeq ($(shell uname),Linux)
export GOROOT = /usr/local/go
endif
# Go version >= 1.8
GO = $(GOROOT)/bin/go
export ORDERER_CFG_PATH = $(PWD)/config/orderer
$(GOPATH)/src/github.com/hyperledger/fabric:
$(GO) get github.com/hyperledger/fabric;
cd $(GOPATH)/src/github.com/hyperledger/fabric;
git checkout $(BASE_VERSION);
$(GOPATH)/src/github.com/hyperledger/fabric-ca:
$(GO) get github.com/hyperledger/fabric-ca;
@cd $(GOPATH)/src/github.com/hyperledger/fabric-ca;
git checkout $(BASE_VERSION);
$(GOPATH)/src/github.com/hyperledger/fabric/common/configtx/tool/configtx/configtxgen/main.go:
$(GO) get github.com/hyperledger/fabric;
@cd $(GOPATH)/src/github.com/hyperledger/fabric;
git checkout $(BASE_VERSION);
$(GOPATH)/src/github.com/hyperledger/fabric-chaintool:
$(GO) get github.com/hyperledger/fabric-chaintool;
@cd $(GOPATH)/src/github.com/hyperledger/fabric-chaintool;
git checkout v0.10.3;
default: all
all: peer orderer ca-server ca-client configtxgen certgen
peer: bin/peer
orderer: bin/orderer
ca-server: bin/ca-server
ca-client: bin/ca-client
configtxgen: bin/configtxgen
certgen: bin/certgen
chaintool: bin/chaintool
bin/peer: $(GOPATH)/src/github.com/hyperledger/fabric
echo 'GOPATH: $(GOPATH) ';
$(GO) build -o bin/peer github.com/hyperledger/fabric/peer;
bin/orderer: $(GOPATH)/src/github.com/hyperledger/fabric
echo 'GOPATH: $(GOPATH) ';
$(GO) build -o bin/orderer github.com/hyperledger/fabric/orderer;
bin/ca-server: $(GOPATH)/src/github.com/hyperledger/fabric-ca
echo 'GOPATH: $(GOPATH) ';
$(GO) build -o bin/ca-server github.com/hyperledger/fabric-ca/cmd/fabric-ca-server;
bin/ca-client: $(GOPATH)/src/github.com/hyperledger/fabric-ca
echo 'GOPATH: $(GOPATH) ';
$(GO) build -o bin/ca-client github.com/hyperledger/fabric-ca/cmd/fabric-ca-client;
bin/configtxgen: $(GOPATH)/src/github.com/hyperledger/fabric/common/configtx/tool/configtxgen/main.go
echo 'GOPATH: $(GOPATH) ';
echo "Building configtxgen";
$(GO) build -o bin/configtxgen github.com/hyperledger/fabric/common/configtx/tool/configtxgen;
bin/certgen: $(GOPATH)/src/github.com/hyperledger/fabric/core/comm/testdata/certs/generate.go
echo 'GOPATH: $(GOPATH) ';
$(GO) build -o bin/certgen $(GOPATH)/src/github.com/hyperledger/fabric/core/comm/testdata/certs/generate.go;
bin/chaintool: $(GOPATH)/src/github.com/hyperledger/fabric-chaintool
echo 'GOPATH: $(GOPATH) ';
cd $(GOPATH)/src/github.com/hyperledger/fabric-chaintool;
make
cp target/chaintool $(GOPATH)/bin/
cd $(GOPATH)/
.PHONY: config
config:
echo "ORDERER_CFG_PATH: $(ORDERER_CFG_PATH)"
echo "Generating genesis block ... "
./bin/configtxgen -profile TwoOrgs -outputBlock config/orderer/orderer.block
echo "Generating channel configuration transaction ... "
./bin/configtxgen -profile TwoOrgs -outputCreateChannelTx config/orderer/channel.tx -channelID "article"
Docker Images:
docker pull hyperledger/fabric-ccenv:x86_64-1.0.0-alpha ## Chaintool Env
docker pull hyperledger/fabric-javaenv:x86_64-1.0.0-alpha ## Chaintool
docker pull hyperledger/fabric-peer:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-ca:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-orderer:x86_64-1.0.0-alpha
# Optional
docker pull hyperledger/fabric-couchdb:x86_64-1.0.0-alpha ## LevelDB or CouchDB
docker pull hyperledger/fabric-kafka:x86_64-1.0.0-alpha ## Kafka
docker pull hyperledger/fabric-zookeeper:x86_64-1.0.0-alpha ## Kafka Broker
docker pull hyperledger/fabric-sdk-py:0.1 ## Python SDK
# Version Tag
docker tag hyperledger/fabric-ccenv:x86_64-1.0.0-alpha hyperledger/fabric-ccenv:latest
docker tag hyperledger/fabric-javaenv:x86_64-1.0.0-alpha hyperledger/fabric-javaenv:latest
docker tag hyperledger/fabric-peer:x86_64-1.0.0-alpha hyperledger/fabric-peer:latest
docker tag hyperledger/fabric-ca:x86_64-1.0.0-alpha hyperledger/fabric-ca:latest
docker tag hyperledger/fabric-orderer:x86_64-1.0.0-alpha hyperledger/fabric-orderer:latest