トークンファームを作成しよう
🖥 このレッスンの参考動画URL
👀 プロジェクトの概要を復習しよう
プロジェクトでは3つのスマートコントラクトを使用します。
packages/contract/contractsフォルダを参照してください。
- MockDaiToken.sol
- 偽のDaiトークンを作成するコントラクト
- DappToken.sol
- 投資家が私たちのプロジェクトで獲得できるコミュニティトークンDappを作成するコントラクト
- TokenFarm.sol
- 偽のDaiトークンが保管されるデジタルバンク機能を持つスマートコントラクト。
- TokenFarmコントラクトを呼び出した投資家(ユーザー)が、Daiトークンをステークすることを想定している。
- 定期的な間隔で、ステーキングを行った投資家はDappトークンを獲得することができる。
- また、最初のDaiトークンを引き戻すこともできる。
それでは、実装に進みましょう!
🪙 TokenFarmコントラクトに Dai と Dapp トークンを導入する
TokenFarmコントラクトでDaiトークンとDappトークンが使えるようにするためにTokenFarm.solを次のように更新しましょう。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import "./DappToken.sol";
import "./MockDaiToken.sol";
contract TokenFarm{
string public name = "Dapp Token Farm";
DappToken public dappToken;
DaiToken public daiToken;
constructor(DappToken _dappToken, DaiToken _daiToken){
dappToken = _dappToken;
daiToken = _daiToken;
}
}
まずDappTokenとMockDaiTokenをインポートすることでDappTokenとDaiTokenを使えるようにします。
import "./DappToken.sol";
import "./MockDaiToken.sol";
次にそれらをconstructorで呼び出します。
constructorは、スマートコントラクトがネットワークにデプロイされるたびに、一度だけ実行される特別な関数です。constructorの中にコードを入れることができ、関数が呼び出されるたびに、中のコードが実行されます。
DaiTokenとDappTokenはネットワークにすでにデプロイされていると仮定しているので、あとはTokenFarmのコントラクトが作成されるたびにDaiTokenとDappTokenのコントラクトアドレスを取得し、constructorに渡すだけです。
constructor(DappToken _dappToken, DaiToken _daiToken){
dappToken = _dappToken;
daiToken = _daiToken;
}
constructor()の中にあるDappTokenとDaiTokenは実際のスマートコントラクトである「型」です。
_dappTokenと_daiTokenは、それぞれコントラクトのアドレスです。
そして、これらの変数を取り出して、それぞれ状態変数であるdappTokenとdaiTokenに代入しています。
_dappTokenと_daiTokenはローカル変数であり、他の関数からアクセスすることはできません。これらの変数がスマートコントラクトの外部からアクセスできるようにするには、状態変数として保存する必要があります。
🙋♂️ 質問する
ここまでの作業で何かわからないことがある場合は、Discordの#ethereumで質問をしてください。
ヘルプをするときのフローが円滑になるので、 エラーレポートには下記の3点を記載してください ✨
1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット
これでトークンを送れることが確認できました!次はより実践的なことをテストするということをしていきます。