O'zbek

NFTlar uchun ERC-721 smart-kontraktlarining murakkabliklarini o'rganing. Ularning arxitekturasi, implementatsiyasi, xavfsizlik masalalari va amaliy qo'llanilishi haqida bilib oling.

NFT Smart-kontraktlari: ERC-721 Implementatsiyasini Chuqur Tahlil Qilish

O'zaro almashtirib bo'lmaydigan tokenlar (NFTs) raqamli aktivlar landshaftida inqilob qildi va blokcheynda noyob buyumlarni ifodalash imkonini berdi. Aksariyat NFTlarning markazida ERC-721 standarti yotadi, bu tokenlarni yaratish, boshqarish va o'tkazishni tartibga soluvchi qoidalar to'plamidir. Ushbu keng qamrovli qo'llanma ERC-721 smart-kontraktlarini, ularning arxitekturasi, implementatsiya tafsilotlari, xavfsizlik masalalari va amaliy qo'llanilishini chuqur o'rganishni taqdim etadi.

ERC-721 nima?

ERC-721 - bu Ethereum blokcheynida o'zaro almashtirib bo'lmaydigan tokenlarni ifodalash uchun standart. Har bir token boshqa har qanday tokenga o'xshash bo'lgan ERC-20 tokenlaridan farqli o'laroq, ERC-721 tokenlari noyobdir. Har bir token o'ziga xos ID raqamiga ega bo'lib, bu uni noyob raqamli yoki jismoniy aktivlarga egalikni ifodalash uchun mos qiladi.

ERC-721 Tokenlarining Asosiy Xususiyatlari:

ERC-721 Smart-kontrakt Arxitekturasi

ERC-721 smart-kontrakti - bu ERC-721 standartini amalga oshiruvchi Solidity dasturi. U odatda quyidagi komponentlarni o'z ichiga oladi:

Asosiy Funksiyalar:

Metama'lumotlar Kengaytmasi (Ixtiyoriy):

Sanab O'tish Kengaytmasi (Ixtiyoriy):

OpenZeppelin Yordamida ERC-721 Smart-kontraktini Implementatsiya Qilish

OpenZeppelin ERC-721 tokenlarini ishlab chiqishni soddalashtiradigan xavfsiz va auditdan o'tgan smart-kontraktlar kutubxonasini taqdim etadi. OpenZeppelinning ERC721 implementatsiyasidan foydalanish kodingizga zaifliklar kiritish xavfini kamaytiradi. Quyida OpenZeppelin yordamida ERC-721 smart-kontraktini qanday amalga oshirish mumkinligi haqida misol keltirilgan:

Dastlabki talablar:

Qadamlar:

  1. Truffle yoki Hardhat loyihasini ishga tushiring:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. OpenZeppelin Contracts'ni o'rnating:
npm install @openzeppelin/contracts
  1. ERC-721 Smart-kontraktini yarating: `contracts` katalogingizda yangi Solidity faylini (masalan, `MyNFT.sol`) yarating.
// 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. Smart-kontraktni kompilyatsiya qiling: Smart-kontraktingizni kompilyatsiya qilish uchun Truffle yoki Hardhat'dan foydalaning.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Joylashtirish skriptini yarating: `migrations` yoki `scripts` katalogingizda yangi JavaScript faylini (masalan, `deploy.js`) yarating.
// 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. Smart-kontraktni joylashtiring: Smart-kontraktingizni mahalliy blokcheynga (masalan, Ganache) yoki test tarmog'iga (masalan, Ropsten, Rinkeby) joylashtiring.
# Truffle
truffle migrate

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

`ipfs://YOUR_IPFS_CID/` ni o'zingizning haqiqiy IPFS CID (Kontent Identifikatori) bilan almashtirishni unutmang. Ushbu asosiy URI sizning NFT metama'lumotlar JSON fayllaringiz saqlanadigan joyga ishora qiladi.

NFT Metama'lumotlarini IPFSda Saqlash

NFT metama'lumotlari odatda blokcheynda ma'lumotlarni saqlash xarajatlarini kamaytirish uchun zanjirdan tashqarida saqlanadi. IPFS (InterPlanetary File System) - bu NFT metama'lumotlarini saqlash uchun keng qo'llaniladigan markazlashtirilmagan saqlash tarmog'i. Har bir NFT IPFS'dagi NFT haqidagi metama'lumotlarni, masalan, uning nomi, tavsifi, rasm URL'i va boshqa atributlarini o'z ichiga olgan JSON fayliga ishora qiluvchi `tokenURI` ga ega.

