WaveClamp
Fluxuri de lucru

Funcția ERC1155 _mint într-un contract de obiecte de joc, de la plan la test

03
Set de obiecte de joc

Adăugare emitere într-un contract de obiecte de joc

Vrei un singur contract care emite săbii, pocțiuni și chei, fiecare cu un token id unic, și vrei să știi cine are dreptul să creeze tokenuri noi. Agentul scrie codul Solidity, rulează comenzile tale de compilare și testare pe o rețea locală sau pe o rețea de testare, și afișează fiecare pas ca un card cu rezultatul real. Acest ghid urmărește funcția de emitere, deoarece cine poate apela această funcție decide câte tokenuri există. Un contract implementat nu poate fi modificat, așa că totul rămâne pe o rețea locală sau pe o rețea de testare, ale căror monede nu au valoare. Începătorii pot parcurge cei patru pași în ordine, iar cititorii experimentați pot sări direct la parcurgerile de mai jos. Acești patru pași funcționează la fel și pentru un set de bilete, unde fiecare tip de bilet primește un id unic, iar funcția de emitere decide câte bilete de fiecare tip există.

01

Deschide dosarul proiectului

Pornește WaveClamp, alege dosarul care conține fișierele .sol și testele ca dosar de lucru pentru chat, și alege Ask first pentru ca fiecare modificare să apară ca o diferență pe care o accepți sau respingi. Instrumentele de fișiere funcționează în interiorul acestui dosar, așa că păstrează proiectul într-un singur loc. Creează un dosar de test pentru prima rulare dacă vrei doar să exersezi.

02

Descrie contractul

Cere un contract de obiecte de joc cu trei tipuri de obiecte, o funcție de emitere pe care doar un cont de proprietar o poate apela, și transferuri în loturi, și lasă agentul să creeze fișierul cu write_file. Denumește fișierul după contract, astfel încât pașii următori să îl poată referi. Menține prima cerere simplă, deoarece o a doua cerere poate adăuga transferuri în loturi după ce prima diferență este acceptată.

03

Rulează compilarea și testele

Spune agentului să ruleze comanda de compilare și comanda de testare prin Shell, apoi citește codul de ieșire și numele testelor eșuate pe cardul extins. Succesul este evaluat în funcție de codul de ieșire real, nu de un rezumat. Dacă comanda de compilare eșuează, cardul afișează textul erorii, iar agentul îl poate citi și poate propune o remediere ca o nouă diferență.

04

Citește rezultatul

Deschide cardurile extinse, citește diferența și ieșirea comenzii, acceptă ceea ce este corect, respinge restul și cere o remediere acolo unde un test mai eșuează. Repetă până când testele trec, apoi citește din nou funcția de emitere. Menține fiecare diferență acceptată mică, astfel încât un eșec ulterior să indice o singură modificare și nu zece.

O interfață minimală de la care să începi

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);
}

Această interfață doar de citire declară evenimentul TransferSingle și funcțiile balanceOf și uri ale standardului multi-token. Nu conține stare, logică de emitere sau chei, ceea ce o face un fișier mic de citit înainte de a adăuga logica reală. Rulează mai întâi comanda de compilare pentru ea. Compileaz-o mai întâi, apoi lasă agentul să o extindă o diferență revizuită pe rând, începând cu funcția de emitere. Numele fișierului se potrivește cu eticheta exemplului, astfel încât să poți cere agentului să îl deschidă mai târziu.

Parcurgeri: emitere, comparare, loturi și descrierea tokenurilor

Adaugă funcția de emitere

Deschide contractul și cere agentului să învelească helper-ul ERC1155 _mint într-o funcție publică pe care doar contul de proprietar o poate apela. Agentul folosește read_file pentru a vedea codul curent și edit_file pentru a insera funcția, iar el afișează modificarea ca o diferență. Implementările open-source comune expun helper-e interne numite _mint și _mintBatch, iar un helper intern nu are propria verificare de acces, motiv pentru care wrapper-ul este important. Poți crea un token ERC20 pas cu pas cu aceeași metodă, dar un set de obiecte de joc are nevoie de id-uri, așa că începe de la structura multi-token. Shell rulează apoi comanda de compilare și comanda de testare, iar fiecare card afișează un cod de ieșire real. Acceptă diferența doar după ce ai citit testele.

Compară cu un exemplu ERC-721

Deschide un exemplu de contract ERC721 din propriul proiect, sau cere agentului să îl scrie cu write_file, și plasează-l lângă setul tău de obiecte. Agentul folosește grep pentru a lista funcțiile din ambele fișiere și read_file pentru a compara cum este stăpânirea: un proprietar pe token în fișierul cu token unic, un sold pe cont și id în fișierul multi-token. Un standard pentru profiluri descentralizate care folosește NFT-uri soulbound ar avea nevoie de tokenuri care nu pot fi transferate, ceea ce este un design diferit de cel al obiectelor pe care jucătorii le schimbă. Cere agentului să pună diferențele într-un tabel scurt. Citești comparația în chat, decizi care standard se potrivește designului tău și abia apoi ceri modificări de cod.

Adaugă transferuri în loturi

Jucătorii mută adesea mai multe tipuri de obiecte simultan, așa că cere agentului să adauge safeBatchTransferFrom și balanceOfBatch la contract. Agentul folosește edit_file pentru modificare, glob pentru a găsi fișierele de test și Shell pentru a rula comanda de testare după fiecare editare. Funcțiile de lot mută mai multe id-uri de token într-o singură tranzacție, ceea ce înseamnă că un singur test poate verifica mai multe solduri. Înțelegerea onboarding-ului ERC4337 fără taxe de gaz este un subiect separat, așa că ține-l în afara contractului inițial și testeaz-l pe cont propriu. Citește diferența în Ask first, rulează din nou testele și caută evenimentul TransferBatch în ieșire înainte de a accepta modificarea.

Verifică destinatarul și metadatele

Un contract care primește tokenuri trebuie să implementeze onERC1155Received și onERC1155BatchReceived și să accepte tokenurile, altfel transferul safe este respins. Cere agentului să facă grep pentru ambele nume și să deschidă contractul destinatar cu read_file, apoi să listeze care lipsește. Apoi cere-i să folosească edit_file pe valoarea uri(id) astfel încât să conțină {id}, pe care clienții înlocuiesc cu id-ul tokenului în hexazecimal mic, completat la 64 de caractere. Folosește write_file pentru un fișier JSON per id. Rulează comanda de compilare și comanda de testare, citește ambele coduri de ieșire și revizuiește diferența finală înainte de a o accepta.

WaveClamp pentru Windows

Începe primul tău contract multi-token

Descarcă WaveClamp ↗