Eesti

Uurige NFT-de ERC-721 nutilepingute peensusi. Õppige nende arhitektuuri, implementeerimise, turvalisuse kaalutluste ja reaalsete rakenduste kohta.

NFT nutilepingud: sügav sukeldumine ERC-721 implementeerimisse

Mitteasendatavad tokenid (NFT-d) on revolutsioneerinud digitaalsete varade maastikku, võimaldades esindada unikaalseid esemeid plokiahelas. Enamiku NFT-de keskmes on ERC-721 standard, reeglite kogum, mis reguleerib, kuidas neid tokeneid luuakse, hallatakse ja edastatakse. See põhjalik juhend pakub sügavat ülevaadet ERC-721 nutilepingutest, käsitledes nende arhitektuuri, implementeerimise detaile, turvalisuse kaalutlusi ja praktilisi rakendusi.

Mis on ERC-721?

ERC-721 on standard mitteasendatavate tokenite esindamiseks Ethereumi plokiahelas. Erinevalt ERC-20 tokenitest, mis on asendatavad (st iga token on identne iga teise tokeniga), on ERC-721 tokenid unikaalsed. Igal tokenil on eristav ID, mis teeb selle sobivaks unikaalsete digitaalsete või füüsiliste varade omandiõiguse esindamiseks.

ERC-721 tokenite põhiomadused:

ERC-721 nutilepingu arhitektuur

ERC-721 nutileping on Solidity programm, mis implementeerib ERC-721 standardi. See sisaldab tavaliselt järgmisi komponente:

Põhifunktsioonid:

Metaandmete laiendus (valikuline):

Loetelu laiendus (valikuline):

ERC-721 nutilepingu implementeerimine OpenZeppeliniga

OpenZeppelin pakub turvalist ja auditeeritud nutilepingute teeki, mis lihtsustab ERC-721 tokenite arendamist. OpenZeppelini ERC721 implementatsiooni kasutamine vähendab haavatavuste sissetoomise riski teie koodi. Siin on näide, kuidas implementeerida ERC-721 nutilepingut OpenZeppelini abil:

Eeltingimused:

Sammud:

  1. Initsialiseerige Truffle'i või Hardhati projekt:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. Installige OpenZeppelini lepingud:
npm install @openzeppelin/contracts
  1. Looge ERC-721 nutileping: Looge uus Solidity fail (nt `MyNFT.sol`) oma `contracts` kataloogi.
// 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;
    }



    // Järgmised funktsioonid on Solidity poolt nõutavad ülekirjutused.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Kompileerige nutileping: Kasutage oma nutilepingu kompileerimiseks Truffle'it või Hardhati.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Looge kasutuselevõtu skript: Looge uus JavaScripti fail (nt `deploy.js`) oma `migrations` või `scripts` kataloogi.
// Truffle'i migratsiooni näide
const MyNFT = artifacts.require("MyNFT");

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

// Hardhati kasutuselevõtu skripti näide
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. Võtke nutileping kasutusele: Võtke oma nutileping kasutusele lokaalses plokiahelas (nt Ganache) või testvõrgus (nt Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Ärge unustage asendada `ipfs://YOUR_IPFS_CID/` oma tegeliku IPFS CID-ga (sisu identifikaator). See baas-URI viitab asukohale, kuhu teie NFT metaandmete JSON-failid salvestatakse.

NFT metaandmete salvestamine IPFS-is

NFT metaandmed salvestatakse tavaliselt ahelaväliselt, et vähendada andmete salvestamise kulusid plokiahelas. IPFS (InterPlanetary File System) on detsentraliseeritud salvestusvõrk, mida kasutatakse tavaliselt NFT metaandmete salvestamiseks. Igal NFT-l on `tokenURI`, mis viitab IPFS-is asuvale JSON-failile, mis sisaldab NFT kohta metaandmeid, nagu selle nimi, kirjeldus, pildi URL ja muud atribuudid.

NFT metaandmete näide (JSON):

{
  "name": "My Awesome NFT",
  "description": "This is a unique NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Background",
      "value": "Blue"
    },
    {
      "trait_type": "Character",
      "value": "Robot"
    }
  ]
}

