Въведение
Незаменяемите токени, или NFT, бяха най-актуална тема през изминалата година. От CryptoKitties до манията за маймуните и Twitter, който ги приема като профилни снимки, NFT се превърнаха в основен компонент на децентрализирания дигитален свят.
В това ръководство ще научим как да напишем, внедрим и трансферираме интелигентен договор за събиране на NFT в Archway с помощта на CosmWasm.
NFT стандарт за CosmWasm
За да създадем NFT интелигентен договор, трябва да следваме стандарт за токени, който съдържа интерфейс с общи крайни точки и формат на съобщенията. Тези стандарти гарантират, че токенът ще се държи по специфичен начин и ще бъде съвместим един с друг.
Най-известната спецификация за NFT договори е ERC-721 и тя беше въведена за първи път в Ethereum от CryptoKitties. В CosmWasm, следвайки същата конвенция, наричаме този стандарт CW721. Разглеждайки спецификацията, виждаме, че тя дефинира няколко съобщения и заявки, които трябва да следваме, като най-важните са:
- Mint {token_id, owner, token_uri}
- TransferNft {recipient, token_id}
- Tokens {owner}
- OwnerOf {token_id}
Това са основните аспекти на NFT: начална точка за процеса на минтване, друга за трансфер и начини за запитване за тяхната собственост.
Създаване на смарт контракти
За да създадете NFT Смарт контракт в Archway, ще ви е необходим Archway developer CLI. Ако все още не сте го конфигурирали, проверете ръководството за бързо стартиране.
След това, ще създадем 2 акаунта, единият за изграждане и минтване на NFT и друг за получателя на NFT трансфер.
$ archway accounts -a deployer
$ archway accounts -a alice
Сега нека създадем нов проект и в списъка за избор на шаблон изберете шаблон #4 — CW721 с он-чейн метадата:
$ archway new nft-on-chain
Предимството на използването на този шаблон е, че той инстанцира нашия договор с помощта на cw721-base crate, основна реализация на спецификацията CW721, която може лесно да бъде разширена за нашите нужди.
Съхраняване на NFT метаданни
Метаданните на активите са критичен елемент за всеки NFT. Те дефинират информация като име, URL адрес на изображението и други свойства, които могат да бъдат изтеглени от пазарите на NFT, за да показват подходяща информация за потребителите. Неща като рядкост, персонализирани характеристики и т.н., всички се съхраняват тук. Спецификацията за тех се определя от Metadata JSON Schema.
В нашия пример ние ще запазим тази информация във веригата или, с други думи, договорът ще съхранява метаданните в тяхното вътрешно състояние. Ето как дефинираме структурата на метаданните във файла src/lib.rs
:
В кода cw721-base тези метаданни се съдържат в свойството за разширение на TokenInfo
struct:
Публикуване и инстанциране на Договора
Преди да разгърнем договора, трябва да поискаме токени от крана към нашия акаунт. Това може да стане с командата archway faucet
Сега сме готови да внедрим и инстанцираме договора. Инстанцирането на договора изисква три параметъра:
name
: NFT име на колекцията.symbol
: символ на токен за представянето му.minter
: адресът на портфейла позволяващ минтването на нов NFT с помощта на този договор.
За да го внедрим, изпълняваме командата за deploy/
разгръщане с предишните параметри, конфигурирани в командния ред:
$ archway deploy -a '{ "name": "My NFT Collection", "symbol": "MYNFT", "minter": "archway1e5fglhr2ml6rwhvqzezd9035hhwfl37l8u4c4h" }'
Адресът на minter трябва да е същият като акаунта на deployer, който създадохме по-горе.
След като проектът завърши компилирането, ще бъдете попитани от кой портфейл да изпратите транзакцията. Просто напишете deployer и продължете.
Минтване и запитване
За да изпълним минт на NFT, трябва да изпратим транзакция със структурните данни MintMsg
struct data/ MintMsg като JSON аргумент с метаданните, включени в свойството на разширението. Това е JSON string, който ще използваме:
Командата за изпълнение на транзакцията е:
$ archway tx --args '{ "mint": { "token_id": "1", "owner": "archway1e5fglhr2ml6rwhvqzezd9035hhwfl37l8u4c4h", "extension": { "name": "Autumn Sunset", "description": "Sunset in Berlin during autumn.", "image": "ipfs://QmSmUJPHNRjkA47AvvQ9eA7AzEGDJ9o4azrZvhUAViFLzk/autumn-sunset.gif", "attributes": [ { "trait_type": "city", "value": "Berlin" } ] } } }'
Mint
За да потвърдим, че нашите NFT се съхраняват правилно във веригата, стартираме командатаquery
указваща token_id
, който използвахме в предишната команда
$ archway query contract-state smart --args '{ "nft_info": { "token_id": "1" } }'
NftInfo
Прехвърляне
За трансфер на токен, трябва да изпратим съобщениетоTransferNft
message с адрес на получател(в нашия случай, alice) и token_id
:
$ archway tx --args '{ "transfer_nft": { "recipient": "archway1t5mqd4mcp5jy88m5fed9zaegpgzcrrfjnet76t", "token_id": "1" } }'
TransferNft
След това, може да запитваме състоянието на договора и потвърдим това alice е новият получател на токен, използвайки съобщениетоOwnerOf
message:
$ archway query contract-state smart --args '{ "owner_of": { "token_id": "1" } }'
OwnerOf
Заключение
Както можете да видите, създаването на NFT интелигентен договор в Archway е невероятно просто и изисква минимални усилия. И с магията на Archway, за всяка транзакция, направена с NFT колекцията, разработчикът получава награди, записани в самия протокол!
Ако искате да проверите изходния код, обхванат в този урок, той е наличен в нашето contracts examples repository/ хранилище с примери за договори. Ако се интересувате да научите за еволюцията на NFT, препоръчвам ви да разгледате това много информативно ръководство от OpenSea.
В последваща публикация ще научите как да създадете приложение за интерфейс, за да покажете колекцията, която току-що създадохме. Останете на линия!
Имате въпроси? Присъединете се към Discord, там ще намерите отговорите!
Archway е платформа за интелигентни договори, която възнаграждава разработчиците. Проектиран за гъвкаво развитие и лесно внедряване в Cosmos, Archway позволява мащабируеми dApps между веригата, които достигат до възможно най-много потребители и активи.
Готови ли сте да изграждате? Проверете нашета документация.
Искате ли да сте в течение с най-новото в Archway?
Newsletter // Discord // Twitter // Github
Оригинална статия: https://blog.archway.io/how-to-build-mint-and-transfer-nfts-on-archway-64f80c62ffe5