Zum Inhalt springen

Bitcoin genau gleiche Transaktionen


ivanos

Empfohlene Beiträge

Hallo zusammen

Mal eine Frage: Was wäre, wenn eine Person A und eine Person B zur genau gleichen Zeit den genau gleichen Beitrag eine Zahlung tätigen würden übers Bitcoinnetzwerk. Wäre das ein Problem oder würde es nur Probleme geben wenn sie auch die genau gleichen Start und Zieladressen hätten ?

Gruss - Ivanos

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 16 Stunden schrieb ivanos:

Hallo zusammen

Mal eine Frage: Was wäre, wenn eine Person A und eine Person B zur genau gleichen Zeit den genau gleichen Beitrag eine Zahlung tätigen würden übers Bitcoinnetzwerk. Wäre das ein Problem oder würde es nur Probleme geben wenn sie auch die genau gleichen Start und Zieladressen hätten ?

Gruss - Ivanos

Selbst dieselbe Startadresse, dieselbe Zieladresse und derselbe Betrag sind kein Problem.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Minuten schrieb ivanos:

Aber nicht genau die gleiche Uhrzeit. Eine Transaktion wird dann verworfen. Das hab ich schon richtig verstanden oder ?

Sie wird ungültig, weil die Adresse schon leer ist. Denn wenn man bezahlt, wird immer der ganze Betrag von der Adresse benutzt und das Wechselgeld kommt auf eine neue. Der erste Node wird sie dann ablehnen.

Axiom

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb Axiom0815:

Sie wird ungültig, weil die Adresse schon leer ist. Denn wenn man bezahlt, wird immer der ganze Betrag von der Adresse benutzt und das Wechselgeld kommt auf eine neue. Der erste Node wird sie dann ablehnen.

Axiom

So hab ich das im Lexikon aus der 1. Antwort auch verstanden. Danke.

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb ivanos:

Aber nicht genau die gleiche Uhrzeit. Eine Transaktion wird dann verworfen. Das hab ich schon richtig verstanden oder ?

Doch, auch mit derselben Uhrzeit und in demselben Block.

vor einer Stunde schrieb Axiom0815:

Sie wird ungültig, weil die Adresse schon leer ist. Denn wenn man bezahlt, wird immer der ganze Betrag von der Adresse benutzt und das Wechselgeld kommt auf eine neue. Der erste Node wird sie dann ablehnen.

Axiom

Eingangs wurde nirgendwo erwähnt, dass die Adresse nach erfolgter Transaktion "leer" ist.

Und es wird auch nicht der ganze Betrag aus der Adresse benutzt - hier müssen wir mal ein bisschen spitzfindiger sein!

Schaut mal hier:

https://www.walletexplorer.com/address/1AHtZveYFgWLbAw1jfBXTsTg2H7rQ93wgx

date	             received/sent	balance	    transaction
2019-09-16 18:20:10	-0.51285203 	0.         	c54b66c66d508a967ca8a2a24f735db6362cd71e33ad50d28afff20da020dc8c
2019-09-16 16:47:41	-0.51208606 	0.51285203 	053b777efdc5db39d5a7d1a988d6417386a327065903a33d134fc27d07f86ae4
2019-09-16 16:16:06	+0.51285203 	1.02493809 	03a9a1dafca27206bb0adc265129dfc3bd7f97fa7cc5c4e86c3199df69d0f840
2019-09-16 15:13:16	+0.51208606 	0.51208606 	074825b8b4779c5da3f08fc416f077bdf8a39ead2a5e908de94c21f59dc29fdd

Da ist das sehr gut zu sehen.

Am 16.09. gingen zwei Transaktionen ein, die einen nahezu identischen Betrag hatten und die gingen kurz darauf wieder heraus.

Ich modifiziere das Ganze mal ein bisschen:

