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, 1396🔥, 0💬
Popular Posts:
How to use "link" command tool to link objet files? If you have object files previously compiled by ...
Where to find tutorials on PHP language? I want to know how to learn PHP. Here is a large collection...
What is Azure API Management Gateway? Azure API Management Gateway is the Azure Web server that serv...
How to create the Hello-3.0.epub package? I have all required files to create Hello-3.0.epub. To cre...
How To Change Text Fonts for Some Parts of a Paragraph? If you want to change text fonts or colors f...