Как исправить исключение <address>.transfer: членский перевод не найден? - PullRequest
0 голосов
/ 24 декабря 2018

этот код работает на версии 0.4.24 на remix, но не на версии 0.5.0+, я также пытался скомпилировать его с трюфелем в Windows 10, что также дает исключение.

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() подлежащим оплате, но это не исправило ошибку

1 Ответ

0 голосов
/ 24 декабря 2018

Слава Богу, я нашел то, что мне не хватало.С точки зрения надежности 0.5.3: тип адреса доступен в двух вариантах: адрес и адрес, подлежащий оплате : такой же, как адрес, но с дополнительными членами, которые передают и отправляют. введите описание ссылки здесь

создайте "массив игроков с адресной платой", например addressable [] public Players;также измените тип возвращаемых данных getPlayers () на адреса игроков []

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...