WaveClamp
Pracovní postupy

ERC1155 _mint ve smlouvě na herní předměty: od plánu po test

03
Sada herních předmětů

Přidání ražby do smlouvy na herní předměty

Chcete jednu smlouvu, která vydává meče, lektvary a klíče, přičemž každý má vlastní token id, a chcete vědět, kdo má právo vytvářet nové tokeny. Agent napíše kód ve Solidity, spustí vaše příkazy pro kompilaci a testování na lokálním řetězci nebo testovací síti a každý krok zobrazí jako kartu s reálným výsledkem. Tento návod sleduje funkci pro ražbu, protože ten, kdo ji může volat, rozhoduje o tom, kolik tokenů bude existovat. Nasazená smlouva se již nedá změnit, takže vše zde zůstává na lokálním řetězci nebo testovací síti, kde mají mince nulovou hodnotu. Začátečníci mohou sledovat čtyři kroky v pořadí a zkušení čtenáři mohou skočit přímo k průvodcům níže. Stejné čtyři kroky fungují i pro sadu lístků, kde každý typ lístku dostane vlastní id a funkce pro ražbu rozhoduje o tom, kolik kusů každého typu bude existovat.

01

Otevřete složku projektu

Spusťte WaveClamp, vyberte složku, která obsahuje vaše .sol soubory a testy, jako pracovní složku chatu, a zvolte Ask first, aby každá změna přišla jako diff, který můžete přijmout nebo zamítnout. Nástroje pro práci se soubory fungují uvnitř této složky, takže udržujte projekt na jednom místě. Vytvořte dočasnou složku pro první spuštění, pokud chcete pouze cvičit.

02

Popište smlouvu

Požádejte o smlouvu na herní předměty se třemi typy předmětů, funkcí pro ražbu, kterou může volat pouze účet vlastníka, a hromadnými převody, a nechte agenta vytvořit soubor pomocí write_file. Pojmenujte soubor podle smlouvy, aby ho mohly pozdější kroky odkazovat. Nechte první požadavek malý, protože druhý požadavek může přidat hromadné převody po přijetí prvního diffu.

03

Spusťte kompilaci a testy

Řekněte agentovi, aby spustil váš příkaz pro kompilaci a příkaz pro testování přes Shell, poté přečtěte exit code a názvy selhajících testů na rozbalené kartě. Úspěch se posuzuje podle reálného exit code, ne podle shrnutí. Pokud příkaz pro kompilaci selže, karta zobrazí text chyby a agent ji může přečíst a navrhnout opravu jako nový diff.

04

Přečtěte si výsledek

Otevřete rozbalené karty, přečtěte diff a výstup příkazu, přijměte to, co je správné, zamítněte zbytek a požádejte o opravu tam, kde test stále selhává. Opakujte, dokud testy neprojdou, poté znovu přečtěte funkci pro ražbu. Udržujte každý přijatý diff malý, aby pozdější selhání ukazovalo na jednu změnu, ne na deset.

Minimální rozhraní, od kterého můžete začít

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

Toto rozhraní pouze pro čtení deklaruje událost TransferSingle a funkce balanceOf a uri podle standardu pro více tokenů. Neobsahuje žádný stav, žádnou logiku pro ražbu ani žádné klíče, což z něj činí malý soubor ke čtení předtím, než přidáte skutečnou logiku. Nejprve na něm spustte svůj příkaz pro kompilaci. Nejprve ji zkompilujte, poté nechte agenta ji rozšířit o jeden zkontrolovaný diff v čase, počínaje funkcí pro ražbu. Název souboru odpovídá štítku příkladu, takže můžete agenta požádat o jeho otevření později.

Průvodci: ražba, porovnání, hromadné převody a popis tokenů

Přidejte funkci pro ražbu

Otevřete smlouvu a požádejte agenta, aby zabalil pomocnou funkci ERC1155 _mint do veřejné funkce, kterou může volat pouze účet vlastníka. Agent použije read_file k zobrazení aktuálního kódu a edit_file k vložení funkce a změnu zobrazí jako diff. Časté implementace s otevřeným zdrojovým kódem vystavují interní pomocné funkce s názvy _mint a _mintBatch a interní pomocná funkce nemá vlastní kontrolu přístupu, proto je obal důležitý. Token ERC20 můžete vytvořit krok za krokem stejnou metodou, ale sada herních předmětů potřebuje id, takže začněte od rozložení pro více tokenů. Shell poté spustí váš příkaz pro kompilaci a příkaz pro testování a každá karta zobrazuje reálný exit code. Přijměte diff pouze tehdy, když jste si přečetli testy.

Porovnejte s příkladem ERC-721

Otevřete příklad smlouvy ERC721 ze svého vlastního projektu nebo požádejte agenta, aby ji napsal pomocí write_file, a umístěte ji vedle své sady předmětů. Agent použije grep k výpisu funkcí v obou souborech a read_file k porovnání, jak je uloženo vlastnictví: jeden vlastník na token ve souboru pro unikátní tokeny, zůstatek na účet a id ve souboru pro více tokenů. Standard pro decentralizované profily pomocí soulbound NFT by potřeboval tokeny, které nelze převést, což je jiný design než u předmětů, které hráči předávají. Požádejte agenta, aby rozdíly shrnul do krátké tabulky. Vy si porovnání v chatu přečtete, rozhodnete se, který standard odpovídá vašemu designu, a až poté požádáte o změny kódu.

Přidejte hromadné převody

Hráči často přesouvají několik typů předmětů najednou, takže požádejte agenta, aby do smlouvy přidal safeBatchTransferFrom a balanceOfBatch. Agent použije edit_file pro změnu, glob k nalezení testovacích souborů a Shell ke spuštění příkazu pro testování po každé úpravě. Hromadné funkce přesunou několik token id v jedné transakci, což znamená, že jeden test může zkontrolovat několik zůstatků. Porozumění bezpoplatkovému onboardingu ERC4337 je samostatné téma, takže to do první smlouvy nezapomeňte a testujte ji samostatně. Přečtěte si diff v režimu Ask first, znovu spusťte testy a hledejte v výstupu událost TransferBatch předtím, než změnu přijmete.

Zkontrolujte příjemce a metadata

Smlouva, která přijímá tokeny, musí implementovat onERC1155Received a onERC1155BatchReceived a přijmout tokeny, jinak bude bezpečný převod zamítnut. Požádejte agenta, aby grepem hledal oba názvy a otevřel přijímající smlouvu pomocí read_file, poté aby vypsal, která z nich chybí. Další požádejte, aby použila edit_file na hodnotu uri(id), aby obsahovala {id}, kterou klienti nahradí id tokenu v malých hexadecimálních číslech, zarovnaných na 64 znaků. Použijte write_file pro jeden JSON soubor na id. Spusťte svůj příkaz pro kompilaci a příkaz pro testování, přečtěte oba exit kódy a zkontrolujte finální diff předtím, než ho přijmete.

WaveClamp pro Windows

Začněte svou první smlouvu pro více tokenů

Stáhnout WaveClamp ↗