false 交易已挖掘,但在 Remix IDE 中执行失败

问题描述 投票:0回答:3

我从合约中的构造函数中收到 false Transaction mined butexecution failed 错误。我只是将部署合约的地址保存在经理变量中,而不是向该帐户发送任何资金。

   // SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.20;

contract Lottery{
    address public manager;
    address[] public players;

    constructor() public {
        manager = msg.sender;
    }

    function enter()public payable{
        require(msg.value > 0.1 ether);
        players.push(msg.sender);
    }

//Random number generator function.
    function random()private view returns (uint){
        return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, players)));
    }

    function pickWinner()public{
        uint index = random() % players.length;
        address contractAddress = address(this);
        payable(players[index]).transfer(contractAddress.balance);
    }

}

在solidity v0.7之后,它说不需要构造函数的可见性,所以我尝试删除

public
可见性。我也尝试使用
payable
可见性
constructor()
但仍然遇到相同的错误。

ethereum solidity remix
3个回答
0
投票

确保evm(以太坊虚拟机)版本和VM(虚拟机)/环境相同。


0
投票

这种情况下的常见检查点是确保VM(虚拟机)/环境和EVM(以太坊虚拟机)版本应该相同


-1
投票

试试下面这个

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.20;

contract Lottery {
    address public manager;
    address[] public players;

    constructor() {
        manager = msg.sender;
    }

    function enter() public payable {
        require(msg.value > 0.1 ether);
        players.push(msg.sender);
    }

    // Random number generator function.
    function random() private view returns (uint) {
        return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, players)));
    }

    function pickWinner() public {
        uint index = random() % players.length;
        address payable winner = payable(players[index]);
        uint contractBalance = address(this).balance;
        winner.transfer(contractBalance);
        players = new address[](0); // Reset the player array for a new round
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.