The chaincode interface
Every chaincode must implement the Chaincode interface, whose methods are called in response to the received transaction proposals. The Chaincode interface defined in the SHIM package is shown in the following listing:
type Chaincode interface { Init(stub ChaincodeStubInterface) pb.Response Invoke(stub ChaincodeStubInterface) pb.Response }
As you can see, the Chaincode type defines two functions: Init and Invoke.
Both functions have a single argument, stub, of the type ChaincodeStubInterface.
The stub argument is the main object that we will use when implementing the chaincode functionality, as it provides functions for accessing and modifying the ledger, obtaining invocation arguments, and so on.
Additionally, the SHIM package provides other types and functions in order to build chaincodes; you can inspect the whole package at: https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim.