Lietuvių

Išnagrinėkite ERC-721 išmaniųjų kontraktų, skirtų NFT, subtilybes. Sužinokite apie jų architektūrą, įgyvendinimą, saugumo aspektus ir pritaikymą realiame pasaulyje.

NFT Išmanieji Kontraktai: Išsami ERC-721 Įgyvendinimo Analizė

Nepakeičiamieji žetonai (NFT) sukėlė revoliuciją skaitmeninio turto srityje, suteikdami galimybę atvaizduoti unikalius daiktus blokų grandinėje. Daugumos NFT pagrindas yra ERC-721 standartas – taisyklių rinkinys, reglamentuojantis, kaip šie žetonai yra kuriami, valdomi ir perleidžiami. Šis išsamus vadovas pateikia giluminę ERC-721 išmaniųjų kontraktų analizę, apimančią jų architektūrą, įgyvendinimo detales, saugumo aspektus ir praktinį pritaikymą.

Kas yra ERC-721?

ERC-721 yra standartas, skirtas nepakeičiamiesiems žetonams Ethereum blokų grandinėje atvaizduoti. Skirtingai nuo ERC-20 žetonų, kurie yra pakeičiami (tai reiškia, kad kiekvienas žetonas yra identiškas visiems kitiems), ERC-721 žetonai yra unikalūs. Kiekvienas žetonas turi atskirą ID, todėl jis tinkamas atstovauti unikalaus skaitmeninio ar fizinio turto nuosavybei.

Pagrindinės ERC-721 žetonų savybės:

ERC-721 Išmaniojo Kontrakto Architektūra

ERC-721 išmanusis kontraktas yra Solidity programa, kuri įgyvendina ERC-721 standartą. Paprastai jį sudaro šie komponentai:

Pagrindinės funkcijos:

Metaduomenų plėtinys (neprivalomas):

Išvardijimo plėtinys (neprivalomas):

ERC-721 Išmaniojo Kontrakto Įgyvendinimas su OpenZeppelin

OpenZeppelin teikia saugią ir audituotą išmaniųjų kontraktų biblioteką, kuri supaprastina ERC-721 žetonų kūrimą. Naudojant OpenZeppelin ERC721 įgyvendinimą, sumažėja rizika įtraukti pažeidžiamumų į savo kodą. Štai pavyzdys, kaip įgyvendinti ERC-721 išmanųjį kontraktą naudojant OpenZeppelin:

Būtinosios sąlygos:

Žingsniai:

  1. Inicijuokite Truffle arba Hardhat projektą:
# Truffle
mkdir mano-nft-projektas
cd mano-nft-projektas
truffle init

# Hardhat
mkdir mano-nft-projektas
cd mano-nft-projektas
npx hardhat
  1. Įdiekite OpenZeppelin Contracts:
npm install @openzeppelin/contracts
  1. Sukurkite ERC-721 išmanųjį kontraktą: Sukurkite naują Solidity failą (pvz., `MyNFT.sol`) savo `contracts` kataloge.
// 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;
    }



    // Toliau pateikiamos funkcijos yra Solidity reikalaujami perrašymai.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Kompiliuokite išmanųjį kontraktą: Naudokite Truffle ar Hardhat, kad sukompiliuotumėte savo išmanųjį kontraktą.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Sukurkite diegimo scenarijų: Sukurkite naują JavaScript failą (pvz., `deploy.js`) savo `migrations` arba `scripts` kataloge.
// Truffle Migracijos Pavyzdys
const MyNFT = artifacts.require("MyNFT");

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

// Hardhat Diegimo Scenarijaus Pavyzdys
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. Diekite išmanųjį kontraktą: Diekite savo išmanųjį kontraktą į vietinę blokų grandinę (pvz., Ganache) arba testavimo tinklą (pvz., Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Nepamirškite pakeisti `ipfs://YOUR_IPFS_CID/` į savo tikrąjį IPFS CID (Content Identifier). Šis bazinis URI nurodo vietą, kur bus saugomi jūsų NFT metaduomenų JSON failai.

NFT Metaduomenų Saugojimas IPFS

NFT metaduomenys paprastai saugomi ne grandinėje (off-chain), siekiant sumažinti duomenų saugojimo blokų grandinėje išlaidas. IPFS (InterPlanetary File System) yra decentralizuotas saugojimo tinklas, kuris dažnai naudojamas NFT metaduomenims saugoti. Kiekvienas NFT turi `tokenURI`, kuris nurodo į JSON failą IPFS tinkle, kuriame yra metaduomenys apie NFT, pvz., pavadinimas, aprašymas, paveikslėlio URL ir kiti atributai.

NFT metaduomenų pavyzdys (JSON):

{
  "name": "Mano Nuostabus NFT",
  "description": "Tai yra unikalus NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Fonas",
      "value": "Mėlynas"
    },
    {
      "trait_type": "Personažas",
      "value": "Robotas"
    }
  ]
}

Pakeiskite `ipfs://YOUR_IPFS_CID/image.png` į tikrąjį savo paveikslėlio IPFS CID.

Žingsniai, kaip įkelti metaduomenis į IPFS:

  1. Pasirinkite IPFS klientą: Pasirinkite IPFS klientą, pvz., IPFS Desktop, Pinata ar NFT.Storage.
  2. Įkelkite savo metaduomenis: Įkelkite savo NFT metaduomenų JSON failus ir paveikslėlius į IPFS naudodami pasirinktą klientą.
  3. Gaukite IPFS CID: Įkėlę metaduomenis, gausite IPFS CID. Tai yra unikalus jūsų duomenų identifikatorius IPFS tinkle.
  4. Atnaujinkite išmanųjį kontraktą: Atnaujinkite `tokenURI` funkciją savo išmaniajame kontrakte, kad ji nurodytų į jūsų IPFS CID.

Saugumo Aspektai Kuriant ERC-721 Išmaniuosius Kontraktus

Saugumas yra svarbiausias dalykas kuriant ERC-721 išmaniuosius kontraktus. Štai keletas svarbių saugumo aspektų:

ERC-721 NFT Pritaikymas Realiame Pasaulyje

ERC-721 NFT naudojami įvairiose srityse, įskaitant:

Tarptautiniai pavyzdžiai:

Pažangios ERC-721 Koncepcijos

ERC-721A

ERC-721A yra dujų atžvilgiu efektyvesnis ERC-721 standarto įgyvendinimas, kuris optimizuoja kelių NFT sukūrimą vienoje transakcijoje. Jis sumažina dujų išlaidas, amortizuodamas saugojimo išlaidas keliems žetonams. Tai gali būti naudinga projektams, kuriuose reikia sukurti didelį NFT skaičių.

Tingusis kūrimas (Lazy Minting)

Tingusis kūrimas yra technika, kai NFT sukuriami tik tada, kai jie yra nupirkti. Tai gali sutaupyti dujų išlaidų projektams, kurie turi daug NFT, bet nesitiki, kad visi jie bus parduoti. NFT metaduomenys saugomi ne grandinėje, kol NFT nėra nupirktas, tada žetonas yra sukuriamas ir metaduomenys pridedami į blokų grandinę.

Su siela susieti žetonai (Soulbound Tokens)

Su siela susieti žetonai yra NFT, kurie yra nuolat susieti su konkrečiu adresu ir negali būti perleisti. Šie žetonai gali būti naudojami atstovauti neperleidžiamiems kredencialams, pvz., išsilavinimo diplomams, profesiniams sertifikatams ar narystei bendruomenėje. Tai pasiekiama pašalinant arba apribojant `transferFrom` funkciją.

ERC-721 ir NFT Ateitis

ERC-721 standartas ir toliau tobulėja, o nuolatiniai tyrimai ir plėtra yra skirti jo efektyvumo, saugumo ir funkcionalumo gerinimui. Ateities pokyčiai gali apimti:

Išvada

ERC-721 išmanieji kontraktai yra galingas įrankis, skirtas atstovauti unikalaus skaitmeninio ir fizinio turto nuosavybei blokų grandinėje. Suprasdami ERC-721 architektūrą, įgyvendinimo detales, saugumo aspektus ir praktinį pritaikymą, kūrėjai gali kurti novatoriškus ir paveikius NFT projektus. NFT ekosistemai toliau augant ir tobulėjant, ERC-721 standartas vaidins lemiamą vaidmenį formuojant skaitmeninės nuosavybės ateitį.

Šis vadovas suteikia tvirtą pagrindą suprasti ir įgyvendinti ERC-721 išmaniuosius kontraktus. Kuriant ir diegiant savo NFT projektus, visada teikite pirmenybę saugumui ir laikykitės geriausių praktikų. Sėkmės!