chaincode:simpledemo

来源:互联网 发布:zard变声器数据 编辑:程序博客网 时间:2024/05/01 21:49


package mainimport ("errors""fmt""strconv""github.com/hyperledger/fabric/core/chaincode/shim")type SimpleChaincode struct {}func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {var A, B string    //Entitiesvar Aval, Bval int //Assetvar err errorif len(args) != 4 {return nil, errors.New("Incorrect number of arguments. Expecting 4")}//Initialize the chiancodeA = args[0]Aval, err = strconv.Atoi(args[1])if err != nil {return nil, errors.New("Expecting integer value for asset holding")}B = args[2]Bval, err = strconv.Atoi(args[3])if err != nil {return nil, errors.New("Expecting integer value for asset holding")}fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval)//Write the state to the ledgererr = stub.PutState(A, []byte(strconv.Itoa(Aval)))if err != nil {return nil, err}err = stub.PutState(B, []byte(strconv.Itoa(Bval)))if err != nil {return nil, err}return nil, nil}//Transactionfunc (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {if function == "delete" {return t.delete(stub, args)}var A, B string    //Entitiesvar Aval, Bval int //Asset holdingsvar X int          //Transaction valuevar err errorif len(args) != 3 {return nil, errors.New("Incorrect number of arguments. Expecting 3")}A = args[0]B = args[1]//Get the state from the ledgerAvalbytes, err := stub.GetState(A)if err != nil {return nil, errors.New("Failed to get state")}if Avalbytes == nil {return nil, errors.New("Entity not found")}Aval, _ = strconv.Atoi(string(Avalbytes))Bvalbytes, err := stub.GetState(B)if err != nil {return nil, errors.New("Failed to get state")}if Bvalbytes == nil {return nil, errors.New("Entity not found")}Bval, _ = strconv.Atoi(string(Bvalbytes))//Perform the executionX, err = strconv.Atoi(args[2])if err != nil {return nil, errors.New("Invalid transaction amount, expecting a integer value")}Aval = Aval - XBval = Bval + Xfmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval)//Write the state back to the ledgererr = stub.PutState(A, []byte(strconv.Itoa(Aval)))if err != nil {return nil, err}err = stub.PutState(B, []byte(strconv.Itoa(Bval)))if err != nil {return nil, err}return nil, nil}//Deletes an entity from statefunc (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) {if len(args) != 1 {return nil, errors.New("Incorrect number of arguments. Expecting 1")}A := args[0]err := stub.DelState(A)if err != nil {return nil, errors.New("Failed to delete state")}return nil, nil}func (t *SimpleChaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {if function != "query" {return nil, errors.New("Invalid query function name. Expecting \"query\"")}var A stringvar err errorif len(args) != 1 {return nil, errors.New("Incorrect number of arguments. Expecting name of the person to query")}A = args[0]//Get the state from the legerAvalbytes, err := stub.GetState(A)if err != nil {jsonResp := "{\"Error\":\"Failed to get state for " + A + "\"}"return nil, errors.New(jsonResp)}if Avalbytes == nil {jsonResp := "{\"ERROR\":\"Nil amount for " + A + "\"}"return nil, errors.New(jsonResp)}jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}"fmt.Printf("Query Response:%s\n", jsonResp)return Avalbytes, nil}func main() {err := shim.Start(new(SimpleChaincode))if err != nil {fmt.Printf("Error starting Simple chaincode: %s", err)}}

package mainimport ("errors""fmt""strconv""github.com/hyperledger/fabric/core/chaincode/shim""github.com/hyperledger/fabric/core/util")type SimpleChaincode struct {}func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {var sum stringvar sumVal intvar err errorif len(args) != 2 {return nil, errors.New("Incorrect number of arguments. Expecting 2")}sum = args[0]sumVal, err = strconv.Atoi(args[1])if err != nil {return nil, errors.New("Expecting integer value for sum")}fmt.Printf("sumVal=%d\n", sumVal)//wirte the state to the ledgererr = stub.PutState(sum, []byte(strconv.Itoa(sumVal)))if err != nil {return nil, err}return nil, nil}func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {var sum stringvar Aval, Bval, sumVal intvar err errorif len(args) != 2 {return nil, errors.New("Incorrect number of arguments. Expecting 2")}chaincodeURL := args[0]sum = args[1]//Queryf := "query"queryArgs := util.ToChaincodeArgs(f, "a")response, err := stub.QueryChaincode(chaincodeURL, queryArgs)if err != nil {errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}Aval, err = strconv.Atoi(string(response))if err != nil {errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}queryArgs = util.ToChaincodeArgs(f, "b")response, err = stub.QueryChaincode(chaincodeURL, queryArgs)if err != nil {errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}Bval, err = strconv.Atoi(string(response))if err != nil {errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}//compute sumsumVal = Aval + Bval//write ledgererr = stub.PutState(sum, []byte(strconv.Itoa(sumVal)))if err != nil {return nil, err}fmt.Printf("Invoke chaincode successful. Got sum %d\n", sumVal)return []byte(strconv.Itoa(sumVal)), nil}//Queryfunc (t *SimpleChaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {if function != "query" {return nil, errors.New("Invalid query function name. Expecting \"query\"")}var sum stringvar Aval, Bval, sumVal intvar err errorif len(args) != 2 {return nil, errors.New("Incorrect number of arguments. Expecting 2")}chaincodeURL := args[0]sum = args[1]//queryf := "query"queryArgs := util.ToChaincodeArgs(f, "a")response, err := stub.QueryChaincode(chaincodeURL, queryArgs)if err != nil {errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}Aval, err = strconv.Atoi(string(response))if err != nil {errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}queryArgs = util.ToChaincodeArgs(f, "b")response, err = stub.QueryChaincode(chaincodeURL, queryArgs)if err != nil {errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}Bval, err = strconv.Atoi(string(response))if err != nil {errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error())fmt.Printf(errStr)return nil, errors.New(errStr)}// Compute sumsumVal = Aval + Bvalfmt.Printf("Query chaincode successful. Got sum %d\n", sumVal)jsonResp := "{\"Name\":\"" + sum + "\",\"Value\":\"" + strconv.Itoa(sumVal) + "\"}"fmt.Printf("Query Response:%s\n", jsonResp)return []byte(strconv.Itoa(sumVal)), nil}func main() {err := shim.Start(new(SimpleChaincode))if err != nil {fmt.Printf("Error starting Simple chaincode: %s", err)}}


1 0