Latviešu

Izpētiet ERC-721 viedlīgumu sarežģītību NFT jomā. Uzziniet par to arhitektūru, ieviešanu, drošības apsvērumiem un reāliem pielietojumiem.

NFT viedlīgumi: ERC-721 ieviešanas dziļā analīze

Neaizvietojamie žetoni (NFT) ir radījuši revolūciju digitālo aktīvu vidē, ļaujot attēlot unikālus priekšmetus blokķēdē. Lielākās daļas NFT pamatā ir ERC-721 standarts – noteikumu kopums, kas regulē, kā šie žetoni tiek radīti, pārvaldīti un pārsūtīti. Šis visaptverošais ceļvedis sniedz padziļinātu ERC-721 viedlīgumu izpēti, aptverot to arhitektūru, ieviešanas detaļas, drošības apsvērumus un praktiskos pielietojumus.

Kas ir ERC-721?

ERC-721 ir standarts neaizvietojamo žetonu attēlošanai Ethereum blokķēdē. Atšķirībā no ERC-20 žetoniem, kas ir aizvietojami (tas nozīmē, ka katrs žetons ir identisks visiem pārējiem), ERC-721 žetoni ir unikāli. Katram žetonam ir atšķirīgs ID, kas to padara piemērotu unikālu digitālu vai fizisku aktīvu īpašumtiesību attēlošanai.

Galvenās ERC-721 žetonu īpašības:

ERC-721 viedlīguma arhitektūra

ERC-721 viedlīgums ir Solidity programma, kas ievieš ERC-721 standartu. Tas parasti ietver šādus komponentus:

Pamatfunkcijas:

Metadatu paplašinājums (pēc izvēles):

Uzskaitījuma paplašinājums (pēc izvēles):

ERC-721 viedlīguma ieviešana ar OpenZeppelin

OpenZeppelin nodrošina drošu un auditētu viedlīgumu bibliotēku, kas vienkāršo ERC-721 žetonu izstrādi. OpenZeppelin ERC721 implementācijas izmantošana samazina risku ievadīt ievainojamības jūsu kodā. Šeit ir piemērs, kā ieviest ERC-721 viedlīgumu, izmantojot OpenZeppelin:

Priekšnosacījumi:

Soļi:

  1. Inicializējiet Truffle vai Hardhat projektu:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. Instalējiet OpenZeppelin Contracts:
npm install @openzeppelin/contracts
  1. Izveidojiet ERC-721 viedlīgumu: Izveidojiet jaunu Solidity failu (piemēram, `MyNFT.sol`) savā `contracts` direktorijā.
// 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;
    }



    // Šīs funkcijas ir Solidity nepieciešamie pārsniegumi.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Kompilējiet viedlīgumu: Izmantojiet Truffle vai Hardhat, lai kompilētu savu viedlīgumu.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Izveidojiet izvietošanas skriptu: Izveidojiet jaunu JavaScript failu (piemēram, `deploy.js`) savā `migrations` vai `scripts` direktorijā.
// Truffle migrācijas piemērs
const MyNFT = artifacts.require("MyNFT");

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

// Hardhat izvietošanas skripta piemērs
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. Izvietojiet viedlīgumu: Izvietojiet savu viedlīgumu uz lokālās blokķēdes (piemēram, Ganache) vai testa tīkla (piemēram, Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Atcerieties aizstāt `ipfs://YOUR_IPFS_CID/` ar savu faktisko IPFS CID (Satura Identifikatoru). Šis bāzes URI norāda uz vietu, kur tiks glabāti jūsu NFT metadatu JSON faili.

NFT metadatu glabāšana IPFS

NFT metadati parasti tiek glabāti ārpus ķēdes (off-chain), lai samazinātu datu glabāšanas izmaksas blokķēdē. IPFS (InterPlanetary File System) ir decentralizēts uzglabāšanas tīkls, ko parasti izmanto NFT metadatu glabāšanai. Katram NFT ir `tokenURI`, kas norāda uz JSON failu IPFS, kurā ir metadati par NFT, piemēram, tā nosaukums, apraksts, attēla URL un citi atribūti.

NFT metadatu piemērs (JSON):

{
  "name": "Mans lieliskais NFT",
  "description": "Šis ir unikāls NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Fons",
      "value": "Zils"
    },
    {
      "trait_type": "Tēls",
      "value": "Robots"
    }
  ]
}

