BlockchainCommons / GordianWallet-iOS

iOS wallet linked by Torgap to your own full-node server
Other
47 stars 14 forks source link

Wallet claims non-change on PSBT is change! #110

Closed mflaxman closed 3 years ago

mflaxman commented 3 years ago

Input: psbt

Or as a PSBT: cHNidP8BAH0CAAAAAfsWeOlaFJKfqlQHzx+WgjRJlEB9XLzMCXchCw4si7PDAQAAAAD/////AoUIAAAAAAAAIgAgxb6HvJsx6G8mjBf/ERAtVkJHNNu5n0t6JaZr54V3Og7WHQAAAAAAABYAFMINV2dNtzP+jUjqf2bIwsPrqp+7AAAAAAABASsQJwAAAAAAACIAIDuuQfOewCl82IjzKJAjQy5pUQKaE7HBtEJA5pYh/y54AQWLUSECOLBbCCUjX61VtXIa9P1ZPhpsz0okfHLI8lQM/2dlnQshA1gkYwW4I1IawxzVo8L53yV1y/R7Jq3aeypId5KPdevNIQOv86ZXTRchmJ8w5IXJ9Vx18yQxUytq3xkZdCBKn4vTgiEDsT5favW6RBtmK7GQJ3HBl3p4AXDoJU6HAYrl9XXna/1UriIGAjiwWwglI1+tVbVyGvT9WT4abM9KJHxyyPJUDP9nZZ0LHBKYDu0wAACAAQAAgAAAAIACAACAAAAAAAcAAAAiBgNYJGMFuCNSGsMc1aPC+d8ldcv0eyat2nsqSHeSj3XrzRz30ECQMAAAgAEAAIAAAACAAgAAgAAAAAAHAAAAIgYDr/OmV00XIZifMOSFyfVcdfMkMVMrat8ZGXQgSp+L04Icx9BkijAAAIABAACAAAAAgAIAAIAAAAAABwAAACIGA7E+X2r1ukQbZiuxkCdxwZd6eAFw6CVOhwGK5fV152v9HDpStc0wAACAAQAAgAAAAIACAACAAAAAAAcAAAAAAQGLUSECPVlulR9WOiDFRX7p3cyIGDbmMn0qBJA0WHIRc6PWFlwhAskkzwGB+E7aT3ibDWIVgqmC1VprCHUq4OMVlzKJTZAdIQLfBhkEe8XmHQSm0vTSu2XZEQu58w9z4cBm7pzF5HC0gCED00gxYCXN/UhH6szbR+Ydq5+gxZN45Am/ruggbkUuSLRUriICAj1ZbpUfVjogxUV+6d3MiBg25jJ9KgSQNFhyEXOj1hZcHPfQQJAwAACAAQAAgAAAAIACAACAAQAAAAIAAAAiAgLJJM8BgfhO2k94mw1iFYKpgtVaawh1KuDjFZcyiU2QHRw6UrXNMAAAgAEAAIAAAACAAgAAgAEAAAACAAAAIgIC3wYZBHvF5h0EptL00rtl2RELufMPc+HAZu6cxeRwtIAcEpgO7TAAAIABAACAAAAAgAIAAIABAAAAAgAAACICA9NIMWAlzf1IR+rM20fmHaufoMWTeOQJv67oIG5FLki0HMfQZIowAACAAQAAgAAAAIACAACAAQAAAAIAAAAAAA==

1-of-4 output descriptor (not strictly required but Gordian requires it): { "label": "Any Recovery", "blockheight": 1863986, "descriptor": "wsh(sortedmulti(1,[c7d0648a\/48h\/1h\/0h\/2h]tpubDEpefcgzY6ZyEV2uF4xcW2z8bZ3DNeWx9h2BcwcX973BHrmkQxJhpAXoSWZeHkmkiTtnUjfERsTDTVCcifW6po3PFR1JRjUUTJHvPpDqJhr\/0\/*,[12980eed\/48h\/1h\/0h\/2h]tpubDEkXGoQhYLFnYyzUGadtceUKbzVfXVorJEdo7c6VKJLHrULhpSVLC7fo89DDhjHmPvvNyrun2LTWH6FYmHh5VaQYPLEqLviVQKh45ufz8Ae\/0\/*,[3a52b5cd\/48h\/1h\/0h\/2h]tpubDFdbVee2Zna6eL9TkYBZDJVJ3RxGYWgChksXBRgw6y6PU1jWPTXUqag3CBMd6VDwok1hn5HZGvg6ujsTLXykrS3DwbxqCzEvWoT49gRJy7s\/0\/*,[f7d04090\/48h\/1h\/0h\/2h]tpubDF7FTuPECTePubPXNK73TYCzV3nRWaJnRwTXD28kh6Fz4LcaRzWwNtX153J7WeJFcQB2T6k9THd424Kmjs8Ps1FC1Xb81TXTxxbGZrLqQNp\/0\/*))#tatkmj5q" }

Seed: defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense another

This is the TX confirmation screen: C6E481B8-2FFF-4B16-8317-11E49F1E5459_1_105_c

