Ich habe dafür ein extra Wallet (Bitbox) mit dem Namen „Sammekbecken“ . Ab einer gewissen Anzahl von sats, wird von da auf das Wallet transferiert, welches ansonsten nicht angerührt wird
Richtig, steht alles hier:
Im Grunde genommen wäre es nicht nur im Interesse des einzelnen und seiner zukünftigen Kosten, UTXOs zu konsolidieren, sondern es wird auf lange Sicht auch zur Skalierbarkeit des Gesamtsystems beitragen. Denn durch Ein- und Auszahlungen werden auf Dauer die UTXOs immer kleiner ‚fragmentiert‘, für einen Zahlung müssen also mehr UTXOs konsumiert werden. Die Transaktionen brauchen dadurch statistisch mehr Speicherplatz.
Ich stelle mir das vor wie bei den Bauern, die über die Jahrhunterte durch Teilen und Vererben ihrer Ländereien immer kleinere, mit heutigem Gerät zum Teil fast unmöglich zu bearbeitende Stücke erzeugten. Durch die Flurbereinung wurden die Stücke umgelegt und wieder bearbeitbar.
Absolut. Alle UTXO (das „UTXO Set“) werden von einer Node übrigens im Arbeitsspeicher verwaltet und immer aktuell gehalten. Alles andere würde beim verifizieren von Transaktionen viel zu lange dauern.
Wenn sich auf Dauer das UTXO Set zu sehr aufbläht, da z.B. im Durchschnitt aus einem STXO immer zwei neue UTXO entstehen, dann wird das irgendwann zu einem Resourcenproblem.
Deswegen sind z.B. bei komplexeren Locking-Scripts die ganzen (Speicherfressenden) Bedingungen erst im Input, also wenn der UTXO ausgegeben wird während im ursprünglichen UTXO nur ein Hash des Scripts, der erstmal nicht viel aussagt, präsentiert wird. So werden die UTXO möglichst klein gehalten während die Inputs den eigentlichen Speicher verbrauchen.
-
Damit ist erstens der Anreiz größer zu konsolidieren, da die Gebührenlast in der unsicheren Zukunft liegt. Es ist also besser möglichst wenige UTXO zu haben.
-
Und zweitens sorgt das für eine geringe RAM-Auslastung bei den Nodes, da es weniger UTXO geben (sollte) und diese relativ klein sind.
Das sieht man sehr schön mit dem Transaction Size Calculator von Optech:
Gerne mal mit den In- und Outputs rum spielen und die Größen Vergleichen.
Unglaublich, was da alles an Metriken anfällt. Ich habe mein halbes Leben mit ähnlich komplexen Datenstrukturen zu tun gehabt, aber die Daten, die hier anfallen sind total abstrakt.
Die Frage ist halt wirklich, wie man bei einer Konsolidierung den eigenen Gesamtkuchen vernünftig aufteilt, schliesslich wissen wir nicht, wie sich die Kurse entwickeln. Selbst UTXOs, die heute 1000 USD entsprechen, könnten in nicht allzuferner Zukunft schon nicht mehr sonderlich alltagstauglich sein.
Und selbst wenn Du dir zwei UTXOs bastelst, analog den amerikanischen ckecking- & saving accounts einen grossen, ähm, Hodlsack und einen kleinen für’s Tagesgeschäft erzeugst Du bei Bewegungen zwischen den beiden auch noch mal Datenspuren, die aufgrund der Grösse des einen Tunichtgut alarmieren könnte.
Aus diesem Grund steht in der Sparrow-Dokumentation übrigens, man solle aus Sicherheits- und Privatheitsgründen bereits ab $10.000 in der Wallet über eine eigene Node nachdenken.
PS. Die Sparrow Wallet eigenet sich übrigens wunderbar zum Testen von Transaktionen oder neuen Walletkonfigurationen, da man zwischen Wallets einfach per Tabwechsel hin- und herspringen kann.
Woher wissen die Nodes eigentlich, ob ein Transaction Output schon ausgegeben wurde (unspent)?
Muss die komplette Blockchain durchsucht werden ob es eine Ausgabe gab? Kommen die Merkle Bäume hier ins Spiel oder wie wird das effizient sichergestellt?
Ja.
Eine Node hat aber alle (relevanten) UTXO im Arbeitsspeicher um möglichst schnell und effizient Transaktionen zu verifizieren. Die Node synchronisiert anfangs die komplette Blockchain durch und kennt dann alle UTXO. Bei jedem neuen Block muss sie jetzt dieses UTXO Set nur noch aktualisieren.
Bei SPV Nodes zum Beispiel.
Woher sollte ein FullNode (gilt auch für die Mining Nodes) wissen, welche UTXO für ihn relevant sind? Dann müsste er ja alle UTXOs im Arbeitsspeicher haben um eingehende Transaktionen zu verifizieren ehe diese im Netzwerk weiterverteit werden, das kann ich mir nicht vorstellen dass das so schnell genug abläuft und auch der Arbeitsspeicher wäre zu knapp dafür. Ich müsste ja die komplette Blockchain durchsuchen (400GB) ob es eine UTXO ist oder nicht und das für jede eingehende Transaktion.
Wie meinst du, für ihn relevant?
Eine Transaktion hat im Input einen „Link“ zu einem Output (TXID + Output Index). Die Node sucht nach diesem Output im eigenen UTXO Set. Wenn die Bedingungen zur Ausgabe alle erfüllt sind (und die Transaktion an sich gültig ist) dann wurde erfolgreich verifiziert. Das geht sehr schnell. Es muss nicht jedes mal die komplette Blockchain durchsucht werden, genau das ist ja der Sinn der Sache.
Genau kenne ich mich hier nicht aus, aber nicht das komplette UTXO Set ist im Arbeitsspeicher, sondern immer nur ein Buffer in der Hoffnung effizienter zu validieren.
Habe das oben etwas blöd formuliert.
Nach einer Zeit werden UTXO aus dem Arbeitsspeicher dann einfach auf Disk geschrieben. Die Idee ist, falls neu erstellte UTXO direkt oder relativ schnell wieder ausgegeben werden, dass der UTXO einfach aus dem Arbeitsspeicher gelöscht wird. Das wird wahrscheinlich auch häufig der Fall sein und sorgt dafür dass die Validierung insgesamt sehr viel schneller abläuft.
Einen UTXO aus 2013 den noch keiner angerührt hat muss ich nicht im Arbeitsspeicher haben. Bei einem UTXO einer Exchange vor 10 Minuten ist es aber sinnvoll.
Die Größe dieses Buffer im RAM kann natürlich konfiguriert werden.
Das UTXO Set ist aktuell fast 5 GB (4.5 GiB) groß:
Aber nur einmal, nicht jedes mal. Was denkst du denn warum eine Full Node am Anfang so lange synchronisieren muss? Du gehst einmal durch den großen Aktenordner durch und markierst dir die wichtigen Stellen.
Das UTXO Set wird nicht runtergeladen, sondern anhand der runtergeladenen Blockchain erstellt. Nur so funktioniert es ohne Vertrauen.
Aber danke dir fürs Nachhaken, habe das auch ganz oben im Beitrag mal etwas umformuliert.
Noch eine Frage hierzu:
Wenn ich jetzt zB auf Daedalus einige ADA habe ich einen Teil weg schicke dann landet der andere Teil ja - wie hier eh schon erklärt wurde - auf der Unspent Transaction Output Adresse.
Wenn ich nun Daedalus lösche und mit meinem Seed wieder wo herstellen will, werden dann die Guthaben die auf der UTXO Adresse sind auch wiederhergestellt? Oder sind die weg?
Oder kann man das mit dem Seed alles nur herstellen wenn man noch nie was verschickt hat bzw. es noch alles auf der ursprünglichen Adresse liegt?
Vielen Dank
Natürlich.
Keine Ahnung wie konkret dass Transaktionsmodell von Cardano überhaupt funktioniert (@skyrmion Help), aber wenn es ein UTXO Modell gibt, leiten sich natürlich auch Wechseladressen von deiner Mnemonic ab. Die Wechseladressen unterscheiden sich technisch nicht von den „normalen“ Receive Adressen (ausser vom Pfad).
Das ist hier näher erklärt:
Cardano verwendet im Gegensatz zum Account-based Model von Ethereum ein eUTXO Model (extended UTXO Model).
Bei normalen Transaktionen von Coins (ADA) verhält sich alles genauso wie beim Bitcoin UTXO Model, also wie in deinem Tutorial hier beschrieben.
Es gibt allerdings ergänzende Vorteile in Verbindung mit hinzugefügten Metadaten, mit Smart Contracts oder mit fremden Token auf der Cardano Blockchain.
Zum Beispiel werden andere Coins oder NFTs auf der Cardano Blockchain fast genauso wie ADA behandelt. Man kann sie ohne teuren Smart Contract direkt wie ADA verschicken und unter bestimmten Voraussetzungen sogar die Fees in dieser Währung zahlen (Babel Fees).
Super einfach erklärt! Vielen Dank! Wieder etwas schlauer.
Gibt es eine weitere Möglichkeit einen UTXO zu erweitern, als immer alles an eine neue Adresse zu senden?
Dabei würden sich ja auch Transaktionsgebühren summieren.
Die Frage ist doch sicherlich auch, wie das Auszahlverhalten mal wird.
Wäre ein möglichst flexibles Konzept, bestehend aus verschiedenen UTXO Größen sinnvoll?
50 % für x in 20??
30 % für y in 20??
10 % für z in 20??
10 % für die Gegenwart
Sind diese Label in der Sparrow Wallet Software-bezogen oder werden die in der Blockchain gespeichert?
Mit „erweitern“ meinte ich halt einfach eine Konsolidierung. Nein, kann man nicht. Es ist wie mit Bargeld. Du kannst aus einem 20€ nur einen 50€ Schein machen indem du ihn wechselst bzw. eine Transaktion machst.
Klar, aber es geht darum diese Transaktionen möglichst früh und günstig umzusetzen. Es hilft dir nicht weiter wenn du in 50 Jahren 500 kleine UTXO hast.
Wie du hier dein Konzept gestaltest ist völlig individuell und hängt wie oben im Beitrag beschrieben vom zukünftigen Verhalten ab, was man halt irgendwie abschätzen muss.
Es ist auch nichts in Stein gemeißelt. Wenn du in 10 Jahren mit deiner UTXO Privacy unzufrieden bist, dann machst du halt einen CoinJoin.
Die „Label“ in der Sparrow Wallet sind lokale Notizen.
Hey, ich habe letztens ein Thema hier erstellt und paar Fragen gestellt.
Da wurde mir gut weitergeholfen und ich habe so gesehen die nächste Stufe erreicht.
Jetzt hätte ich aber genauere offene Fragen noch zum Thema UTXO’s.
Klarstellung:
Sobald ich das richtig verstanden habe, ist eine Konsolidierung ja eigentlich das selbe wie eine Sendung und Zahlung wenn man mehrere UTXO’s nutzt.
Das heißt also, egal ob das jetzt eine Konsolidierung, Sendung oder Zahlung sein soll, eine SENDUNG IST EINE SENDUNG.
Der Name des Vorgangs/Sendung ist halt nur unbennant in Konsolidierung, Zahlung, Kauf, Verkauf usw., das ist schon mal richtig oder?
(Also eine Konsolidierung ist nicht irgendwie eine spezielle Sendungsart, sondern es hat nur diesen Namen, es bedeutet nur, dass man seine eigene Coins/Schlüssel zusammenführt, mehr nicht, das will ich damit meinen.)
Frage:
Wenn das oben zutrifft, dann komme ich jetzt zu meinen offenen Fragen.
Kann man eigentlich z. B. 10 UTXO’s zwar als ganzes senden, aber ohne diese zu einem UTXO zu führen oder werden diese sobald sie zusammen versendet werden immer konsolidiert?
Z. B. Adresse bc1…A schickt 10 UTXO’s an Adresse bc1…B.
Diese UTXO’s werden nicht zur 1 UTXO zusammengeführt, sondern bleiben als 10 UTXO’s, nur das die jetzt auf einer anderen Adresse sind, ist sowas möglich?
Oder werden diese wie schon gefragt, sobald sie zusammen versendet werden, dadurch immer zusammengeführt zu 1 UTXO?
DANKE.
Genau. Das ist einfach nur ein verbreiteter Begriff für eine (ganz normale) Transaktion an sich selbst, die deutlich weniger Outputs als Inputs hat und damit halt das eigene UTXO Set reduziert.
Eine Transaktion kann beliebig UTXO ausgeben und neue erstellen, die Summe (also Betrag in BTC) der Inputs muss natürlich größer als die Summe der Outputs sein (die Differenz ist die Netzwerkgebühr).
Normalerweise hat eine Transaktion halt nur 1-2 Outputs, nämlich an die Person an die man Bitcoin senden möchte (und evtl. anfallendes Wechselgeld). Die eigene Wallet Software wählt dann einfach passende UTXO aus um den gewünschten Betrag zu realisieren, wie wenn du im Geldbeutel nach den passenden Scheinen für die Rechnung suchst.
Ich kann aber genauso nur 1 UTXO ausgeben (1 Input) und dann beliebig viele neue erstellen (Outputs), z.B. wenn ich mehrere Personen gleichzeitig, also mit einer Transaktion, bezahlen will. Das nennt man auch payment batching und wird vor allem von Exchanges praktiziert.
Hier z.B. eine Auszahlung von Kraken:
Ich kann aber auch selbst eine solche Transaktion bauen. Die Sparrow Wallet ist hier mal wieder mein Vorzeigebeispiel, ich kann beliebig Empfänger hinzufügen und habe sogar eine Send to Many Funktion um tabellarisch Empfänger (also neue UTXO) aufzulisten.
Und natürlich kann ich in einer Transaktion mehrere UTXO an mich selbst erstellen, was auch immer dir das bringen soll. :)
Diese neuen Outputs können theoretisch auch alle auf die selbe und eigene Adresse gehen, was dann aber erst recht keinen Sinn ergibt. Es ist für den Nutzer als auch das Netzwerk immer besser wenn das UTXO Set verkleinert, nicht vergrößert wird.
Ich habe die zwei Beiträge mal in den UTXO Thread geschoben…
Also ich find das etwas irretierend mit der Bezeichnung…
Out bedeutet ja eher raus und In eher rein…
Daher müsste doch die Senderadresse Output heißen und die Emfängeradresse Input heißen…
Ich versuche das die ganze Zeit zu verstehen, aber weiß halt nicht ob es dann richtig ist…
Könntest du das etwas ausführlicher und mit nem Beispiel mal erklären?
Wäre echt toll!
Ersetze Adresse durch Transaktion.
Dann wird es vielleicht klarer.
Schau in den Threadtitel, wofür die Abkürzung UTXO steht.
Der Output einer Transaktion steht jemandem zur Verfügung, beim Input hat jemand was her- bzw. reingegeben.
Vielleicht ist es so besser zu begreifen.