Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with constructor->send() function #351

Open
aerory opened this issue Mar 31, 2024 · 0 comments
Open

Issue with constructor->send() function #351

aerory opened this issue Mar 31, 2024 · 0 comments

Comments

@aerory
Copy link

aerory commented Mar 31, 2024

This is my solidity code:
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract CompanyData {
address public admin;
struct Data {
uint256 amount;
string amount_type;
string cid;
}

mapping(address => Data) public dataStore;

constructor() public {
    admin = msg.sender;
}

modifier onlyAdmin() {
    require(msg.sender == admin, "Only admin can call this function.");
    _;
}

function storeData(uint256 _amount, string memory _amount_type, string memory _cid) public onlyAdmin {
    Data storage data = dataStore[msg.sender];
    data.amount = _amount;
    data.amount_type = _amount_type;
    data.cid = _cid;
}

function getData() public view returns (uint256, string memory, string memory) {
    Data storage data = dataStore[msg.sender];
    return (data.amount, data.amount_type, data.cid);
}

}

//I will be calling the storeData() function in my Laravel Project
function storeData(Request $req)
{
$response = $this->addStatement($req);
$contractAddress = '0x998A16edcb330DA3bf9B00065dc9091870B20dc3';
$cid = $response->getData()->cid;
$amount = intval($req->input('amount'));
$amount_type = $req->input('amount_type');
$callback = function ($err, $result) {
if ($err !== null) {
print('failed to interact with the smart contract function: ' . $err);
return;
}
};

try {
  $store = $this->contract->at($contractAddress)->send('storeData', $amount, $amount_type, $cid, $callback);
} catch (Exception $e) {
  print('Error interacting with the smart contract: ' . $e->getMessage());
  return;
}
return redirect('/');

}
function addStatement(Request $request)
{
$data = $request->all(); // Retrieve all input data
$description = $request->input('description');
$key = env('ENCRYPTION_KEY');

// **Encryption Step:**
if ($description && $key) {
  $encryptedDescription = $this->encryptDataWithOpenSSL($description, $key);
} else {
  // Handle missing data or encryption key
  return response()->json(['error' => 'Description or encryption key missing'], 400);
}

// Check if encryption was successful
if (!isset($encryptedDescription)) {
  // Handle encryption failure
  return response()->json(['error' => 'Encryption failed'], 500);
}

try {

  $ipfs = new IPFS();
  //print("Connected to IPFS\n");

  // Attempt to add content to IPFS
  $result = $ipfs->add($encryptedDescription);
  if (!empty($result)) {
    $cid = $result;
    //print("Stored encrypted data on IPFS with CID: " . $cid . "\n");
    // dd($encryptedDescription, $description, $data['amount'], $data['amount_type'], $cid);
    // Return the CID as a response
    return response()->json(['cid' => $cid], 200);
  } else {
    // Print or log the error message
    print("Error storing data on IPFS: Unable to retrieve CID\n");
    print_r($result); // Print the result for further debugging

    // Handle failure to retrieve CID
    return response()->json(['error' => 'Unable to retrieve CID from IPFS'], 500);
  }
} catch (Exception $e) {
  // Print or log the error message
  print("Error connecting to IPFS: " . $e->getMessage() . "\n");

  // Handle connection error
  return response()->json(['error' => 'Error connecting to IPFS'], 500);
}

}
I wanted to store some data such as the amount, amount_type and CID onto the Ganache network by interacting with the smart contract which i have deployed onto the Ganache Blockchain, however, it kept prompting me "Wrong type of eth_sendTransaction method argument 0." but i think the way i call the contract->send() looks just find, Github Copilot suggest me to write my param like this "[$amount, $amount_type, $cid]", but if i do that, i will get this error stating "Please make sure you have put all function params and callback."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant