1. Bitcoin-Hintergrund

Bitcoin verwendet ein bargeldähnliches Transaktionsmodell (Bargeldsystem) und seine Zahlungsmethode basiert auf einem Modell namens UTXO, das sich vom traditionellen, auf dem Kontostand basierenden Modell unterscheidet. Beispiel: Wenn A im Kontobuchhaltungsmodellprozess der Bank 100 Yuan an B überweist, zeichnet die Bank drei Schritte auf, die einen Transaktionsprozess darstellen. Der erste Schritt besteht darin, 100 Yuan vom Konto von A abzubuchen. Die Datensatz-ID dieses Schritts ist tid1. Der zweite Schritt besteht darin, 100 Yuan auf das Konto von B einzuzahlen. Die Datensatz-ID dieses Schritts ist tid2. Der dritte Schritt besteht darin, einen Übertragungsdatensatz aufzuzeichnen, der tid1 und tid2 verknüpft und angibt, dass Konto A um 100 Yuan abnimmt und Konto B um 100 Yuan zunimmt. Auf diese Weise wird die Übertragungsbeziehung zwischen A und B erfasst und kann in Zukunft abgefragt und nachverfolgt werden. Nun erklären wir die Zahlungsmethode von Bitcoin anhand der Einführung von UTXO und des Zahlungsmodells.

UTXO

In der Bitcoin-Blockchain werden alle Guthaben in einer Liste namens „Unspent Transaction Output“ (UTXO) gespeichert. Jeder UTXO enthält eine bestimmte Anzahl an Bitcoins sowie Informationen über die Besitzer dieser Bitcoins und gibt an, ob diese verfügbar sind. Stellen Sie sich das wie einen Scheck vor, auf dem der Name des Inhabers steht. Solange der Inhaber ihn unterschreibt, können die Nutzungsrechte auf eine andere Person übertragen werden. Für eine bestimmte Adresse ist die Summe aller UTXO-Beträge der Saldo des Wallets der Adresse. Indem wir alle UTXOs durchlaufen, können wir den aktuellen Saldo jeder Adresse ermitteln. Addieren Sie die Gesamtmenge aller UTXOs, um alle derzeit im Umlauf befindlichen Bitcoins zu erhalten.

In der Bitcoin-Transaktionsstruktur umfasst jede Transaktion mehrere Eingaben und Ausgaben, wobei jede Eingabe eine Referenz auf ein vorhandenes UTXO ist und jede Ausgabe eine neue Geldempfangsadresse und den entsprechenden Betrag angibt. Sobald eine Transaktion initiiert wird, wird der UTXO, auf den sein Eingabeteil verweist, vorübergehend gesperrt, um eine Wiederverwendung zu verhindern, bis die Transaktion abgeschlossen ist. Erst wenn die Transaktion von Minern erfolgreich in einen Block verpackt und vom Netzwerk bestätigt wird, ändert sich der zugehörige UTXO-Status. Insbesondere werden die als Eingaben für die Transaktion verwendeten UTXOs aus der UTXO-Liste entfernt, was anzeigt, dass sie verbraucht wurden, während die Ausgaben der Transaktion neue UTXOs generieren und der UTXO-Liste hinzugefügt werden. Es versteht sich, dass nach Verwendung des alten Barschecks dieser ungültig wird und ein neuer Barscheck erstellt wird, dessen Eigentum dem neuen Inhaber gehört.

Es ist hervorzuheben, dass jedes UTXO nur einmal in einer Transaktion verwendet werden kann. Sobald es als Eingabe verwendet wird, wird es dauerhaft aus der UTXO-Liste entfernt. Gleichzeitig wird die neu generierte Ausgabe als neues UTXO zur Liste hinzugefügt. Die Liste der UTXOs ändert sich ständig und wird bei der Erstellung jedes neuen Blocks entsprechend aktualisiert. Und durch die Analyse des Transaktionsverlaufs in der Blockchain sind wir in der Lage, den Status der UTXO-Liste zu jedem Zeitpunkt zu rekonstruieren.

Darüber hinaus übersteigt der Gesamteingabebetrag einer Transaktion in der Regel geringfügig den Gesamtausgabebetrag. Diese Differenz, Transaktionsgebühr oder Netzwerkgebühr genannt, dient als Anreiz für die Miner, die für die Verpackung von Transaktionen in Blöcke verantwortlich sind. Die Höhe der Netzwerkgebühr ist direkt proportional zur Komplexität der Transaktion, sodass eine Transaktion mit mehr Ein- und Ausgängen im Allgemeinen eine höhere Netzwerkgebühr erfordert.

