Solidity入門|第21回「他のコントラクトの呼び出し」

律动

私は最近、Solidityを再学習し、詳細を統合し、初心者が使用できる「Solidity Minimalist Primer」を書いています(プログラミングの人は別のチュートリアルを見つけることができます)、週に1〜3回更新しています。

すべてのコードとチュートリアルはgithub:github.com/AmazingAng/WTFSolidityでオープンソースです。

デプロイされたコントラクトを呼び出す

開発者はスマートコントラクトを作成して他のコントラクトを呼び出すことで、イーサリアムネットワーク上のプログラムを再利用し、繁栄するエコシステムを構築します。 多くのWeb3プロジェクトは、イールドファーミングなど、他のコントラクトの呼び出しに依存しています。 この講演では、コントラクトコード(またはインターフェース)とアドレスがわかっている場合に、ターゲットコントラクトの関数を呼び出す方法を紹介します。

対象契約

まず、OtherContract という単純なコントラクトを記述して、このコントラクトを呼び出すことから始めましょう。

このコントラクトには、状態変数 x、ETH の受信時にトリガーされるイベント ログ、および 3 つの関数が含まれています。

getBalance(): コントラクトのETH残高を返します。

setX():xの値を設定し、ETHをコントラクトに送ることができる外部買掛金関数。

getX(): x の値を読み取ります。

OtherContract コントラクトを呼び出す

コントラクトのアドレスとコントラクトコード(またはインタフェース)を使用して、コントラクトへの参照を作成できます: _Name(_Address) ここで、_Name はコントラクト名、_Address はコントラクトアドレスです。 次に、コントラクトへの参照を使用してその関数を呼び出します: _Name(_Address).f() ここで、f() は呼び出される関数です。

コントラクトを呼び出す 4 つの例を次に示します。

1. 契約アドレスの受け渡し

ターゲットコントラクトアドレスを関数に渡し、ターゲットコントラクトへの参照を生成してから、ターゲット関数を呼び出すことができます。 たとえば、新しいコントラクトに callSetX 関数を記述し、デプロイされた OtherContract コントラクト アドレス _Address と setX のパラメータ x を渡します。

2. コントラクト変数を渡す

関数でコントラクト参照を直接渡すことができ、上記のパラメータのアドレスタイプを OtherContract よりも優れたターゲットコントラクト名に変更するだけで済みます。 次の例では、ターゲット コントラクトを呼び出す getX() 関数を実装します。

3. 契約変数の作成

コントラクト変数を作成し、それを使用して目的関数を呼び出すことができます。 次の例では、変数 oc の OtherContract コントラクトへの参照を格納します。

4. コントラクトを呼び出し、ETHを送金する

ターゲットコントラクトの関数が支払い可能な場合、_Name(_Address).f{value: _Value}()を呼び出すことでコントラクトに送金できます(_Nameはコントラクト名、_Addressはコントラクトアドレス、fは目的関数の名前、_Valueは転送されるETHの量(wei)です)。

OtherContract コントラクトの setX 関数は pay であり、次の例では setX を呼び出すことで、ターゲットコントラクトとの間で送金を行います。

送金後、LogイベントとgetBalance()関数を通じて、ターゲットコントラクトのETH残高の変化を観察できます。

まとめ

この講演では、ターゲットコントラクトの関数を呼び出すために、ターゲットコントラクトのコード(またはインターフェイス)とアドレスを介してコントラクトへの参照を作成する方法を紹介します。

免責事項:このページの情報は第三者から提供される場合があり、Gateの見解または意見を代表するものではありません。このページに表示される内容は参考情報のみであり、いかなる金融、投資、または法律上の助言を構成するものではありません。Gateは情報の正確性または完全性を保証せず、当該情報の利用に起因するいかなる損失についても責任を負いません。仮想資産への投資は高いリスクを伴い、大きな価格変動の影響を受けます。投資元本の全額を失う可能性があります。関連するリスクを十分に理解したうえで、ご自身の財務状況およびリスク許容度に基づき慎重に判断してください。詳細は免責事項をご参照ください。
コメント
0/400
コメントなし