Slovenčina

Preskúmajte komplexnosť smart kontraktov ERC-721 pre NFT. Zistite viac o ich architektúre, implementácii, bezpečnostných aspektoch a reálnych aplikáciách.

Smart kontrakty pre NFT: Podrobný pohľad na implementáciu ERC-721

Nezameniteľné tokeny (NFT) spôsobili revolúciu v oblasti digitálnych aktív, umožňujúc reprezentáciu jedinečných položiek na blockchaine. V srdci väčšiny NFT leží štandard ERC-721, súbor pravidiel, ktorými sa riadi vytváranie, správa a prevod týchto tokenov. Tento komplexný sprievodca poskytuje hĺbkový pohľad na smart kontrakty ERC-721, pokrývajúc ich architektúru, detaily implementácie, bezpečnostné aspekty a praktické aplikácie.

Čo je ERC-721?

ERC-721 je štandard pre reprezentáciu nezameniteľných tokenov na blockchaine Ethereum. Na rozdiel od tokenov ERC-20, ktoré sú zameniteľné (čo znamená, že každý token je identický s každým iným tokenom), tokeny ERC-721 sú jedinečné. Každý token má odlišné ID, čo ho robí vhodným na reprezentáciu vlastníctva jedinečných digitálnych alebo fyzických aktív.

Kľúčové vlastnosti tokenov ERC-721:

Architektúra smart kontraktu ERC-721

Smart kontrakt ERC-721 je program v jazyku Solidity, ktorý implementuje štandard ERC-721. Zvyčajne obsahuje nasledujúce komponenty:

Základné funkcie:

Rozšírenie pre metadáta (voliteľné):

Rozšírenie pre enumeráciu (voliteľné):

Implementácia smart kontraktu ERC-721 pomocou OpenZeppelin

OpenZeppelin poskytuje bezpečnú a auditovanú knižnicu smart kontraktov, ktorá zjednodušuje vývoj tokenov ERC-721. Použitie implementácie ERC721 od OpenZeppelin znižuje riziko zavedenia zraniteľností do vášho kódu. Tu je príklad, ako implementovať smart kontrakt ERC-721 pomocou OpenZeppelin:

Predpoklady:

Kroky:

  1. Inicializujte projekt v Truffle alebo Hardhat:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. Nainštalujte OpenZeppelin Contracts:
npm install @openzeppelin/contracts
  1. Vytvorte smart kontrakt ERC-721: Vytvorte nový súbor v jazyku Solidity (napr. `MyNFT.sol`) vo vašom adresári `contracts`.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract MyNFT is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    string private _baseURI;

    constructor(string memory name, string memory symbol, string memory baseURI) ERC721(name, symbol) {
        _baseURI = baseURI;
    }

    function mintNFT(address recipient) public returns (uint256) {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(recipient, newItemId);
        _setTokenURI(newItemId, string(abi.encodePacked(_baseURI, Strings.toString(newItemId), ".json")));

        return newItemId;
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        return string(abi.encodePacked(_tokenURI));
    }

    mapping (uint256 => string) private _tokenURIs;

    function setBaseURI(string memory baseURI) public {
        _baseURI = baseURI;
    }



    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
}

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Skompilujte smart kontrakt: Použite Truffle alebo Hardhat na skompilovanie vášho smart kontraktu.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Vytvorte skript pre nasadenie: Vytvorte nový JavaScript súbor (napr. `deploy.js`) vo vašom adresári `migrations` alebo `scripts`.
// Príklad migrácie pre Truffle
const MyNFT = artifacts.require("MyNFT");

module.exports = async function (deployer) {
  await deployer.deploy(MyNFT, "MyNFT", "MNFT", "ipfs://YOUR_IPFS_CID/");
};

