Aplikacja mobilna

Ściągnij naszą aplikację by na bieżąco śledzić pracę KryptoBota.

j j

Masz już konto?
Zaloguj się
Obserwuj

Jak zaprogramować smart contract dla NFT?

HomeAktualności Jak zaprogramować smart contract dla NFT?
Smart Contract NFT
BitBay

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:

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.

 

Wybór systemu operacyjnego.

Wybór systemu operacyjnego.

 

Następnie przechodzimy do folderu gdzie chcemy pracować nad NFT (używamy komendy “CD” do poruszania się między folderami)

 

Przejdź do folderu NFT

Przejdź do folderu NFT

 

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.

 

Prawidłowo utworzony portfel

Prawidłowo utworzony portfel

 

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ł

 

Zakup tokenów GO

 

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.

Poprawnie wygenerowany kontrakt

Poprawnie wygenerowany kontrakt

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…

Problem z dockerem

Problem z dockerem

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:

Poprawnie wygenerowany kontrakt

Poprawnie wygenerowany kontrakt

 

Pora na deploy

web3 contract deploy DOGT.bin

Jeśli zobaczycie taki wynik:

Brak środków do wygenerowania kontraktu

Brak środków do wygenerowania kontraktu

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ę.

Poprawnie wdrożony kontrakt na Blockchain

Poprawnie wdrożony kontrakt na Blockchain

 

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
Poprawnie opublikowany token NFT

Poprawnie opublikowany token NFT

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.

 

Przeglądanie smart contractów w sieci GoChain.

Przeglądanie smart contractów w sieci GoChain.

 

Gdy podacie poprawny adres będziecie mogli przeglądać informacje na temat Waszego kontraktu. Między innymi ilość transakcji, posiadaczy tokenów itd.

 

Dogtronic NFT

Dogtronic NFT

 

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.

 

Transakcje DOGT

Transakcje DOGT

 

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:

ID tokena NFT

ID tokena NFT

 

Gdy wkleicie poprawny ID tokena w ramach waszego kontraktu powinniście zobaczyć swoje NFT.

NFT DOGT

NFT DOGT

 

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.

Dołącz do grupy 10 000 użytkowników KryptoBota!

Rejestracja w 5 sekund.