📚

thirdwebを使ってERC20のステーキングコントラクトを作ってみよう(コードの知識不要です。)

2023/02/22に公開

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

本日は、thirdwebでERC20のステーキングコントラクトを作りたいと思います。

0 事前準備

まずは、事前準備として、報酬用のERC20とステークをするためのERC20を作成しましょう。

1) 報酬用コントラクト

今回こちらの詳細は省きますが、こちらから簡単に作ることができます。
https://thirdweb.com/thirdweb.eth/TokenERC20

下のように、100万トークンをミントしました。

2) ステーキング用コントラクト

こちらも同様に下から簡単に作ることができます。
https://thirdweb.com/thirdweb.eth/TokenERC20

下のように、1万トークンをミントしました。

1 ステーキングコントラクトを作成する

では、ステーキングコントラクトを作成しましょう。

https://thirdweb.com/explore

「Explore」の下の方の、「StakeERC20」に進みます。

計算式を確認した上で、「Deploy Now」に進みます。

なお、例えば、10秒ごとに「1/20」と設定した場合、300秒経過すると1トークンあたり

300 × 「1/20」 = 15となります。

そのため、仮に500トークンを預けた場合、 500 × 15 = 750の報酬用トークンを取得できます。

ではパラメータを設定しましょう。

「Gasless transaction forwarders」には説明に書かれている通り、記入します。

また、「ERC20 Reward Token Address」、「ERC20 Staking Token Address」にはそれぞれ作成済みのコントラクトを入れていきます。

続きまして、「Time Unit for Rewards」は報酬が発生する単位(秒)になります。

「Reward Ratio Numerator」には分子を、「Reward Ratio Denominator」には分母を入れます。

今回はテストトークンであることを確認の上、「Deploy Now」

すると、このように、ステーキングコントラクトができました!

2 ステーキングコントラクトに報酬用トークンを預ける

では、ステーキングコントラクトに報酬用トークンを預けてみましょう。

まずは、「報酬用トークン」(ステーキングコントラクトではありません)からステーキングコントラクトに預けたい量を「approve」します。

次に、「ステーキングコントラクト」の「depositRewardTokens」で預けたい量を実行します。

これで、ステーキングコントラクトに報酬用トークンを預けることができました。

3 ステーキングコントラクトでステークする

では、次に、ステーキング用コントラクトでステークしてみましょう。

まずは、「ステーキング用コントラクト」(ステーキングコントラクトではありません)からステーキングしたい量を「approve」します。

なお、わかりやすくするために、ステークするアカウントは今までとは別のアカウントにしています。

次に、「ステーキングコントラクト」で「stake」を実行します。

これでステークが確認できました。

4 ステーキングコントラクトで報酬を確認する

では、報酬を確認してみましょう。

「ステーキングコントラクト」の「getStakeInfo」から、下のように確認ができます。

なお、値は16進数ですので、任意のツールで10進数に変換しました。

5 ステーキングコントラクトからwithdrawする

では、ステーキングコントラクトからwithdraw(引き出し)します。

引き出したい量を設定し、実行します。

今回は全て引き出します。

下のように、「getStakeInfo」を確認します。

預けている量が0であり、いくらの報酬を受け取れるかを確認できます。

6 ステーキングコントラクトから報酬を引き出す

では、報酬を引き出しましょう。

ステーキングコントラクトの「claimRewardw」を実行します。

すると、報酬用のトークンを確認すると、報酬がきちんと送られていることが確認できました。

念の為、「Events」から履歴を見ても、確認することができます。

今回は以上です。

最後までありがとうございました。

Discussion