NFT Metama'lumotlariga Misol (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"
    }
  ]
}

`ipfs://YOUR_IPFS_CID/image.png` ni rasmingizning haqiqiy IPFS CID'si bilan almashtiring.

Metama'lumotlarni IPFSga Yuklash Qadamlari:

  1. IPFS Klientini tanlang: IPFS Desktop, Pinata yoki NFT.Storage kabi IPFS klientini tanlang.
  2. Metama'lumotlaringizni yuklang: Tanlagan klientingiz yordamida NFT metama'lumotlar JSON fayllaringizni va rasmlaringizni IPFS'ga yuklang.
  3. IPFS CID'ni oling: Metama'lumotlaringizni yuklaganingizdan so'ng, siz IPFS CID'ni olasiz. Bu sizning ma'lumotlaringiz uchun IPFS'dagi noyob identifikator.
  4. Smart-kontraktni yangilang: Smart-kontraktingizdagi `tokenURI` funksiyasini IPFS CID'ingizga ishora qiladigan qilib yangilang.

ERC-721 Smart-kontraktlari Uchun Xavfsizlik Masalalari

ERC-721 smart-kontraktlarini ishlab chiqishda xavfsizlik eng muhim masaladir. Mana bir nechta muhim xavfsizlik masalalari:

ERC-721 NFT'larining Amaliy Qo'llanilishi

ERC-721 NFTlari keng ko'lamli ilovalarda qo'llaniladi, jumladan:

Xalqaro Misollar:

Ilg'or ERC-721 Konsepsiyalari

ERC-721A

ERC-721A - bu ERC-721 standartining yanada gaz tejamkor implementatsiyasi bo'lib, bitta tranzaksiyada bir nechta NFT yaratishni optimallashtiradi. U bir nechta tokenlar bo'yicha saqlash xarajatlarini amortizatsiya qilish orqali gaz xarajatlarini kamaytiradi. Bu ko'p sonli NFTlarni yaratishni o'z ichiga olgan loyihalar uchun foydali bo'lishi mumkin.

Yalqa Minting (Lazy Minting)

Yalqa minting - bu NFTlar faqat sotib olinganda yaratiladigan texnikadir. Bu ko'p sonli NFTlarga ega bo'lgan, ammo ularning barchasi sotilishini kutmaydigan loyihalar uchun gaz xarajatlarini tejashga yordam beradi. NFT metama'lumotlari NFT sotib olinguncha zanjirdan tashqarida saqlanadi, shundan so'ng token yaratiladi va metama'lumotlar blokcheynga qo'shiladi.

Soulbound Tokenlar (Ruhga bog'langan tokenlar)

Soulbound tokenlar - bu muayyan manzilga doimiy ravishda bog'langan va o'tkazib bo'lmaydigan NFTlardir. Ushbu tokenlar ta'lim darajalari, kasbiy sertifikatlar yoki hamjamiyat a'zoligi kabi o'tkazib bo'lmaydigan ma'lumotnomalarni ifodalash uchun ishlatilishi mumkin. Bu `transferFrom` funksiyasini olib tashlash yoki cheklash orqali amalga oshiriladi.

ERC-721 va NFT'larning Kelajagi

ERC-721 standarti o'zining samaradorligi, xavfsizligi va funksionalligini yaxshilashga qaratilgan doimiy tadqiqot va ishlanmalar bilan rivojlanishda davom etmoqda. Kelajakdagi ishlanmalar quyidagilarni o'z ichiga olishi mumkin:

Xulosa

ERC-721 smart-kontraktlari blokcheynda noyob raqamli va jismoniy aktivlarga egalikni ifodalash uchun kuchli vositadir. ERC-721 ning arxitekturasi, implementatsiya tafsilotlari, xavfsizlik masalalari va amaliy qo'llanilishini tushunib, ishlab chiquvchilar innovatsion va ta'sirchan NFT loyihalarini yaratishlari mumkin. NFT ekotizimi o'sishda va rivojlanishda davom etar ekan, ERC-721 standarti raqamli egalik kelajagini shakllantirishda muhim rol o'ynaydi.

Ushbu qo'llanma ERC-721 smart-kontraktlarini tushunish va implementatsiya qilish uchun mustahkam asos yaratadi. O'zingizning NFT loyihalaringizni ishlab chiqish va joylashtirishda har doim xavfsizlikka ustuvor ahamiyat bering va eng yaxshi amaliyotlarga rioya qiling. Omad!