cryptogen组织结构和账号相关的文件
configtxgen区块和交易生成
configtxlator区块和交易解析
安装链码
peer chaincode install -n demo -v 1.0 -p demo
其中-n表示名称,-v表示版本 -p表示路径
实例化链码
peer chaincode instantiate -n demo -v 1.0 -c ‘{“args”:[“john”,“0”]}’ -P ‘OR’
-c表示链码参数
调用链码
peer chaincode invoke -o order.example.com:7050 --tls $CORE_PEER_tTLS
查询链码
peer chaincode query -C mychannel -n demo -c ‘{“Args”:[“query”,“a”]}’
升级链码
安装新版本的链码
peer chaincode install -n demo -v 1.0 -p path/
升级链码upgrade
peer chaincode upgrade -n demo -v 1.0 -c ‘{“Args”:[“d”,“e”]}’ -C mychannel
打包链码和签名
打包链码
peer chaincode package -n demo -p gitbhub.com/hyperledger/fabric/
对打包文件进行签名
peer chaincode signpackage ccpak.out signedccpak.out
package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
"github.com/hyperledger/fabric/protos/peer"
)
type HelloFabric struct {
}
func main() {
shim.Start(new(HelloFabric))
}
func (t*HelloFabric)init(stub shim.ChaincodeStubInterface)peer.Response {
args := stub.GetStringArgs()
err := stub.PutState(args[0], []byte(args[1]))
if err!=nil {
shim.Error(err.Error())
}
return shim.Success(nil)
}
func (t*HelloFabric) invoke(stub shim.ChaincodeStubInterface)peer.Response {
s, strings := stub.GetFunctionAndParameters()
if s=="set" {
return t.set(stub,strings)
}else if s=="get"{
return t.get(stub,strings)
}
return shim.Error("invoke error")
}
func (t *HelloFabric) set(stub shim.ChaincodeStubInterface, args []string) peer.Response {
err := stub.PutState(args[0], []byte(args[1]))
if err!=nil {
return shim.Error("")
}
return shim.Success(nil)
}
func (t *HelloFabric) get(stub shim.ChaincodeStubInterface, args []string) peer.Response {
value, e := stub.GetState(args[0])
if e!=nil {
return shim.Error("")
}
return shim.Success(value)
}