Note that tb1qcgx4we6dkuelar2gaflkdjxzc04648am6wgcvn is a testing address for a single-sig wallet (not related to this at all). I suspect also that Gordian is not correctly validating change (when it is change).

--

For reference, here's the exact same TX on multiwallet:

$ python multiwallet.py 
Welcome to multiwallet, a stateless multisig ONLY wallet. Type help or ? to list commands.

(₿) send
Paste partially signed bitcoin transaction (PSBT) in base64 form: cHNidP8BAH0CAAAAAfsWeOlaFJKfqlQHzx+WgjRJlEB9XLzMCXchCw4si7PDAQAAAAD/////AoUIAAAAAAAAIgAgxb6HvJsx6G8mjBf/ERAtVkJHNNu5n0t6JaZr54V3Og7WHQAAAAAAABYAFMINV2dNtzP+jUjqf2bIwsPrqp+7AAAAAAABASsQJwAAAAAAACIAIDuuQfOewCl82IjzKJAjQy5pUQKaE7HBtEJA5pYh/y54AQWLUSECOLBbCCUjX61VtXIa9P1ZPhpsz0okfHLI8lQM/2dlnQshA1gkYwW4I1IawxzVo8L53yV1y/R7Jq3aeypId5KPdevNIQOv86ZXTRchmJ8w5IXJ9Vx18yQxUytq3xkZdCBKn4vTgiEDsT5favW6RBtmK7GQJ3HBl3p4AXDoJU6HAYrl9XXna/1UriIGAjiwWwglI1+tVbVyGvT9WT4abM9KJHxyyPJUDP9nZZ0LHBKYDu0wAACAAQAAgAAAAIACAACAAAAAAAcAAAAiBgNYJGMFuCNSGsMc1aPC+d8ldcv0eyat2nsqSHeSj3XrzRz30ECQMAAAgAEAAIAAAACAAgAAgAAAAAAHAAAAIgYDr/OmV00XIZifMOSFyfVcdfMkMVMrat8ZGXQgSp+L04Icx9BkijAAAIABAACAAAAAgAIAAIAAAAAABwAAACIGA7E+X2r1ukQbZiuxkCdxwZd6eAFw6CVOhwGK5fV152v9HDpStc0wAACAAQAAgAAAAIACAACAAAAAAAcAAAAAAQGLUSECPVlulR9WOiDFRX7p3cyIGDbmMn0qBJA0WHIRc6PWFlwhAskkzwGB+E7aT3ibDWIVgqmC1VprCHUq4OMVlzKJTZAdIQLfBhkEe8XmHQSm0vTSu2XZEQu58w9z4cBm7pzF5HC0gCED00gxYCXN/UhH6szbR+Ydq5+gxZN45Am/ruggbkUuSLRUriICAj1ZbpUfVjogxUV+6d3MiBg25jJ9KgSQNFhyEXOj1hZcHPfQQJAwAACAAQAAgAAAAIACAACAAQAAAAIAAAAiAgLJJM8BgfhO2k94mw1iFYKpgtVaawh1KuDjFZcyiU2QHRw6UrXNMAAAgAEAAIAAAACAAgAAgAEAAAACAAAAIgIC3wYZBHvF5h0EptL00rtl2RELufMPc+HAZu6cxeRwtIAcEpgO7TAAAIABAACAAAAAgAIAAIABAAAAAgAAACICA9NIMWAlzf1IR+rM20fmHaufoMWTeOQJv67oIG5FLki0HMfQZIowAACAAQAAgAAAAIACAACAAQAAAAIAAAAAAA==
Use Mainnet? [y/N]: 
Enter your 24 word BIP39 seed phrase: defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense defense another
Units to diplay [BTC/sats]: 
PSBT sends 0.00007638 BTC to tb1qcgx4we6dkuelar2gaflkdjxzc04648am6wgcvn with a fee of 0.00000181 BTC (1.81% of spend)
In Depth Transaction View? [y/N]: 
Sign this transaction? [Y/n]: 

Signed PSBT to broadcast:

