关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

最近在搞fabric的环境,搞得头大。感觉啥也不懂,慢慢学习。

当部署好环境后,利用自己写的abcdemo.go的链码,可以部署到fabric环境中,就可以使用了。

放入指定文件夹中,如下图所示:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

此时,我们输入指令进入peer:docker exec -it cli bash

当我们把自己写的go语言代码文件(智能合约)放入到abc文档中后,就可以利用我们自己的智能合约了。

输入指令:安装我们自己的智能合约:

peer chaincode install -n mychannel1 -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02/abc -v 1.0

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

这里是我们通道名称,要和之前我们创建的一样。

然后我们要实例化它:输入指令:peer chaincode instantiate -o orderer.example.com:7050 -C mychannel1 -n abcd -c '{"Args":["init"]}'  -v 1.0
代码解释:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

显示实例化成功了。

然后我们来执行链码:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

显示我们增加一个链码信息成功了。

我们在把他查出来:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

显示查询成功。

这里对链码做一个说明:

peer chaincode invoke -C mychannel1 -n abcd -c '{"Args":["userQueryLeague","A"]}'
Args[]代表传进去的参数,"userQueryLeague"是function name 就是方法名,"A"表示是联盟名称,所以可以查出联盟A的信息。

前面的invoke,关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

这个位置的参数是一个系统文字,一般我们写invoke就行,因为底层很多都是调用invoke函数来调用相关功能的。

但是如果用的是go语言官方的智能合约,在查询的时候,可以用query代替invoke,官方文档在这:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

下面我们重新部署go官方的智能合约:

但是你也可以利用invoke语法,显示是可以查询的。如下图所示:

实例化链码:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

查询,此时我们利用query语法来执行:

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

显示出:10。说明查询成功!

接下来我们把query改成invoke,试一试会怎么样呢?

关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘

也查出来了是10。说明invoke也是可以的。

补充说明:经过阅读文献:invoke语法适合向账本写数据,是需要权限的,而query语法是不需要权限的,所以query的速度更快,但是一般我们统一用invoke就行了。