Giter Site home page Giter Site logo

sparrowwallet / sparrow Goto Github PK

View Code? Open in Web Editor NEW
1.1K 42.0 147.0 644.67 MB

Desktop Bitcoin Wallet focused on security and privacy. Free and open source.

Home Page: https://sparrowwallet.com/

License: Apache License 2.0

Java 98.53% CSS 1.46% Batchfile 0.01% Shell 0.01%
bitcoin bitcoin-wallet

sparrow's Introduction

Sparrow Bitcoin Wallet

Sparrow is a modern desktop Bitcoin wallet application supporting most hardware wallets and built on common standards such as PSBT, with an emphasis on transparency and usability.

More information (and release binaries) can be found at https://sparrowwallet.com. Release binaries are also available directly from GitHub.

Sparrow Wallet

Building

To clone this project, use

git clone --recursive [email protected]:sparrowwallet/sparrow.git

or for those without SSH credentials:

git clone --recursive https://github.com/sparrowwallet/sparrow.git

In order to build, Sparrow requires Java 18 or higher to be installed. The release binaries are built with Eclipse Temurin 18.0.1+10.

Other packages may also be necessary to build depending on the platform. On Debian/Ubuntu systems:

sudo apt install -y rpm fakeroot binutils

The Sparrow binaries can be built from source using

./gradlew jpackage

Note that to build the Windows installer, you will need to install WiX.

When updating to the latest HEAD

git pull --recurse-submodules

The release binaries are reproducible from v1.5.0 onwards (pre codesigning and installer packaging). More detailed instructions on reproducing the binaries are provided.

Video documentation of your build process uploaded to bitcoinbinary.org is appreciated. Alternatively check the site if you wish to see if someone else already verified the provided binaries.

Running

If you prefer to run Sparrow directly from source, it can be launched from within the project directory with

./sparrow

Java 18 or higher must be installed.

Configuration

Sparrow has a number of command line options, for example to change its home folder or use testnet:

./sparrow -h

Usage: sparrow [options]
  Options:
    --dir, -d
      Path to Sparrow home folder
    --help, -h
      Show usage
    --level, -l
      Set log level
      Possible Values: [ERROR, WARN, INFO, DEBUG, TRACE]      
    --network, -n
      Network to use
      Possible Values: [mainnet, testnet, regtest, signet]

As a fallback, the network (mainnet, testnet, regtest or signet) can also be set using an environment variable SPARROW_NETWORK. For example:

export SPARROW_NETWORK=testnet

A final fallback which can be useful when running the Sparrow binary is to create a file called network-testnet in the Sparrow home folder (see below) to configure the testnet network.

Note that if you are connecting to an Electrum server when using testnet, that server will need to be running on testnet configuration as well.

When not explicitly configured using the command line argument above, Sparrow stores its mainnet config file, log file and wallets in a home folder location appropriate to the operating system:

Platform Location
OSX ~/.sparrow
Linux ~/.sparrow
Windows %APPDATA%/Sparrow

Testnet, regtest and signet configurations (along with their wallets) are stored in subfolders to allow easy switching between networks.

Reporting Issues

Please use the Issues tab above to report an issue. If possible, look in the sparrow.log file in the configuration directory for information helpful in debugging.

License

Sparrow is licensed under the Apache 2 software licence.

GPG Key

The Sparrow release binaries here and on sparrowwallet.com are signed using craigraw's GPG key:
Fingerprint: D4D0D3202FC06849A257B38DE94618334C674B40
64-bit: E946 1833 4C67 4B40

Credit

Yourkit

Sparrow Wallet uses the Yourkit Java Profiler to profile and improve performance. YourKit supports open source projects with useful tools for monitoring and profiling Java and .NET applications.

sparrow's People

Contributors

alaznem avatar bitcoinhodler avatar bitcoinqna avatar craigraw avatar finab1 avatar grettke avatar haakonn avatar jimbojw avatar krzyczak avatar lukechilds avatar msgilligan avatar nyxnor avatar princeofegypt avatar requestprivacy avatar rex4539 avatar romanz avatar sashafklein avatar secondl1ght avatar toporin avatar zeroleak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sparrow's Issues

Error connecting Ledger to Multisig

Trying to add my Ledger Nano S to my 2-3 MultiSig. Whenever I scan for hardware wallets (The ledger is unlocked and on the bitcoin app) I receive this error message:
2020-09-02_21-08
I do not know what is causing the problem, nor any solution on how to fix it.

