HyperLedger Fabric基础笔记

没办法,公司要搞区块链,又把他捡起了,忘了好久了。
1 基本算法
1.1 PBFT
拜占庭容错算法(Practical Byzantine Fault Tolerance),拜占庭共识算法这篇的推理最为简单,
假设R为安全节点,E为不安全节点,投票数为P
E = 0 , P < R , 都 可 以 得 到 结 果 E=0,P<R,都可以得到结果 E=0,P<R,
R / 2 同 意 , R / 2 反 对 , P > R / 2 + E , 才 可 以 有 结 果 R/2同意,R/2反对,P>R/2+E,才可以有结果 R/2R/2,P>R/2+E
⟹ R / 2 + E < P < R ⟹ R + E < 3 / 2 R ⟹ 2 / 3 A L L < R ⟹ 2 E + 1 < R ⟹ m i n ( P ) = 3 E + 1 \Longrightarrow R/2+E<P<R\Longrightarrow R+E<3/2R\Longrightarrow 2/3ALL<R \Longrightarrow 2E+1<R\Longrightarrow min(P)=3E+1 R/2+E<P<RR+E<3/2R2/3ALL<R2E+1<Rmin(P)=3E+1
1.2 梅克尔树
小知识:区块链的梅克尔树结构又是什么?,因为每一区块的梅克尔树根都会存在下一个区块的区块头中父区块哈希值,也就意味着下一区块保存了上区块的所有交易,从而保障了区块链的数据安全。
Merkle Tree(梅克尔树)算法解析
1.3 raft
共识算法:Raft
1.4 POW
工作量证明(Proof Of Work,简称POW),这篇文章介绍的是比特币中的工作量。
1.5 Pos
1.6 Gossip
P2P 网络核心技术:Gossip 协议
2 Fabric
2.1 环境准备

sudo tar xf go1.13.5.linux-amd64.tar.gz -C /usr/local
# 配置环境变量,如果SecureCRT中使用vi有问题,则执行 sudo apt install vim,安装vim。
vi ~/.bashrc
# 在最末尾添加
export GOROOT=/usr/local/go
export GOPATH=/home/test/gowork
export PATH=$GOROOT/bin:$PATH
export FABRIC_HOME=/home/test/gowork/src/github.com/hyperledger/fabric/.build
export PATH=$FABRIC_HOME/bin:$PATH
# 
# 让环境变量生效
source ~/.bashrc

注意fabric以来go环境,否则就没法执行make cryptogen等操作。

  • 安装docker

参考Ubuntu16.04安装docker-ce(阿里源)

sudo su -
apt-get update
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get -y update
apt-get -y install docker-ce

如果想普通用户也可以运行docker,则ubuntu普通用户登录操作docker提示无权限的解决办法

sudo gpasswd -a $USER docker 
newgrp docker
# 验证一下docker
docker ps
sudo pip3 install docker-compose
# 查看docker-compose版本
docker-compose -version
cd /home/test/gowork
mkdir -p src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
cd fabric
git checkout v1.4.0
cd scripts
./bootstrap.sh

接下来就可以看到fabric的安装docker镜像清单。
2
参考CenOS7安装配置fabric1.4详细流程+fabric1.4的helloWorld,运行示例

cd ~/fabric/scripts/fabric-samples/first-network
# 构建网络,生成配置
 ./byfn.sh -m generate -c jschannel
 # 启动网络
./byfn.sh -m up -c jschannel
# 关闭提供的fabric-samples中的first-network网络
./byfn.sh -m down
sudo apt-get install nodejs
sudo apt-get install npm
git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git checkout release-1.4
# 查看当前版本
git branch -a
# 启动网络
cd ~/gowork/fabric-samples/basic-network
./start.sh
# 查看运行情况
docker ps

2
输入http://10.101.5.147:5984/_utils/,可以对区块链使用的CouchDB数据库进行可视化
2
执行下面的命令,启动监控容器。

cd ~/gowork/fabric-samples/commercial-paper/organization/magnetocorp/configuration/cli
./monitordocker.sh net_basic

其余的过程参考参考Fabric-samples 1.4商业票据教程详细过程(Commercial paper tutorial),这里不再赘述。

cd ~/gowork/fabric-samples/commercial-paper/organization/magnetocorp/configuration/cli
docker-compose -f docker-compose.yml up -d cliMagnetoCorp
# 合约安装
cd ~/gowork/fabric-samples
docker exec cliMagnetoCorp peer chaincode install -n papercontract -v 0 -p /opt/gopath/src/github.com/contract -l node
# 合约初始化
docker exec cliMagnetoCorp peer chaincode instantiate -n papercontract -v 0 -l node -c '{"Args":["org.papernet.commercialpaper:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')"

执行合约初始化的时候,提示异常,其他人的异常总结,参考常见Fabric错误场景(持续更新)

test@bw147:~/gowork/fabric-samples/basic-network$ docker exec cliMagnetoCorp peer chaincode instantiate -n papercontract -v 0 -l node -c '{"Args":["org.papernet.commercialpaper:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')"
Error: error getting channel (mychannel) orderer endpoint: error bad proposal response 500: access denied for [GetConfigBlock][mychannel]: Failed to get policy manager for channel [mychannel]

查阅HyperLeger Fabric开发(八)——HyperLeger Fabric链码开发测试,认为这个错误是通道名称必须是myc(创世区块和配置交易的文件名称为myc),否则将报错信息:造成的。那么创世区的名称是什么呢?再查阅fabric1.4官方
于是我采用是不是因为没有执行git checkout release-1.4,于是重新执行到docker-compose -f docker-compose.yml up -d cliMagnetoCorp,提示异常

Starting cliMagnetoCorp ... 

ERROR: for cliMagnetoCorp  a bytes-like object is required, not 'str'

ERROR: for cliMagnetoCorp  a bytes-like object is required, not 'str'
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/docker/api/client.py", line 261, in _raise_for_status
    response.raise_for_status()
  File "/usr/local/lib/python3.6/dist-packages/requests/models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: http+docker://localhost/v1.22/containers/89a90295095d24a14e90cf72c8153c2892869d30771a8d2bba69277fa8dd9f6a/start

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/compose/service.py", line 625, in start_container
    container.start()
  File "/usr/local/lib/python3.6/dist-packages/compose/container.py", line 241, in start
    return self.client.start(self.id, **options)
  File "/usr/local/lib/python3.6/dist-packages/docker/utils/decorators.py", line 19, in wrapped
    return f(self, resource_id, *args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/docker/api/container.py", line 1095, in start
    self._raise_for_status(res)
  File "/usr/local/lib/python3.6/dist-packages/docker/api/client.py", line 263, in _raise_for_status
    raise create_api_error_from_http_exception(e)
  File "/usr/local/lib/python3.6/dist-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
    raise cls(e, response=response, explanation=explanation)
docker.errors.NotFound: 404 Client Error: Not Found ("b'network 585842a899363043eb2cec3603d38247906cf39a9801bf6bfb63d842f66634dd not found'")

进入/var/lib/docker/containers
2
将这个目录全部删掉,然后docker stop $(docker ps -a -q),我把docker镜像都清理掉,再次重来。在一台电脑运行起来,但是在另外一台机器上却没有那么好命,再次执行到docker-compose -f docker-compose.yml up -d cliMagnetoCorp提示异常

Pulling cliMagnetoCorp (hyperledger/fabric-tools:)...
latest: Pulling from hyperledger/fabric-tools
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
b5035666b1cd: Pull complete
94c898b5fdef: Downloading [=>                                                 ]  2.686MB/116.3MB
94c898b5fdef: Downloading [===>                                               ]  6.995MB/116.3MB
94c898b5fdef: Downloading [====>                                              ]  10.19MB/116.3MB
94c898b5fdef: Downloading [=====>                                             ]  13.96MB/116.3MB
9dc56c5637b5: Downloading [===============================>                   ]  202.7MB/322.3MB
9dc56c5637b5: Downloading [==========================================>        ]  271.9MB/322.3MB
89c4701a4f5f: Download complete
18467825df3e: Verifying Checksum
9dc56c5637b5: Downloading [===========================================>       ]  279.4MB/322.3MB
94c898b5fdef: Retrying in 1 second
94c898b5fdef: Pull complete
bee7bd3eb18f: Pull complete
9dc56c5637b5: Extracting [==================================================>]  322.3MB/322.3MB
9dc56c5637b5: Pull complete
31f2b9e8b256: Pull complete
89c4701a4f5f: Pull complete
18467825df3e: Pull complete
Digest: sha256:822418c5ad61473ecfa911dfe4b100264500c504c78def52730106a717be71cb
Status: Downloaded newer image for hyperledger/fabric-tools:latest
Recreating cliMagnetoCorp ... error

ERROR: for cliMagnetoCorp  b'open /var/lib/docker/containers/89a90295095d24a14e90cf72c8153c2892869d30771a8d2bba69277fa8dd9f6a/.tmp-config.v2.json864601594: no such file or directory'

ERROR: for cliMagnetoCorp  b'open /var/lib/docker/containers/89a90295095d24a14e90cf72c8153c2892869d30771a8d2bba69277fa8dd9f6a/.tmp-config.v2.json864601594: no such file or directory'

通过查找89a90295095d24a14e90cf72c8153c2892869d30771a8d2bba69277fa8dd9f6a发现/var/lib/docker/image/overlay2/layerdb/mounts/89a90295095d24a14e90cf72c8153c2892869d30771a8d2bba69277fa8dd9f6a中有这个文件夹,这里先看看docker学习——1,基于overlay2存储驱动的理解Docker存储驱动之–overlay2
执行docker ps -a,难道这就是原因吗?容器没有卸载感情,于是再执行docker rm 89a90295095d就可以了。
1
接着按照步骤执行

cd ~/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application
cnpm install
# 导入钱包
node addToWallet.js
#  发布商业票据
node issue.js
#  赎回票据
node redeem.js
#
cd ~/gowork/fabric-samples/commercial-paper/organization/digibank/configuration/cli/
docker-compose -f docker-compose.yml up -d cliDigiBank
cd ~/gowork/fabric-samples/commercial-paper/organization/digibank/application
# 导入钱包
node addToWallet.js
# 购买票据
node buy.js
# 赎回票据
node redeem.js

在执行到node issue.js,异常日志如下,出现这个问题,是因为docker exec cliMagnetoCorp peer chaincode instantiate -n papercontract -v 0 -l node -c '{"Args":["org.papernet.commercialpaper:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')",合约初始化没有成功导致了。

