Working on this Udemy course for Ethereum and i keep getting the error mentioned in the title of the question.

For reference i have checked out the answers on questions: 1, 2 and 3. But the error persists.

The contract goes like this:

pragma solidity >=0.4.22 <0.6.0;

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

    constructor() public {
        manager = msg.sender;

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


    function random() private view returns (uint) {
        return uint(keccak256(abi.encodePacked(msg.sender, now, players)));

    function pickWinner() public {
        uint index = random() % players.length;
        players[index].transfer(address(this).balance); // Where the error happens

Using Remix Solidity compiler.

I am pretty sure this is some old version code error since the Solidity version used in the course is ^0.4. Can anyone guide me what am I missing here?


The error is because your players address needs to be payable, like that:

address payable[] public players;

If you update your code to Solidity version 0.6.0, you can convert from address to address payable via payable(x), like that:


From the docs:

Conversions from address to address payable are now possible via payable(x), where x must be of type address.

Not the answer you're looking for? Browse other questions tagged or ask your own question.