Jump to content

Bitcoin genau gleiche Transaktionen


ivanos
 Share

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

vor 58 Minuten schrieb Jokin:

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

 

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

Link to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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.

 

 

Edited by Jokin
  • Like 2
  • Up 1
Link to comment
Share on other sites

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 to comment
Share on other sites

 

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 to comment
Share on other sites

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.

Edited by skunk
  • Thanks 1
Link to comment
Share on other sites

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 😞

Edited by Jokin
Link to comment
Share on other sites

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.

Edited by skunk
  • Like 1
Link to comment
Share on other sites

 

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 to comment
Share on other sites

  • 4 weeks later...
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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Wie währ es mit nem Geschwindigkeitstest im TestNet?

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

Edited by MixMax
  • Haha 1
Link to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.