使用NodeJS开发Hyperledger Fabric笔记1——Get Started

入门参考文档:
https://hyperledger-fabric.readthedocs.io/zh_CN/release-2.2/test_network.html

想要学习一项技术,最好的开始就是官方文档。

下载hyperledger官方的sample

# 只下载项目
git clone https://github.com/hyperledger/fabric-samples.git
# 全面下载
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.2 1.4.9

docker确认

如果你的电脑上没有安装先安装docker

sudo apt install docker.io docker-compose
#或
sudo snap install docker docker-compose

切换到root环境

这里注意,说明一下,在Linux Ubuntu上,后面所有操作都要在root下进行。

所以开始前先su:

sudo su

开始部署第一个sample

进入到fabric-samples/test-network,执行:

启动fabric在docker上的服务

./network.sh up

创建一个channel

./network.sh createChannel

启动一套智能合约(链码),在hyperledger上智能合约被叫做链码,非常的奇怪,我还是喜欢eth下的智能合约叫法。

用JS或TS版本的链码

#ts
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-typescript -ccl typescript

#js
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-javascript -ccl javascript

测试这sample的合约

因为这里我们要用到peer等一些二进制工具与链码进交互,所以我们添加bin系统环境变量。

如下操作:

# 在root环境下操作
vi ~/.bashrc
# 在root的bashrc中增加:
export PATH=~/fabric/bin:$PATH
export FABRIC_CFG_PATH=~/fabric/config/

另外还需要export一些环境变量,是和sample有关的,我们不要写入bashrc中,直接在test-network中执行即可:

# Environment variables for Org1

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${
    
    PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

为了方便,你可以在test-network下新建一个envrc1文件,然后把上面这几个export复制进去,之后进入到test-network目录后只需要执行source ./envrc1即可导入这些环境变量。

那为什么是1呢?因为还有2啊。在上述步骤中,你应该发现了其实这network.sh创建了2个docker peer节点也就是org1和org2,所以针对这两个org我们是有两套环境变量的,分指向这两个组织。

具体说这两个envrc文件里面的都是组织相关的加密文件,用于鉴权。

以下是envrc2

# Environment variables for Org2

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${
    
    PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${
    
    PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

开始读写合约的测试

先使用org1来测试:

source ./envrc1

首先我们初始化一下账本,先写入一些数据

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${
    
    PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

然后我们读取一下试试

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

我们会看到一堆json数据,这些就是刚刚初始化操作后的账本状态,也就是org1的资产。

接下来我们做一些转账操作

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${
    
    PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

好了,我们去看下转账后的区账本,我们用org2进行查询,所以source ./envrc2

执行:

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

结果:

{
    
    "ID":"asset6","Color":"white","Size":15,"Owner":"Christopher","AppraisedValue":800,"docType":"asset"}

好的,非常完美,资产属于Christopher了,关于转账细节请查看sample项目asset-transfer-basic/chaincode-typescript

关闭服务

测试结束,如果需要关闭sample,执行:

./network.sh down

猜你喜欢

转载自blog.csdn.net/u014466109/article/details/119416410