cHNidP8BAH0CAAAAAfsWeOlaFJKfqlQHzx+WgjRJlEB9XLzMCXchCw4si7PDAQAAAAD/////AoUIAAAAAAAAIgAgxb6HvJsx6G8mjBf/ERAtVkJHNNu5n0t6JaZr54V3Og7WHQAAAAAAABYAFMINV2dNtzP+jUjqf2bIwsPrqp+7AAAAAAABASsQJwAAAAAAACIAIDuuQfOewCl82IjzKJAjQy5pUQKaE7HBtEJA5pYh/y54IgIDsT5favW6RBtmK7GQJ3HBl3p4AXDoJU6HAYrl9XXna/1HMEQCIAtqzxtvceq++z+WexbfYTtGPnDyLM2jnk0oqErDH9ydAiBGx4mMPkZFQeR1PF7TO2wRbwSKoQBoDHLF3Mvg0JyGWwEBBYtRIQI4sFsIJSNfrVW1chr0/Vk+GmzPSiR8csjyVAz/Z2WdCyEDWCRjBbgjUhrDHNWjwvnfJXXL9Hsmrdp7Kkh3ko91680hA6/zpldNFyGYnzDkhcn1XHXzJDFTK2rfGRl0IEqfi9OCIQOxPl9q9bpEG2YrsZAnccGXengBcOglTocBiuX1dedr/VSuIgYCOLBbCCUjX61VtXIa9P1ZPhpsz0okfHLI8lQM/2dlnQscEpgO7TAAAIABAACAAAAAgAIAAIAAAAAABwAAACIGA1gkYwW4I1IawxzVo8L53yV1y/R7Jq3aeypId5KPdevNHPfQQJAwAACAAQAAgAAAAIACAACAAAAAAAcAAAAiBgOv86ZXTRchmJ8w5IXJ9Vx18yQxUytq3xkZdCBKn4vTghzH0GSKMAAAgAEAAIAAAACAAgAAgAAAAAAHAAAAIgYDsT5favW6RBtmK7GQJ3HBl3p4AXDoJU6HAYrl9XXna/0cOlK1zTAAAIABAACAAAAAgAIAAIAAAAAABwAAAAABAYtRIQI9WW6VH1Y6IMVFfundzIgYNuYyfSoEkDRYchFzo9YWXCECySTPAYH4TtpPeJsNYhWCqYLVWmsIdSrg4xWXMolNkB0hAt8GGQR7xeYdBKbS9NK7ZdkRC7nzD3PhwGbunMXkcLSAIQPTSDFgJc39SEfqzNtH5h2rn6DFk3jkCb+u6CBuRS5ItFSuIgICPVlulR9WOiDFRX7p3cyIGDbmMn0qBJA0WHIRc6PWFlwc99BAkDAAAIABAACAAAAAgAIAAIABAAAAAgAAACICAskkzwGB+E7aT3ibDWIVgqmC1VprCHUq4OMVlzKJTZAdHDpStc0wAACAAQAAgAAAAIACAACAAQAAAAIAAAAiAgLfBhkEe8XmHQSm0vTSu2XZEQu58w9z4cBm7pzF5HC0gBwSmA7tMAAAgAEAAIAAAACAAgAAgAEAAAACAAAAIgID00gxYCXN/UhH6szbR+Ydq5+gxZN45Am/ruggbkUuSLQcx9BkijAAAIABAACAAAAAgAIAAIABAAAAAgAAAAAA

Screen Shot 2020-11-01 at 4 38 51 PM

Painful UX issues I came across along the way:

  1. There is no way to enter a valid 24 word seed phrase without along the way dismissing a giant pop-up telling you that it is invalid: 3F225E5D-3C77-49EA-BC4A-83780D8A0256_1_105_c
  2. If you scan the PSBT from the "Out" tab (seems to be the place in the UX for sending transactions) you get this error: EBECF127-2317-49F9-BA0B-B8DE237AECD5_1_105_c
  3. If you scan the PSBT from the "Accounts tab" you get:" IMG_1217`
Fonta1n3 commented 3 years ago

You can scan psbt's from the home screen (the only one you didn't try apparently 😂).

Appreciate the detailed issue and will look into it!

mflaxman commented 3 years ago

The Home screen scan is what generated the invalid change error (title of GitHub issue)

Fonta1n3 commented 3 years ago

1-of-4 output descriptor (not strictly required but Gordian requires it): { "label": "Any Recovery", "blockheight": 1863986, "descriptor": "wsh(sortedmulti(1,[c7d0648a\/48h\/1h\/0h\/2h]tpubDEpefcgzY6ZyEV2uF4xcW2z8bZ3DNeWx9h2BcwcX973BHrmkQxJhpAXoSWZeHkmkiTtnUjfERsTDTVCcifW6po3PFR1JRjUUTJHvPpDqJhr\/0\/*,[12980eed\/48h\/1h\/0h\/2h]tpubDEkXGoQhYLFnYyzUGadtceUKbzVfXVorJEdo7c6VKJLHrULhpSVLC7fo89DDhjHmPvvNyrun2LTWH6FYmHh5VaQYPLEqLviVQKh45ufz8Ae\/0\/*,[3a52b5cd\/48h\/1h\/0h\/2h]tpubDFdbVee2Zna6eL9TkYBZDJVJ3RxGYWgChksXBRgw6y6PU1jWPTXUqag3CBMd6VDwok1hn5HZGvg6ujsTLXykrS3DwbxqCzEvWoT49gRJy7s\/0\/*,[f7d04090\/48h\/1h\/0h\/2h]tpubDF7FTuPECTePubPXNK73TYCzV3nRWaJnRwTXD28kh6Fz4LcaRzWwNtX153J7WeJFcQB2T6k9THd424Kmjs8Ps1FC1Xb81TXTxxbGZrLqQNp\/0\/*))#tatkmj5q" }

Did you get this from Gordian or did you import this into Gordian?

I am trying to understand if the wallet that created the psbt belonged to the current Active Account on Gordian at the time that you scanned the psbt?

Fonta1n3 commented 3 years ago

111 Fixes the specific issue of the wallet claiming both outputs are change when uploading a psbt. This was a bug for psbt's which are not created via the app itself. It is being uploaded to Testflight now under version 0.2.2