Dieser Artikel dient nur der technischen Weitergabe und stellt keine Anlageberatung dar.
Wird BTC auch einen eigenen Smart Contract haben?
Im jüngsten Bitcoin-Ökosystem startete Fractal BTC im September schließlich das Mainnet, nachdem es mehrere Testnetze durchlaufen hatte. Ein Hauptmerkmal von Fractal ist die Möglichkeit, „intelligente Verträge“ zu haben, und fast zeitgleich mit dem Start des Mainnets wurde ein neues Token-Protokoll CAT20 eingeführt. Welche technische Raffinesse hat CAT20? Was können wir lernen?
Fractal Bitcoin
Bevor wir CAT20 verstehen, müssen wir kurz verstehen, dass ihre Beziehung genau wie bei ERC20 und ETH ist. Das CAT20-Protokoll wird auf Fractal Bitcoin eingesetzt.
Fractal Bitcoin, auch bekannt als Fractal Bitcoin, ist ein „Second-Layer“-Netzwerk, das vollständig mit BTC kompatibel ist. Im Vergleich zu BTC ist die Blockbestätigungszeit schneller und dauert nur 1 Minute. Sein Grundprinzip besteht einfach darin, mehrere Kopien des BTC-Netzwerks zu erstellen. Je mehr Knoten Transaktionen verarbeiten können, desto schneller wird es sein. Allerdings sind die spezifischen Details, etwa wie verschiedene Ketten kommunizieren, noch nicht klar und es gibt keine offiziellen entsprechenden technischen Dokumente als Referenz.
Wenn nur eine Kettentransaktion der zweiten Ebene schneller ist, scheint es keinen Grund zur Aufregung zu geben. Allerdings hat die Aktivierung von OP_CAT in Fractal, die von BTC vor langer Zeit aus Sicherheitsgründen aufgegeben wurde, die Fähigkeiten von Fractal Bitcoin auf ein höheres Niveau gebracht. Einige Leute sagen, dass OP_CAT BTC dabei ermöglichen kann, über intelligente Verträge zu verfügen Übrigens gibt es Raum für Fantasie.
Nun hat jemand ein ERC20-ähnliches Protokoll auf Fractal Bitcoin implementiert.
Warum OP_CAT aufgegeben wurde und warum es für Fractal Bitcoin verwendet werden kann, können wir später besprechen. Hier konzentrieren wir uns auf CAT20.
CAT-Protokoll
Den folgenden Inhalt finden Sie im Whitepaper: Einführung | CAT-Protokoll (https://catprotocol.org/)
Und Github-Repository:
GitHub – CATProtocol/cat-token-box: Ein Monorepo für Pakete, die das CAT-Protokoll implementieren (https://github.com/CATProtocol/cat-token-box)
Mit der zugrunde liegenden OP_CAT-Unterstützung wird bald ein entsprechendes Protokoll, CAT Protocol, verfügbar sein. Derzeit ist das CAT20-Protokoll ein Protokoll, das tatsächlich ausgeführt wird, und ein entsprechendes Panel wurde auf Unisat hinzugefügt: https://explorer.unisat.io/fractal-mainnet/cat20.
Jeder sollte reagieren können, wenn er den Namen CAT20 sieht. Er sollte eher ERC20 ähneln. Im Vergleich zum ausgereiften ERC20-Protokoll ist es für jeden sehr praktisch, einen Token bereitzustellen. Wie implementiert CAT20 einen ähnlichen Lebenszyklus wie ERC20?
Einsetzen
Vor der Bereitstellung müssen Benutzer ihre Wallet-Adresse und grundlegende Informationen zum Token angeben. Die grundlegenden Informationen zum Token ähneln denen von ERC20:
CAT20 kann Pre-Mining- und Mengenlimits pro Mint festlegen. Natürlich kann ERC20 diese Fähigkeiten auch durch Vertragsfähigkeiten erreichen.
Während der Bereitstellungsphase werden zwei Transaktionen initiiert, die als zwei Phasen betrachtet werden können: „Commit“ und „Reveal“. Gemäß dem offiziellen Diagramm sind die Bereitstellungsphasen wie folgt:
In der „Commit“-Phase werden die grundlegenden Informationen des Tokens in das Ausgabeskript der Transaktion geschrieben, wie z. B. der Name, das Symbol usw. des Tokens. Die Hash-ID der in der „Commit“-Phase initiierten Transaktion wird als Symbol des Tokens verwendet, um andere Token zu unterscheiden.
Sie können sehen, dass die Utxo dieser Transaktion „bc1pucq...ashx“ dem Commit entspricht. Dann gibt es zwei verbleibende Transaktionen, die auf „bc1pszp...rehc4“ verweisen. Die erste wird zur Zahlung der Gasgebühr für die folgende „Enthüllungs“-Phase verwendet, die andere ist das Wechselgeld.
In der „Reveal“-Phase können Sie sehen, dass es zwei utxo-Eingaben gibt, die den ersten beiden Ausgaben der vorherigen Commit-Phase entsprechen. Diese Transaktion gibt zunächst einen OP_RETURN aus, in dem der Hash des Ausgangszustands von CAT20 gespeichert wird. Anschließend wird ein Minter ausgegeben, der im nachfolgenden Mint-Prozess eine wichtige Rolle spielt und zur Aufrechterhaltung der Zustandsänderungen des Mint-Prozesses dient.
Rückblickend auf den gesamten Bereitstellungsprozess folgen „Commit“ und „Reveal“ den beiden Schritten „Übermittlung“ und „Reveal“, die häufig in der Blockchain verwendet werden. Es handelt sich um eine relativ häufige Methode zum Bereitstellen einiger Projektdaten. Etappen werden bekannt gegeben.
Als
Wenn wir uns Mint Token zum ersten Mal ansehen, sieht die Transaktion so aus.
Wie Sie im Bild oben sehen können, weist der Prozess von Mint die folgenden Merkmale auf.
Die Eingabe von Mint ist ein Minter, der zunächst während der Bereitstellung generiert wird.
Jedes Mal hat Mint nur einen Minter als Eingabe und eine beliebige Anzahl von Mintern als Ausgabe (etwas problematisch).
Jede Münzstätte hat nur einen Token (etwas problematisch)
Die Reihenfolge der Ausgabe ist erforderlich, auf Minter muss Token folgen
Wenn wir den Mint-Prozess kennen, können wir tatsächlich einige besondere Situationen entdecken, die den gesamten Mint-Prozess interessant machen.
Beispielsweise kann Minter als Ausgabe der Mint-Transaktion 1, ein Vielfaches oder sogar 0 sein. Wenn Mint jedes Mal auf 1 gesetzt ist, bleibt die Anzahl der Minter, die im gesamten Netzwerk verwendet werden können, unverändert (1), was dazu führt, dass Mint überfüllt ist und jeder sich diesen Minter schnappen muss, um dies zu vermeiden In diesem Fall müssen Sie die Anzahl der jedes Mal ausgegebenen Minter auf mehr als 1 einstellen, damit nach dem Mint immer mehr Minter verwendet werden können.
Allerdings bedeutet jede zusätzliche Ausgabe von Minter, dass Sie mehr Utxo bezahlen müssen. Aus wirtschaftlichen Gründen werden mehr Menschen gerne Minter auf 0 setzen, was unweigerlich zu einer Minter-Deflation führt, die einige Leute dazu zwingt, eine Spende zu leisten und zu bezahlen extra Minter freiwillig.
In der V2-Version werden standardmäßig zwei Minter generiert, und der Status der beiden Minter wird so ähnlich wie möglich sein.
Transaktionsstrukturierung
Einige Freunde haben möglicherweise ein Problem entdeckt: Warum kann Minters Utxo zum Erstellen von Transaktionen verwendet werden? Um dieses Problem zu verstehen, müssen Sie den Quellcode des „Vertrags“ analysieren.
1. utxo offenbaren
Zuerst analysieren wir die Transaktion während des Offenlegungsprozesses und stellen fest, dass sie den Ausgabe-Commit der vorherigen Transaktion als Eingabe verwendet. Warum können wir ein utxo, das nicht unsere Adresse ist, nehmen und die Eingabe der Transaktion erstellen?
Nach dem gesunden Menschenverstand entspricht ein privater Schlüssel einem öffentlichen Schlüssel, und der öffentliche Schlüssel leitet die Adresse ab. Bei der Überprüfung, ob eine Eingabe-UTXO gültig ist, wird normalerweise durch einen Vergleich festgestellt, ob die Signatur nach der Entschlüsselung mit dem öffentlichen Schlüssel mit der Originaltransaktion übereinstimmt. Dieser Teil der Logik ist im Bitcoin-Skript geschrieben. So können wir die Logik des Skripts geschickt umschreiben. Die im Skript geschriebenen öffentlichen und privaten Schlüsselpaare gehören zu unserer eigenen Adresse, sodass wir utxo von zwei verschiedenen Adressen steuern können.
Wenn wir uns den Quellcode ansehen, können wir sehen, was passiert ist:
Hier gibt es ein weiteres Problem: Ein privater Schlüssel entspricht einem öffentlichen Schlüssel. Warum unterscheidet sich die generierte Festschreibungsadresse von unserer Adresse? Hier können Sie es im Quellcode sehen
Mit anderen Worten: Unser privater Schlüssel passt den öffentlichen Schlüssel entsprechend einem ISSUE_PUBKEY an, der auch ein Merkmal von P2TR-Adressen ist.
2、minter uxo
Während des Offenlegungsprozesses verwenden wir unterschiedliche utxo als Eingabe, aber tatsächlich ist der Verschlüsselungsschlüssel derselbe, nämlich der private Schlüssel des Bereitstellers. Aber in der Minter-Phase kann jeder diese utxo als Eingabe verwenden, wie wird das gemacht?
Ich vermute, dieser Teil ist die zuvor erwähnte Fähigkeit von OP_CAT, also die Fähigkeit von Smart Contracts. Jeder Minter ist ein Smart Contract. Der Quellcode dieses Teils wurde jedoch derzeit nicht veröffentlicht und die konkrete Implementierung ist uns noch nicht bekannt.
Transaktionsstatus (V2)
Im Minter bleibt auch der Zustand erhalten. Dieser Status existiert an zwei Stellen: Eine befindet sich im OP_RETURN der Transaktionsausgabe und die andere wird im Smart-Vertrag gespeichert, bei dem es sich um den oben erwähnten Minter und Token handelt.
Was in OP_RETURN gespeichert wird, ist der Hash des aktuellen Transaktionsausgabestatus, und die verbleibenden Mint-Zeiten des Tokens werden im Vertrag gespeichert. Nach jedem Mint entspricht die Anzahl der Mints des neu generierten Minters der verbleibenden Anzahl an Mints dividiert durch zwei. Mit einem Diagramm dargestellt:
Am Ende des Spiels beträgt die verbleibende Anzahl aller Minter 0.
Zurück zum ursprünglichen Bild: Minter ist nicht nur ein Smart Contract, sondern auch der generierte Token ist ein Smart Contract, nämlich CAT20. CAT20 hat zwei Grundzustände: Menge und Adresse des Token-Eigentümers. Sie können sehen, dass sich Ihr CAT20 im Gegensatz zum vorherigen BRC20 oder der vorherigen Inschrift nicht auf dem UTXO Ihrer Adresse befindet.
Überweisen
Bei der Übertragung muss die Anzahl der Eingabe- und Ausgabe-Tokens in der Transaktion konsistent sein. Natürlich kann es in derselben Transaktion mehrere verschiedene Token geben, solange die Eingabe- und Ausgabenummern verschiedener Token konsistent sind.
Brennen
Wenn Sie den Token brennen möchten, müssen Sie ihn nur an eine normale Adresse übertragen.
Zusammenfassen
Es ist ersichtlich, dass alle Vorgänge vom Benutzer selbst erstellt werden, was sehr flexibel ist und daher im Vertragsteil viel Überprüfungslogik erforderlich ist. Einige der bisher aufgedeckten Schwachstellen sind auch auf Nachlässigkeiten in der Verifizierungslogik zurückzuführen.
Ein solches Design kann einige Vorteile haben:
Wenn Sie den Haltestatus aller Token ermitteln möchten, müssen Sie nur die Utxo des Tokens überprüfen und müssen nicht weiter nachschlagen.
Wenn Sie die aktuelle Situation von Mint überprüfen möchten, können Sie in OP_RETURN nach Transaktionen mit cat suchen.
ZAN ist hier, um Wasser ohne Schwelle zu bekommen!
Tipp: Sie können alle 24 Stunden einen kostenlosen Testnet-Token von 0,01 ETH erhalten, um Web3-Projekte im Ethereum-Ökosystem zu erleben und zu testen. Klicken Sie, um ihn jetzt zu erhalten: https://zan.top/faucet?chInfo=ch_WZ
Weitere öffentliche Ketten werden bald unterstützt ~
Dieser Artikel wurde von Yeezo (X-Konto @GaoYeezo75065) vom ZAN-Team (X-Konto @zan_team) verfasst.