date	             received/sent	balance	    transaction
2019-09-16 18:20:10	-0.51208606 	0.         	c54b66c66d508a967ca8a2a24f735db6362cd71e33ad50d28afff20da020dc8c
2019-09-16 18:20:10	-0.51208606 	0.51208606 	053b777efdc5db39d5a7d1a988d6417386a327065903a33d134fc27d07f86ae4
2019-09-16 16:16:06	+0.51208606 	1.02417212 	03a9a1dafca27206bb0adc265129dfc3bd7f97fa7cc5c4e86c3199df69d0f840
2019-09-16 16:16:06	+0.51208606 	0.51208606 	074825b8b4779c5da3f08fc416f077bdf8a39ead2a5e908de94c21f59dc29fdd

... nun sind die beiden Inputs zurselben Zeit erfolgt und mit demselben Betrag.
... es sind nun auch zwei Outputs zurselben Zeit mit demselben Betrag erfolgt.

Das Einzige, was ich nicht modifiziert habe, das sind die transaction-Hashes, die kann ich mir nicht ausrechnen, denn die sind für jede Transaktion einzigartig (mit einer extrem hohen Wahrscheinlichkeit)

 

in der Blockchain werden ausgegebene Bitcoin grundsätzlich nur dann ausgegeben, wenn diese Bitcoin zuvor auch empfangen wurden (außer beim Blockreward). Es lassen sich einen oder mehrere Inputs mit einem oder mehrere Outputs verbinden.

 

Was nicht geht und was das Doublespending meint ist, dass ich ein und denselben Transaction-Hash in zwei zeitgleiche Transaktionen einbaue.

Was jedoch sehr wohl geht: Zwei Miner, einer in Kanada und einer in Neuseeland könnten meine zwei Transaktionen empfangen und tatsächlich zeitgleich einen Block finden und ihn in der Welt weiterverteilen. Die Miner rund um Kanada würden dann Blöcke auf der einen Transaktion und die Miner rund um Neuseeland würden dann meine zweite Transaktion benutzen - ich könnte dann diese neuen Transaktionen weiter benutzen und weiter ausgeben.

Es entsteht ein Blockchain-Split.

Das kann nur funktionieren wenn mehrere Miner exakt zurselben Zeit einen Block finden und diesen weltweit verteilen.

Der Normalfall ist jedoch, dass aufgrund der Difficulty nur ca. alle 10 Minuten ein Block gefunden wird - und nicht zwei - und auch nicht exakt gleichzeitig und das auch nicht mehrere Blöcke hintereinander.

Aus dem Grund reichen eigentlich schon zwei Bestätigungen im Normalbetrieb aus.

Warum jedoch 6 Bestätigungen abgewartet wird? .. bereits einmal ist es zu einem Softwareproblem gekommen:
https://github.com/bitcoin/bips/blob/master/bip-0050.mediawiki

.. das wurde mit dem sechsten Block erledigt. Sechs Blöcke verschaffen den Entwicklern ausreichend viel zeit um eine Fork zu entdecken, darauf zu reagieren, Exchanges zu alarmieren und einen ungewollten Split verhungern zu lassen.

Wer diese Systematik verstanden hat, hat auch verstanden wieso "10 Minuten" eine gute Idee sind und wieso in Testumgebungen wie LTC wesentlich kürzere Blockzeiten sinnvoll sind um genau solche Szenarien im realen Leben durchspielen zu können.

 

 

Bearbeitet von Jokin
  • Like 2
  • Up 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Stunden schrieb ivanos:

Hallo zusammen

Mal eine Frage: Was wäre, wenn eine Person A und eine Person B zur genau gleichen Zeit den genau gleichen Beitrag eine Zahlung tätigen würden übers Bitcoinnetzwerk. Wäre das ein Problem oder würde es nur Probleme geben wenn sie auch die genau gleichen Start und Zieladressen hätten ?

Gruss - Ivanos

Das ist kein Problem.

vor 1 Stunde schrieb ivanos:

Aber nicht genau die gleiche Uhrzeit. Eine Transaktion wird dann verworfen. Das hab ich schon richtig verstanden oder ?

Auch kein Problem.

