I’m trying to interface with my tested (in Remix) and working contract in a browser now but cannot understand how to send additional arguments with a payable function.
I need to pass an argument userTeamChosen
with a appendUserBet()
function which I both set the values for through html forms but get this error Error: cannot estimate gas; transaction may fail or may require manual gas limit and have no idea whether im sending the argument correctly or not.
index.html:
<body> <label for="fund">ETH Amount</label> <input id="ethAmount" placeholder="0.1" /> <input id="betTeam" placeholder="Team name" /> <button type="button" id="appendBetButton"> appendBetButton </button> </body> <script src="./index.js" type="module"></script>
smart contract function:
function appendUserBet(string memory userTeamChosen) public payable { uint256 minimumFee = 1 * 10**17 wei; userList.push(payable(msg.sender)); require(msg.value >= minimumFee); fee = msg.value; userStructs[msg.sender].betAmount += msg.value; userStructs[msg.sender].teamChosen = userTeamChosen; }
and this is where I interact with it in index.js:
async function appendUserBet() { const ethAmount = document.getElementById("ethAmount").value console.log(`Funding with ${ethAmount}...`) if (typeof window.ethereum !== "undefined") { const provider = new ethers.providers.Web3Provider(window.ethereum) const signer = provider.getSigner() const contract = new ethers.Contract(contractAddress, abi, signer) try { const transactionResponse = await contract.appendUserBet({ value: ethers.utils.parseEther(ethAmount), userTeamChosen: "sab", gasLimit: 50000 }) await listenForTransactionMine(transactionResponse, provider) } catch (error) { console.log(error) } } else { appendBetButton.innerHTML = "Please install MetaMask" } }
Can somebody please let me know how to add the needed string argument to a payable function in a js interface with ethers?
Thanks alot for your time in advance!