Hrvatski

Istražite složenost ERC-721 pametnih ugovora za NFT-ove. Saznajte više o njihovoj arhitekturi, implementaciji, sigurnosnim aspektima i primjenama u stvarnom svijetu.

NFT pametni ugovori: Dubinski uvid u implementaciju ERC-721 standarda

Nezamjenjivi tokeni (NFT-ovi) revolucionirali su krajolik digitalne imovine, omogućujući predstavljanje jedinstvenih predmeta na blockchainu. U središtu većine NFT-ova nalazi se ERC-721 standard, skup pravila koja uređuju kako se ti tokeni stvaraju, upravljaju i prenose. Ovaj sveobuhvatni vodič pruža dubinski uvid u ERC-721 pametne ugovore, pokrivajući njihovu arhitekturu, detalje implementacije, sigurnosne aspekte i praktične primjene.

Što je ERC-721?

ERC-721 je standard za predstavljanje nezamjenjivih tokena na Ethereum blockchainu. Za razliku od ERC-20 tokena, koji su zamjenjivi (što znači da je svaki token identičan svakom drugom tokenu), ERC-721 tokeni su jedinstveni. Svaki token ima poseban ID, što ga čini prikladnim za predstavljanje vlasništva nad jedinstvenom digitalnom ili fizičkom imovinom.

Ključne karakteristike ERC-721 tokena:

Arhitektura ERC-721 pametnog ugovora

ERC-721 pametni ugovor je Solidity program koji implementira ERC-721 standard. Obično uključuje sljedeće komponente:

Osnovne funkcije:

Proširenje za metapodatke (opcionalno):

Proširenje za enumeraciju (opcionalno):

Implementacija ERC-721 pametnog ugovora pomoću OpenZeppelina

OpenZeppelin pruža sigurnu i revidiranu biblioteku pametnih ugovora koja pojednostavljuje razvoj ERC-721 tokena. Korištenje OpenZeppelinove ERC721 implementacije smanjuje rizik od uvođenja ranjivosti u vaš kôd. Evo primjera kako implementirati ERC-721 pametni ugovor pomoću OpenZeppelina:

Preduvjeti:

Koraci:

  1. Inicijalizirajte Truffle ili Hardhat projekt:
# Truffle
mkdir moj-nft-projekt
cd moj-nft-projekt
truffle init

# Hardhat
mkdir moj-nft-projekt
cd moj-nft-projekt
npx hardhat
  1. Instalirajte OpenZeppelin Contracts:
npm install @openzeppelin/contracts
  1. Kreirajte ERC-721 pametni ugovor: Kreirajte novu Solidity datoteku (npr. `MyNFT.sol`) u vašem `contracts` direktoriju.
// 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;
    }



    // Sljedeće funkcije su nadjačavanja (overrides) koja zahtijeva Solidity.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Kompajlirajte pametni ugovor: Koristite Truffle ili Hardhat za kompajliranje vašeg pametnog ugovora.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Kreirajte skriptu za implementaciju: Kreirajte novu JavaScript datoteku (npr. `deploy.js`) u vašem `migrations` ili `scripts` direktoriju.
// Primjer migracije za Truffle
const MyNFT = artifacts.require("MyNFT");

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

