TypeError:“发送”和“转账”仅适用于“应付地址”类型的对象,不适用于“地址” admin.transfer(address(this).balance);

Пиз*_*тор 4 solidity

function endSale() public {
        require(msg.sender == admin);
        require(tokenContract.transfer(admin, tokenContract.balanceOf(address(this))));


        admin.transfer(address(this).balance);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误行 ---> admin.transfer(address(this).balance);

有人可以帮我吗,谢谢

Pet*_*jda 16

地址文字具有类型address而不是address payable. 它们可以address payable通过使用显式转换来转换,例如payable(0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF)

来源:Solidity v0.8.0 重大变更

这意味着,从 Solidity 0.8 开始,address就不是payable默认的了。而如果你想给它发送本币,你需要payable先把它投到。

例子:

payable(admin).transfer(address(this).balance);
Run Code Online (Sandbox Code Playgroud)