Um nun die Transaktionsstruktur von Bitcoin besser zu verstehen, führen wir eine eingehende Analyse anhand eines konkreten Beispiels durch. Die Transaktionsstruktur von Bitcoin ist wie folgt, wobei die beiden Variablen vin und vout die „Eingabe“ bzw. „Ausgabe“ der Bitcoin-Transaktion darstellen. Bitcoin-Transaktionen erfassen keine kontoförmigen Datenveränderungen wie beim traditionellen Kontostandmodell, sondern werden durch Ein- und Ausgänge dargestellt.

const std::vector<CTxIn> vin;const std::vector<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;

Wir können zufällig einen Transaktionsdatensatz auf Blockchain.com zur Analyse auswählen. Die folgende Abbildung zeigt die Transaktion mit der Hash-ID 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Es enthält einen Eingang und zwei Ausgänge.

Mithilfe der Bitcoin-CLI-Befehle getrawtransaction und decoderawtransaction können wir die zugrunde liegende Struktur der obigen Transaktion anzeigen:

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142 d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46 f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sequence": 4294967295 }],"vout": [{"value": 0.01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"value": 0.08450000,"scriptP ubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

Im Bitcoin-Netzwerk enthält die Transaktionsausgabe zwei wichtige Informationen: die Adresse (Hash des öffentlichen Schlüssels) und den Betrag (in Bitcoins). Wenn die Ausgabe einer Transaktion nicht für die Eingabe anderer Transaktionen verwendet wird, wird die Transaktionsausgabe als nicht ausgegebene Transaktionsausgabe (UTXO) bezeichnet. Wer den privaten Schlüssel besitzt, der dem öffentlichen Schlüssel in UTXO entspricht, hat das Recht, dieses UTXO zu verwenden (d. h. auszugeben).

Schauen wir uns die Informationen in „vin“ im obigen Code an. Sie zeigen an, dass die von dieser Transaktion ausgegebenen UTXO von der 0. Ausgabe stammen (die Ausgabe einer Transaktion kann mehrere haben, der Index beginnt bei 0), und wir können sie finden Der Betrag dieses UTXO stammt aus historischen Transaktionen (z. B. 0,1), sodass der Benutzer in dieser Transaktion 0,1 BTC ausgegeben hat und der Wert 0,1 nicht explizit in die Transaktion geschrieben werden muss, sondern durch die Suche werden UTXO-Informationen abgerufen. Der „vout“ dieser Transaktion hat zwei Ausgaben. Diese beiden Ausgaben sind zwei neue UTXOs, entsprechend dem neuen Kontostand und Inhaber, bis eine andere Transaktion sie als Eingabe verbraucht.

Zahlungsmodell

Um das Zahlungsmodell des Bitcoin-Netzwerks besser zu verstehen, stellen wir anhand eines Beispiels den Zahlungsvorgang vor, bei dem A B einen Betrag von n Bitcoins zahlt. Die folgende Abbildung zeigt den Vorgang, bei dem Benutzer A 3 Bitcoins an Benutzer B sendet.

  1. Für Benutzer A muss zunächst die Menge aller UTXOs ermittelt werden, die er besitzt, also alle Bitcoins, die Benutzer A kontrollieren kann;

  2. A wählt einen oder mehrere UTXOs aus diesem Satz als Eingabe der Transaktion aus. Die Summe der Beträge dieser Eingaben beträgt m (2+0,8+0,5=3,3 BTC), was größer ist als der zu zahlende Betrag n (3 BTC). );

  3. Benutzer A legt zwei Ausgänge für die Transaktion fest, ein Ausgang wird an die Adresse von B gezahlt, der Betrag beträgt n (3 BTC), und der andere Ausgang wird an die eigene Wechseladresse von A gezahlt, der Betrag beträgt m-n-Gebühr (3,3-3-0,001). = 0,299 BTC). Die Brieftasche eines Benutzers besteht normalerweise aus mehreren Adressen. Im Allgemeinen wird jede Adresse nur einmal verwendet und das Wechselgeld wird standardmäßig an eine neue Adresse zurückgegeben.

  4. Nachdem der Miner die Transaktion verpackt und zur Bestätigung in die Kette hochgeladen hat, kann B die Transaktionsinformationen empfangen. Da die Blockgröße eine Obergrenze hat (ca. 1 MB), priorisieren Miner Transaktionen mit hohen Transaktionsraten (fee_rate=fee/size), um die höchsten Gebührenerträge zu erzielen. Wir können die Situation der Echtzeit-Mining-Transaktionsgebühren in Mempool sehen. Wenn wir während des Übertragungsprozesses die schnellste Bestätigung wünschen, können wir „Hohe Priorität“ wählen oder eine geeignete Transaktionsrate anpassen;