Freeze UTXO option

There are many dust attacks by chainanalysis these days. An option to freeze UTXOs seems necessary.

Hide already used addresses

Hi!

Is there a way to hide already used Bitcoin addresses, without UTXOs, from the Addresses table?

If not, could you add it?

Thx

Sparrow and Electrum produce different signatures

Hi!

I recently tried to sign a message from Sparrow, to prove my ownership of an address, but the signature got rejected on the website. So I tried with Electrum: I exported the wallet, opened it in Electrum, and signed the same message with the same address, and it resulted to a different signature, which has been accepted by the website.

For example, let's sign the message containing just the word Test with this address 36TcRXxXDgwv5J78EL8QnTTyh5owFAXpb9:

  • Electrum sig:
ID22tR17Iv4JDZOPTDznywOrmP6YsJEhEvlQhvYjqdO4VCiFJOGXiTpZcxzzdOgb4U4/5BsCbnHg/E1xDddgKLY=
  • Sparrow sig:
I21pjaclbCUb+agjKkFTJSHdKYPACzDjsrHdimpuXIEBSDb1kicauaWHZzo+he397Isug//jNNUdF22wf2QQQeY=

They are different, and each one is considered as invalided when verified in the software that did not produced it.

Linux Flatpak / AppImage releases

First of all, based on the site, Sparrow looks really cool! Can't wait to test it out.

However, not all Linux distros support DEB/RPM packages – do you have any plans to releasing also via Flatpak or AppImage (which are both quite universal Linux packages)?

Question and suggestion

Hi, been testing sparrow and I find it quite good so far.
I've got one question regarding the price fetch from coinbase/gecko. How is it done? Does the wallet requests price for specific amounts of sat every time or for the price of a whole bitcoin every X time and then calculates the price for the specific amount locally when user requests?

Would be great to make clear to user how price is fetched (if it's privacy oriented) and maybe provide an internal calculator tab where user can fetch price of a whole bitcoin from a source or use his own price to calculate their sats related calculations outside of google and straight into the wallet software. To encourage good practices.

Cheers!

Label is required when sending

I don't know if this is intentional, but requiring a label for outgoing transactions is rather annoying (even though it might be beneficial if you need to do accounting).

2020-09-04-001109_5120x1440_scrot

Cannot Open Specter-Desktop Wallet

Just tested on 0.9.6 to see how progress is coming on #18 and this has gotten much worse :(

File > Open Wallet... > Choose file:
Screen Shot 2020-11-01 at 5 23 15 PM

File for reference:

$ cat any_recovery.json
{ "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" }

--

Btw, File > Import Wallet... is worse. The file is greyed out and I can't select anything. I can hit Scan but then Sparrow immediately crashes.
Screen Shot 2020-11-01 at 5 28 46 PM

Even if the functionality worked all of these UIs would be confusing. I just want to copy-paste in a descriptor, there's no reason for me to be saving files or scanning QR codes (if Specter is on my local machine).

--

There's also creating a new wallet and then hitting Edit..., but this also doesn't work with SD's copy-paste formatting (it adds \s that Sparrow can't parse):
Screen Shot 2020-11-01 at 5 32 32 PM

If I manually edit the wsh entry from SD to look like what's in any_recovery.json I'm able to make it to this error message:
Screen Shot 2020-11-01 at 5 35 24 PM

I don't see anywhere to tell sparrow that tpub is testnet, is testnet supported?

"Invalid output descriptor" error

This is one of the examples given in the descriptors doc:

sh(multi(2,022f01e5e15cca351daff3843fb70f3c2f0a1bdd05e5af888a67784ef3e10a2a01,03acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe))

When I create a new wallet in Sparrow 0.9.9, click "Edit" next to the descriptor box, and paste this in, I get an error popup: "Invalid output descriptor", "Index 0 out of bounds for length 0".

I tried setting the Policy Type to Multisignature, the Cosigners to 2/2, and the Script Type to P2SH first, to match this descriptor, but it made no difference.

Loading transaction much slower than electrum

On electrum I see it syncing in blocks of about 120 addresses at a time.
about 2 blocks per second.

On sparrow it loads it 1 by one at about 8 per seconds.

It does 100 then it load blocks then it load transaction [hex]

then it does another 100 ...

Should take about an hour at this rate...

Got stuck on this:
image

