(Fabric 学习二)测试fabric2.0 test-network使用basic链码

这是更新,上一次写的错误很多,这次来更新一下!

以下是参考:

Hyperledger 学习(二):超级账本链码部署及调用(上:官方示例测试)_王三三的博客-CSDN博客

尝试链码编写及部署测试_routiao的博客-CSDN博客

routiao的博客_CSDN博客-区块链,前端领域博主

测试fabric-samples/test-network

1、启动docker网络

首先我们启动这个测试例子

cd fabric-samples/test-network

然后先移除先前运行中的所有容器

sudo ./network.sh down

然后重新打开网络

sudo ./network.sh up

可以通过命令来查看是否已经打开:

sudo docker ps -a

我们可以仔细看一下上面命令后得到的结果:

2、创建channel

Channel是一个用于特定网络成员之间通信的私有层,只有被邀请加入Channel的成员才能够使用它,对网络中其他成员不可见,每个Channel都有一个单独的区块链账本,被邀请加入Channel的peer可以存储Channel的账本然后验证Channel的交易。

运行如下命令可以创建一个名为mychannel的Channel连接Org1和Org2。

sudo ./network.sh createChannel

当出现这样就说明通道已经创立完毕

注:在测试时可能会出现很多权限的问题,如果出现permission denied,那么就需要将文件的权限打开,接下来会在文章中细说。 

为用户添加一个权限,目的是方便操作整个关于fabric的文件夹

sudo chmod -R 777 ~/go

同时由于还需要给用户添加opt的权限

sudo chmod -R 777 /opt

与网络进行交互:

当测试网络成功启动之后,可以利用命令行的peer命令与网络交互,它允许用户调用部署好的智能合约,更新channel或者安装和部署新的智能合约。

首先要设置一下,在bin目录下有peer等二进制文件,在config目录下有若干yaml文件,如果需要的话,可以使用如下命令将peer等添加到环境变量中:

先保证你要在test-network中:配置临时变量:(这里如果不配置,不能用peer命令)

export PATH=${PWD}/../bin:$PATH

此外还需要配置一下config所在的目录。

export FABRIC_CFG_PATH=$PWD/../config/

我们还需要设置go的环境

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

这样的话就可以进行链码的部署,注意这里不能用sudo ,不然会导致环境出问题

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

若出现这样的情况,说明链码部署成功 。

我们也可以在文件中看到,如果链码部署上去,系统会在test-network文件夹下面打出一个jar包名叫basic.tar.gz

3、智能合约调用

链码部署上去之后我们就可以来进行智能合约的调用

初始化成员的身份为组织1

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

初始化分类账本

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"]}'

查看效果:

 可以发现我们确实已经查询到数据,仔细发现其实这些数据是写死在智能合约中的,我们可以找到调用的智能合约/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go

查看到初始化分类账本的方法InitLedger是这么写的

 然后我们调用后就会得到这个数据

[
    {"ID": "asset1", "color": "blue", "size": 5, "owner": "Tomoko", "appraisedValue": 300},
    {"ID": "asset2", "color": "red", "size": 5, "owner": "Brad", "appraisedValue": 400},
    {"ID": "asset3", "color": "green", "size": 10, "owner": "Jin Soo", "appraisedValue": 500},
    {"ID": "asset4", "color": "yellow", "size": 10, "owner": "Max", "appraisedValue": 600},
    {"ID": "asset5", "color": "black", "size": 15, "owner": "Adriana", "appraisedValue": 700},
    {"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
]

接下来我们使用智能合约中的不同方法。

4、调用合约中的不同方法

这些智能合约都是写在/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go中,

我们打开来看看他可以执行的方法

4.1 添加资产

查看go文件中的代码:

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":"CreateAsset","Args":["asset7","pink","10","XZDD","16402"]}'

执行情况:

4.2 删除资产

智能合约:

 执行:

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":"DeleteAsset","Args":["asset6"]}'

执行情况:

查看信息: 

可以发现下面这条记录已经不见了 

{"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}

4.3 修改资产

智能合约:

执行:

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":"UpdateAsset","Args":["asset7","RED","9","XZDD","521521"]}'

执行情况:

查看信息:

4.4 转移资产

智能合约:

执行:

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":["asset5","XZDD"]}'

执行情况:

查看信息:

 可以查看资产转移给了XZDD,现在XZDD是owner。

4.5 查看特定的资产

智能合约:

执行:

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

执行情况:

5、切换身份

之前都是使用组织1来验证代码的增删改查操作,现在我们可以再开一个终端,用组织2来验证功能,只需要变更环境变量即可!

export PATH=${PWD}/../bin:$PATH
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

具体操作此处不做复述,可以尝试打开两个bash窗口,初始化为不同的身份,一个窗口做资产变更操作,另一个窗口做资产查询操作来进行区块链的同步效果测试。

猜你喜欢

转载自blog.csdn.net/Wannabe_hacker/article/details/123240612