code: func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
  	function, args := stub.GetFunctionAndParameters()
  	fmt.Println("invoke is running " + function)
  
  	// Handle different functions
  	if function == "initMarble" { //create a new marble
  		return t.initMarble(stub, args)
  	} else if function == "transferMarble" { //change owner of a specific marble
  		return t.transferMarble(stub, args)
  	} else if function == "transferMarblesBasedOnColor" { //transfer all marbles of a certain color
  		return t.transferMarblesBasedOnColor(stub, args)
  	} else if function == "delete" { //delete a marble
  		return t.delete(stub, args)
  	} else if function == "readMarble" { //read a marble
  		return t.readMarble(stub, args)
  	} else if function == "queryMarblesByOwner" { //find marbles for owner X using rich query
  		return t.queryMarblesByOwner(stub, args)
  	} else if function == "queryMarbles" { //find marbles based on an ad hoc rich query
  		return t.queryMarbles(stub, args)
  	} else if function == "getHistoryForMarble" { //get history of values for a marble
  		return t.getHistoryForMarble(stub, args)
  	} else if function == "getMarblesByRange" { //get marbles based on range query
  		return t.getMarblesByRange(stub, args)
  	} else if function == "getMarblesByRangeWithPagination" {
  		return t.getMarblesByRangeWithPagination(stub, args)
  	} else if function == "queryMarblesWithPagination" {
  		return t.queryMarblesWithPagination(stub, args)
  	}
  
  	fmt.Println("invoke did not find func: " + function) //error
  	return shim.Error("Received unknown function invocation")
  }
docs: // Invoke - Our entry point for Invocations
  // ========================================