说明
这是网易云课堂“IT技术快速入门学院”使用的素材。
这里演示合约的用法,合约代码托管在在Github上:合约代码。
Example-1:demo
example-1: demo中演示了最基本、最常用的方法,可以通过这个合约进行下面操作:
func (t *Chaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
function, args := stub.GetFunctionAndParameters()
switch function {
//返回调用者信息
case "creator":
return t.creator(stub, args)
//调用改合约中的其它方法,用来演示复杂的调用
case "call":
return t.call(stub, args)
//直接对key的内容进行append,用来演示这样操作的结果
case "append":
return t.append(stub, args)
//读取当前用户的属性值
case "attr":
return t.attr(stub, args)
//查询一个key的当前值
case "query":
if len(args) != 1 {
return shim.Error("parametes's number is wrong")
}
return t.query(stub, args[0])
//查询一个key的所有历史值
case "history":
if len(args) != 1 {
return shim.Error("parametes's number is wrong")
}
return t.history(stub, args[0])
//创建一个key,并写入key的值
case "write": //写入
if len(args) != 2 {
return shim.Error("parametes's number is wrong")
}
return t.write(stub, args[0], args[1])
//通过当前合约,到另一个合约中进行查询
case "query_chaincode":
if len(args) != 2 {
return shim.Error("parametes's number is wrong")
}
return t.query_chaincode(stub, args[0], args[1])
//通过当前合约,到另一个合约中进行写入
case "write_chaincode":
if len(args) != 3 {
return shim.Error("parametes's number is wrong")
}
return t.write_chaincode(stub, args[0], args[1], args[2])
default:
return shim.Error("Invalid invoke function name.")
}
}
完整代码: 合约代码。
合约安装&单合约调用
获取合约代码
可以用下面的方式获取合约源代码:
mkdir -p $GOPATH/github.com/introclass
cd $GOPATH/github.com/introclass
git https://github.com/introclass/hyperledger-fabric-chaincodes.git
或者:
go get github.com/introclass/hyperledger-fabric-chaincodes
安装合约&初始化
安装合约:
cd /opt/app/fabric/cli/user/member1.example.com/Admin-peer0.member1.example.com
./3_install_chaincode.sh
合约初始化:
./4_instantiate_chaincode.sh
到另一个Peer上再安装一次合约:
cd /opt/app/fabric/cli/user/member1.example.com/Admin-peer1.member1.example.com/
./3_install_chaincode.sh
合约直接调用
下面的操作可以在任意一个Peer进行。
查看当前调用者,调用creator方法:
$ ./peer.sh chaincode query -C mychannel -n mycc -c '{"Args":["creator"]}'
2018-07-18 12:45:48.083 CST [chaincodeCmd] checkChaincodeCmdP