Remix部署FundMe合约遭遇VM revert错误求助
解决Remix部署FundMe合约时的revert错误
问题根源
你混淆了合约部署和调用fund函数两个操作的要求:
- 合约部署阶段:你的合约没有定义
payable的构造函数(Solidity默认构造函数非payable),所以部署时发送ETH会直接触发revert。 - 若部署时未发送ETH仍报错,大概率是操作时误将Value设为非0值,或者Remix环境缓存问题,但核心逻辑是部署阶段无需转ETH。
正确操作步骤
- 编译完
FundMe.sol后,切换到Remix的「Deploy & Run Transactions」面板。 - 将Value输入框设置为
0(或直接清空),点击「Deploy」按钮完成合约部署。 - 部署成功后,在已部署的合约实例中找到
fund函数,在对应的Value输入框中填入≥1ETH的金额(比如2ETH),点击fund按钮执行转账,此时会触发合约中的require校验,金额符合要求即可成功执行。
额外说明
如果需要在部署合约时就接收ETH,需显式添加payable构造函数:
//SPDX-License-Identifier: MIT pragma solidity ^0.8.18; contract FundMe { // 允许部署时接收ETH的构造函数 constructor() payable {} function fund() payable public{ require(msg.value > 1e18, "don't have enough ETH"); } }
但根据你的合约逻辑,仅需在调用fund时发送ETH,所以无需添加这段代码。
内容的提问来源于stack exchange,提问作者Maulik Beladiya
相关产品推荐
相关产品推荐

