มาสร้าง NFT Marketplace Smart Contract อย่างง่ายด้วย Solidity, Remix กันเถอะ

Wichita Serchuit
Under Ledger
Published in
2 min readJun 14, 2022

เราสามารถเขียน smart contract สำหรับ NFT marketplace ได้อย่างง่ายๆ โดยที่เราจะใช้ Solidity และstandard พื้นฐานอย่าง ERC721

Marketplace workflow ที่เรากำลังจะทำ

โดยก่อนที่เราจะสร้าง Marketplace ได้นั้น เราก็ควรจะมีเจ้าตัว NFT ไว้ก่อนเพื่อใช้ในการทดลองใช้กับ contract ของเรา

source: DAVID RAZMADE

📂 Git repository สำหรับ ERC-721 NFT Tutorial ด้วย Solidity และ Remix IDE

หลังจากที่ deploy NFT และได้ contract address มาแล้ว ก็เปิด Remix IDE มาลองเขียน contract กันได้เลย

📋 โดย function การทำงานหลักๆ ประกอบด้วย:

  1. List item — สามารถตั้งขาย item ใน marketplace ได้ โดยจะได้รับค่า item เมื่อมีคนมากด “Buy” item ตัวนั้นๆ
  2. Buy item — สามารถซื้อ item ใน marketplace ได้ตาม Token ID ที่ระบุ
  3. Get item by owner's address — เรียกดู item ทั้งหมดที่เป็นเจ้าของ
  4. Get all items — เรียกดู item ทั้งหมดใน marketplace

เริ่มจากการประกาศ contract ใหม่และใส่ค่า config ที่ต้องการต่างๆ

โดยใน marketplace contract นี้มีการดึง ERC721 เพื่อใช้ function ในการจัดการ NFT (โอน, เปลี่ยน owner), Ownable ใช้เพื่อตรวจ permission ของการเรียกใช้ contract และ ERC20 เพื่อใช้ function ในการรับ-โอนเงินเมื่อทำการ Sell/Buy item

โดยใน contractor กำหนดให้มีการรับ:

  • NFT contract address - ใช้ในการระบุ NFT identity ที่ต้องการใช้
  • Creator wallet address - ไว้โอน token ไปให้เจ้าของเมื่อขาย item สำเร็จแล้ว
  • Token contract address - ระบุว่าจะให้ซื้อ-ขาย item ด้วย token สกุลอะไร

List item / Cancel list item

ในการ list item เพื่อทำการประกาศขาย NFT นั้น จะต้องมีการ transfer NFT ไปยังตัวกลางอย่าง Marketplace contract โดยการ map กันของ token id และ item struct เก็บไว้ใน “tokenIdMarketItems”

ที่เราต้องเก็บ token id ไว้ใน “marketitems” (array) เพราะเมื่อ item เคยถูก list แล้วจะไม่สามารถลบออกจาก mapping ได้ (จะมีแค่อัพเดท status, price และ owner) จึงจำเป็นต้องมี variable มาเช็คว่าตัวไหน Active อยู่จริงบ้าง แทนการ loop เพื่อเช็ค item status ของทั้งหมด

ก่อนเรียก listItems() จะต้องทำการ approve NFT ให้กับ marketplace contract address ด้วยจะได้ transfer NFT ได้

Get all items / Get own items

เรียกดู item ที่เคยเก็บไว้ใน marketplace ได้โดยการ loop “tokenIdMarketItems”

Buy Item

ในการเรียก buyMarketItem() เพื่อซื้อ item นั้น item status จะถูกเปลี่ยนเป็น Sold และทำการ transfer NFT item ไปยังผู้ที่กดซื้อ (msg.sender)

หลังจากนั้น token ตามมูลค่าของ item price ที่ถูกตั้งไว้จะถูกแบ่งออกเป็น 2 ส่วน (ให้ creator และ ให้เจ้าของ item ที่ลงขาย) และถูกโอนออกไป

.

.

เมื่อเอามายำรวมกัน และใส่ event, emit ก็จะได้หน้าตาประมาณนี้

📂 สามารถดูโค้ดฉบับเต็มได้ที่ Simple NFT Marketplace smart contract

--

--