Da es ja eine Person A und eine Person B ist sind das zwei verschiedene Transaktionen, egal wie man es dreht und wendet. Vollkommen egal.

Person A kann auch zweimal 1 BTC an dieselbe Adresse schicken. Es sind dann trotzdem zwei Transaktionen.

Was nicht funktioniert ist das man nur 1 BTC auf der eigenen Adresse hat und dann zweimal 1 BTC senden will. Geht nicht weil ja nur 1 BTC vorhanden ist. Das wäre sonst ein double spend und die gehn nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

 

vor 29 Minuten schrieb Jokin:

Eingangs wurde nirgendwo erwähnt, dass die Adresse nach erfolgter Transaktion "leer" ist.

Und es wird auch nicht der ganze Betrag aus der Adresse benutzt - hier müssen wir mal ein bisschen spitzfindiger sein!

Nein, wurde nicht. Da aber alle aktuellen HD Wallet so funktionieren, dass nur ein mal eine Adresse verwendet wird, und ich aus Support weiß, dass @ivanos eben eine HD Wallet benutzt, ist es manchmal besser eine einfache, verständlich Lösung aufzuzeigen.

Mit richtigen Freaks, können wir dann gerne absolut ins Detail gehen.

Mit einfache Lösung meine ich, dass sie trotzdem richtig in der Praxis ist.

Was jetzt @Jokin, Du kannst den Hash nicht im Kopf schnell ausrechen. Du enttäuscht mich. 😉

Axiom

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Jokin:

Und es wird auch nicht der ganze Betrag aus der Adresse benutzt - hier müssen wir mal ein bisschen spitzfindiger sein!

Da kann ich noch einen drauf setzen. Anfangs wurde gesagt gleicher Betrag aber nicht ob auch die Transaktionsgebühr identisch ist. Auf einer Adresse könnten jetzt 0,1 BTC und 0,2 BTC liegen. Person A transferiert 0,09 BTC mit 0,01 BTC Gebühr. Person B transferiert ebenfalls 0,09 BTC aber mit 0,02 BTC Gebühr. Das Ergebnis sind zwei valide Transaktionen weil die Wallets von Person A und B den für ihre zwecke passenden Input nehmen werden. Double Spend Protection gibt es nur wenn der gleiche Input doppelt verwendet wird aber nicht wenn die Transaktionen verschiedene Inputs der gleichen Adresse nutzen.

vor 32 Minuten schrieb Axiom0815:

Da aber alle aktuellen HD Wallet so funktionieren, dass nur ein mal eine Adresse verwendet wird, und ich aus Support weiß, dass @ivanos eben eine HD Wallet benutzt, ist es manchmal besser eine einfache, verständlich Lösung aufzuzeigen.

Da muss ich widersprechen. Erstmal würde das HD Wallet nur auf Input aber nicht auf Adresse Ebene prüfen. Mein Beispiel würde sauber durch gehen selbst dann wenn Person A beide Transaktionen los sendet.

Wenn wir schon spitzfindig sind dann überwacht das Wallet (das machen nicht nur HD Wallets) den Mempool. Findet das Wallet eine Transaktion die das eigene Wallet betrifft, wird diese im Frontend mit 0 Bestätigungen angezeigt und das Wallet verhält sich so als würde die Transaktion in den nächsten Block kommen. Das heißt das Guthaben wird korrekt angezeigt und es ist sogar möglich Geldeingänge direkt weiter zu schicken obwohl sie noch nicht bestätigt sind. Dieses System ist nicht unfehlbar. Man muss drei Punkte beachten.

Wenn Person A und Person B eine Transaktion (dieses mal gleiche Inputs) zeitgleich losschicken, kann das jeweils andere Wallet davon nichts wissen. Eine der beiden Transaktionen wird gewinnen. Dafür ist es auch unerheblich ob zeitgleich ein Block gemint wird so wie im Beispiel von @Jokin Solange keine der beiden Transaktionen bestätigt wurde, werden die beiden Wallets ihren jeweiligen Standpunkt im Mempool Broadcasten.

