fabric 智能合约go语言模板
生活随笔
收集整理的這篇文章主要介紹了
fabric 智能合约go语言模板
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基于fabric分布式賬本 的存證智能合約模板
eg:
package mainimport ("encoding/json""fmt""strconv""strings""time""github.com/hyperledger/fabric/core/chaincode/shim""github.com/hyperledger/fabric/core/chaincode/shim/ext/cid"pb "github.com/hyperledger/fabric/protos/peer" )type chaincode struct { }type DataAsset struct {CtNo string `json:"ctNo"` ParentCtNo string `json:"parentCtNo"` RootCtNo string `json:"rootNo"` OpenName string `json:"openName"` OpenUscc string `json:"openUscc"` ReceiveName string `json:"receiveName"` ReceiveUscc string `json:"receiveUscc"` AcceptName string `json:"acceptName"` AcceptUscc string `json:"acceptUscc"` SignTime int64 `json:"signTime"` LoginUserId string `json:"loginUserId"` CreateDatetimeAsset int64 `json:"createDatetimeAsset"` DataType int `json:"dateType"` Operator string `json:"operator"` AssetTxId string `json:"assetTxId"` }type Contract struct {AgreementNo string `json:"agreementNo"` RelCtNo string `json:"relCtNo"` AgreementHash string `json:"agreementHash"` DataType int `json:"dateType"` CreateDatetimeCon int64 `json:"createDatetimeCon"` Operator string `json:"operator"` LoginUserId string `json:"loginUserId"` BillTxId string `json:"billTxId"` }func (t *chaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {fmt.Println("SX Chaincode init......")return shim.Success(nil) }func (t *chaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {function, args := stub.GetFunctionAndParameters()fmt.Println("SX Chaincode invoke is running " + function)fmt.Println("SX Chaincode ======>>> args: ")fmt.Println(args)fmt.Println("SX Chaincode =========")txId := stub.GetTxID()fmt.Println("SX Chaincode ======>>> txId: " + txId)// 開具簽收if function == "putAssetAndContract" {return t.putAssetAndContract(stub, args, txId)}if function == "getCurrentDatas" {return t.getCurrentDatas(stub, args)}return shim.Error(fmt.Sprintf("unknown function %s", function)) }func (t *chaincode) putAssetAndContract(stub shim.ChaincodeStubInterface, args []string, txId string) pb.Response {if len(args) != 21 {res := fmt.Sprintf("invalid number of args %d", len(args))fmt.Println(res)return shim.Error(res)}var params [21]stringfor i := 0; i < len(args); i++ {params[i] = strings.Replace(args[i], " ", "", -1)}fmt.Println("========== params ==========")fmt.Println(params)// 判斷資產(chǎn)是否存在keyAssets := params[1]assets, err := stub.GetState(keyAssets)if err != nil {return shim.Error("Failed to get asset: " + err.Error())} else if assets != nil {fmt.Println("This asset already exists")return shim.Error("This asset already exists")}// 判斷合同是否存在keyBills := params[18] + "_" + params[19]// bills, err := stub.GetState(keyBills)// if err != nil {// return shim.Error("Failed to get contract: " + err.Error())// } else if bills != nil {// fmt.Println("This contract already exists")// return shim.Error("This contract already exists")// }// 資產(chǎn)數(shù)據(jù)上鏈dt, _ := stub.GetTxTimestamp()amounts, _ := strconv.ParseFloat(params[10], 64)datetime := time.Unix(dt.Seconds, int64(dt.Nanos)).UnixNano() / 1e6val, ok, err := cid.GetAttributeValue(stub, "hf.EnrollmentID")if err != nil {return shim.Error(err.Error())}if !ok {return shim.Error("The client identity does not possess the attribute")}jkyamounts, _ := strconv.ParseFloat(params[11], 64)promiseTime, _ := strconv.ParseInt(params[12], 10, 64)signTime, _ := strconv.ParseInt(params[16], 10, 64)dataAsset := &DataAsset{params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8], params[9],amounts, jkyamounts, promiseTime, params[13], params[14], params[15], signTime, params[17], datetime, 1, val, txId}dataAssetJSONBytes, err := json.Marshal(dataAsset)if err != nil {return shim.Error(err.Error())}err = stub.PutState(keyAssets, dataAssetJSONBytes)if err != nil {return shim.Error(err.Error())}// 合同數(shù)據(jù)上鏈contract := &Contract{params[18], params[19], params[20], 2, datetime, val, params[17], txId}dataBillJSONBytes, err := json.Marshal(contract)if err != nil {return shim.Error(err.Error())}err = stub.PutState(keyBills, dataBillJSONBytes)if err != nil {return shim.Error(err.Error())}return shim.Success(nil) }func (t *chaincode) getCurrentDatas(stub shim.ChaincodeStubInterface, args []string) pb.Response {var params [2]stringfor i := 0; i < len(args); i++ {params[i] = strings.Replace(args[i], " ", "", -1)}dataBytes, err := stub.GetState(params[1])if err != nil {return shim.Error("Failed to delete")}return shim.Success(dataBytes) }func main() {err := shim.Start(new(chaincode))if err != nil {fmt.Printf("Error starting New key per invoke: %s", err)} }總結(jié)
以上是生活随笔為你收集整理的fabric 智能合约go语言模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 驯龙高手?“荣耀版”骁龙888咋样?
- 下一篇: 【1058】求一元二次方程