区块链学习笔记

本文主要介绍区块链基础知识与一些主流区块链技术平台。

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 环境准备

  1. 拉取docker镜像:
    1
    2
    3
    4
    docker 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
2
3
4
5
6
7
8
9
cd $GOPATH/src # 默认 $GOPATH 在 $HOME/go 路径下
mkdir github.com/hyperledger
cd github.com/hyperledger
git clone -b release-1.0 --single-branch https://github.com/hyperledger/fabric.git
cd fabric/common/configtx/tool/configtxgen
go env -w GO111MODULE=auto
go install
cd ../../../tools/cryptogen
go install

检查 $GOPATH/bin下已安装configtxgencryptogen两个工具:

2.2.2 建立第一个Fabric网络

1
2
3
4
cd $GOPATH/src/github.com/hyperledger
git clone -b release-1.0 --single-branch https://github.com/hyperledger/fabric-samples.git
cd fabric-samples/first-network
./byfn.sh -m generate

‘byfn.sh -m generate’ 命令首先通过cryptogen工具生成了参与主体的MSP证书:
byfn-generate.png
接下来生成创世区块以及通道的配置文件:
byfn-genesis.png
最后生成了上面两个新建组织的锚节点(锚节点是每个组织的对外节点)
byfn-anchor.png

我们来看看 ‘first-network’ 文件夹下的目录结构:
1) 配置文件 crypto-config.yaml
首先是排序节点的设置:
orderer-node.png
接着是Peer节点的设置:
peers-node-config.png

2)channel-artifacts文件夹
channel-artifacts.png
其中,’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
2
docker ps -a
./byfn.sh -m up

启动过程可能耗时几分钟,启动完毕后会自动执行scripts下的脚本,包含创建通道、加入通道、更新通道锚节点等信息。

通过 docker ps -a 查看网络启动后生成了哪些容器:
docker-up-containers.png

5)实验完毕关闭网络

1
./byfn.sh -m down

2.2.3 启动脚本script.sh源码阅读

installChaincode.png
installChaincode 函数中通过peer chaincode install 命令将位于 github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 链码打包上传到了区块链上。

instantiateChaincode.png
instantiateChaincode函数通过peer chaincode instantiate 初始化并启动链码。调用初始化函数并传递了4个参数(”A”, “100”, “B”, “200”)。结合链码文件chaincode_example02.go的Init函数:
example02-Init.png

可以看到分别作为 args[1]args[4]赋值给了变量 AAvalBBval,相当于给A和B分别初始化了100块钱。

WordPower | 计算机学科中常见的单词还有哪些生活中的意思 PAT 真题 | 1148 Werewolf - Simple version

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×