After disconnecting and reconnecting it seems to not do it it bocks of 100 anymore, It stopped at about 600 then started again from 0

Testnet

How do we use sparrow with testnet?

Feature Request - Fee in fiat

Like to see what my fee is in fiat when sending. Wonder if this could be incorporated, sats/vbyte etc don't really mean too much to me tbh.

Trezor One- Connection Issue

I'm testing Trezor-One on windows,

  1. Connection seemed to be unstable. It takes a while to even show up. If this is just an implementation issue then may be we can have a UI/UX changes to keep user's engaging otherwise it looks like nothing is happening.
  2. Pin entry is also unstable, Pin grid on hardware wallet disappears withing few seconds( Even before completing grid on the PC). I had to try multiple times to get it working.

In general response time is very slow Tested Only On Windows 10

Sparrow does not see existing Electrum wallets when attempting to import

Running 0.9.5 on Ubuntu 20.04
I have 4 existing Electrum wallets. When I start Sparrow and attempt to import any of them, I end up with a file window at my
~/user/.electrum/wallets folder, but it appears as if the folder is empty, even when the selector is set to "All files".

NEW INFO:
I find that if I create a backup of the Electrum wallet using Electrum's "backup" function, Sparrow does see and import that backup file.

If this is by design & the only way to import an Electrum wallet into Sparrow, then I think that should be mentioned in the "Show Details" part of the Electrum wallet import procedure.

Support "Broadcast Raw Transaction" feature

Sometimes, after signing a transaction, it doesn't get broadcasted and it holds on the final send screen with the progress bar going back and forth.

There's an option to download and save the signed transaction which allows the user to maybe broadcast it later but only from a different wallet.

Can we add a "Broadcast Raw Transaction" function on the Send Screen?

Using camera to scan QR cause the wallet to crash (MacOS)

