[英]How to force smart contract to accept ether when deployed on Polygon chain
[英]How To Accept Payment In WETH When The Contract Is Deployed on Polygon (Mumbai/Mainnet)?
我正在构建一个问答游戏支付系统,用户可以在其中支付价值 5 美元的 ETH 来玩。 下面是一份合同和我认为我遇到麻烦的地方
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract Trivia is Ownable { IERC20 public WETHContract; uint256 playingFee = 440000000000000; // 0.00044 ether; // ~ $5 USD / 440000 GWei / 440000000000000 Wei constructor(IERC20 _LinkContract) public payable { WETHContract = _WETHContract; } receive() external payable { // what to do when receiving funds... } function payToPlay() public payable { require(WETHContract.transferFrom( msg.sender, address(this), playingFee ), "You do not have enough WETH To Pay" ); // (bool sent, ) = payable(address(this)).call{value: playingFee}(""); // require(sent, "Failed to send fee"); } }
部署脚本
const Trivia = artifacts.require("Trivia"); const WETHContractMumbaiTes.net = "0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa" module.exports = async (deployer,.networks, accounts) => { await deployer.deploy(Trivia, WETHContractMumbaiTes.net); }
我能够编译合同并在孟买 tes.net 上成功部署它。
但是当我尝试与Remix
IDE 中的合约交互时(在连接到 Metamask 并切换到 Mumbai tes.net 之后),为了付费玩游戏,我收到以下错误:
Gas 估计错误。 我不知道我做错了什么。 我确保我的钱包里有足够的 WETH。 我什至换了另一个代币(LINK)并尝试用 LINK 代币支付,但没有成功。
请专业人士告诉我我做错了什么。 我已经坚持了好几天了。
友好地,
您是否批准了代币转移,调用了WEth
合约上的approve
方法?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.