WaveClamp
เวิร์กโฟลว์

ERC1155 _mint ในสัญญาไอเทมเกม: จากแผนงานสู่การทดสอบ

03
ชุดไอเทมเกม

เพิ่มฟังก์ชันการสร้างโทเคนให้สัญญาไอเทมเกม

คุณต้องการสัญญาเดียวที่ออกดาบ ยา และกุญแจ โดยแต่ละชนิดมี token id เป็นของตัวเอง และต้องการรู้ว่ามีใครบ้างที่ได้รับอนุญาตให้สร้างโทเคนใหม่ ตัวเอเจนต์จะเขียนโค้ด Solidity รันคำสั่งคอมไพล์และเทสต์ของคุณบนเชนท้องถิ่นหรือเทสต์เน็ตเวิร์ก และแสดงแต่ละขั้นตอนเป็นการ์ดพร้อมผลลัพธ์จริง คู่มือนี้มุ่งเน้นไปที่ฟังก์ชันการสร้างโทเคน เพราะผู้ที่มีสิทธิ์เรียกใช้ฟังก์ชันนี้คือผู้กำหนดจำนวนโทเคนที่มีอยู่ เมื่อสัญญาถูกปรับใช้แล้วจะไม่สามารถแก้ไขได้ ดังนั้นทุกขั้นตอนในคู่มือนี้จึงอยู่บนเชนท้องถิ่นหรือเทสต์เน็ตเวิร์ก ซึ่งเหรียญที่ใช้มีมูลค่าเป็นศูนย์ ผู้เริ่มต้นสามารถทำตามขั้นตอนทั้งสี่ตามลำดับ ส่วนผู้ที่มีประสบการณ์สามารถข้ามไปยังส่วนการสาธิตการทำงานด้านล่างได้ ขั้นตอนทั้งสี่นี้ยังใช้ได้กับชุดตั๋ว โดยแต่ละประเภทตั๋วจะมี id เป็นของตัวเอง และฟังก์ชันการสร้างโทเคนจะเป็นผู้กำหนดจำนวนของแต่ละประเภท

01

เปิดโฟลเดอร์โปรเจกต์

เปิด WaveClamp เลือกโฟลเดอร์ที่มีไฟล์ .sol และไฟล์เทสต์ของคุณเป็นโฟลเดอร์ทำงานของแชท แล้วเลือก Ask first เพื่อให้การเปลี่ยนแปลงทุกครั้งปรากฏเป็น diff ที่คุณสามารถยอมรับหรือปฏิเสธได้ เครื่องมือจัดการไฟล์จะทำงานภายในโฟลเดอร์นี้ ดังนั้นควรเก็บโปรเจกต์ไว้ในที่เดียว สร้างโฟลเดอร์ชั่วคราวสำหรับการรันครั้งแรกหากคุณต้องการฝึกฝนเท่านั้น

02

อธิบายโครงสร้างสัญญา

ขอให้สร้างสัญญาไอเทมเกมที่มีไอเทมสามประเภท ฟังก์ชันการสร้างโทเคนที่เรียกได้เฉพาะบัญชีเจ้าของ และฟังก์ชันการโอนแบบรวมกลุ่ม แล้วปล่อยให้เอเจนต์สร้างไฟล์ด้วย write_file ตั้งชื่อไฟล์ให้ตรงกับชื่อสัญญา เพื่อให้ขั้นตอนถัดไปสามารถอ้างอิงถึงไฟล์นี้ได้ ขอให้คำขอแรกมีขนาดเล็กรวม เพราะคำขอที่สองสามารถเพิ่มฟังก์ชันการโอนแบบรวมกลุ่มได้หลังจากที่ยอมรับ diff แรกแล้ว

03

รันคำสั่งคอมไพล์และเทสต์

