1、Fabric的本质:
与一般区块链技术的相同点:Fabric与其他区块链技术一样,都有一个账本。和以太坊相像,也允许使用智能合约。从本质上看,它是参与者共同管理交易的系统,是联盟链的典型应用。
2、与一般区块链技术的不同点:
具有多种节点类型。不同节点赋予了不同的功能,增加了交易处理效率。
拥有准入资格授权机制。要成为超级账本Fabric的成员,首先要在MSP进行注册。
提供可插拔的选项。数据可以以多种格式存储,支持多种功能模块,如共识、权限管理模块等,模块允许加入或退出。
允许创建多通道。允许参与者建立单独的交易账本,不同通道间信息隔离。
3、Fabric的几个特性
代币:Fabric是准入型网络,通过激励制度来保证网络安全与可持续性的需求不大,因此也没有代币机制。
区块打包:没有设置出块时间,有交易时才创建新区块,另外区块的大小也可以灵活设置。
共识不可逆转:以基于工作量证明共识机制的公有链为例,共识结果是可以随着时间的发生进行调整或改变。而Fabric的共识机制具有最终性,一旦达成,不可逆转。
数据的隐私与安全:Fabric可以对交易进行追踪,防止抵赖,但数据只有进行了授权才可以访问,隐私性强。另外,也有对数据的监管和审计,安全性高。
作为联盟链的一个典型应用,各个节点通过授权后才能加入与退出网络,共同维护区块链的健康运转。它的可插拔性、可编程性、多通道性、完整的身份管理机制、以及对不同模块的支持等特性,也使得它更容易与实际应用相结合,与企业相结合。
本机环境是macOS,虚拟机是Ubuntu16.04 64位,有时候按步骤安装也会报错和出现缺少组建的情况这可能是网络波动的原因,所以建议用一个新的虚拟机来装有问题直接重装因为有些问题自己没法查错,多试几遍即可。
sudo cp /etc/apt/sources.list
sudo vim /etc/apt/sources.list
然后根据需要换成清华阿里的镜像源:
https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
sudo apt-get update
如果没安装ssh可以安装下,这样接下来就可以用Xshell或者SecureCRT之类的客户端远程连接Ubuntu:
sudo apt-get install ssh
$ wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
先打开配置文件:
vim ~/.profile
再添加这几句进去:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
输入:wq 编辑保存并退出vim后,记得使这些环境变量生效:
source ~/.profile
将go的目录GOPATH设置为当前⽤用户的⽂文件夹下,创建go⽂件夹,一般他会自动创建。
cd ~
mkdir go
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s
http://f1361db2.m.daocloud.io
修改权限,添加当前用户到组 sudo usermod -aG docker $ USER ,其中的$USER表示当前的⽤户名。
使⽤下⾯的命令来设置stable存储库:
sudo add-apt-repository "deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
注意:在⽣产系统上,可能会需要应该安装⼀一个特定版本的Docker CE,⽽不是总是使用最新版本: 列出可用的版本:apt-cache madison docker-ce 选择要安装的特定版本,第⼆列是版本字符串,第三列是存储库名称,它指示包来自哪个存储库,以及扩展它的稳定性级别。要安装一个 特定的版本,将版本字符串附加到包名中,并通过等号(=)分隔它们: sudo apt-get install docker-ce=
docker --version
sudo systemctl daemon-reload sudo systemctl restart docker
systemctl status docker
若未启动,则启动docker服务:
sudo service docker start或者sudo systemctl start docker
sudo apt-get install python-pip
curl -L
https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-
compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
和
sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
官方推荐为1.8.0版本以上,这⾥我们下载的是1.12.0
docker-compose --version
直接git clone速度很慢,因为github.global.ssl.fastly.Net域名被限制了。只要找到这个域名对应
的ip地址,然后在hosts⽂件中加上ip–>域名的映射,刷新DNS缓存就可以了。
github.global.ssl.fastly.net github.com
sudo vim /etc/hosts
在⽂件下方输⼊下面内容并保存,前⾯面两个ip就是我们刚才上面查找到的ip:
151.101.185.194 github.global.ssl.fastly.net 192.30.253.113 github.com
sudo /etc/init.d/networking restart
如果不行也可以尝试重启一下电脑,接下来再去git clone就快很多了了。
mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
cd ~/go/src/github.com/hyperledger/fabric
git checkout v1.0.0
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
时间较长,需要保持网络稳定。
下载完成后,检查下载的镜像列列表:
docker images
我们仍然停留在e2e_cli⽂件夹,这⾥提供了启动、关闭Fabric网络的⾃动化脚本。我们要启动Fabric⽹络,并自动运行Example02 ChainCode的测试,执行⼀个命令:
./network_setup.sh up
这个做了以下操作:
1、编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin
2、基于configtx.yaml⽣生成创世区块和通道相关信息,并保存在channel-artifacts⽂件夹。
3、基于crypto-config.yaml⽣成公私钥和证书信息,并保存在crypto-config⽂件夹中。
4、基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器器。
5、在CLI启动的时候,会运行scripts/script.sh⽂件,这个脚本文件包含了创建Channel,加入 Channel,安装Example02,运行Example02等功能。
docker exec -it cli bash
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations
/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-
cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh down