1. Public blockchain VS. Private blockchain
Ethereum: an example of public blockchain
Hyperledger: an example of private blockchain
由于联盟链需要容纳故障节点,而公有链不仅需要容纳故障节点,还需要容纳错误节点,所以公有链对共识算法的要求更高,需要达到拜占庭容错级别。
2. Hyperledge Fabric
2.1 一些概念
2.1.1 链码
超级账本的链码是用于操作区块链的智能合约,在链下则由SDK负责与之交互。
链码需要的编程接口只有 Init()
和 Invoke()
两个。
2.2 实验
2.2.1 环境准备
- 拉取docker镜像:
1
2
3
4docker pull hyperledger/fabric-peer:x86_64-1.0.0
docker pull hyperledger/fabric-orderer:x86_64-1.0.0
docker pull hyperledger/fabric-baseos:x86_64-1.0.0
docker pull hyperledger/fabric-tools:x86_64-1.0.0
2.拉取Fabric源码
1 | cd $GOPATH/src # 默认 $GOPATH 在 $HOME/go 路径下 |
检查 $GOPATH/bin
下已安装configtxgen
和cryptogen
两个工具:
2.2.2 建立第一个Fabric网络
1 | cd $GOPATH/src/github.com/hyperledger |
‘byfn.sh -m generate’ 命令首先通过cryptogen工具生成了参与主体的MSP证书:
接下来生成创世区块以及通道的配置文件:
最后生成了上面两个新建组织的锚节点(锚节点是每个组织的对外节点)
我们来看看 ‘first-network’ 文件夹下的目录结构:
1) 配置文件 crypto-config.yaml
首先是排序节点的设置:
接着是Peer节点的设置:
2)channel-artifacts
文件夹
其中,’genesis.block’ 代表整个网络中的创世区块,’channel.tx’ 是刚组建的通道(mychannel)的创世配置。’Org1MSPanchors.tx’和’Org2MSPanchors.tx’则是两个组织的锚节点配置。
3)configtx.yaml
Profiles: 主要定义网络启动时包含了哪些组织
Organizations: 每个组织的单独定义,常用配置项包括组织名称(Name)、组织ID(ID)、MSP证书位置(MSPDir)以及锚节点配置(AnchorPeers)。
Orderer: 排序节点的配置
Application: 与应用有关的配置
4)启动网络
启动前检查docker环境(包括docker-compose)是否正常:
1 | docker ps -a |
启动过程可能耗时几分钟,启动完毕后会自动执行scripts下的脚本,包含创建通道、加入通道、更新通道锚节点等信息。
通过 docker ps -a
查看网络启动后生成了哪些容器:
5)实验完毕关闭网络
1 | ./byfn.sh -m down |
2.2.3 启动脚本script.sh源码阅读
installChaincode 函数中通过peer chaincode install
命令将位于 github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
链码打包上传到了区块链上。
instantiateChaincode函数通过peer chaincode instantiate
初始化并启动链码。调用初始化函数并传递了4个参数(”A”, “100”, “B”, “200”)。结合链码文件chaincode_example02.go
的Init函数:
可以看到分别作为 args[1]
至args[4]
赋值给了变量 A
、Aval
、B
、Bval
,相当于给A和B分别初始化了100块钱。
评论
shortname
for Disqus. Please set it in_config.yml
.