2. Cong-Nummerierung und -Verfolgung

Die Gesamtzahl der Bitcoins beträgt 21 Millionen und jeder Bitcoin enthält 10^8 Satoshi (Satoshi, Sat). Daher gibt es insgesamt 21 Millionen*10^8 Satoshis im Bitcoin-Netzwerk. Das Ordinals-Protokoll unterscheidet diese Satoshis und gibt jedem Satoshi eine eindeutige Nummer. In diesem Abschnitt wird erläutert, wie dieses Protokoll jeden Satoshi eindeutig nummeriert und wie es das Konto verfolgt, zu dem es gehört. Darüber hinaus wird auch die Seltenheitsklassifizierung von Satoshi eingeführt.

Satoshis Nummer

Gemäß dem Ordinals-Protokoll werden Satoshis basierend auf der Reihenfolge nummeriert, in der sie abgebaut werden. Die folgende Abbildung zeigt die Darstellung des 0. Satoshi, der im 0. Block abgebaut wurde.

Es gibt viele Möglichkeiten, Satoshi auszudrücken:

  • Ganzzahliges Symbol: Zum Beispiel 2099994106992659, das die Seriennummer darstellt, die dem Satoshi gemäß der Mining-Reihenfolge zugewiesen wurde.

  • Dezimalschreibweise: Zum Beispiel 3891094.16797, die erste Zahl gibt die Höhe des Blocks an, in dem die Satoshi abgebaut wurden, und die zweite Zahl gibt die Anzahl der Satoshi im Block an.

  • Gradsymbol: Zum Beispiel 3°111094′214″16797‴, die erste Zahl ist die Periode, nummeriert beginnend bei 0, die zweite Zahl ist der Blockindex der Halbierungsepoche und die dritte Zahl ist der Blockindex während der Schwierigkeit Anpassungszeitraum, die letzte Zahl ist der Sat-Index im Block.

  • Prozentsymbol: Beispielsweise gibt 99,99971949060254 % die Position des Satoshi im Bitcoin-Angebot an, ausgedrückt als Prozentsatz.

  • Name: Zum Beispiel Satoshi. Ein Name, der die Sequenznummer mit den Zeichen a bis z kodiert.

Anhand eines Beispiels erklären wir, wie man neu geschürfte Bitcoins nummeriert. Wenn wir uns Block 795952 der Bitcoin-Blockchain ansehen, können wir sehen, dass die erste Transaktion Tx 3a1f...b177 die Belohnung des Miners (Coinbase-Transaktion) aufzeichnet. Diese Transaktion umfasst die neu geschürften Bitcoins, die als Verpackungsprämien für die Miner verwendet werden, sowie die Bearbeitungsgebühren, die der Transaktionsinitiator an die Miner zahlt. Wenn wir uns die Eingabe in der Abbildung unten ansehen, können wir feststellen, dass seine UTXO-ID aus einer Zeichenfolge von Nullen und der Blockhöhe besteht. Die Ausgabeadresse ist die Wallet-Adresse des Miners und der Betrag ist die Summe der oben genannten Belohnungen und Bearbeitungsgebühren.

Wenn wir uns die Ausgabe an Miner genauer ansehen, können wir die Verteilung von Adressen, Beträgen und enthaltenen Satoshis sehen. Dazu gehören, wie bereits erwähnt, Mining-Belohnungen und -Gebühren. Darunter sind die grünen Sats-Nummerninformationen 1941220000000000–1941220625000000 die neuen Satoshi, die durch die Mining-Belohnung generiert werden, und die verbleibenden 712 Satoshi-Datensätze entsprechen allen Bearbeitungsgebühren im Block.

Wir können die Nummer Sa 1941220000000000 verifizieren. Seine Blocknummer ist 795952, und die Dezimalschreibweise (dezimal) ist 795952,0, was bedeutet, dass die Blockhöhe des Minings dieses Satoshi 795952 beträgt, die Anzahl der Satoshi in diesem Block 0 ist und die nachfolgende Seltenheitsmarkierung (Seltenheit) ungewöhnlich ist. Wir werden dies in einem späteren Abschnitt ausführlich erklären.

Die Verbreitung von Cong