In testing if Sparrow can scan UPPERCASE QR codes (btcpayserver/btcpayserver#2110) and trying to use the camera to do so makes the app crash.

Process: Sparrow [12880]
Path: /Applications/Sparrow.app/Contents/MacOS/Sparrow
Identifier: Sparrow
Version: 0.9.3 (100)
Code Type: X86-64 (Native)
Parent Process: ??? [1]
Responsible: Sparrow [12880]
User ID: 501

Date/Time: 2020-12-12 06:51:53.379 -0500
OS Version: Mac OS X 10.14.6 (18G103)

Model: MacBookPro14,1, BootROM 198.0.0.0.0, 2 processors, Intel Core i5, 2.3 GHz, 8 GB, SMC 2.43f6

Full crash report here: https://pastebin.com/XZhFaLaL

Displayed miniscript out of sync

When playing around with different spend policies I noticed that the displayed miniscript/descriptor doesn't change accordingly.

E.g. P2SH-W2WPKH should be displayed as sh(wpkh(key)), but stays pkh(key). Closing and reopening the window doesn't seem to fix the issue.

2020-09-03-235228_5120x1440_scrot

surface HWI errors

Hi. I am a BitBox02 dev. Thanks for releasing support for the BitBox02!

While trying it out, I noticed that errors returned by HWI (e.g. by hwi enumerate) are not visible in the UI. In the case of the BitBox02, one error that could happen looks like this:

hwi enumerate
[{"error": "Could not open client or get fingerprint information: Device not paired yet. Please pair using the BitBoxApp, then close the BitBoxApp and try again.", "code": -12, "type": "bitbox02", "path": "0001:0042:00", "model": "bitbox02_multi", "needs_pin_sent": false, "needs_passphrase_sent": false}]

It would be helpful to show this and other errors to the user so they know what to do to fix it.

Can't install on fresh instance of Debian 10 in Qubes

Using debian10 vm inside Qubes, when I try to install the latest .deb I get this: (I've had no problems installing it
on a Ubuntu Virtualbox VM - works fine there)

user@debian-10:/Downloads$ sudo dpkg -i sparrow_0.9.6-1_amd64.deb
(Reading database ... 151728 files and directories currently installed.)
Preparing to unpack sparrow_0.9.6-1_amd64.deb ...
xdg-desktop-menu: No writable system menu directory found.
dpkg: warning: old sparrow package pre-removal script subprocess returned error exit status 3
dpkg: trying script from the new package instead ...
dpkg: ... it looks like that went OK
Unpacking sparrow (0.9.6-1) over (0.9.6-1) ...
Setting up sparrow (0.9.6-1) ...
xdg-desktop-menu: No writable system menu directory found.
dpkg: error processing package sparrow (--install):
installed sparrow package post-installation script subprocess returned error exit status 3
Errors were encountered while processing:
sparrow
user@debian-10:
/Downloads$

I tried running apt install -f to check for dependencies and got this output:

user@debian-10:/Downloads$ sudo dpkg -i sparrow_0.9.6-1_amd64.deb
(Reading database ... 151728 files and directories currently installed.)
Preparing to unpack sparrow_0.9.6-1_amd64.deb ...
xdg-desktop-menu: No writable system menu directory found.
dpkg: warning: old sparrow package pre-removal script subprocess returned error exit status 3
dpkg: trying script from the new package instead ...
dpkg: ... it looks like that went OK
Unpacking sparrow (0.9.6-1) over (0.9.6-1) ...
Setting up sparrow (0.9.6-1) ...
xdg-desktop-menu: No writable system menu directory found.
dpkg: error processing package sparrow (--install):
installed sparrow package post-installation script subprocess returned error exit status 3
Errors were encountered while processing:
sparrow
user@debian-10:
/Downloads$

Unable to see transactions on imported or newly created wallets

Using version 0.9.2 on macOS 10.15.6 with personal Electrum Rust Server 0.8.5 on Nodl (local IP address for URL, port 50001, no SSL) as well as Blockstream's server (Blockstream.info for URL, port 700 and SSL). Both provide successful connection messages but no transactions visible even after having multiple confirmations.

My Electrum wallet works fine with the server and wallets with the same seed.

BIP39 seeds with m/84'/0'/0' derivation path. Single sig, P2WPKH.

Connection UX is frustrating.

This seems always off by default when starting the wallet

image

Turning it on doesn't do anything.

Test connection seems to never work.

image

Going to edit the server turns off the
image

Sometime This button say EDIT existing connection some other time it say TEST connection.

image

Now works after closing and reopening the wallet.

~/.sparrow dir created despite use of --dir

I'm trying to run two instances of Sparrow 0.9.9, one each for mainnet and testnet. To keep them segregated, I run the testnet instance like so (on Ubuntu Desktop 20.04.1):

/opt/sparrow/bin/Sparrow --dir /home/user/.sparrow-testnet --network testnet

Most files then get created in /home/user/.sparrow-testnet -- but it still creates a directory /home/user/.sparrow with one file sparrow.log.

Shouldn't the log file also go in the specified --dir?

Can't add keystore to watch only wallet?

The Apply button is greyed out and the Import... button takes me to a page that doesn't allow for text input:
Screen Shot 2020-09-03 at 4 33 37 PM
(Doens't matter whether I use xpub or Zpub)

Seed phrase is zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo buddy:
http://seedpicker.net/calculator/last-word.html
Screen Shot 2020-09-03 at 4 33 14 PM

My use-case is that I'd like to be able to import a bunch of xpubs from a multisig wallet on an eternally quarantined machine and use that to assist in verifying receive addresses. It'd be great to include in my guide here for example:
https://btcguide.github.io/verify-receive-address/advanced

Ability to remove inputs from the send screen

Would be nice to have the ability to remove inputs when creating a transaction. This would make it faster if the user doesn't want to select UTXOs in the separate screen.

It would also help users to be more privacy focused and induce more discipline in the labeling.

Group 26192

Implement Payjoin (BIP78)

BIP21 bitcoin URIs are now accepted in the Pay to field when sending a transaction as per 389ce21. They are already accepted when scanning a QR code.

The implementation will allow the user to submit their finalised original transaction to the Payjoin endpoint. Upon receiving the Payjoin proposal PSBT, Sparrow will open a new tab that will allow the user to resign and broadcast this Payjoin transaction.

autocomplete of bip39 words false positive

If you are typing in a bip39 word that has another valid bip39 word that is a prefix (eg 'youth' and 'you') the software will say there are no other possible words when you type in the shorter word

Waller doesn't sync,

The wallet is seems stuck, not showing any sign it that it is syncing.

Stuck on last time I tried it,

image
image

I've no idea what happened, I closed and reopened Sparrow about 6 times, and after swiching to light theme and restarting is finally synced.

Open new wallets on different windows

Is it possible to open wallets on different windows so all the tabs relate to 1 single wallet?
When sending transactions from multiple wallets it make it hard to know which tabs relate to which wallet.

lots of "Wallet is in an inconsistent state"

image

2020-10-31 23:10:57,313 ERROR [JavaFX Application Thread] c.s.s.c.FileImportPane [null:-1] Error importing file com.sparrowwallet.sparrow.io.ImportException: java.lang.IllegalStateException: Electrum wallet is in an inconsistent state. at [email protected]/com.sparrowwallet.sparrow.io.Electrum.importWallet(Unknown Source) at [email protected]/com.sparrowwallet.sparrow.control.FileWalletImportPane.importFile(Unknown Source) at [email protected]/com.sparrowwallet.sparrow.control.FileImportPane.importFile(Unknown Source) at [email protected]/com.sparrowwallet.sparrow.control.FileImportPane.lambda$getPasswordEntry$3(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at javafx.base/javafx.event.Event.fireEvent(Unknown Source) at javafx.graphics/javafx.scene.Node.fireEvent(Unknown Source) at javafx.controls/javafx.scene.control.Button.fire(Unknown Source) at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source) at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at javafx.base/javafx.event.Event.fireEvent(Unknown Source) at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Unknown Source) at javafx.graphics/javafx.scene.Scene.processMouseEvent(Unknown Source) at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(Unknown Source) at javafx.graphics/com.sun.glass.ui.View.notifyMouse(Unknown Source) at javafx.graphics/com.sun.glass.ui.win.WinApplication._enterNestedEventLoopImpl(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication._enterNestedEventLoop(Unknown Source) at javafx.graphics/com.sun.glass.ui.Application.enterNestedEventLoop(Unknown Source) at javafx.graphics/com.sun.glass.ui.EventLoop.enter(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(Unknown Source) at javafx.graphics/javafx.stage.Stage.showAndWait(Unknown Source) at javafx.controls/javafx.scene.control.HeavyweightDialog.showAndWait(Unknown Source) at javafx.controls/javafx.scene.control.Dialog.showAndWait(Unknown Source) at [email protected]/com.sparrowwallet.sparrow.AppController.importWallet(Unknown Source) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source) at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source) at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source) at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source) at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at javafx.base/javafx.event.Event.fireEvent(Unknown Source) at javafx.controls/javafx.scene.control.MenuItem.fire(Unknown Source) at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(Unknown Source) at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at javafx.base/javafx.event.Event.fireEvent(Unknown Source) at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Unknown Source) at javafx.graphics/javafx.scene.Scene.processMouseEvent(Unknown Source) at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(Unknown Source) at javafx.graphics/com.sun.glass.ui.View.notifyMouse(Unknown Source) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalStateException: Electrum wallet is in an inconsistent state. ... 124 common frames omitted

