Tools, FAQ, Tutorials:
fabcar.go - The "fabcar" Chaincode
What is the fabcar.go source code file?
✍: FYIcenter.com
File fabcar.go contains the source code the "fabcar" chaincode (or Smart Contract).
A copy of fabcar.go file is available is the /opt/gopath/src directory
on the "cli" container.
You can open and read it.
1. Copy fabcar.go from cli container:
$ docker cp cli:/opt/gopath/src/github.com/fabcar/go/fabcar.go .
1. Take a look at fabcar.go:
$ more fabcar.go
/* The sample smart contract for documentation topic:
* Writing Your First Blockchain Application
*/
package main
import (
"bytes"
"encoding/json"
"fmt"
"strconv"
"github.com/hyperledger/fabric/core/chaincode/shim"
sc "github.com/hyperledger/fabric/protos/peer"
)
// Define the Smart Contract structure
type SmartContract struct {
}
type Car struct {
Make string `json:"make"`
Model string `json:"model"`
Colour string `json:"colour"`
Owner string `json:"owner"`
}
func (s *SmartContract) Init(APIstub shim.ChaincodeStubInterface) sc.Response {
return shim.Success(nil)
}
/*
* The Invoke method is called as a result of an application request to run the Smart Contract "fabcar"
* The calling application program has also specified the particular smart contract function to be called, with arguments
*/
func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {
// Retrieve the requested Smart Contract function and arguments
function, args := APIstub.GetFunctionAndParameters()
// Route to the appropriate handler function to interact with the ledger appropriately
if function == "queryCar" {
return s.queryCar(APIstub, args)
} else if function == "initLedger" {
return s.initLedger(APIstub)
} else if function == "createCar" {
return s.createCar(APIstub, args)
} else if function == "queryAllCars" {
return s.queryAllCars(APIstub)
} else if function == "changeCarOwner" {
return s.changeCarOwner(APIstub, args)
}
return shim.Error("Invalid Smart Contract function name.")
}
func (s *SmartContract) queryCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {
...
}
func (s *SmartContract) initLedger(APIstub shim.ChaincodeStubInterface) sc.Response {
...
}
func (s *SmartContract) createCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {
...
}
func (s *SmartContract) queryAllCars(APIstub shim.ChaincodeStubInterface) sc.Response {
...
}
func (s *SmartContract) changeCarOwner(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {
...
}
// The main function is only relevant in unit test mode. Only included here for completeness.
func main() {
// Create a new Smart Contract
err := shim.Start(new(SmartContract))
if err != nil {
fmt.Printf("Error creating new Smart Contract: %s", err)
}
}
As you can see, only the Invoke method is implemented, It takes a function name from the Invoke request message to perform different functionalities.
⇒ Interact with "fabcar" Chaincode on CLI
⇐ "fabric-nodeenv:latest not found" Error
2020-02-20, ∼2271🔥, 0💬
Popular Posts:
Tools, FAQ, Tutorials: JSON Validator JSON-XML Converter XML-JSON Converter JSON FAQ/Tutorials Pytho...
How To Get the Minimum or Maximum Value of an Array in PHP? If you want to get the minimum or maximu...
How To Pad an Array with the Same Value Multiple Times in PHP? If you want to add the same value mul...
What is Azure API Management Developer Portal? Azure API Management Developer Portal is an Azure Web...
How To Use an Array as a Queue in PHP? A queue is a simple data structure that manages data elements...