Da jeder BTC durch Mining-Belohnungen generiert wird, sind sie alle rückverfolgbar. Bitcoin-Konten verwenden das UTXO-Modell. Angenommen, Benutzer A erhält den 100. bis 110. Satoshi durch Mining (10 Satoshis werden als Ganzes im selben UTXO mit der ID adc123 gespeichert). Wenn Benutzer A 5 Satoshis an Benutzer B zahlen möchte, wählt er die ID abc123 als Eingabe der Transaktion, von der 5 Satoshis an Benutzer B gegeben werden und 5 Satoshis als Wechselgeld an Benutzer A zurückgegeben werden. Diese beiden Kopien von 5 Satoshis bilden ein Ganzes und werden in zwei UTXOs mit den IDs abc456 bzw. abc789 gespeichert. Die obige UTXO-ID und die Anzahl der Satoshis werden nur als Beispiele angezeigt. In tatsächlichen Situationen ist die Mindestanzahl der gesendeten Satoshis auf 546 begrenzt und die UTXO-ID wird nicht in dieser Form ausgedrückt.

In der obigen Transaktion ist der Umlaufpfad der 10 Satoshis von Benutzer A:

  1. Der Bergbau produziert 10 Satoshis mit den Nummern [100, 110]. Das bedeutet, dass der 100. bis 109. Satoshi im UTXO mit der ID abc123 gespeichert ist und sein Besitzer Benutzer A ist.

  2. Wenn A Geld überweist, werden 10 Satoshis in zwei Teile mit jeweils 5 Satoshis aufgeteilt. Dabei kommt das Prinzip „First in, first out“ zum Einsatz, das heißt, die Nummernreihenfolge der Satoshis wird anhand ihres Index in der Transaktionsausgabe bestimmt. Nehmen wir an, dass die Reihenfolge der Ausgabe zuerst Benutzer A, dann Benutzer B ist, dann ist die Seriennummer der verbleibenden 5 Satoshis von Benutzer A [100, 105), gespeichert im UTXO mit der ID abc456, und die Seriennummer der 5 Satoshis von Benutzer B ist [105, 110), gespeichert im UTXO mit der ID abc789.

Seltenheit (Seltener Satoshi)

Als Ableger des Ordinals-Protokolls kann die Seltenheit von Satoshis anhand der Reihenfolge definiert werden, in der sie abgebaut werden. Dies wird dazu führen, dass einige spezielle Satoshis unterschiedliche Seltenheiten haben. Hier sind die Seltenheitsstufen verschiedener Satoshis:

  • gemeinsam: Alle Satoshi außer dem ersten Satoshi im Block (Gesamtvorrat beträgt 2.100 Billionen)

  • ungewöhnlich: erster Satoshi in jedem Block (Gesamtvorrat beträgt 6.929.999)

  • selten: erster Satoshi in jeder Schwierigkeitsanpassungsperiode (Gesamtvorrat 3437)

  • episch: der erste Satoshi nach jeder Halbierung (Gesamtvorrat beträgt 32)

  • legendär: der erste Satoshi in jedem Zyklus (Gesamtvorrat beträgt 5)

  • mythisch: der erste Satoshi im Genesis-Block (Gesamtvorrat ist 1)

Dieses Konzept seltener Satoshis kann dem Bitcoin-Ökosystem mehr Interesse und Wert verleihen. Satoshis unterschiedlicher Seltenheit können auf dem Markt unterschiedliche Werte haben, was Sammler und Investoren anzieht.

3. Beschriftungsmethode

Ordnungszahlen unterscheiden sich deutlich von NFTs auf anderen Nicht-Bitcoin-Ketten. Der Hauptunterschied besteht darin, dass Ordinalzahlen-Metadaten nicht an einem bestimmten Ort gespeichert werden. Stattdessen werden diese Metadaten in die Zeugendaten der Transaktion (Zeugendaten, Zeugenfeld) eingebettet, weshalb wir sie „Inschrift“ nennen, weil diese Daten wie eine Inschrift in Bitcoin „eingraviert“ sind. An einem bestimmten Teil der Transaktion Die Daten sind einem bestimmten Satoshi zugeordnet. Dieser Eintragungsprozess wird durch Segregated Witness (SegWit) und Pay-to-Taproot (P2TR) implementiert und umfasst zwei Phasen: Festschreiben und Offenlegen, wobei jede Form von Inhalt (z. B. Text, Bilder oder Videos) auf dem bezeichneten Eintrag eingeschrieben werden kann Satoshi. Wir werden im Folgenden eine weitere, direktere Speichermethode OP_RETURN vorstellen und erklären, warum sie nicht als Mittel zur Beschriftung verwendet wird. Gleichzeitig werden wir vorstellen, was Segregated Witness und Pay-to-Taproot sind und welche Rollen sie bei der Inschrift spielen. Abschließend stellen wir die Methode der Inschrift vor.

OP_RETURE

