Ich versuche, ein Programm zu schreiben, um Bitcoin zu empfangen, und nach einiger Zeit dieselbe Menge Bitcoin an dieselbe Adresse zurückzugeben.
Wie würdest du das machen? Hat Bitcoin die Möglichkeit, Coins über dieselbe Adresse zu senden und zu empfangen, oder müsste ich nach einer Rücksendeadresse fragen und die Adresse des gesendeten Betrags irgendwie mit der Rücksendeadresse verknüpfen?
Sie sollten nach einer Rücksendeadresse fragen. Bitcoin-Transaktionen enthalten keine "Von-Adresse", sie referenzieren nur die Ausgabe einer anderen (vorherigen) Transaktion. Eine Ausgabe kann ein P2PKH (Pay-to-Public-Key-Hash) sein, aber es kann genauso gut ein P2SH (Pay-to-Script-Hash) sein, und einige andere können in Zukunft implementiert werden.
Es besteht auch eine große Möglichkeit, eine Transaktion zu erhalten, die auf viele frühere Ausgaben verweist, wie es passiert, wenn jemand, der Ihnen 1 BTC zahlt, zuvor viele kleinere Transaktionen erhalten hat.
Es wäre auch für Ihre Benutzer unintuitiv, da es sich bei Bitcoin um Best Practice handelt, sich nicht darum zu kümmern, woher die Bitcoins kommen, und stattdessen für jede empfangene Transaktion eine neue Adresse zu generieren.
Außerdem sollte man keine Kryptographie selbst implementieren, wenn man nicht schon ein Top-Level-Experte ist, es gibt einfach zu viele Dinge, die schief gehen können. Ich würde empfehlen, eine geeignete API zu verwenden.
Aus Liebe zu allem, was heilig ist, tun Sie dies nicht. Halten:
Alice möchte dir 1 Bitcoin schicken. Sie bittet ihren Wallet-Anbieter, Ihnen 1 Bitcoin zu senden. Ihr Wallet-Anbieter sendet Ihnen die Bitcoins, die er von Bob erhalten hat, als er in sein Wallet eingezahlt hat.
Sie sehen sich die Transaktion an und sehen, dass die Münzen von Bobs Einzahlungsadresse stammen. Also schickst du Coins an diese Adresse zurück. Alices Wallet-Anbieter sieht Coins, die an Bobs Einzahlungsadresse eingegangen sind, und schreibt Bob Gutschriften zu.
Bob wundert sich, warum er einige Bitcoins von einem zufälligen Fremden erhalten hat, aber da er keine Ahnung hat, wer Sie sind, und keine Möglichkeit hat, Sie zu kontaktieren, behält er sie einfach. Verdammt, vielleicht ist es eine Adresse, die er als Trinkgeld veröffentlicht hat, und er hat keinen Grund, nicht zu glauben, dass es ein Trinkgeld ist.
Alice könnte sich irgendwann fragen, warum sie ihre Bitcoins nicht bekommen hat. Wenn sie Sie kontaktiert, teilen Sie ihr die Transaktions-ID mit. Sie wird denken: "Hmm, das ist nicht meine Adresse. Aber sie muss meinem Wallet-Anbieter gehören. Also müssen sie die Bitcoins haben. Wenn ich ihnen erkläre, dass sie mir gehören, sollten sie sie mir gutschreiben."
Und jetzt haben wir ein riesiges Chaos, in dem jeder jeden beschuldigt und Alice denkt, dass ihr Wallet-Anbieter sie gestohlen hat und Sie denken, dass es nicht Ihre Schuld war. Aber du liegst falsch.
Bitte mach das nicht. Es macht keinen Sinn. (Die obige Geschichte ist real. Nur die Namen wurden geändert, um die Unschuldigen ... und die Schuldigen zu schützen.)
there is no reason to expect it to do so
warum? Der Bitcoin-Kern stellt keine Aussage über das erwartete Verhalten oder die Semantik bereit, sondern stellt nur die Referenzcodebasis bereit. Das ursprüngliche Whitepaper besagt, dass coins made from digital signatures, which provides strong control of ownership
keine Kontrolle von Benutzer zu Benutzer übertragen wird ... es besagt auch, dass a new key pair should be used
es sagen sollte, dass es nicht muss ... Ohne eine zentralisierte Autorität, die festlegt, welcher Standpunkt gültig und kanonisch ist, müssen sie beide gültig sein. Warum ist meine Sichtweise ungültig?control of ownership
in den Händen des Webanbieters liegt und es daher keine Garantien gibt, wer das Geld erhält. Der Webanbieter könnte das gesamte Geld für sich selbst stehlen, daher sollte nicht erwartet werden, dass JEDE Webanbieter-basierte Zahlungsadresse verwendet wird um Geld an den Benutzer zu senden, von dem Sie es erwarten ...That evidence is specifically what we don't have
, was ist dann "404371705fa9bd789a2fcd52d2c580b65d35549d" in OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d OP_EQUALVERIFY OP_CHECKSIG
der scriptPubKey
, und warum ist ein privater Schlüssel erforderlich, um ihn in der scriptSig
. Kryptografisch signierte Beweise.Your statement above about web providers is right
, aber ich habe ein absurdes Argument vorgebracht ( the web-provider could steal all the money for themselves [...] should not be expected to send money to the user you expect it to...
), dessen einzige Schlussfolgerung darin bestehen würde, dass niemand jemals einen Webanbieter verwenden sollte (mit Ausnahme von Geldwäsche / masochistischen Spenden auf der Grundlage von Webanbietern). Dies würde der eigentlichen Prämisse für Web-Provider-basierte Wallets widersprechen.Wie würdest du das machen?
Ich würde meine mehr oder weniger "öffentliche" Adresse angeben. Dann könnten Leute Satoshis an diese Adresse schicken. Sobald eine Transaktion mit Satoshis bestätigt ist, würde ich die Transaktion analysieren, da sie die Skriptsig und den Pubkey enthält (aus denen wir die Absenderadresse ableiten können). Also würde ich das aufbewahren und wenn es soweit ist, an diese Adresse zurücksenden. Problem hier: Es verringert die Privatsphäre. Es wird nicht empfohlen, Adressen wiederzuverwenden.
Hat Bitcoin die Möglichkeit, Münzen über dieselbe Adresse zu senden und zu empfangen?
Ja, Sie können Ihre Transaktion so einrichten/programmieren, dass Adressen wiederverwendet werden. Man muss allerdings über ausreichende Fähigkeiten verfügen :-)
oder müsste ich nach einer Rücksendeadresse fragen und die Adresse des gesendeten Betrags irgendwie mit der Rücksendeadresse verknüpfen?
Imho, das ist der bessere und gewünschte Weg, weil es die Privatsphäre schützt. Außerdem müssen Sie den Betrag nicht mit der Adresse verknüpfen - dies kann unsicher werden (zwei Personen senden denselben Betrag - wie kann man unterscheiden?). Wie zuvor kann die Transaktion überprüft werden, Sie können sig und pubkey extrahieren und den ursprünglichen Pub-Schlüssel (und seine Adresse) mit der neuen Adresse verknüpfen.
Zu Transaktionen und ihrem Inhalt: https://bitcoin.org/en/developer-reference#raw-transaction-format und auch sehr hilfreich: http://chimera.labs.oreilly.com/books/1234000001802/ch02.html# _bitcoin_transactions (und wahrscheinlich eine Million andere :-)
Uzinium
Hubert Jasienicki