Weiter zum Hauptinhalt
Change page

ERC-1155 Token-Standard

Letzte Änderung: @Coram_Deo(opens in a new tab), Invalid DateTime

Einführung

Eine Standardschnittstelle für Verträge, die mehrere Token-Typen verwalten. Ein einzelner bereitgestellter Vertrag kann eine beliebige Kombination aus fungiblen Token, nicht-fungiblen Token oder anderen Konfigurationen (z. B. halb-fungible Token) enthalten.

Was versteht man unter Multi-Token-Standard?

Die Idee ist einfach und zielt darauf ab, eine Smart-Contract-Schnittstelle zu schaffen, die eine beliebige Anzahl von fungiblen und nicht-fungiblen Token-Typen darstellen und kontrollieren kann. Auf diese Weise kann der ERC-1155-Token die gleichen Funktionen erfüllen wie ein ERC-20- und ERC-721-Token, und sogar beide gleichzeitig. Und das Beste ist, dass die Funktionalität beider Standards verbessert wurde und somit effizienter ist, sowie offensichtliche Implementierungsfehler bei den Standards ERC-20 und ERC-721 korrigiert werden.

Der ERC-1155-Token wird in EIP-1155(opens in a new tab) ausführlich beschrieben.

Voraussetzungen

Um diese Seite besser zu verstehen, empfehlen wir Ihnen, zuerst etwas über Token-Standards, ERC-20 und ERC-721 zu lesen.

ERC-1155 Funktionen und Merkmale:

Batch-Übertragungen

Die Batch-Übertragung funktioniert sehr ähnlich wie die regulären ERC-20-Übertragungen. Schaue Sie sich die reguläre ERC-20 Übertragung-von-Funktion an:

1// ERC-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// ERC-1155
5function safeBatchTransferFrom(
6 address _from,
7 address _to,
8 uint256[] calldata _ids,
9 uint256[] calldata _values,
10 bytes calldata _data
11) external;
Alles anzeigen
📋 Kopieren

Der einzige Unterschied bei ERC-1155 besteht darin, dass wir die Werte als Array übergeben und auch ein Array mit Id's übergeben. Wenn beispielsweise ids=[3, 6, 13] und values=[100, 200, 5] gegeben sind, werden die resultierenden Übertragungen wie folgt sein:

  1. Übertragung von 100 Token mit Id 3 von _from nach _to.
  2. Übertragung von 200 Token mit Id 6 von _from nach _to.
  3. Übertragung von 5 Token mit Id 13 von _from nach _to.

In ERC-1155 haben wir nur Übertragung von, keine Übertragung. Um sie wie eine normale Übertragung zu benutzen, setzen Sie einfach die Absenderadresse auf die Adresse, welche die Funktion aufruft.

Batch-Balance

Der entsprechende ERC-20 Balance-von-Schritt hat ebenfalls eine Partnerfunktion mit Batch-Unterstützung. Zur Erinnerung: Dies ist die ERC-20-Version:

1// ERC-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ERC-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) external view returns (uint256[] memory);
📋 Kopieren

Bei der Abfrage des Saldos ist es sogar noch einfacher, denn wir können mehrere Salden in einem einzigen Schritt abrufen. Wir übergeben das Array der Besitzer, gefolgt von dem Array der Token-Ids.

Zum Beispiel wird bei _ids=[3, 6, 13] und _owners=[0xbeef..., 0x1337..., 0x1111...], der Rückgabewert sein

1[
2 balanceOf(0xbeef...),
3 balanceOf(0x1337...),
4 balanceOf(0x1111...)
5]
📋 Kopieren

Batch-Genehmigung

1// ERC-1155
2function setApprovalForAll(
3 address _operator,
4 bool _approved
5) external;
6
7function isApprovedForAll(
8 address _owner,
9 address _operator
10) external view returns (bool);
Alles anzeigen
📋 Kopieren

Die Genehmigungen unterscheiden sich geringfügig von denen des ERC-20. Anstatt bestimmte Beträge zu genehmigen, setzen Sie einen Operator über setApprovalForAll auf genehmigt oder nicht genehmigt.

Der aktuelle Status kann über isApprovedForAll ausgelesen werden. Wie Sie sehen, geht es um alles oder nichts. Sie können nicht festlegen, wie viele Token genehmigt werden und auch nicht, welche Token-Klasse.

Dies wurde absichtlich so einfach wie möglich gestaltet. Sie können alles nur für eine Adresse genehmigen.

Haken erhalten

1function onERC1155BatchReceived(
2 address _operator,
3 address _from,
4 uint256[] calldata _ids,
5 uint256[] calldata _values,
6 bytes calldata _data
7) external returns(bytes4);
📋 Kopieren

Angesichts der EIP-165(opens in a new tab)-Unterstützung unterstützt ERC-1155 nur Haken erhalten für Smart Contracts. Die Haken-Funktion muss einen magischen vordefinierten Bytes4-Wert zurückgeben, der wie folgt angegeben wird:

1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
📋 Kopieren

Wenn der empfangende Vertrag diesen Wert zurückgibt, wird davon ausgegangen, dass der Vertrag die Übertragung akzeptiert und weiß, wie er mit den ERC-1155-Token umgehen soll. Großartig, keine feststeckenden Token mehr in einem Vertrag!

NFT-Unterstützung

Wenn es nur eine Angebotsmenge gibt, ist der Token im Wesentlichen ein nicht-fungibler Token (NFT). Und wie bei ERC-721 üblich, können Sie eine Metadaten-URL definieren. Die URL kann von Clients gelesen und geändert werden, siehe hier(opens in a new tab).

Regel zur sicheren Übertragung

In den vorangegangenen Erläuterungen haben wir bereits einige Regeln für die sichere Übertragung angesprochen. Aber schauen wir uns die wichtigsten Regeln an:

  1. Dem Abfrager muss die Genehmigung erteilt werden, die Token für die from-Adresse auszugeben, oder der Abfrager muss gleich from sein.
  2. Der Übertragungsruf muss zurückgehen, wenn
    1. _to Adresse ist 0.
    2. die Länge von _ids entspricht nicht der Länge von _Values.
    3. irgendein Guthaben des/der Token-Inhaber(s) in _ids ist niedriger als die entsprechenden Beträge in _Values, die an den Empfänger gesendet werden.
    4. Ein anderer Fehler tritt auf.

Hinweis: Alle Batch-Funktionen einschließlich des Hakens gibt es auch als Versionen ohne Batch. Dies geschieht aus Gründen der Gaseffizienz, da die Übertragung nur eines Vermögenswerts wahrscheinlich immer noch der am häufigsten genutzte Weg sein wird. Wir haben sie der Einfachheit halber in den Erläuterungen weggelassen, einschließlich der Regeln für die sichere Übertragung. Die Namen sind identisch, Sie müssen nur das „Batch" entfernen.

Weiterführende Informationen

War dieser Artikel hilfreich?