Stuck Loading Transactions

It gets stuck loading the transactions until it eventually gives me the pipeline os error. I'll let it get stuck and then update this issue with that but this is what my log shows currently.

2020-11-17 15:43:40,264 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update for unsubscribed script hash: censored
2020-11-17 15:44:27,294 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:44:43,185 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:44:58,876 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:45:14,775 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:45:14,819 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:45:30,500 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:45:46,257 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:46:02,044 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:46:17,918 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:46:17,920 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:46:49,791 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:47:05,733 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:47:05,733 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:47:37,000 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:47:53,631 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:47:53,675 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-17 15:48:09,878 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed

Meanwhile Electrum loads the wallet in 30ish seconds.

Open/Import Wallet is Very Confusing

Open Wallet... throws an unhelpful error if trying to import a wallet:
Screen Shot 2020-09-24 at 4 35 25 PM

It does work if you go to Import wallet instead.

As a UX feedback, it was really confusing that I was even supposed to be in the File menu. I was trying to paste in a script descriptor here (that field seems read only):
Screen Shot 2020-09-24 at 4 35 07 PM

I spent a while on this and nearly abandoned altogether!

Also, it'd be great if I could just paste in the descriptor (from Specter) instead of saving it to a file and then passing that file to sparrow.

Increase gap limit

Trying to import a wallet but its not detecting the latest addresses used and because the earlier in the derivation path are have no UTXOs it doesn't find

Example

  • m/44'/0'/0'/0/18 has 2 past transaction but no UTXO — Reads as empty and unused
  • m/44'/0'/0'/0/406 has 1 transaction and 1 UTXO — i looks like its too far out that its not scanned

