W naszym poprzednim poradniku pisaliśmy jak stworzyć NFT za pomocą ogólnodostępnych platform typu opensea.
Tym razem zajmiemy się czymś bardziej zaawansowanym. Mianowicie stworzymy własny smart contract dla NFT i opublikujemy go za pomocą sieci GoChain.
Co będzie nam potrzebne:
- OpenZeppelin ERC721
- web3 CLI tool
- NPM
- Desktop Docker
- Windows Terminal
- Linux / Windows / Mac
Skonfiguruj swoje środowisko
Nowy folder dla projektu NFT
Musisz przygotować swój komputer do tworzenia NFT. W naszym przypadku będziemy pracować na systemie Windows. Czynność tę robisz raz. Bez tego nie będziemy mogli dalej pracować więc nie możesz pominąć tego kroku. Przede wszystkim stwórz nowy folder dla swojego projektu. Na dysku C: utwórz folder NFT.
Instalacja Ubuntu
Poradnik jest pisany pod system Windows, natomiast dużo łatwiej jest to zrobić na Linuxie lub Macu. W przypadku Windowsa musicie najpierw zainstalować Linuxa. Tak, można zainstalować Linuxa na Windowsie. Przykładowy poradnik jak to zrobić macie tutaj. Nie zajmie Wam to więcej niż 15 min.
Instalacja Windows Terminal
Gdy już zainstalowaliście Linuxa uruchamiacie “Windows terminal”. Jeśli nie macie tego terminala to ściągnijcie go z Windows Store. W terminalu wybieramy zainstalowaną dystrybucję Linuxa. Postawiliśmy na Ubuntu.
Następnie przechodzimy do folderu gdzie chcemy pracować nad NFT (używamy komendy “CD” do poruszania się między folderami)
Instalacja NPM
sudo apt update sudo apt install nodejs npm
Jeśli zostaniemy poproszeni o podanie hasła do naszego konta to musimy je podać. Wyłączcie terminal i włączcie go ponownie. Inaczej system nie będzie mógł zidentyfikować nowej biblioteki npm.
Instalacja Web3.js
npm install web3
Ethereum czy GoChain?
Zamierzamy użyć sieci GoChain tutaj, by nie musieć płacić kilkudziesięciu dolarów za kontrakt i każdy nowy token NFT.
Z GoChain będziemy musieli zapłacić tylko ułamek grosza i jest on w 100% kompatybilny z Ethereum więc możemy go używać w taki sam sposób, jak w przypadku Ethereum.
Jeśli jednak chcesz pracować bezpośrednio na Blockchain Ethereum to możesz to zmienić. Jest to bardzo proste. Wystarczy wpisać jedną komendę w terminalu.
Blockchain Ethereum
export WEB3_NETWORK=ethereum
Blockchain GoChain
export WEB3_NETWORK=gochain
W ramach tego poradnika będziemy korzystać z sieci GoChain, która jest po prostu znacznie tańsza niż Ethereum. Jest to bardzo istotne, zwłaszcza podczas pisania swoich pierwszych inteligentnych kontraktów dla NFT.
Dodanie gazu
Będziesz musiał użyć konta, które ma trochę gazu dla kolejnych transakcji. Sugerujemy utworzenie nowego konta.
Aby stworzyć nowy portfel uruchom w terminalu polecenie:
web3 account create
Po chwili otrzymasz adres swojego portfela oraz klucz prywatny. Jeśli pracujesz na blockchainie Ethereum to musisz przelać na swój adres ETH potrzebne do zrealizowania kontraktu. Natomiast jeśli wybrałeś GoChain to musisz przelać tokeny GO.
Koniecznie skopiuj swój klucz publiczny i prywatny. Trzymaj klucze w bezpiecznym miejscu!
Przelew GO na Twój portfel
Jeśli potrzebujesz tokenów GO możesz kupić je na Binance. Dla naszych testów kupiliśmy minimalną ilość sztuk GO za kwotę ~ 25 zł
Wysłaliśmy 25 sztuk na nasz adres (Public address). W naszym przypadku transakcja trafiła do weryfikacji więc niestety nie trafiła od razu do miejsca docelowego. Czekaliśmy na to 30 min.
Stan swojego konta możecie weryfikować pod tym linkiem. Wystarczy, że podacie swój adres publiczny.
Gdy już macie GO na swoim koncie możecie przejść do kolejnego kroku.
Konfiguracja portfela
W terminalu wklejcie komendę:
export WEB3_PRIVATE_KEY=XXXXXXXXXXXXX
Gdzie XXXXX to wasz klucz prywatny.
Publikowanie kontraktu dla NFT
Teraz, gdy wszystko jest już skonfigurowane, mamy GO na gaz, możemy zacząć tworzyć i publikować inteligentny kontrakt dla naszego tokenu NFT. Web3 CLI posiada wbudowane generatory kodu dla popularnych kontraktów, takich jak ERC20 i ERC721. Właśnie ERC721 służy do generowania tokenów NFT.
Wystarczy uruchomić:
web3 generate contract erc721 --symbol DOGT --name "Dogtronic" --base-uri https://nft.kryptobot.net/
Spowoduje to wygenerowanie pliku o nazwie DOGT.sol, który jest programem solidity dla Twojego nowego kontraktu NFT.
ParaParametr base-uri powinien wskazywać na kontrolowany przez Ciebie serwer, tak abyś mógł dostarczyć metadane NFT. Metadanymi obrazów / wideo zajmiemy się poniżej.
Wdrożenie kontraktu
Musimy go skompilować i wdrożyć. Robimy to za pomocą web3 CLI. Wystarczy uruchomić 2 komendy:
web3 contract build DOGT.sol web3 contract deploy DOGT.bin
Spowoduje to wyświetlenie adresu naszego nowego kontraktu. Chyba, że…
Zobaczyliście taki błąd. W tym przypadku należy zainstalować Dockera. Ściągnięcie go stąd. Zainstalujcie go i ponownie odpalcie komendę:
web3 contract build DOGT.sol
Powinniście zobaczyć taki wynik:
Pora na deploy
web3 contract deploy DOGT.bin
Jeśli zobaczycie taki wynik:
To oznacza, że przelaliście za mało GO na swój portfel. Należy przelać dodatkowe coiny (np. 30). Gdy tokeny zostaną zaksięgowane powtórzcie poprzednią operację.
Tym razem się udało. Skopiujcie i zapiszcie adres Waszego smart contractu.
Contract address is: 0xCDa789e75C51C9C61Be70E3C9486b2E3C0Cd56c4
Wybijamy tokeny NFT
Teraz gdy inteligentny kontrakt jest już wdrożony, musimy wybić / stworzyć nowe kontrakty (tokeny NFT). Najpierw ustawmy adres kontraktu jako zmienną środowiskową, aby reszta poleceń korzystała z naszego kontraktu. Robimy to poleceniem:
export WEB3_ADDRESS=0xCONTRACT_ADDRESS
Podczas wytworzenia nowej monety należy podać adres osoby, która będzie właścicielem NFT. Podajcie własne adresy.
Przykład:
web3 contract call --wait --abi DOGT.abi --gas-limit 2000000 --function mint 0xb1F2f0CFd649C1114eC5F26B8B32D08963fEce8c
Udało się!
Powyższa komenda tworzy nowy token NFT i umieszcza go pod adresem który podaliście wcześniej. Biblioteka OpenZeppelin dla ERC721 automatycznie tworzy ID dla każdego tokenu. Gdy stworzycie nowy token na tym kontrakcie to ID zostanie zwiększone o 1. Koniecznie zapiszcie wartość tokenId dla każdej nowej wybitej monety.
Dodanie obrazka
Kiedy ktoś zapyta o kontrakt, który wdrożyłeś dla NFT, wywoła funkcję tokenURI(tokenID). Wywołanie HTTP GET na adres URL tokena MUSI zwrócić metadane tokena, które składają się z następujących elementów:
{ "name": "Dogtronic", "description": "Who let the dogs out?", "image": "https://nft.kryptobot.net/assets/0.png" }
Przykład generowania JSONa za pomocą PHP:
<?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET,HEAD,POST,OPTIONS'); header('Access-Control-Max-Age: 86400'); header('Content-Type: application/json; charset=utf-8'); $data = array( 'name' => 'Dogtronic', 'description' => 'Who let the dogs out?', 'image' => 'https://nft.kryptobot.net/assets/0.png' ); echo $json_string = json_encode($data, JSON_PRETTY_PRINT); ?>
Pole “image” zwraca adres URL do pliku. Może to być obraz lub film mp4. Możesz hostować pliki na swoim serwerze, ale aby był on prawdziwie zdecentralizowany, powinieneś przechowywać je na IPFS. Zobaczcie jak wygląda wynik zapytania o metadane tokena Dogrtronic.
Przeglądanie NFT
By przeglądać NFT zbudowane w oparciu GoChain należy przejść na stronę explorer.gochain.io i wkleić w wyszukiwarkę adres wygenerowanego wcześniej smart contractu.
Gdy podacie poprawny adres będziecie mogli przeglądać informacje na temat Waszego kontraktu. Między innymi ilość transakcji, posiadaczy tokenów itd.
Możecie również sprawdzić szczegółowe info. Np przejrzeć wszystkie transakcje w obrębie danego kontraktu, na jakich adresach trzymane są Tokeny czy nawet zweryfikować kod źródłowy kontraktu.
Jak zobaczyć swój token NFT?
Musicie znać swój Token ID. W przypadku tego poradnika będzie to: 0x0000000000000000000000000000000000000000000000000000000000000000.
Wklejcie go w to miejsce:
Gdy wkleicie poprawny ID tokena w ramach waszego kontraktu powinniście zobaczyć swoje NFT.
Gotowe!
NFT, które stworzyliśmy w tym poradniku możecie zobaczyć pod tym adresem.
Jaki jest problem z NFT zrobionych na GoChain?
Mimo, że sieć GoChain jest kompatybilna z Ethereum to niestety najbardziej popularne markety NFT typu opensea.io, rarible.com nie będą wyświetlać tokenów opartych na GoChain. Skoro wiecie jak tworzyć NFT to nic nie stoi na przeszkodzie by zrobić NFT bezpośrednio na Ethereum. Będzie to znacznie droższe ale zrobione zgodnie ze sztuką. W końcu NFT zaczęło się od Ethereum. Oczywiście koszt stworzenia NFT będzie zależne od aktualnego kursu Ethereum.
Przesyłanie NFT
Jeśli posiadasz NFT i chcesz je przenieść musisz wywołać funkcję transferFrom:
web3 contract call --wait --abi DOGT.abi --gas-limit 2000000 --function transferFrom 0xADRES1 0xADRES2
Spowoduje to przeniesienie tokena o ID 1 z 0xADRES1 do nowego właściciela 0xADRES2 .
Zrób NFT w 15 min
Jeśli nie jesteś programistą bądź masz problemy z ukończeniem tego poradnika to możesz skorzystać z kreatorów typu rarible.com. Jest to bardzo przystępna metoda. Z naszym poradnikiem każdy może stworzyć własne NFT w 15 min.
Rejestracja w 5 sekund.