In der Bitcoin Core-Client-Version 0.9 wurde der Kompromiss schließlich durch die Einführung des RETURN-Operators erreicht. **RETURN ermöglicht Entwicklern das Hinzufügen von 80 Byte Nichtzahlungsdaten zur Transaktionsausgabe. **Im Gegensatz zu Pseudozahlungen erstellt RETURN eine explizit überprüfbare, nicht konsumierbare Ausgabe, die nicht in einem UTXO-Set gespeichert werden muss. RETURN-Ausgaben werden in der Blockchain aufgezeichnet. Sie verbrauchen Speicherplatz und erhöhen die Größe der Blockchain. Sie werden jedoch nicht im UTXO-Satz gespeichert, sodass sie den UTXO-Speicherpool nicht erweitern und die Anzahl der vollständigen Knoten nicht erhöhen. Hohe Speicherkosten.

Während OP_RETURN ein sehr einfaches Mittel zum Speichern von Informationen in der Bitcoin-Blockchain ist, ist es auch eine potenzielle Methode zum Einschreiben. Die Einschränkungen von OP_RETURN stellen jedoch einige Herausforderungen beim Umgang mit der Metadatenspeicherung dar. Erstens kann OP_RETURN nur 80 Byte Daten speichern. Für Situationen, in denen größere Datenmengen gespeichert werden müssen, ist diese Einschränkung offensichtlich unbefriedigend. Zweitens werden OP_RETURN-Daten im Transaktionsausgabeteil gespeichert. Obwohl diese Daten nicht im UTXO-Satz gespeichert werden, belegen sie den Speicherplatz der Blockchain, was zu einer Vergrößerung der Blockchain führt. Schließlich führt die Verwendung von OP_RETURN zu höheren Transaktionsgebühren, da für die Buchung dieser Transaktionen mehr gezahlt werden muss.

Getrennter Zeuge

Im Gegensatz dazu kann die von SegWit bereitgestellte neue Methode die oben genannten Probleme überwinden. SegWit ist ein wichtiges Protokoll-Upgrade für Bitcoin. Es wurde 2015 vom Bitcoin-Kernentwickler Pieter Wuille vorgeschlagen und schließlich 2017 in Version 0.16.0 offiziell übernommen. „Segregated“ bedeutet in „Segregated Witness“ Trennung und Isolation. „Witness“ ist eine mit einer Transaktion verbundene Signatur. Daher trennt SegWit bestimmte Transaktionssignaturdaten (Zeugendaten) von der Transaktion.

Der Hauptvorteil der Trennung von Signaturen und transaktionsbezogenen Daten besteht darin, die Größe der in einem Bitcoin-Block gespeicherten Daten zu reduzieren. Dies bietet zusätzliche Kapazität pro Block, um mehr Transaktionen zu speichern, was auch bedeutet, dass das Netzwerk mehr Transaktionen verarbeiten kann und Absender niedrigere Gebühren zahlen. Technisch gesehen bedeutet dies, dass die Informationen zur Skriptsignatur (scriptSig) aus der Grundstruktur (Basisblock) entnommen und in einer neuen Datenstruktur platziert werden. Die Knoten und Miner, die die Überprüfung durchführen, überprüfen auch die Skriptsignatur in dieser neuen Datenstruktur, um sicherzustellen, dass die Transaktion gültig ist. Das Segwit-Upgrade führt ein neues Zeugenfeld in Transaktionsausgaben ein, um Datenschutz und Leistung zu gewährleisten. Während Zeugendaten nicht für die Datenspeicherung konzipiert sind, bieten sie uns tatsächlich die Möglichkeit, Dinge wie Inschriftenmetadaten zu speichern. Wir verwenden die folgende Abbildung, um Segregated Witness besser zu verstehen:

Pfahlwurzel

P2TR ist ein Transaktionsausgabetyp von Bitcoin, der mit dem Taproot-Upgrade im Jahr 2021 eingeführt wurde und es ermöglicht, verschiedene Transaktionsbedingungen privater in der Blockchain zu speichern. In der Inschrift der Ordinals spielt P2TR eine entscheidende Rolle. Inscription bettet im Wesentlichen spezifische Dateninhalte in Bitcoin-Transaktionen ein, und Taproot-Upgrades, insbesondere P2TR, machen diese Einbettung von Daten flexibler und wirtschaftlicher.

