Deutsch

Erkunden Sie die Feinheiten von ERC-721 Smart Contracts für NFTs. Erfahren Sie mehr über ihre Architektur, Implementierung, Sicherheitsaspekte und reale Anwendungen.

NFT Smart Contracts: Ein tiefer Einblick in die ERC-721-Implementierung

Nicht-fungible Token (NFTs) haben die Landschaft digitaler Vermögenswerte revolutioniert und ermöglichen die Abbildung einzigartiger Gegenstände auf der Blockchain. Das Herzstück der meisten NFTs ist der ERC-721-Standard, eine Reihe von Regeln, die festlegen, wie diese Token erstellt, verwaltet und übertragen werden. Dieser umfassende Leitfaden bietet eine tiefgehende Erkundung von ERC-721 Smart Contracts und behandelt deren Architektur, Implementierungsdetails, Sicherheitsaspekte und praktische Anwendungen.

Was ist ERC-721?

ERC-721 ist ein Standard zur Darstellung nicht-fungibler Token auf der Ethereum-Blockchain. Im Gegensatz zu ERC-20-Token, die fungibel sind (was bedeutet, dass jeder Token mit jedem anderen identisch ist), sind ERC-721-Token einzigartig. Jeder Token hat eine eindeutige ID, was ihn für die Darstellung des Eigentums an einzigartigen digitalen oder physischen Vermögenswerten geeignet macht.

Hauptmerkmale von ERC-721-Token:

Architektur von ERC-721 Smart Contracts

Ein ERC-721 Smart Contract ist ein Solidity-Programm, das den ERC-721-Standard implementiert. Er enthält typischerweise die folgenden Komponenten:

Kernfunktionen:

Metadaten-Erweiterung (Optional):

Aufzählungs-Erweiterung (Optional):

Implementierung eines ERC-721 Smart Contracts mit OpenZeppelin

OpenZeppelin bietet eine sichere und geprüfte Bibliothek von Smart Contracts, die die Entwicklung von ERC-721-Token vereinfacht. Die Verwendung der ERC721-Implementierung von OpenZeppelin reduziert das Risiko, Schwachstellen in Ihren Code einzuführen. Hier ist ein Beispiel, wie man einen ERC-721 Smart Contract mit OpenZeppelin implementiert:

Voraussetzungen:

Schritte:

  1. Initialisieren Sie ein Truffle- oder Hardhat-Projekt:
# Truffle
mkdir mein-nft-projekt
cd mein-nft-projekt
truffle init

# Hardhat
mkdir mein-nft-projekt
cd mein-nft-projekt
npx hardhat
  1. Installieren Sie die OpenZeppelin-Contracts:
npm install @openzeppelin/contracts
  1. Erstellen Sie einen ERC-721 Smart Contract: Erstellen Sie eine neue Solidity-Datei (z. B. `MyNFT.sol`) in Ihrem `contracts`-Verzeichnis.
// 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;
    }



    // Die folgenden Funktionen sind von Solidity geforderte Überschreibungen.

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

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Kompilieren Sie den Smart Contract: Verwenden Sie Truffle oder Hardhat, um Ihren Smart Contract zu kompilieren.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Erstellen Sie ein Deployment-Skript: Erstellen Sie eine neue JavaScript-Datei (z. B. `deploy.js`) in Ihrem `migrations`- oder `scripts`-Verzeichnis.
// Truffle-Migrationsbeispiel
const MyNFT = artifacts.require("MyNFT");

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

// Hardhat-Deployment-Skript-Beispiel
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. Stellen Sie den Smart Contract bereit: Stellen Sie Ihren Smart Contract auf einer lokalen Blockchain (z. B. Ganache) oder einem Testnetzwerk (z. B. Ropsten, Rinkeby) bereit.
# Truffle
truffle migrate

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

Denken Sie daran, `ipfs://YOUR_IPFS_CID/` durch Ihre tatsächliche IPFS-CID (Content Identifier) zu ersetzen. Diese Basis-URI verweist auf den Speicherort Ihrer NFT-Metadaten-JSON-Dateien.

Speichern von NFT-Metadaten auf IPFS

NFT-Metadaten werden typischerweise außerhalb der Kette (off-chain) gespeichert, um die Kosten für die Datenspeicherung auf der Blockchain zu senken. IPFS (InterPlanetary File System) ist ein dezentrales Speichernetzwerk, das häufig zur Speicherung von NFT-Metadaten verwendet wird. Jedes NFT hat eine `tokenURI`, die auf eine JSON-Datei auf IPFS verweist, die Metadaten über das NFT enthält, wie z. B. seinen Namen, seine Beschreibung, die Bild-URL und andere Attribute.

