在测试网上使用 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测试网为例)