Erstens können wir aufgrund der Art und Weise, wie Taproot-Skripte gespeichert werden, Inskriptionsinhalte in Taproot-Skriptpfadausgabeskripten speichern, die nahezu keine inhaltlichen Einschränkungen haben, und erhalten gleichzeitig Rabatte auf Zeugendaten, was die Speicherung von Inskriptionsinhalten relativ wirtschaftlich macht. Da die Nutzung von Taproot-Skripten nur aus bereits vorhandener Taproot-Ausgabe erfolgen kann, verwendet Inscription einen zweistufigen Commit-/Reveal-Prozess. Zunächst wird in der Commit-Transaktion eine Taproot-Ausgabe erstellt, die ein Skript verspricht, das den Inhalt der Inschrift enthält. Dann wird in einer Offenlegungstransaktion die durch die Festschreibungstransaktion erzeugte Ausgabe verbraucht, wodurch der Inhalt der Inschrift in der Kette enthüllt wird.

Dieser Ansatz reduziert den Ressourcenverbrauch erheblich. Wenn P2TR nicht verwendet wird, werden die Zeugeninformationen in der Ausgabe der Transaktion gespeichert. Auf diese Weise werden die Zeugeninformationen immer im UTXO-Satz gespeichert, solange diese Ausgabe nicht verbraucht wird. Wenn dagegen P2TR verwendet wird, erscheinen die Zeugeninformationen nicht in der während der Festschreibungsphase generierten Transaktion und werden daher nicht in den UTXO-Satz geschrieben. Erst wenn dieses UTXO verbraucht ist, erscheinen die Zeugeninformationen in der Transaktionseingabe während der Offenlegungsphase. P2TR ermöglicht das Schreiben von Metadaten in die Bitcoin-Blockchain, erscheint jedoch nie im UTXO-Set. Da die Wartung/Änderung des UTXO-Sets mehr Ressourcen erfordert, kann dieser Ansatz viele Ressourcen einsparen.

Inschrift

Das Ordinals-Protokoll nutzt SegWit, um die Größenbeschränkung für in das Bitcoin-Netzwerk geschriebene Inhalte zu lockern und den Eintragsinhalt in den Zeugendaten zu speichern. Dadurch können bis zu 4 MB Metadaten gespeichert werden. Taproot erleichtert das Speichern beliebiger Zeugendaten in Bitcoin-Transaktionen und ermöglicht es dem Ordinals-Entwickler Casey Rodarmor, alte Opcodes (OP_FALSE, OP_IF, OP_PUSH) in das umzuwandeln, was er als „Umschläge“ für das bezeichnet, was er als „Inschrift“-Speicherung willkürlicher Daten bezeichnet.

Der Prozess des Inschriftengießens besteht aus den folgenden zwei Schritten:

  1. Zuerst müssen Sie eine Commit-Transaktion für die Taproot-Ausgabe des Skripts erstellen, die den Inhalt der Inschrift enthält. Das Speicherformat ist Taproot, das heißt, die Ausgabe der vorherigen Transaktion ist P2TR (Pay-To-Taproot), und die Eingabe der nächsten Transaktion wird in ein bestimmtes Format im bezeugten Taproot-Skript eingebettet; zunächst ist die Zeichenfolge ord auf den Stapel geschoben, um Unklarheiten darüber auszuschließen, dass die Inschrift für andere Zwecke verwendet wurde. OP_PUSH 1 gibt an, dass der nächste Push den Inhaltstyp enthält, und OP_PUSH 0 gibt an, dass nachfolgende Datenpushs den Inhalt selbst enthalten. Große Inschriften müssen mehrere Daten-Pushs verwenden, da eine der wenigen Einschränkungen von Taproot darin besteht, dass ein einzelner Daten-Push nicht größer als 520 Bytes sein darf. Zu diesem Zeitpunkt wurden die Inschriftdaten dem UTXO der Transaktionsausgabe zugeordnet, aber nicht veröffentlicht.

  2. Zweitens muss die von der Commit-Transaktion erzeugte Ausgabe in der Reveal-Transaktion verbraucht werden. In dieser Phase wird eine Transaktion initiiert, indem das UTXO, das dieser Inschrift entspricht, als Eingabe verwendet wird. Zu diesem Zeitpunkt wurde der entsprechende Inschrifteninhalt im gesamten Internet veröffentlicht.

Durch die oben genannten zwei Schritte wurde der Inhalt der Inschrift an das beschriftete UTXO gebunden. Gemäß der oben eingeführten Positionierung von Satoshi erfolgt die Beschriftung auf dem ersten Satoshi, der der UTXO-Eingabe entspricht, und der Inhalt der Beschriftung wird in die Eingabe der angezeigten Transaktion einbezogen. Gemäß der oben vorgestellten Einführung in die Zirkulation und Verfolgung von Satoshis können diese mit speziellen Inhalten gravierten Satoshis übertragen, gekauft, verkauft, verloren und wiederhergestellt werden. Es ist zu beachten, dass wiederholte Eintragungen nicht zulässig sind, da sonst spätere Eintragungen ungültig werden.