// Príklad skriptu pre nasadenie v Hardhat
async function main() {
  const MyNFT = await ethers.getContractFactory("MyNFT");
  const myNFT = await MyNFT.deploy("MyNFT", "MNFT", "ipfs://YOUR_IPFS_CID/");

  await myNFT.deployed();

  console.log("MyNFT deployed to:", myNFT.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
  1. Nasaďte smart kontrakt: Nasaďte váš smart kontrakt na lokálny blockchain (napr. Ganache) alebo testovaciu sieť (napr. Ropsten, Rinkeby).
# Truffle
truffle migrate

# Hardhat
npx hardhat run scripts/deploy.js --network localhost

Nezabudnite nahradiť `ipfs://YOUR_IPFS_CID/` vaším skutočným IPFS CID (Content Identifier). Toto základné URI odkazuje na umiestnenie, kde budú uložené vaše JSON súbory s metadátami NFT.

Ukladanie metadát NFT na IPFS

Metadáta NFT sa zvyčajne ukladajú mimo reťazca (off-chain), aby sa znížili náklady na ukladanie dát na blockchaine. IPFS (InterPlanetary File System) je decentralizovaná úložná sieť, ktorá sa bežne používa na ukladanie metadát NFT. Každé NFT má `tokenURI`, ktoré odkazuje na JSON súbor na IPFS obsahujúci metadáta o NFT, ako sú jeho názov, popis, URL obrázka a ďalšie atribúty.

Príklad metadát NFT (JSON):

{
  "name": "Môj úžasný NFT",
  "description": "Toto je jedinečný NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Pozadie",
      "value": "Modré"
    },
    {
      "trait_type": "Postava",
      "value": "Robot"
    }
  ]
}

Nahraďte `ipfs://YOUR_IPFS_CID/image.png` skutočným IPFS CID vášho obrázka.

Kroky pre nahratie metadát na IPFS:

  1. Vyberte si klienta IPFS: Vyberte si klienta IPFS, ako napríklad IPFS Desktop, Pinata alebo NFT.Storage.
  2. Nahrajte vaše metadáta: Nahrajte vaše JSON súbory s metadátami NFT a obrázky na IPFS pomocou vami zvoleného klienta.
  3. Získajte IPFS CID: Po nahratí metadát dostanete IPFS CID. Je to jedinečný identifikátor pre vaše dáta na IPFS.
  4. Aktualizujte smart kontrakt: Aktualizujte funkciu `tokenURI` vo vašom smart kontrakte tak, aby odkazovala na vaše IPFS CID.

Bezpečnostné aspekty smart kontraktov ERC-721

Pri vývoji smart kontraktov ERC-721 je bezpečnosť prvoradá. Tu sú niektoré kritické bezpečnostné aspekty:

Reálne aplikácie NFT ERC-721

NFT ERC-721 sa používajú v širokej škále aplikácií, vrátane:

Medzinárodné príklady:

Pokročilé koncepty ERC-721

ERC-721A

ERC-721A je implementácia štandardu ERC-721, ktorá je efektívnejšia z hľadiska spotreby gasu a optimalizuje razenie viacerých NFT v jednej transakcii. Znižuje náklady na gas amortizáciou nákladov na úložisko naprieč viacerými tokenmi. To môže byť prospešné pre projekty, ktoré zahŕňajú razenie veľkého počtu NFT.

Lazy Minting (lenivé razenie)

Lazy minting je technika, pri ktorej sa NFT razia až v momente ich nákupu. To môže ušetriť náklady na gas pre projekty, ktoré majú veľký počet NFT, ale neočakávajú, že sa všetky predajú. Metadáta NFT sa ukladajú mimo reťazca (off-chain), až kým nie je NFT zakúpené, vtedy sa token vyrazí a metadáta sa pridajú na blockchain.

Soulbound tokeny (tokeny viazané na dušu)

Soulbound tokeny sú NFT, ktoré sú natrvalo viazané na konkrétnu adresu a nedajú sa previesť. Tieto tokeny sa môžu použiť na reprezentáciu neprenosných poverení, ako sú vysokoškolské diplomy, odborné certifikáty alebo členstvo v komunite. To sa dosiahne odstránením alebo obmedzením funkcie `transferFrom`.

Budúcnosť ERC-721 a NFT

Štandard ERC-721 sa naďalej vyvíja, pričom prebiehajúci výskum a vývoj sa zameriava na zlepšenie jeho efektívnosti, bezpečnosti a funkčnosti. Budúci vývoj môže zahŕňať:

Záver

Smart kontrakty ERC-721 sú mocným nástrojom na reprezentáciu vlastníctva jedinečných digitálnych a fyzických aktív na blockchaine. Porozumením architektúry, detailov implementácie, bezpečnostných aspektov a praktických aplikácií ERC-721 môžu vývojári vytvárať inovatívne a vplyvné projekty NFT. Keďže ekosystém NFT naďalej rastie a vyvíja sa, štandard ERC-721 bude zohrávať kľúčovú úlohu pri formovaní budúcnosti digitálneho vlastníctva.

Tento sprievodca poskytuje solídny základ pre pochopenie a implementáciu smart kontraktov ERC-721. Pri vývoji a nasadzovaní vlastných projektov NFT nezabudnite vždy uprednostňovať bezpečnosť a dodržiavať osvedčené postupy. Veľa šťastia!