Asendage `ipfs://YOUR_IPFS_CID/image.png` oma pildi tegeliku IPFS CID-ga.

Sammud metaandmete üleslaadimiseks IPFS-i:

  1. Valige IPFS-i klient: Valige IPFS-i klient, näiteks IPFS Desktop, Pinata või NFT.Storage.
  2. Laadige oma metaandmed üles: Laadige oma NFT metaandmete JSON-failid ja pildid IPFS-i, kasutades valitud klienti.
  3. Hankige IPFS CID: Pärast metaandmete üleslaadimist saate IPFS CID. See on teie andmete unikaalne identifikaator IPFS-is.
  4. Uuendage nutilepingut: Uuendage oma nutilepingu `tokenURI` funktsiooni, et see viitaks teie IPFS CID-le.

ERC-721 nutilepingute turvalisuse kaalutlused

Turvalisus on ERC-721 nutilepingute arendamisel esmatähtis. Siin on mõned kriitilised turvalisuse kaalutlused:

ERC-721 NFT-de reaalsed rakendused

ERC-721 NFT-sid kasutatakse laias valikus rakendustes, sealhulgas:

Rahvusvahelised näited:

ERC-721 täiustatud kontseptsioonid

ERC-721A

ERC-721A on gaasisäästlikum ERC-721 standardi implementatsioon, mis optimeerib mitme NFT vermimist (minting) ühes tehingus. See vähendab gaasikulusid, amortiseerides salvestuskulud mitme tokeni peale. See võib olla kasulik projektidele, mis hõlmavad suure hulga NFT-de vermimist.

Laisk vermimine (Lazy Minting)

Laisk vermimine on tehnika, kus NFT-d vermitakse alles siis, kui need ostetakse. See võib säästa gaasikulusid projektide puhul, millel on suur hulk NFT-sid, kuid ei eeldata, et kõik need müüakse. NFT metaandmed salvestatakse ahelaväliselt kuni NFT ostmiseni, misjärel token vermitakse ja metaandmed lisatakse plokiahelasse.

Hingesiduvad tokenid (Soulbound Tokens)

Hingesiduvad tokenid on NFT-d, mis on püsivalt seotud konkreetse aadressiga ja mida ei saa üle kanda. Neid tokeneid saab kasutada mitteülekantavate volituste, näiteks haridust tõendavate dokumentide, kutsetunnistuste või kogukonna liikmelisuse esindamiseks. See on võimalik, eemaldades või piirates `transferFrom` funktsiooni.

ERC-721 ja NFT-de tulevik

ERC-721 standard areneb pidevalt, käimasoleva teadus- ja arendustegevusega, mis keskendub selle tõhususe, turvalisuse ja funktsionaalsuse parandamisele. Tulevased arengud võivad hõlmata:

Kokkuvõte

ERC-721 nutilepingud on võimas vahend unikaalsete digitaalsete ja füüsiliste varade omandiõiguse esindamiseks plokiahelas. Mõistes ERC-721 arhitektuuri, implementeerimise detaile, turvalisuse kaalutlusi ja praktilisi rakendusi, saavad arendajad luua uuenduslikke ja mõjusaid NFT-projekte. Kuna NFT ökosüsteem kasvab ja areneb, mängib ERC-721 standard digitaalse omandiõiguse tuleviku kujundamisel kriitilist rolli.

See juhend pakub tugeva aluse ERC-721 nutilepingute mõistmiseks ja implementeerimiseks. Pidage meeles, et oma NFT-projektide arendamisel ja kasutuselevõtmisel tuleb alati eelistada turvalisust ja järgida parimaid tavasid. Edu!