Čeština

Prozkoumejte složitosti smart kontraktů ERC-721 pro NFT. Zjistěte více o jejich architektuře, implementaci, bezpečnostních aspektech a reálných aplikacích.

NFT Smart kontrakty: Hloubkový pohled na implementaci ERC-721

Nezaměnitelné tokeny (NFT) způsobily revoluci v oblasti digitálních aktiv a umožnily reprezentaci jedinečných položek na blockchainu. Srdcem většiny NFT je standard ERC-721, soubor pravidel, kterými se řídí vytváření, správa a převod těchto tokenů. Tento komplexní průvodce poskytuje hloubkový pohled na smart kontrakty ERC-721, zabývá se jejich architekturou, detaily implementace, bezpečnostními aspekty a praktickými aplikacemi.

Co je ERC-721?

ERC-721 je standard pro reprezentaci nezaměnitelných tokenů na blockchainu Ethereum. Na rozdíl od tokenů ERC-20, které jsou zaměnitelné (což znamená, že každý token je identický s každým jiným), jsou tokeny ERC-721 unikátní. Každý token má odlišné ID, což ho činí vhodným pro reprezentaci vlastnictví jedinečných digitálních nebo fyzických aktiv.

Klíčové vlastnosti tokenů ERC-721:

Architektura smart kontraktu ERC-721

Smart kontrakt ERC-721 je program v jazyce Solidity, který implementuje standard ERC-721. Obvykle obsahuje následující komponenty:

Základní funkce:

Rozšíření metadat (volitelné):

Rozšíření pro výčet (volitelné):

Implementace smart kontraktu ERC-721 s OpenZeppelin

OpenZeppelin poskytuje bezpečnou a auditovanou knihovnu smart kontraktů, která zjednodušuje vývoj tokenů ERC-721. Použití implementace ERC721 od OpenZeppelin snižuje riziko zavedení zranitelností do vašeho kódu. Zde je příklad, jak implementovat smart kontrakt ERC-721 pomocí OpenZeppelin:

Předpoklady:

Kroky:

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

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. Nainstalujte OpenZeppelin Contracts:
npm install @openzeppelin/contracts
  1. Vytvořte smart kontrakt ERC-721: Vytvořte nový soubor v Solidity (např. `MyNFT.sol`) ve vašem adresáři `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;
    }



    // Následující funkce jsou přepsání vyžadovaná jazykem Solidity.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Zkompilujte smart kontrakt: Použijte Truffle nebo Hardhat ke zkompilování vašeho smart kontraktu.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Vytvořte skript pro nasazení: Vytvořte nový soubor JavaScript (např. `deploy.js`) ve vašem adresáři `migrations` nebo `scripts`.
// Příklad migrace pro Truffle
const MyNFT = artifacts.require("MyNFT");

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

// Příklad skriptu pro nasazení 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ální blockchain (např. Ganache) nebo na testovací síť (např. Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Nezapomeňte nahradit `ipfs://YOUR_IPFS_CID/` vaším skutečným IPFS CID (Content Identifier). Tato základní URI odkazuje na umístění, kde budou uloženy vaše JSON soubory s metadaty NFT.

Ukládání metadat NFT na IPFS

Metadata NFT se obvykle ukládají mimo blockchain (off-chain), aby se snížily náklady na ukládání dat na blockchainu. IPFS (InterPlanetary File System) je decentralizovaná úložná síť, která se běžně používá pro ukládání metadat NFT. Každé NFT má `tokenURI`, která ukazuje na JSON soubor na IPFS obsahující metadata o NFT, jako je název, popis, URL obrázku a další atributy.

Příklad metadat NFT (JSON):

{
  "name": "Moje úžasné NFT",
  "description": "Toto je jedinečné NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Pozadí",
      "value": "Modrá"
    },
    {
      "trait_type": "Postava",
      "value": "Robot"
    }
  ]
}

Nahraďte `ipfs://YOUR_IPFS_CID/image.png` skutečným IPFS CID vašeho obrázku.

Kroky pro nahrání metadat na IPFS:

  1. Vyberte si IPFS klienta: Zvolte IPFS klienta, jako je IPFS Desktop, Pinata nebo NFT.Storage.
  2. Nahrajte svá metadata: Nahrajte své JSON soubory s metadaty NFT a obrázky na IPFS pomocí zvoleného klienta.
  3. Získejte IPFS CID: Po nahrání metadat obdržíte IPFS CID. Jedná se o jedinečný identifikátor vašich dat na IPFS.
  4. Aktualizujte smart kontrakt: Aktualizujte funkci `tokenURI` ve vašem smart kontraktu tak, aby odkazovala na vaše IPFS CID.

Bezpečnostní aspekty pro smart kontrakty ERC-721

Při vývoji smart kontraktů ERC-721 je bezpečnost na prvním místě. Zde jsou některé klíčové bezpečnostní aspekty:

Reálné aplikace ERC-721 NFT

ERC-721 NFT se používají v široké škále aplikací, včetně:

Mezinárodní příklady:

Pokročilé koncepty ERC-721

ERC-721A

ERC-721A je plynově efektivnější implementace standardu ERC-721, která optimalizuje mintování více NFT v jedné transakci. Snižuje náklady na plyn amortizací nákladů na úložiště napříč více tokeny. To může být výhodné pro projekty, které zahrnují mintování velkého počtu NFT.

Líné mintování (Lazy Minting)

Líné mintování je technika, při které jsou NFT mintovány až v okamžiku jejich zakoupení. To může ušetřit náklady na plyn u projektů, které mají velké množství NFT, ale neočekávají, že se všechny prodají. Metadata NFT jsou uložena mimo blockchain, dokud není NFT zakoupeno, a v tu chvíli je token vytvořen a metadata jsou přidána na blockchain.

Soulbound tokeny

Soulbound tokeny jsou NFT, které jsou trvale vázány na konkrétní adresu a nelze je převést. Tyto tokeny mohou být použity k reprezentaci nepřenosných pověření, jako jsou vzdělávací tituly, profesní certifikace nebo členství v komunitě. To je umožněno odstraněním nebo omezením funkce `transferFrom`.

Budoucnost ERC-721 a NFT

Standard ERC-721 se neustále vyvíjí a probíhající výzkum a vývoj se zaměřuje na zlepšení jeho efektivity, bezpečnosti a funkčnosti. Budoucí vývoj může zahrnovat:

Závěr

Smart kontrakty ERC-721 jsou mocným nástrojem pro reprezentaci vlastnictví jedinečných digitálních a fyzických aktiv na blockchainu. Porozuměním architektuře, detailům implementace, bezpečnostním aspektům a praktickým aplikacím ERC-721 mohou vývojáři vytvářet inovativní a vlivné NFT projekty. Jak ekosystém NFT neustále roste a vyvíjí se, standard ERC-721 bude hrát klíčovou roli při formování budoucnosti digitálního vlastnictví.

Tento průvodce poskytuje pevný základ pro pochopení a implementaci smart kontraktů ERC-721. Při vývoji a nasazování vlastních NFT projektů vždy upřednostňujte bezpečnost a dodržujte osvědčené postupy. Hodně štěstí!