😎

thirdwebのステーキングコントラクトを作成し、実行してみよう(コードの知識不要です。)

2023/02/20に公開1

こんにちは、CryptoGamesのユウキです。

本日はthirdwebのステーキングコントラクトを作成し、実際に動かしてみたいと思います。

0 事前準備

では、ステーキングコントラクトを作成する前に、必要な2つのコントラクトを作成しましょう。

1) 報酬用トークンコントラクトの作成

報酬用のERC20トークンを作成します。

https://thirdweb.com/thirdweb.eth/TokenERC20

こちらは今回のメインテーマではないので、詳細は省略します。

2) ステーキング用のNFTのコントラクトの作成

続いて、ステーキング用のNFTを作成します。

https://thirdweb.com/thirdweb.eth/DropERC721

こちらも今回のメインテーマではないので、詳細は省略します。

なお、下のように、今回、こちらのトークンID:0のものをステークします。

1 ステーキングコントラクトの作成

では、今回の本題のステーキングコントラクトを作成してみましょう。

thirdwebの「Explore」のページに行きます。
https://thirdweb.com/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