Init()方法与例子程序类似;
Invoke()方法包含 query invoke set get;
- 编写完成后,拖到linux对应目录
package main
import (
"github.com/hyperledger/fabric/core/chaincode/shim"
pb "github.com/hyperledger/fabric/protos/peer"
"strconv"
"fmt"
)
type PaymentChaincode struct {
}
//初始化方法
//-c '{"Args":["init","第一个账户名","第一个账户余额",XXXXXX]}'
func (p *PaymentChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
_, args := stub.GetFunctionAndParameters()
if len(args) != 4 {
return shim.Error("必须是4个参数")
}
var err error
//拿到参数转换
_, err = GetArgsState(args[1])
if err != nil {
return shim.Error("第一个账户的金额错误")
}
_, err = GetArgsState(args[3])
if err != nil {
return shim.Error("第二个账户的金额错误")
}
//将初始化数据存到账本中
//持久化
err = stub.PutState(args[0], []byte(args[1]))
if err != nil {
return shim.Error("第一个账户保存失败")
}
err = stub.PutState(args[2], []byte(args[3]))
if err != nil {
return shim.Error("第二个账户保存失败")
}
fmt.Println("初始化成功")
return shim.Success(nil)
}
//参数转换
//字符串转数字
func GetArgsState(value string) (int, error) {
v, err := strconv.Atoi(value)
if err != nil {
return 0, err
}
return v, err
}
//链码交互的入口
func (p *PaymentChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
//接收方法名
fun, args := stub.GetFunctionAndParameters()
//判断方法入口
if fun == "query" {
return query(stub, args)
} else if fun == "invoke" {
return invoke(stub, args)
} else if fun == "set" {
return set(stub, args)
} else if fun == "get" {
return get(stub, args)
} else {
re