問題一覧に戻る
中級実践的な機能
問題68: アドレス型のメソッド
Solidityのアドレス型メソッドを学習します - アカウントと残高との相互作用です。balanceプロパティはwei単位でETH量を返します。現代のベストプラクティスはcall{value: amount}(')を使用した柔軟なETH転送です。レガシーメソッドのtransfer/sendは2300ガス制限があり、コントラクト受信者には不適切です。transferは失敗時にリバート、sendはfalseを返します。address(this)は現在のコントラクトを参照。これらのメソッドとその進化の理解は安全な決済システム構築に基本的です。本番コードでは常にcallを使用してください。
pragma solidity ^0.8.0;
contract AddressMethods {
// 現代的なETH転送アプローチ
function withdraw(address payable to) public {
// コントラクト残高を取得
uint256 amount = address(this).;
// ETH転送にcallを使用(推奨)
(bool success, ) = to.("");
require(success, "Transfer failed");
}
// レガシーメソッド(非推奨)
function legacySend(address payable to) public returns (bool) {
return to.(1 ether);
}
receive() external payable {}
}