Wir werden diesen Prozess am Beispiel der Gravur eines kleinen BTC-NFT-Bildes im Detail erläutern. Dieser Prozess umfasst hauptsächlich die beiden zuvor erwähnten Phasen Commit und Reveal. Zuerst sehen wir, dass die Hash-ID der ersten Transaktion 2ddf9...f585c ist. Es ist zu beachten, dass die Ausgabe dieser Transaktion keine Zeugendaten enthält und die Webseite keine relevanten Inschrifteninformationen enthält.

Als nächstes überprüfen wir den Datensatz der zweiten Stufe, dessen Hash-ID e7454...7c0e1 ist. Hier können wir die Informationen der Ordinalsinschrift sehen, die den Inhalt der Inschrift des Zeugnisses darstellt. Die Eingabeadresse dieser Transaktion ist die Ausgabeadresse der vorherigen Transaktion, und die Ausgabe 0,00000546BTC (546 Satoshi) besteht darin, diesen NFT an Ihre eigene Adresse zu senden. Gleichzeitig können wir auch den Satoshi finden, in dem sich diese Inschrift in Sat 1893640468329373 befindet.

Im Bitcoin-Wallet können wir diesen Vermögenswert sehen. Wenn wir dieses NFT handeln möchten, können wir es direkt an die Adressen anderer Personen senden, also dieses UTXO senden und so die Übertragung der Inschrift abschließen.

4. Bitcoin-Wallet

Nachdem wir die Ordnungsökologie, die Zirkulation von Satoshis und das damit verbundene Wissen über Inschriften verstanden haben, gibt es derzeit viele Anwendungsszenarien, sei es die Entstehung von BRC-20, ORC-20, BRC-721, GBRC-721 usw andere verwandte abgeleitete Protokolle, die entsprechende Wallets erfordern, um Token-Informationen oder kleine NFT-Bilder zu unterstützen und anzuzeigen. In diesem Abschnitt stellen wir die Konzepte und Eigenschaften verschiedener Bitcoin-Wallet-Adressen vor.

Bitcoin-Adressen beginnen mit 1, 3 oder bc1. Genau wie E-Mail-Adressen können sie mit anderen Bitcoin-Nutzern geteilt werden, die damit Bitcoin direkt an ihre eigenen Wallets senden können. Aus Sicherheitsgründen enthalten Bitcoin-Adressen keine sensiblen Daten. Es kann überall gepostet werden, ohne die Sicherheit Ihres Kontos zu gefährden. Im Gegensatz zu E-Mail-Adressen können bei Bedarf jederzeit neue Adressen erstellt werden, wodurch Gelder direkt in Ihr Wallet eingezahlt werden. Tatsächlich erstellen viele moderne Wallets automatisch für jede Transaktion eine neue Adresse, um den Datenschutz zu maximieren. Eine Wallet ist einfach eine Sammlung von Adressen und Schlüsseln, die die darin enthaltenen Gelder freischalten. Zuerst müssen wir wissen, wie die Bitcoin-Wallet-Adresse generiert wird.

Private und öffentliche Bitcoin-Schlüssel

Bitcoin verwendet die elliptische Kurve Secp256k1. Der „private Schlüssel“ ist eine Zufallszahl zwischen 1 und n-1. n ist eine große Zahl (256 Bit). n wird in wissenschaftlicher Notation wie folgt ausgedrückt:

Dieser Bereich ist extrem groß und es ist für uns fast unmöglich, die privaten Schlüssel anderer Leute zu erraten. Dieser zufällige ganzzahlige private Schlüssel kann durch 256 Bit dargestellt werden, und es gibt mehrere Codierungsmethoden. Wenn der private Schlüssel in WIF oder WIF-komprimierter Form nicht verschlüsselt ist, kann die ursprüngliche „zufällige Ganzzahl“ durch Dekodierung erhalten werden. Eine andere Möglichkeit ist BIP38, das vorschlägt, den AES-Algorithmus zum Verschlüsseln des privaten Schlüssels zu verwenden. Der mit dieser Methode erhaltene private Schlüssel beginnt mit dem Zeichen 6P. Für diese Art von privatem Schlüssel muss ein Passwort eingegeben werden, bevor er in verschiedene Bitcoin-Wallets importiert werden kann. Das ist es, was wir normalerweise tun: Häufig verwendete private Schlüssel.