// Primjer skripte za implementaciju za Hardhat
async function main() {
  const MyNFT = await ethers.getContractFactory("MyNFT");
  const myNFT = await MyNFT.deploy("MyNFT", "MNFT", "ipfs://VAŠ_IPFS_CID/");

  await myNFT.deployed();

  console.log("MyNFT implementiran na:", myNFT.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
  1. Implementirajte pametni ugovor: Implementirajte vaš pametni ugovor na lokalni blockchain (npr. Ganache) ili testnu mrežu (npr. Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Ne zaboravite zamijeniti `ipfs://VAŠ_IPFS_CID/` s vašim stvarnim IPFS CID-om (Content Identifier). Ovaj osnovni URI upućuje na lokaciju gdje će se pohranjivati vaše JSON datoteke s NFT metapodacima.

Pohranjivanje NFT metapodataka na IPFS

NFT metapodaci se obično pohranjuju izvan lanca (off-chain) kako bi se smanjili troškovi pohrane podataka na blockchainu. IPFS (InterPlanetary File System) je decentralizirana mreža za pohranu koja se često koristi za pohranjivanje NFT metapodataka. Svaki NFT ima `tokenURI` koji upućuje na JSON datoteku na IPFS-u koja sadrži metapodatke o NFT-u, kao što su naziv, opis, URL slike i druge atribute.

Primjer NFT metapodataka (JSON):

{
  "name": "Moj super NFT",
  "description": "Ovo je jedinstveni NFT.",
  "image": "ipfs://VAŠ_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Pozadina",
      "value": "Plava"
    },
    {
      "trait_type": "Lik",
      "value": "Robot"
    }
  ]
}

Zamijenite `ipfs://VAŠ_IPFS_CID/image.png` sa stvarnim IPFS CID-om vaše slike.

Koraci za prijenos metapodataka na IPFS:

  1. Odaberite IPFS klijent: Odaberite IPFS klijent kao što su IPFS Desktop, Pinata ili NFT.Storage.
  2. Prenesite svoje metapodatke: Prenesite svoje NFT JSON datoteke s metapodacima i slike na IPFS pomoću odabranog klijenta.
  3. Dohvatite IPFS CID: Nakon prijenosa metapodataka, dobit ćete IPFS CID. To je jedinstveni identifikator za vaše podatke na IPFS-u.
  4. Ažurirajte pametni ugovor: Ažurirajte `tokenURI` funkciju u vašem pametnom ugovoru tako da upućuje na vaš IPFS CID.

Sigurnosni aspekti za ERC-721 pametne ugovore

Sigurnost je od iznimne važnosti prilikom razvoja ERC-721 pametnih ugovora. Evo nekih ključnih sigurnosnih aspekata:

Primjene ERC-721 NFT-ova u stvarnom svijetu

ERC-721 NFT-ovi se koriste u širokom rasponu primjena, uključujući:

Međunarodni primjeri:

Napredni koncepti ERC-721

ERC-721A

ERC-721A je implementacija ERC-721 standarda koja je učinkovitija po pitanju potrošnje gasa i koja optimizira kovanje više NFT-ova u jednoj transakciji. Smanjuje troškove gasa amortizacijom troškova pohrane na više tokena. To može biti korisno za projekte koji uključuju kovanje velikog broja NFT-ova.

Lijeno kovanje (Lazy Minting)

Lijeno kovanje je tehnika gdje se NFT-ovi kuju tek kada se kupe. To može uštedjeti troškove gasa za projekte koji imaju velik broj NFT-ova, ali ne očekuju da će se svi prodati. Metapodaci NFT-a pohranjuju se izvan lanca (off-chain) dok se NFT ne kupi, nakon čega se token kuje i metapodaci dodaju na blockchain.

Soulbound tokeni

Soulbound tokeni su NFT-ovi koji su trajno vezani za određenu adresu i ne mogu se prenijeti. Ovi se tokeni mogu koristiti za predstavljanje neprenosivih vjerodajnica, kao što su diplome, stručni certifikati ili članstvo u zajednici. To se omogućuje uklanjanjem ili ograničavanjem funkcije `transferFrom`.

Budućnost ERC-721 i NFT-ova

ERC-721 standard nastavlja se razvijati, s tekućim istraživanjima i razvojem usmjerenim na poboljšanje njegove učinkovitosti, sigurnosti i funkcionalnosti. Budući razvoj može uključivati:

Zaključak

ERC-721 pametni ugovori moćan su alat za predstavljanje vlasništva nad jedinstvenom digitalnom i fizičkom imovinom na blockchainu. Razumijevanjem arhitekture, detalja implementacije, sigurnosnih aspekata i praktičnih primjena ERC-721 standarda, programeri mogu graditi inovativne i utjecajne NFT projekte. Kako NFT ekosustav nastavlja rasti i razvijati se, ERC-721 standard igrat će ključnu ulogu u oblikovanju budućnosti digitalnog vlasništva.

Ovaj vodič pruža čvrst temelj za razumijevanje i implementaciju ERC-721 pametnih ugovora. Ne zaboravite uvijek dati prednost sigurnosti i slijediti najbolje prakse prilikom razvoja i implementacije vlastitih NFT projekata. Sretno!

NFT pametni ugovori: Dubinski uvid u implementaciju ERC-721 standarda | MLOG