关于fabric上链码的一些心得。peer chaincode query -C mychannel1 -n abcd -c ‘{“Args“:[“userQueryLeague“,“A“]}‘
最近在搞fabric的环境,搞得头大。感觉啥也不懂,慢慢学习。
当部署好环境后,利用自己写的abcdemo.go的链码,可以部署到fabric环境中,就可以使用了。
放入指定文件夹中,如下图所示:
此时,我们输入指令进入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
这里是我们通道名称,要和之前我们创建的一样。
然后我们要实例化它:输入指令:peer chaincode instantiate -o orderer.example.com:7050 -C mychannel1 -n abcd -c '{"Args":["init"]}' -v 1.0
代码解释:
显示实例化成功了。
然后我们来执行链码:
显示我们增加一个链码信息成功了。
我们在把他查出来:
显示查询成功。
这里对链码做一个说明:
peer chaincode invoke -C mychannel1 -n abcd -c '{"Args":["userQueryLeague","A"]}'
Args[]代表传进去的参数,"userQueryLeague"是function name 就是方法名,"A"表示是联盟名称,所以可以查出联盟A的信息。
前面的invoke,
这个位置的参数是一个系统文字,一般我们写invoke就行,因为底层很多都是调用invoke函数来调用相关功能的。
但是如果用的是go语言官方的智能合约,在查询的时候,可以用query代替invoke,官方文档在这:
下面我们重新部署go官方的智能合约:
但是你也可以利用invoke语法,显示是可以查询的。如下图所示:
实例化链码:
查询,此时我们利用query语法来执行:
显示出:10。说明查询成功!
接下来我们把query改成invoke,试一试会怎么样呢?
也查出来了是10。说明invoke也是可以的。
补充说明:经过阅读文献:invoke语法适合向账本写数据,是需要权限的,而query语法是不需要权限的,所以query的速度更快,但是一般我们统一用invoke就行了。