Suomi

Tutustu NFT:iden ERC-721-älysopimusten monimutkaisuuteen. Opi niiden arkkitehtuurista, toteutuksesta, tietoturvasta ja käytännön sovelluksista.

NFT-älysopimukset: Syväsukellus ERC-721:n toteutukseen

Ei-vaihdettavat tokenit (NFT:t) ovat mullistaneet digitaalisen omaisuuden kentän mahdollistamalla ainutlaatuisten kohteiden esittämisen lohkoketjussa. Useimpien NFT:iden ytimessä on ERC-721-standardi, sääntöjoukko, joka ohjaa näiden tokenien luomista, hallintaa ja siirtämistä. Tämä kattava opas tarjoaa perusteellisen katsauksen ERC-721-älysopimuksiin, kattaen niiden arkkitehtuurin, toteutuksen yksityiskohdat, tietoturvanäkökohdat ja käytännön sovellukset.

Mikä on ERC-721?

ERC-721 on standardi ei-vaihdettavien tokenien esittämiseen Ethereum-lohkoketjussa. Toisin kuin ERC-20-tokenit, jotka ovat vaihdettavissa (eli jokainen token on identtinen jokaisen toisen tokenin kanssa), ERC-721-tokenit ovat ainutlaatuisia. Jokaisella tokenilla on erillinen ID, mikä tekee siitä sopivan ainutlaatuisten digitaalisten tai fyysisten omaisuuserien omistajuuden edustamiseen.

ERC-721-tokenien keskeiset ominaisuudet:

ERC-721-älysopimuksen arkkitehtuuri

ERC-721-älysopimus on Solidity-ohjelma, joka toteuttaa ERC-721-standardin. Se sisältää tyypillisesti seuraavat komponentit:

Ydintoiminnot:

Metadatan laajennus (valinnainen):

Luettelointilaajennus (valinnainen):

ERC-721-älysopimuksen toteuttaminen OpenZeppelinillä

OpenZeppelin tarjoaa turvallisen ja auditoidun älysopimuskirjaston, joka yksinkertaistaa ERC-721-tokenien kehittämistä. OpenZeppelinin ERC721-toteutuksen käyttäminen vähentää riskiä haavoittuvuuksien lisäämisestä koodiisi. Tässä on esimerkki siitä, miten ERC-721-älysopimus toteutetaan OpenZeppelinin avulla:

Edellytykset:

Vaiheet:

  1. Alusta Truffle- tai Hardhat-projekti:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. Asenna OpenZeppelin Contracts:
npm install @openzeppelin/contracts
  1. Luo ERC-721-älysopimus: Luo uusi Solidity-tiedosto (esim. `MyNFT.sol`) `contracts`-hakemistoosi.
// 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;
    }



    // Seuraavat funktiot ovat Solidityn vaatimia korvauksia.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Käännä älysopimus: Käytä Trufflea tai Hardhatia älysopimuksesi kääntämiseen.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Luo käyttöönotto-skripti: Luo uusi JavaScript-tiedosto (esim. `deploy.js`) `migrations`- tai `scripts`-hakemistoosi.
// Truffle-migraatioesimerkki
const MyNFT = artifacts.require("MyNFT");

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

// Hardhat-käyttöönottoskriptin esimerkki
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. Ota älysopimus käyttöön: Ota älysopimuksesi käyttöön paikallisessa lohkoketjussa (esim. Ganache) tai testiverkossa (esim. Ropsten, Rinkeby).
# Truffle
truffle migrate

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

Muista korvata `ipfs://YOUR_IPFS_CID/` todellisella IPFS CID -tunnisteellasi (Content Identifier). Tämä perus-URI osoittaa sijaintiin, johon NFT-metadatan JSON-tiedostot tallennetaan.

NFT-metadatan tallentaminen IPFSiin

NFT-metadata tallennetaan tyypillisesti lohkoketjun ulkopuolelle (off-chain) vähentääkseen tietojen tallentamisen kustannuksia lohkoketjuun. IPFS (InterPlanetary File System) on hajautettu tallennusverkko, jota käytetään yleisesti NFT-metadatan tallentamiseen. Jokaisella NFT:llä on `tokenURI`, joka osoittaa IPFS:ssä olevaan JSON-tiedostoon, joka sisältää metadataa NFT:stä, kuten sen nimen, kuvauksen, kuvan URL-osoitteen ja muita ominaisuuksia.

