简体   繁体   中英

Web3.eth.abi.encodeFunctionCall Is not working

I'm creating a dapp that charges users a specific amount of eth depending on their input.

Whenever I attempt to create the transaction, I specify the amount of Eth in Wei. It throws an Error with no description as to why it couldn't fulfill the transaction

Error: Error Minting New NFT at MintNewNFT (Transactions.js:68) at Object.onClick (index.js:62)

(Line 62 is the catch block)

AmountIn is 0.02166 ETH

Here is my code:

 export const MintNewNFT = async (WalletABI,address, network, mediaID, amountIn) => {

  try {
    
    
    //adjust this to take an argument for media id
    
    const web3 = new Web3('https://rinkeby.infura.io/v3/key');
    const weiValue = Web3.utils.toWei(amountIn.toString(), 'ether');
    console.log(weiValue , mediaID);
    
    const transactionParameters = {
      to: WalletABI._address, // Required except during contract publications.
      from: address, // must match user's active address.
      value: weiValue.toString(), 
      data: web3.eth.abi.encodeFunctionCall(    
        {
          "inputs": [
          {
            "internalType": "bytes32",
            "name": "mediaID",
            "type": "bytes32"
          }
        ],
        "name": "mintNewNFT",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function",
        "payable": true
        
      },[mediaID]),
      chainId: `0x${network}`, // Used to prevent transaction reuse across blockchains. Auto-filled by MetaMask.
    };
    
  
    
    // txHash is a hex string
    // As with any RPC call, it may throw an error
    await window.ethereum.request({
      method: 'eth_sendTransaction',
      params: [transactionParameters],
    }).then((result) => {

      // The result varies by by RPC method.
      // For example, this method will return a transaction hash hexadecimal string on success.

      console.log(`Transaction Result ${result}`)


    })
    .catch((error) => {
      // If the request fails, the Promise will reject with an error.

      console.log(`Transaction ERROR :  ${error.message}`)
    });

    

} catch (error) {
    throw Error("Error Minting New NFT", error)
}
}

Any indication as to what I may be doing wrong would be very much appreciated

Well.... I fixed my issue. Turns out it was failing because i was using a bytes32 instead of a string for the argument. i cant really explain why this happened incase anyone else can

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM