thirdwebのステーキングコントラクトを作成し、実行してみよう(コードの知識不要です。)
こんにちは、CryptoGamesのユウキです。
本日はthirdwebのステーキングコントラクトを作成し、実際に動かしてみたいと思います。
0 事前準備
では、ステーキングコントラクトを作成する前に、必要な2つのコントラクトを作成しましょう。
1) 報酬用トークンコントラクトの作成
報酬用のERC20トークンを作成します。
こちらは今回のメインテーマではないので、詳細は省略します。
2) ステーキング用のNFTのコントラクトの作成
続いて、ステーキング用のNFTを作成します。
こちらも今回のメインテーマではないので、詳細は省略します。
なお、下のように、今回、こちらのトークンID:0のものをステークします。
1 ステーキングコントラクトの作成
では、今回の本題のステーキングコントラクトを作成してみましょう。
thirdwebの「Explore」のページに行きます。
「StakeERC721」を選択します。
下のようにリワードの計算式が載っています。
例えば、1時間あたり500weiの報酬を得られると設定した場合、3時間半預けると
3.5時間 × 500wei = 1,750 weiが得られます。
「Deploy now」で進んでいきます。
続いて、パラメータを設定します。
「ERC20 Reward Token Address」、「ERC721 Staking Token Address」では準備していたアドレスを入れます。
「Gasless transaction forwarders」は、説明にあるように、「["0x5001A14CA6163143316a7C614e30e6041033Ac20"]」を入れます。
「Time Unit for Rewards」は、報酬の時間の単位、「Rewards Per Unit Time」は時間単位あたりの報酬量です。
単位はそれぞれ、秒、weiです。
今回は、テストなので、10秒あたり、500weiの報酬が得られるようにしました。
「Deploy now」を押すと、このように、コントラクトが作成できました。
2 ステーキングのための事前準備
1) 報酬用トークンのデポジット
では、ステーキングコントラクトができたので、まずは報酬用のトークンをデポジット(預ける)しましょう。
トークンコントラクトの「approve」から「spender」をステーキングコントラクトに設定し、実行しましょう。
なお、「decimal」が今回18なので、approveしたい額 ×10の18乗を記載しています。
続いて、実際に預けましょう。
ステーキングコントラクトの「depositRewardTokens」から、預けたい金額を実行しましょう。
すると、トークンコントラクトでも、預けた分が減っていることが確認できます。
2) ステーク用NFTの承認
次は、NFTのコントラクトから、ステーキングコントラクトに「approve」を行いましょう。
下のように、預けたいトークンIDを選択して、実行します。
3 ステーキングの実行
では、これで準備ができたので、ステーキングをしてみましょう。
ステーキングコントラクトの「stake」から預けたいトークンIDを選択して、実行します。
しばらく時間を置いて、「getStakeInfo」を実行すると、下のように、16進数で報酬を確認することができます。
例えば今回の場合、10進数に変換すると、下のように3600weiであることがわかります。
https://hogehoge.tk/tool/number.html
4 引き出しの実行
では、またしばらく置いてから、NFTを引き出してみましょう。
「withdraw」から引き出したいトークンIDを選択して、実行します。
ちなみに、引き出し後に、「getStakeInfo」を実行すると、下のようになっていました。
10進数に直すと、10,200weiであることが確認できました。
https://hogehoge.tk/tool/number.html
5 報酬の請求
では、この報酬を請求してみましょう。
ステーキングコントラクトの「claimRewards」を実行します。
実行後にトークンコントラクトを確認すると、このように報酬を取得していることが確認できました。
今回は以上です。
ぜひやってみてください!
Discussion
理解しやすい説明ありがとうございます!!