mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
basic-network: - moved "crypto-config" to top-level and removed "network" folder - added generate.sh to re-gen crypto materials - docker-compose.yaml to ref v1.0.0 images - add CLI to docker-compose - start.sh to only start CA, orderer, peer and couch - startFabric.sh to run start.sh, then launch CLI for create channel, install, instantiate, invoke fabcar: - moved chaincode to central chaincode folder - moved "creds" to top-level and removed "network" folder - changed to use the basic-network as the target and removed docker-compose.yaml and crypto-config - updated package.json to require v1.0.0 modules - added missing license headers - restructured to use a central chaincode subdirectory Change-Id: Ic784d1cf55ea51da5155624f3c38275883de1dca Signed-off-by: Christopher Ferris <chrisfer@us.ibm.com> Signed-off-by: Nick Gaski <ngaski@us.ibm.com> Signed-off-by: Jim Zhang <jzhang@us.ibm.com>
97 lines
2.8 KiB
Go
97 lines
2.8 KiB
Go
/*
|
|
* Copyright IBM Corp All Rights Reserved
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hyperledger/fabric/core/chaincode/shim"
|
|
"github.com/hyperledger/fabric/protos/peer"
|
|
)
|
|
|
|
// SimpleAsset implements a simple chaincode to manage an asset
|
|
type SimpleAsset struct {
|
|
}
|
|
|
|
// Init is called during chaincode instantiation to initialize any
|
|
// data. Note that chaincode upgrade also calls this function to reset
|
|
// or to migrate data.
|
|
func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response {
|
|
// Get the args from the transaction proposal
|
|
args := stub.GetStringArgs()
|
|
if len(args) != 2 {
|
|
return shim.Error("Incorrect arguments. Expecting a key and a value")
|
|
}
|
|
|
|
// Set up any variables or assets here by calling stub.PutState()
|
|
|
|
// We store the key and the value on the ledger
|
|
err := stub.PutState(args[0], []byte(args[1]))
|
|
if err != nil {
|
|
return shim.Error(fmt.Sprintf("Failed to create asset: %s", args[0]))
|
|
}
|
|
return shim.Success(nil)
|
|
}
|
|
|
|
// Invoke is called per transaction on the chaincode. Each transaction is
|
|
// either a 'get' or a 'set' on the asset created by Init function. The Set
|
|
// method may create a new asset by specifying a new key-value pair.
|
|
func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
|
|
// Extract the function and args from the transaction proposal
|
|
fn, args := stub.GetFunctionAndParameters()
|
|
|
|
var result string
|
|
var err error
|
|
if fn == "set" {
|
|
result, err = set(stub, args)
|
|
} else { // assume 'get' even if fn is nil
|
|
result, err = get(stub, args)
|
|
}
|
|
if err != nil {
|
|
return shim.Error(err.Error())
|
|
}
|
|
|
|
// Return the result as success payload
|
|
return shim.Success([]byte(result))
|
|
}
|
|
|
|
// Set stores the asset (both key and value) on the ledger. If the key exists,
|
|
// it will override the value with the new one
|
|
func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {
|
|
if len(args) != 2 {
|
|
return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value")
|
|
}
|
|
|
|
err := stub.PutState(args[0], []byte(args[1]))
|
|
if err != nil {
|
|
return "", fmt.Errorf("Failed to set asset: %s", args[0])
|
|
}
|
|
return args[1], nil
|
|
}
|
|
|
|
// Get returns the value of the specified asset key
|
|
func get(stub shim.ChaincodeStubInterface, args []string) (string, error) {
|
|
if len(args) != 1 {
|
|
return "", fmt.Errorf("Incorrect arguments. Expecting a key")
|
|
}
|
|
|
|
value, err := stub.GetState(args[0])
|
|
if err != nil {
|
|
return "", fmt.Errorf("Failed to get asset: %s with error: %s", args[0], err)
|
|
}
|
|
if value == nil {
|
|
return "", fmt.Errorf("Asset not found: %s", args[0])
|
|
}
|
|
return string(value), nil
|
|
}
|
|
|
|
// main function starts up the chaincode in the container during instantiate
|
|
func main() {
|
|
if err := shim.Start(new(SimpleAsset)); err != nil {
|
|
fmt.Printf("Error starting SimpleAsset chaincode: %s", err)
|
|
}
|
|
}
|