这是更新,上一次写的错误很多,这次来更新一下!
以下是参考:
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、创建channelChannel是一个用于特定网络成员之间通信的私有层,只有被邀请加入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/Admin@org1.example.com/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/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
具体 *** 作此处不做复述,可以尝试打开两个bash窗口,初始化为不同的身份,一个窗口做资产变更 *** 作,另一个窗口做资产查询 *** 作来进行区块链的同步效果测试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)