在测试网上使用 Remix 部署合约时出现问题

Posted

技术标签:

【中文标题】在测试网上使用 Remix 部署合约时出现问题【英文标题】:Problem when deploying contract using Remix on Testnet 【发布时间】:2021-07-19 11:31:54 【问题描述】:

我尝试使用 Remix 将合约部署到测试网(所有测试网都返回相同的消息),但出现此错误:

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Internal JSON-RPC error.  "code": -32000, "message": "gas required exceeds allowance (30000000) or always failing transaction" 

但是当我尝试在 BSC 主网中部署它时,一切正常,没有错误。有什么建议吗?

这是相关代码

contract artemis is Context, IERC20, Ownable 
    // ...

    constructor() public 
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router =
            IUniswapV2Router02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F);
        // Create a Pancakeswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    

    // ...


我在这里上传整个代码,因为它太长了。

code

【问题讨论】:

请编辑您的问题并分享您的合约源代码。 “事务总是失败”是错误消息中更可能的原因。 【参考方案1】:
IUniswapV2Router02 _uniswapV2Router =
    IUniswapV2Router02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F);
// Create a Pancakeswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
    .createPair(address(this), _uniswapV2Router.WETH());

您的构造函数中的这些行正在尝试与主网上exists 的合约进行交互。但是你在测试网上,这个地址上有no contract。

如this post 中所述,Pancake 测试网路由器地址为0xD99D1c33F9fC3444f8101754aBC46c52416550D1。所以你需要把硬编码的地址换成这个。

【讨论】:

感谢您的帮助...我真的被困在这里...您能告诉我是否有办法在我部署后更改合同中的 maxTxAmount。 @marvin 我不确定maxTxAmount 你的意思。如果是带有setter函数的变量,可以执行setter函数来设置新值。如果它是一个常量(或没有 setter 函数的变量),则无法更改它,因为字节码在设计上是不可变的。 再次感谢您的回答.. uint256 public _maxTxAmount = 1000000000 * 106 * 109;我的意思是这个......我不认为这是一个常数......在合同中它看起来像这样 uint256 public _maxTxAmount = 5000000 * 106 * 109;我需要让它 uint256 public _maxTxAmount = 1000000000 * 106 * 109; ropsten网络还有另一个路由器地址吗?提前致谢 对于您的代码(发布到原始问题),您可以使用setMaxTxPercent() 函数影响_maxTxAmount。请注意,该函数具有onlyOwner 修饰符,因此您只能从owner 地址执行它... Pancakeswap 是开源的,因此很有可能存在另一个路由器实例,但我不知道任何一个。

以上是关于在测试网上使用 Remix 部署合约时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥合约是在 ropsten 上启动,而不是 BSC 测试网上的 remix?

Metamask + remix:在ropsten测试链上取出已经部署的合约并进行一些操作

如何使用remix验证已部署的合约(以Goerli测试网为例)

在测试网上部署 ERC-721 合约时,我得到了不切实际的低汽油费

区块链本地部署智能合约环境

在安全帽上部署合约或铸造 NFT 时出现错误:ProviderError: invalid sender