概要

コントラクトからETHを安全に送金するための完全ガイド。transfer, send, callの3つの方法を比較し、なぜ.call{value:...}が現在のベストプラクティスなのかを解説します。
同時に、callが内包するリエントランシー攻撃の深刻なリスクと、それを完全に防ぐための絶対的な設計規則「Checks-Effects-Interactions」を学習。ユーザーの資産を守るための必須知識が身につきます。
-
-
Solidity学習講座:最終版 目次(全20話)
基礎編 第1話:未来のインターネットへようこそ!Solidityとスマートコントラクトの全体像 第2話:準備は1分!ブラウザだけで開発できる「Remix IDE」の基本操作 第3話:記念すべき初コント ...
続きを見る
はじめに
第12話で、あなたは「継承」という強力な武器を手に入れ、コードの再利用性と構造を劇的に改善しました。OpenZeppelinのようなライブラリを継承すれば、安全なOwnable
コントラクトなどを簡単に実装できますね。
そして第11話では、payable
修飾子を使い、あなたのコントラクトがユーザーからETHを受け取る方法を学びました。これにより、あなたのコントラクトはaddress(this).balance
に、ユーザーから預かった資産を保持できるようになりました。
ここで当然、次のステップが待っています。それは、**「コントラクトに保管されたETHを、外部のアドレスへ安全に送金する」**方法です。
ユーザーからの出金リクエストに応える、クラウドファンディングで集めた資金をプロジェクトオーナーに渡す、NFTの売上をクリエイターに支払う…。これらすべての行為は、コントラクトからのETH送金機能がなければ成り立ちません。
今回は、SolidityでETHを送金するための3つの方法 (transfer
, send
, call
) を学びます。しかし、ただ使い方を学ぶだけではありません。それぞれの方法が持つセキュリティ上の意味合いと、特に現代のスマートコントラクト開発で絶対に守るべき設計パターンについて、深く理解していただきます。ユーザーの資産を守れるかどうかは、このレッスンにかかっていると言っても過言ではありません。