【Solidity】第9章第6回:NFTマーケットプレイスの構築

本記事では、Solidityを用いてNFTマーケットプレイスを構築する方法を解説します。NFT(非代替性トークン)を安全に取引できるプラットフォームを構築し、出品、購入、管理機能を備えたスマートコントラクトの作成を学びます。
0. 記事の概要
この記事を読むメリット
- NFTマーケットプレイスの仕組みを理解: スマートコントラクトを用いたNFT取引の仕組みを学べます。
- 出品・購入機能の実装: SolidityでNFTの売買を行うコントラクトを開発できます。
- セキュリティ対策の習得: NFT取引における安全性を確保する方法を理解できます。
この記事で学べること
- NFTマーケットプレイスの基本概念
- Solidityでの出品・購入機能の実装
- スマートコントラクトを活用した取引の流れ
1. NFTマーケットプレイスの概要
1.1 NFTとは?
NFT(Non-Fungible Token)は、ブロックチェーン上で発行される一意性を持つデジタル資産です。主にデジタルアートやゲームアイテム、音楽などに活用されています。
1.2 NFTマーケットプレイスの仕組み
NFTマーケットプレイスは、ユーザーがNFTを出品・購入できるプラットフォームです。主な機能は以下の通りです:
- 出品機能: ユーザーがNFTを販売リストに登録。
- 購入機能: 他のユーザーがNFTを購入し、所有権が移転。
- 取引履歴管理: すべての取引はブロックチェーン上に記録される。
2. SolidityでのNFTマーケットプレイス実装
2.1 NFTの出品機能
// NFT出品機能の実装
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
contract NFTMarketplace {
struct Listing {
address seller;
address nftAddress;
uint256 tokenId;
uint256 price;
}
mapping(uint256 => Listing) public listings;
uint256 public listingCount;
function listNFT(address _nftAddress, uint256 _tokenId, uint256 _price) public {
IERC721 nft = IERC721(_nftAddress);
require(nft.ownerOf(_tokenId) == msg.sender, "You don't own this NFT");
require(nft.getApproved(_tokenId) == address(this), "Marketplace not approved");
listings[listingCount] = Listing(msg.sender, _nftAddress, _tokenId, _price);
listingCount++;
}
}
動作解説
- ユーザーがNFTを出品する際に
listNFT()
を呼び出す。 - スマートコントラクトは、出品者がNFTの所有者であることを検証。
- 出品リスト
listings
に情報を保存。
2.2 購入機能の実装
// NFT購入機能の実装
function buyNFT(uint256 listingId) public payable {
Listing memory item = listings[listingId];
require(msg.value == item.price, "Incorrect price");
IERC721 nft = IERC721(item.nftAddress);
nft.safeTransferFrom(item.seller, msg.sender, item.tokenId);
payable(item.seller).transfer(msg.value);
delete listings[listingId];
}
動作解説
- 購入者が
buyNFT()
を呼び出し、指定した価格を支払う。 - スマートコントラクトがNFTの所有権を移転。
- 売上を出品者に送金し、リストから削除。
3. セキュリティと拡張性
3.1 スマートコントラクトの安全対策
NFTマーケットプレイスのセキュリティを向上させるため、以下の対策を講じます:
- リプレイ攻撃の防止: 購入トランザクションの一意性を確保。
- 手数料の導入: 取引ごとに手数料を徴収し、運営資金とする。
4. 練習問題
以下の課題に挑戦し、NFTマーケットプレイスの理解を深めましょう:
- NFTのオークション機能を追加し、最高入札者がNFTを獲得できるようにしてください。
- 購入時に手数料を徴収し、一部をマーケットプレイスの管理者へ送る機能を追加してください。
5. まとめ
本記事では、Solidityを用いたNFTマーケットプレイスの基本構造を解説しました。適切なセキュリティ対策と拡張機能を加えることで、安全で利便性の高いNFT取引プラットフォームを構築できます。