Connect to Fabric gateway.
Use network channel: mychannel.
Use org.papernet.commercialpaper smart contract.
Submit commercial paper issue transaction.
2020-01-08T05:53:52.422Z - warn: [Transaction]: _validatePeerResponses: Received error response from peer: message=make sure the chaincode papercontract has been successfully instantiated and try again: chaincode papercontract not found, stack=Error: make sure the chaincode papercontract has been successfully instantiated and try again: chaincode papercontract not found
    at self._endorserClient.processProposal (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_fabric-client@1.4.4@fabric-client/lib/Peer.js:140:36)
    at Object.onReceiveStatus (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_grpc@1.21.1@grpc/src/client_interceptors.js:1207:9)
    at InterceptingListener._callNext (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_grpc@1.21.1@grpc/src/client_interceptors.js:568:42)
    at InterceptingListener.onReceiveStatus (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_grpc@1.21.1@grpc/src/client_interceptors.js:618:8)
    at callback (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_grpc@1.21.1@grpc/src/client_interceptors.js:845:24), status=500, , url=grpc://localhost:7051, name=peer0.org1.example.com, grpc.max_receive_message_length=-1, grpc.max_send_message_length=-1, grpc.keepalive_time_ms=120000, grpc.http2.min_time_between_pings_ms=120000, grpc.keepalive_timeout_ms=20000, grpc.http2.max_pings_without_data=0, grpc.keepalive_permit_without_calls=1, name=peer0.org1.example.com, request-timeout=120001, grpc.ssl_target_name_override=peer0.org1.example.com, grpc.default_authority=peer0.org1.example.com, isProposalResponse=true
2020-01-08T05:53:52.423Z - error: [Transaction]: _validatePeerResponses: No valid responses from any peers. 1 peer error responses:
    peer=peer0.org1.example.com, status=500, message=make sure the chaincode papercontract has been successfully instantiated and try again: chaincode papercontract not found
Error processing transaction. Error: No valid responses from any peers. 1 peer error responses:
    peer=peer0.org1.example.com, status=500, message=make sure the chaincode papercontract has been successfully instantiated and try again: chaincode papercontract not found
Error: No valid responses from any peers. 1 peer error responses:
    peer=peer0.org1.example.com, status=500, message=make sure the chaincode papercontract has been successfully instantiated and try again: chaincode papercontract not found
    at Transaction._validatePeerResponses (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_fabric-network@1.4.4@fabric-network/lib/transaction.js:227:10)
    at Transaction.submit (/home/dengjun/gowork/fabric-samples/commercial-paper/organization/magnetocorp/application/node_modules/_fabric-network@1.4.4@fabric-network/lib/transaction.js:145:33)
    at <anonymous>
Disconnect from Fabric gateway.
Issue program complete.

如果成功则,会显示下面的信息。
1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值