Funkcja _mint w kontrakcie ERC1155 na przedmioty z gry: od planu do testu
03
Zestaw przedmiotów z gry
Dodaj funkcję mintowania do kontraktu na przedmioty z gry
Chcesz stworzyć jeden kontrakt, który emituje miecze, mikstury i klucze, każdy z własnym identyfikatorem tokena, i chcesz wiedzieć, kto ma prawo tworzyć nowe tokeny. Agent pisze kod w Solidity, uruchamia Twoje polecenia kompilacji i testów na lokalnym łańcuchu lub sieci testowej oraz pokazuje każdy krok jako kartę z rzeczywistym wynikiem. Ten przewodnik skupia się na funkcji mintowania, ponieważ osoba, która może ją wywołać, decyduje o liczbie istniejących tokenów. Wdrożony kontrakt nie może być zmieniony, więc wszystko, co tu opisujemy, odbywa się na lokalnym łańcuchu lub sieci testowej, gdzie monety nie mają wartości. Początkujący mogą podążać za czterema krokami w kolejności, a doświadczeni czytelnicy mogą przejść bezpośrednio do szczegółowych opisów. Te same cztery kroki działają również dla zestawu biletów, gdzie każdy typ biletu otrzymuje swój własny identyfikator, a funkcja mintowania decyduje o liczbie emitowanych sztuk.
01
Otwórz folder projektu
Uruchom WaveClamp, wybierz folder zawierający pliki .sol i testy jako folder roboczy czatu oraz wybierz Ask first, aby każda zmiana była prezentowana jako różnica (diff), którą możesz zaakceptować lub odrzucić. Narzędzia do pracy na plikach działają wewnątrz tego folderu, więc trzymaj projekt w jednym miejscu. Utwórz tymczasowy folder na pierwsze uruchomienie, jeśli chcesz tylko się praktykować.
02
Opisz kontrakt
Poproś o kontrakt na przedmioty z gry z trzema typami przedmiotów, funkcję mintowania, którą może wywołać tylko jedno konto właściciela, oraz transfery wsadowe, i pozwól agentowi utworzyć plik za pomocą narzędzia write_file. Nazwij plik zgodnie z nazwą kontraktu, aby kolejne kroki mogły się do niego odwoływać. Trzymaj pierwsze żądanie krótkim, ponieważ drugie żądanie może dodać transfery wsadowe po zaakceptowaniu pierwszej różnicy (diff).
03
Uruchom kompilację i testy
Poinstruuj agenta, aby uruchomił Twoje polecenie kompilacji i polecenie testów za pomocą narzędzia Shell, a następnie odczytał kod wyjścia oraz nazwy nieudanych testów na rozwiniętej karcie. Sukces jest oceniany na podstawie rzeczywistego kodu wyjścia, a nie na podstawie podsumowania. Jeśli polecenie kompilacji się nie powiedzie, karta wyświetli tekst błędu, a agent może go odczytać i zaproponować poprawkę jako nową różnicę (diff).
04
Przeczytaj wynik
Otwórz rozwinięte karty, przeczytaj różnicę (diff) i wynik polecenia, zaakceptuj to, co jest poprawne, odrzuć resztę i poproś o poprawkę wszędzie tam, gdzie test nadal się nie powiedzie. Powtarzaj ten proces, aż testy przejdą pomyślnie, a następnie jeszcze raz przeczytaj funkcję mintowania. Trzymaj każdą zaakceptowaną różnicę (diff) małą, aby późniejsza awaria wskazywała na jedną zmianę, a nie na dziesięć.
Minimalny interfejs, od którego możesz zacząć
WaveClamp · Napisz minimalny interfejs● Ask first
Napisz plik MultiTokenMinimal.sol z jednym zdarzeniem i dwiema funkcjami widocznymi (view), a następnie go skompiluj.
write_fileMultiTokenMinimal.solzapisano
read_fileMultiTokenMinimal.sol14 linii
grepbalanceOf1 dopasowanie
Shellyour compile commandexit 0
oczekiwanie na Twoją zgodę przed kolejnym krokiemOdrzućAkceptuj
Ten interfejs tylko do odczytu deklaruje zdarzenie TransferSingle oraz funkcje balanceOf i uri zgodne ze standardem multi-token. Nie przechowuje stanu, logiki mintowania ani kluczy, co czyni go małym plikiem do przeczytania przed dodaniem prawdziwej logiki. Najpierw uruchom na nim swoje polecenie kompilacji. Skompiluj go najpierw, a następnie pozwól agentowi rozszerzyć go o jedną przeanalizowaną różnicę (diff) na raz, zaczynając od funkcji mintowania. Nazwa pliku odpowiada etykietie przykładu, więc możesz poprosić agenta o jego otwarcie później.
Przewodniki: mintowanie, porównywanie, transfery wsadowe i opisywanie tokenów
Dodaj funkcję mintowania
Otwórz kontrakt i poproś agenta, aby opakował pomocniczą funkcję _mint zgodną z ERC1155 w publiczną funkcję, którą może wywołać tylko konto właściciela. Agent używa narzędzia read_file, aby zobaczyć aktualny kod, oraz edit_file, aby wstawić funkcję, i pokazuje zmianę jako różnicę (diff). Typowe implementacje open-source eksponują wewnętrzne funkcje pomocnicze o nazwach _mint i _mintBatch, a wewnętrzna funkcja pomocnicza nie ma własnej kontroli dostępu, dlatego opakowanie jest istotne. Możesz krok po kroku utworzyć token ERC20 tą samą metodą, ale zestaw przedmiotów z gry wymaga identyfikatorów, więc zacznij od układu multi-token. Następnie Shell uruchamia Twoje polecenie kompilacji i polecenie testów, a każda karta pokazuje rzeczywisty kod wyjścia. Zaakceptuj różnicę (diff) tylko wtedy, gdy przeczytasz testy.
Porównaj z przykładem ERC-721
Otwórz przykład kontraktu ERC721 ze swojego własnego projektu lub poproś agenta, aby go napisał za pomocą write_file, i umieść go obok swojego zestawu przedmiotów. Agent używa narzędzia grep do wylistowania funkcji w obu plikach oraz read_file, aby porównać sposób przechowywania własności: jeden właściciel na token w pliku z unikalnym tokenem oraz saldo na konto i identyfikator w pliku multi-token. Standard dla zdecentralizowanych profili wykorzystujących NFT typu soulbound wymagałby tokenów, których nie można przelać, co jest innym projektem niż przedmioty, które gracze wymieniają między sobą. Poproś agenta, aby umieścił różnice w krótkiej tabeli. Przeczytaj porównanie w czacie, zdecyduj, który standard pasuje do Twojego projektu, a dopiero wtedy poproś o zmiany w kodzie.
Dodaj transfery wsadowe
Gracze często przenoszą wiele typów przedmiotów jednocześnie, więc poproś agenta o dodanie funkcji safeBatchTransferFrom i balanceOfBatch do kontraktu. Agent używa edit_file do wprowadzenia zmiany, glob do znalezienia plików testowych oraz Shell do uruchomienia Twojego polecenia testów po każdej edycji. Funkcje wsadowe przenoszą wiele identyfikatorów tokenów w jednej transakcji, co oznacza, że jeden test może sprawdzić wiele sald. Zrozumienie bezkosztowego onboardingu w ERC4337 to osobny temat, więc trzymaj go z dala od pierwszego kontraktu i przetestuj go osobno. Przeczytaj różnicę (diff) w trybie Ask first, uruchom testy ponownie i poszukaj zdarzenia TransferBatch w wynikach przed zaakceptowaniem zmiany.
Sprawdź odbiorcę i metadane
Kontrakt, który odbiera tokeny, musi zaimplementować funkcje onERC1155Received i onERC1155BatchReceived oraz zaakceptować tokeny, w przeciwnym razie bezpieczny transfer zostanie odrzucony. Poproś agenta, aby użył narzędzia grep do wyszukania obu nazw i otworzył kontrakt odbierający za pomocą read_file, a następnie aby wypisał, która z nich brakuje. Następnie poproś go, aby użył edit_file w wartości uri(id), aby zawierała ona {id}, co klienci zastępują identyfikatorem tokena w małych literach w formacie szesnastkowym, uzupełnionym zerami do 64 znaków. Użyj write_file dla jednego pliku JSON na każdy identyfikator. Uruchom swoje polecenie kompilacji i polecenie testów, przeczytaj oba kody wyjścia i przeanalizuj ostateczną różnicę (diff) przed jej zaakceptowaniem.