code: func (t *SimpleChaincode) transferMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response {
  
  	//   0       1
  	// "name", "bob"
  	if len(args) < 2 {
  		return shim.Error("Incorrect number of arguments. Expecting 2")
  	}
  
  	marbleName := args[0]
  	newOwner := strings.ToLower(args[1])
  	fmt.Println("- start transferMarble ", marbleName, newOwner)
  
  	marbleAsBytes, err := stub.GetState(marbleName)
  	if err != nil {
  		return shim.Error("Failed to get marble:" + err.Error())
  	} else if marbleAsBytes == nil {
  		return shim.Error("Marble does not exist")
  	}
  
  	marbleToTransfer := marble{}
  	err = json.Unmarshal(marbleAsBytes, &marbleToTransfer) //unmarshal it aka JSON.parse()
  	if err != nil {
  		return shim.Error(err.Error())
  	}
  	marbleToTransfer.Owner = newOwner //change the owner
  
  	marbleJSONasBytes, _ := json.Marshal(marbleToTransfer)
  	err = stub.PutState(marbleName, marbleJSONasBytes) //rewrite the marble
  	if err != nil {
  		return shim.Error(err.Error())
  	}
  
  	fmt.Println("- end transferMarble (success)")
  	return shim.Success(nil)
  }
docs: // ===========================================================
  // transfer a marble by setting a new owner name on the marble
  // ===========================================================