Slovenščina

Raziščite podrobnosti pametnih pogodb ERC-721 za NFT-je. Spoznajte njihovo arhitekturo, implementacijo, varnostne vidike in primere uporabe v praksi.

Pametne pogodbe NFT: Podroben pregled implementacije ERC-721

Nezamenljivi žetoni (NFT-ji) so povzročili revolucijo na področju digitalnih sredstev, saj omogočajo predstavitev unikatnih predmetov na verigi blokov. V osrčju večine NFT-jev je standard ERC-721, nabor pravil, ki urejajo, kako se ti žetoni ustvarjajo, upravljajo in prenašajo. Ta celovit vodnik ponuja poglobljen pregled pametnih pogodb ERC-721, ki zajema njihovo arhitekturo, podrobnosti implementacije, varnostne vidike in praktično uporabo.

Kaj je ERC-721?

ERC-721 je standard za predstavitev nezamenljivih žetonov na verigi blokov Ethereum. Za razliko od žetonov ERC-20, ki so zamenljivi (kar pomeni, da je vsak žeton enak vsem ostalim), so žetoni ERC-721 unikatni. Vsak žeton ima svoj edinstven ID, zaradi česar je primeren za predstavitev lastništva unikatnih digitalnih ali fizičnih sredstev.

Ključne značilnosti žetonov ERC-721:

Arhitektura pametne pogodbe ERC-721

Pametna pogodba ERC-721 je program v jeziku Solidity, ki implementira standard ERC-721. Običajno vključuje naslednje komponente:

Osnovne funkcije:

Razširitev za metapodatke (izbirno):

Razširitev za naštevanje (izbirno):

Implementacija pametne pogodbe ERC-721 z OpenZeppelin

OpenZeppelin ponuja varno in preverjeno knjižnico pametnih pogodb, ki poenostavlja razvoj žetonov ERC-721. Uporaba implementacije ERC721 iz OpenZeppelina zmanjšuje tveganje za vnos ranljivosti v vašo kodo. Sledi primer, kako implementirati pametno pogodbo ERC-721 z uporabo OpenZeppelina:

Predpogoji:

Koraki:

  1. Inicializirajte projekt Truffle ali Hardhat:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. Namestite pogodbe OpenZeppelin:
npm install @openzeppelin/contracts
  1. Ustvarite pametno pogodbo ERC-721: Ustvarite novo datoteko Solidity (npr. `MyNFT.sol`) v vaši mapi `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. Prevedite pametno pogodbo: Uporabite Truffle ali Hardhat za prevajanje vaše pametne pogodbe.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Ustvarite skript za uvajanje: Ustvarite novo datoteko JavaScript (npr. `deploy.js`) v vaši mapi `migrations` ali `scripts`.
// Truffle Migration Example
const MyNFT = artifacts.require("MyNFT");

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

// Hardhat Deployment Script Example
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. Uvedite pametno pogodbo: Uvedite vašo pametno pogodbo na lokalno verigo blokov (npr. Ganache) ali testno omrežje (npr. Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Ne pozabite zamenjati `ipfs://YOUR_IPFS_CID/` z vašim dejanskim IPFS CID (Content Identifier). Ta osnovni URI kaže na lokacijo, kjer bodo shranjene vaše datoteke JSON z metapodatki NFT-jev.

Shranjevanje metapodatkov NFT na IPFS

Metapodatki NFT se običajno shranjujejo izven verige blokov, da se zmanjšajo stroški shranjevanja podatkov na verigi. IPFS (InterPlanetary File System) je decentralizirano omrežje za shranjevanje, ki se pogosto uporablja za shranjevanje metapodatkov NFT. Vsak NFT ima `tokenURI`, ki kaže na datoteko JSON na IPFS, ki vsebuje metapodatke o NFT-ju, kot so njegovo ime, opis, URL slike in druge lastnosti.

Primer metapodatkov NFT (JSON):

{
  "name": "Moj super NFT",
  "description": "To je unikaten NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Ozadje",
      "value": "Modra"
    },
    {
      "trait_type": "Lik",
      "value": "Robot"
    }
  ]
}

Zamenjajte `ipfs://YOUR_IPFS_CID/image.png` z dejanskim IPFS CID vaše slike.

Koraki za nalaganje metapodatkov na IPFS:

  1. Izberite odjemalca IPFS: Izberite odjemalca IPFS, kot so IPFS Desktop, Pinata ali NFT.Storage.
  2. Naložite svoje metapodatke: Naložite svoje datoteke JSON z metapodatki NFT in slike na IPFS z uporabo izbranega odjemalca.
  3. Pridobite IPFS CID: Po nalaganju metapodatkov boste prejeli IPFS CID. To je edinstven identifikator za vaše podatke na IPFS.
  4. Posodobite pametno pogodbo: Posodobite funkcijo `tokenURI` v vaši pametni pogodbi, da bo kazala na vaš IPFS CID.

Varnostni vidiki pametnih pogodb ERC-721

Varnost je ključnega pomena pri razvoju pametnih pogodb ERC-721. Sledi nekaj ključnih varnostnih vidikov:

Primeri uporabe NFT-jev ERC-721 v praksi

NFT-ji ERC-721 se uporabljajo v širokem spektru aplikacij, vključno z:

Mednarodni primeri:

Napredni koncepti ERC-721

ERC-721A

ERC-721A je implementacija standarda ERC-721, ki je učinkovitejša pri porabi plina in optimizira kovanje več NFT-jev v eni transakciji. Zmanjšuje stroške plina z amortizacijo stroškov shranjevanja na več žetonov. To je lahko koristno za projekte, ki vključujejo kovanje velikega števila NFT-jev.

Leno kovanje (Lazy Minting)

Leno kovanje je tehnika, pri kateri se NFT-ji kujejo šele, ko so kupljeni. To lahko prihrani stroške plina za projekte, ki imajo veliko število NFT-jev, vendar ne pričakujejo, da bodo vsi prodani. Metapodatki NFT se shranjujejo izven verige, dokler se NFT ne kupi, takrat pa se žeton skuje in metapodatki se dodajo na verigo blokov.

Dušno vezani žetoni (Soulbound Tokens)

Dušno vezani žetoni so NFT-ji, ki so trajno vezani na določen naslov in jih ni mogoče prenesti. Ti žetoni se lahko uporabljajo za predstavitev neprenosljivih poverilnic, kot so izobrazbena potrdila, strokovni certifikati ali članstvo v skupnosti. To je omogočeno z odstranitvijo ali omejitvijo funkcije `transferFrom`.

Prihodnost ERC-721 in NFT-jev

Standard ERC-721 se nenehno razvija, z nenehnimi raziskavami in razvojem, osredotočenim na izboljšanje njegove učinkovitosti, varnosti in funkcionalnosti. Prihodnji razvoj lahko vključuje:

Zaključek

Pametne pogodbe ERC-721 so močno orodje za predstavitev lastništva unikatnih digitalnih in fizičnih sredstev na verigi blokov. Z razumevanjem arhitekture, podrobnosti implementacije, varnostnih vidikov in praktične uporabe ERC-721 lahko razvijalci gradijo inovativne in vplivne projekte NFT. Ker ekosistem NFT še naprej raste in se razvija, bo standard ERC-721 igral ključno vlogo pri oblikovanju prihodnosti digitalnega lastništva.

Ta vodnik ponuja trdne temelje za razumevanje in implementacijo pametnih pogodb ERC-721. Ne pozabite, da morate pri razvoju in uvajanju lastnih projektov NFT vedno dati prednost varnosti in upoštevati najboljše prakse. Srečno!