Dann verwenden wir die elliptische Kurvenformel K = kG, um den öffentlichen Bitcoin-Schlüssel K aus dem privaten Schlüssel k zu generieren. G ist der Basispunkt, der ein Parameter von secp256k1 ist. Es können die beiden Koordinaten von K erhalten werden, die die beiden Ausdrücke des öffentlichen Schlüssels sind, nämlich „Unkomprimiertes Format“ und „Komprimiertes Format“.

  • Die unkomprimierte Form besteht darin, die beiden Koordinaten x und y direkt miteinander zu verbinden und dann ein 0x04-Präfix voranzustellen.

  • Komprimierte Form bedeutet, dass, wenn y eine gerade Zahl ist, der Code 02 x ist, und wenn y eine ungerade Zahl ist, der Code 03 x ist;

Bitcoin Adresse

In der folgenden Abbildung sind verschiedene Arten von Bitcoin-Adressen dargestellt. Es gibt vier Darstellungsmethoden:

Referenz: https://en.bitcoin.it/wiki/Invoice_address

1. Legacy-Format (P2PKH).

Beispiel: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Adressen, die mit „1“ beginnen, sind das ursprüngliche Adressformat von Bitcoin und werden auch heute noch verwendet. Er wird aus dem öffentlichen Schlüssel über Hash berechnet, auch bekannt als P2PKH, was die Abkürzung für Pay To PubKey Hash (Payment to Public Key Hash) ist.

2. Nested SegWit (P2SH)-Format

Beispiel: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

Die Adresse beginnt mit „3“ und P2SH ist die Abkürzung für Pay To Script Hash, das komplexere Funktionen unterstützt als Legacy-Adressen. Verschachteltes P2SH übernimmt die vorhandene P2SH-Adresse (beginnend mit „3“) und kapselt sie mit der SegWit-Adresse.

3. Natives SegWit-Format (Bech32).

Beispiel: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Adressen, die mit bc1 beginnen, werden in BIP0173 vorgeschlagen, bei denen es sich um native SegWit-Adressen handelt. Die Bech32-codierte Adresse ist ein speziell für SegWit entwickeltes Adressformat. Bech32 wurde Ende 2017 in BIP173 definiert. Eines der Hauptmerkmale dieses Formats ist, dass es die Groß- und Kleinschreibung nicht berücksichtigt (die Adresse enthält nur 0-9, a-z), sodass Verwirrung bei der Eingabe effektiv vermieden werden kann und die Lesbarkeit besser ist . Da in der Adresse weniger Zeichen erforderlich sind, verwendet die Adresse die Base32-Kodierung anstelle der herkömmlichen Base58, was die Berechnungen bequemer und effizienter macht. Daten können in QR-Codes kompakter gespeichert werden. Bech32 bietet mehr Sicherheit, einen besser optimierten Code zur Erkennung von Prüfsummenfehlern und minimiert das Risiko ungültiger Adressen.

Bech32-Adressen selbst sind mit SegWit kompatibel. Es ist kein zusätzlicher Platz erforderlich, um die SegWit-Adresse in die P2SH-Adresse einzufügen, sodass bei Verwendung der Adresse im Bech32-Format die Bearbeitungsgebühr niedriger ist. Bech32-Adressen haben mehrere Vorteile gegenüber älteren Base58-Adressen (Base58Check-Kodierung wird verwendet, um Byte-Arrays in Bitcoin in vom Menschen kodierbare Zeichenfolgen zu kodieren): QR-Codes sind kleiner; besser fehlersicher; sicherer; Groß- und Kleinbuchstaben sind nicht zu unterscheiden; bestehen nur aus Kleinbuchstaben , sodass es einfacher zu lesen, zu tippen und zu verstehen ist.

4. Taproot-Format (P2TR)

Bech32 hat einen Nachteil: Wenn das letzte Zeichen einer Adresse p ist, führt das Einfügen oder Löschen einer beliebigen Anzahl von Zeichen q direkt vor p nicht dazu, dass die Prüfsumme ungültig wird.

Um die oben genannten Mängel von Bech32 zu beheben, wurde in BIP0350 die Bech32m-Adresse vorgeschlagen:

  • Für native SegWit-Adressen der Version 0 verwenden Sie das vorherige Bech32;

  • Für native SegWit-Adressen der Version 1 (oder höher) wird das neue Bech32m verwendet.

Bei Bech32m-Adressen beginnen sie bei Version 1 immer mit bc1p (d. h. Taproot-Adressen). Genauer gesagt kann eine Wallet, genau wie natives SegWit, aus einer Seed-Phrase und einer Passphrase bestehen. Diese werden verwendet, um erweiterte öffentliche und private Schlüssel zu generieren, die zur Ableitung von Adressen für beliebige Pfade in einer hierarchischen deterministischen Wallet verwendet werden. Es speichert hauptsächlich BRC-20 und BTC NFT usw.