Твердость, элемент "передача" не найден или не виден после аргумента - PullRequest
0 голосов
/ 27 ноября 2018

Используя Solidity ^ 0.5.0, я на самом деле пытаюсь реализовать старый код, работающий в ^ 0.4.17, но он выдает ошибку в Remix.Я проверил синтаксис и все, но просто не могу понять, что не так.Любая помощь высоко ценится.

pragma solidity ^0.5.0;

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

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

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

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

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

Вот сообщение об ошибке:

browser / Lottery.sol: 22: 8: Ошибка типа: член "Transfer" не найден или не виден после аргумента-зависимый поиск по адресу.

Players [index] .transfer (address (msg.sender) .balance);

^ --------------------- ^

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

В первоначальной декларации отсутствует модификатор к оплате.Измените

адрес [] публичных игроков;

на

адрес, подлежащий оплате [] публичных игроков;

0 голосов
/ 27 ноября 2018

Пожалуйста, смотрите Твердость v0.5.0. Срочные изменения .

Как указано здесь :

Тип адреса был разбит наадрес и адрес, подлежащий оплате, где только адрес, подлежащий оплате, обеспечивает функцию передачи.

Подробнее см. мой ответ здесь .

Измените эту строку:

address[] public players;

На это:

address payable[] public players;

РЕДАКТИРОВАТЬ

Спасибо, smarx!?

...