Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure Sparrow Compatibility #54

Open
nickfarrow opened this issue Nov 7, 2022 · 13 comments
Open

Ensure Sparrow Compatibility #54

nickfarrow opened this issue Nov 7, 2022 · 13 comments

Comments

@nickfarrow
Copy link
Collaborator

Trying to open a single channel with umbrel app via sparrow.

image

Umbrel currently not displaying anything in logs other than Listening on: http://0.0.0.0:4444, will add more info here once I get it.

@DanGould
Copy link
Contributor

DanGould commented Nov 7, 2022

from you or user submitted?

@nickfarrow
Copy link
Collaborator Author

From me

Any ideas for how we should approach sender errors? We've got a variety of errors in various apps, but i guess the best we can do is focus on our side of things (noting some errors may not be our fault)

Could make an issue for each sender, to track down what isn't working. Or make this into a super-issue and catalog all sender errors

@DanGould
Copy link
Contributor

DanGould commented Nov 8, 2022

What does sparrow show in the log?

@nickfarrow
Copy link
Collaborator Author

2022-11-09 16:32:18,899 ERROR Error parsing received PSBT
com.sparrowwallet.drongo.psbt.PSBTParseException: Provided string is not a PSBT
	at com.sparrowwallet.drongo/com.sparrowwallet.drongo.psbt.PSBT.fromString(Unknown Source)
	at com.sparrowwallet.drongo/com.sparrowwallet.drongo.psbt.PSBT.fromString(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin.requestPayjoinPSBT(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Task$TaskCallable.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Service.lambda$executeTask$7(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

@nickfarrow
Copy link
Collaborator Author

nickfarrow commented Nov 9, 2022

I think this commit may actually be causing issues: getumbrel/umbrel-apps@5a00470
From what I can see so far, this puts some auth on which prevents fetching the endpoint.

After removing this proxy auth, i get: 502 (removed because not actually a bug nor sparrow related)

@DanGould
Copy link
Contributor

DanGould commented Nov 9, 2022

looks like proxy_auth needs to be false or else we can't even connect. Before, we were getting a response. Could you find that PSBT response on the server side?

@nickfarrow
Copy link
Collaborator Author

This 502 was actually OK (panicked because channel size too small) so just looks like we need to get rid of the proxy auth

@nickfarrow nickfarrow changed the title Payjoin receiver returned invalid PSBT (Sparrow) Sparrow payjoin superissue Nov 9, 2022
@nickfarrow
Copy link
Collaborator Author

Outputs not included in proposal

image
Sparrow logs:
image

Tx:
image

Nolooking logs (umbrel)

server_1      | Proposal PSBT that will be returned: PartiallySignedTransaction {
server_1      |     unsigned_tx: Transaction {
server_1      |         version: 2,
server_1      |         lock_time: 762440,
server_1      |         input: [
server_1      |             TxIn {
server_1      |                 previous_output: OutPoint {
server_1      |                     txid: ea61f7c3529d388b618f24cafb1f50fde9629c41c7c962df1bc222f7e8164110,
server_1      |                     vout: 2,
server_1      |                 },
server_1      |                 script_sig: Script(),
server_1      |                 sequence: 4294967293,
server_1      |                 witness: Witness {
server_1      |                     content: [],
server_1      |                     witness_elements: 0,
server_1      |                     last: 0,
server_1      |                     second_to_last: 0,
server_1      |                 },
server_1      |             },
server_1      |             TxIn {
server_1      |                 previous_output: OutPoint {
server_1      |                     txid: 7eb3fe3fdc340d854656013e5e96efa44b023a6495f1e907dc54f72d90c510e7,
server_1      |                     vout: 1,
server_1      |                 },
server_1      |                 script_sig: Script(),
server_1      |                 sequence: 4294967293,
server_1      |                 witness: Witness {
server_1      |                     content: [],
server_1      |                     witness_elements: 0,
server_1      |                     last: 0,
server_1      |                     second_to_last: 0,
server_1      |                 },
server_1      |             },
server_1      |             TxIn {
server_1      |                 previous_output: OutPoint {
server_1      |                     txid: 08b584caafbebd5d9d22b700287005e06d3f3cd8be7742880c61bd7f50df7147,
server_1      |                     vout: 1,
server_1      |                 },
server_1      |                 script_sig: Script(),
server_1      |                 sequence: 4294967293,
server_1      |                 witness: Witness {
server_1      |                     content: [],
server_1      |                     witness_elements: 0,
server_1      |                     last: 0,
server_1      |                     second_to_last: 0,
server_1      |                 },
server_1      |             },
server_1      |         ],
server_1      |         output: [
server_1      |             TxOut {
server_1      |                 value: 250000,
server_1      |                 script_pubkey: Script(OP_0 OP_PUSHBYTES_32 fe5505644ba23c41c928319da17053de36e323a598736710d11e4797fce1c842),
server_1      |             },
server_1      |             TxOut {
server_1      |                 value: 147652,
server_1      |                 script_pubkey: Script(OP_0 OP_PUSHBYTES_20 be75cb745181c2a5185a34f26581d64cf8c0256f),
server_1      |             },
server_1      |             TxOut {
server_1      |                 value: 150000,
server_1      |                 script_pubkey: Script(OP_0 OP_PUSHBYTES_32 7c289c66ec08890ece87e370077863f59657c75cc270805d4e062414f9b9b50e),
server_1      |             },
server_1      |         ],
server_1      |     },
server_1      |     version: 0,
server_1      |     xpub: {},
server_1      |     proprietary: {},
server_1      |     unknown: {},
server_1      |     inputs: [
server_1      |         Input {
server_1      |             non_witness_utxo: None,
server_1      |             witness_utxo: None,
server_1      |             partial_sigs: {},
server_1      |             sighash_type: None,
server_1      |             redeem_script: None,
server_1      |             witness_script: None,
server_1      |             bip32_derivation: {},
server_1      |             final_script_sig: None,
server_1      |             final_script_witness: None,
server_1      |             ripemd160_preimages: {},
server_1      |             sha256_preimages: {},
server_1      |             hash160_preimages: {},
server_1      |             hash256_preimages: {},
server_1      |             tap_key_sig: None,
server_1      |             tap_script_sigs: {},
server_1      |             tap_scripts: {},
server_1      |             tap_key_origins: {},
server_1      |             tap_internal_key: None,
server_1      |             tap_merkle_root: None,
server_1      |             proprietary: {},
server_1      |             unknown: {},
server_1      |         },
server_1      |         Input {
server_1      |             non_witness_utxo: None,
server_1      |             witness_utxo: None,
server_1      |             partial_sigs: {},
server_1      |             sighash_type: None,
server_1      |             redeem_script: None,
server_1      |             witness_script: None,
server_1      |             bip32_derivation: {},
server_1      |             final_script_sig: None,
server_1      |             final_script_witness: None,
server_1      |             ripemd160_preimages: {},
server_1      |             sha256_preimages: {},
server_1      |             hash160_preimages: {},
server_1      |             hash256_preimages: {},
server_1      |             tap_key_sig: None,
server_1      |             tap_script_sigs: {},
server_1      |             tap_scripts: {},
server_1      |             tap_key_origins: {},
server_1      |             tap_internal_key: None,
server_1      |             tap_merkle_root: None,
server_1      |             proprietary: {},
server_1      |             unknown: {},
server_1      |         },
server_1      |         Input {
server_1      |             non_witness_utxo: None,
server_1      |             witness_utxo: None,
server_1      |             partial_sigs: {},
server_1      |             sighash_type: None,
server_1      |             redeem_script: None,
server_1      |             witness_script: None,
server_1      |             bip32_derivation: {},
server_1      |             final_script_sig: None,
server_1      |             final_script_witness: None,
server_1      |             ripemd160_preimages: {},
server_1      |             sha256_preimages: {},
server_1      |             hash160_preimages: {},
server_1      |             hash256_preimages: {},
server_1      |             tap_key_sig: None,
server_1      |             tap_script_sigs: {},
server_1      |             tap_scripts: {},
server_1      |             tap_key_origins: {},
server_1      |             tap_internal_key: None,
server_1      |             tap_merkle_root: None,
server_1      |             proprietary: {},
server_1      |             unknown: {},
server_1      |         },
server_1      |     ],
server_1      |     outputs: [
server_1      |         Output {
server_1      |             redeem_script: None,
server_1      |             witness_script: None,
server_1      |             bip32_derivation: {},
server_1      |             tap_internal_key: None,
server_1      |             tap_tree: None,
server_1      |             tap_key_origins: {},
server_1      |             proprietary: {},
server_1      |             unknown: {},
server_1      |         },
server_1      |         Output {
server_1      |             redeem_script: None,
server_1      |             witness_script: None,
server_1      |             bip32_derivation: {},
server_1      |             tap_internal_key: None,
server_1      |             tap_tree: None,
server_1      |             tap_key_origins: {},
server_1      |             proprietary: {},
server_1      |             unknown: {},
server_1      |         },
server_1      |         Output {
server_1      |             redeem_script: None,
server_1      |             witness_script: None,
server_1      |             bip32_derivation: {},
server_1      |             tap_internal_key: None,
server_1      |             tap_tree: None,
server_1      |             tap_key_origins: {},
server_1      |             proprietary: {},
server_1      |             unknown: {},
server_1      |         },
server_1      |     ],
server_1      | }

@nickfarrow
Copy link
Collaborator Author

nickfarrow commented Nov 22, 2022

Running nolooking over tor (not on umbrel), trying to payjoin with sparrow:
image

2022-11-22 15:29:30,624 ERROR Payjoin receiver error
javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
	at java.base/sun.security.ssl.SSLSocketInputRecord.handleUnknownRecord(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketInputRecord.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(Unknown Source)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin.requestPayjoinPSBT(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Task$TaskCallable.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Service.lambda$executeTask$7(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)




Edit: This happens when you put https://<onion> it should be http://

@nickfarrow
Copy link
Collaborator Author

Runningnolooking 0.2.1-alpha on umbrel, trying to payjoin with sparrow:
image

2022-11-22 16:15:43,240 ERROR Payjoin receiver error
java.io.IOException: Server returned HTTP response code: 400 for URL: http://i6tjwsrns5v5yfwq72dptd2jvqdutpspsnbztbettm76kt64jj3guvad.onion:3000/pj?v=1&additionalfeeoutputindex=1&maxadditionalfeecontribution=163
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin.requestPayjoinPSBT(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Task$TaskCallable.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at javafx.graphics@18/javafx.concurrent.Service.lambda$executeTask$7(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

Umbrel logs:

server_1      | [2022-11-22T05:16:38Z INFO  nolooking::scheduler] Proposal PSBT that will be returned: PartiallySignedTransaction {
server_1      |         unsigned_tx: Transaction {
server_1      |             version: 2,
server_1      |             lock_time: 764227,
server_1      |             input: [
server_1      |                 TxIn {
server_1      |                     previous_output: OutPoint {
server_1      |                         txid: ebe........................................08d,
server_1      |                         vout: 0,
server_1      |                     },
server_1      |                     script_sig: Script(),
server_1      |                     sequence: 4294967293,
server_1      |                     witness: Witness {
server_1      |                         content: [],
server_1      |                         witness_elements: 0,
server_1      |                         last: 0,
server_1      |                         second_to_last: 0,
server_1      |                     },
server_1      |                 },
server_1      |                 TxIn {
server_1      |                     previous_output: OutPoint {
server_1      |                         txid: 52f6........................................81c,
server_1      |                         vout: 0,
server_1      |                     },
server_1      |                     script_sig: Script(),
server_1      |                     sequence: 4294967293,
server_1      |                     witness: Witness {
server_1      |                         content: [],
server_1      |                         witness_elements: 0,
server_1      |                         last: 0,
server_1      |                         second_to_last: 0,
server_1      |                     },
server_1      |                 },
server_1      |             ],
server_1      |             output: [
server_1      |                 TxOut {
server_1      |                     value: 200000,
server_1      |                     script_pubkey: Script(OP_0 OP_PUSHBYTES_32 df7dd6baa0c1837cdc4454a1adbe77db2b828b5c596f063ec70773c0b50f65eb),
server_1      |                 },
server_1      |                 TxOut {
server_1      |                     value: 34005,
server_1      |                     script_pubkey: Script(OP_0 OP_PUSHBYTES_20 14c62abf9493c7e2416b84ce26f604a255901b9b),
server_1      |                 },
server_1      |                 TxOut {
server_1      |                     value: 30000,
server_1      |                     script_pubkey: Script(OP_PUSHNUM_1 OP_PUSHBYTES_32 3b9e39194caa093b06fae9351bb1333a584678c57c9cc9223b8fd9903fc8de6b),
server_1      |                 },
server_1      |             ],
server_1      |         },
server_1      |         version: 0,
server_1      |         xpub: {},
server_1      |         proprietary: {},
server_1      |         unknown: {},
server_1      |         inputs: [
server_1      |             Input {
server_1      |                 non_witness_utxo: None,
server_1      |                 witness_utxo: None,
server_1      |                 partial_sigs: {},
server_1      |                 sighash_type: None,
server_1      |                 redeem_script: None,
server_1      |                 witness_script: None,
server_1      |                 bip32_derivation: {},
server_1      |                 final_script_sig: None,
server_1      |                 final_script_witness: None,
server_1      |                 ripemd160_preimages: {},
server_1      |                 sha256_preimages: {},
server_1      |                 hash160_preimages: {},
server_1      |                 hash256_preimages: {},
server_1      |                 tap_key_sig: None,
server_1      |                 tap_script_sigs: {},
server_1      |                 tap_scripts: {},
server_1      |                 tap_key_origins: {},
server_1      |                 tap_internal_key: None,
server_1      |                 tap_merkle_root: None,
server_1      |                 proprietary: {},
server_1      |                 unknown: {},
server_1      |             },
server_1      |             Input {
server_1      |                 non_witness_utxo: None,
server_1      |                 witness_utxo: None,
server_1      |                 partial_sigs: {},
server_1      |                 sighash_type: None,
server_1      |                 redeem_script: None,
server_1      |                 witness_script: None,
server_1      |                 bip32_derivation: {},
server_1      |                 final_script_sig: None,
server_1      |                 final_script_witness: None,
server_1      |                 ripemd160_preimages: {},
server_1      |                 sha256_preimages: {},
server_1      |                 hash160_preimages: {},
server_1      |                 hash256_preimages: {},
server_1      |                 tap_key_sig: None,
server_1      |                 tap_script_sigs: {},
server_1      |                 tap_scripts: {},
server_1      |                 tap_key_origins: {},
server_1      |                 tap_internal_key: None,
server_1      |                 tap_merkle_root: None,
server_1      |                 proprietary: {},
server_1      |                 unknown: {},
server_1      |             },
server_1      |         ],
server_1      |         outputs: [
server_1      |             Output {
server_1      |                 redeem_script: None,
server_1      |                 witness_script: None,
server_1      |                 bip32_derivation: {},
server_1      |                 tap_internal_key: None,
server_1      |                 tap_tree: None,
server_1      |                 tap_key_origins: {},
server_1      |                 proprietary: {},
server_1      |                 unknown: {},
server_1      |             },
server_1      |             Output {
server_1      |                 redeem_script: None,
server_1      |                 witness_script: None,
server_1      |                 bip32_derivation: {},
server_1      |                 tap_internal_key: None,
server_1      |                 tap_tree: None,
server_1      |                 tap_key_origins: {},
server_1      |                 proprietary: {},
server_1      |                 unknown: {},
server_1      |             },
server_1      |             Output {
server_1      |                 redeem_script: None,
server_1      |                 witness_script: None,
server_1      |                 bip32_derivation: {},
server_1      |                 tap_internal_key: None,
server_1      |                 tap_tree: None,
server_1      |                 tap_key_origins: {},
server_1      |                 proprietary: {},
server_1      |                 unknown: {},
server_1      |             },
server_1      |         ],
server_1      |     }

@nickfarrow
Copy link
Collaborator Author

nickfarrow commented Nov 22, 2022

Successfully created two payjoins via the umbrel app & sparrow (one with inbound payment, one without) 🌠

@DanGould
Copy link
Contributor

DanGould commented Dec 14, 2022

@nickfarrow Is this still an issue or did getumbrel/umbrel-apps#261 fix it

@DanGould
Copy link
Contributor

DanGould commented Apr 2, 2023

I have a feeling this issue has been resolved with the new payjoin crate update. Verification will require manual testing.

@DanGould DanGould changed the title Sparrow payjoin superissue Ensure Sparrow Compatibility Apr 2, 2023
@DanGould DanGould moved this to Todo in Payjoin Roadmap 📝 Apr 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Todo
Development

No branches or pull requests

2 participants