Problem zwei ist, dass einige Wallets nur Transaktionen mit einer Minimum Gebühr aufgreifen. Person B könnte auch Stunden später die Transaktion von Person A zwar sehen aber weil dessen Transaktionsgebühr zu gering ist, wird sie nicht akzeptiert. Ich habe ein solches Verhalten bereits in freier Wildbahn gesehen auch wenn ich das als Bug bezeichnen würde. Erwartungshaltung ist eigentlich, dass die eigenen Transaktionen von derartigen Regeln ausgenommen werden. Erneut kann Person B den Input doppelt benutzen.

Eine weiteres Problem kann entstehen wenn eine Transaktion im Mempool fest steckt. Jedes Wallet hat für diese Situation die Möglichkeit den lokalen Mempool und damit auch die eigenen unbestätigten Transaktionen zu löschen. Damit ist man in der Lage die Inputs ein zweites mal los zu senden. Ich habe das Jahrelang so gemacht um Transaktionen mit möglichst geringen Gebühren zu versenden. Werden sie nach einigen Wochen nicht bestätigt, überschreibe ich sie einfach mit höheren Gebühren. Das Replace by Fee Flag gab es damals noch nicht und auch heute funktioniert dieser Trick noch selbst wenn das Flag nicht gesetzt wurde.

Merke: Vertraue niemals einem Wallet denn es ist immer fehlbar. Hinterfrage nur wie das Bitcoin Protokoll dich schützen kann.

Bearbeitet von skunk
  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 36 Minuten schrieb Axiom0815:

Nein, wurde nicht. Da aber alle aktuellen HD Wallet so funktionieren, dass nur ein mal eine Adresse verwendet wird, und ich aus Support weiß, dass @ivanos eben eine HD Wallet benutzt, ist es manchmal besser eine einfache, verständlich Lösung aufzuzeigen.

Egal um welche Wallet es sich handelt, wenn auf ein und dieselbe Adresse zweimal derselbe Betrag gesendet wird, dann ist das der Wallet herzlich egal.

Es wird halt nur schwer zwei zeitgleiche Transaktionen von derselben Adresse loszuschicken, wenn die Wallet immer sämtliche Inputs der Adresse zum Output+Wechselgeld+Fee zusammenbaut.

Damit will ich mich demnächst auch nochmal befassen ... aber das ist schon tief in der Technik drin 🙂

vor 36 Minuten schrieb Axiom0815:

Was jetzt @Jokin, Du kannst den Hash nicht im Kopf schnell ausrechen. Du enttäuscht mich. 😉

Ich hab Dyskalkulie 😞

Bearbeitet von Jokin
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Minuten schrieb Jokin:

Es wird halt nur schwer zwei zeitgleiche Transaktionen von derselben Adresse loszuschicken, wenn die Wallet immer sämtliche Inputs der Adresse zum Output+Wechselgeld+Fee zusammenbaut.

Damit will ich mich demnächst auch nochmal befassen ... aber das ist schon tief in der Technik drin 🙂

 

Können wir gern durchspielen. Ich habe da ganz praktische Erfahrungen mit ;) 

Edit: Ich habe zum besseren Verständnis Transaktionen selber erstellt und signiert. Es ist interessant wie die Transaktionen auf der Ebene aufgebaut werden. Guter Stoff. Kann ich nur empfehlen.

Bearbeitet von skunk
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

 

vor 9 Stunden schrieb Jokin:

Es wird halt nur schwer zwei zeitgleiche Transaktionen von derselben Adresse loszuschicken, wenn die Wallet immer sämtliche Inputs der Adresse zum Output+Wechselgeld+Fee zusammenbaut.

Ach was, dass ist kein Problem.  Du kannst 10 gleiche Transaktionen auf Vorrat machen und dann zeitgleich an 10 verschieden Node versenden.

Aber das sind technische Spitzwindigkeiten. Und hier ging es wohl er darum, ein "normalen" User Bitcoin als Anwendung nahe zu bringen. Und da legt ihr meines Erachtens die Latte ziemlich hoch. Warum?