บอกให้เอเจนต์รันคำสั่งคอมไพล์และคำสั่งเทสต์ของคุณผ่าน Shell จากนั้นอ่าน exit code และชื่อของเทสต์ที่ล้มเหลวจากการ์ดที่ขยายออก การตัดสินความสำเร็จดูจาก exit code จริง ไม่ใช่จากบทสรุป หากคำสั่งคอมไพล์ล้มเหลว การ์ดจะแสดงข้อความข้อผิดพลาด และเอเจนต์สามารถอ่านข้อความนั้นและเสนอการแก้ไขเป็น diff ใหม่ได้

04

อ่านผลลัพธ์

เปิดการ์ดที่ขยายออก อ่าน diff และผลลัพธ์จากคำสั่ง ยอมรับส่วนที่ถูกต้อง ปฏิเสธส่วนที่เหลือ และขอการแก้ไขในทุกจุดที่เทสต์ยังล้มเหลว ทำซ้ำจนกว่าเทสต์จะผ่าน จากนั้นอ่านฟังก์ชันการสร้างโทเคนอีกครั้ง รักษาขนาดของ diff ที่ยอมรับให้เล็กเสมอ เพื่อให้การล้มเหลวในภายหลังชี้ไปที่การเปลี่ยนแปลงเพียงจุดเดียว ไม่ใช่หลายจุด

อินเทอร์เฟซพื้นฐานเพื่อเริ่มต้น

MultiTokenMinimal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IMultiTokenMinimal {
    event TransferSingle(address indexed operator,
        address indexed from, address indexed to,
        uint256 id, uint256 value);

    function balanceOf(address account, uint256 id)
        external view returns (uint256);

    function uri(uint256 id)
        external view returns (string memory);
}

อินเทอร์เฟซแบบอ่านอย่างเดียวนี้ประกาศอีเวนต์ TransferSingle และฟังก์ชัน balanceOf กับ uri ตามมาตรฐานมัลติโทเคน สัญญานี้ไม่มีสถานะ ไม่มีตรรกะการสร้างโทเคน และไม่มีคีย์ใดๆ ซึ่งทำให้เป็นไฟล์ขนาดเล็กที่ควรอ่านก่อนเพิ่มตรรกะจริง รันคำสั่งคอมไพล์บนไฟล์นี้ก่อน จากนั้นคอมไพล์ให้สำเร็จ แล้วปล่อยให้เอเจนต์ขยายไฟล์ทีละ diff ที่ผ่านการตรวจสอบแล้ว โดยเริ่มจากฟังก์ชันการสร้างโทเคน ชื่อไฟล์ตรงกับป้ายกำกับตัวอย่าง เพื่อให้คุณสามารถขอให้เอเจนต์เปิดไฟล์นี้ได้ในภายหลัง

การสาธิตการทำงาน: สร้างโทเคน เปรียบเทียบ โอนแบบรวมกลุ่ม และอธิบายโทเคน

เพิ่มฟังก์ชันการสร้างโทเคน

เปิดสัญญาและขอให้เอเจนต์ห่อหุ้มตัวช่วย ERC1155 _mint ไว้ในฟังก์ชัน public ที่เรียกได้เฉพาะบัญชีเจ้าของเท่านั้น เอเจนต์จะใช้ read_file เพื่อดูโค้ดปัจจุบันและใช้ edit_file เพื่อแทรกฟังก์ชัน โดยจะแสดงการเปลี่ยนแปลงเป็น diff การใช้งานโอเพนซอร์สทั่วไปมักเปิดเผยตัวช่วยภายในชื่อ _mint และ _mintBatch ซึ่งตัวช่วยภายในไม่มีฟังก์ชันตรวจสอบการเข้าถึงของตัวเอง จึงทำให้การห่อหุ้มนี้มีความสำคัญ คุณสามารถสร้างโทเคน ERC20 ทีละขั้นตอนด้วยวิธีเดียวกัน แต่ชุดไอเทมเกมจำเป็นต้องใช้ id จึงควรเริ่มจากโครงสร้างมัลติโทเคน จากนั้น Shell จะรันคำสั่งคอมไพล์และคำสั่งเทสต์ของคุณ โดยแต่ละการ์ดจะแสดง exit code จริง ยอมรับ diff ก็ต่อเมื่อคุณได้อ่านเทสต์แล้ว

