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, 1301👍, 0💬
Popular Posts:
How to add images to my EPUB books Images can be added into book content using the XHTML "img" eleme...
How to start Visual Studio Command Prompt? I have Visual Studio 2017 Community version with Visual C...
How to use .NET CLR Types in Azure API Policy? By default, Azure imports many basic .NET CLR (Common...
How to use the "send-one-way-request" Policy statement to call an extra web service for an Azure API...
Why am I getting this "Docker failed to initialize" error? After installing the latest version of Do...