payjoin / nolooking

Batched Channels from a PayJoin ⚡️🔀
40 stars 8 forks source link

Ensure Sparrow Compatibility #54

Open nickfarrow opened 2 years ago

nickfarrow commented 2 years ago

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 commented 2 years ago

from you or user submitted?

nickfarrow commented 2 years ago

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 commented 2 years ago

What does sparrow show in the log?

nickfarrow commented 2 years ago
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 com.sparrowwallet.sparrow@1.7.0/com.sparrowwallet.sparrow.payjoin.Payjoin.requestPayjoinPSBT(Unknown Source)
    at com.sparrowwallet.sparrow@1.7.0/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
    at com.sparrowwallet.sparrow@1.7.0/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 commented 2 years ago

I think this commit may actually be causing issues: https://github.com/getumbrel/umbrel-apps/pull/229/commits/5a0047096d1da1bc82a3233bdc38e97234cbfa0b 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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 com.sparrowwallet.sparrow@1.7.1/com.sparrowwallet.sparrow.payjoin.Payjoin.requestPayjoinPSBT(Unknown Source)
    at com.sparrowwallet.sparrow@1.7.1/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
    at com.sparrowwallet.sparrow@1.7.1/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 commented 2 years ago

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 com.sparrowwallet.sparrow@1.7.1/com.sparrowwallet.sparrow.payjoin.Payjoin.requestPayjoinPSBT(Unknown Source)
    at com.sparrowwallet.sparrow@1.7.1/com.sparrowwallet.sparrow.payjoin.Payjoin$RequestPayjoinPSBTService$1.call(Unknown Source)
    at com.sparrowwallet.sparrow@1.7.1/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 commented 2 years ago

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

DanGould commented 1 year ago

@nickfarrow Is this still an issue or did https://github.com/getumbrel/umbrel-apps/pull/261 fix it

DanGould commented 1 year ago

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