ホームに戻る
Solidity コース
Ethereumスマートコントラクト開発のためのSolidityを実践的に学びましょう
初
初級
無料で学習可能
初級基本構文
問題1: pragma宣言
Solidityプログラムの最初に記述するpragma宣言について学びます。pragmaディレクティブは、コンパイラに対してソースコードの処理方法を指示します。バージョン指定は、異なるコンパイラバージョン間での非互換性による問題を防ぐために重要です。^0.8.0のような記法は、0.8.0以上0.9.0未満のバージョンを許可することを意味します。適切なバージョン管理により、スマートコントラクトの安全性と互換性が保たれます。
初級基本構文
問題2: コントラクト定義
Solidityでスマートコントラクトを定義する方法を学びます。contractキーワードを使用して新しいコントラクトを作成します。コントラクト名はPascalCase(各単語の最初の文字を大文字)で記述するのが慣例です。適切な命名によりコードの可読性と保守性が向上します。この空のコントラクトは、状態変数や関数などの機能を追加するための基盤となります。
初級基本構文
問題3: 状態変数の宣言
Solidityで状態変数を宣言する方法を学びます。状態変数はブロックチェーン上のコントラクトストレージに永続的に保存されます。各変数には型宣言が必要です。一般的な型にはuint256(符号なし整数)、string(テキスト)、bool(真偽値)があります。変数はデフォルト値で初期化できます。状態変数はコントラクトの永続的なデータを表すため、理解が不可欠です。
初級データ型
問題4: 整数データ型
Solidityの整数型について学びます。符号なし整数(uint)と符号付き整数(int)の違いを理解しましょう。符号なし整数は正の値のみ、符号付き整数は正負両方の値を格納できます。ビット数(uint8からuint256)を指定してストレージを最適化できます。uintとuint256、intとint256は同等です。適切なサイズを選ぶことでガスコストを節約できます。
初級データ型
問題5: 真偽値データ型
Solidityのブール(bool)型について学びます。ブール変数はtrueまたはfalseの2つの値のみを格納できます。初期化されていないブール変数のデフォルト値はfalseです。ブール値はフラグ、権限、状態追跡によく使用されます。整数より少ないストレージを消費し、スマートコントラクトの条件ロジックに不可欠です。
初級データ型
問題6: アドレスデータ型
Solidityのaddress型について学びます。アドレスは20バイトのイーサリアムアカウントアドレスを表します。外部所有アカウント(EOA)とコントラクトアドレスの両方を保持できます。デフォルト値はゼロアドレス(0x0)です。アドレスはEtherの送金や他のコントラクトとの相互作用に不可欠です。ゼロアドレスへの送金を避けるため、常にアドレスを検証しましょう。
初級基本構文
問題7: 定数と不変変数
Solidityのconstantとimmutable変数について学びます。constant変数はコンパイル時に初期化され、変更できません。immutable変数はデプロイ時(コンストラクタ内)に一度だけ設定でき、その後は読み取り専用になります。どちらもストレージスロットを使用しないため、通常の状態変数と比較して大幅なガスコスト削減になります。コンパイル時に分かる値にはconstant、デプロイ時に決まる値にはimmutableを使用します。
初級関数
問題8: 関数定義の基礎
Solidityで関数を定義する方法を学びます。関数はfunctionキーワードで宣言し、名前、パラメータ、可視性、オプションの戻り値を指定します。public関数は内部からも外部からも呼び出し可能です。関数は状態変数を変更したり、値を返したりできます。対話的なスマートコントラクトを構築するには、関数構造の理解が不可欠です。
初級関数
問題9: view関数
Solidityのview関数について学びます。view関数はコントラクトの状態を変更しないことを約束します - 状態変数の読み取りと値の返却のみ可能です。外部から呼び出された場合、view関数はガスを消費しません(無料読み取り)。ゲッター関数やデータクエリに最適です。view関数は状態変数の変更、イベントの発行、非view関数の呼び出しはできません。
初級関数
問題10: pure関数
Solidityのpure関数について学びます。pure関数は状態の読み取りも変更もしないことを約束します - パラメータのみを使用して計算を行います。view関数よりさらに制限が厳しいです。pure関数はユーティリティ関数、数学的計算、データ変換に最適です。view関数と同様に、pure関数の外部呼び出しはガスを消費しません。
初級基本構文
問題11: 算術演算子
Solidityの算術演算子について学びます。Solidityは標準的な数学演算をサポートします:加算(+)、減算(-)、乗算(*)、除算(/)、剰余(%)、累乗(**)。Solidity 0.8.0以降、オーバーフローとアンダーフローの保護が組み込まれ、算術演算がより安全になりました。ゼロ除算はトランザクションをリバートします。これらの演算子の理解は、スマートコントラクトでの金融計算に不可欠です。
初級基本構文
問題12: 比較演算子
Solidityの比較演算子について学びます。これらの演算子は値を比較し、真偽値を返します:等しい(==)、等しくない(!=)、より大きい(>)、より小さい(<)、以上(>=)、以下(<=)。比較演算子は数値、アドレス、その他の比較可能な型で動作します。スマートコントラクトの条件ロジック、検証、アクセス制御に不可欠です。
初級基本構文
問題13: 論理演算子
Solidityの論理演算子を学習します。これらの演算子はブール値を扱います:AND(&&)は両方の条件が真の場合のみtrueを返し、OR(||)は少なくとも1つの条件が真の場合にtrueを返し、NOT(!)はブール値を反転させます。Solidityは短絡評価を使用します - &&では最初の条件がfalseの場合、2番目は評価されません。||では最初がtrueの場合、2番目は評価されません。これらの演算子はスマートコントラクトの複雑な条件ロジックに不可欠です。
初級基本構文
問題14: ビット演算子
Solidityのビット演算子を学習します。これらの演算子はビットレベルで動作します:&(AND)、|(OR)、^(XOR)、~(NOT)、<<(左シフト)、>>(右シフト)。ビット演算は数値の2進表現に対して実行されます。フラグ、権限管理、最適化された計算に非常に効率的で便利です。左シフトは2の累乗で乗算し、右シフトは2の累乗で除算します。これらの演算子はガス効率の良いスマートコントラクト開発に不可欠です。
初級基本構文
問題15: require文
Solidityのrequire文を学習します。requireは条件を検証し、条件が満たされない場合にトランザクションをリバートするために使用されます。入力検証、アクセス制御、コントラクトの状態整合性を確保するための主要な方法です。トランザクションが失敗した理由をユーザーが理解できるようにカスタムエラーメッセージを提供できます。require文は失敗時点までのガスを消費しますが、残りのガスは返金されます。安全でユーザーフレンドリーなスマートコントラクトの構築に不可欠です。
初級基本構文
問題16: assert文
Solidityのassert文を学習します。assertは内部エラーチェックと、決してfalseになってはいけない不変条件の検証に使用されます。requireとは異なり、assertはコード内のバグやロジックエラーを捕捉するためのものです。assertが失敗すると、残りのガスをすべて消費し、深刻な問題を示します。コードが正しければ常に真となるべき条件、例えば数学的不変条件や操作後の状態整合性チェックにassertを使用します。
初級基本構文
問題17: revert文
Solidityのrevert文を学習します。revertは現在のトランザクションを明示的にリバートし、すべての状態変更を元に戻します。エラーメッセージ付きまたはなしでrevertを使用できます。requireよりも細かい制御が必要な複雑な条件ロジックで便利です。revertはrequireと同様に残りのガスを返金します。複数の条件で異なるエラーメッセージが必要なif-else文やスイッチのようなパターンでよく使用されます。
初級基本構文
問題18: コメント
Solidityでコメントを書く方法を学習します。コメントはコードのドキュメント化に不可欠で、コントラクトの実行には影響しません。Solidityは2種類をサポート://を使った単一行コメントと/* */を使った複数行コメントです。コメントは複雑なロジックの説明、関数の目的の文書化、コードの保守性向上に役立ちます。NatSpecコメント(/** */)はドキュメント生成用の特別なコメントです。良いコメント習慣はチーム協力と将来のコード保守に重要です。
初級データ型
問題19: 固定長配列
Solidityの固定長配列を学習します。固定配列はtype[size]構文を使用してコンパイル時にサイズが決定されます。サイズが既知のため動的配列よりもガス効率的です。値で初期化するか、デフォルト値(数値は0、boolはfalse)のままにできます。固定配列は必要な要素数が正確にわかっている場合、例えば固定数の管理者や事前定義された設定値の保存に最適です。
初級データ型
問題20: 動的配列
Solidityの動的配列を学習します。動的配列はtype[]構文を使用して実行時にサイズを変更できます。末尾に要素を追加するpush()と最後の要素を削除するpop()をサポートします。動的配列はデフォルトでストレージに保存され、コンパイル時に要素数が不明な場合に便利です。ユーザー登録、取引履歴、トークン保有者など、増減するリストに不可欠です。
初級データ型
問題21: 配列の長さと要素アクセス
Solidityで配列の長さと要素アクセスの操作を学習します。.lengthプロパティは配列内の要素数を返します。要素は角括弧[index]を使用したゼロベースのインデックスでアクセスされます。範囲外のインデックスにアクセスするとリバートが発生します。個々の要素の読み取りと更新ができます。配列操作の理解はスマートコントラクトでデータのコレクションを効率的に管理するために重要です。
初級データ型
問題22: bytes型
Solidityのbytes型を学習します。固定サイズのbytes配列(bytes1からbytes32)は、生のバイトデータを効率的に格納する値型です。ハッシュ、暗号化データ、または固定長のバイナリデータの保存に最適です。bytes型は固定サイズデータに対して動的配列よりもガス効率的です。配列記法を使用して個々のバイトにアクセスできます。低レベルデータ、暗号操作、ストレージコストの最適化にbytesの理解は重要です。
初級データ型
問題23: string型
Solidityのstring型を学習します。文字列はテキストデータを格納するためのUTF-8エンコードされた文字の動的配列です。他の言語と異なり、Solidityの文字列は連結や比較などのネイティブ操作をサポートしません。関数の文字列パラメータにはmemoryキーワードが必要です。文字列は参照型で、単純なデータに対してはbytesより高価です。スマートコントラクトでユーザー向けメッセージ、名前、人間が読めるテキストに不可欠です。
初級データ型
問題24: mapping基礎
Solidityのmappingを学習します。mappingはハッシュテーブルや辞書に似たキーと値のデータ構造です。定数時間での検索を提供し、mapping(keyType => valueType)として宣言されます。キーはmapping、構造体、配列を除く任意の組み込み型が可能です。すべての可能なキーはデフォルト値(数値は0、boolはfalse)で存在します。アドレスと残高の関連付けなど、データの関連付けに不可欠で、ほとんどのスマートコントラクトの基本です。
初級データ型
問題25: mappingの操作
Solidityでmappingの操作を学習します。mappingはO(1)の検索時間でキーと値の格納を提供します。ブラケット記法を使用した値の設定は簡単です。値の取得は、設定された値またはデフォルト値を返します。デフォルト値の理解は重要です - マップされていないキーはエラーを投げず、型のデフォルト(数値は0、boolはfalse、文字列は空)を返します。この動作は存在確認やmapping状態に基づくロジック実装に重要です。
初級基本構文
問題26: delete演算子
Solidityのdelete演算子を学習します。deleteは変数をデフォルトの初期値にリセットします - undefinedやnullではありません。基本型では:数値は0、boolはfalse、アドレスは0x0になります。配列では、deleteは要素を削除しますが配列の長さは変わらず、ギャップを残します。mappingでは、deleteは特定のキーをデフォルト値にリセットします。deleteはストレージのクリアにガス効率的で、適切な状態管理とクリーンアップ操作に不可欠です。
初級基本構文
問題27: 型変換(キャスト)
Solidityの型変換(型キャスト)を学習します。異なる型間での明示的な型変換はtype(value)構文を使用して必要です。大きい型から小さい型(uint256からuint8)への変換時、データが切り捨てられる可能性があり、最下位ビットのみが保持されます。小さい型から大きい型への変換は安全です。一般的な変換には異なるuintサイズ間、アドレス型、bytes型が含まれます。キャストの理解は相互運用性とデータ損失の防止に重要です。
初級関数
問題28: 関数の可視性
Solidityの関数可視性修飾子を学習します。これらは関数を呼び出せる人を制御します:public(誰でも)、external(外部からのみ)、internal(このコントラクトと派生)、private(このコントラクトのみ)。可視性はセキュリティとガス最適化に重要です。external関数は外部呼び出しでpublicよりガス効率的です。internalとprivate関数はロジックをカプセル化します。可視性の理解は適切なアクセス制御を確保し、スマートコントラクトでの不正な関数呼び出しを防ぎます。
初級関数
問題29: 関数の戻り値
Solidityで関数から値を返す方法を学習します。returnsキーワードは関数が返す型を宣言します。return文を使用して実際の値を提供します。関数はuint、bool、string、address、カスタム型を含む任意の型を返せます。viewとpure関数は有用であるために戻り値を持つ必要があります。戻り値はゲッター関数、計算、状態クエリに不可欠です。returnsの理解は有用なコントラクトインターフェースの作成の基本です。
初級関数
問題30: 複数の戻り値
Solidityで関数から複数の値を返す方法を学習します。関数はタプル - 括弧内の複数の値を返せます。明確さのために名前付き戻り値を使用 - 変数はreturns句で宣言され自動的に返されます。名前付き戻り値は割り当て可能なローカル変数として機能します。複数の戻り値は関連データを返すゲッター、複数の結果を計算する関数、データ取得をバッチ処理してガスコストを削減するのに便利です。このパターンはDeFiプロトコルで一般的です。
初級関数
問題31: payable修飾子
Solidityのpayable修飾子を学習します。関数がEtherを受け取るにはpayableマークが必要です。payableなしでは、関数へのEther送信は失敗します。msg.valueグローバル変数はトランザクションで送信されたWeiの量を含みます。payable関数は支払い処理、クラウドファンディング、オークション、または金融操作を扱うコントラクトの作成に不可欠です。payableの理解はDeFiアプリケーションとEtherを管理するコントラクトの構築に重要です。
初級基本構文
問題32: コンストラクタ
Solidityのコンストラクタを学習します。constructor関数はコントラクトがデプロイされるときに一度だけ実行されます。状態変数の初期化、コントラクトオーナーの設定、または一度だけのセットアップの実行に使用されます。コンストラクタはデプロイ時に渡されるパラメータを持てます。デプロイ後、コンストラクタは再度呼び出せません。不変値の設定、初期状態の構成、所有権の確立によく使用されます。コンストラクタの理解は適切なコントラクト初期化に不可欠です。
中
中級
無料で学習可能
中級データ型
問題33: 構造体(struct)定義
Solidityの構造体を学習します - 関連データをグループ化するカスタムデータ型です。構造体は異なる型の複数の変数を単一のユニットに結合して複雑なデータ型を作成できます。データの整理、コードの可読性向上、ユーザー、製品、トランザクションなどの現実世界のエンティティのモデル化に不可欠です。構造体は他の構造体、配列、マッピング(制限付き)を含む任意のデータ型を含むことができます。構造体の理解は洗練されたスマートコントラクトの構築に重要です。
中級データ型
問題34: 構造体の操作
Solidityで構造体メンバーの操作を学習します。ドット記法(struct.member)で構造体メンバーにアクセスします。構造体は複数の方法で初期化できます:順序付き値でインライン、または個々のメンバーを設定。ストレージの構造体は参照、メモリの構造体はコピーです。これは変更の動作に影響します。構造体操作の理解は複雑なデータ構造の管理、レコードの更新、スマートコントラクトでのビジネスロジックの効率的な実装に不可欠です。
中級データ型
問題35: 列挙型(enum)
Solidityの列挙型を学習します - 名前付き定数のセットを定義する列挙型です。列挙型はマジックナンバーを意味のある名前に置き換えることでコードの可読性を向上させます。内部的には0から始まる符号なし整数として表現されます。列挙型は状態(Active、Paused、Stopped)、選択肢(Small、Medium、Large)、または固定オプションセットの表現に最適です。無効な値を防ぎ、コントラクトをより保守しやすくします。列挙型の理解はクリーンで自己文書化されたスマートコントラクトの作成の鍵です。
中級データ型
問題36: ネストしたマッピング
Solidityのネストしたマッピングを学習します - 複雑なデータ構造のためのマッピング内のマッピングです。ネストしたマッピングは、アドレスから提案IDから投票へのマッピングのような多次元のキー値ストレージを可能にします。投票システム、権限マトリックス、多レベルのデータ関係の実装に不可欠です。アクセスはチェーンされた括弧を使用:mapping[key1][key2]。ネストの深さに制限はありませんが、深いネストはガスコストを増加させます。ネストしたマッピングの理解はDeFiおよびガバナンスコントラクトの洗練されたデータモデル構築に重要です。
中級データ型
問題37: 配列を持つ構造体
Solidityで複雑なデータ構造のために構造体と配列を組み合わせる方法を学習します。構造体はメンバーとして動的配列を含むことができ、メンバーリストを持つチームやアイテム配列を持つ注文のような柔軟なデータモデルを可能にします。構造体内の配列はストレージ参照なので、変更は永続的です。このパターンはユーザープロファイル、ゲームデータ、ビジネスエンティティのDAppsで一般的です。この組み合わせの理解は現実世界の関係のモデル化とスマートコントラクトのストレージパターンの最適化に不可欠です。
中級基本構文
問題38: メモリとストレージ
Solidityのメモリとストレージの重要な違いを学習します。ストレージは永続的なブロックチェーンストレージ - 高価ですが永続的です。メモリは一時的なRAM - 安価ですが関数実行後に失われます。ストレージ変数は参照(変更は元に影響)、メモリはコピーを作成します。この区別はガスコストに劇的に影響し、データの永続性を決定します。それぞれをいつ使用するかの理解はガスの最適化と正しいコントラクトの動作に不可欠です。ビュー関数は複雑な戻り値にmemoryを使用する必要があります。
中級データ型
問題39: Calldataロケーション
Solidityのcalldataを学習します - 外部関数パラメータ用の特別なデータロケーションです。Calldataは読み取り専用で非常にガス効率的で、外部関数に配列や文字列を渡すのに最適です。メモリとは異なり、calldataはデータをコピーしないため、大幅なガスを節約します。不変であり、データの整合性を保証します。外部関数は参照型にcalldataを使用する必要があり、パブリック関数はメモリを使用できます。Calldataの理解は大量のデータを処理するコントラクト、特にDeFiプロトコルでのガスコスト最適化に重要です。
中級データ型
問題40: 配列のスライス
Solidityの配列スライスを学習します - calldata配列から部分配列を抽出します。スライス構文array[start:end]はstartからend-1までの要素を返します。endを省略(array[start:])するとstartから配列の終わりまでを返します。この機能はcalldata配列でのみ動作し、ストレージやメモリでは使用できません。スライスはコピーではなく参照を返すためガス効率的です。ページネーション、バッチ処理、データのサブセット操作に最適です。スライスの理解は大きな配列を扱う外部関数での効率的なデータ操作に不可欠です。
中級イベント
問題41: イベントの定義
Solidityのイベントを学習します - スマートコントラクトのロギングメカニズムです。イベントはブロックチェーンに格納されるログを発行し、オフチェーンアプリケーションがコントラクトのアクティビティを監視できます。データ記録においてストレージよりもはるかに安価です。イベントは効率的なフィルタリングのために最大3つのindexedパラメータを持てます。DAppフロントエンド、分析、デバッグに不可欠です。イベントはコントラクトの状態に影響しませんが、重要な透明性を提供します。イベントの理解はインタラクティブなDAppの構築とDeFiプロトコルでの監査証跡の維持に基本的です。
中級イベント
問題42: イベントの発行
Solidityでのイベント発行を学習します - スマートコントラクトでイベントをトリガーする方法です。emitキーワードはイベントをブロックチェーンのトランザクションログに記録し、オフチェーンアプリケーションからアクセス可能にします。イベントは状態変更、ユーザーアクション、重要なコントラクト操作について外部システムに通知するために重要です。ストレージ書き込みよりも大幅に安価です。イベント発行は同期的でトランザクション実行中に発生します。適切なイベント発行パターンの理解はレスポンシブなDAppの構築とDeFiプロトコルでの透明性維持に不可欠です。
中級イベント
問題43: インデックス付きパラメータ
Solidityイベントのインデックス付きパラメータを学習します - イベントデータを検索可能でフィルタリング可能にします。indexedキーワードはパラメータ値の特別なハッシュを作成し、外部アプリケーションによる効率的なクエリを可能にします。イベントごとに最大3つのインデックス付きパラメータを持てます。インデックス付きパラメータはトピックに別々に格納され、非インデックスパラメータはデータセクションに格納されます。この区別はDAppsで効率的なイベントフィルターを構築するために重要です。インデックス付きパラメータの理解はDeFi分析と監視システムで検索可能なイベントログを作成するために不可欠です。
中級エラー処理
問題44: カスタムエラー
Solidityのカスタムエラー(0.8.4以降)を学習します - 文字列メッセージ付きrequire文のガス効率的な代替手段です。カスタムエラーはイベントのように定義されますがerrorキーワードを使用します。失敗に関するコンテキストを提供するパラメータを含めることができます。カスタムエラーは文字列リバートメッセージと比較して大幅なガスを節約し、本番コントラクトに最適です。構造化されたエラーデータでデバッグを改善します。カスタムエラーの理解はガス最適化されたコントラクトの構築と現代のDeFiプロトコルでのより良いエラー処理の提供に重要です。
中級エラー処理
問題45: Try-Catch
Solidityのtry-catchを学習します - 外部呼び出しとコントラクト作成のエラー処理です。Try-catchブロックはコントラクトがトランザクション全体をリバートすることなく失敗を優雅に処理できます。内部呼び出しではなく、外部関数呼び出しとコントラクトデプロイでのみ動作します。Catch句は異なるエラータイプをキャプチャできます:リバート理由のError(string)と他の失敗の低レベルbytes。このパターンは信頼できない外部コントラクトと相互作用する回復力のあるコントラクト構築に不可欠です。try-catchの理解はDeFiプロトコルでのフォールバックロジック実装に重要です。
中級エラー処理
問題46: エラーデータの抽出
Solidityのcatchブロックでエラーデータを抽出する方法を学習します - 外部呼び出しから特定の失敗情報をキャプチャします。CatchブロックはError(string memory reason)で高レベルリバートと、catch (bytes memory data)で低レベル失敗を区別できます。この区別により、エラーがrequire/revert文から来るか低レベル失敗から来るかを識別できます。エラー理由の抽出により、より良いデバッグ、ロギング、条件付きエラー処理が可能になります。エラーデータ抽出の理解は堅牢なエラー回復メカニズムの構築と複雑なDeFi相互作用での意味のあるフィードバック提供に不可欠です。
中級ガス最適化
問題47: Uncheckedブロック
Solidityのuncheckedブロックを学習します - ガス最適化のために自動オーバーフロー/アンダーフローチェックを無効化します。Solidity 0.8.0以降、算術演算は自動的にオーバーフローをチェックし、追加のガスを消費します。uncheckedブロックは安全だと分かっている演算でこれらのチェックをバイパスし、大幅なガスを節約します。慎重に使用してください - オーバーフローが不可能または意図的である場合のみ使用します。一般的な使用例は現実的にオーバーフローしないカウンターのインクリメントです。uncheckedブロックの理解はDeFiプロトコルのループのような高頻度操作でのガス最適化に不可欠です。
中級継承
問題48: 継承の基礎
Solidityの継承を学習します - 親コントラクトから機能を継承するコントラクトの作成です。'is'キーワードは継承関係を確立し、子コントラクトが親のすべての状態変数、関数、修飾子にアクセスできるようにします。これはコードの再利用を促進し、階層的なコントラクト構造を作成します。継承はモジュラーなスマートコントラクトの構築、アップグレード可能なパターンの実装、DRY原則の遵守に基本的です。標準化されたトークンコントラクトと複雑なDeFiプロトコルの作成に不可欠です。継承の理解は保守可能で拡張可能なスマートコントラクトシステムの構築を可能にします。
中級継承
問題49: 仮想関数とオーバーライド
Solidityの仮想関数とオーバーライドを学習します - スマートコントラクトでポリモーフィズムを可能にします。'virtual'でマークされた関数は派生コントラクトでオーバーライドできます。'override'キーワードは明示的に関数の置き換えを示します。このパターンにより、子コントラクトはインターフェースの互換性を維持しながら親の動作をカスタマイズできます。仮想関数は拡張可能なベースコントラクト、テンプレートパターン、アップグレード可能なシステムの作成に重要です。virtual/overrideの理解は柔軟なコントラクト階層の構築とDeFiプロトコルでのテンプレートメソッドなどのデザインパターンの実装に不可欠です。
中級継承
問題50: Superキーワード
Solidityのsuperキーワードを学習します - オーバーライドされた関数から親コントラクトの関数を呼び出します。Superは直近の親の実装にアクセスでき、完全な置き換えではなく関数の拡張を可能にします。これは新しい動作を追加しながら親のロジックを保持します。多段階継承での機能チェーンの維持に重要です。Superは協調的パターン、ミドルウェアのような動作の実装、親コントラクトの不変条件の維持の保証に不可欠です。superの理解は複雑なDeFiシステムでの堅牢な継承階層の構築を可能にします。
中級継承
問題51: 抽象コントラクト
Solidityの抽象コントラクトを学習します - 直接デプロイできないテンプレートです。抽象コントラクトはvirtualでマークされた少なくとも1つの未実装関数を含みます。完全な実装を提供せずにコントラクトの構造とインターフェースを定義します。このパターンは派生コントラクトが特定の機能を実装することを強制します。抽象コントラクトはベースコントラクトの作成、共通インターフェースの定義、複数のコントラクト間での一貫した実装の保証に重要です。DeFiでトークン標準とプロトコルテンプレートの作成に不可欠です。抽象コントラクトの理解は拡張可能なコントラクトアーキテクチャの構築を可能にします。
中級継承
問題52: インターフェース定義
Solidityのインターフェースを学習します - 関数シグネチャのみを定義する純粋な抽象コントラクトです。インターフェースは状態変数、コンストラクタ、関数実装を持てません。コントラクト間の相互運用性を可能にする標準ABIを確立します。インターフェースは抽象コントラクトより軽量で、ERC20/ERC721のようなトークン標準の定義に最適です。疎結合とコントラクトのモジュール性を可能にします。インターフェースの理解は相互運用可能なDeFiプロトコルの構築、外部コントラクトとの統合、イーサリアムエコシステムでの標準準拠の保証に重要です。
中級継承
問題53: 多重継承
Solidityの多重継承を学習します - 複数の親コントラクトから同時に継承します。SolidityはC3線形化を使用して継承順序を解決し、右から左に処理します。関数が競合する場合、すべての親コントラクトを指定して明示的にオーバーライドする必要があります。これによりダイヤモンド問題を回避しながら複数のソースから機能を組み合わせることができます。多重継承は動作を合成することで機能豊富なコントラクトを作成するのに強力です。継承順序と競合解決の理解は、複数の標準と機能を組み合わせるDeFiの複雑なコントラクトシステムの構築に不可欠です。
中級継承
問題54: 継承の順序
Solidityの継承順序を学習します - 複数の親コントラクトがどのように線形化され解決されるかです。SolidityはC3線形化アルゴリズムを使用し、右から左に継承を処理します。最も右の親が競合で優先されます。この「最も派生した」原則により、重複するメンバーを持つ複数のコントラクトから継承する際の予測可能な動作を保証します。線形化の理解は複雑な継承階層に重要です。複数の標準を組み合わせるコントラクトの構築や、洗練されたDeFiプロトコルでのダイヤモンド継承パターンを扱う際に不可欠です。
中級継承
問題55: 修飾子の継承
Solidityの修飾子継承を学習します - 修飾子が継承され、子コントラクトでオーバーライドできる方法です。'virtual'でマークされた修飾子は派生コントラクトでオーバーライドでき、カスタマイズ可能なアクセス制御と検証ロジックを可能にします。継承された修飾子は継承された関数のように動作し、所有権チェックのような共通パターンのコード再利用を促進します。このパターンは柔軟な権限システムと再利用可能なコントラクトコンポーネントの構築に不可欠です。修飾子継承の理解はDeFiプロトコルとガバナンスシステムでの洗練されたアクセス制御階層の作成を可能にします。
中級関数
問題56: 関数修飾子
Solidityでカスタム関数修飾子を作成する方法を学習します - 関数の前後で実行される再利用可能なコードです。修飾子は特別な_(アンダースコア)プレースホルダーを使用して、修飾された関数の本体が実行される場所を示します。アクセス制御、検証、状態チェックに最適です。修飾子はパラメータを受け取り、複雑なロジックを実行できます。コードをより読みやすくし、重複を減らします。修飾子の理解はセキュリティパターン、リエントランシーガード、スマートコントラクトでの複雑な検証ロジックの実装に不可欠です。クリーンで安全なコントラクトアーキテクチャの基礎です。
中級関数
問題57: 複数の修飾子
Solidityで複数の修飾子を連鎖する方法を学習します - 単一の関数に複数のチェックを適用します。修飾子は左から右に実行され、各アンダースコアが次の修飾子に制御を渡し、最終的に関数本体に到達します。これにより層状のセキュリティと検証が作成されます。複数の修飾子により、所有権、状態、タイミングチェックを組み合わせた複雑なアクセス制御パターンが可能になります。実行順序の理解はセキュリティに重要です - 早期の修飾子が後の修飾子の実行を防ぐことができます。このパターンはDeFiプロトコルでの洗練された権限システムと多要素検証の構築に不可欠です。
中級関数
問題58: Payable関数とアドレス
SolidityのPayable関数とアドレスを学習します - コントラクトがEtherを受信・送信できるようにします。'payable'でマークされた関数はmsg.value経由でETHを受信できます。address payable型はtransfer、send、callを使用してETHを送信できます。通常のアドレスは明示的にpayableに変換する必要があります。この区別により偶発的なETH転送を防ぎ、支払いフローを明示的にします。payableの理解はDeFiプロトコル、決済システム、ETHを扱うあらゆるコントラクトの構築に重要です。スマートコントラクトでのイーサリアムのネイティブ通貨統合の基礎です。
中級関数
問題59: Receive関数
Solidityのreceive関数を学習します - プレーンなEther転送を受信するための特別な関数です。ReceiveはETHがデータなし(空のcalldata)で送信されたときに呼び出されます。externalかつpayableでなければならず、引数や戻り値はありません。Fallback関数はデータ付きの呼び出しや存在しない関数を処理します。一緒に、コントラクトがすべての受信トランザクションを処理できるようにします。receive/fallbackの区別の理解はウォレット、支払い分割器、ETHを受け入れるコントラクトの構築に重要です。現代のSolidityコントラクトでの適切なETH処理に不可欠です。
中級関数
問題60: Fallback関数
Solidityのfallback関数を学習します - 関数シグネチャに一致しない呼び出しをすべてキャッチします。Fallbackは存在しない関数を呼び出したり、ETHと共にデータを送信したときに実行されます。データ付きETHを受け入れるためにpayableにできます。receiveと異なり、fallbackはデータ付きのあらゆる呼び出しを処理します。プロキシコントラクト、アップグレード可能パターン、予期しない呼び出しの優雅な処理に不可欠です。Fallbackはmsg.dataにアクセスして低レベル呼び出しを処理できます。fallbackの理解は柔軟なコントラクトの構築とDeFiでのdelegatecallプロキシなどの高度なパターンの実装に重要です。
中級関数
問題61: 関数セレクタ
Solidityの関数セレクタを学習します - 関数を呼び出すために使用される4バイトの識別子です。セレクタは関数シグネチャのkeccak256ハッシュの最初の4バイトです。低レベル呼び出し、インターフェース検出、EVMが関数呼び出しをルーティングする方法の理解に重要です。.selectorプロパティを使用してセレクタを取得したり、手動で計算できます。セレクタの理解はプロキシコントラクトの構築、トランザクションの分析、ダイヤモンドストレージなどの高度なパターンの実装に不可欠です。イーサリアムがスマートコントラクト関数を実行する方法の基礎です。
中級関数
問題62: 関数のオーバーロード
Solidityの関数オーバーロードを学習します - 同じ名前で異なるパラメータを持つ複数の関数を定義します。各オーバーロード関数はパラメータ型に基づいて一意のシグネチャとセレクタを持ちます。コンパイラは提供された引数に基づいて正しい関数を選択します。オーバーロードは関連する操作に直感的な関数名を許可することでAPI設計を改善します。ライブラリと複雑なコントラクトで一般的です。オーバーロードの理解はユーザーフレンドリーなインターフェースの作成とセレクタの衝突を避けるのに不可欠です。戻り値の型だけではオーバーロード関数を区別できません。
中級関数
問題63: 内部関数
Solidityの内部関数を学習します - コントラクトとその派生コントラクト内でのみアクセス可能な関数です。内部関数は外部から呼び出せませんが、ガス効率的なコード再利用を提供します。ヘルパー関数、共有ロジック、テンプレートメソッドパターンの実装に最適です。慣例として内部関数はアンダースコアで接頭辞を付けます。内部関数はpublic/external呼び出しよりもガスコストが低いです。内部可視性の理解は、複雑なDeFiシステムで適切なカプセル化と効率的なコード再利用パターンを持つ構造化されたコントラクトの作成に重要です。
中級関数
問題64: ライブラリの使用
Solidityで'using for'ディレクティブを使用してライブラリを使用する方法を学習します - ライブラリ関数で型を拡張します。ライブラリは一度デプロイされて再利用され、デプロイガスを節約します。'using LibraryName for TypeName'構文はライブラリ関数を型にアタッチし、メソッドのような構文を可能にします。このパターンは安全な数学演算、文字列操作、ネイティブ型の拡張に不可欠です。ライブラリはコードの再利用と標準化を促進します。ライブラリ使用の理解はコミュニティでテストされたコードの活用とDeFiプロトコルでのガス効率的なコントラクトの構築に重要です。
中級実践的な機能
問題65: Msgオブジェクト
Solidityのmsgグローバルオブジェクトを学習します - トランザクションコンテキスト情報へのアクセスです。msg.senderは関数を呼び出すアドレス(コントラクトまたはEOA)です。msg.valueはpayable関数で送信されたETHを含みます。msg.dataは完全なcalldataを保持します。msg.sigは関数セレクタを含みます。これらのプロパティはアクセス制御、支払い処理、低レベル操作に不可欠です。msgオブジェクトの理解は安全なコントラクトの構築に基本的です - msg.senderはDeFiと所有権システムでのほとんどの認証パターンの基礎です。
中級実践的な機能
問題66: Blockオブジェクト
Solidityのblockグローバルオブジェクトを学習します - ブロックチェーンの状態情報へのアクセスです。block.numberは現在のブロック番号を返し、block.timestampは秒単位のUnixタイムスタンプを提供します。これらの値は時間ベースのロジック、イベントの順序付け、タイムスタンプの作成に重要です。ただし、block.timestampはマイナーによって制限内で操作可能なので、重要なランダム性には使用しないでください。ブロックプロパティの理解は時間ロックコントラクト、期限の実装、DeFiプロトコルでの監査証跡の作成に不可欠です。
中級実践的な機能
問題67: Txオブジェクト
Solidityのtxグローバルオブジェクトを学習します - トランザクションレベル情報へのアクセスです。tx.originはトランザクションチェーンを開始した元の外部アカウント、tx.gaspriceは設定されたガス価格を示します。tx.originはコントラクト間呼び出しでmsg.senderと異なります。認証にtx.originを使用するのはフィッシング攻撃を可能にするため危険です。Bot制限に使われることもありますがセキュリティ用途ではありません。tx.gaspriceはガス対応ロジックの実装に役立ちます(注:EIP-1559ではbaseFee + priorityFeeに分離)。重要な認証にtx.originを決して使用しないでください。
中級実践的な機能
問題68: アドレス型のメソッド
Solidityのアドレス型メソッドを学習します - アカウントと残高との相互作用です。balanceプロパティはwei単位でETH量を返します。現代のベストプラクティスはcall{value: amount}(')を使用した柔軟なETH転送です。レガシーメソッドのtransfer/sendは2300ガス制限があり、コントラクト受信者には不適切です。transferは失敗時にリバート、sendはfalseを返します。address(this)は現在のコントラクトを参照。これらのメソッドとその進化の理解は安全な決済システム構築に基本的です。本番コードでは常にcallを使用してください。
中級実践的な機能
問題69: 低レベル呼び出し
Solidityの低レベル関数呼び出しを学習します - 強力だが危険なコントラクト相互作用ツールです。callはターゲットのコンテキストで実行し、オプションでETHを送信。delegatecallは呼び出し元のコンテキストで実行し、ストレージ操作を許可 - 信頼できないターゲットの場合は高リスク。staticcallは読み取り専用実行を保証。これらは安全チェックがなく、明示的なエラー処理が必要です。delegatecallはプロキシなどの慎重に設計されたパターンでのみ使用すべきです。常に戻り値を検証。高度なパターンに不可欠ですが、重大なセキュリティリスクがあります。
中級実践的な機能
問題70: ABIエンコード/デコード
SolidityのABIエンコードとデコードを学習します - コントラクト相互作用のためのデータシリアライズです。abi.encodeはパディング付きの標準ABIエンコーディングを作成します。abi.encodePackedはコンパクトなデータのためパディングを削除します。abi.decodeはエンコードされたバイトから値を抽出します。これらの関数は低レベル呼び出し、関数シグネチャの作成、データシリアライズに不可欠です。encodePackedはkeccak256でのハッシュ化によく使用されます。ABIエンコーディングの理解はDeFiプロトコルでの相互通信に重要です。
中級実践的な機能
問題71: Keccak256ハッシュ
Solidityのkeccak256ハッシュを学習します - イーサリアムの標準暗号ハッシュ関数です。Keccak256は任意の入力データから32バイトのハッシュを生成します。決定的です - 同じ入力は常に同じ出力を生成します。一意の識別子の作成、データ整合性の検証、コミット・リビールスキームの生成によく使用されます。効率的なハッシュ化のためabi.encodePackedとよく組み合わされます。keccak256の理解は署名、マークルツリー、DeFiプロトコルでの様々な暗号パターンの実装に不可欠です。
中級実践的な機能
問題72: Ecrecover
Solidityのecrecoverを学習します - 署名から署名者アドレスを復元します。EcrecoverはECDSA署名検証のための組み込み関数で、パスワードを保存せずに認証を行うのに不可欠です。メッセージハッシュと署名コンポーネント(v、r、s)を取り、署名者のアドレスを返します。これによりメタトランザクション、ガスレストランザクション、オフチェーン認証が可能になります。Ethereum署名メッセージプレフィックスは署名リプレイ攻撃を防ぎます。ecrecoverの理解はDeFiプロトコルでの安全な認証実装に重要です。
中級ガス最適化
問題73: グローバル関数
Solidityのグローバル数学関数を学習します - 安全な剰余演算のためのaddmodとmulmodです。これらの関数は中間オーバーフローリスクなしに加算/乗算後に剰余演算を実行します。剰余前にオーバーフローする可能性がある通常の演算とは異なり、内部的により高い精度で(a op b) % mを計算します。暗号操作、数学アルゴリズムの実装、大きな数の安全な計算に不可欠です。これらの関数の理解はボンディングカーブやAMM式などの複雑な数学演算を含むDeFiプロトコル構築に重要です。
中級実践的な機能
問題74: Selfdestruct(非推奨の参考)
Solidityのselfdestructについて学習します - 0.8.18以降非推奨、参考のみの表示です。Selfdestructはコントラクトを永久に破棄し、残りのETHを指定アドレスに送信するために使用されました。セキュリティ上の懸念とEIP-6049により、段階的に廃止されています。現代のコントラクトは代わりに引き出しパターンを使用すべきです。この関数はレガシーコードにまだ存在しますが、最終的にはストレージを破棄せずETHを送信するだけになります。新しいコントラクトでは常に代替の引き出しメカニズムを使用してください。
上
上級
無料で学習可能
上級セキュリティパターン
問題75: 再入攻撃対策
Solidityの再入攻撃防止を学習します - 最も重要なセキュリティパターンです。再入攻撃は、外部呼び出しが状態更新完了前に関数への再入を許可することで発生します。Checks-Effects-Interactions(CEI)パターンがこれを防ぎます:最初に条件を検証、次に状態を更新、最後に外部コントラクトと相互作用。ReentrancyGuard修飾子が追加の保護を提供します。The DAOなどの大規模ハックの原因となったため、再入攻撃の理解は不可欠です。
上級セキュリティパターン
問題76: オーバーフロー対策
Solidityの整数オーバーフロー/アンダーフロー保護を学習します - バージョン0.8.0以降は自動です。0.8以前は、算術演算が無言でラップアラウンドし、重大な脆弱性を引き起こす可能性がありました。SafeMathライブラリが安全な計算に不可欠でした。現在Solidityはオーバーフロー時に自動的にリバートし、デフォルトでコントラクトをより安全にします。uncheckedブロックはオーバーフローが不可能な場合のガス最適化のためにこれらのチェックをバイパスします。
上級セキュリティパターン
問題77: アクセス制御
Solidityのアクセス制御パターンを学習します - コントラクトセキュリティの基礎です。Ownableパターンは重要な関数を単一のオーナーアドレスに制限します。ロールベースアクセス制御(RBAC)は複雑なシステムに柔軟な権限を提供します。修飾子がこれらの制限を一貫して実施します。適切なアクセス制御は不正なアクションを防ぎ、管理機能を保護し、ガバナンスを可能にします。イベントは透明性のため権限変更を記録します。安全なDeFiプロトコル構築に不可欠です。
上級セキュリティパターン
問題78: プルペイメント
Solidityのプルペイメントパターンを学習 - 安全な資金配布に不可欠。プッシュペイメント(ループ内でETH送金)は、受信者がrevertするコントラクトの場合失敗し、全転送をブロックします。プルペイメントは残高を記録し、ユーザーが個別に引き出すことで解決。このパターンはDoS攻撃を防ぎ、送信者のガスコストを削減し、受信者に制御を与えます。エアドロップ、収益分配、複数受信者への支払いシステムに重要。プルvsプッシュペイメントの理解は堅牢なDeFiプロトコル構築の基本です。
上級セキュリティパターン
問題79: 緊急停止
SolidityのPausableパターンを学習 - スマートコントラクトのサーキットブレーカー。このパターンは、バグ発見や攻撃などの緊急時に権限を持つユーザーが重要な機能を一時停止できます。paused状態の修飾子は読み取り機能を維持しながら、センシティブな操作の実行を防ぎます。インシデント対応、脆弱性時のユーザー資金保護、コントラクトアップグレードの有効化に不可欠。イベントが一時停止状態の透明性を提供。緊急停止の理解は、予期しない状況に対応できる本番環境対応コントラクトの構築に重要です。
上級セキュリティパターン
問題80: タイムロック
Solidityのタイムロックパターンを学習 - 重要操作に遅延を強制。タイムロックは、実行前に必須の待機期間を持つトランザクションをキューに入れ、透明性を提供し、ユーザーが変更に反応できるようにします。このパターンはガバナンスシステム、管理アクション、プロトコルアップグレードに不可欠。悪意のある即時変更を防ぎ、予測可能性を通じて信頼を構築。遅延期間はセキュリティと運用効率のバランスを取ります。タイムロックの理解は、DeFiプロトコルにおける分散型ガバナンスと安全な管理システムの構築に重要です。
上級セキュリティパターン
問題81: 署名検証
SolidityのECDSA署名検証を学習 - オフチェーン承認とメタトランザクションを可能にします。デジタル署名は秘密鍵を明かすことなくメッセージの真正性を証明。ecrecover関数がハッシュと署名コンポーネント(v,r,s)から署名者アドレスを復元。これによりガスレストランザクション、オフチェーン許可、高度な認証パターンが可能に。署名検証の理解はモダンDeFiプロトコル、ウォレット連携、UX改善に重要です。
上級セキュリティパターン
問題82: フロントランニング対策
Solidityのコミットリビールスキームを学習 - フロントランニング攻撃と価格操作を防止。フロントランナーは保留中のトランザクションを見て利益のために悪用。コミットリビールはアクションを2段階に分割:まず秘密データのハッシュをコミット、後で実際のデータをリビール。これにMEV攻撃を防ぎ、公平なオークションを保証し、センシティブな操作を保護。フロントランニング対策の理解は公平なDeFiプロトコル構築に不可欠です。
上級ガス最適化
問題83: ストレージ最適化
Solidityのストレージパッキングを学習 - 変数配置でガスコストを最適化。Ethereumストレージは32バイトスロットを使用し、スロット書き込みに約2万ガス。32バイト未満の変数は連続して宣言するとスロットを共有可能。適切なパッキングはストレージ操作とガスコストを大幅に削減。ストレージレイアウトの理解は、ガス効率の良いコントラクト構築と低い取引コストでのUX最適化に重要です。
上級ガス最適化
問題84: ループ最適化
Solidityのループ最適化を学習 - ガス制限管理とバッチ処理。大きなループはブロックガス制限を超え、トランザクション失敗を引き起こします。配列長のキャッシュは余分なSLOAD操作を防止。バッチ処理は大きな操作を管理可能なチャンクに分割。ループ最適化の理解は、大量データセット、ユーザーリスト、一括操作をガス制限にぶつからずに処理するために不可欠です。
上級ガス最適化
問題85: ショートサーキットの活用
Solidityのショートサーキット評価を学習 - 条件ロジックのガス効率最適化。論理演算子(&&と||)は結果が確定した時点で評価を停止。安い条件を先に置くことで、高価な操作を回避してガスを節約できます。この最適化は複雑な検証ロジック、アクセス制御、複数条件を持つ任意の関数に重要。適切な順序付けは平均ガスコストを大幅に削減できます。
上級ガス最適化
問題86: イベント vs ストレージ
Solidityでイベントとストレージをいつ使うか学習 - コストと機能のバランス。ストレージ操作は約2万ガスですがオンチェーンクエリが可能。イベントは約2千ガスですがオフチェーンログのみ。コントラクトが読み取り必要な重要な状態にはストレージを使用。監査記録、通知、履歴データにはイベントを使用。このトレードオフの理解はコスト効率の良いコントラクト構築に重要です。
上級ガス最適化
問題87: 関数の可視性最適化
Solidityの関数可視性最適化を学習 - ガス効率のための適切なアクセス修飾子選択。external関数は外部呼び出し時にpublicより安価で、内部コピーを作成しません。calldataパラメータはexternal関数でmemoryよりガス効率的。internal関数は外部呼び出しオーバーヘッドなしにコード再利用を可能にします。可視性修飾子の理解は、適切なカプセル化とガス最適化されたコントラクト構築に重要です。
上級ガス最適化
問題88: バッチ処理とガス制限
Solidityの安全なバッチ処理を学習 - ガス制限管理と一括操作の最適化。大きなバッチはブロックガス制限(約3000万ガス)を超え、トランザクション失敗を引き起こします。calldataパラメータを持つexternal関数はmemoryより効率的。バッチサイズ制限とチャンク処理の実装はガス制限問題を防止。これらのパターンの理解は、複数操作を扱うスケーラブルなコントラクトに不可欠です。
上級高度なパターン
問題89: プロキシパターン
Solidityのプロキシパターンを学習 - delegatecallでコントラクトアップグレードを可能に。プロキシはロジックとストレージを分離し、状態を保持しながらコード更新を可能にします。プロキシはdelegatecallで実装コントラクトコードを自身のストレージコンテキストで実行。このパターンはコントラクトアップグレード、バグ修正、デプロイ後の機能追加を可能にします。プロキシパターンの理解は、保守可能でアップグレード可能なスマートコントラクトシステム構築に重要です。
上級高度なパターン
問題90: ファクトリーパターン
Solidityのファクトリーパターンを学習 - コントラクトの動的作成とデプロイ。ファクトリーは標準化されたインターフェースでプログラム的なコントラクトインスタンシエーションを可能にします。CREATE2は決定的アドレスを提供し、デプロイ前のアドレス予測を可能にします。このパターンはトークンコントラクト作成、クローンデプロイ、スケーラブルアーキテクチャに不可欠。ファクトリーパターンの理解は、予測可能なアドレスでコントラクトを動的生成するシステム構築に重要です。
上級高度なパターン
問題91: ダイヤモンドパターン
Solidityのダイヤモンドパターンを学習 - 無制限の関数追加を持つモジュラーアーキテクチャ。ダイヤモンドはファセット(コントラクト)で機能を整理し、コントラクトサイズ制限を回避。関数セレクターがdelegatecallルーティングで特定ファセットアドレスにマップ。このEIP-2535標準は無制限コントラクト機能、モジュラーアップグレード、共有ストレージを可能にします。ダイヤモンドの理解は大規模でモジュラーなスマートコントラクトシステム構築に重要です。
上級高度なパターン
問題92: ステートマシン
Solidityのステートマシンパターンを学習 - enumと修飾子で制御された状態遷移管理。ステートマシンは有効な状態遷移でビジネスロジックを強制し、無効な操作を防止。enumが可能な状態を定義し、修飾子が関数実行を保護。このパターンはワークフロー、オークション、マルチステッププロセス、定義された状態での制御された進行が必要な任意のシステムに不可欠です。
上級高度なパターン
問題93: オラクルパターン
Solidityのオラクル統合を学習 - スマートコントラクトの外部データアクセス。オラクルはブロックチェーンと現実世界のデータを橋渡しし、価格フィード、気象データ、API結果が必要なDeFiプロトコルに不可欠。Chainlinkは信頼性の高いデータフィードを持つ分散オラクルネットワークを提供。AggregatorV3Interfaceは集約と検証機能を内蔵した価格データアクセスを可能に。オラクルの理解は、データ駆動型アプリケーション、自動取引システム、意思決定に外部情報が必要なコントラクト構築に重要です。
上級高度なパターン
問題94: メタトランザクション
Solidityのメタトランザクションを学習 - EIP-2771実装によるガスレストランザクション。メタトランザクションはユーザーがガス用ETHを保有せずにコントラクトと相互作用でき、ユーザー体験を向上。リレイヤーがガス料金を支払い、ユーザーはオフチェーンでトランザクションデータに署名。EIP-712はセキュリティのためドメイン分離を持つ構造化データ署名を提供。このパターンは主流採用、ウォレットレスオンボーディング、ガス複雑性が抽象化されたユーザーフレンドリーDeFiアプリ作成に不可欠です。
上級高度なパターン
問題95: インラインアセンブリ基礎
SolidityのインラインアセンブリI学習 - Yul言語による低レベルEVMプログラミング。アセンブリはガス最適化と高レベルSolidityでは不可能な操作のためEVMオペコードへの直接アクセスを提供。Yulはメモリ、ストレージ、スタック操作の正確な制御を提供する中間言語。最適化に強力ですが、アセンブリは慎重なセキュリティ考慮が必要。アセンブリの理解はガス最適化、セキュリティ研究、高効率コントラクト構築に有用です。