Using Solidity ^0.5.0, I'm actually trying to implement an old code working in ^0.4.17, but it throws an error on Remix. I checked syntax and everything but just can't catch what's wrong. Any help highly appreciated.
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);
}
}
Here is the error message:
browser/Lottery.sol:22:8: TypeError: Member "transfer" not found or not visible after argument-dependent lookup in address.
players[index].transfer(address(msg.sender).balance);
^---------------------^
players[index]
was already anaddress
, so casting it doesn't do anything. I believe the actual issue is that the type isaddress
rather thanaddress payable
. The fix would be to useaddress payable[] public players
. – Stratiform