Aizstājiet `ipfs://YOUR_IPFS_CID/image.png` ar faktisko sava attēla IPFS CID.

Soļi metadatu augšupielādei IPFS:

  1. Izvēlieties IPFS klientu: Izvēlieties IPFS klientu, piemēram, IPFS Desktop, Pinata vai NFT.Storage.
  2. Augšupielādējiet savus metadatus: Augšupielādējiet savus NFT metadatu JSON failus un attēlus IPFS, izmantojot izvēlēto klientu.
  3. Iegūstiet IPFS CID: Pēc metadatu augšupielādes jūs saņemsiet IPFS CID. Tas ir unikāls jūsu datu identifikators IPFS.
  4. Atjauniniet viedlīgumu: Atjauniniet `tokenURI` funkciju savā viedlīgumā, lai tā norādītu uz jūsu IPFS CID.

Drošības apsvērumi ERC-721 viedlīgumiem

Drošība ir vissvarīgākā, izstrādājot ERC-721 viedlīgumus. Šeit ir daži kritiski drošības apsvērumi:

ERC-721 NFT reālie pielietojumi

ERC-721 NFT tiek izmantoti plašā lietojumu klāstā, tostarp:

Starptautiski piemēri:

Padziļināti ERC-721 koncepti

ERC-721A

ERC-721A ir gāzes ziņā efektīvāka ERC-721 standarta implementācija, kas optimizē vairāku NFT kalšanu vienā transakcijā. Tā samazina gāzes izmaksas, amortizējot uzglabāšanas izmaksas uz vairākiem žetoniem. Tas var būt noderīgi projektiem, kas ietver lielu skaitu NFT kalšanu.

Slinkā kalšana (Lazy Minting)

Slinkā kalšana ir tehnika, kurā NFT tiek kalti tikai tad, kad tie tiek nopirkti. Tas var ietaupīt gāzes izmaksas projektiem, kuriem ir liels skaits NFT, bet nav paredzēts, ka visi tiks pārdoti. NFT metadati tiek glabāti ārpus ķēdes, līdz NFT tiek nopirkts, un tad žetons tiek kalts un metadati tiek pievienoti blokķēdei.

Dvēselei piesaistītie žetoni (Soulbound Tokens)

Dvēselei piesaistītie žetoni ir NFT, kas ir neatgriezeniski piesaistīti konkrētai adresei un nav pārsūtāmi. Šos žetonus var izmantot, lai attēlotu nepārsūtāmus akreditācijas datus, piemēram, izglītības grādus, profesionālos sertifikātus vai dalību kopienā. To panāk, noņemot vai ierobežojot `transferFrom` funkciju.

ERC-721 un NFT nākotne

ERC-721 standarts turpina attīstīties, un notiek pastāvīga izpēte un izstrāde, kas vērsta uz tā efektivitātes, drošības un funkcionalitātes uzlabošanu. Nākotnes attīstība var ietvert:

Noslēgums

ERC-721 viedlīgumi ir spēcīgs rīks unikālu digitālo un fizisko aktīvu īpašumtiesību attēlošanai blokķēdē. Izprotot ERC-721 arhitektūru, ieviešanas detaļas, drošības apsvērumus un praktiskos pielietojumus, izstrādātāji var veidot inovatīvus un ietekmīgus NFT projektus. NFT ekosistēmai turpinot augt un attīstīties, ERC-721 standartam būs izšķiroša loma digitālo īpašumtiesību nākotnes veidošanā.

Šis ceļvedis sniedz stabilu pamatu ERC-721 viedlīgumu izpratnei un ieviešanai. Atcerieties vienmēr prioritizēt drošību un ievērot labāko praksi, izstrādājot un izvietojot savus NFT projektus. Veiksmi!