Wie kann man effizient feststellen, ob die In-Adresse in der Transaktion gültig ist und die erforderliche Datenmenge hat?

Eine Transaktion hat eine In-Bitcoin-Adresse. Die Transaktion weist darauf hin, diese Adresse (als Bruchteil oder als Ganzes) an eine andere Adresse zu übertragen. Da die Quelle der Wahrheit die Blockchain ist, woher weiß der Miner, dass die In-Bitcoin-Adresse die genannte Datenmenge hat? Und wie überprüft der Miner es effizient?

Ich habe von Merkel-Bäumen gelesen. Mein Verständnis ist, dass sie dabei helfen herauszufinden, ob eine Transaktion in einer bestimmten Reihenfolge in einem Block vorhanden ist. Aber eine Blockchain wird viele Blöcke haben. Also, wie wird es von Bergleuten effizient gemacht?

Wird es nicht einfacher sein, eine Hashmap von der Bitcoin-Adresse zum Betrag zu erstellen?

Antworten (1)

Es gibt keine "Ein-Adressen" oder "Von-Adressen", und das hat nichts mit Merkle-Bäumen oder sogar Blöcken zu tun.

Bitcoin funktioniert durch Transaktionen, die Ausgaben erstellen, und andere Transaktionen, die aus früheren Transaktionsausgaben ausgegeben werden. Jeder Ausgang hat einen zugeordneten Wert. Wenn Sie Bitcoin ausgeben, geben Sie aus früheren Transaktionsausgaben aus. Ihre Transaktion enthält einen Verweis auf die ausgegebene Ausgabe: die txid und den Index der Ausgabe. Da alle Transaktionen (mit Ausnahme von Coinbase-Transaktionen – die Coin-Erzeugungstransaktion, nicht das Unternehmen) von einer früheren Transaktionsausgabe ausgegeben werden, sind die Transaktionen alle miteinander verkettet. Sie können diese Transaktionskette rückwärts durchlaufen, um zu überprüfen, ob die Werte aller Transaktionen korrekt sind.

Wenn also ein Knoten Ihre Transaktion empfängt, sucht er nach den Ausgaben, von denen Ihre Transaktion ausgegeben wird, und stellt sicher, dass keine andere Transaktion diese Ausgaben bereits ausgegeben hat. Dann summiert es die Werte der ausgegebenen Ausgaben und stellt sicher, dass diese Summe größer oder gleich der Summe der Werte der erstellten Ausgaben ist.

Vielen Dank für Ihre Antwort. Können Sie erklären, wie dies effizient gemacht wird: and makes sure that no other transaction has spent those outputs already. ?
Und wie findet es den Bitcoin-Wert in früheren Transaktionsausgaben (ich denke, das sind sogenannte In-Adressen)? Ist es in der Adresse selbst codiert? (ich bezweifle..)
Der Wert befindet sich in der Transaktionsausgabe selbst.
Um sicherzustellen, dass keine andere Transaktion die von einer Transaktion ausgegebenen Ausgaben ausgegeben hat, führt der Knoten eine Liste aller nicht ausgegebenen Transaktionsausgaben. Es aktualisiert diese Liste, wenn es neue Transaktionen erhält, indem es erstellte Ausgaben hinzufügt und ausgegebene entfernt. Es kann effizient sehen, ob eine Ausgabe bereits ausgegeben wurde, indem überprüft wird, ob sie in der Liste enthalten ist. Wenn dies der Fall ist, wurde die Ausgabe nicht ausgegeben. Wenn dies nicht der Fall ist, wurde es ausgegeben oder die Transaktion existiert nicht.
Ich denke, es wird ein Hash-Set sein ... nur um genau zu sein, da es bei dieser Frage darum geht, die Informationen effizient zu finden.
In Bitcoin Core wird es als UTXO-Set bezeichnet und als LevelDB-Datenbank gespeichert (die intern aus mehreren überlappenden sortierten Listen besteht) und aggressiv im RAM in einer Hashtabelle zwischengespeichert.