caravan-bitcoin / caravan

Caravan monorepo
https://caravanmultisig.com
MIT License
59 stars 71 forks source link

Import PSBT is not importing partial signatures #162

Open jbrauck-unchained opened 4 months ago

jbrauck-unchained commented 4 months ago

Recreation steps:

  1. Craft a transaction in caravan, download unsigned PSBT.
  2. Sign transaction outside of caravan, copy partially signed PSBT
  3. Import wallet config again, go to "Send", "Import PSBT"
  4. Import the partially signed PSBT
  5. Note that the signature did not carry over

This definitely feels like a bug, let me know if I am wrong.

Unsigned PSBT

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

Partially signed PSBT

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
bucko13 commented 4 months ago

Marking this as a feature request (aka "enhancement"). This is expected behavior though agreed it's undesirable. Would be a nice enhancement to auto parse any sigs as well. It should be pretty easy for someone new to the code base to resolve so marked it as a good first issue. I'm happy to try and help get someone started if they have specific questions for implementation.

asmit27rai commented 2 months ago

@bucko13 i want to work on this issue

khadar1020 commented 1 month ago

I will work on this issue

krrish-sehgal commented 1 week ago

Hello @bucko13 sir , I exported the unsigned PSBT tx formed from my 1 of 2 multisig wallet ,but i was unable to sign the inputs using the corresponding private key, because the PSBT inputs had unknown pubkeys and not the ones i used to generate my wallet.... now am not sure how this could happen, since am using the the private key for the one of the two pub keys used to form the wallet.

Any help would be appreciated.

jbrauck-unchained commented 1 week ago

Weird, looking back at my original post, I see that one PSBT has tpubs and one has xpubs usually denoting that one came from a testnet setup vs mainnet. Maybe thats what is happening with yours too?

If you have the PSBT that caused this unknown pubkeys output, I would love to take a look.

krrish-sehgal commented 1 week ago

then i tried to create a psbt , that is :

cHNidP8BAH0BAAAAAfBVf0MThVaxH7C0XqYRyMrMAchLllWPS+RkZx1MXvcMAQAAAAD/////AugDAAAAAAAAFgAUyMQ/mwniqt6z/B0gDaBCRDv9O5C/3AAAAAAAACIAIFi8ff8Kynu80ErnCuv6iKq8PqrFwsw8PTNLNivhi85CAAAAAE8BBDWHzwAAAAAAAAAAAAbnFiQRLc0Zibl6B4FfoFGuVNqdN/X70cW3b0Z+sGEzA15pjlg7JJXFaNQ/gZDjH+WmnnNtPI06pq/uQ3Fbd44ZFAAAAAAwAACAAQAAgAAAAIACAACATwEENYfPAAAAAAAAAAAAGAyZhhVjbNh1qnDHHPpre/VwGHpW2MbQVOYLZE0T6dMCPkdA0LpjniiWPzR2FXt88vt8b99CVPlwmc+GcLUF6lkUAAAAADAAAIABAACAAAAAgAIAAIAAAQDNAgAAAAABAYM+fMYv5fHY3K5O6HI22uet4X3odKoUFWYBQYgczgAoAQAAAAD9////AvBDBqIAAAAAIlEgfzOwrjt/CaDo2mbJ2cSDFzLzDGz41yCucKpPaEOUIzhW4QAAAAAAACIAIB6X/s1scoJULEWaPLDHMfV+scJ/sbkNA/PBPOHf958tAUBbl7vP5+tOyx9SnVQ49h6HJrXWmNnZVFQuXvQLh/42PKPcP2uAidWRbwSHS/ziMgz5cv21AP1Q48ueg9gKIg0BjUs/AAEBK1bhAAAAAAAAIgAgHpf+zWxyglQsRZo8sMcx9X6xwn+xuQ0D88E84d/3ny0BBUdRIQLJfcP0QgQC4BoROYQxG/ShuN43bKwL3Prxs6yB8TQzxyEDEGrzx/NkFanZZ+TNBiJ1gS6j5AnGpt94jXXkbobDPwFSriIGAsl9w/RCBALgGhE5hDEb9KG43jdsrAvc+vGzrIHxNDPHHAAAAAAwAACAAQAAgAAAAIACAACAAAAAAAAAAAAiBgMQavPH82QVqdln5M0GInWBLqPkCcam33iNdeRuhsM/ARwAAAAAMAAAgAEAAIAAAACAAgAAgAAAAAAAAAAAAAAA

I was able to solve the issue i was facing by exporting the psbt in sparrow and signing through a hardware wallet , seedsigner. Thank you for your time.

I'll work on fixing the import sigs.

krrish-sehgal commented 1 week ago

My progress so far :

  1. I have been working to simlate how sparrow takes partially signed sigs when importing psbts
  2. am able to extract partial signatures in caravan, but one thing that i notice is that if the same half/partial signed psbt is imported in sparrow and caravan , they both have a different transaction structure.

Same transaction in :

Sparrow: 0200000001039a8f1b25d0075e6b587f3eadcefedcc55236f8930016507368322874f8c42c0100000000fdffffff019745000000000000160014c8c43f9b09e2aadeb3fc1d200da042443bfd3b90b04d3f00

Caravan: 0100000001039a8f1b25d0075e6b587f3eadcefedcc55236f8930016507368322874f8c42c0100000000ffffffff019745000000000000160014c8c43f9b09e2aadeb3fc1d200da042443bfd3b9000000000

(There's a discrepancy in the version , sequence and lock time) So the same signatures that were done in sparrow , gets invalidated in caravan. Next step to resolve this.