Esimerkki NFT-metadatasta (JSON):

{
  "name": "Minun mahtava NFT",
  "description": "Tämä on ainutlaatuinen NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Tausta",
      "value": "Sininen"
    },
    {
      "trait_type": "Hahmo",
      "value": "Robotti"
    }
  ]
}

Korvaa `ipfs://YOUR_IPFS_CID/image.png` kuvasi todellisella IPFS CID -tunnisteella.

Vaiheet metadatan lataamiseksi IPFSiin:

  1. Valitse IPFS-asiakasohjelma: Valitse IPFS-asiakasohjelma, kuten IPFS Desktop, Pinata tai NFT.Storage.
  2. Lataa metadatasi: Lataa NFT-metadatan JSON-tiedostot ja kuvat IPFSiin valitsemallasi asiakasohjelmalla.
  3. Hanki IPFS CID: Metadatan lataamisen jälkeen saat IPFS CID -tunnisteen. Tämä on ainutlaatuinen tunniste tiedoillesi IPFS-verkossa.
  4. Päivitä älysopimus: Päivitä älysopimuksesi `tokenURI`-funktio osoittamaan IPFS CID -tunnisteeseesi.

ERC-721-älysopimusten tietoturvanäkökohdat

Tietoturva on ensisijaisen tärkeää kehitettäessä ERC-721-älysopimuksia. Tässä on joitakin kriittisiä tietoturvanäkökohtia:

ERC-721 NFT:iden käytännön sovellukset

ERC-721 NFT:itä käytetään monenlaisissa sovelluksissa, mukaan lukien:

Kansainvälisiä esimerkkejä:

Edistyneet ERC-721-käsitteet

ERC-721A

ERC-721A on kaasutehokkaampi toteutus ERC-721-standardista, joka optimoi useiden NFT:iden luomisen (minting) yhdessä transaktiossa. Se vähentää kaasun kustannuksia jakamalla tallennuskustannukset useiden tokenien kesken. Tämä voi olla hyödyllistä projekteissa, jotka sisältävät suurten NFT-määrien luomista.

Lazy Minting (viivästetty luonti)

Lazy minting on tekniikka, jossa NFT:t luodaan (mintataan) vasta, kun ne ostetaan. Tämä voi säästää kaasun kustannuksia projekteissa, joissa on suuri määrä NFT:itä, mutta joiden kaikkia ei odoteta myytävän. NFT-metadata tallennetaan lohkoketjun ulkopuolelle, kunnes NFT ostetaan, jolloin token luodaan ja metadata lisätään lohkoketjuun.

Soulbound Tokens (sieluun sidotut tokenit)

Sieluun sidotut tokenit ovat NFT:itä, jotka on sidottu pysyvästi tiettyyn osoitteeseen eikä niitä voi siirtää. Näitä tokeneita voidaan käyttää edustamaan ei-siirrettäviä valtakirjoja, kuten tutkintotodistuksia, ammatillisia sertifikaatteja tai yhteisön jäsenyyttä. Tämä mahdollistetaan poistamalla tai rajoittamalla `transferFrom`-funktiota.

ERC-721:n ja NFT:iden tulevaisuus

ERC-721-standardi kehittyy jatkuvasti, ja meneillään oleva tutkimus ja kehitys keskittyvät sen tehokkuuden, turvallisuuden ja toiminnallisuuden parantamiseen. Tulevaisuuden kehitys voi sisältää:

Yhteenveto

ERC-721-älysopimukset ovat tehokas työkalu ainutlaatuisten digitaalisten ja fyysisten omaisuuserien omistajuuden edustamiseen lohkoketjussa. Ymmärtämällä ERC-721:n arkkitehtuurin, toteutuksen yksityiskohdat, tietoturvanäkökohdat ja käytännön sovellukset kehittäjät voivat rakentaa innovatiivisia ja vaikuttavia NFT-projekteja. Kun NFT-ekosysteemi jatkaa kasvuaan ja kehitystään, ERC-721-standardilla on kriittinen rooli digitaalisen omistajuuden tulevaisuuden muovaamisessa.

Tämä opas tarjoaa vankan perustan ERC-721-älysopimusten ymmärtämiseen ja toteuttamiseen. Muista aina asettaa tietoturva etusijalle ja noudattaa parhaita käytäntöjä, kun kehität ja otat käyttöön omia NFT-projektejasi. Onnea matkaan!