Beispiel für NFT-Metadaten (JSON):

{
  "name": "Mein tolles NFT",
  "description": "Dies ist ein einzigartiges NFT.",
  "image": "ipfs://YOUR_IPFS_CID/image.png",
  "attributes": [
    {
      "trait_type": "Hintergrund",
      "value": "Blau"
    },
    {
      "trait_type": "Charakter",
      "value": "Roboter"
    }
  ]
}

Ersetzen Sie `ipfs://YOUR_IPFS_CID/image.png` durch die tatsächliche IPFS-CID Ihres Bildes.

Schritte zum Hochladen von Metadaten auf IPFS:

  1. Wählen Sie einen IPFS-Client: Wählen Sie einen IPFS-Client wie IPFS Desktop, Pinata oder NFT.Storage.
  2. Laden Sie Ihre Metadaten hoch: Laden Sie Ihre NFT-Metadaten-JSON-Dateien und Bilder mit Ihrem gewählten Client auf IPFS hoch.
  3. Erhalten Sie die IPFS-CID: Nach dem Hochladen Ihrer Metadaten erhalten Sie eine IPFS-CID. Dies ist ein eindeutiger Bezeichner für Ihre Daten auf IPFS.
  4. Aktualisieren Sie den Smart Contract: Aktualisieren Sie die `tokenURI`-Funktion in Ihrem Smart Contract, sodass sie auf Ihre IPFS-CID verweist.

Sicherheitsaspekte für ERC-721 Smart Contracts

Sicherheit ist bei der Entwicklung von ERC-721 Smart Contracts von größter Bedeutung. Hier sind einige kritische Sicherheitsaspekte:

Reale Anwendungen von ERC-721-NFTs

ERC-721-NFTs werden in einer Vielzahl von Anwendungen eingesetzt, darunter:

Internationale Beispiele:

Fortgeschrittene ERC-721-Konzepte

ERC-721A

ERC-721A ist eine gas-effizientere Implementierung des ERC-721-Standards, die das Prägen mehrerer NFTs in einer einzigen Transaktion optimiert. Es reduziert die Gaskosten, indem die Speicherkosten auf mehrere Token verteilt werden. Dies kann für Projekte vorteilhaft sein, die das Prägen großer Mengen von NFTs beinhalten.

Lazy Minting

Lazy Minting ist eine Technik, bei der NFTs erst geprägt werden, wenn sie gekauft werden. Dies kann Gaskosten für Projekte sparen, die eine große Anzahl von NFTs haben, aber nicht erwarten, dass alle verkauft werden. Die NFT-Metadaten werden außerhalb der Kette gespeichert, bis das NFT gekauft wird. Zu diesem Zeitpunkt wird der Token geprägt und die Metadaten werden der Blockchain hinzugefügt.

Soulbound-Token

Soulbound-Token sind NFTs, die dauerhaft an eine bestimmte Adresse gebunden sind und nicht übertragen werden können. Diese Token können verwendet werden, um nicht übertragbare Berechtigungen wie Bildungsabschlüsse, berufliche Zertifizierungen oder die Mitgliedschaft in einer Gemeinschaft darzustellen. Dies wird durch das Entfernen oder Einschränken der `transferFrom`-Funktion ermöglicht.

Die Zukunft von ERC-721 und NFTs

Der ERC-721-Standard entwickelt sich ständig weiter, wobei laufende Forschung und Entwicklung sich auf die Verbesserung seiner Effizienz, Sicherheit und Funktionalität konzentrieren. Zukünftige Entwicklungen könnten umfassen:

Fazit

ERC-721 Smart Contracts sind ein mächtiges Werkzeug zur Darstellung des Eigentums an einzigartigen digitalen und physischen Vermögenswerten auf der Blockchain. Durch das Verständnis der Architektur, der Implementierungsdetails, der Sicherheitsaspekte und der praktischen Anwendungen von ERC-721 können Entwickler innovative und wirkungsvolle NFT-Projekte erstellen. Während das NFT-Ökosystem weiter wächst und sich entwickelt, wird der ERC-721-Standard eine entscheidende Rolle bei der Gestaltung der Zukunft des digitalen Eigentums spielen.

Dieser Leitfaden bietet eine solide Grundlage für das Verständnis und die Implementierung von ERC-721 Smart Contracts. Denken Sie daran, bei der Entwicklung und Bereitstellung Ihrer eigenen NFT-Projekte stets Sicherheit zu priorisieren und bewährte Verfahren zu befolgen. Viel Erfolg!

NFT Smart Contracts: Ein tiefer Einblick in die ERC-721-Implementierung | MLOG