【问题标题】:How to fix <address>.transfer exception : member transfer not found?如何修复 <address>.transfer 异常:找不到成员转移?
【发布时间】:2018-12-24 14:52:36
【问题描述】:

此代码在 remix 版本 0.4.24 上运行,但不在 0.5.0+ 版本上运行,我还尝试在 Windows 10 上使用 truffle 编译它,这也给出了异常。

pragma solidity ^0.5.0;

contract lottery {

    address public manager;
    address[] public players;

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

    modifier restricted(){
        require(msg.sender == manager);
        _;
    }

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

    function random() public view returns(uint) {
        return uint(keccak256(abi.encodePacked(block.difficulty,now,players)));
    }

    function pickWinner() public restricted{

        uint index = random() % players.length;
        address winner = players[index];
        players = new address[](0);

        winner.transfer(address(this).balance);
    }

    function getPlayers() public view returns(address[] memory){
        return players;
    }  
} 

winner.transfer(address(this).balance); 不工作。我还支付了pickWinner(),但这并没有解决错误

【问题讨论】:

    标签: solidity truffle remix


    【解决方案1】:

    感谢上帝,我找到了我缺少的东西。 在solidity 0.5.3中: 地址类型有两种形式,addressaddresspaid:与地址相同,但有额外的成员传输和发送。 enter link description here

    创建“玩家的应付地址数组” 例如地址 payable[] 公共玩家; 还将 getPlayers() 返回数据类型更改为地址 player[]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2021-12-29
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多