[Ethereum] address.transfer not working

ethereum-wallet-dappsolidityweb3js

pragma solidity ^0.4.23;

contract ApprovalContract {
address public sender;
address public receiver;

address public constant approver = 0x5AEDA56215b167893e80B4fE645BA6d5Bab767DE;

constructor() public {
// tbd
}
function deposit(address _receiver) external payable {
    require(msg.value > 0);
    sender = msg.sender;
    receiver = _receiver;
}

function viewApprover() external pure returns(address){
    return(approver);
}

function viewRe() external pure returns(address){
    return(receiver);
}


function approve() external payable{
    require(msg.sender == approver);

    receiver.transfer(address(this).balance); // this line not working

}
}

I am getting transfer variable not visible.

Member "transfer" not found or not visible after argument-dependent
lookup in address.

Best Answer

Use

address payable public receiver;

in declaration for the addresses you are looking to transfer Ether in contract. As per the solidity documentation:

The address type comes in two flavours, which are largely identical:

address: Holds a 20 byte value (size of an Ethereum address).

address payable: Same as address, but with the additional members transfer and send. The idea behind this distinction is that address payable is an address you can send Ether to, while a plain address cannot be sent Ether.

Related Topic