Lesson 1: スマートコントラクトをデプロイする
このレッスンでは、ゲームの結果を記録し、NFTをミントするためのスマートコントラクトをBase Sepoliaテストネットにデプロイします。
🎮 ゲームコントラクトの概要
今回使用するスマートコントラクトShootingGameNFT.solは、ERC1155規格に準拠したNFTコントラクトです。
主な機能は以下の通りです。
-
NFTのミント:
プレイヤー がゲームで倒した敵の数だけ、対応するIDのNFTをミントします。 -
所有権:
OpenZeppelinのOwnableを継承しており、コントラクトのオーナーのみがURIの設定や一括ミントなどの管理者機能を実行できます。 -
供給量の追跡:
ERC1155Supplyを継承しており、各NFTの総供給量を追跡できます。
スタータープロジェクトのpackages/contract/src/ShootingGameNFT.solにコードが用意されています。
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.4.0
pragma solidity ^0.8.27;
import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import {ERC1155Burnable} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol";
import {ERC1155Supply} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
/**
* シューティングゲームNFT
* 倒した敵の数だけERC1155のNFTがミントされる
*/
contract ShootingGameNFT is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply {
/**
* コンストラクター
*/
constructor(address initialOwner) ERC1155("") Ownable(initialOwner) {}
/**
* トークンURIを変更するメソッド
*/
function setURI(string memory newuri) public onlyOwner {
_setURI(newuri);
}
/**
* NFTをミントするメソッド
*/
function mint(address account, uint256 id, uint256 amount, bytes memory data)
public
{
_mint(account, id, amount, data);
}
/**
* 複数のNFTをまとめて一括でミントするメソッド
*/
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
public
onlyOwner
{
_mintBatch(to, ids, amounts, data);
}
// The following functions are overrides required by Solidity.
function _update(address from, address to, uint256[] memory ids, uint256[] memory values)
internal
override(ERC1155, ERC1155Supply)
{
super._update(from, to, ids, values);
}
}
🔧 Remix IDEでのデプロイ
スマートコントラクトのデプロイには、ブラウザで利用できるRemix IDEを使用します。

1. ファイルの準備
まず、Remix IDEにコントラクトのコードを貼り付けます。
- Remix IDEを開きます。
File Explorersパネルのcontractsフォルダ内に、ShootingGameNFT.solという名前で新しいファイルを作成します。