【问题标题】:My contract is failing ether transactions but receiving ERC20 tokens我的合约未能通过以太币交易但收到 ERC20 代币
【发布时间】:2020-07-07 11:02:26
【问题描述】:

我试图通过元掩码支付合约地址并让它调用 buyTokens 函数,但交易一直失败。合约有足够的代币余额,因为我通过元掩码成功地将 ERC20 代币发送到了合约地址。只有当我将以太币发送到合约地址时,它才会失败。我尝试了默认的气体限制,并尝试在 metamask 中将气体设置为 200000。请帮帮我。

我在本地主机 genache 上运行

pragma solidity ^0.5.0;

import "./Token.sol";

// rate is 1 token = 0.01 ether

contract Crowdsale {

    constructor() public {
        rate = 100;
        on = true;
    }

    Token public token;
    address payable wallet;
    uint256 public rate;
    bool on;

    event TokenPurchase(address recipient, uint256 numPaid, uint256 numTokensPurchased);

    function buyTokens() public payable {
        
        require(msg.value > 0 && on == true);
        uint256 tokenAmount = _getTokenAmount(msg.value);
        require(token.balanceOf(address(this)) >= tokenAmount);
        token.transfer(msg.sender, tokenAmount);
        emit TokenPurchase( msg.sender, msg.value, tokenAmount);

    }
    
    function () external payable{
        buyTokens();
    }

【问题讨论】:

    标签: ethereum solidity erc20


    【解决方案1】:

    尝试直接拨打buyTokensfallback功能只能依赖2300gas可用,不足以调用buyTokens

    https://solidity.readthedocs.io/en/v0.5.0/contracts.html?highlight=fallback#fallback-function

    【讨论】:

    • 不是这样。我已经尝试了所有功能,但都失败了。它与未在 Crowdsale 合约中实例化的代币合约有关。我添加了“代码”函数 test() 公共视图返回(uint){ balanceOf(msg.sender); }'code' 但会引发错误,但是当我从 truffle 的令牌合约中执行 balanceOf() 时,它可以工作
    • 你在哪里用地址初始化tokenlang-js Token public token;
    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2020-01-23
    • 2022-01-01
    • 2022-09-27
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多