code: func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
  	function, args := stub.GetFunctionAndParameters()
  	switch function {
  
  	case "putPrivate":
  		return t.putPrivate(stub, args)
  
  	case "removePrivate":
  		return t.removePrivate(stub, args)
  
  	case "getPrivate":
  		return t.getPrivate(stub, args)
  
  	case "keysPrivate":
  		return t.keysPrivate(stub, args)
  
  	case "queryPrivate":
  		return t.queryPrivate(stub, args)
  
  	case "put":
  		return t.put(stub, args)
  
  	case "remove":
  		return t.remove(stub, args)
  
  	case "get":
  		return t.get(stub, args)
  
  	case "keys":
  		return t.keys(stub, args)
  
  	case "keysByPage":
  		return t.keysByPage(stub, args)
  
  	case "query":
  		return t.query(stub, args)
  
  	case "queryByPage":
  		return t.queryByPage(stub, args)
  
  	case "history":
  		return t.history(stub, args)
  
  	case "getPut":
  		return t.getPut(stub, args)
  
  	case "getPutPrivate":
  		return t.getPutPrivate(stub, args)
  
  	default:
  		return shim.Error("Unsupported operation")
  	}
  }
docs: // Invoke has two functions
  // put - takes two arguments, a key and value, and stores them in the state
  // remove - takes one argument, a key, and removes if from the state