在 Remix 中部署合约期间无法传递值

Can't pass value during the contract deployment in Remix

我正在使用以下代码部署合约 Remix:

pragma solidity ^0.4.17;

contract Lottery {
    address public manager;
    address[] public players;
    
    function Lottery() public {
        manager = msg.sender;
    }

    function enter() public payable {
        require(msg.value > .01 ether);

        players.push(msg.sender);
    }
}

部署前没有输入任何值,部署成功,但如果我指定任何值,它会失败并出现以下错误:false Transaction mined but the execution failed.

This is the params I trying to deploy a contract with.

我该如何解决?

您收到此错误是因为 Lottery() 构造函数不可支付。当您在部署前输入一个值时,它会将 Wei 的值发送到 Lottery(),但 Lottery() 没有 payable 关键字,因此失败。

为了解决这个问题,我会在没有任何值参数的情况下部署合约,然后创建一个新函数,以便所有者可以设置彩票奖金的价值。我也会尝试用较新版本的 Solidity 编写它。