Beginnt ein Kind in Naturkunde erste Zusammenhänge der Physik zu begreifen und stellt dazu Fragen, würde ich auch nicht mit der Quanten-Physik oder den ORBITALE-modellen der Atome anfangen.

Ich meine, das ist über das Ziel hinausgeschossen. 

Sonst wird gleich wieder abgeschaltet, und man denkt, nur was für Technik-Technik-Freaks.

Axiom

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...
Am 18.9.2019 um 14:51 schrieb ivanos:

Was wäre, wenn eine Person A und eine Person B zur genau gleichen Zeit den genau gleichen Beitrag eine Zahlung tätigen würden übers Bitcoinnetzwerk. Wäre das ein Problem oder würde es nur Probleme geben wenn sie auch die genau gleichen Start und Zieladressen hätten ?

Wenn sie die gleichen "Startadressen" hätten, wären es ja nicht zwei Personen, sondern eine 🙂

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Minuten schrieb MenionLeah:

Wenn sie die gleichen "Startadressen" hätten, wären es ja nicht zwei Personen, sondern eine 🙂

Gibt mir mal deinen Private Key damit ich dir das Gegenteil beweisen kann. Dann sind zwei Personen im Besitz der gleichen Startadresse.

  • Haha 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 11 Minuten schrieb MixMax:

Schreib den priv.Key hier öffentlich rein. Wir werden dann alle zeitgleich eine Transaktion ausführen. Und ich gebe es gleich zu, ja ich spiele da mit unfairen Mitteln.

Ich bin dafür wir machen das als Auktion. Wir überbieten uns einfach gegenseitig mit der Fee. Mein Anfangs Gebot ist die volle Summe als Fee. Quasi ein Geschenk an die Miner^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb MixMax:

Schreib den priv.Key hier öffentlich rein. Wir werden dann alle zeitgleich eine Transaktion ausführen. Und ich gebe es gleich zu, ja ich spiele da mit unfairen Mitteln.

Klingt nach DDoS über Dein eigenes BotNet .... :D

 

  • Haha 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb MixMax:

Wir veröffentlichen nen Priv.Key der Anfangs leer ist. Ein Dritter überweist was dort hin und wer scheller ist gewinnt?

Dürfte spannend werden - ich würde mir ein Skript schreiben, welches die Adresse permanent überwacht und die Transaktion dann sofort losschickt sobald da ein spendable Input drin ist - zu irgendwas muss ja der eigene Fullnode zunütze sein ... :D

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Jokin:

Dürfte spannend werden - ich würde mir ein Skript schreiben, welches die Adresse permanent überwacht und die Transaktion dann sofort losschickt sobald da ein spendable Input drin ist - zu irgendwas muss ja der eigene Fullnode zunütze sein ... :D

 

Ja wäre auch meine Idee. Die nächste Frage ist dann aber ob du das Script nicht gleich gegen den größten Mining Pool laufen lassen kannst. Warum dem Umweg über die eigene Full Node?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 31 Minuten schrieb skunk:

Ja wäre auch meine Idee. Die nächste Frage ist dann aber ob du das Script nicht gleich gegen den größten Mining Pool laufen lassen kannst. Warum dem Umweg über die eigene Full Node?

Weil ich es mit dem eigenen Node kann 🙂

... mit dem Rest hab ich mich noch nicht befasst - daher.

Aber da ich meinen Fullnode nicht wieder auf das Testnet umstellen wollen würde, müsste ich ohnehin auf den Pool zugreifen ... dennoch hab ich zu wenig Zeit für solche Späße. Die Zeit in der ich die Ruhe zum Programmieren habe, brauche ich für meine eigenen Projekte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 51 Minuten schrieb Jokin:

Dürfte spannend werden - ich würde mir ein Skript schreiben, welches die Adresse permanent überwacht und die Transaktion dann sofort losschickt sobald da ein spendable Input drin ist - zu irgendwas muss ja der eigene Fullnode zunütze sein ...

pssst, verrat doch nicht alles.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.