Is there a place to in crease the gap limit to look for more addresses deeper in the derivation path and also detect previously used addresses?

When importing to electrum it scans everything because I was able to increase the gap limit.

Screen Shot 2020-09-08 at 2 58 24 PM

Window height doesn't fit a 13" screen

Hi again!

I'm on a 13" MacBook Pro, with the display to default settings (Retina 2560x1600, "looks like 1440x900" setting), and the min window height is too high: almost the whole footer happens to be under the dock, so I cannot click on the connection toggle button (unless I move the window to have the button in the bottom right corner of the screen, see below). I also cannot resize the window height.

image

Send screen after transaction broadcast

Should the "Send Screen" clear all the fields after a transaction is successfully signed and broadcasted? It's confusing when you go back a tab and all of the fields are filled with the address and amounts from the transaction we just published.

Error retrieving wallet history

Not sure what causes this. Wallet loads fine on Electrum 4.0.5.

2020-11-28 14:35:03,982 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update for unsubscribed script hash: censored
2020-11-28 14:35:36,241 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:35:36,242 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:35:52,551 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:36:25,756 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:36:58,462 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:37:15,260 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:37:15,261 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:37:31,425 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:37:47,539 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:38:04,115 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:38:04,115 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:38:36,763 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:38:36,763 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:38:52,765 WARN [Thread-35] c.s.s.n.SimpleElectrumServerRpc [null:-1] Failed to retrieve fee rate for target blocks: 1 (Retries exhausted)
2020-11-28 14:48:10,619 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:48:26,752 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:48:42,980 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:49:15,960 WARN [ElectrumServerReadThread] c.s.s.n.SubscriptionService [null:-1] Received script hash status update, but status has not changed
2020-11-28 14:49:32,144 ERROR [JavaFX Application Thread] c.s.s.w.WalletForm [null:-1] Error retrieving wallet history
com.sparrowwallet.sparrow.net.ServerException: Failed to retrieve reference for path: m/0/156
	at [email protected]/com.sparrowwallet.sparrow.net.ElectrumServer.subscribeWalletNodes(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.ElectrumServer.getHistory(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.ElectrumServer.getHistory(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.ElectrumServer$TransactionHistoryService$1.call(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.ElectrumServer$TransactionHistoryService$1.call(Unknown Source)
	at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at javafx.graphics/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)
Caused by: com.sparrowwallet.sparrow.net.ServerException: Retries exhausted
	at [email protected]/com.sparrowwallet.sparrow.net.RetryLogic.getResult(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.SimpleElectrumServerRpc.subscribeScriptHashes(Unknown Source)
	... 13 common frames omitted
Caused by: java.lang.IllegalStateException: I/O error during a request processing
	at [email protected]/com.github.arteam.simplejsonrpc.client.builder.RequestBuilder.executeRequest(Unknown Source)
	at [email protected]/com.github.arteam.simplejsonrpc.client.builder.RequestBuilder.executeAndConvert(Unknown Source)
	at [email protected]/com.github.arteam.simplejsonrpc.client.builder.RequestBuilder.executeNullable(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.SimpleElectrumServerRpc.lambda$subscribeScriptHashes$6(Unknown Source)
	... 15 common frames omitted
Caused by: java.io.IOException: No response from server
	at [email protected]/com.sparrowwallet.sparrow.net.TcpTransport.readResponse(Unknown Source)
	at [email protected]/com.sparrowwallet.sparrow.net.TcpTransport.pass(Unknown Source)
	... 19 common frames omitted```

"create transaction" function is not selectable

When filling in the address fields, values and specifying the fee in the dynamic bar. Even filling in all these values, the 'create transaction' button is not available,

I've tried everything:

  • Electrum server configured
  • wallet has sufficient amounts + fee
  • I did tests selecting UTXO's
  • I made tests sending from Trezor, bluewallet, all with sufficient balances

NOTE: Electrum server is working and the sparrow wallet is synchronizing the balances correctly.

See the images below:

Fee too low

Can the fee range be prevented from going below 1 sat/byte?
I believe this causes the transaction signing to fail and the message is not clear.

Screen Shot 2020-09-21 at 3 00 13 PM

Implement Replace-by-Fee (RBF)

Actually, if one's transaction has a too lower fee-rate, it get stuck unconfirmed for a while. Increasing their transaction fees using Replace-by-Fee can be useful to speed it up, especially in these times, with a (really) full mempool.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.