เปรียบเทียบกับตัวอย่าง ERC-721

เปิดตัวอย่างสัญญา ERC721 จากโปรเจกต์ของคุณเอง หรือขอให้เอเจนต์เขียนด้วย write_file แล้ววางไว้ข้างชุดไอเทมของคุณ เอเจนต์จะใช้ grep เพื่อแสดงรายการฟังก์ชันในทั้งสองไฟล์ และใช้ read_file เพื่อเปรียบเทียบวิธีการเก็บข้อมูลความเป็นเจ้าของ: หนึ่งเจ้าของต่อโทเคนในไฟล์โทเคนเดี่ยว และยอดคงเหลือต่อบัญชีและ id ในไฟล์มัลติโทเคน มาตรฐานสำหรับโปรไฟล์แบบกระจายศูนย์ที่ใช้ soulbound NFT จำเป็นต้องใช้โทเคนที่ไม่สามารถโอนย้ายได้ ซึ่งเป็นการออกแบบที่แตกต่างจากไอเทมที่ผู้เล่นสามารถแลกเปลี่ยนกันได้ ขอให้เอเจนต์สรุปความแตกต่างลงในตารางสั้นๆ คุณอ่านการเปรียบเทียบในแชท ตัดสินใจว่ามาตรฐานใดเหมาะกับออกแบบของคุณ แล้วจึงขอการเปลี่ยนแปลงโค้ด

เพิ่มการโอนแบบรวมกลุ่ม

ผู้เล่นมักเคลื่อนย้ายไอเทมหลายประเภทพร้อมกัน ดังนั้นขอให้เอเจนต์เพิ่ม safeBatchTransferFrom และ balanceOfBatch ให้กับสัญญา เอเจนต์จะใช้ edit_file สำหรับการเปลี่ยนแปลง ใช้ glob เพื่อค้นหาไฟล์เทสต์ และใช้ Shell เพื่อรันคำสั่งเทสต์ของคุณหลังจากแต่ละการแก้ไข ฟังก์ชันแบบรวมกลุ่มสามารถโอนหลาย token id ในธุรกรรมเดียว ซึ่งหมายความว่าเทสต์หนึ่งรายการสามารถตรวจสอบยอดคงเหลือได้หลายรายการ การทำความเข้าใจเรื่องการลงทะเบียนแบบไร้แก๊สผ่าน ERC4337 เป็นหัวข้อแยกต่างหาก จึงควรเก็บไว้นอกสัญญาแรกและทดสอบแยกต่างหาก อ่าน diff ในโหมด Ask first รันเทสต์อีกครั้ง และมองหาอีเวนต์ TransferBatch ในผลลัพธ์ก่อนยอมรับการเปลี่ยนแปลง

ตรวจสอบผู้รับและเมตาดาตา

สัญญาที่รับโทเคนต้องดำเนินการ onERC1155Received และ onERC1155BatchReceived และยอมรับโทเคนเหล่านั้น มิฉะนั้นการโอนแบบปลอดภัยจะถูกปฏิเสธ ขอให้เอเจนต์ใช้ grep เพื่อค้นหาชื่อทั้งสอง และเปิดสัญญาผู้รับด้วย read_file จากนั้นแสดงรายการว่าชื่อใดหายไป ขอให้อีกครั้งหนึ่งใช้ edit_file กับค่า uri(id) เพื่อให้มี {id} ซึ่งไคลเอนต์จะแทนที่ด้วย token id เป็นเลขฐานสิบหกตัวพิมพ์เล็ก ที่เติมศูนย์หน้าให้ยาว 64 ตัวอักษร ใช้ write_file สำหรับไฟล์ JSON หนึ่งไฟล์ต่อ id รันคำสั่งคอมไพล์และคำสั่งเทสต์ของคุณ อ่าน exit code ทั้งสอง และตรวจสอบ diff สุดท้ายก่อนยอมรับ

WaveClamp สำหรับ Windows

เริ่มต้นสัญญามัลติโทเคนแรกของคุณ

ดาวน์โหลด WaveClamp ↗