Komplexere Transaktionen erstellen

Mich würde interessieren, wie man komplexere Transaktionen erstellt.
Zum Beispiel:

  • Transaktionen mit mehreren inputs und outputs aus unterschiedlichen Wallets/Konten, um einen Fake CoinJoin zu kreieren

  • Nur teilweise signierte Transaktionen, mit zusätzlichen inputs eines Freundes, die er dann noch signieren und veröffentlichen kann

CoinControl aktivieren, sofern die eigene Software-Wallet das unterstützt. Inputs aus unterschiedlichen Wallets zusammenzuführen wird etwas anspruchsvoller, da das meines Wissens kaum eine Wallet unterstützt.
CoinControl verwende ich in Electrum und Sparrow fast schon standardmäßig, insbesondere wenn ich ganz genau festlegen möchte, daß z.B. nur steuerfreie UTXO für eine Transaktion verwendet werden sollen.

Vermutlich gibt es Tools um PSBTs zusammenzuführen oder so ähnlich bzw. Bitcoin Core kann das vielleicht auch so schon alles.
PSBT = Partially Signed Bitcoin Transaction (standardisiertes Dateiaustauschformat)

Siehe auch: bitcoin/psbt.md at master · bitcoin/bitcoin · GitHub

2 „Gefällt mir“

Noch eine Anmerkung, die ich bei meiner ersten Antwort ausgelassen habe. Zum Signieren einer Transaktion, egal ob wallet-intern oder über PSBT, müssen ja stets alle Private Keys aller Inputs verfügbar sein.

Das wird etwas schwierig, wenn es um mehrere Wallets geht, da Keys in der Regel nicht über Wallet-Grenzen „vermischt“ werden (sollten).

Ich bin mir aber wirklich nicht sicher, ob man signierte Transaktionen letztlich zu einer einzigen Transaktion „mergen“ kann, bevor man sie dann ins Bitcoin-Netzwerk veröffentlicht. Interessante Fragestellung, könnte man mal im Testnet ausprobieren…

1 „Gefällt mir“

Ich verstehe nicht, was du mit vermischen meinst.
Wenn ich in einer TX inputs aus zwei Wallets haben möchte, kann ich doch einfach eine PSBT in der einen Wallet erstellen und signieren, sie dann in die andere Wallet importieren und dort erneut signieren.

Das geht (aktuell) nicht, da prinzipbedingt die Signatur ungültig wird, wenn man was an der Transaktion verändert, also Inputs oder Outputs hinzufügt.

Stimmt. Die beteiligten Wallets müssen aber natürlich PSBTs erstellen, exportieren, importieren und signieren können. Bitcoin Core hat diesbezüglich wohl die umfangreichsten Funktionalitäten.

Sparrow kann das alles von Haus aus… BTC Core ist so ne Sache da die Wallet Passwörter als Plaintext unverschlüsselt auf dem jeweiligen Host gespeichert werden.

Sorry, aber wie kommst du denn auf so einen Unsinn? Wieso „Wallet Passwörter“, also Mehrzahl? Meines Wissens kann man bei Core für eine Wallet nur ein Wallet-Passwort definieren.
Tante Edit: technisch sind mehrere Wallet-Passwörter/Passphrasen möglich, Bitcoin Core sieht das über sein GUI und RPC-Interface allerdings nicht vor.

Die wichtigen Geheimnisse einer Core Wallet sind AES-256-CBC verschlüsselt (etwas ungenau, da das eigentliche Passwort, das ein User definiert, noch eine KDF (key derivation function) mit variabler Anzahl an Runden, je nach Leistungsfähigkeit des Rechners, durchläuft; grobe Details hier: Wallet encryption - Bitcoin Wiki).

2 „Gefällt mir“

Sorry habe mich falsch ausgedrückt. Es werden keine Passwörter (oder Passwort) unverschlüsselt, sondern die private keys des Wallets selbst. Das macht die Sache nicht besser…

Quelle Sparrowwallet.com Docs:
If your wallet software is connecting directly to Bitcoin Core, you are using Bitcoin Core’s wallet internally. This is true not only for Sparrow in this configuration, but always true for Specter, FullyNoded, and of course the Bitcoin Qt wallet itself. Unfortunately, Bitcoin Core stores your public keys and balance unencrypted on the computer it is running on. If this computer is regularly connected to the internet, it is at risk to hackers - which will make you a target once your balance is discovered.

Quelle Bitcoin Github issues:

Jetzt hab ich die Tage erfahren, dass dies so nicht mehr Fall sein soll. Bin allerdings noch auf der Suche nach einer verlässlichen Quelle dazu.

Was meinst du dazu?

Ist es nicht mehr nötig, um dieses Problem aus dem Weg zu schaffen, einen Indexer wie Fulcrum oder ElectrumX ect. einzusetzen und eben NICHT das interne Wallet von BitcoinCore zu nutzen?

Public Keys sind keine Private Keys und es ist nicht schlimm, wenn diese (Public!) unverschlüsselt von Core gespeichert werden. Die Kenntnis eines Public Keys nützt dir zum Bewegen der Coins noch lange nicht, da du ohne erhebliche Arbeit nicht das ECDLP (Elyptic Curve Discrete Log Problem) lösen kannst, um vom Public Key zum Private Key zu kommen. Umgekehrt ist es kein Problem.

Es wäre mir neu, daß Private Keys in Core unverschlüsselt gespeichert werden, vielleicht, wenn man keine Walletverschlüsselungs-Passphrase definiert, was fahrlässig wäre. Mir ist nur bekannt, daß Private Keys nur für den jeweiligen Gebrauch im RAM entschlüsselt und nach Gebrauch im RAM überschrieben werden. Aber ich möchte mir nicht anmaßen, alles zu wissen.

Für die Sicherheit der Wallet spielt es keine Rolle, ob Sparrow mit Bitcoin Core oder einem Electrum Server verbunden ist. Wenn es nicht der eigene Electrum Server ist, leidet deine Adress-Privatsphäre deiner Wallet, da ein böswilliger oder datenhungriger Electrum Server sämtliche Adressen deiner Wallet zum Abgleich der Transaktionshistorie der Adressen serviert bekommt.
Deswegen betreibe ich grundsätzlich meinen eigenen Electrum Server und lenke meine Electrum- oder Sparrow-Wallets stets nur auf diesen (ich nutze gerne Fulcrum, weil der so flott ist, selbst bei großer Adresshistorie, was manchmal bei Blockchain-Forensik leicht passiert).

1 „Gefällt mir“