Forgeを使ってコントラクトを作成し、thirdwebにデプロイしよう
こんにちは、CryptoGamesの高橋です。
本日は、こちらの記事を元に、Forgeを使ってコントラクトを作成し、thirdweb上にデプロイしていきたいと思います。
1.Foundryをインストールする
まずは、Foundryを公式からインストールしてみましょう。
環境によって、方法が異なるのでここでは詳細は省略します。
Foundryをインストールすると、①forge②cast③anvilが使用できるようになります。
○LinuxとMacOS
○Windows
2.thirdwebでForge用のコントラクトのテンプレートを用意する
こちらのコマンドを実行します。
npx thirdweb@latest create contract
その後、下のようにして、Forgeをアップデートします。
forge clean && foundryup && forge update
3.コントラクトを見てみましょう
では、コントラクトを見ていきましょう。
下のコードを追加します。
このミントの関数について、テストを行っていきます。
function mint(address _to, uint256 _amount) external {
require(_amount > 0, 'You must mint at least one token!');
_safeMint(_to, _amount);
}
では、テスト用のコントラクトも見てみましょう。
ポイントは「Contract.t.sol」と書かれているように、solidityでコントラクトとして書かれている点だと思います。
コードもこちらに貼り付けておきます。
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import "forge-std/Test.sol";
import "../src/Contract.sol";
contract ContractTest is Test {
Contract drop;
address testAddr = makeAddr("Test");
function setUp() public {
drop = new Contract("MintTest", "MT", testAddr, 500, testAddr);
}
function testDropWithZeroTokens() public{
vm.expectRevert(bytes("You must mint at least one token!"));
drop.mint(testAddr, 0);
assertEq(drop.balanceOf(testAddr), 0);
}
function testDropWithTokensMinted() public{
drop.mint(testAddr, 2);
assertEq(drop.balanceOf(testAddr), 2);
}
}
まずは、こちらのmakeAddr関数を見てみましょう。
こちらの公式ページに詳細があります。
下のように、アドレスを作成しています。
次に、下のようにdropにコントラクトのインスタンスを入れて、vm.expertRevert関数を使っています。
今回は、vm.expertRevertの次の行のmint関数がエラーになることを想定しています。(0個ミントしようとしており、コントラクトでrequireで設定している)
その時に、表示されるエラーメッセージが想定通りかどうかを確かめることができます。
詳細はこちらの公式になります。
下のように、エラーメッセージを渡しています。
こちらでは、assertEq関数を使っています。
二つの引数が等しいかどうかを確認しています。
詳細はこちらの公式になります。
下のように、aとbが等しいかどうかを確認しています。
4.テストを実行する
確認ができましたら、次のコマンドで、テストを行ってみましょう。
forge test
うまくいったようです。
5.thirdwebにデプロイする
最後に、次のようにして、thirdwebにデプロイしてみましょう。
npx thirdweb@latest deploy
すると、次のように、thirdwebが立ち上がります。
必要事項を入力し、「Deploy Now」でデプロイができます。
今回は以上です。
ぜひやってみてください。
Discussion