Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:marec2000:cryptocoins:electrum
electrum
electrum.changes
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File electrum.changes of Package electrum
------------------------------------------------------------------- Sun Jun 02 18:00:02 UTC 2024 - marec@detebe.org - Update to version 4.5.5: * followup 4159ceee3524024a2dee2322a509cac3c9ebb308 * qt: fix ReceiveWidget layout (fixes #9049) * update locale * update block header checkpoints * prepare release 4.5.5 * bump libsecp256k1 version (0.4.1->0.5.0) * Revert "qt: fix ReceiveWidget layout (fixes #9049)" * qt: fix ReceiveWidget layout (fixes #9049) * bip21: add testcases for amount bounds * bip21: consider amount=0 in bip21 uri invalid * qt wizard: fix offline 2fa wallet creation in some cases * qml wizard: even stricter validation for new wallet name * qt main window: rm dead code * fix plot.py * qml: NetworkOverview: show server height when syncing headers * interface: also trigger 'blockchain_updated' during initial sync * crypto: add some notes re considerations * slip39: implement extendable backups * ecc: "public key could not be parsed" exception to contain pubkey bytes * fix apparmor issue (#9047) * qml: log error if not able to retrieve private key for address * wizard: fix wrong icon and icon disappearing when resuming unfinished wallet * qml: expose LIGHTNING_PAYMENT_BUDGET_FEE_MAX_MILLIONTHS in preferences * qt settings: expose LIGHTNING_PAYMENT_BUDGET_FEE_MAX_MILLIONTHS * lnworker: move around some logging re PaySession, also log budget * lnworker: make PaymentFeeBudget defaults configurable * trampoline: rm hardcoded TRAMPOLINE_FEES. just use exponential search * submarine_swaps: move http calls to method * scripts: rm bip70.py * constants: add some more type hints * network: re-detect is_proxy_tor every time we connect to a server * dependencies: remove bitstring * qml: qeinvoice: fix regression in update_userinfo * qml: lightning invoice status can be one of onchain invoice states when using fallback address. (fixes #9018) * qt: normalize wallet path before lookup in window list * AppArmor Profiles for Electrum * test_lnpeer: fix node_id in storage of created peers * follow-up prev * exchange_rate: historical rates: merge old+new data, don't overwrite * lnworker: add_peer: no DNS lookup if a proxy is set, to avoid a DNS-leak * lnworker: don't query DNS for .onion hosts (fixes #9002) * jade: update Jade api to 1.0.29 * ci: regtests: build own libsecp256k1 instead of using apt * requirements: bump pinned (and max) aiorpcx versions to 0.23.1 * payment_identifier: don't assume bip70_data exists in has_expired() * qt: focus reason can't be None (fixes #8962) * save notes whenever modified, using 10s rate limiter. fixes #8951 * Call pairing dialog when necessary, fixes #8970 * Change copyright email address to soren@debian.org. * Add license information to AppStream metainfo.xml. * Update AppStream metainfo.xml. * qml: QETxDetails: defer to wallet.get_tx_info() for rbf/cpfp * contrib/osx: - rename make_osx2.sh -> sign_osx.sh - add command to unlock keychain - chmod +x * build: split make_osx.sh script into two: "build" and "sign" parts * qml: add tx options to ConfirmTxDialog, RbfBumpFeeDialog * interface: also log cancellations in send_request ------------------------------------------------------------------- Fri Mar 15 18:44:47 UTC 2024 - marec@detebe.org - Update to version 4.5.4: * swaps: homogenise gui messages * prepare release 4.5.4 * swaps: expand docstring for reverse_swap * swaps: fix get_swap_by_funding_tx, and types/type-hints * lnworker.check_mpp_status: add docstring * swaps: use longer final_cltv_delta for client-normal-swap * trt removed * walletdb: chan dict: small clean-up (incl db upgrade) * swapserver: raise exception if client uses deprecated API * lnpeer: fix some type hints * qt wizard: set focus on next_button * lnpeer: fix #8825 * regtest: test swapserver with trampoline onions * Remove bublina Signet * wizard: log state when view not defined. ref #8815 * wizard: log state when view not defined. ref #8916 * qt: fix some strings for localization * walletdb: fix convert_version_58 for partial local txs * android readme: update outdated "debug vs release build" section * create a trampoline onion when directly paying a trampoline node * trezor: add_slip_19_ownership_proofs_to_tx to not skip complete inputs * qml: refactor help text in CpfpBumpFeeDialog, move most to help text popup * qml: add HelpDialog and HelpButton for showing additional info * gui: more hardcoded bytes vs vbytes strings ------------------------------------------------------------------- Sun Mar 03 11:23:33 UTC 2024 - marec@detebe.org - Update to version 4.5.3: * fix tests (follow-up) * prepare release 4.5.3 * lnworker: log gossip_db status in pay_invoice * logging: (trivial) use repr() of seed_type * update block header checkpoints * update locale * android: p4a ref https://github.com/accumulator/python-for-android/commit/0c507ead85cc603d0e4a2f5e58e9247a1fae262d * submarine swaps: fail htlc with INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS * regtest: fix varname in wait_until_htlcs_settled * build: partial rerun freeze_packages * bump libsecp256k1 version * requirements: bump min aiohttp-socks to 0.8.4 * wizard: skip/hide passphrase option for 'old' and '2fa' seeds (see #4326) * license: add copyright headers * keystore: API changes for from_seed/from_bip43_rootseed/bip39_to_seed * keystore: "old"-type seeds cannot have a passphrase * trustedcoin: validate numeric format of OTP user entry (fixes #8905) * qt tx_dialog: share btn: add option to add slip-19 ownership proofs * qt tx_dialog: share btn: replace nested menus with checkboxes * wallet/keystore: add apis for "add_slip_19_ownership_proofs_to_tx" * followup prev * followup prev * android: limit size of text pasted from clipboard, to avoid TransactionTooLargeException * qml: icons, styling * tests: follow-up move of folder * tests: add test for payment_identifier.invoice_from_payment_identifier() * qml: handle invoice removed from backend from qeinvoicelistmodel status update timer (fixes #8898) * payment_identifier: return onchain invoice when GUI requests MAX amount (fixes #8900) * tests: fix CI regtest new path * tests: explicit sync on self.app instance ready and make sure _testcase_event is cleared before QMetaObject.invokeMethod as that can race if it gets inadvertently executed synchronously. * tests: move /electrum/tests to /tests * qml: FeePicker parameterize enable display of tx info and picker, use this for CPFP to put picker in Total section * qml: consolidate fee slider ui in various places to a single FeePicker control * tests: qt_util: disable timer in qt testcases * peer_wire.csv: remove msgtype gossip_queries options, as the extract-formats.py tool does not generate these anymore since https://github.com/lightning/bolts/commit/aad959a297ff66946effb165518143be15777dd6 * android readme: de-dupe "qml_gui" requirements * ci: also run unit tests with python 3.12 * lnpeer: fix timing issue in reest_chan, for replaying unacked updates * tests: add test for QEAmount(from_invoice=..) and (m)satsStr properties * lnpeer: make process_message async * wizard: fix co-signing hardware wallets data incorrectly referenced * trezor: minor things for better model "safe 3" support * qt wizard: hww dialogs: log some exceptions more aggressively * trezor: show descriptive error if trying to init device without fw * wizard: (trivial) follow-up prev * wizard: don't log sensitive values: replace blacklist with whitelist * coldcard: wallet info dlg: fix missing "Export for Coldcard" btn * send_tab: set tab changes focus for multiline edit ref #8889 * send_tab: fix tab order #8889 * cli/rpc: nicer error messages and error-passing * WalletDB: (trivial) add type hint * stub QVideoSink import as it requires many dependencies but isn't used on android currently * add new 'qml_gui' extra to setup.py and include it for tox * tests: print traceback of original exception when testcase fails * don't prefix utility classes and functions file with test_ * lnworker: history to include close tx for channel backups * add a simple test framework for testing QObjects and their signal/slot mechanism * util.CallbackManager: handle callbacks being cancelled * scripts: fix regression in quick_start.py * tests: payment_identifier: check multiline output amounts * tests: payment_identifier: remove redundant, add some less common domain names * tests: payment_identifier: check multiline outputs exist, are correct number and type * tests: payment_identifier: add some more whitespace situations, fix script spk * tests: add tests for all supported payment identifier types. * qt: ChoiceWidget fix init selected_key * p4a: python-for-android ref 4f1a1a3a41f6bf8d28984bfd1ec8af3c5d8eb362 * type hints: follow-up prevprev. "union types as X | Y" needs py3.10 * tests: add toy test for payment_identifier.py * payment_identifier: imports, typing declarations * qml: add typing declarations to qechanneldetails * qt: consistency HWW wizard page translations * followup prev * qt: fix various issues on send_tab, fixes #8874 * qt: sweep_key_dialog: make UI a bit more intuitive * minor, code style, imports * qml: close TxDetails on TX remove only after the 'removed_transaction' event has been received, so the history model doesn't refresh too early (fixes #8782) * qt: wizard: move page.on_ready() to just after construction to avoid triggering signal/slots that might assume on_ready() has run * qedaemon: remove redundant, small code style fixes * qml: extend self._loading guard to encompass _on_backend_wallet_loaded slot as well * qml: tighten self._loading guard to encompass whole loadWallet fn, not just task thread. * gui: label tx sizes as "vbytes" and feerates as "sat/vbyte" * qt: use selected_key instead of selected_item[0] for ChoiceWidgets * wallet: (trivial) simplify class hierarchy * qml: move final wizard submit() to WizardComponent.finish handler * trezor: don't try to sign non-ismine inputs * qml wizard: stricter validation for new wallet name * ConfigVar: add "converter" for getter, add use it for "proxy" key * trezor: fix regression in sign_transaction for trezor one for multisig * qt NetworkDialog: sort bookmarked servers to top * network: implement basic "add server as bookmark" functionality * qt NetworkDialog: small clean-up * config: rm some dead code * follow-up: factor out more hardcoded "sat/byte" and "sat/b" strings * factor out hardcoded "sat/byte" and "sat/b" strings * qml QEChannelDetails: show currentFeerate * qml QEChannelDetails: add some type hints * qml wizard: run navmap[view]['accept'] handler a final time on finish * wizard: do not log sensitive data (add more keys, again) * qml wizard: WCWalletPassword: show warning if pw is too short * lnutil: nicer repr for some attrs data classes * lnpeer: raise chan fees using update_fee more aggressively * qt wizard: handle some cases of hw device being unplugged during flow * qml: WCHaveMasterKey: (fix) re-verify text in onTextChanged * dependencies: vendor "pyperclip" pkg, used by text gui * text gui: rm some magic numbers (ascii key codes), and small clean-up * exchange_rate: don't show ridiculous precision for alts * walletdb: rm some dead code * jsondb: raise when trying to store sets in the db * walletdb: change structure of prevouts_by_scripthash, and db upgrade * tests: walletdb: add failing test case for persistence with jsonpatch * tests: simplify TestWalletStorage.imported_add_privkeys_persistence * qt: PayToEdit: always use monospace font * qml: trustedcoin: remove redundant slot parameter in createKeystore * qml: handle 2fa wallet can have None for billing_info * tests: test_mnemonic: extend test_random_seeds * mnemonic: add comments * mnemonic: add type hints ------------------------------------------------------------------- Fri Jan 19 19:30:54 UTC 2024 - marec@detebe.org - Update to version 4.5.2: * prepare release 4.5.2 * adb: get_balance: add comment about #8835 * qt: coins tab: also define sort order for coins mined in same block * qt: replace timer based delayed call with a less confusing event loop queued call * qt: fix macOS workaround introducing race * follow-up prev * qt: coins tab: properly sort unconfirmed/local utxos to top ------------------------------------------------------------------- Thu Jan 18 19:27:29 UTC 2024 - marec@detebe.org - Update to version 4.5.1: * prepare release 4.5.1 * release notes for 4.5.1: small clarification * qt: re-add processEvents() calls for abstract wizard. might work around #8809/#8815 * add release notes for 4.5.1 * update locale * submarine swaps: do not set attempts parameter in pay_invoice * qml: update history view after address/key delete. fixes #8782 * wallet: (trivial) add asserts re args in bump_fee and friends * storage: replace assert in append() with named exception * wallet: simplify bump_fee: rm txid arg * adb: simplify get_conflicting_transactions * followup: call super().__init__() for WalletFileException descendants * qt: new_channel_dialog: init USE_RECOVERABLE_CHANNELS cb intuitively * qml: invert, more strict check in determine_can_pay for invoice types, also disable paste button while PI is being evaluated * qml: LNURLp has no bolt11 to query until later. fixes #8822 * wallet.is_lightning_funding_tx: also check channel_backups * transaction: rename tx.is_final to tx.is_rbf_enabled, and invert it * swapserver plugin: fix doc * ci: only run build tasks once per day (or on manual trigger) * i18n: simplify language default. only translate string if using GUI. * fix tests * qt: add ElectrumWindow.set_payment_identifier delegate * ci: pin flake8 version * Consistently use translated strings for UserFacingException raises * qml: handle exception more gracefully when attempting to delete last address from imported wallet * qt: wizard: styling, add icons to success/error messages * trustedcoin: disable OTP entry after successful validation * wizard: take hardware_device from correct location for cosigners. fixes #8808 * qt: add typing to ResizableStackedWidget, add index validation to setCurrentIndex, return None for currentWidget() if current_index == -1 * followup dab768b9320343343d53f1a978b5d31101910274 * qt chan details dlg: add onchain feerate, to_self_delay * lnpeer: add comment to on_channel_reestablish re blocking * lnpeer.reest_chan: allow state transition WE_ARE_TOXIC->WE_ARE_TOXIC * lnchannel.get_close_opts: allow REQUEST_REMOTE_FCLOSE if WE_ARE_TOXIC * lnpeer: fix timing issues in reestablish_channel, for dataloss case * lnworker.suggest_splits: (fix) don't force splitting * lnworker: fix current_feerate_per_kw for regtest * trustedcoin: cannot reset OTP when seed is not available (online wallet creation continuation) * call super().__init__() for WalletFileException descendants, qt: handle unfinished wallets when opened via File>Open (ref #8809) * qt BalanceToolButton: rm hardcoded min size * qt BalanceToolButton: better sizing on high DPI screens * qml: tx.txid() can be None in qetxfinalizer. fixes (#8807) * android: allow override of FRESH_CLONE target directory * android: buildozer ref 4403ecf445f10b5fbf7c74f4621bf2b922ad35b5 * qml: android.minapi and android.ndk_api to 23 (android 6.0+) ------------------------------------------------------------------- Thu Jan 11 18:25:34 UTC 2024 - marec@detebe.org - Update to version 4.5.0: * prepare release 4.5.0 * android build: make apt less quiet, for more feedback about progress * appimage build: build zbar ourselves * build: bump zbar version in win/mac/android builds * qt/qrreader(zbar): don't call callback if user closes camera window * remove qt module from swapserver plugin (unused since a300b8968a) * Fix graceful shutdown for lightning swaps * submarine_swaps: define main_loop, with async with taskgroup * qml: log txid when assertion fails in qetxdetails.py * trustedcoin: do not db.write() from daemon thread. fixes #8791 * tests: add unit tests for prev * trustedcoin: fix qt wizard two-part-wallet-creation, online phase * trustedcoin: rm some dead code * wizard: do not log sensitive data (add more keys) * qt wizard: show warning when trying to restore 2fa seed as std wallet * qt/wizard/wallet: improve typing: introduce WalletWizardComponent cls * qt wizard: WizardComponent: (fix) also inherit ABC * qt wizard: fix restoring from 2fa seed * tests: add "short seed cheat sheet" * qml: show fiat price when historic rates are enabled and no timestamp available * tests: add unit test for prev * qml: add txid not empty assert to removeLocalTx. ref #8775 * bip21: fail bip21 uri if unsupported req-* parameter is present. fixes #8781 * qml: don't show fiat amount when timestamp more than a day old and historic rates are disabled * Restore ability to pass wallet in-memory * qml: don't use predictive text for fields where it makes no sense * android: p4a ref d976b539dc7c808d103a7edfe6dc1fd300582a89 * android: p4a ref f534fe9bcd692c4df97e644d34c5bd8acede01eb * qml: fix newline in TxDetails * qml: add transaction inputs in TxDetails and ConfirmTxDialog, RbfBumpFeeDialog, RbfCancelDialog, CpfpBumpFeeDialog and allow collapse/expand of input/output lists by clicking on label. * gui: cpfp: calc parent fee for cpfp using wallet.get_tx_info * qml: show frozen lightning balance in BalanceDetails only when non-zero * qml: add config setting to allow screenshots * fix some DeprecationWarnings in python3.12 * tests: fix TestLNTransport.test_loop for python 3.12 * android build: bump some security-sensitive packages (py3, ssl) * appimage build: bump python version (3.10.11->3.10.13) * qt TxEditor: fix extraneous "not able to RBF later" warning * qml: RbfCancelDialog: warning text in frame * Add Bit2C exchange (#8767) * qml: don't enable save button for already saved invoices * qml: qewallet code style * qml: remove unused components * qt,qml: add checkboxes for advanced network config on welcome page, remove separate proxy-ask and autoconnect pages * tests: add test for bip39 utf-8 normalisation * add missing accept handler for welcome page * qt,qml: add a welcome page as initial page for server connect wizard * qml: fix cancelling network wizard not closing app * qml: WCServerConfig.qml: only disable autoconnect if given server * qml: use warning icon and error title for failure messagedialogs * contrib/add_cosigner: print "usage: ..." if called incorrectly * Update RELEASE-NOTES * labels plugin: add FIXMEs. don't roll your own crypto... * release.sh: fix missing android apk names * build scripts: (trivial) add quotes around some shell variables * gitignore: add release-process-related artefacts * update version to 4.5.0b1 * plugins: follow-up prev, log thread name when loading plugins * hw wallets: fix crashes on macOS * android build: update p4a fork with qt6 build repro fixes * payserver plugin: remove support for qt GUI. (This plugin is not useful without a daemon) * android readme: update commands in "reproducibility fail" section * mac build: log hash of .app for quick checking of build-repro * release.sh: don't hardcode ".0" suffix in APK_VERSION * update block header checkpoints * update locale submodule * prepare release 4.5.0b0 * release notes: - remove redundant item (already in previous release) - describe new swap flow in a single place * qt: add 'notes' tab * wallet: refactor check_sighash/risk_of_burning_coins_as_fees * tests: add test for wallet.check_sighash * qt: do not proceed to wallet setup when cancelling network wizard * qml: update new labels in history and addresscoinlist * labels: emit callback when labels received. write labels regardless if there's already a label set for an ID. * wallet: clarify difference between wallet.is_mine and adb.is_mine * build: partial rerun freeze_packages * network: fix issue starting tor probe when proxy disabled * qml: add frozen lightning to BalanceDetails, indent frozen on-chain and lightning amounts * qml: improve info text for incomplete transactions and transactions in mempool on transaction details page. * qt main window: statusbar: swap Tor and Network buttons * qt util: add VLine class, for vertical line separators * qt wizard: fix wallets directory relative paths on Windows * qt: fix window.donate_to_server to switch to send tab * mac build: follow-up prev (altool -> notarytool migration) * osx builds: use notarytool * mac build: update README for new macOS 11 build VM * mac build: clang to always target x86_64 * qml: fix old ref to network.tor_proxy * qt: move plugins dialog to own module * qml: add local/remote SCID alias to ChannelDetails * util: more code-style cleanup * qt: replace QStackedWidget with custom ResizableStackedWidget, remove unused imports in util * qt, qml: remove email entry from 2FA wallet ToS pages * small fixes * qt, qml: allow BIP39 seeds which fail checksum or wordlist (fixes #8720) * followup 0d476f73dfafe0e41e7470d4fd52412ee245a70c * qt, qml: use lowercase bolt11 when copying or sharing * update RELEASE-NOTES * network: rename network.tor_proxy to network.is_proxy_tor and keep it at None until TOR probe is done. * electrum: fix typos * contrib: fix typos * wallet db: deduplicate "seed_type" field * qt wizard bip39 recovery: better handle --offline mode * qt wizard: clear up some log messages * qt: add note in wizard if wallet path is outside the default wallets folder * qt: use datadir wallets folder consistently * qt: show wallet as relative path if below datadir wallets folder * config: keep wallets directory stable, regardless of wallet opens in other directories * android: exclude more unnecessary directories * plugins: add proxy aware XMLRPCProxyTransport for xmlrpc.client calls in cosigner plugin * add FIXMEs to instances where we don't use the network proxy * build: update pinned aiohttp-socks (partial rerun freeze_packages) * release-sh: build each android apk separately * qt: translate string, wording minimum channel amount in new_channel_dialog * pyinstaller build: (trivial) format so that win/osx look more similar * pyinstaller build: better parameterise .spec * pyinstaller build: follow-up: dirty hack for duplicate plugins * pyinstaller build: clean-up .spec, fix issue described in prev commit * plugins: better error and logging on duplicate plugins * mac build: fix pyinstaller erroring due to not being able to import pyqt6 * win/mac build: fix pyinstaller missing libsecp during part of Analysis * pyinstaller build: towards fixing missing "gui/common_qt" folder * network: async tor probe * config: use str type for NETWORK_PROXY, NETWORK_PROXY_USER, NETWORK_PROXY_PASSWORD * network: no assert for port number range check * qt: network_dialog: remove now unnecessary proxy host contains colon check * qml: small text change in proxy settings * network: remove resolver monkey-patch as no local hostname lookups are performed when enabling SOCKS5 proxy. * network: split off proxy_user and proxy_pass from serialized proxy string and add separate cmdline params and config keys for them. support parsing both old style mode:host:port:user:pass and new mode:host:port, where new form also accepts IPv6 addresses * wallet: add sighash check to class Abstract_Wallet qml: use backend sighash check and add user confirmation path qt: use backend sighash check and add user confirmation path qml: include get_warning_for_risk_of_burning_coins_as_fees test in txdetails qt: add warning icon to sighash warning add sighash and fee checks to wallet.sign_transaction, making all warnings fatal unless ignore_warnings is set to True tests: test sign_transaction on both code paths with ignore_warnings True and False, raise specific exceptions TransactionPotentiallyDangerousException and TransactionDangerousException * json_db: rename "_write" to sth more descriptive * ui: add icons for script type and deterministic wallet * load_keystore: deepcopy object so that it differs from the one in db.data * followup prev * tests: add test verifying if privkey add to existing imported wallet persists correctly. * qt console: fix tracebacks in windows binaries * qml wizard: fix creating imported wallet from camera: concat with space * qt: addr/coins tab: show tooltip for "freeze address" * qt: avoid potential proxy settings deserialization problems (fixes #8652) * qml: fix wrong year near newyear in transaction list * android build: we always want apks, as we want to use our own privkey * swaps: forward swap: make cltv requirements explicit * swaps: code style clean-up, add type hints, force kwargs * swaps: forward swap: (fix) propagate channels parameter * wallet.bump_fee: the glorious return of BumpFeeStrategy :D * qml: add support for ln address and openalias, fix lnurl finalize step, avoid overloading invoiceParser with new payment identifiers while potentially long-running resolve/finalize steps are ongoing, show errors inresolve/finalize steps to user. * qml: check if self._orig_tx is valid. fixes #8407 * qml: show channel close tx(id) in ChannelDetails * (trivial) follow-up prev * lnworker: add/fix some type hints, add some comments * trampoline forwarding: before failing payment, wait until all htcs have failed and session is not longer active. * Refactor payment forwarding: - all forwarding types use the same flow - forwarding callback returns a htlc_key or None - forwarding info is persisted in lnworker: - ongoing_forwardings - downstream to upstream htlc_key - htlc_key -> error_bytes * commands: make payto/etc respect 'confirmed_only' config var * swaps: add small comment * lnworker: remove if statements where the condition is always True. * qml: make TextAreas more visible * qml: resize menus according to content * followup 3793a6b6b6314f93427ff6aef63fa06bbfe0f905, remove leftovers * qml: use highlight pane for QR codes, refactor ReceiveDialog invoice select UI. * few small fixes * i18n: translate a few untranslated strings and avoid early translate for pr_tooltips and pr_expiration_values fixes #8689 * SECURITY.md: small clean-up * lnworker: (followup prev) set .config in baseclass init, not subclasses * lnworker: always initialize self.config in constructor * util.NetworkRetryManager: better document API * qml: small UI fix, wording. * zerofonf trusdted node: use NetworkRetryManager method _can_retry_addr * just-in-time channels: - a node scid alias is derived from the node ID - the channel opening fee is sent in a TLV field of open_channel - the server requires htlc settlement before broadcasting (server does not trust client) * option_zeroconf * lnpeer: abort send_revoke_and_ack and maybe_send_commitment if channel is closed. fixes #8684 * fix #8683; do not force close channel if we just sent update_fulfill_htlc * qml: txdetails: add lockDelay property when height is TX_HEIGHT_FUTURE and add mempool depth for height TX_HEIGHT_UNCONF_PARENT * qml: refactor ChannelDetails. Add funding outpoint * qml: fix dialog not closing if dialog is shown/hidden more than once most dialogs are destroyed when closed, therefore not hitting this bug, but e.g. ChannelOpenProgressDialog is reused. * qml: remove APK version, add Qt and PyQt version strings to About page * qml: fixes for CloseChannelDialog; - split RequestForceClose and LocalForceClose options, as request force close is only available if connected. - disable no close policy on dialog, as it locks the user in the dialog if no succesful close is initiated. what this intended to do is keep the backing object QEChannelDetails alive until a result is obtained, to avoid exceptions when emitting the result signal. this is now handled more robustly, the user can leave the dialog without triggering exceptions later. * submarine swaps: remove support for 'old' normal swaps, where the user has the preimage. * submarine_swaps: rename variable for clarity * qml: implement delete address for imported wallets, and fix address list on address/key add. * qml: introduce PasswordStrengthIndicator control, and add to PasswordDialog and WCWalletPassword * contrib/android/Readme.md: update "how to run qml gui on linux" section * qml: remove attempt to unfocus by clicking dialog background Doesn't really work as it triggers on events above the background it is defined on :( * qml: fix issue with width of fiat textedit on ReceiveDetailsDialog * wizard/wallet: clean up imports, code style warnings. * qml: addresses/coins filter match case insensitive, don't match 'None' for undefined fields * qml qr scanner: make xml layout look nicer * android: correctly describe buildozer branch used * android: set target_sdk_version to 33 * qml: fix keyboard exclusion zone * qml: restore Send/ScanDialog for desktop/dev, keeping qr scan Activity for android only. Also use stable R package, regardless of APP_PACKAGE_DOMAIN used in build. * qml: replace Send/ScanDialog with java bases zxing qr scan activity. * android: restore SimpleScannerActivity.java that was used in kivy * qt6: update buildozer ref to ce4f2257249fdf4ff1f4cb8983fd7ac44174a274 * gui: make common_qt compatible with both Qt5 and Qt6 * qml: android back-gesture conflict hack not working on qt6, replace with simple properties * cirrus: task timeout 90m * qml: refactor qr scan to qt6 * qml: qualify all signal handler parameters * qml: work around toolbar layout not right-aligning indicators when indicators toggle visibility * qml: remove all QML imports version numbers * qml: port PyQt5 to PyQt6 * qml: exclude payserver plugin for qml * android: update p4a ref to 3b3733dbf5f461e197ba83887ac0d3b6d0f1c396 buildozer ref to 698b48136c55b2495128207c5e98dccc128bb6c2 * qt6: update recipe pins, NDK, SDK, Ant, use venv for buildozer/p4a, add tomli recipe * qt6: update android build container to bookworm * Revert "Update .cirrus.yml" * config: handle better if data dir disappears while we are running * qml: add ice crystal icon and use for (un)freeze buttons. * qt: fix detected account select (#8673) * qt: add missing case for on-chain fallback for BIP21 payment identfier containing lightning invoice * (trivial) contacts: add some type hints * contacts: fix adding new contacts * qml: add addresslist filter persistence * qml: addresses list formatting, add txid/outpoint and amount to filter * qml: also show coins in Addresses page, and add a few filter options. Additionally, long press now activates multi-select mode, and add action to (un)freeze selection. * payment_identifier: if a bip21 uri contains a lightning invoice without fallback address, and an address is present in the bip21 uri path, register the on-chain address in the Invoice.outputs field to allow paying onchain from a saved Invoice later (when the PI is unavailable). Fixes #8654 * qml: also add share option for fallback address in InvoiceDialog * qml: emit error when bip21 contains neither an address nor a lightning invoice (fixes #8662) * main_window: split out "walet info" dlg into separate file * qt wizard: WCHaveMasterKey: use check_multisig_constraints * qt wizard: fix WCHaveMasterKey for first multisig cosigner * qt wizard: simplify WCHaveSeed * Update .cirrus.yml * Add pow_hash_header abstraction (#7592) * Cirrus: Mark E722 linter as mandatory (#8668) * wizard: fix self._logger vs self.logger * wallet: check that multisig wallet does not have duplicate masterkeys * If trampoline is enabled, do not add non-trampoline nodes to invoices * qml: add share option for address in InvoiceDialog * Change the constructor of LNWorker, passing node_keypair instead of xprv. * lnworker: use PaymentFeeBudget * trampoline: fix off-by-one confusion of fees * qt: window.how_lightning_invoice: routing_e should be read-only * mpp_split: make SplitConfig a subclass of dict, not just a type-hint * test_lnpeer: add more tests, combining forwarding and hold invoices * lnworker.get_channel_by_short_id: give priority to real SCIDs * qt send tab: HelpLabel for "pay to" field: update text * addr_sync.receive_tx_callback: rm redundant tx_hash arg * fail_swap: do not remove swap if it has been funded * (follow-up) wallet: add option to merge duplicate tx outputs * request: amount_msat is set to None in Request when creating request and amount is 0 or undefined. * follow-up 45b248fdefd880161e048efb64e68b6732b715d6 * lnworker: fix get_scid_alias for forwarding * regtest: use static fees instead of hardcoded value * Merge multiple outputs to same address * qml: don't show error when textfield is empty, don't log error when optional propert is undefined * test_lnpeer: split some tests, remove redundant test * follow-up prev commit * lnworker.pay_to_node: skip error handling if sender_idx is None * test_lnpeer: * lnpeer: move access to payment_secret inside try..except block, as it might raise * exchange_rate: cleaner log line for "failed fx history" * renames: use consistent naming of cltv delta vs cltv abs * test_lnpeer: separate graph creation from run_trampoline * lnworker: (trivial) fix type hint * lnpeer.maybe_fulfill_htlc: also check cltv and amt against inner onion * follow-up 4c42840c1cc661f02474bf851303fe76734789cd * lnpeer: obfuscate error pakets of forwarded htlcs, that we propageate back to the sender. * Revert "lnonion: fix decode_onion_error" * lnonion: fix decode_onion_error * lnpeer.maybe_forward_trampoline: fix cltv calculation * lnpeer.pay: also log hops_data for trampoline_onion * pay_to_node: raise failure_msg if we received a trampoline error from the next onion. * tests: change fake block height in test_lnpeer. 0 might hide bugs. * lnpeer.maybe_forward_trampoline: fix abs-cltv vs cltv-delta confusion * trustedcoin: fix keystore name (2) * exchange_rate: cleaner log line for "failed fx quotes" * follow-up 1ea49582ab7a98aa73d7cf970d3533dc3da968bb * fix type of forwarding_info * channel_announcements: - construct_channel_announcement: return also whether node ids are in reverse order - maybe_send_channel_announcement: return early if signatures have not been received * trustedcoin: fix keystore name (follow-up 56e80c20d7) * lnaddr: don't call validate_features in parser * public channels: - send node and channel announcements. - store channel_flags in constraints - store signatures in local and remote configs * Fix sending of 'channel_ready': - send only once - in channel_reestablish, do not send it if we are not funded. - lnworker: do not send channel_ready before channel_reestablish * follow-up #8646 * lnpeer: do not set channel OPEN before channel_ready has been both sent and received. * qml: increase font on seed keyboard, and height of seedkeyboard slightly * qml: properly show warnings in info box in RbfBumpFeeDialog * qml: update invoice.canPay on channel state changes * qml: remove eye icon for watch-only wallets from toolbar * Remove trampoline hints from invoices * wallet: merge mktx and create_transaction * follow-up 7576a99a0bc4a06100e8a7c4c8d3d2022080362a * wallet.unlock: raise exception if password is missing (follow-up 2e52b17a432bf5dacf28f4d5b3d8b8c9780f8c70) * wallet.make_unsigned_transaction: add batch_rbf/send_change params * daemon: refactor load_wallet to not just return None, but raise specific exceptions. * storage: make partial writes pos sanity-check more robust * config: follow-up rename of FEE_EST_STATIC_FEERATE * open_channel_with_peer: return funding tx * follow-up 455167136d907fe43e059f29f7707d636072ffb6 (variable rename) * follow-up prev commit (variable rename) * CLI: new getfeerate/setfeerate API * delete htlc session keys once they are no longer needed. fixes #8630 * move INITIAL_TRAMPOLINE_FEE_LEVEL to config * CI: run unit tests in debug mode with python 3.11 * follow-up previous commit * CLI: replace the 'unlock' command with an option passed to load_wallet * follow-up previous commit * setconfig: do not return 'true' * swap server: try to batch funding transactions * qml: remove redundant WalletDB, closes #8628 * qt: clipboard might have been changed after show menu. add check. fixes #6526 * submarine swaps: improve labels - claim tx was incorrectly labeled - if we send tx change to a swap, display both labels * qml: don't show "select server automatically" checkbox in network setup wizard * rbf batching: make sure new feerate > old feerate * payment_identifier: move adding openalias to contacts out of _do_resolve. This fixes "cannot pickle '_thread.RLock' object" when paying from Contacts tab * partial-writes: add missing package pins * qml: add extra parent_fee check. fixes #8634 * qml: followup 5acfe418079dbc9935cf9576e50ae2c8c841e301; don't save expiry Never as default. * qml: properly return when current wallet is selected from wallets list * qml: add never-expiring requests. fixes #8631 * text gui: fix WalletDB * fix recv for text gui * jsondb: raise an exception if a daemon thread attempts to write * lnpeer: split 'pay' method into 'create_onion_for_route' and 'send_htlc' * Cleanup block explorers * qml: add message sign/verify * test_lnpeer: - do not use needs_test_with_all_chacha20_implementation, this is slow and not really useful here. - split TestPeer class in two classes, depending on the type of graph we use. * trampoline forwarding: use routing hints * qml: clicking on one of your own addresses on TxDetails page now takes you to AddressDetails page. * payment_identifier: output is only considered a script if written as call-like 'script(<script>)' * qml: tap-on-background now removes focus, allowing convenient way to hide keyboard * followup 94a6f6cd0e257e5acfa499a8042b0374bf02dccf * coldcard: don't raise when get_soft_device_id can't get xpub. * bump libsecp256k1 version * storage: remember file length when writing to file - make append fail if the actual file length differs - consolidate when file length > 2 * last consolidated length * qt console history: ensure partial writes * json_db: recover corrupt db from incomplete file appends * partial-writes using jsonpatch * json_db: do not overload load_data. * qt gui __init__: restore import order - raise pyqt5 missing early * QML: Check passwords with WalletDB instances that have no storage, to avoid unwanted side effects. * follow-up previous commit: write storage only if there was an upgrade * jsondb: write storage in __init__, in case there was a db upgrade * wallet_db upgrade: do not use '/' in StoredDict keys * wallet_db: fix typo in renamed arg "upgrade" * keepkey: fix TIM_RECOVER restore method * qt wizard: restore previous window size * follow-up 190c19d48cdaeb93cd9aed894f233917a07bca13 * whitespace, imports, code style * new wizard: set default values for proxy and autoconnect * qml: fix wizard multisig cosigner script and derivation GUI component name * walletDB: replace 'manual_upgrades' parameter with 'upgrade', with opposite semantics * Separate WalletDB from storage upgrades. * qml: remove split wallet functionality. old multi-account wallets were never used on mobile, so we don't need to support this. * qt: remove potentially confusing reference to 'install wizard' in trezor, keepkey, safe_t hww settings dialogs * wizard: don't use hww encryption of wallet files for anything besides standard wallets, check hw wallet file decrypt in WCHWUnlock, fix assumption 'wallet_type' exists in wallet open scenario. * regtest: pass config options from regtest.py to script * submarine swaps: - use SPV'd funding_height.conf instead of txin.height - remove local transactions if funding tx was double spent * wallet: add sanity check for storage encryption version * get_full_history: replace item if it has unique child (follow-up 7eabbbc81fa71cc0dbfcbe0e4070d9d1f854f3e2) * wizard: make wizard.keystore_from_data more robust; - always store 'keystore_type' in cosigner data and use same types as main - dont share 'hardware_device' in root of dict, but store for each cosigner - properly return hardware keystore for hardware cosigners * wizard: keepkey scope pin lineedit to instance * wizard: fix trezor initialisation/recover not setting page valid to True add auto-proceed to next page after init to trezor, safe_t, keepkey * wizard: allow slip39 for multisig also, consistent single quoting of strings * qt: fix device list after rescan * wizard: fix assumption 'keystore_type' is present in wizard_data, fix unexpected keystore type msg * coldcard: factor out manipulate_keystore_dict_during_wizard_setup * wizard: fix hww scan debug_msg not working correctly * plugins: make HW_PluginBase an abstract baseclass * wizard: remove base_wizard.py * trustedcoin: remove old wizard code * wizard: add non-hardened derivation path check for digital bitbox, re-add rescan button in choose hw device, clear clipboard before confirming seed. * wizard: keepkey and safe_t set valid on init, handle xprv validation, report error when exception * wizard: add missing keepkey porting, fix password focus for default and picked wallets, add abstract method decl HW_PluginBase.wizard_entry_for_device * wizard: remove finished call, it's unused qt: call is_finalized before closing the wizard dialog and add a check if wallet can be decrypted with the supplied secret (user pw, hw device) * wizard: add bitbox02 new wallet init and checks to new wizard * wizard: improve hww uninitialized default msg. attempt fix flake issue w.r.t ABC * wizard: add Digital Bitbox initialization to new wizard, remove rescan button * hw_wallet: inherit from ABC and use @abstractmethod decorators instead of raise NotImplementedError * qt: hww scan, focus rescan button only if no devices found * qt: automatically proceed wizard when unlocking existing wallet or succesful retrieve of xpub for new wallet * plugin: device_model_name defaults to plugin name if not overridden. * hww: mark device_model_name(self) as @abstractmethod and override in hww clients that did not define it. * qt: wizardcomponents all use Logger mixin. Fix missing self.plugins init in WCTrezorInitMethod * qml: show user feedback when wallet file has action pending * qt: trezor firmware checks on xpub and initial setup * qt: wizard back button disabled while busy. Wrap error texts * qt: check HWW supported script types * qt+plugins: cleanup. remove all old wizard code * qt: remove old wizard entry code * rename qt_common to common_qt * small fixes, imports * qt: keepkey device init Note: untested, don't have device * qt: safe_t device init Note: untested, don't have device * qt: single_password doesn't seem to be supported on desktop, disable also on new wizard * flake * qt: new wizard 2fa offline setup * qt: new wizard 2fa wallet online continuation from offline initial setup * qt: wizard run_upgrades * wizard: port storage/db changes * qt: trustedcoin plugin helper scoping refactor * wizard: add safe_t, except for wallet initial setup support. * wizard: add missing imports * wizard: add ledger * wizard: add coldcard * wizard: add keepkey to new wizard * wizard: add digital bitbox to new wizard * wizard: bitbox_ view prefixes to bitbox02_ * qt: generalize wizard HWW xpub * qt: add bitbox02 to new wizard * qt: add HWW unlock wizardcomponent * wizard: typing * qt: initial open existing wallet from wizard, set window title for wizard dialogs, catch RuntimeError for WizardComponent.updated signal, widget might be gone * qt: make QtEventListener more robust against stale PyQt wrappers * qt: implement server picker in server connect wizard * qml: wizard fixes * trustedcoin: ChoicesLayout -> ChoiceWidget * flake happifier * qt: jade for new wizard * qt: multisig checks with hardware cosigners * create ChoiceWidget, refactor ChoicesLayout to ChoiceWidget * wip. trezor works for standard wallet, also for cosigners * small fixes * qt: 2fa implement OTP check * qt: introduce electrum/gui/qt_common, implement remaining trustedcoin views, unify most qml and qt wizard code for trustedcoin, separate non-GUI trustedcoin wizard definition to trustedcoin.py * qt: have_seed and create_seed support 2fa * qt: refactor please_wait layout to widget to better control UI, add in-page error view * qt: initial trustedcoin wizard pages * wizard: add passing of params in navmap to wizard pages * wizard: imports, flake * qml: check passphrase not empty when checked * wizard: fix wizard_data instance not isolated between pages, combine is_bip39_seed and is_slip39_seed into cosigner aware needs_derivation_path add instance id logging to wizard.log_stack() qt: add updated signal to SeedLayout * wizard: rename bip39_refine to script_and_derivation * wizard: add support for slip39 * qt: add have_master_key gui, implement cosigners in have_seed and bip39_refine guis fix adding data from accept handler * qt: implement initial bip39 refine and account detect, restore from seed pages * qt: implement multisig and import addresses/keys pages * qt: submit final state to wizard and return proper dialog result when finished * wizard: also push final state on the stack * wizard: implement confirm seed and wallet password pages some styling improvements * wizard: avoid importing from installwizard.py * wizard: cleanup, variable naming consistency, imports, invalid accept handler now raises * implement first batch of pages for wallet wizard * qt wizardcomponent receives qeabstractwizard instance * extract proxy and server widgets * wizard: remove view from is_last_view call, it's never used * qt: add initial wizard classes for desktop client * lnworker: separate add_peer from _open_channel_coroutine * maybe_forward_htlc: detect invalid onion before temporary chan failures * bip39: add likely script vs derivation path mistakes for BIP49 and BIP84 paths (#8615) * flake: remove whitespace * submarine swaps: register hold invoice early in wait_for_htlcs_and_broadcast, so a SwapManager.cancel_normal_swap() does not race. * qml: port cancel normal swap feature from desktop client * config: move tooltips from Qt gui into configvars * qt settings_dialog: rm unused coinchooser selection * lnworker: get_channel_by_short_id to use remote scid_alias * remove lnworker.get_channel_by_scid (redundant) * QML: show onchain and offchain amounts for groups in txdetails * Move history grouping logic from qt GUI to wallet.get_full_history() * add group_id to swap refund transactions, so that the GUI shows them as part of the swap tx group * submarine swaps: remove expired swaps from the list, and log the reason for failing a swap. * add sanity checks we don't sign tx including dummy addr * qt tx dlg: follow-up "send tx change to lightning" * submarine swaps: use password stored in memory. fixes #8612 * follow-up previous commit * Add unlock command to CLI (stores wallet password in memory) * qml: handle no wallet password for authed info * fix typo (follow-up previous commit) * Let the GUI compute the balance displayed in history. * Give users an option to cancel a submarine swap while awaiting HTLCs. * qml: create ElCombBox and ElRadioButton that automatically word wrap their text element. Fixes #8611 * (trivial) follow-up paysession.use_two_trampolines arg change * tests: add tests for "recv mpp confusion" bug * lnchannel: replace `assert htlc.payment_hash==sha256(preimage)` w/ exc * release notes: add links to security disclosures * disable option SEND_CHANGE_TO_LIGHTNING if we are already doing a swap * send tx change to lightning * run_electrum: small clean-up in init_cmdline * config: add sanity check for duplicate config keys * commands: getconfig to use default values, add existence checks * plugins: split load_plugins() * submarine swaps: fail received HTLCs of normal swap htlcs if the swap is still unfunded and the refund delay has expired. * remove remnants of config SSL options * remove dumpgraph and inject_fees from cli * simple_config: implement complex default values * ledger plugin: fix Ledger_Client.construct_new on very old btc app ver * (trivial) do not use old-style (%) formatting inside translations * commands: "bumpfee" to accept either a raw tx or a txid as its 1st arg * lnworker: fix some type hints re hold_invoices * lnpeer: return hold invoice callback after checking received amount * swaps: fix type of payment_hash in init * logging: add config var "LOGS_NUM_FILES_KEEP" instead of hardcoded 10 * follow-up prev * (trivial) CI: rename tasks * follow-up kivy removal: rm kivy/theming submodule * tests: fix warnings in test_network.py * tests: rm some redundant "electrum_path" temp dirs * tests: fix warnings in test_storage_upgrade.py * (trivial) lnworker: fix type hint * Payment bundles: use lists of payment keys. * follow-up prev commit; do not return tw-info if forwarding is disabled * lnpeer: return fw_info for all parts of a MPP in a trampoline onion * qt: do not show UntrustedServerReturnedError when sweeping * Fix Revealer Qt layout (#8587) * register distinction between address and script for SPK type payment identifiers and allow zero amount for script destinations. * qt/send_tab: fix regressions paymentidentifier Fix '!' amount expand while PaymentIdentifier not set due to editor pushback timer. Fix '!' amount expand for BIP21 without a specified payment amount. * qml: show experimental warning before opening first lightning channel. closes #8564 * qml: pass the invoice/invoiceparser to payOnchain * follow-up 0a804607a4d03c78ba80a2c2a1c51bccdf9ea509, don't ask confirmation for regular onchain invoices * qml: properly suggest paying bolt11 invoice onchain if insufficient LN balance. Also, if fallback address is present, don't warn on bolt11 and no ln channels. * swap dialog: show on_result popup for both directions * lnpeer: trampoline forwarding failures may be indexed by outer or inner onion payment secret * tests: split out wallets from test_storage_upgrade.py * stacktracer.py: small fixes and clean-up * remove the kivy gui * add stacktracer.py: helper util to debug threading issues * android build: exclude kivy classes from qml apk * ci: don't run unit tests on pypy * channel_db: don't wait for load_data to finish if stopping * submarine swaps: use a short expiry with hold invoices, and display result to the user * lnworker: choose IP address with recent timestamp (Rogach) * swapserver: sanity check amount in new flow * swapserver: reduce refund delay to 70 blocks * address_synchronizer: save stored_height on each block * trampoline: fix two bugs preventing legacy payments to Electrum clients that have non-trampoline channels. * make use_to_trampolines a user visible option, disable it by default * swapserver: do not expose the swapserver plugin in qt * qt: show routing hints in ln invoice window * fix revealer plugin for python 3.10+ * Plugins: make Plugins.stop() faster * fix tests: another follow-up to daemon managing Plugins object * follow-up prev * run_electrum: have daemon manage Plugins object, and call Plugins.stop * qt console: add 'channels' shortcut * invoices: don't modify .amount_msat directly * invoices: also run amount-validator on setter * qt: fix lnurl-pay * follow-up storage/db changes * release notes: add pre-notification of security fixes for 4.4.6 * Fix regtests (follow-up 0ebb6469ff2b32d25ed98820dbc5591b5ba3bb07) * Make storage a field of db * CLI: make sure we do not load WalletDB while another process is accessing it - do not load WalletDB in order to check keystore password - do not allow --offline commands while a daemon is running * lnworker: don't create invoice with dupl t-hints, & filter when sending * update release notes for version 4.4.6 * update block header checkpoints * wallet_db: upgrade to version 53, for imported chan backups * qt gui: input_qr_from_screenshot: better msg if screenshot is black * util.randrange: expand docstring * util.CallbackManager: make sure exceptions in cbs are logged * json_db: add back profiler to _write * channel_db: add TTLs to channel_updates_for_private_channels * lnrouter: rework blacklist a bit * swapserver: use taskgroup (follow-up 0083560ee6d84e142b24cf337aa7d8c4c6518269) * do not spam log with fee_histogram * swapserver: throttle payments, handle exceptions in pay_pending_invoices * lnworker: clear paysessions dict * lnworker: move sent_buckets into PaySession * lnworker: introduce PaySession cls, refactor pay_to_node * lnworker.pay_to_node: make trampoline fee_level and failed_routes local * lnworker: MPP send: more aggressively split large htlcs * lnworker.pay_to_node: log num htlcs in-flight * config: save ports instead of net addresses (follow-up 012ce1c1bb6fad43e55ab18e92f85ec7514e96e6) * (trivial) fix typo in requirements-hw.txt * lnutil: make LnFeatures.supports() faster * swapserver: try many times, to increase trampoline fee * requirements-hw: pin ledger-bitcoin to "<0.2.2" * Remove SSL options from config. * qml: don't apply ElListView deadzones on Linux desktop * swapserver: remove config option LIGHTNING_SWAP_HTLC_FIRST; read it from get_pairs instead. * qml: handle importChannelBackupFailed in WalletMainView * labels plugin: don't log received data * interface: log: silence some tracebacks * normal swaps: use different callbacks for server and client * swapserver: remove /api from url * New flow for submarine swaps: - client requests payment_hash from the server - client sends an invoice with that hash - client waits to receive HTLCs, then broadcasts funding tx * follow-up ff547e3dcf9b698d1342eb3649534a54e7b75b34 * swapserver: use a single config variable for swapserver_url; testnet and regtest have their own config files * qt PayToEdit: always add context menu items * lnpeer: follow-up OPTION_SUPPORT_LARGE_CHANNEL * CLI: fix regression re handling "unknown command", re locale * CLI: fix regression re handling "unknown command", re payment_identifiers * Add option for support_large_channels. max_funding_sats is a config variable and defaults to the old value. * submarine swaps: register callbacks on startup * lnpeer and lnworker cleanup: - rename trampoline_forwardings -> final_onion_forwardings, because this dict is used for both trampoline and hold invoices - remove timeout from hold_invoice_callbacks (redundant with invoice) - add test_failure boolean parameter to TestPeer._test_simple_payment, in order to test correct propagation of OnionRoutingFailures. - maybe_fulfill_htlc: raise an OnionRoutingFailure if we do not have the preimage for a payment that does not have a hold invoice callback. Without this, the above unit tests stall when we use test_failure=True * lnworker.pay_invoice: log more * lnworker: clean-up sent_htlcs_q and sent_htlcs_info * lnworker: add RecvMPPResolution with "FAILED" state * lnpeer: refuse to forward htlcs that correspond to payreq we created * submarine swaps: set prepay_hash for normal swaps. * rm unused import * CI: don't run unit tests on "python:rc", looks like it's unmaintained * asyncio.wait_for() is too buggy. use util.wait_for2() instead * cli: "daemon -d": init rpc credentials before os.fork() * follow-up ImportedChannelBackup changes: fix opening wallet w/ old cbs * qt channels list: add TODO * cli: "./run_electrum daemon -d" to block until daemon becomes ready * daemon: rm "daemon_jobs". maybe makes _run API less error-prone * swapserver: small clean-up * qml: fix issues with 2fa, simplify terms and conditions retrieval code * tests: fix logic bug in some regtests * qml: fix wizard text for keystore, wrap text * qml: add deadzones on the edge of the screen to work around android back gesture unintended click events * swapserver: cleanup, add description * restructure submarine_swaps._claim_swap * swapserver: add test for refund path * swapserver: support prepayment of fees * submarine swap server plugin: - hold invoices - uses the same web API as the Boltz backend * follow-up e5ac521d38735117c583b0eba1b10ed2500fbc84 * payment bundles: fix bundle detection for trampoline * maybe_fulfill_htlc: check trampoline before hold invoice * Qt: Show notification instead of popup if a lightning payment fails. * fw_info: use hex value of payment_key, as this is persisted * simplify check_mpp_status * lnpeer: do not run maybe_fulfill_htlc more than once, if it triggered a payment forwarding. * use payment_secret instead of payment_hash * Restrict exception type in trampoline_forwarding_failures (follow-up 017186d10771070cd1730027e0bffac15202d120) * Add Vendor/Device IDs for CH340 based DIY Jade devices. (#8546) * Refactor trampoline forwarding and hold invoices. * lnpeer: simplify maybe_fulfill_htlc * Trampoline MPP consolidation: - fix parameters passed to maybe_forward_trampoline - use lnworker.trampoline_forwardings as a semaphore for ongoing trampoline payments - if a trampoline payment fails, fail all received HTLCs * Add unit test for trampoline MPP consolidation * test_lnpeer: deepcopy graph definitions in test setup * util.CallbackManager: keep strong references for running futures * tests: make regtest tests somewhat faster by faster polling in e-x * fix sweeping chan after local force-close using cb * tests: add failing test for sweeping chan after local fclose using cb * qml: silence some null deref errors at shutdown * qml: defer updates, fixes listitems not updating * qml: add explanatory infomessage when sending capacity is significantly less than local balance. Show message when attempting unfreeze of gossip channel in trampoline mode * qml: update channelbar when conditions change * qml: render reserved channel capacity in a darker tone, take frozen into account * allow more time to detect tor * send_tab: remove payment_identifier comments in send_tab * payment_identifier: reconstruct PI for bip70 invoice in pay_onchain_dialog instead of taking the send_tab PI * simple_config: allow deepcopy-ing ConfigVars * payment_identifier: add payment_identifier_from_invoice function to reconstruct a PI from bip70 invoice * payment_identifier: fix setting self.bolt11 to invoice in bip21 LN alt case * followup d15050a2bf2c0342b1489f354f6e85b4978935ff * actually remove the FIXME * build: include AppStream metainfo.xml in tarballs * payment_identifier: fix _on_finalize params, fix lnurlp send comment instead of description, refactor payment_identifier.get_invoice to standalone invoice_from_payment_identifier * qml: add LabelSync toggle * qt: kind of fix bip70 notify_merchant logic by passing around PI * payment_identifier.py: add some type hints, trivial clean-up * qt: fix: bip70 pay reqs need x509 verification * qml: remember invoice/qr type on ReceiveDialog * qml: show backup type, as in qt * lnchannel: add noop get_local_scid_alias for ChannelBackup * qml: fix "copy" and "share" buttons for channel backup dialogs * followup f5a8cc7076d3e9688965a3de7fb635605b10394d * Patch error caused by the method "parse_URI()" being moved and renamed: * qml: addressdetails item order, add technical properties header * qml: show private key in address details * qml: strip whitespace of data pasted/scanned before processing * lnpeer: fix logging of 'will fullfill htlc' * payment_identifter: add FIXME * payment_identifier: check if payment identifier is usable and enable/disable Send/Pay buttons * payment_identifier: factor out bip21 functions to bip21.py to break cyclic dependencies, parse bolt11 only once, store invoice internally instead of bolt11 string add is_onchain method to indicate if payment identifier can be paid onchain * payment_identifiers: also match local contacts * qt: show send tab if payment identifier is passed on the cmdline * setFrozen: use light blue, black text is difficult to read on a blue background * trezor: model T is 'T', not '2' * trezor: allow PIN of length 50 for T1 firmware >=1.10.0 and TT firmware >=2.4.0 (closes #8526) * qml: add PIN auth to close channel operation. * qml: show channel backup and explanatory message before local force close, and let user confirm before doing the close operation also show message dialog after close succeeded instead of just closing the channel close dialog * paytoedit: promote to QWidget and encapsulate QLineEdit vs QTextEdit juggling * daemon: split standardize_path from daemon._wallets keying * qml/qedaemon.py: don't use daemon._wallets field directly * payment_identifier: fix error path for bip70 * lnonion: rm support for legacy (pre-TLV) onions * lnaddr: make payment_secret field mandatory, in both directions * lnaddr: rm some tests where feature bits do not make sense * lnworker: use NamedTuple for received_mpp_htlcs. add/fix type hints * send_tab: simplify lock_recipient check * payment_identifier: move amount_range into payment_identifier * send_tab: add spinner for network lookup indication * send_tab: simplify lock_max * qt: disallow save of LNURLp/LnAddr * send_tab: add LNURLp range as tooltip on amount field * payment_identifier: add DOMAINLIKE payment identifier type, support domainlike -> openalias * fix bip70 potentially not returning gui fields tuple * use NamedTuple for payment identifier gui fields * qt: fix enable/disable max button for openalias and restrict openalias to address only * qt: move setting frozen styling to edit components themselves, fix re-enabling Clear button after finalize * qml: exclude non-address SPK from supported payment identifiers * payment identifier types as enum * payment_identfier: refactor qml and tests * payment_identifier: fix emaillike qt: validate on pushback timer, buttons enable/disable, cleanup * qt: refactor send_tab, paytoedit * refactor last callback, signals. remove timered validate, don't add invalid address/amount to outputs * payment_identifier: refactor round_3 to need_merchant_notify/notify_merchant * payment_identifier: refactor round_2 to need_finalize/finalize stage * payment_identifier: define states, refactor round_1 into resolve stage * contacts: use specific Exception when alias not found * pass wallet to PaymentIdentifier instead of config and contacts * whitespace, code style * fix flake8 issues (undefined references) * break the cyclic dependency * payment_identifiers: - this separates GUI from core handling - the PaymentIdentifier class handles network requests - the GUI is agnostic about the type of PI * qml: add workaround for android predictive back gestures in History component contributes to #8464 * fix bundled payments: - prepayment should be accepted immediately once bundle is here - mpp timeout all parts, but accept only current part * test_lnpeer: fix variable names after rename * lnworker: bundled payments * test_lnpeer: factorize code into TestPeer._activate_trampoline * test_lnpeer: follow-up 21e06b7065590bdca430bbba26fcda0fbf9fa2a8 * test_lnpeer: refactor tests for hold invoices * lnworker: add support for hold invoices * bitcoin.construct_script: add values parameter (to be used in swapserver plugin) * lnworker: always call check_received_htlc (no only for MPP) * lnpeer: new payment secret, derived without preimage. (this is needed for hold invoices) * follow-up previous commit * follow-up prev: fix flake8 test * move methods from wallet_db to json_db * qt chan details dlg: make some more labels selectable * lnaddr: add LnAddr.to_debug_json() method * lnaddr: make min_cltv logic less error-prone * lnworker: (trivial) clean-up which bolt-09 feature flags we set * ln: some clean-up for option_scid_alias * qml: fix lnurl-pay when config.BTC_AMOUNTS_ADD_THOUSANDS_SEP is True * lnurl: add encode_lnurl() for console usage, fix tests * json_db: register extra types outside of constructor * contrib/docker_notes.md: add notes re debian apt mirror, and envvars * lnpeer: improve logging in maybe_forward_htlc * lnworker.create_routes_for_payment: fix MPP detection * kivy: fix fx history rates * update release notes for version 4.4.5 * update locale * follow-up previous commit * make submarine swap server url configurable * follow-up previous commit * storage: encapsulate type conversions of stored objects using decorators (instead of overloading JsonDB._convert_dict and _convert_value) - stored_in for elements of a StoreDict - stored_as for singletons - extra register methods are defined for key conversions * trezor plugin: support external pre-signed inputs * trezor plugin: allow multiple change outputs * exchange_rate: try harder to refresh quote when cache is expiring * commands: onchain_history: reuse daemon.fx if available * trustedcoin: stricter client-side checks for 2fa fee * qt: follow-up "rm thousand sep when copying numbers to clipboard" * addr_sync: expand docstring for get_tx_fee * :bug: fix #8469 - fiat balance sorting (#8478) * :sparkles: remove thousand separator when copying numbers to clipboard * (trivial) convert more config keys * lnworker: fix rebalance_channels * win build: tighten `pip install` with `--no-binary` somewhat * mac build: bump pyinstaller (5.3->5.11) * win build: bump pyinstaller (4.10->5.11) * commands: version_info: include python version/path * android build: bump python, openssl * mac build: bump python version (3.9.13->3.10.11) * appimage build: bump python version (3.9.15->3.10.11) * win build: bump python version (3.9.13->3.10.11) * win build: update wine * build: bump libusb version * jade(hw): fix sign_transaction() * payserver: fix import * qml: limit BIP39 cosigners script type to initial choice (bip39) or initial seed (electrum) * fix flake8: follow-up prev * unconditionally raise ImportError if asserts are disabled * update release notes for version 4.4.4 * update locale * (trivial) qt wizard: add title to seed options dialog window * qml: make ConfirmTxDialog flickable if content larger than window (fixes #8446) * build: update pinned bitbox02 (partial rerun freeze_packages) * version_info cmd: better version for hidapi * dependencies: rm upper limit for hidapi * bitbox02: display amounts in sats if Electrum's base unit is sat * bitbox02: update to 6.2.0 * config: migrate qt gui optional tabs to config vars * config: trivial rename for better readability * bump libsecp256k1 version * config: introduce ConfigVars * SimpleConfig: change API of set_key(): "save" is now kwarg-only ------------------------------------------------------------------- Thu Aug 17 17:56:18 UTC 2023 - marec@detebe.org - Update to version 4.4.6: * update block header checkpoints * prepare release 4.4.6 * lnworker.create_routes_for_payment: fix MPP detection * wallet_db: upgrade to version 53, for imported chan backups * qt gui: input_qr_from_screenshot: better msg if screenshot is black * util.CallbackManager: make sure exceptions in cbs are logged * qml: handle importChannelBackupFailed in WalletMainView * interface: log: silence some tracebacks * CLI: fix regression re handling "unknown command", re locale * lnworker.pay_invoice: log more * lnworker: add RecvMPPResolution with "FAILED" state * CI: don't run unit tests on "python:rc", looks like it's unmaintained * follow-up ImportedChannelBackup changes: fix opening wallet w/ old cbs * Add Vendor/Device IDs for CH340 based DIY Jade devices. (#8546) * util.CallbackManager: keep strong references for running futures * tests: make regtest tests somewhat faster by faster polling in e-x * fix sweeping chan after local force-close using cb * tests: add failing test for sweeping chan after local fclose using cb * allow more time to detect tor * build: include AppStream metainfo.xml in tarballs * qml: remember invoice/qr type on ReceiveDialog * qml: show backup type, as in qt * qml: fix "copy" and "share" buttons for channel backup dialogs * qml: strip whitespace of data pasted/scanned before processing * lnaddr: add LnAddr.to_debug_json() method * qml: fix lnurl-pay when config.BTC_AMOUNTS_ADD_THOUSANDS_SEP is True * contrib/docker_notes.md: add notes re debian apt mirror, and envvars * trezor: model T is 'T', not '2' * trezor: allow PIN of length 50 for T1 firmware >=1.10.0 and TT firmware >=2.4.0 (closes #8526) * qml: add PIN auth to close channel operation. * qml: show channel backup and explanatory message before local force close, and let user confirm before doing the close operation also show message dialog after close succeeded instead of just closing the channel close dialog ------------------------------------------------------------------- Wed Jun 21 15:22:22 UTC 2023 - marec@detebe.org - Update to version 4.4.5: * commands: onchain_history: reuse daemon.fx if available * update locale * prepare release 4.4.5 * trustedcoin: stricter client-side checks for 2fa fee * :bug: fix #8469 - fiat balance sorting (#8478) * lnworker: fix rebalance_channels * payserver: fix import * fix flake8: follow-up prev * unconditionally raise ImportError if asserts are disabled * jade(hw): fix sign_transaction() ------------------------------------------------------------------- Sat Jun 03 10:34:45 UTC 2023 - marec@detebe.org - Update to version 4.4.4: * prepare release 4.4.4 * update locale * (trivial) qt wizard: add title to seed options dialog window * qml: make ConfirmTxDialog flickable if content larger than window (fixes #8446) * bump libsecp256k1 version * contrib/make_download: adapt to downloads being merged into index.html * util: simplify profiler * Add 3xpl.com to the list of explorers * qml wizard: "confirm seed" screen to normalize whitespaces * network: log original error text in catch_server_exceptions * qt SwapDialog: propagate errors from _create_tx * channel_db: raise specific exception when channelDB not loaded, allowing lnworker to mark payment as failed. (#8431) * CLI/RPC: better error msg when running daemon on Windows * Remove Localbitcoins provider * qml: remove logging ElCombobox * qml: LnurlPayRequestDialog validate amount between indicated boundaries * qml: styling LnurlPayRequestDialog * qml: remove unnecessary assert (#8420) * qml: validate duplicate master key in WCBIP39Refine for BIP39 cosigner seeds (fixes #8432) * qml: let ElCombobox determine implicitWidth based on the dimensions of all modelitems * qml: show pay_invoice error to user * qml: show historic fiat amounts when enabled and applicable * lnurl: fix lightning address regex * qml: show result dialog after password change ------------------------------------------------------------------- Thu May 11 15:40:40 UTC 2023 - marec@detebe.org - Update to version 4.4.3: * minor * prepare release 4.4.3 * update locale * release notes for 4.4.3: note about wallet upgrade to seed version 52 * wallet_db version 52: break non-homogeneous multisig wallets * qml: small screen fixes * qml wizard: enforce homogeneous master keys in multisig * qml: styling bip39 refine and recovery * qml: follow-up BtcField validator: take base unit fully into account * bolts: do not disconnect when receiving/sending "warning" messages * ledger: fix Ledger_Client_Legacy.sign_transaction() * qml: code style, imports * qml: refactor TxOutput into reusable component * qml: add share toolbutton for outputs in TxDetails * qml: add validators for BtcField and FiatField controls * qml: remove Qt Vkbd leftovers * qml: implement bip39 account detection * qt: persist addresses tab toolbar "show/hide" state, like in 4.3.4 * lnutil.LnFeatures: limit max feature bit to 10_000 * qml: add Technical properties header for TxDetails and LightningPaymentDetails * transaction: fix add_info_from_wallet_and_network * wallet.get_bolt11_invoice: handle request not having LN part * fix #8391: reintroduce recursion, limited to unconfirmed transactions * wallet: set_frozen_state_of_{addresses,coins} to save_db() to disk * follow-up prev: forgot to amend the commit message :( * locale/i18n: get default language and set it as early as possible * qt: handle expected errors in DSCancelDialog * hww: ledger: bump required ledger-bitcoin and adapt to API change * SECURITY.md: make email addrs more bot-resistant * update release notes * network: add another hardcoded signet server ------------------------------------------------------------------- Thu May 04 18:23:27 UTC 2023 - marec@detebe.org - Update to version 4.4.2: * update version to 4.4.2 + date release notes * update locale * qml: take internal, external, billing address colors from desktop client and color output addresses accordingly in ConfirmTxDialog, TxDetails, CpfpBumpFeeDialog, RbfBumpFeeDialog and RbfCancelDialog * qml: veriyMasterKey don't raise Exception on unsupported wallet_type, log error and provide user feedback * qml: always ask for the password on wallet-open, even for ks-enc-only wallets * build: update pinned pyqt5 (partial rerun freeze_packages) * followup ae12d236b297b74afc9566625cda1b14aa477a11 * qml: fix broadcastFailed signal connections in txdetails (fixes #8384) * update release notes * qml: cleanup * qml: add secure flag to WalletDetails, set when seed is shown * wallet.get_tx_parents: explicitly handle missing "from address" * wallet.get_tx_parents: fix: tx should not be its own uncle * wallet.get_tx_info: distinguish "future" tx from local in "status" str * qml network: restrict cases where server is shown "lagging" * config: force 'history_rates' config var to bool * qml: fix var ref * ledger: fix scan_devices for certain devices with multiple interfaces * util: add some logging to NetworkJobOnDefaultServer starting/stopping * qml: implement toggle for android SECURE_FLAG and add marker to wizard pages that should be secured. * qml: styling seedtextarea * qml: seedtext word suggestions below text area * qml: seedkeyboard padding, explicit keycode, backspace next to spacebar * wallet: save num_parents of utxos in wallet file. * wallet.get_tx_parents: populate cache regardless of self.is_up_to_date() * qml: disable Qt Virtual Keyboard and refactor keyboardFreeZone item to take android system keyboard into account * qml: add SeedKeyboard for seed entry without using system virtual keyboard * qml: no auto caps on import and master key controls * qml: don't start loadWallet if daemon is busy loading. * qml: properly delete wizard components after use. fixes #8357 * qml: fix 2fa callback issue #8368 * release.sh: check we have each binary (RM case) * hww: fix digitalbitbox(1) support * bip32: fix hardened char "h" vs "'" compatibility for some hw wallets ------------------------------------------------------------------- Thu Apr 27 18:38:25 UTC 2023 - marec@detebe.org - Update to version 4.4.1: * prepare release 4.4.1 * update locale submodule * qml wizard: fix restoring from old mpk (watchonly for "old" seeds) * qml: wizard to check if wallet name is already used * (trivial) add some type hints to wallet.get_tx_parents * transaction: calc and cache TxInput/TxOutput.address on-demand * get_tx_parent: populate cache in chronological order * util.profiler: add "min_threshold" arg * transaction: TxInput: store addr/spk/value_sats, instead of re-calc * qml: send screen: bip21: fallback to onchain addr if no LN channels * follow-up prev: re-add some newlines * gui/messages.py: allow localization of these strings * followup 61179ede8c9254a0e03ecb01db7a97805d98d8be * qml: consistency camelcase pyqtProperties * qml: consistency camelcase public slots qetxdetails, qelnpaymentdetails, qechannelopener, qeaddressdetails * qml: consistency camelcase public slots qedaemon, qeinvoice, qewizard * qml: consistency camelcase qewallet * qml: consistency camelcase public slots listmodels * qml: qebitcoin remove unused code, fix scoping, camelcase * qml: followup 22fa84a0, use fixed font, use camelcase for QML properties * qml: ReceiveDialog: clicking QR code to show encoded text * qml: QERequestDetails: use uppercase in bolt11 QR code * qml: invoice/request list: flip sort order: newest on top * qml: remove Scan.qml * qml: wallet menu wider to fit wide translated texts * CI: add some task dependencies * CI: also run flake8-bugbear, as part of flake8 * fix flake8-bugbear B023 * fix flake8-bugbear B017 * fix flake8-bugbear B016 * fix flake8-bugbear B008 * fix flake8-bugbear B011 * don't use bare except * qml: refactor all custom QRScan component wrappers to ScanDialog (except SendDialog, which has a Paste button and slightly different behavior) * qml: add hint property to QRScan * qml: create ScanDialog * qml: small fixes * p4a: fix for Qt5 accessibility bug * wizard.py: don't use mutable default args * wizard.py: change stack to be per-instance * wizard.py: fix clearing stack between wizards * qt: PayToEdit: fix input_qr_from_camera * qml: fix send "flow with LN but not LN enabled AND having bip21 uri" * qml/qeinvoice.py: turn _bip21 field into local var * qt SwapDialog: handle sm.max_amount_forward_swap() being None * qml: TxListModel: don't rely on wallet.db.get_transaction() finding tx * qt: fix sweeping * wizard.py: (trivial) fix type hint and an f-string * wallet: save_db immediately after init_lightning() generates keys * Revert "lnworker: schedule_force_closing is not async" * lnworker: schedule_force_closing is not async * qt piechart: show a full circle if there is only one item in the list * qml: ignore update() when wallet not set yet. closes #8330 * qml: don't crash when tx not found on histogram event. closes #8332 * qml TxDetails: txid must be updated after rawtx is changed * qml: follow-up fix for offline-signing pre-segwit tx * README: refer to `libsecp256k1-dev` instead of `libsecp256k1-0` * windows README: update reference to libsecp256k1-0.dll to incl newer * qml: remove buggy "Replace-by-Fee" checkbox from RbfCancelDialog * qml: update UI after import key/address, add icon to address/key import dialog * qml: address list heading translatable * libsecp256k1: update hardcoded .so lib name in binaries * qml: split off AddressDelegate and handle imported addresses more gracefully * qml: small fix in qetxfinalizer.py * qml: translate <no label> * bump libsecp256k1 version * libsecp256k1: add runtime support for 0.3.x * qml: second part of partially signing tx while not having txid yet * qml: fix a few texts that should wrap * qml: make txdetails less reliant on txid * qml: virtual keyboard: make margins smaller, for larger buttons * qml: first part of partially signing tx while not having txid yet * lnurl: forbid paying to "http://" lnurls (enforce https or .onion) * lnurl: add some error-handling/response-validation * bugfix: assert walrus (":=") combo side-eff. breaks w/ asserts disabled * qt ChannelsList: disable toolbar menu if `not wallet.has_lightning()` * contrib: fix build_locale.sh to work with relative paths * i18n: add "context" param to _(), and use it from qml * qml: fix MessageDialog layout * qml: TxDetails don't show or allow edit of label for unrelated tx * wizard: p2sh multisig is 'standard' in backend wallet * qml: only allow wallet menu if on wallet specific page * qml: limit wallet name label widths so they get wrapped/elided. fixes #8317 * fix: Fix libsecp256k1 loader on FreeBSD * qt bump fee: disable targeting an abs fee. only allow setting feerate * qt tx dialog: rm dead code * slip39: fix incorrect type hint * slip39: rewrite some strings for better localisation * wallet: _bump_fee_through_decreasing_payment: handle too high fee_rate * qml: show unrelated tx also in top InfoTextArea * wallet.set_broadcasting: fix incorrect type-hint and rename arg * qt send tab: rm incorrect bare raise * qt send tab: rm unused variable and add explanation * qt send tab: fix payto_contacts * remove PATH manipulation from .desktop file (#8309) * build: rm "contrib" from debian apt sources lists ------------------------------------------------------------------- Wed Apr 26 07:41:46 UTC 2023 - marec@detebe.org - Update to version 4.4.0: * update release notes for version 4.4.0 * Add support for Ledger Stax (#8308) * qml swaphelper: show errors in userinfo * qml: show "tx fee rate" in TxDetails, like in other guis * Revert "qml: don't determine channel state on gui string, use state enum instead" * qml: simplify path_protect decorator * follow-up a03f4769caa482ed45614e1ea523703f6e6082cb * qml MessageDialog: split messages into title and header message. hide header if it is empty. * release notes (qml) * update release notes (qml) * qt: use same icon as qml for swap dialog * update locale submodule * qml: reformulate swap success message * messageDialog: change title to Question for yesno dialogs * qml: change title of ConfirmTxDialog * follow-up a03f4769caa482ed45614e1ea523703f6e6082cb * regtests: test_watchtower started failing due to newly exposed bug * qml: small change to some qsTr() strings to reuse existing translations * i18n: log initial default language set based on OS locale * i18n: log set_language * fix typo * wallet/lnworker/etc: add sanity checks to start_network methods * auth_protect: pass authMessage in the auth_protect decorator, instead of relying on side-effects * add auth_message to delete_wallet * add auth message for open_channel * PIN dialog: display auth message as title, if available * follow-up 5b6a16e09739b2991249273e8fde827486ac9eeb * qml: add auth_message to AuthMixin, which is displayed above the Pin entry textfield, or shown in a messageDialog for confirmation. * qml: disable menu option associated with current page * wallet: don't restart wallet/network when init_lightning * qml: qechanneldetails fix remaining assignment * qml: don't determine channel state on gui string, use state enum instead * qml: only show channel ratio bar when appropriate * qml: don't show channel backup data in share screen * qml: piechart improve font rendering, use app font * qml: add recoverable channels warning to OpenChannelDialog * qml: fix recoverable channels setting * qml: ConfirmTxDialog amount fixed font * qml: piechart visible also when only unconfirmed, add unconfirmed to legend * qml: auth.py use f'' string format notation * util: merge time_difference() into age(), make age() localisable * tests: add tests for util.age * follow-up prev again... * follow-up prev: fix typo in comment * transaction: don't include WIT_UTXO for non-segwit txins * qml: remove send_onchain (dead code) * qml: remove swapStarted, swapSuccess and swapFailed signals the state property and associated stateChanged signal can be used instead * qeswaphelper: enrich user info * network: use IntEnum for connection states. Export user-visible strings in get_connection_status_for_GUI * qml: apply long-press implementation also on ReceiveRequests * qml: remove SwapProgressDialog, introduce qeswaphelper.state and enable dialog elements depending on qeswaphelper.state * qml: update userinfo * qml: InfoTextArea add Spinner to styles * qml: add confirm dialog before disabling recoverable channels (similar to trampoline) * qml: skip confirm messagedialog if pin is enabled * qml: always pass wallet password to init_lightning. emit also dataChanged so UI updates node pubkey * qml: fix setting empty password when switching to already open wallet with password * qeswaphelper: factorize code * (trivial) use util.get_asyncio_loop() in some places * wallet: is_up_to_date() to return False if taskgroup stopped * exchange rate: if default unit is sat, display value of 1000 sats * messageDialog: move yes to the right, no to the left. * followup prev * qml: since qeswaphelper is tied to SwapDialog anyway, let's make it a direct child * qml: destroy qeswaphelper with SwapDialog and catch RuntimeErrors if qeswalhelper members are accessed after * qml: remove leftover commented code * qml: keep QEAmount instances in qechanneldetails, use millisat amounts for local/remote capacity and can send/receive, refactor channel capacity graphic to ChannelBar and use that as well in ChannelDetails * qml: swap progress gimmick * qml: deduplicate swap initiation, move to main.qml * qml: fix typo * Revert "qml: add busy property and guards around swaphelper" * fix missing import * qml: fix 46b25317a98805fd81497c838ea2335e59d1c23b * qt and qml: update swap dialogs when new fees are received (see #8295) * fix flake8 test * payserver: fix #8299 * qml: default to system locale on android * qml: refactor txaccepted/txcancelled signals to standard accepted/rejected. * qml: add doAccept and doReject functions to ElDialog. These functions make sure no duplicate accepted/rejected signals are emitted. * qml: remove yesClicked signal, use accept()/accepted signal in MessageDialog. * Revert commit ddd778f7f7c9d00dcaf6d62ca6f1abd702a82553. * follow-up previous commit * network: remove network.notify() method; not really useful. * android: fix notifications by fixing "plyer" dependency * android readme: update "access datadir on Android from desktop" * qml: QEChannelOpener: accept any connection strings other GUIs accept * lnutil: add docstring and more tests for extract_nodeid * sanitise untrusted error bytes before logging it * qml: right-align balance labels * qml: BalanceSummary remove height hint for fiat amount * followup prev * qml: piechart from wallet.get_balances_for_piechart * qml: highlight selected invoice, styling Invoices buttons * kivy: fix ln chan open * android: exclude more unneeded files in qml resource bundle generation * qml: use same main-server icon as in desktop client * qml: add busy property and guards around swaphelper * qml: add logging of instance around SwapDialog create/destroy and swap trigger * qml: arrows consistency. replace with unicode arrows once we can assure these glyphs are included on device * qml history: update mempool depth for unconf txs on new histogram * qml: begone, you C-style for loops * qml: addresses list should not depend on wallet.use_change * qml: fix refresh bug in history, for local->unconfirmed tx transition * addr_sync: change return type of get_address_history to dict from list * qml rbf dialogs: use 'new fee', 'new fee rate' instead of 'mining fee' * wallet.sign_transaction: return tx if signed by swap manager * qml: in auth wrapper, use own logger and log func name * qml network overview: show server height, if lagging * qml: fixes * qml: fixes * fix typo (follow-up prev) * qml: use daemon threads everywhere the network is involved * qml: haptic use constant compatible with older android * Revert "qml: haptic override global setting" * fix typo (the error was silent) * qml: haptic override global setting * wallet.get_full_history: more consistent sort order * addr_sync: migrate usages of get_txpos to get_tx_height * qml: history: add some support for future txs * kivy: history screen: fix "future" txs * Add an extra state for invoices where our tx has been broadcast successfully, but it is not in our history yet. * Set status of onchain invoices to PR_INFLIGHT while tx is being broadcast * qml: handle max too * qml: save with user entered amount * qml: refactor qeinvoice.py * qml: QEWallet.broadcast: bring error msgs in line with qt * addr_sync.set_future_tx: clarify wanted_height off-by-one semantics * lnwatcher.maybe_redeem: wanted_height should always be absolute * qml: combine Connections on same target * qt: do not mutate already saved invoice after editing amount. * follow-up ba2faa8. fixes #8294 * qml: fix type hints in qeinvoicelistmodel * Add Device IDs for DIY Jade on M5StickC-Plus (#8291) * qml: do not block access to BalanceSummary if we are not connected. Display warning instead * qml: add haptic feedback for android. Also preload most used classes to reduce lag on first use. * qml: styling * qml: force same auto-capitalizing behavior on PasswordField regardless of echoMode * qml: avoid adding duplicate request/invoice to listmodel * qml: icon * qml: trustedcoin icon in 2fas wizard disclaimer * qml: follupup prev * qml: move user_knowns_press_and_hold to config * qml: add InfoTextArea about PressAndHold * qml: show lightning can send/receive amounts in balance details, rather than in requestDetaildDialog. * Qt: move new_channel_dialog to main_window and test available amount beforehand * qml: make zero balance visible in balance details. Disable open channel button if there is no confirmed balance * qml TxDetails: do not show rbf buttons if the tx is local * follow-up 56e685f: amount_sat may be None or max * follow-up 48689ecc89de1bada4906c0ff3d92b288267d5fe * qml tx details and rbf dialogs: use a single InfoTextArea, to the top of each dialog. * qml InvoiceDialog: remove delete button, it only makes sense if you visit the list * qml SwapDialog: move userinfo to the top, make it constant, add padding and labels below the slider * Qt: rename utxo menu action to 'privacy analysis' * qml InvoiceDialog: update userinfo messages * qml InvoiceDialog: show invoice type in the title, fallback address in the details * qml: Give user feedback after bumping the fee. * qml: (clarity) use separate slots for sign and sign_and_broadcast. * adb: take locks in get_balance. fixes #8200 * follow-up 2cbb16ae4b. fixes #8290 * qml: QEConfig.formatMilliSats to use config.format_amount * qml: allow user to delete invoices and requests from the list screen * follow-up c98b9e8d7b58002c8d45799293fbbd394ae31de3 * android build: enable asserts, and add sanity-check for it * balance details: use onClicked event. Early return if balance is not available * qml: dashboard * make flake8 not not happy * qml: keep lnurlData even after bolt11 has been retrieved, add isLnurlPay property and save bolt11 before triggering pay * qml: force Pin dialog above other dialogs * qml: auto-pay if entering InvoiceDialog from a lnurl-pay dialog * qml: replace assert by exception * log a warning if asserts are disabled * invoices: Use the same base method to export invoices and requests. * qml: handle scenario for non-lightning wallet scanning lightning invoice with fallback address * qml: followup b8aa87ded83e2312a18f6af2656c06d1a1bf556c * qml: mempool histogram color bar: show tooltips * qml: mempool histogram color bar: flip sign in feerate label * qml: handle phase-2 lnurl errors from within WalletMainView, add sanity check on the bolt11 invoice we get from the service * qml: add note regarding validity of qetxdetails instance and reset tx/txid members * qml: add new 'removed_transaction' callback in wallet.py, hook up callback in qewallet and emit balanceChanged events for add_transaction and remove_transaction * qml: virtual keyboard ~20% bigger * qml: port over 'show_qr to warn if QR code is missing data' * qml create request: if no address is available, show how to access the list of pending requests. * qml: rename Invoices -> Saved Invoices, Receive Requests -> Pending Requests * follow-up 4647fda04f08b5cf3ce82a7891a2e26bfd53b982 * qt receive_tab: fix "show_address_on_hw" functionality * (trivial) qt/util: add some leftover type-hints * update locale * lnpeer: handle NoDynamicFeeEstimates in co-op close * interface: workaround electrs erroring on 'blockchain.estimatefee' * qt network dialog: use icon for selected server, instead of "*" * qt tx dialog: show_qr to warn if QR code is missing data * qml: show invoices/requests lists through long press * followup 4517b3c2bb307c940c0678661b56a74773cde3c6 * qml: handle DataOverflow in qeqr.py and QRImage * qml: split updating userinfo from determine_can_pay, check determine_can_pay also in event handlers * qml: support create & save transaction on watch-only wallet, refactor showExport and supply relevant help text when sharing a transaction * qml: use the same button for copy and paste * qml InvoiceDialog: merge status and userinfo * qml: move save_tx to qewallet * qml: qenetwork log server_status only when changing, log network_status updates * update block header checkpoints * qml: BalanceSummary to treat server_status=="connecting" same as DC-ed * qml: update server in network dialog on more events * interface: fix ServerAddr.from_str_with_inference() for raw IPv6 addr * qt network_dialog: fix right-click "Use as server" for raw IPv6 servers * qml: add TODO about --offline missing * qt/qml: delay starting network until after first-start-network-setup * qml: rm QEConfig.serverString. Network.server is sufficient * network: add method init_parameters_from_config * qml: crash reporter: fix "show never" option * qml: move payment progress info text updates fully into qeinvoice, qeinvoice now updates itself directly from backend wallet callbacks * qml: don't show ln payment dialog, update info text instead * qml: network dialog to update "status" more often * qml: (trivial) fix warning in NetworkOverview.qml * qml: proxy config: fix socks4/socks5 dropdown * exchange_rate: FxThread does not need network * qml: ElectrumGui to inherit BaseElectrumGui * qml: use invoice.amount directly in amounts display * qml: channel details dialog: clarify whether object is a channel or a channel backup * qml swap dialog: show normal swap amount without mining fee, to be consistent with the qt GUI. * qml: add userinfo to invoices where amount needs to be filled by user * qml: show explanatory text when sharing partially signed tx after creating a multisig transaction * qml: wrap long server names (e.g tor onion address) * receive_tab: initialize fields * qml: remove network status indicator icon from server line * build: fail if not inside git clone * build: don't assume git repo in make_packages.sh * qml: flip and fix auto_connect in ServerConnectWizard * qml: same for last * qml: don't update wizard valid state from wizard pages that are not the current page * qml: followup 1e6b69251670dd3bf55ccac2d0646e1b5af8d460 * qml: bind invoice.amount to internal property. fixes #8262 * qml: followup 78d79290ad156122075d38c7ba7786d13821d2fd * qml: create workaround for spurious textChanged events coming from TextArea. fixes #8280 This commit also fixes a gap, where a seed text change could leave the page valid for the duration of the valid check delay timer, while the seed is actually invalid. * android: update readme, list required apt packages for qml on desktop * release: also build android apk for x86_64 arch * qml TxDetails: show short_id instead of block height and txpos * Revert "android build: rm x86_64 target from "all" alias, since it is broken" * android: update P4A to 3c2750795ba93aa1a3e513a13c2ea2ac5bddba17 remove qt5 patch to disable avx/avx2 for x86_64 arch * qml: move potentially slow tx generation in qeswaphelper to a short delay timer * release.sh: use qml gui for android release apk * qml: (minor) change name of Amount field * android build: rm x86_64 target from "all" alias, since it is broken * qml: only do android-specific stuff when on android * android build: allow specifying "x86_64" as target in build.sh * qml: lnurl override disabled amount edit color, show lnurlError to user * qml: let user enter lnurl6 amount * qml: ask password to show seed * qml: TxDetails small form-factor fix, wrap buttons to below fee-bump text if width is constrained * qml: wizard add label for second password entry * android: set default localization to en_GB to force number formatting and parsing to en_GB * qml: abstract ElDialog resize behavior to property * qml: enable Qt virtual keyboard and add Electrum keyboard style, modified from Qt 'default' style * Revert "qml: pressing "Esc" on desktop to ~simulate "back" button" * follow-up a080e5130f392b95988e9a82739cd2cf6b0035d6 * commands: fix satoshis decimal conversion in payto cmd and others * follow-up aa3697d * qml: reorganise toolbarTopLayout, so that top-left click opens menu * qml: pressing "Esc" on desktop to ~simulate "back" button * android build: default to log_level=2 * android: fix ply depends assert * lnurl6: pay invoice directly * qt receive_tab: use correct qrcode icon (based on dark/light theme) * android: log_level 2 when running in CI * android: upgrade to Qt 5.15.7, PyQt5 5.15.9 * follow-up previous commit * Qt receive_tab: toggle_view_button instead of tabs * qml: introduction text bottom margins in RbF bump fee and cancel dialogs * qml: AddressDetails heading * Qt history_list: disable summary if fx history is not available * build: fix repro builds where host userid != 1000 * password unification: bugfix, now passes test cases * tests: add more tests for daemon.update_password_for_directory * tests: add a failing testcase for daemon.update_password_for_directory * qml: layout fixes for small form-factor devices * qml: ElDialog now defaults to parent on Overlay.overlay This was replicated in basically all ElDialog derived dialogs * wallet: fix get_locktime_for_new_transaction for lagging server * qml: BtcField/FiatField ImhDigitsOnly input method hint * android: update P4A to 8589243afb48fdb116d791dc5b3973382e83273f include Qt Virtual Keyboard libraries and associated QtQuick components * follow-up c3e52bfafc2196f0d088928e7550c7065cc1a453 * build: follow-up prev: only use host userid for local dev builds * build: use uid of user building the build containers * build: add separate .dockerignore files * lnutil.ImportedChannelBackupStorage: change ser format: int16->uint16 * lnutil: clean-up ImportedChannelBackupStorage.from_bytes * lnutil: test ImportedChannelBackupStorage.from_bytes * commands: small fix and clean-up for "serialize" cmd * change message: detached QR code window * receive tab: disable widgets if request has expired, instead of applying red stylesheet * qt send_tab: simplify method names. * receive tab: do not use ButtonsTextEdit, add toggle to toolbar. * Qt: allow to save invoices that have no amount (such invoices are already saved by the QML GUI.) * qml: remove '1 month' expiry option. * Qr request_list: maybe fix elusive segfault * ln invoice dialog: show fallback address * simplify code (follow-up 2836dccfbbf5640ffbd7805c6fc6f7edf994cbfa) * Save user-entered amount in invoice. fixes #8252. * follow-up 2836dccfbbf5640ffbd7805c6fc6f7edf994cbfa * qml: Handle situation where no more addresses are available without creating addresses beyond the gap limit. * qml: styling CloseChannelDialog error text * QML: auto-delete expired requests. Add action to Qt menu * build: rm "non-free" from debian apt sources lists * qml: minor text change * qml: remove Never as request expiry option * qml: password change requires password, not PIN. fixes #8257 * Qml: new receive flow. fixes #8258 * android readme: update "access datadir on Android from desktop" * qml wizard: fix creating wallet from master key * qml: mark masterkey/wif/addr input fields as sensitive * qml: status icon InvoiceDialog * qt export history/privkeys: put wallet name in path * qt export history: let util.filename_field decide default path * qml: fix 43d6fd2aef11a10f816e9c26aa03b5ddf0c8acac * qml: remove editmode toggle, now enabled only on amount-less invoices * Qt swaps_dialog: do not use side effects to update tx. * follow up 7c2f13a76e181cd00f714d749e420f1c9423218a * follow-up fcbd25c1fd7e0ffa76c6249dae1630448fa8810e. fixes #8253 * rm log * qml: trsutedcoin layout consistency * qml: allow pay while amount in edit mode * qml: display network status and history server status separately. Also, show network fees on full screen width * qml: do not set oneserver based on auto_connect. * qml: fix layout issues in ShowConfirmOTP. fixes #8249 * qml: don't log (potentially) sensitive data, closes #8124 * qml: in the password dialogs, disable the password confirmation line if the first entered password is too short. * crash reporter: hardcode gui text. do not trust the server with it * qml: fix #8247 * follow-up 7a86d8d: ask proxy first * qml: fix display of server fee in swap dialog * qml wizard: enable restore from "2fa" legacy seeds * Add info on how to scan channel backups * Reword proxy question. * exchange_rate: guard against garbage hist data coming from exchange * Qt: set history_rates both through settings_dialog and history_list * icons: add "cloud_yes.png", and rename existing "nocloud" * qml: ask user whether to configure Tor or other proxy before presenting proxy detail config screen * qml: sharing channel backup only shows QR, not the data as text * qml: use InfoTextArea for help text in GenericShareDialog * qml: slider render voids * qml: SwapDialog slider styling; add zero tick and fill slider range from zero * qml: move Pay button to the right * follow-up qml slider: remove unneeded setters * qml: show disconnected state in BalanceSummary * qml: ensure that the slider neutral position is in the middle of the screen * qml: expand clickable area to full toolbar height and a bit more padding for right-side menu * qml: fix network histogram gradient fee range to 600-1 * qml: PIN protect wallet seed display * qml: show fiat state only for non-lightning wallets * qml: use daemon threads * qml: set default minimum histogram if histogram empty * qml: Invoice Dialog technical details header only relevant for lightning * qml PIN: do not lock inactive app, and remove timeout * qml: fix logical error with PIN code timeout. * qml: use get_node_alias in name_for_node_id. * qml: remove requestExpiry from preferences dialog (redundant) * add initial release notes for 4.4.0 * type checking, follow-up 206bacbcb38805012e6eb15850e5f004bf3d6bd9 * follow-up 206bacbcb38805012e6eb15850e5f004bf3d6bd9 * Revert "qml: ElDialog titlebar click moves focus, hack for android to remove onscreen keyboard" * qml: move technical details to bottom of InvoiceDialog, add routing hints * move MyTreeView and related classes to own submodule * Expiry: the setting is a period, not a date * receive tab: move back Expiry to its previous location, but use dialog instead of ComboBox. * receive tab: move expiry to toolbar * view menu: use checkable actions * Qt lists: consistently show Details as first item in the contextual menu * utxo_dialog: fix minor regression (set cursor to top after drawing) * tx in/out details: rewording 'receiving address' * lightning_tx_dialog: add editable tx description * Qt lists: always show item detail on double click * Qt: let user edit tx label from tx_dialog * qt: fix paying to openalias * qml: actually do the x509 validation for bip70 * qml: fix paying bip70 invoices * follow-up d56162c588dccc353d164f6cc8da41ad4c0d8eec * follow-up 842229c * qml: make fiat and btc states in BalanceSummary hopefully equally tall * qt send_tab: allow saving bip70 payment requests * qml: ElDialog titlebar click moves focus, hack for android to remove onscreen keyboard * Rework PaytoEdit: - show a QLineEdit by default, a QTextEdit only if paytomany is active. paytomany is a rare use case, it should not interfer with regular use (e.g. when a user inadvertently types enter). - this also fixes the visual appearance if the payto line - keep paytomany menu in sync with actual state * qml: don't pass lightning flag from GUI when creating payment requests * qml: Pin dialog wider (small form factor issue) * qml: handle empty histogram more gracefully, set histogram limit to 10MB * qml: SeedTextArea only lower case input * qml: render balance bar using (local|remote) capacity instead of can_(send|receive) * qt: fit StatusBarButton to inner height of status bar * qml: detect channel backups in send dialog * qml: show channel backups together with channels in Channels, remove Channel backups button from WalletDetails, filter backups to bottom, add backups section header * qt: MyTreeView: small clean-up for WatcherList and ContactList * qt settings_dialog: fix trampoline_cb * qt: MyTreeView: disambiguate "parent" and "main_window" * qml: de-dupe broadcastFailed handler, styling InvoiceDialog amount * qml: enable canPay in InvoiceDialog if wallet has insufficient funds to pay via lightning and invoice has fallback address and amount can be paid on-chain. In WalletMainView, follow on-chain payment path if available lighting balance is insufficient for the invoice amount * qt utxo list: copy menu: separate items for short/long outpoint * qt: HistoryList to also use BaseColumnsEnum * qml: don't crash on bolt11 invoice when wallet is non-lightning * qt: MyTreeView: use enum.auto() in Columns enum * qt: MyTreeView: make item labels independent of column order * Store file creation date and version in db * util.format_time: trivial clean-up * qml: use config.FEERATE_DEFAULT_RELAY as lower bound for fee histogram * coins tab: add toolbar. * qt wallet info dlg: make mess smaller * address_list: fix counter (was not displaying filtered count) * Address filter: remove label * qml: clamp min fees in histogram to 1, server can report invalid 0 fees * qr_window: keep menu in sync with actual visibility * qt tx dialog: better size policy. for nicer window resizing * address_dialog: set num_tx_label * Qt: add tx and address counters * qml: render fee histogram as a HSV gradient over next 25 blocks * channels_list: move swap and rebalance buttons into toolbar * privacy analysis: add warning about tx downstream of address reuse * settings_dialog: add confirmation dialog before disabling trampoline * restructure settings_dialog, create 'Units' tab * move 'allow_instant_swaps' option from preferences dialog to swap_dialog toolbar * move recoverable channel option from preferences to new_channel_dialog toolbar * Qt send tab: move payto_edit input buttons to toolbar * transaction_dialog: move tx_dialog_fetch_txin_data checkbox into toolbar * move fiat columns show/hide settings from settings_dialog to tab toolbars * swap_dialog: minor fix * move config settings that are related to invoice creation to receive tab. * toolbar: use custom MyMenu class with addToggle * qt tx dialog: add checkbox "Download input data" * qt: port "rate_limiter" function decorator utility from Electron-Cash * wallet: add_input_info to no longer do network requests * network: fix bug in best_effort_reliable * transaction: run validate_data before setting .utxo, not after * restore invoices_label and requests_label. move paytomany and toggle_qr_window from main menu to toolbar * Qt: move remaining menu items that are tab specific to tab toolbars: history, addresses, contacts * Qt: call create_toolbar in create_list_tab * invoices and requests lists: move import/export menus into local toolbars * minor fix * swap: wrap coros in tasks (req since python3.11) * qml: auto sign and broadcast for cancel txs too * bip32: (trivial) rename method strpath_to_intpath, for symmetry * Qt history list: Ctrl+F filter to work for "Short ID" (scid) * qml: auto sign & broadcast fee bump transactions if wallet can sign without cosigners. Show a dialog otherwise * qml: SwapDialog ok button * confirm_tx_dialog: simplify messages and warnings. reduce the use of side effects * TxInOutWidget: reduce size of displayed addresses * qml: don't explicitly add new channel to listmodel. It is updated automatically (and the model refreshed) through the channels_updated callback * qml: more robust keystore properties builder, support imported type * qml: BalanceSummary now flipflops between fiat view and btc view * qml: don't show placeholder in History when empty history list and synchronizing * (trivial) reduce log spam during ln-channel-open * qml: various styling * wallet: kill negative conf numbers for TxMinedInfo * qml: move PIN one section up in Preferences * qml: move channel backups to WalletDetails * qml: relabel Export tx to Share * qml: add word picker to SeedTextArea * reverse_swap: return as soon as we detect the funding transaction * confirm_tx_dialog: Use future tense in warnings + minor fix * set NoWrap for tx input/outputs. Use QTextBrowserWithDefaultSize in utxo dialog. * qml: successful PIN entry stays valid for 5 mins * qml: remove not implemented new version check option in Preferences * confirm_tx_dialog: fix toggle_output_rounding * Confirm tx dialog: warn if tx has multiple change outputs * Fix edge case of batch_rbf, where we need to spend outputs from the base tx * test_wallet_vertical: add a failing test for rbf-batching * Add rbf_merge_txid to PartialTransaction, instead of calling get_unconfirmed_base_tx_for_batching a second time from GUI. * fix tests side-effecting each other in test_wallet_vertical.test_rbf * make_unsigned_transaction: call get_unconfirmed_base_tx_for_batching lazily * confirm_tx_dialog: fix warning (follow-up previous commit) * confirm_tx_dialog: separate messages from warnings. add warnings about tx batching and spending unconfirmed coins * qml: styling, padding various wizardcomponents * qml: txdetails feebump/cancel below mempool position * qml: wizard button padding, wizardcomponent now a Pane * qml: wizard use flatbuttons * android: use material dark style for splashscreen action bar * qml: styling fixes * android: qt5 activity inhibit screenshots * Move transaction related settings into transaction editor. That way, users can see the effects settings directly on their transaction. This changes the API of make_tx: - get_coins is called inside make_tx, so that inputs can be changed dynamically - make_tx takes an optional parameter: unconfirmed_only, passed to get_coins - ConfirmTxDialog detects if we can pay by disabling confirmed_only or lowering fee * follow-up 2ed71579c39ab7ace9fc108a38394deb769ac98c: remove wrong assert * privacy analysis: detect address reuse * follow-up descriptor.py: small clean-up * trezor: TrezorPlugin._make_multisig to use MultisigDescriptor * wallet.get_script_desc_for_addr: use xpub instead of derived pubkey * descriptor.py: sortedmulti to sort .pubkeys already in __init__ * descriptor.py: do more validation in PubkeyProvider, and add tests * descriptor.py: clean-up and test PubkeyProvider.get_full_derivation_* * descriptor.py: fix get_satisfaction_progress * descriptors: add more sanity checks, and unit tests * tests: add test_descriptor.py from bitcoin-core/HWI * transaction.py: set txio.{witness,redeem}|script based on descriptor * transaction.py: rm PartialTxInput.{num_sig, script_type} * wallet: fix import_requests, and mention quirk re preimages * follow-up invoice changes: fix "Add lightning invoice to bitcoin URIs" * follow-up invoice changes: fix kivy RequestDialog * follow-up invoice changes: fix kivy lightning_tx_dialog * follow-up invoice changes: fix qt lightning_tx_dialog * invoices.py: small clean-up * follow-up invoice changes: fix kivy ReceiveScreen * follow-up invoice changes: fix wallet.get_bolt11_inv if amt is None * qml: sort languages * qml: background flatbuttons within pages * qml: padding around label above TextHighlightPanes * qml: remove bolt11 invoice from qelnpaymentdetails/LightningPaymentDetails * qml: report unified password change failure, impose minimum password length of 5, disallow empty passwords * qml: fix exception handler register opened wallet * qml: don't initialize swaphelper if a non-lightning wallet is opened Due to swaphelper's lifecycle (it is kept around longer than the swap dialog) it might get initialized with a non-lightning wallet. don't initialize in that case. * qml: PIN enable/disable/change more in line with other preferences items * qml: styling CPFP dialog, Toaster, GenericShareDialog * change invoice type hints following 719b468eee8b3e13680f6e7b90194d618181fe0c * follow-up 719b468eee8b3e13680f6e7b90194d618181fe0c * transaction.py: delegate size estimation to descriptors * descriptors: implement and use ".satisfy*" methods * qt swap dialog: (trivial) make "toggle swap direction" btn wider * qml: fix initial sync state, remove isUptodate property * qml: topbar label show wallet icon only when wallet name is displayed * qml: separate app menu and wallet menu * qml: don't init QERequestListModel/requestModel * Revert "qml: don't update (and by extension initialize) requestModel, as it isn't used" * qml: don't update (and by extension initialize) requestModel, as it isn't used * qml: move menu back to topbar, move addresses and channels to walletdetails and add walletdetails to topbar menu * utxo dialog: fix pipe symbol * descriptors: wallet/transaction: construct intermediate osd * descriptor.py: add a dozen TODOs * descriptor.py: don't allow ypub/zpub inside descriptors * descriptor.py: speed-up DescriptorChecksum a bit * add descriptor.py from bitcoin-core/HWI * qt tx dialog: remove "desc" field, just use wallet.get_label_for_txid * lnworker: start watching already redeemed chans if txs are missing * lnsweep: use chan.logger instead of module _logger * qt tx dialog: fix for ln-related txs when --offline * TxEditor: always show preview button * utxo details: show list of parents as a tree * qml: remove requests button again * qml: text change 'Change' to 'Modify' * qml: TxDetails buttons refactor all buttons have icons now bump fee and cancel tx now below status line in highlightbox * Refresh bolt11 routing hints when channel liquidity changes: - wallet_db update: separate Invoices and Requests. - do not store bolt11 invoice in Request * qml: explicitly use None when empty string is used as password backend requires None, Qt5 passes empty string * qml: log and reraise any exceptions in the constructor of QEAbstractInvoiceListModel, so we at least see the root cause of the confusing AttributeError: 'QEWallet' object has no attribute 'requestModel' * qml: qerequestdetails check lnworker before deref * qml: follow-up fe540200a9873fd29f860fada537a290c9b26cae * qml: report wallet open problems when walletdb cannot open a wallet (WalletFileException) * qml: fix toaster quirkyness * follow-up 72fb43f950815ef7a655c39f47610c835ac155d0 * requests list: remove hidden column LN_INVOICE * qml: clear deferred intent after processing * wine: add --allow-downgrades to second apt-get command * qml: defer intent handling at startup, otherwise it gets lost as the app is not handling the signal yet. Also defer intent handling until a wallet is opened. * build: update build container base image versions, update apt sources to current * qml: wording/styling NetworkOverview * android: include p4a cherry-pick 70fa6ddd040dc14f3cb28ebc2cfc5779c5cc5342, avoid sh>=2 * qml: avoid stacking ReceiveRequests pages * qml: override finish button text in ServerConnectWizard * qml: move max ln receive to ReceiveDetailsDialog, always show invoice fields on ReceiveDialog * qml: don't show option Never for expiry combobox when in preferences * qml: add option to open ReceiveDialog with existing request key * qml: reintroduce receive requests list page * qml: replace Enter manually option in SendDialog with Invoices, which is removed from main menu * lnworker: do not assume MPP in num_sats_can_receive * utxo privacy analysis: - add a new event, 'adb_removed_tx' - new wallet method: get_tx_parents - number of parents is shown in coins tab - detailed list of parents is shown in dialog * Qt tx dialog: rename Save and Export actions * qml: hamburger styling/menu position * qml: reset position in history to top when loading another wallet * qml: move remaining buttons to bottom of dialogs * qml: wallet loading indicator as modal dialog, unclosable * qml: ElDialog assure close behavior is consistent with allowClose property * qml: add loader overlay, avoid interacting with the to-be-unloaded wallet * qml: initial async wallet load * qt tx dialog: fix "preview" for unsigned pre-segwit tx * ledger: fix sign_transaction for Ypub / sh(wsh(multi())) wallets * cosignerpool: minor fix, follow-up new GUI flow * tests: disable asyncio debug mode * tests: clean-up use of asyncio * tox.ini: allow running tox from local dev env * tox.ini: (trivial) reformat tabs->spaces * ci: also run unit tests with PYTHONASYNCIODEBUG=1 * Qt: remove redundant history_list update * tests: rm SequentialTestCase to further simplify inheritance * tests: rework testnet * swaps: rm support for p2wsh-p2sh lockup scripts * swaps: small refactor and add unit tests for claim tx * util: kill bh2u * transaction: rm hardcoded sighash magic numbers * ecc.py: add/fix some type hints * transaction.py: move Tx.serialize_input -> TxInput.serialize_to_network * qml: fix lifecycle issues with swap helper. previously tied to Channels view, now dynamically created and parented to app * qml: fix name clash QML vs registered QObjects NewWalletWizard and ServerConnectWizard * qml: don't present bolt11 invoice when invoice amount > num_sats_can_receive * qml: refresh transaction list when wallet_updated+is_up_to_date and history is dirty * qml: RbF: do not decrease payment when payment is a swap ref f617887509c92833ffaa6db25d8ed0497acb9ddb * bitcoin.py: (trivial) rm redundant "net=" defaults * qml: add status update timer for invoice listmodel * qml: fix a few leftovers * tests: add more "sweep" tests for different script types * ecc: make ECPubkey.__lt__ relation strongly-connected/total * bip32: change hardened char "'"->"h" when encoding derivation paths * qml: styling CloseChannelDialog, InvoiceDialog * qml: add expiry timers to update status string in InvoiceDialog and ReceiveDialog * receive tab: copy to clipboard when tab is changed * Qt: schedule tooltip in do_copy * lnchannel: add more debug logging for ctx/htlc sigs * minor fix * Qt: make copy menus more consistent * UTXO tab: add menus to fully spend utxo: - send to address - in new channel - in submarine swap * swaps: cache pairs to file * submarine_swaps: fix bugs and create method for max_amount_forward_swap * qml: fix display of negative millisat amounts in qefx.py for historic amounts too * qml: use FormattedAmount for fee in LightningPaymentDetails * qml: fix display of negative millisat amounts in FormattedAmount, qefx.py * qml: styling * Qt history tab: create submenu for edit actions * RBF dialog: do not decrease payment for swap funding transactions. * qml: qedaemon doesn't need wallet path and name properties, pass them via the signal * qml: improve OpenWalletDialog, PasswordDialog and PasswordField * qml: styling InfoTextArea * qml: ConfirmTxDialog styling slider, avoid running off small screens * qml: android notification params * qml: ConfirmTxDialog layout fixes * qml: fix flickable margins TxDetails and WalletDetails * tx dialog clean-up: remove 'finalized' field and related code * UTXO tab: simplify freeze menus * TxEditor: various tweaks * TxEditor: rework update methods, separate _update_message from _update_send_button * qml: fix max toggle in InvoiceDialog * qml: OTP dialog improvements * TxEditor: make trigger_update not private, call it on rbf combo changed. * TxEditor: move set_locktime * TxEditor: update_extra_fees, overloaded by ConfirmTxDialog * TxEditor: set locktime * qml: don't stack exception dialogs when multiple exceptions happen * qml: Addresses fills page * qml: fixes TextHighlightPane * plot history: also include lightning items * perf: load matplotlib on-demand * invoices: improve perf by caching lnaddr even earlier * wallet.try_detecting_internal_addresses_corruption: check more addrs * addr_sync: (trivial) don't use private utxo._is_coinbase_output * qml: allow ln node connect string without port, default to 9735 * qml: add swap progress dialog * make ConfirmTxDialog resizeable * text guis low hanging fruit * use shared prefix for config keys related to tx editor * feerounding_icon: use transparent background, and disable if not visible * qml: add wallet button icon * payserver: better handle running with --offline * qt: MyTreeView.refresh_all to use maybe_defer_update * transaction: cache address determination from output script * invoices: get_outputs to use .outputs field if available * Qt: new onchain tx creation flow: - transaction_dialog is read-only - ConfirmTxDialog and RBF dialogs inherit from TxEditor - TxEditors are configurable * qml: remove ugly notification popup, add wallet name to notifications * qml: qewallet logger add wallet name * qml: override default Material styling for toolbar, use grays * qml: button min size * qml: set a minimum button size * qml: shorten text for adding addresses/keys and add add.png icon * qml: fix issue with number of addresses in model * qml: styling ImportAddressesKeysDialog * qml: silence undefined property errors when not really used * qml: better fix * qml: fix show mempool depth when unconfirmed * Revert "qml: silence undefined property errors when not really used" * qml: silence undefined property errors when not really used * qml: add rocket.png for fee bump icon * followup a84450386112b45a56717ec3a178d0329e113e1f * qml: move separator visible property binding to its component so our master index ref is stable * qml: move fee bump button below fee amount * qml: update history in more cases when saving/removing tx * commands: allow cmd to launch new gui window for wallet * qml: fix issues with close channel * qml: fix confusion when dialogs not on top of activeDialog stack are closed * gitignore: add .so.* (.so libs regardless of version) * lnpeer: add note about thread-safety, and some checks * Add another signet electrum server * Add ex.signet.bublina.. option for signet explorer * remove duplicate import * libsecp256k1: update hardcoded .so lib name in binaries (#8186) * contrib/make_libsecp256k1.sh: rm Makefile patch * bump libsecp256k1 version * libsecp256k1: add runtime support for both 0.2.x and <0.2.0 lib vers * qml: styling MessageDialog * qml: show correct delete confirm text for channel backups * qt tx dialog: fix for pre-segwit legacy wallets * qt tx dialog: add "Copy Outpoint" to both IO ctx menus * qml: correctly update channel list after channel backup import, and correctly delete channel backup * qt tx dialog: readd "insert_tx_io" code-factorisation recently rm-ed * Support latest Debian libsecp256k1 package * qml: make sure to keep ref to instance * qt tx dialog: fix size of IO textedits when resizing * transaction: (trivial) add comment about is_cb_input vs is_cb_output * qt tx dialog: add context menus to IO fields * qt tx dialog: make scid and addr texts clickable in IO fields * qt AddressDialog: separate parent and window * qml: assert role exists in qechannellistmodel.filterModel * qml: remove leftovers WalletMainView * followup b2a02dd047f409757a25aba0f0b1483807f81a78 * qml: put FlatButtons in ButtonContainer where (potentially) more buttons are grouped * qml: FlatButton icon above text, smaller fontsize * qml: add ButtonContainer, which lays out its children horizontally with separators in between * transaction_dialog: move tx in/out widgets into own class * qml: BalanceSummary sync progress * qml: qewallet sync status and progress * qml: use dirty flag on qetransactionlistmodel * minor fix; follow-up d6febb5c1243f3f80d5a79af9aa39312c8166c91 * qt gui: more resilient startup * qml: add flickable to exceptiondialog * handle empty stack in base_crash_handler * qml: remove channel backup button if channel list item is channelbackup * qml: add is_imported attribute to channel list item, show different icon if channel backup is imported * qml: FormattedAmount: also update fiat when the amount instance changes * qml: remove RequestDialog (unused) * qml: add simple Toaster, mainly to indicate copy to clipboard * qml: add bug icon * qml: move Lightning can receive amount to ReceiveDialog, rename Lightning can send to Lightning (balance) in BalanceSummary FormattedAmount is now aware of FX rate changing and updates accordingly * qml: hamburger menu use icon, not label * qml: confirm close electrum dialog instead of double-tap back button * CI: (trivial) make "Locale" task depend on same py version it uses * contrib/push_locale: mv temp files from project_root to locale/ * refactor locale scripts * qml: fix leftover in TxDetails * qml: clean up Channels/ChannelBackups, implement proper count property on QEFilterProxyModel * qml: add ChannelBackups.qml * qml: add initial generic listmodel filter QEFilterProxyModel * qml: add language selection to qeconfig.py/Preferences * add qttools5-dev-tools to requirements for building locale (needed by qml translations) * qml: add gettext-wrapping QTranslator * extract QML translation strings, convert to gettext and combine with rest of template * qml: remove leftover * CI: exclude generated protobuf files from flake8 * re-generate protobuf _pb2.py files and bump min required protobuf * qml: show menu also when no wallet loaded * qml: handle non-deterministic wallet address selection when generating payment request * qml: make sure ExceptionDialog is always on top * qml: BalanceSummary only show Lightning values when wallet is lightning * release process: fix typo in trigger_deploy.sh * release process: don't create "uploaded" marker file in release.sh * qml: remember user selected request type and pre-select on subsequent payment requests * contrib/build-wine/unsign.sh: small improvements/fixes * build: scripts to not require electrum to be installed * prepare release 4.3.4 * update payserver submodule * CI: bump available memory for unit tests (1G->2G) (#8166) * release process: split release.sh into two * qml: really disambiguate text prefs item onchain fallback address * follow-up d6febb5c1243f3f80d5a79af9aa39312c8166c91 * Display mined tx outputs as ShortIDs instead of full transaction outpoints. * manually rerun freeze_packages, restricted to fix known CVEs only * CLI: make "electrum stop" robust to dead daemon / lingering lockfile * Qt: unify calls to get_transaction (follow-up 121d8732f1e1d97f70a0f72221b4acca1e818319) * fix crash when trying to display channel backup details * build: don't force-push git branches needed for historical builds * follow-up 5d9678a2690abbfbb22dc137f94e51fea28a95fd * lnworker: store onchain default labels in a cache * lnworker: extend swap label only if we are still watching the address * qt coins tab: sotz by height * payserver: add 'view in payserver' menu item * allow for translation of age strings * fix adding coins to coincontrol from address list * qml: remove Dialog standardButtons everywhere * qml: BalanceSummary add lightning can send/receive amounts * qml: make bolt icon a gossip progress indicator * qml: NetworkOverview removed from menu, now triggered by onchain and lightning status icon * qml: disambiguate text prefs item onchain fallback address * qml: increase width of elevator in History * qml swap send and receive buttons, move menu button to bottom button group * payserver plugin improvements * qml: define a common Heading component for page section headings * add explicit is_lightning check before potentially calling lnworker.get_invoice_status in wallet.export_request * update payserver submodule * qml: move (un)freeze buttons next to can send/receive info * qml: just to be sure, keep QEAmount instances around if exposed to QML * qml: switching dialog buttons seems to SEGV sometimes * update payserver submodule * qml: refactor most amount values to FormattedAmount, use fixed font more consistently * qml: implement RbF bump methods Decrease payment/Preserve payment extend FormattedAmount to wrap alt to next line, or show as empty when invalid * qml: fix unintended mangling of TX (non-psbt) for QR * qml: close SwapDialog only after starting swap. * qml: let Pin dialog decide its own height * update payserver www submodule * Add an AppStream metainfo.xml file * CLI: poor man's detection of already running daemon. * qml: show QR when finalized and saved * qml: fix tx not saved when PIN active * fix wizard leftovers of removed 'multisig_show_masterpubkey' view * lnmsg: remove handling of optional fields in msgdata * Support scid alias: - save remote alias for use in invoices - derive local alias from wallet xpub - send channel_type without the option_scid_alias bit (apparently LND does not like it) * channel_db: protect load_db against raw messages that can no longer be parsed * fix field type: 'varint' was rebńamed to 'bigsize' * lnwire: update csv files with recent BOLTs * Use different trampoline bits than Eclair. Fixes #8141 * qml: add lightning network status indicator in top bar, add channel peers to NetworkOverview * qml: serverlistmodel use network is tor flag for server list filter * follow-up prev: fix tests * lnmsg: add details to FailedToParseMsg, log message type * qml: SendDialog icon * qml: show Tor status in NetworkOverview * immediately check for Tor upon proxy set * qml: refactor proxy options to map, remove explicit TOR option * Increase trampoline fee if we receive TEMPORARY_CHANNEL_FAILURE * payserver: daemon._run should only be called once * payserver: make daemon_wallet_loaded hook reliable * Return list of tx hashes for partially paid invoices too * wallet.get_request_by_addr: make deterministic * tests: add tests for wallet/invoices functionality * wallet: fix deadlock in on_event_adb_added_verified_tx * util: create_and_start_event_loop() to wait until loop starts * invoices: fix to_debug_json: LN r_tags might be missing * qml: don't initialize instance variables on class scope for non-singletons (this somehow escaped attention before, as most objects usually don't have multiple instances, unless multiple wallets are open at the same time.) Also, move all signal declarations, class constants and variables to the top of class definitions. * qml: flake8 happifier * qml: Only enable Invoices menu option when there is a wallet opened * qml: crash handler, move Exception_Hook to qeapp.py * qml: initial crash handler impl * qml add richText property to MessageDialog. TODO: now we need to handle clicks on link too * locale amounts: consistently use "." as dec point, and " " as thou sep * i18n: document not to use old-style (%) string formatting * update status bar when setting "zeros after decimal point" is changed * CLI: decode_invoice: show the last hop of routing hints * Space between pie chart and balance fix * qml: styling main view * qml: styling OpenWalletDialog * qml: fix invoice amount editable when expired * qml: styling TxDetails * qml: messagedialog No now maps to rejected signal * qml: use FormattedAmount in LightningPaymentDetails, formatter and fx now use millisats if available, else sats * use placeholder for better translation * qml: fix prev * qml: show piechart legend and amounts * qml: don't create new QEAmount instances on query, re-use same instance * qml: add show seed on WalletDetails.qml * qml: remove electrum logo from top bar * make lnwatcher less spammy * don't log sensitive wizard values * qml: cleanup prev commit, add default icons to MessageDialog, add question icon * qml: make trampoline vs gossip routing a switch, and ask confirmation for selecting gossip mode * qml: underline selected qr type indicator * qml: define address colors in Constants, change frozen address to blue * qml: make app menu modal * qml: rename NetworkStatusIndicator to OnchainNetworkStatusIndicator * qml: remove Wallets menu option, wallet selection is now shown when pressing topbar wallet name * qml: remove back button in top bar, move menu button to left add AppController.isAndroid function to test for android platform. Disable fade in if not on android * qml: allow delete wallet if has channels not in REDEEMED state but is channelbackup * follow-up 975cdca47482c043d846eb2ea1533c65d7d4b3d1 * Qt coin control: allow to add/remove coins one by one. * qml: make listmodel item count a property for channels and transactions * also build android x86_64 arch. update python-for-android to include x86_64 qt5 patch. * better handle p4a parent qt5 recipe * center electrum_presplash.png, reduce canvas to 512x512 * qml: remove qml splash, update python-for-android with splash support. main.qml now shows black cover that fades out when app is ready. * fix race in address synchronizer (follow-up 29a0560f98c85a7c804401d79e2d26119259eb93) * update python-for-android to electrum_20210421d fb8f6fc44ef7465500c534186b0aba2a5e4ddc15 includes fixes for nativeSetenv * qml: fix autoconnect/single server selection, tapping server selects. * qml: change piechart item order, less chance of overlap * qml: fix regressions after can_rbf removal, remove RbF checkboxes * qml: fix Switch layout issues and add section headings to preferences * qml: add placeholder text for transaction history and channel list * qml: styling fixes * util: improve Tor SOCKS detection * prepare release 4.3.3 * qml: handle android back button in wizard, map to prev page action instead of closing wizard. Also add initial focus to WCHaveSeed and WCHaveMasterKey wizard components. * qml: add a few more dialog icons * release.sh: (trivial) add details re how to git tag * update locale * qt gui: display nice error if QR code data overflows * cirrus CI: disable macOS builds, as no more intel-based mac workers * build: use `$CIRRUS_CPU` to determine cpu count on CI * qt network dialog: don't poll Tor socks proxy, but scan on interaction * qt gui: handle swap server unreachable * qml: server list styling, group indicator per chain * qml: add serverlistmodel.py, add server list to ServerConfigDialog.qml * qml: styling server/proxy config * qml: move label outside of server/proxy config component * qml: make dialog content flickable for small displays for CloseChannelDialog, OpemChannelDialog and InvoiceDialog * qml: show swap service problem to user * qml: don't crash when initiating swap when swap service is not available * wallet: fire fewer 'status' and 'wallet_updated' triggers * bitcoin: 3x speedup for DecodeBase58Check * bitcoin: trivial speedup for DecodeBase58Check (down to ~80% time) * rework AddressSynchronizer.is_up_to_date * Revert "wallet.is_up_to_date: fix flickering during sync due to race" * wallet.is_up_to_date: fix flickering during sync due to race * hw DeviceMgr: speed-up client_for_keystore() for common-case * hw DeviceMgr: don't filter already paired devices in wizard * hw DeviceMgr: mostly switch away from xpubs for device pairing * hw bitbox02: show error if trying to sign_message on testnet * Simplify RBF user experience: - replace complex strategies with a simpler choice, between preserving or decreasing the payment. - Always expose that choice to the user. - Show the resulting fees to the user before they click OK * hw DeviceMgr: simplify pairing management * fix rbf parameter in paytomany API (follow-up e1dc7d1e6fb2fc5b88195b62cbe1613b252db388) * fix tests (follow-up e1dc7d1e6fb2fc5b88195b62cbe1613b252db388) * Set the RBF flat to all transactions, and remove the 'use_rbf' preference from the GUI, because the mempoolfullrbf option in Bitcoin 0.24 makes RBF signaling pretty meaningless. Fixes #8088. * simplify prev * logging: add a relative timestamp to stderr console logs ------------------------------------------------------------------- Sat Jan 28 10:33:30 UTC 2023 - marec@detebe.org - Update to version 4.3.4: * prepare release 4.3.4 * release process: split release.sh into two * payserver: add 'view in payserver' menu item * payserver plugin improvements * update payserver submodule * manually rerun freeze_packages, restricted to fix known CVEs only * CLI: make "electrum stop" robust to dead daemon / lingering lockfile * update payserver www submodule * Add an AppStream metainfo.xml file * CLI: poor man's detection of already running daemon. * channel_db: protect load_db against raw messages that can no longer be parsed * Use different trampoline bits than Eclair. Fixes #8141 * follow-up prev: fix tests * lnmsg: add details to FailedToParseMsg, log message type * Increase trampoline fee if we receive TEMPORARY_CHANNEL_FAILURE * payserver: daemon._run should only be called once * payserver: make daemon_wallet_loaded hook reliable * Return list of tx hashes for partially paid invoices too * wallet.get_request_by_addr: make deterministic * wallet: fix deadlock in on_event_adb_added_verified_tx * util: create_and_start_event_loop() to wait until loop starts * update status bar when setting "zeros after decimal point" is changed * make lnwatcher less spammy * prepare release 4.3.3 * update locale * qt gui: display nice error if QR code data overflows * cirrus CI: disable macOS builds, as no more intel-based mac workers * build: use `$CIRRUS_CPU` to determine cpu count on CI * qt network dialog: don't poll Tor socks proxy, but scan on interaction * qt gui: handle swap server unreachable * bitcoin: trivial speedup for DecodeBase58Check (down to ~80% time) * simplify prev * logging: add a relative timestamp to stderr console logs * Qt chan list: Ctrl+F filter to work for long channel id * lnchannel: log chan id in ChannelBackup logger * kivy: remove user_rbf boolean property (unused) * submarine swaps: set rbf for CLI transactions (it was already the case with GUI) * commands: Make conversion to/from BTC the default * commands: Better default currencies in convert_currency * exchange_rate: "BTC" to "BTC" rate is not guaranteed to be present * commands: Improve error messages in convert_currency * commands: Remove unused requested_amount and fix a typo (#8090) * commands: Add command "convert_currency" * exchange_rate: Add precisions of some cryptocurrencies * exchange_rate: Allow formatting amount with custom currency * log if get_history fails sanity check * qml: ReceiveDialog styling * CI: AppImage build is failing with "Container errored with 'OOMKilled'" * ledger plugin: fix binaries * build: don't hardcode num worker threads "make -j4" * qml: show extra fee in ConfirmTxDialog (2fa) * qml: request details hooks to backend callback, not to QEWallet signal. Also fix destructor issue * qml: receive dialog flickable when challenged vertical space * qml: keep elements in place when QR code (and size) changes in ReceiveDialog * qml: refactor OpenChannel to dialog, fix lifecycle/race conditions swap & openchannel * qml: swapdialog styling fixes * qml: keystore icon indicator for watch-only * qml: network overview page * qml: pastebutton and qr scan will only fill textarea after validation, more clear text for pubkey and seed for cosigners * qml: skip multisig_show_masterpubkey view and instead present master pub key on every cosigner key/seed import page. * qml: listen for verified callbacks in fee bumpers, tx canceller and txdetails. TxDetails updates the page, Rbf adn Cpfp fee bump dialogs and RbfCancelDialog auto-close. * qml: disable drawer for now * qml: move balance from drawer to history listview header * qml: fix imports * qml: feebump button in TxDetails next to tx fee, remove RbF flag * qml: add initial logic and UI for CPFP * qml: rename QETxFeeBumper -> QETxRbfFeeBumper, BumpFeeDialog.qml -> RbfBumpFeeDialog.qml * follow-up prev * qml: implement cancel rbf tx * qml: add final/rbf to txdetails * qml: add 'local' and 'mempool' sections to history, update section on on_tx_verified callback * qml: fix create/confirm seed_variant parameter, styling receivedetailsdialog * Extended the expiration date of my gpg pubkey * Update @lukechilds server address * qml: add lightning node id to walletdetails * qml: show all keystores on WalletDetails page * wallet: change _requests_addr_to_key map to multi-map * qml: always try to generate an address for request regardless of bolt11_fallback config. * wallet: _requests_addr_to_key map to prefer unexpired reqs if collision * follow-up prev * Qt request list: Ctrl+F filter to work for addr, LN invoice, LN rhash * Favor first output address in invoice/request instead of fallback address in LN invoice. (#8078) * qml: fix normal submarine swap max amount calculation, add error reporting to swap initiation * qt wizard: (fix) during 2fa wallet creation, shared QR to be drawn * qml: show channelbackups in channel list, add channelbackups support in qechanneldetails.py, only request-fclose option in CloseChannelDialog * qml: add import channel backup * qml: only show channel peer node name if known, add node pubkey to ChannelCloseDialog * qml: wizard support for back button * qml: update swaphelper server fee * qml: multisig implement finalize tx not complete result * qml: move tx verified event handling to transactionlistmodel, refresh history after broadcast * qml: add save Tx option * qml: small form-factor fixes * qml: multisig create_storage * qml: multisig wizard check duplicate keys * qml: add plumbing for duplicate master pubkey check, fix multisig end conditions * qml: consolidate multisig support into existing pages WCHaveSeed, WCHaveMasterKey, WCBIP39Refine. Have these put cosigner data directly in the correct wizard_data leafs instead of relying on wizard accept handlers. * qml: add multisig support in WCBIP39Refine, add seed valid check for multisig in qebitcoin.py * qml: fix imports, flake issues * qml: remove ready signal hack, wizard_data now available at WizardComponent construction time * qml: allow wizard pages to supply title suffix * qml: multisig wizard; cosigner w. electrum seed * qml: refactor is_last checks to mostly lambdas, add multisig flow for 1st cosigner keystore, add initial flow and view placeholders for additional cosigners. * qml: enable first wizard page of multisig * qml: styling TxDetails * qml: styling channel details * qml: some styling fixes * qml: channels styling * qml: styling addresses/address details * qml: check max comment length for lnurl-pay, characters remaining indicator, styling. * qml: show request details on receive dialog after adding message/amount * qml: let WalletListModel update the wallet state when a wallet is loaded * qml: unify to single WalletListModel, WalletDB trigger actions on every path set, camelcase more QML exposed functions/slots. * rerun freeze_packages * Add `tx_hashes` to exported payment requests (#7936) * requirements-hw: add comments to tie deps to hwd plugins * hw_wallet: de-dupe "message_dialog" code, make text selectable * ledger: re-add support for HW.1, and add a deprecation warning * ledger: minor clean-up * trezor: use lower device-enumeration timeout for udp transport * Fix multiple signing * Refactored LedgerPlugin::create_client, and handle errors when creating the client. * Replace print() with logger * - Remove code calling hw1-related features, not supported in the version of btchip embedded in ledger_bitcoin - Fix signature of sign_message in Ledger_Client_Legacy * Update Ledger website to ledger.com in error message * Remove btchip; use ranged version for ledger_bitcoin * Avoid relying on old btchip package; improve missing library error handling * Modify Ledger plugin to support the new bitcoin app v2.1.0 * trezor: optimize signing speed by not serializing transaction in trezor * add apt --allow-downgrades in more places. build sdist also from debian bullseye container * rerun freeze_container_distro.sh and update docker base images for debian buster and bullseye * util.EventListener: don't log "registering callback" * android README: (trivial) don't need sudo anymore * cosigner_pool plugin: handle multiple multisig wallets open * rerun freeze_packages * build requirements: colorama grew a new build-time dependency :/ * freeze_packages: better apply version restrictions on restricted deps * binaries: update python and openssl * use debian makensis instead of windows makensis executable through wine (#8057) * CI: only build arm64 qml apk, not both * CI: rm redundant "populate_script" cache instructions * CI: cache key should respect gitignore * CI: cache more in Windows build * appimage build: better caching, both locally and on CI * CI: cache built *.dylib on macOS * qml: add import additional addresses/keys to import wallet * qml: show 2FA status and billing info in WalletDetails, expose billing schedule setting in config * android: when running debug apk, disallow changing "enable_debug_logs" * CI: macOS *still* does not have sha256sum :( * CI: more aggressive cache invalidation * CI: macOS does not have sha256sum * CI: cache more * CI: rm obsolete "electrum_cache" * CI: rename requirements-travis.txt * CI: try to cache android apk builds * tests: fix TestLNTransport probabilistic failure * android: mention in README how to install CI apks on phone * util.parse_URI: honour docstring and only raise InvalidBitcoinURI * wallet.add_input_info: also add block_height if known * Move get_dict method from wallet_db to json_db. Define overloaded methods: _convert_dict _convert_values * qml: forgot WalletDetails.qml * qml: rework drawer, split wallet details from wallet list/picker * qml: flow tags to next line if exceeding most of screen width properly update balance amount strings * qml: rename walletdetails to walletsummary * qml: balance piechart in walletdetails, fix menus to top header height * qml: add basic piechart * qml: create wallet details drawer * qt send: use bolt11 fallback addr even if LN is disabled * qt send: bip21: ignore "lightning=" part if LN is disabled * util.parse_URI: allow bip21 with lightning key without fallback addr * tests: add "as_testnet" fn decorator, to run single tests in testnet * transaction: for witness v0 txins, put both UTXO and WIT_UTXO in psbt * flake8: enable more mandatory tests * follow-up prev: indentations should not use tabs in *.py * modified the way the constants module is accessed * added network type to getinfo * daemon: better error msg if rpchost/rpcport is badly configured * daemon.run_daemon: always stop if daemon.taskgroup dies * PayServer: add settings dialog and hook for view_url * make PayServer a plugin * qml: add export TX and scan of TX * fix tests for new pytest (py.test -> pytest) * transaction: never put ypub/zpub in psbts, only plain xpubs * tests: add test to check if we include xpubs in psbts * PayServer: fix create_request * qml: implement remove local tx, show channel backup after channel open * qml: don't check min amount for amount-less invoice * qml: disable pay button while editing amount, perform minimum amount check for lightning invoices, update amount in invoice list. * qml: refresh address list on new transaction by setting dirty flag * qml: missing import * qml: run tx broadcast in thread, re-enable broadcast button in TxDetails when broadcast fails show notification when broadcast fails * qml: initial RbF bump fee feature * wine build: build win-iconv-mingw-w64-dev, instead of using debian sid * make it easier to troubleshoot config parse errors * qml: actually use rbf selection * use apply() function on every wizard page, making sure wizard_data is always available to wizard navigation evaluation * qml: fix wizard_data not available to 'last' check on have seed wizard page also refactor seed verification, split off seed_variant from seed_type (partial disambiguation), fix bip39 wallet creation * force subclassing of self.last_if_single_password in NewWalletWizard * merchant www: allow symlinks for vendored libs * add invoice status to invoice_status callback (#8020) * qml: ui confirm tx dialog * qml: ui close channel dialog * qml: ui swapdialog * move /gui/wizard.py to /wizard.py * remove qml_test plugin, remove plugin settings test * add recovery paths (disable and confirm/reset OTP) for 2FA * rewrite server connect wizard to new wizard style 'last' property on WizardComponents is now queried from UI, not from the wizard. This allows the content of the WizardComponent itself to be taken into account. * add wallet type imported addresses/private keys to wizard * remove unused, add type checking imports * implement success and failure paths, keep dialog over multiple tries * wip otp on pay * properly remember wallet password and pass to tx signing call * move wallet creation from wizard to ui agnostic NewWalletWizard * qml: use new wizard approach in qml and also implement 2FA/trustedcoin * new wizard approach * qml: proper check for max amount onchain. move max amount lightning to superclass * qml: fix bug with lingering info text from previous shown invoice * add .gitattributes file for end-of-line normalisation * Fix CRLF issues. (#8026) * qml: add max amount option in invoice dialog and show in invoice delegate * qt BTCAmountEdit: clamp field to <=21 million bitcoins * qt AmountEdit: small refactor * invoices: fix is_paid for zero-amount onchain pay reqs * be more robust to "electrum/www" missing * update "www" submodule: adapt payserver js to electrum 4.3 invoice api * Revert "only create lightning invoice if the wallet has channels in a suitable state" * qml: ui * only create lightning invoice if the wallet has channels in a suitable state * qml: detect request paid status on receive dialog * qml: handle bitcoin: and lightning: uri intents * qml: add total balance, fix initialization of create recoverable channels setting * qml: incoming flag not always correct for determining debit/credit. Use 'value' instead * qml: invoicemodel and requestmodel update invoice status via event listener * qml: don't duplicate invoice (e.g. when scanned twice) also add invoice to invoiceModel from python, not qml * qml: Remove key exist check in lnworker.payment_info We don't use its result, and I've seen one occasion where a payment exists in history, but not in payment_info dict * ci: add QML Android CI builds for arm64 and arm32 architectures conservatively only builds on tagged commits, or any commit on the ci-qml-beta branch * qml: update history when LN payment arrives * qt 2fa: show different status-bar icon for "2fa disabled" wallet * qt gui __init__: rm deprecated QApplication attr AA_X11InitThreads * android build: "req..-build-android.txt" to only use source pkgs * requirements-build-android: update deps for buildozer * requirements-build-android: update deps for python-for-android * rerun freeze_packages * requirements: pin protobuf "<4" also in "req..-hw.txt" * freeze_packages: restrict some requirements files to source-only pkgs * android build: bump targetSdkVersion from 30 to 31 * android build: p4a to build pyqt5 using "hostpython" instead of sys py * check_scriptpubkey_template_and_dust: support anysegwit. fix #8012 * appimage build: build and include libxcb-util1 * android readme: expand "Access datadir from desktop" section * kivy: window.request_focus_for_main_view: fix compat with newer pyjnius * android: add setting to enable debug logs * qml: ui * qml: open invoices list after saving invoice, add invoice to model instead of reloading the whole list * qml: fix crashes on tx finalizing * qml: follow-up de83a10c20371c1f55dbc9c2e13dcb20f44caacc * qml: restore Save button in InvoiceDialog, restore invoice list view, now from menu * qml: start new wallet wizard if no wallets exist, create/open button opens wizard if no wallets exist * qml: start new wallet wizard immediately after network wizard on initial start * qml: expose use_recoverable_channels in config/preferences * qml: expose RbF in config/preferences * qml: use -w command line parameter to open wallet, if specified * lnworker: fix stuck payment loop (fixes #7995) * qml: move balancesummary to controls/ * qml: show balance summary on top * rbf: fix issues with bump_frr_through_decreasing_change - break from loop if target is reached - recompute delta if there is no next iteration. * qml: scroll-drag in history, fix a few more assumptions w.r.t positioning of listview and size of indicator * qml: no need for an active wallet to access server/proxy settings * qml: lnurl comment only when allowed by server * qml: add lnurl-pay comment feature * qml: unify dialog headers * lnurl: add support for comments (LNURL12) * qml: make request types clickable, some fixes * qml: expose bolt11_fallback in preferences * follow-up previous commit * Remove old trampoline compatibility bits from invoices * qml: use Lightning, URI and Address for type names in ReceiveDialog * add initial lnurl-pay * fix dialog stack handling when closing from outside * change address-only handling: create amount=0 onchain invoice invoicedialog auto enables edit mode when amount is 0 * allow zero amount invoices, add edit amount option for invoices * add default request expiry to preferences/config * ui, fix payment failed * icons, buttons, receivedialog lifecycle * re-add copy and share buttons * remove old Send and Receive pages * add manual input option * support stacking dialogs * move request details into separate dialog * replace swipeview, send & receive now dialogs * android: pass keystore password as argument to make_apk. export does not work because it runs in a container. * contrib: reformat most shell scripts * contrib: rename some shell scripts to have ".sh" extension * build scripts: minor formatting clean-up * fix typo * release.sh: store signing password * update locale * win build: use of debian unstable snapshots needs check-valid-until=no * Revert "wine build: build win-iconv-mingw-w64-dev, instead of using debian sid" * qml: fix qerequestdetails.py signal, remove qr scan loop logging * qt main_window: _coroutines_scheduled needs locking ------------------------------------------------------------------- Tue Sep 27 08:19:10 UTC 2022 - marec@detebe.org - Update to version 4.3.2: * build: update pinned protobuf (partial rerun freeze_packages) * prepare release 4.3.2 * mac build: note in README: pyinstaller picks up extraneous brew pkgs * follow-up 444dc7fb7f6792450ce2ad89df26cca89d46940e * Add yadio.io api to exchange rate * wallet: fix race condition that inhibits proper call of set_up_to_date * mac build: force using source dist for most of our python dependencies * Qt CompletionTextEdit: cast KeyboardModifiers to int * coinchooser: (trivial) add some type hints * Qt ConfirmTxDialog: disconnect timer when closing dialog * test_lnpeer: instead of sleeping for 0.2s, wait until peers are initialized * cleanup old non-static_remotekey code (follow-up 1f403d1ca1) * fix #7988 * fix test_fail_pending_htlcs_on_shutdown: poll number of htlcs * wallet: check whether address can be reused in get_request_by_addr * fix request_status callback not passing the correct request key * test_lnpeer: reset electrum.trampoline._TRAMPOLINE_NODES_UNITTESTS in tearDown * qml: work around qeamount copy from None * lnurl: better handle unimplemented lnurl subtypes * Factorize code in create_routes_for_payment. * test_mpp_split: add tests for exclude_single_part_payments=False * create_routes_for_payment: fix 'we atomically loop' * trampoline MPP: handle direct payment to trampoline node * test_lnpeer: add unit test for direct payment to trampoline node * follow-up c6f940d092fc2e5f0bddc3a01f3f74f0818b42c8 * lnworker: define use_trampoline() for code clarity * Trampoline: Remember failed routes (fixes #7967). * jade: update Jade api to 0.1.37 * qml: fix open channel * qml: fix flake errors * qml: clean up, generalize plugin gui base, enumerate plugins in gui (still quite crude impl, dynamic enable/disable plugin gui is misaligned with backend) * qml: initial plugin support, with labelsync mostly implemented * trampolines_by_id must return dict (follow-up previous commit) * hardcoded trampolines: do not mix testnet nodes and unitests. * Trampoline: if possible, do not add second trampoline for e2e payments. This should fix #7967 * lnworker: fix maybe_raise_trampoline_level. That function was a no-op due to wrong indentation level * trampoline: less verbose, do not log routes that are not tried * unit tests: split test_payment_trampoline into two tests * Index request by ID instead of receiving address. * wallet API: remove get_request_status, it is redundant with get_invoice_status * fix watchtower regtest flakiness caused by CTN variability. fixes #7961 * qml: remove log statement * qml: add hack to delay rendering of QR until dialog is shown. unfortunately, using standard QtQuick Image.asynchronous=true leads to a deadlock at app exit so we can't use it a.t.m. * qml: fix get_request in qerequestdetails * fix #7959 * Qt pay_lightning_invoice: handle NoDynamicFeeEstimates * mac build: bump pyinstaller (4.2 -> 5.3) * build win/mac: do not pass custom args to pyinstaller; use envvars * (trivial) contrib/build-wine: convert line-endings (CRLF -> LF) * mac build: add message to camera permission prompt, in Info.plist * mac build: set minimum system version to 10.13.0 in Info.plist * mac build: let pyinstaller handle Info.plist * Qt ReceiveTabWidget: change cursor to hint QR code can be clicked * mac build: rm unused BUILDDIR * wallet: follow-up removal of get_request_status * remove sign_payment_request: broken and not used * follow-up previous commit * If an invoice cannot be parsed in import_invoices or import_requests, raise FileImportFailed. Fixes #7950 * wallet API: remove get_request_status, it is redundant with get_invoice_status * qml: fix missing param in userNotify * aiorpcx: fix bug in timeout_after monkeypatch * qml: fix missing import * qml: add Save Backup dialog when no onchain backup, some initial work on incomplete funding TX * exchange_rate: more robust spot price against temporary network issues * qml: fix channel double add to list on open, better display errors * qml: add QEAmount.copyFrom(QEAmount) so we can take a new amount object without changing the instance. This avoids crashes when a QEAmount is already referenced in QML, and then replaced with another instance (e.g. in qetxfinalizer.py) * qml: add server and proxy config dialogs, forgot new files * qml: fix undefined name (flake8 mandatory test) * qml: PIN error message also when setting new pin and second entry doesn't match * build scripts: add quotes around some paths (#7949) * qml: show when PIN is wrong * Qt balance dialog: use monospace font for btc amounts * qml: add server and proxy config dialogs * AddressSynchronizer: set diagnostic_name for better logs * qml: small fixes, cleanup * qml: implement scrollbar drag in history listview * qml: add channel backup option to channel details page * qml: add help_text to GenericShareDialog * qml: allow separate data for clipboard/share and QR code in GenericShareDialog * qml: fix derivation prefix not available for watch-ony wallets * qml: add QERequestDetails component. Auto binds to wallet request status update signal so qml doesn't have to. implements timer to update status string when near expiry. * cirrus CI build: fix docker context to make COPY instructions work * android build: fix Dockerfile "COPY" instructions * wine build: build win-iconv-mingw-w64-dev, instead of using debian sid * android: adapt Dockerfile to use debian bullseye base * build: osx readme: note cli xcode needs to be deleted before install * contrib/make_download: add "source-only" tarball * contrib/add_cosigner: add "source-only" tarball * contrib/add_cosigner: replace old-style format strings with f-strings * RELEASE-NOTES: rm reverted change * wine: rename freeze_appimage_distro.sh to freeze_containers_distro.sh and adapt build-wine container to Debian+snapshots base * appimage: add freeze_appimage_distro.sh and adapt Dockerfile to use debian buster base ------------------------------------------------------------------- Sat Aug 20 16:36:36 UTC 2022 - marec@detebe.org - Update to version 4.3.1: * Revert "mac build: force using source dist for most of our python dependencies" * prepare release 4.3.1 * update locale * update block header checkpoints * qml: OpenWalletDialog rework * qml: fixes * adb: trigger adb_added_tx event only if the transaction is new * build: use build-locale.sh in all build scripts * build: follow-up source-only tarballs * qt: better handle unparseable URIs * qml: don't auto-pop Scan TODO: handle cancel by signal too * qml: add initial sign and broadcast feature to TxDetails/qetxdetails * qml: cosmetic changes * qml: accept raw tx from send page paste/qrscan and show TxDetails * wallet: (perf) avoid iterating over all invoices in add_transaction * detect paid invoices in on_event_adb_added_tx * qml: use QEAmount setters also in qetxdetails * qml: use only genericsharedialog component defined in main * qml: handle unsigned, local tx in history * qml: don't implicitly send_onchain from ConfirmTxDialog, externalize * qml: enable send for watch-only wallets, show raw tx dialog after finalizing also use QEAMount setters in qetxfinalizer instead of re-instantiating * qml: add setters to QEAmount to allow updating values, as replacing QEAmount instances makes Qt unhappy in a few cases when it still holds references to the old instance, which happened occasionally in e.g. qetxfinalizer * qml: qetxdetails was missing this in 9eb7ee74e113d0da59ba1cf7157771fed78c2612 * rm method is_static_remotekey_enabled for channel backups * get default label for txid based on invoices * wallet: load lnworker earlier * wallet db upgrade: rm support of "legacy" lightning channels * remove support for channels without static remote pubkey * lnwatcher: don't add `REDEEMED` channels * build: create source-only tarball in release.sh * hw wallets: improve error message when a dependency is missing * kivy: save manually entered amount into lightning invoices, as in Qt (related: #7935) * fix #7935 * fix typo * fix #7933 * qml: expose more flags and TxMinedInfo in qetxdetails * qml: QEAmount returns 0 when amount is undefined an undefined amount triggers a hard to debug crash when None/undefined is passing the python/QObject boundary, so let's default to 0 * kivy request dialog: follow-up https://github.com/spesmilo/electrum/commit/c95791d7eeff6f64968e391c78e344e0a02e1669 * lnwatcher: set future_tx regardless of tx_was_added, because it is not persisted * lnwatcher: fix adding of local tx to history * qml: try-except around data query, history is very unpredictable what's present and what's not * qml: add address to bolt11>bip21>address QR caroussel and remove address copy button (conform qt and kivy) * qml: refactor HistoryItemDelegate into separate file * kivy request dialog: follow-up c95791d7eeff6f64968e391c78e344e0a02e1669: * qt/kivy: receive tab: add wallet.ReceiveRequestHelp and refactor * qt new_channel_dialog: fix None-handling for lnworker.suggest_peer() * qt history tab: fix "View Channel" in context menu * kivy request_dialog: default to LN if there is no URI * qt/kivy receive tab: show error msg when creating req with amt<dust * kivy request_dialog: disable "lightning" btn if no LN part * kivy request_dialog: rm some magic numbers * qt ReceiveTab: handle case with URI=="" * qt RequestList: allow copying URI even if there is no bitcoin addr * wallet.get_request_URI: rm code duplication * qt ReceiveTab: ensure TabWidget has frame in more cases * kivy: fix creating dust amount receive requests * wallet.delete_request(key): piggyback on get_request(key) * wallet: rm confusing get_request_by_address method * wallet: delete_{invoice,request}: add "write_to_disk=True" param * appimage build: better parameterise python version * qt: replace some hardcoded pixel sizes for better high-dpi support * tests: test_lnpeer.py: clean-up temp dirs created in /tmp, in tearDown * Add .editorconfig file * Qt Console: Fix font reset when moving between screens * create chmod aware of XDG_RUNTIME_DIR * util: implement is_subpath * wallet: add get_label_for_address, and make get_label private * wallet.restore_wallet_from_text: support creating wallet in-memory * fix #7920 * fix #7921 * mac build: force using source dist for most of our python dependencies * win build: force using source dist for some of our python dependencies * contrib/{add_cosigner,make_download}: cd to project root * (trivial) RELEASE-NOTES: fix some typos * (trivial) replace URL in comment to include git hash instead of branch * win build: clear $CONTRIB_WINE/dist between builds * ci: make source-only tarballs in Cirrus * contrib: add generate_payreqpb2.sh script * build: support OMIT_UNCLEAN_FILES in sdist/build.sh * build: add OMIT_UNCLEAN_FILES option to make_sdist.sh * build: refactor out locale generation into build_locale.sh ------------------------------------------------------------------- Sat Aug 06 11:02:48 UTC 2022 - marec@detebe.org - Update to version 4.3.0: * mac build: maybe fix reproducibility fail (_cbor.cpython-39-darwin.so) * prepare release 4.3.0: update version.py and locale * update release notes * (trivial) qml/qedaemon.py: add missing import * dependencies: bundle older hidapi in binaries * qt ReceiveTabWidget: revert prev, and add frame in a different way * qt ReceiveTabWidget: add frame to "help label", and rm some nesting * receive_tab: use QStackedWidget instead of QTabWidget * remove ca.poiuty.com (#7913) * Fix CTNs in should_be_closed_due_to_expiring_htlcs (fixes #7906). Also fix sending too many fee updates. Rename lnworker.on_channel_update, that name was misleading. * follow-up 7dcd8d8dc85144a816698dd36701d52259ad9de7 * receive_tab: workaround qdarkstyle bug * Qt receive_tab: fix receive_tabs widget on macOS * labels plugin: handle setting a label to None * lnwatcher: compare txids instead of tx objects, before calling add_transaction or set_label * qml: delete_wallet and add checks for channels, balance, pending requests * qml: implement initial wallet from master key * qml: fix icon paths * qml: optimize imports * text GUI: add proper stop method * qml: make sure the auth_protect decorator finishes when closing Pin dialog without reject/accept * qml: create PasswordField control * qml: parent channel open progress dialog to main.qml as it might live longer than OpenChannel * qml: fixes * qml: initial channel open progress dialog * qml: include dialogs in back button navigation * text GUI: simplify show_request * qml: move dialogs out of controls/ * qml: copy/share the correct data, fix UI issue when no description * various updates for the text GUI * wallet: write to disk in create_request * qml: fix * qml: fix missing parens * qml: fix issue with proxy eval * qml: some fixes for gossip mode channel open. add kangaroo icon to channeldelegate * qml: also show proxy in networkstatusindicator and a little gimmick when a fork is detected * qml: let qenetwork monitor gossip events, start/stop gossip service on config change add simple gossip feedback on NetworkStats page * qml: use custom combobox so we have more control over cropping and styling enable lightning routing choice combobox * qml: destroy dialogs instantiated from Send on close * Update network.py * qml: network status improvements create NetworkStatusIndicator component add forks/chaintips and lagging property to qenetwork add synchronizing and synchronizing progress properties to qewallet Note: new wallet synchronizing is not picked up in UI yet, missing an is_up_to_date event at the start still.. * lnutil.LnFeatures.get_names: don't return `None`s for unknown features * qml: separate proxy and server controls from wizardcontainer, so we can reuse them in network settings later * qml: qenetwork events don't need to be handled in qt thread don't retrieve fee histogram from backend as it's passed in the event * qml: add initial bolt-11/bip-21 chooser in requestdialog implement proper placement of icon over qr code fix urlencoding in qr imageprovider * Generalize ChannelDetailsDialog to channel backups. Access funding_tx and closing_tx from the dialog, instead of from the channels_list context menu. * kivy GUI: show better error message if we cannot channel backup import because lightning is disabled or unavailable. fixes #7899 * lnworker: get_channel_objects method to be used by GUI * fix #7895: rename parameter * remove_channel_backup: a channel backup might be in both lists * auto-remove redeemed channel backups * appimage: Bump git * qml: finally! * qml: delete WizardComponents, move into NewWalletWizard * qml: visually dim channels in CLOSED and REDEEMED states, apply simple sort on channel state to put channels in closed/redeemed state at bottom of list * qml: don't expose WalletListModel as a declarative type * qml: slip39 disabled for now * qml: pin lock after inactivity * rm dead code * Qt: simplify lightning_tx_dialog using ShowQRLineEdit * qml: dedupe swap auth handling, fix fee values when no tx * qml: use closebutton icon for label edit cancel UI PIN entry dialog * Qt: improve channel details dialog. Add util.ShowQRLineEdit class. * show_lightning_invoice: minor improvements * Qt show_lightning_invoice: show features * fix 'view log' menu (follow-up 2d68350900dedd14f0a235461b1e0a22b96a6981) * wallet_db upgrade: fix possible corruption of invoice amounts * LN invoice: better handle unknown required featured bits in bolt11 invs * add command line for rebalancing channels * qt QRDialog: make dialog usefully resizeable * qml: clean up * qml: skip wallet password entry when single_password and password is known * qml: wip single password * qt QRDialog: try to fix layout-sizing issues * keystore.check_password: raise better exc if called on pwless ks * crypto.py: rm {En,De}codeAES_base64. instead use {En,De}codeAES_bytes * wallet: make "invoices" and "receive_requests" private * wallet: use `get_request(addr)` instead of `receive_requests[addr]` * qt qrtextedit: also show icon in ShowQRTextEdit.contextMenu * revert 02e45690868bd1fd86b92329697cf9539edb8747 * initial release notes for 4.3 * qml: fix initial focus wallet name in new wallet wizard * qml: properly set keystore password when creating new wallet * auto-remove redeemed channel backups. fix indentation. * qt: PayToEdit and OverlayControlMixin: move around input buttons * wallet: (regression) fix get_spendable_coins when "domain" arg is given * remove lightning parameter from wallet.create_request * all GUIs: show local and remote force-close options in a homogeneous way * channels_list: refactor menu. Add request_force_close option for channels too, guard it with a confirmation dialog. * show onchain address of request in CLI. Fixes #7886 * get_node_alias: allow node_id prefixes for channel backups * request_force_close_from_backup: - for an onchain backups, if the channel is with a hardcoded trampoline, try first without gossip DB. - for imported backups, fallback to gossip DB if we fail to connect with the provided network address. * wallet.export_invoice: should support onchain invoice with "!" (max) amount * invoices: fix type hint for get_address() * appimage: update libssl-dev libssl1.1 openssl * android build: make building testnet apk easier * android build: factor out package name ("org.electrum.electrum") * qml gui: fix flake8 "F821 undefined name" errors * wallet: rm get_onchain_request_status; just use is_onchain_invoice_paid * android build: (qml) pin new transitive dependencies for reproducibility * android build: (qml) bump p4a commit * qewallet: fix useNotify signal emit * add excepthooks, hoping to force a backtrace log when qt5 SIGABRTs * android build: restore prev "make theming" behaviour * run_electrum: fix DeprecationWarning re importlib.find_loader * run_electrum: (android) restore behaviour of only logging in DEBUG builds * take out routing hints retrieval for display for now. * lnchannel: do not expose COOP_CLOSE in the GUI if there are unsettled HTLCs * skip wallet files with leading dot * refactor to new event listener framework * add info text for all remaining invoice states * fix canRbf value in Send.qml * implement auth by PIN and allow auth override to wallet password by passing method='wallet' to auth_protect * allow paying when lightning invoice is in status FAILED * add unified wallet password support * invert (in)validPassword property in QEWalletDB, add invalidPassword signal. This is to better support state in OpenWallet page * move channels_updated event handling to ui thread, fix some debug statements * channel freeze menu items only enabled when channel is open * clean up list of outputs in ConfirmTxDialog * disable new_channel call for now as channel is otherwise added twice * add 'spend unconfirmed' config option * show 'press again to quit' message when pressing back on last page in the stack * make rbf selection allowed configurable * update tip pthon-for-android qt5-wip * make sure historymodel is initialized * delete channel * properly count open channels, add open channel to hamburger menu * add initial submarine swap functionality * create new wallet name suggestion and pre-select and focus the textfield * update channel listmodel when channel opened * support for MAX amounts * add initial channel close dialog * InvoiceDialog: add balance & expired checks on invoices, add a few ln invoice fields to show * also unregister callbacks from qewallet and qechannellistmodel on destroy * unregister callback when object gets destroyed. turns out we need to use a lambda to have the signal processed, registering the member function somehow never triggers the 'destroyed' signal * copy & share lightning requests * further separate invoice objects * split user entered fields object from invoice uri parsing object * initial lightning channel details, action menu * tabbar minor * implement wallet password change. implement wallet delete (though actual wallet file delete is left out still) * UI on Wallets screen. Add active/not active/current indicator tags. initial wallet delete/change password boilerplate * fixes after rebase a3faf85e3cce83f90d5a3af8e0fd48f06ce0cabd * fixes after rebase persist_lnwatcher * Add @auth_protect decorator. * add hamburger menu to Wallets page * styling * fix some issues with QEAmount use * add frozen balance to balancesummary * improve network status display and states of items when no wallet loaded * Use screen size as upper bound for qr code size * implement enable lightning button * enable generating lightning request. * make QR always fit within 400px * try tabbar at bottom * add address to InvoiceDialog for OnchainInvoice type * add numtx and address history model to addres details * wip * initial create invoice from user input * the invoice/request key issue is annoying * frontend improvements, refactor qeinvoicelistmodel * rename ConfirmInvoiceDialog to InvoiceDialog and style buttons like RequestDialog * fix one init_model call on a potentially undefined _addressModel * add can send/can receive (totals and per-channel), fiat, channel ratio indicator * listmodels self-initialize, lazy-load listmodels in QEWallet, process channel updates in qechannellistmodel * some fixes, add lightning balance to BalanceSummary * initial channel list model and delegate * initial working channel open flow * expose more trampoline boilerplate allow delegation of make_tx and accept/send * rename ConfirmPaymentDialog to ConfirmTxDialog generalize/parameterize some labels and inject TxFinalizer instead of encapsulate * wip lightning * also move new-quotes event to FiatField * bold font wasn't loaded when regular font loading was succesful some styling fixes * refactor btc <-> fiat amount behaviour into separate controls * expose additional wallet properties (lightning enabled, balance, masterpubkey) * about page * enable android share option * add initial Transaction Details page and backing qobject * bugfixes, lifecycle improvements * more rebase fixes, add invoice delete * QEDaemon uses internal QEWalletDB for wallet open pre-checks various other fixes * add section dependent datetime formatting * colors in history * after-rebase fixes * font sizes, accent colors * use rbf flag, show tx outputs, actually send tx in confirmpaymentdialog * fiat and balance amount fixes * compat with android/python3.8 * add initial address detail page * support update of address in addresslistmodel * small fixes * add fiat to balance summary * hook up invoice confirm to payment flow (onchain only) * add invoice status * more QEAmount refactoring * add a QEAmount type for storing/passing BTC amounts in the widest sense from a UI perspective. Stores sats, millisats (LN), whether MAX amount is requested etc * wip * fix qewallet calls to invoice list model * factor out InvoiceDelegate * add listmodel for send queue/invoices generalize request and invoice list models into abstract base * Qt.UserRole can be 0 offset, don't repeat wallet create request dict * various UI * add confirm payment dialog/feepicker and qobject backing * update History page delegates when rates or rate settings change * add request status code to listmodel, update request delegates, enable bip21 uri copy * add android notification load both regular and bold fonts * historic rates * add (today, yesterday, last week, last month, older) sections to history * filter out more unneeded files for packaging * make Constants an Item and a child of main so it properly inherits material style settings from main * let most signals not be handled in the UI thread, use quint64 type for slots where satoshis are expected * UI history page * move reusable controls into controls/ subdir * add option for unformatted numbers to string * UI fixes * generate and parse bip 21 qr codes * send/receive amounts same style * complete and refactor Fx preferences and use in Send/Receive tabs * android back button pops pages from stackview unless we reach bottom of stack * use qint64 for sats, not int, as it will overflow * add fiat<->sat conversion methods and hook up UI * add currencies to preferences * request dialog improve, icons * avoid duplicate QEWallet instances * UI here and there * add version information to QML context * keep all models and various UI items updated on new transactions * show popup for user notifications * qewallet: minimally viable send_onchain() * qenetwork: add height and fiat changed signals * UI use constants * copy closebutton.png to gui/icons * add simple internal notification popup, refactor MessageDialog * implement user notifications for new_transaction events * QRParser now a type, not a context property * add input method hints * forgot RequestDialog * small fixes * add RequestDialog, open request on create, and implement UI delete request * parse QR async * use fixed font on amount, address fields * implement QR code scanning * add buttons in address drawers * add watch-only indicator use default state instead of named state set font defaults where it is convenient * add PT Mono bold * move wallet name to qewallet * UI address list * add PaneInsetBackground * Add PT Mono monospace font. * UI * cleanup * use configured units everywhere * add Preferences to menu and add icons * add padding constants * add initial Preferences page * add base unit setting and conversion methods in qeconfig.py * add initial fee histogram * handle gap limit warning when creating Request. (using string error code for now, ideally should be properly defined as an enum) * add yes/no button option to generic messagedialog, so it can be used to ask the user a simple yes/no question. * refactor QEAddressListModel and QETransactionListModel to their own files * add QERequestListModel and hook up the gui in Receive tab * remove leftover, don't eagerly set wizard pages to not visible * add a container for styling constants, so we don't repeat literals all over the code * qml: add QR code imageprovider using qrcode/PIL * gui: copy wallet.png from kivy to gui/icons/ * buildozer: exclude env dir, don't include vs, fs extensions * fixes * ui history page * implement bip39 seed to wallet fix auto-upgrade wallet * move wizard components to separate files, add initial bip39 refine page * add QEAddressListModel and initial Addresses.qml page. show sane main view when no wallet loaded. show error dialog when wallet could not be loaded. show wallet up_to_date indicator in title bar. refactor QETransactionListModel to be more self-contained. * validate seeds for Electrum, BIP39, SLIP39 seeds and perform create wallet in from seed scenario * fix bug where undefined wallet instance crashes app * upgrade wallet automatically when needed * improve wallet open flow * fix up styling ServerConnectWizard * add clipping for flickable * wrap potentially large pages in a flickable, for small form factors * move seed text component to its own type * wizard styling, infotext component, add some boilerplate for existing seed * seed generation can take some time, do it in a background thread and show a busy indicator while we wait * create wallet at end of new wallet wizard * add seed warning texts * remove cruft * add command line parameters to android/build.sh, and use separate .buildozer dirs for kivy and qt5 * determine android_gui at runtime * qml: eliminate animation glitching when removing a page from the wizard (back button) * add seed generation and verification for standard wallets * add Bitcoin QObject for seed generation * add initial dialog for opening wallets, initial coverage also for splitting and db upgrades * add simple message pane component * introduce QEWalletDb class to expose electrum wallet db to qml * remove devtest buttons * factor off the main QGuiApplication class into its own file * use QEAvailableWalletListModel for available wallets * create available wallet listmodel class * android: parameterize GUI framework * qml: add server connect wizard * qml: generalize Wizard * android now uses qml UI * qml: add debug tracing of QML plugin loading * dev: disable PIL use for now * remove kivy platform check * allow override of QT_QUICK_CONTROLS_STYLE * qml: many UI updates and additions * qml: fixes and cleanup for qedaemon, qenetwork. expose many wallet properties in qewallet * qml: add available wallets model * qml: some more boilerplate, init language, SIGINT signal handler * qml: qml test plugin * qml: initial implementation of new wallet conversation * qml: switch to QtQuick Controls * qml: hook any qml supporting plugins, add test plugin * qml: UI: add most transaction fields to tx history page * qml: map fields of tx history * qml: Initial QML to test QObject property binding, ListModels, Camera * qml: add initial qml.ElectrumGui class, Electrum QObject wrappers and an initial QObject for QR en/decoding * qml: add 'qml' gui option and add gui.qml.ELectrumGui to type hint for gui_object * build android apk with qt5 * password unification refactor: move methods from wallet to daemon * transaction.deserialize: only set self._inputs after parsing witness * Qt: require left-click to toggle receive qr-code * lnwatcher.inspect_tx_candidate: handle witness being None * rename label: Confirmed -> On-chain * update trampoline feature bits. fixes #7801 * android build: increase buildozer log level (except on cirrus ci) * build: incl "frozenlist" dep as pure-python, without C stuff * qt main_window: (trivial) clean-up weird types passed to qt calls * qt ReceiveTab: (trivial) rename clear_receive_tab to do_clear * qt: (refactor) split "receive tab" out from main_window.py * p4a: update commit ref to head of qt5-wip (fixes cpu count used for build) * qt: (refactor) split "send tab" out from main_window.py * qt.util.MyTreeView: handle find_row_by_key returning None * replace some erroneous usages of IntFlag with IntEnum * qt LightningTxDialog: (fix regression) show fee for ln payments * kivy: fix threading issue for window.show_error * lnurl: make requests async, don't block Qt GUI, rm LUD-16 support * qt paytoedit: evaluate text on textChanged(), but no network requests * kivy: rm code dupe between app.on_qr and send_screen.do_paste * lnurl: clean-up * lnurl for kivy: I need this to buy beers * add lnurl-pay and lightning address support * lnworker.get_lightning_history(&get_payment_value): rm failing assert * get_payment_value: rm failing assert * lnpeer: (trivial) better log message * qt.completion_text_edit: fix logic bug re shift/ctrl * network.run_from_another_thread: add type hint * network: rename _send_http_on_proxy and make it part of public API * EventListener: key global dict by modulepath+clsname instead of clsname * appimage: update libssl-dev libssl1.1 openssl (#7869) * EventListener: pre-register event listeners in the decorator, and use that registration in the iterator. * daemon.PayServer.create_request: mark as broken... * lnworker.add_request: force keyword args * qt dialogs: disconnect signals and unregister callbacks in closeEvent * EventListener follow-ups: adapt left-out classes and minor clean-ups * EventListener class to handle callbacks * fix typo: stdio gui with no wallet * text guii: display full history * adb fixes for text and stdio GUIs * lnworker: get_payment_value - the detection of self-payments was using the length of the htlc list, incorrectly categorizing all MPPs. - the fee for self-payments was not correctly computed. * kivy: in event handlers, check wallet. * fix #7851: store addresses_beyond_gap_limit in address_list * Trampoline: always increase fees, to ensure we do not get stuck in a loop. * Index lightning requests with rhash instead of onchain address. * follow-up a3faf85e3cce83f90d5a3af8e0fd48f06ce0cabd * Qt receive widgets: do not show request that have expired * Qt: payment received notification, show label and amount instead of key * fix typo * wallet: - add new index: requests_rhash_to_key (fixes #7845) - when creating a request, do not save its description in labels. Instead, return it as default value in wallet.get_label_by_rhash lnworker: - rename 'payments' to 'payment_info' - add note to delete_payment_info commands: rename 'rmrequest' to 'delete_request' * adb: do not notify GUI about already known transactions * unconfirmed swaps: revert label change (follow-up 599ad1c0173427c008767f201daffd8b80d780b8) * swaps: set spending_txid as soon as tx is added to wallet * lnworker: get_onchain_history does not need to be online anymore * lnwatcher: fix tx replacement and notifications - revert the logic of do_breach_remedy to what it was before 0ca3d66d15aac6900575c54a7fa26e19b8bd99fb, but now calling self.maybe_redeem unconditionally. - replace mempool transactions only if the fee increases - do not notify the GUI if a local tx is replaced - delete labels when replacing * make "-v" (logging to stderr) work with commands * wallet: (fix) cannot just piggyback on adb.is_up_to_date() * lnpeer: rename trigger_force_close to request_force_close * lnchannel: add new states: `WE_ARE_TOXIC`, `REQUESTED_FCLOSE` * lnchannel: rm "is_closing" method - has confusing semantics * follow-up README rename, again * wallet: filter non-wallet transactions before rebroadcasting event * Move address_is_old to AddressSynchronizer. Cache local_height at that level instead of wallet.synchronize * persist_lnwatcher: split try_redeem into two methods: - maybe_add_redeem_tx - maybe_broadcast * Move get_wallet_delta to wallet class, because it requires wallet.is_mine Do not call it in AddressSynchronizer.get_tx_fee * follow-up afa2ed1fe285886fdd087aa8b1e303e2634d9098 * Persist LNWatcher transactions in wallet file: - separate AddressSynchronizer from Wallet and LNWatcher - the AddressSynchronizer class is referred to as 'adb' (address database) - Use callbacks to replace overloaded methods * util.profiler: make log line easier to understand * addr_sync: also trigger address_history_changed when a tx is removed * follow-up README rename * README: add Windows- & macOS-specific "how to run from source" readmes * change top-level README from .rst to .md * lnworker: also check expiring_htlcs in ChannelState.SHUTDOWN * qt main_window: (trivial) rm dead code, and fix copy-paste error * lnpeer: make "trigger_force_close" work with eclair 0.7+ remotes * release notes: mention security fix in 4.2.2 * Revert "num_sats_can_receive: bucket channels that we have with the same node" * num_sats_can_receive: bucket channels that we have with the same node * qt seed_dialog: warn when trying to restore standard seed as 2FA wallet * qt "Wallet Info" dialog: show bip32 root fingerprint * hww ledger: call scan_devices fewer times * hww: make DeviceMgr.select_device dlg msg more explicit (add details) * hww: impl get_client in Hardware_KeyStore instead of subclasses * hww: move trigger_pairings to DeviceMgr * If util.trigger_callback() is called from the asyncio loop, run the callback synchronously. * kivy: add "clear all gossip" button in ln gossip dialog * qt.util: HelpLabel, HelpButton, InfoButton: factor out HelpMixin * Qt PayToEdit: add option to scan QR code from screen(shot) * qrreader.get_qr_reader: raise instead of returning None * qt PayToEdit: various fixes, incl icon size/pos, field size, scrollbar * qt ButtonsWidget: refactor into OverlayControlMixin; fix alignmt/hover * qt ButtonsWidget: Don't pass app instance to addCopyButton * qt.util.ButtonsWidget: add custom setText arg to methods * util: rm a magic number * kivy: fix threading issue when scanning bip70 qr code on newer kivy * lnpeer: forwarding: better handle if next_peer is offline * lnpeer: fix ping behavior. - Do not send ping if messages have been received recently. - Do not send more than one ping. - Await pong before sending commitment_signed (per BOLT-2) - Lower ping time to 30s * rebalance dialog: fix button disabling * Rebalance dialog: - move dialog code to own submodule and class - disable ok button if amount is out of bounds - add max button - add Rebalance button to channels tab * Qt receive widgets: factorize code * lnworker: create_routes_for_payment: try random order * lnworker: in sugest_channels_for_rebalance, delta depends on the channel Also, safety margin can be reduced. * windows binaries: try to prevent users from renaming exe while running * Qt: move current_request logic from main_window to requests_list * requirements: pin protobuf "<4" * mac build: README: add more details about installing Xcode * mac build: compare_dmg script: if binaries mismatch, print the diff * update release notes for 4.2.2 * update locale submodule * Windows build scripts: Read codesign passphrase. Lazy check if unsigned binaries are there. * commands: add "encrypt_file" arg to "password" command * bip70 paymentrequest: remove support for "file" URIs * bump version to 4.3.0a0 * qt new_channel_dialog: use lnutil.MIN_FUNDING_SAT instead of ad-hoc val * qt new_channel_dialog: fix regression: oepn chan with "max" amt * Refactor: move calls to lnworker methods out of the tx creation functions (follow-up f0237e46beca095f4b79f4ae6a2bf32175e31c48) * lnsweep: do not redeem offered HTLCs unless payment was received in full * lnwatcher: a bit less verbose * channels_list: do not add extra whitespaces when displaying amounts in HTLCs * lnchannel: fix diagnostic_name, for better log lines * lnpeer.reestablish_chan: enforce order of replaying commitsig/revack * lnwatcher: fix another broadcast-too-early error * fix lnwatcher broadcast logic, follow-up b9f01a86fe24219d3456ef8a72e2f6d43b9bf161 * Stabilize size of receive_tabs widgets - use SetMinimumSize instead of sizeHint (partially reverts 28f794b63b180d1b10432b3f822f5c8b0a7375ec) - to deal with small window sizes, set MinimumHeight of the parent TabWidget (with a few extra pixels for margins) - add an extra layout around address_help_text, so that it has margins (margins were removed in 28f794b63b180d1b10432b3f822f5c8b0a7375ec) * receive_tabs: add tooltip to inner widgets * lnwatcher: check that parent transaction is confirmed in CSV test * submarine_swaps: fix order of operations in get_send_amount * follow-up "remove email plugin" * Qt receive tab: better receive_tabs widget size for small windows * Qt: add name to coroutines_scheduled * remove unneeded parameter (follow-up e392197ab94715815c00503d8fd5cb881d0a26c3) * improve channels_list menus (minor) * Qt: display number of tasks (window._coroutines_scheduled) in toolbar. Disable rebalance/swap suggestions attached to requests/invoices if there is an ongoing task. Note: This assumes that all tasks are lightning payments, which is true for the moment. * remove email plugin * Fix "== None" linter fails * email plugin: SSL was using insecure defaults * email plugin: (trivial) adapt to Invoices refactor * threading.Thread: fix some DeprecationWarnings * Allow the QR code in the receive tab to be variable size * QRCodeWidget: add margin of 1 block, remove fixedSize parameter * QRCodeWidget: show warning in GUI * QR window: fix tab order * do not propose rebalance between channels to the same trampoline * Qt: set fixed size for reveive help widgets * Qt: rephrase messages, propose 'pay onchain' as the last option * improve channel_funding_sat suggestion. add min_amount parameter to new_channel_dialog * Qt: update current request when update_tabs is called * receive widget: minor improvements, more help text * suggest_rebalance: special case for MPP heuristics * LNWorker: Add suggest_rebalance methods for sending and receiving. These methods return a list of channels that can be rebalanced, in order to receive or send a given amount. * interface: fix DeprecationWarnings re SSLContext * remove scheduled invoices: bad UX. better expect the user to retry later. * kivy: minor fix * Add 'channels' parameter to create invoice and pay. Add rebalance dialog to GUI * Qt change_password_dialog: fix deadlock in hww case if device unplugged * Qt addr/utxo lists: in dark theme, fix item bgcolor (was pure black) * Qt ConfirmTxDialog: make sure dialog is deleted when closed * Add support for the Blockstream Jade hww * invoice.get_amount_sat: handle None in more places * util.parse_URI: fix typo * lnworker: rework num_sats_can_receive and routing_hints_for_invoice * swap dialog: disable amount edits and buttons if an amount is passed * receive_tab: better help text if lightning peers are disconnected * Qt: run swap_manager.get_pairs() before opening SwapDialog * Filter nodes for receiving: - increase MPP_RECEIVE_CUTOFF from 5 to 20 percent - filter channels by node_id, not channel_id - make num_sats_can_receive consistent with routing hints * lnworker: if trampoline is active, make num_sats_can_send return the max value allowed for legacy payments. (that is, do not assume we can do MPP involving two trampolines) This reverts fb6047ec46 * Receive tab: toggle QR code by clicking on receive widget * interface: bypass proxy for servers on localhost * qt: start using ButtonsWidget's add_qr_input_button/add_qr_show_button * qr qrtextedit: move functionality up to ButtonsWidget * qt refactor qrtextedit.py, create "ScanShowQRTextEdit" * Qt: sign_message: added button to show signature in QR code. * qt: don't show empty BalanceDialog * qt PayToEdit: rm redundant code * interface: trigger fewer 'blockchain_updated' notifications * daemon: add command-line args for RPC user/pass/host/port * daemon: default rpc socktype to "tcp" if `rpcport` is set * (minor) Fix receive_qr_visible. Rename method: toggle_qr_window * wallet_db: clarify hww types in old upgrades * hw plugins: (follow-up) rm some more dead code * hw plugins: (cleanup) rm no-op clear_client argument from keystore.give_error * hw plugins: (cleanup) Plugin objects should not have a Client field * hw plugins: (cleanup) Plugin objects should not have a Handler field * appimage: update package (libdbus-1-3) in dockerfile * addr_sync: get_balance change cache_key to have delimiters * follow-up prev commit * Qt: move open_channel_dialog code in separate module (no functional change in this commit) * Change the semantics of get_balance: * Qt balance piechart: show lightning funds that are frozen * hw: rm dead code from Hardware_KeyStore subclasses * (trivial) qt locktimeedit: fix a DeprecationWarning * bip39_recovery: also scan change addresses * get_history: minor simplification * qt preferences: fix "allow_instant_swaps" checkbox * qt main_window: fix visual artifact when opening (re invoice lists) * setup.py: use relative paths in `data_files` * Qt: add help text to receive address widget * qr code widget: set margin to zero, print warning if cannot draw * appimage: update libssl-dev libssl1.0.0 openssl libsqlite3-dev (#7798) * hw keepkey: workaround protobuf weirdness * vendor a part of distutils, to be removed from stdlib in py3.12 * follow-up prev * setup.py: use find_packages more heavily * interface.get_block_header: assert height >= 0 * tests: clean up event-loop creation * swap_dialog: raise recv_amount when min_mount is received * asyncio: stop using get_event_loop(). introduce ~singleton loop. * Qt settings_dialog: use signals - changes must apply to all windows - do not keep reference to the window object * (minor) fix checkbox in qt settings * LNWorker: give up payment after timeout, not number of attempts. Limiting attempts may interrupt a MPP before we receive a MPP_timeout The attempts parameter is still used in unit tests. * hardware wallets: mention keystore.label in select_device * hardware wallets: smarter pairing during sign_transaction * hardware wallets: redefine "id_" for hid devices to avoid collisions * Update SECURITY.md * Update SECURITY.md * minor: fix #7789 * lnwatcher: in inspect_tx_candidate, match witness scripts against HTLC templates fixes #7781 * fix #7783 * appimage: update package (git) in dockerfile (#7786) * asyncio: addr_sync: maybe fix "no current event loop in thread" * asyncio: sql_db: maybe fix "no current event loop in thread" * lnworker: LNWallet.start_network to call super().start_network * asyncio: use loop.create_future() instead of asyncio.Future() * fix typo in warning message shown when enabling lightning (#7782) * build appimage: bump pkg2appimage version * wallet_db: rm dependence on PaymentRequest class in convert_version_25 * fix tests (follow-up 2117118047b2ed41e9906655b5482d8faa85ae51) * Qt: hide receive tabs when payment is received. * set_request_status: pass the right key to request_status callback. * fix receiving lightning requests without amount * Qt: remove QR button from receive text widget. Add tooltip instead * minor fix: update_receive_address_styling * wallet_db upgrade: recalc keys of outgoing on-chain invoices * lnworker: fix get_onchain_history if running with --offline * wallet: fix paying invoice with "max" amount * fix opening wallet that has "max" amount invoice saved * lnworker: fix can_pay_invoice for trampoline MPP Call it from the GUI * Qt: adapt receive_lightning_help text * Do not reuse addresses of expired requests. * set_frozen_state: trigger refresh of piechart in status bar * follow-up e992e3a9b2875c2be0c2ae30364d9c7e6a92a9fb * exchange_rate: normalise some internal types, saner Decimal conversion * exchange_rate: add some type hints * Qt: follow-up e362d1aac4c326917592bcfe1f5d679f7649366a * Qt: add bolt11_fallback and bip21_lightning options to preferences * kivy updates * Qt: show single balance in statusbar - details in popup dialop - piechart in status bar * Show options if we do not have the liquidity to pay a lightning invoice: pay onchain, open channel, rebalance. * Fallback addresses - add fallback address to BOLT-11 LN invoices - Qt: if LN payment fails, propose onchain fallback * Qt: receive_lightning_help text * Qt receive tab: - show payment options in tabs: URI, Address or Lightning - use vertical tabs to save space - switch between QR and text views - open standalone QR window through menu, instead of clicking on QR code * follow-up db invoice unification: - fix command line - deprecate add_lightning_request * follow-up prev: - detect payment of requests both onchain or LN - create single type of requests in GUI * wallet_db upgrade: - unify lightning and onchain invoices, with optional fields for bip70 and lightning - add receive_address fields to submarine swaps * appimage: update git * commands: add "version_info" cmd * gui init: raise GuiImportError instead of sys.exit if dep is missing * qt gui: better detection of missing PyQt5 at startup * android: create relative .buildozer symlink at correct folder, regardless of CWD (#7759) * qt coins list: fix populating labels * follow-up #7748 * qt main_window: move TaskThread from wallet.thread to window.thread * address_sync: include verifier in sync_state progress indicator * address_sync: "up_to_date" now waits for SPV * address_sync: split off unconfirmed_tx from unverified_tx * address_sync: change up_to_date to be private; no lock needed to read * osx arm notes: simplify * Notes for Apple M1 build from source (#7747) * window.run_coroutine_from_thread: don't use wallet.thread * qt TaskThread: implement cancellation of tasks, for cleaner shutdown * trampoline legacy mpp: link to eclair issue * mac build: add workaround for installing pyinstaller with setuptools 61 * mac build: git clone pyinstaller to allow using custom commits * win build: update wine * verifier: small clean-up * rerun freeze_packages * transaction.py: TxOutpoint: nicer __str__ and __repr__ * swaps: build index(es) for the swaps dict to avoid linear scanning * Qt: reorganize settings dialog * Qt: make display of lists more stable. * Reverse swaps: Wait until funding tx is confirmed - override with allow_instant_swaps option (Qt) * submarine_swaps: use prevout to determine if a txin is claiming a swap * follow-up 92c6d911570d0d0aa84ca835ab613b2cb7372f19: remove paid item from request_list * config: abstract away mempool depth format str "%.1f MB from tip" * swaps: more precise tx size estimation for claim tx when RBF-ing * qt history tab: fix double-clicking inside collapsible items * swaps: when RBF-ing a forward swap tx, payment amt must not decrease * swaps: fix forward swap: lnworker.create_invoice is not async * bump fee of swap claim transactions Note: This adds a new field, spent_txid, to PartialTxOutput * config: fee slider: add more steps in mempool mode * qt ConfirmTxDialog: word-wrap error message text * lnchannel: get_capacity() should not raise when running with --offline * lnworker: make calc_routing_hints_for_invoice and create_invoice non-async * build appimage: make binary somewhat smaller by excluding stuff ------------------------------------------------------------------- Fri May 27 14:38:16 UTC 2022 - marec@detebe.org - Update to version 4.2.2: * update locale submodule * Windows build scripts: Read codesign passphrase. Lazy check if unsigned binaries are there. * prepare release 4.2.2 * bip70 paymentrequest: remove support for "file" URIs * Refactor: move calls to lnworker methods out of the tx creation functions (follow-up f0237e46beca095f4b79f4ae6a2bf32175e31c48) * lnsweep: do not redeem offered HTLCs unless payment was received in full * lnwatcher: a bit less verbose * lnchannel: fix diagnostic_name, for better log lines * lnpeer.reestablish_chan: enforce order of replaying commitsig/revack * submarine_swaps: fix order of operations in get_send_amount * email plugin: SSL was using insecure defaults * interface: bypass proxy for servers on localhost * daemon: default rpc socktype to "tcp" if `rpcport` is set * appimage: update package (libdbus-1-3) in dockerfile * bip39_recovery: also scan change addresses * appimage: update libssl-dev libssl1.0.0 openssl libsqlite3-dev (#7798) * hw keepkey: workaround protobuf weirdness * interface.get_block_header: assert height >= 0 * hardware wallets: mention keystore.label in select_device * hardware wallets: smarter pairing during sign_transaction * hardware wallets: redefine "id_" for hid devices to avoid collisions * lnwatcher: in inspect_tx_candidate, match witness scripts against HTLC templates fixes #7781 * fix #7783 * appimage: update package (git) in dockerfile (#7786) * build appimage: bump pkg2appimage version * appimage: update git * android: create relative .buildozer symlink at correct folder, regardless of CWD (#7759) * mac build: add workaround for installing pyinstaller with setuptools 61 * mac build: git clone pyinstaller to allow using custom commits * win build: update wine * rerun freeze_packages ------------------------------------------------------------------- Sun Mar 27 16:38:18 UTC 2022 - marec@detebe.org - Update to version 4.2.1: * update date in release notes * hw ledger: sign_transaction: add progress indicator * update locale * android build: update README to newer build.sh syntax * build: (reproducibility) always uses "pip install" with "--no-build-isolation" * win build: fix reproducibility by excluding `*.dist-info/` * win build: add instructions to investigate reproducibility failure * win build: set `--no-build-isolation` when pip installing pyinstaller ------------------------------------------------------------------- Fri Mar 25 08:52:30 UTC 2022 - marec@detebe.org - Update to version 4.2.1: * prepare release 4.2.1 * channel_establishment_flow: do not save wallet file backup in the background. Instead, display a popup everytime, if the channel is not recoverable. * "--portable": more consistent behaviour * "--portable": make behaviour independent of pyinstaller version * run_electrum: small clean-up, and hide DeprecationWarnings if not git * Qt: on status changes, refresh item in invoice_list and request_list, instead of calling update(), which repopulates the model. * fix deadlock: self.lock should be taken before self.transaction_lock (self.lock is taken in self.get_tx.height) * qt gui: more resilient startup: catch more exceptions, better fallback * kivy: locale: set default language to English * kivy: delete some dead code * wallet: fix delete_address removing too many transactions * qt chan details dlg: break stats into 2 cols, add local/remote balance * qt gui: (maybe fix) opening "Preferences" segfaults on macOS for some * win build: update pyinstaller (from around 4.2 to around 4.10) * win build: bump wine 6.0.2->7.0.0.0 to fix installing python * win build: bump python 3.9.10->3.9.11 * transaction: TxInput.witness_elements() to return [] if not segwit * kivy: fix cpfp dialog: qt not available on android * binaries: bump python 3.9.10->3.9.11; and for android 3.8.12->3.8.13 * lnpeer: some rework of error/warning message handling * contrib/add_cosigner: document usage process * contrib/upload: fix file permissions on the sftp server, and chmod +x * update gitignore: .buildozer is now a symlink, not a folder * fix date in release notes * fix prev * android build: update openssl * wallet: fix clear_requests and clear_invoices * appimage: update libssl-dev libssl1.0.0 openssl (#7715) * android build: (reprod) exclude frozenlist-*.dist-info from apk * contrib/release.sh: fix some paths re android apk * macos build: brew now requires xcode cli tools (not full xcode) ------------------------------------------------------------------- Tue Mar 15 17:14:31 UTC 2022 - marec@detebe.org - Update to version 4.2.0: * update submodule * prepare release 4.2.0 * qt init: make sure wallet file parsing errors are shown in gui * crash reporter: if disabled via config, make sure EEQueue is flushed * lnpeer: fix shutdown: do not broadcast dummy tx * android build: add Qt/QML build-time dependencies * frozen deps: update bitbox02 and coldcard libs * android build: bump targetSdkVersion to 30 * kivy: show error when failing to save wallet file backup * Improved COLDCARD icons PNG+SVG (#7709) * DeviceMgr.select_device: add some log lines * network.switch_to_interface: catch 'task group terminated' * change coldcard icons to be more consistent with the other vendors (#7708) * electrum-env script: don't pull in "pip install --user" pkgs * lnpeer: raise GracefulDisconnect in wait_for_message * lnpeer: favor schedule_force_closing wrapper * minor: simplification * lnpeer: no need to raise GracefulDisconnect twice * lnpeer: factorize on_warning/on_error code * lnpeer: warnings for shutdown and open_channel * lnutil: exceptions for LN protocol errors/warnings * lnpeer: send/handle error and warning messages * lnwire: understand warning messages * update cirrus make_apk command * Add Qt5/QML building framework to contrib/android: - update requirements file for building PyQt5 - use separate .buildozer directories for qml and Kivy - add GUI and ARCH parameters to android/build.sh * modern shutdown: - clarify TODOs - add tests for shutdown with modern negotiation * lnpeer: refactor fee negotiation in _shutdown - the fee negotiation is split into smaller functions, reducing the scope of variables. - the while loop logic is condensed in a few lines, so it is easier to understand termination conditions. - removed code that was never executed * lnpeer: modern fee negotiation * lnwire: add fee_range tlv * Update udev rules for Nano S Plus (#7698) * network: make request timeout configurable (#7696) * contrib: add docker_notes.md * build: rm need for sudo in most places; and do not run as root * appimage: update package (libc) in dockerfile * BUGFIX: invalid client loaded for identical wallet with different HW type (#7689) * tests: unit test address_to_payload * README: docs on how to run unit tests * bitbox02: bump dependency to v6.0.0, support sending to taproot * Add support for Ledger Nano S Plus (#7692) * fix rpcsock (#7691) * fix * fix get_balance method * wallet_db: handle legacy channels in convert_version_44 * interface: add comment about monitor_connection * android build: set SOURCE_DATE_EPOCH to cur time for debug builds * keystore.sign_message: add optional script_type argument * bump libsecp256k1 version * build appimage: rm importlib-metadata workaround * interface: set got_disconnected earlier * interface: speed up handle_disconnect via shorter flush-buffer-timeout * exchange_rate: don't log full exception trace for timeouts * network: test if interface is alive before iface.taskgroup.spawn * lnworker.try_force_closing: changed to not be async (and renamed) * Trampoline MPP: save fee level in sent_htlcs_info. If multiple HTLCs fail at the same fee level with TRAMPOLINE_INSUFFICIENT_FEE, bump trampoline_fee_level only once. * follow-up previous: set exception to be raised after we have sent channel_reestablish * move comment (minor, follow-up prev commit) * Split code in reestablish_channel: Messages are sent in reestablish_channel (async) Message checks and force_close are performed in on_channel_reestablish (not async). That task should not be cancelled if the connection is closed. Revert 57583c05cf0a4e083801e375421ded77f44e113f * qt: again disable changing light/dark theme at runtime * qt: follow-up changing light/dark theme at runtime * fix tests: follow-up 96fcf68d847fd4f32385a80fabd01fbb2c65da54 * qt: allow changing light/dark theme at runtime * lnworker.force_close_channel: set chan state before broadcast * kivy ln invoice: handle missing 'd' tag * lnchannel.set_state: add "force" option for debugging use * trampoline: refactor routes, enable e2e mpp * trampoline: add electrum testnet node * Add support for cli --version command * rerun freeze_packages * binaries: bump python 3.9.7->3.9.10 * update block header checkpoints * trivial: minor grammar fixes * signmessage: also accept Trezor-type sigs for p2wpkh and p2wpkh-p2sh addrs * tests: add test for signmessage with segwit address * ecc: API changes: verify_message_hash to return bool instead of raising * request_force_close: add 1s delay before closing the tranport, so that the remote task does not get cancelled. * lntransport: change name used in logs to make collisions unlikely * Minor grammar fixes * tests: tox: python version matrix is fed from .cirrus.yml via TOXENV * regtests: update electrumx * aiorpcx: monkeypatch TimeoutAfter internals * requirements: bump min aiorpcx to 0.22.0 * util: rm SilentTaskGroup. this does not seem to be needed anymore * some clean-ups now that we require python 3.8 * bump min required Python version to 3.8 * cirrus ci: change cache key for pip dependencies * follow-up prev * build: android reprod: "pip install" needs "--no-build-isolation" * scripts: fix py3.6 compat in update_default_servers.py * kivy+qt: add channel type to details * wallet: replace static remotekey with channel type * lnpeer+wallet: use channel type for channel open * lnutil+lnwire: implement ChannelType * build: relax qdarkstyle version bound * build: relax dnspython version bound * build: rm "dataclasses" from pinned requirements-hw.txt * rerun freeze_packages * network: update hardcoded mainnet servers (and testnet) * scripts: add "update_default_servers.py" * appimage build: update libudev-dev libudev1 (#7629) * Cirrus: Use hardcoded ElectrumX v1.15.0 in functional tests * Cirrus: Use VM instead of Docker for functional tests * trampoline: forwarding, use correct secret for legacy case * trampoline: use trampoline policy for intermediate forwarders * lnpeer tests: add spp trampoline payment * tests: implement graph with flexible definitions * Prepare scripts for aggregated signatures: - fetch file signatures in contrib/add_cosigner. - detect cosigners in make_download. - format download page for aggregated signatures. * contrip/upload: do not fail sftp if directory already exists * follow-up fix tests: logic typo * Update qdarkstyle to <3.1 (allow 3.0.x) (#7561) * trezor: use the same amount unit (satoshi, etc.) on device * trezorlib 0.13 compatibility * lnpeer: fix possibly nonexistant to_remote check * qt preferences: always show cb for LN/"Create recoverable channels" * daemon: change rpcsock default to "unix" where available * daemon: (trivial) subservices log when they start listening * qt tray tooltip: don't include wallet balance * blockchain: fix bugs in bits_to_target and target_to_bits * blockchain: bits_to_target: small clean-up * blockchain: clarify MAX_TARGET by referencing bitcoin core source * interface: scripthash.get_history: fix tx order check * python 3.10: fix some deprecation warnings and compat with 3.10 * kivy: implement ElectrumGui.stop * gui: add BaseElectrumGui base class for guis * crash reporter: add EarlyExceptionsQueue * daemon: if taskgroup dies, show error in GUI * daemon: rework stopping * lnpeer: more forwarding is now event-driven * lnpeer: disable msg processing rate-limiting in tests * lnworker: change api of 'htlc_{fulfilled,failed}' events * lnpeer: make forwarding partly event-driven * tests: Add rudimentary integration test for Unix domain socket functionality * cli: Add support for Unix domain sockets * win build: revert pyinstaller upgrade * win build: update some build dependencies * android build: bump python 3.8.8->3.8.12 * win build: bump python 3.8.8->3.9.7 * mac build: bump python 3.7.9->3.9.7 * rerun freeze_packages * lnsweep: rm code dupe: 2nd stage htlc tx out vs ctx to_local addr reuse * kivy: confirm_tx_dialog: toggling "final" should update the tx * tests: try to reduce flakyness of test_fail_pending_htlcs_on_shutdown * add comment for safer forwarding * check dust limits * implement option_shutdown_anysegwit * dns hacks: dns via proxy: special-case "localhost" string * ln update_fee: enforce that feerate is over default min relay fee * lnpeer: refactor some checks re open_channel/accept_channel * ci: only run coveralls script if ENV var is set (for token) * watchtower: watch new channels * save_backup: do not remove deterministic LN key (see #7513) * follow-up eadd1bebb2e4ed2f2bb61b208f4cae78d5049bcb * build appimage: update appimagetool and stop using fork of mksquashfs * python3.9: sample from list instead of set * appimage build: bump python 3.8.12->3.9.7 * appimage build: bump python 3.7.10->3.8.12 * appimage build: change base to ubuntu 18.04 * Do not convert StoredDict keys to str. Instead, convert json keys to int when storage is read. * wallet update: move fields that have string keys out of channel log * wallet_db upgrade: in OnchainInvoice['outputs'], convert vals None->0 * wallet_db upgrades: (trivial) make upgrades more standalone * wallet payreqs: trivial clean-up * Qt Send tab: handle exc when "." is entered into amount_e * qt wallet info: make labels selectable * kivy: settings: better handling of "default" language * kivy: locale: set default language based to OS lang * kivy: locale: also translate strings in core lib * ci: remove Travis CI integration * qt cpfp: (trivial) make some strings translatable * Added CPFP Feature for Kivy GUI (#7487) * multiple max spends: add unit test * follow-up prev: some clean-ups * Multiple max spends functionality added (#7492) * contrib/push_locale: start using crowdin v2 API (instead of v1) * cirrus ci: push_locale: make sure gettext is installed * ci: coveralls: try to aggregate tasks/jobs into builds * readme: update CI badge from travis to cirrus ci * ci: fix coveralls for cirrus ci * Add Cirrus CI (#7431) * Update new password prompt (#7495) * Removes inaccurate "brasilian" language * kivy: fix when running with --offline * follow-up prev: some clean-up and added clarifications * Add network setup option when Kivy GUI starts for the First time. (#7464) * network.py: reorder bitcoin core error msg whitelist * qt send tab: try to make it clearer the sender pays the fee * qt ConfirmTxDialog: make fields selectable * qt PreviewTxDialog: fix sizing of fee edits * Added different Sighash_Types (#7453) * appimage: update libssl-dev libssl1.0.0 openssl (#7472) * Fix tab order in setup wizard * gitignore: slight changes so that it might be reused as dockerignore * ecc: allow tests to disable ecdsa R-value grinding * fix ln payments: set payto_e ln invoice correctly * Change lightning node(signet) * Adding BumpFee command to the CLI (#7438) * kivy: fix on_intent to call set_URI * android+osx: add lightning uri handlers * qt+android: add lightning URI support * bolt11: fix amount encoding for large values * mac build: reuse previously built dylibs if available * lnrouter+lnworker: rename my_channels * qt channels list: align "can send", "can recv" cols based on amounts * (trivial) qt settings: fix a type hint * config: make adding thousand separators to amounts optional * util.format_satoshis: fix (add_thousands_sep & whitespaces) param combo * Fixed issue with thousands separator for better readability (#7427) * lnrouter: fix self-payments * make_downloads: generate signature lists * Added BTC and Fiat amount on the confirmation screen for Lightning Invoice (#7425) * add gpg key of Emzy * kivy: fix: when changing units or ccy, history list was not updated * kivy: format_amount: minor clean-up * config: add option to display amounts with msat precision * util.format_satoshis: fix whitespaces param for non-zero precision * util.format_satoshis: fix for amounts with higher than sat precision * qt custom block explorer: fix handling non-str config values * release.sh: fix bugs discovered during last release * mac build: README: mention Xcode path intricacies * contrib/upload: minor fixes * add contrib/build-wine/signed to gitignore * lnworker: improve route creation * mpp_split: split algorithm with channel splits * tests: clarify keyword arguments, rename ------------------------------------------------------------------- Sun Aug 01 17:13:08 UTC 2021 - marec@detebe.org - Update to version 4.1.5: * update locale * release.sh: dmg is now reproducible as well * prepare release 4.1.5 * mac build: compare_dmg: "diff" should handle missing directory * mac build: README: clarify note about reproducibility of unsigned dmg * make_osx: disable set -e during test of signing identity * mac build: attempt at "reproducible" codesigned builds * mac build: re-add note about needing full Xcode... * mac build: rm pyinstaller monkey-patch used to codesign embedded files * mac build: add "set -e" * make_osx: do not download python pkg unnecessarily * set -e in compare_dmg * mac build: download python from python.org instead of using pyenv * mac build: trivial clean-up * Improve _mythread checks (#7403) * follow-up prev * lnchannel: introduce HTLCWithStatus NamedTuple * invoices: explain status constants * fix typo (follow-up prev) * compare_dmg: compare two files * crash reporter: send traceback for full chain of exceptions * Add lightning tag for commands * mac build: don't create __pycache__ folders * osx: add script to compare dmg binaries * wallet: fire "request_status" event also when conf number changes * qt init: on exc, let crash reporter appear instead of silently dying * Don't cleanup lockfile is listen_jsonrpc is False * mac build: build libusb from source * kivy wizard: add explicit warnings at seed creation * kivy crash reporter: warn users not to share sensitive info * wallet: make sure payment requests are persisted * qt: some fixes for send/receive tabs when window is small * macOS builds: remove zip file after notarization * LN private route hints: don't include low receive capacity channels * trampoline: fix "pay-to-legacy" workaround when using ACINQ node * Friendlier minimum sizing for small screens for air-gapped signing functionalities, i.e. main window and transaction dialog * trampoline: improve payment success * qr scanning: add comments to distinguish qrscanner.py and qrreader/ * qt: qrreader: keep both old and new toolchain; try to abstract it away * qt: new qrreader using QtMultimedia; drop CalinsQRReader(mac) * qt: (fix) make ScanQRTextEdit inherit Logger * kivy: scan_qr_non_android: handle user closing window * build: update zbar to fix build issue with autoconf 2.70 * contrib/osx/package.sh: fix paths, add link to issue regarding GCC 10.1 * build tools: set ZERO_AR_DATE to have deterministic timestamps on macOS * slip39: follow-ups * lnaddr: clean-up SEGWIT_HRP vs BOLT11_HRP confusion * build: extend release.sh so that all builders can use it * windows build: fix build.sh "cp" cmd * rephrasing, removal of revealer website links (#7359) * gitignore: exclude appimage fresh_clone * kivy addresses list: add "funded or unused" filter option * qt addresses list: add "funded or unused" filter option * kivy: fix paying bip70 invoices * build: try to consolidate instructions and decr codedupe in release.sh * build/release.sh: add some comments * (trivial) build/release.sh: convert indents to spaces * build: rename some scripts * build: fresh_clone: turns out we can just clone from a local dir :P * android build: place binaries in ./dist/ instead of ./bin/ * readme: add a "contributing" section, mentioning new irc * release script: follow-up prev commit * Add net.BOLT11_HRP * add signet support * Add SLIP-0039 unit tests. * Implement SLIP-0039 wallet recovery. * Replace from_bip39_seed() with from_bip43_rootseed(). * Add SLIP-0039 wordlist. ------------------------------------------------------------------- Fri Jun 18 17:02:28 UTC 2021 - marec@detebe.org - Update to version 4.1.4: * prepare release 4.1.4 * commands: fix "close_wallet" cmd, which was deadlocking * contrib/upload: use abbrev=0 * release.sh: fix path for android builds * build-wine/unsign.sh: allow using before files are uploaded publicly * release.sh: make sure correct commit is checked out * kivy: fixes regression where non-LN wallet cannot open settings... * update locale; again :P ------------------------------------------------------------------- Fri Jun 18 17:01:49 UTC 2021 - marec@detebe.org - Update to version 4.1.3: * follow-up 8ff49fa9bb5474974ac1cbf359f8b43828b3a08c * update locale * Remove signature verification from make_download. Signatures are verified by the website, before deployment. * pubkeys: add new gpg key I will use to sign releases from now on * prepare release 4.1.3 * imported wallets: respect "use_change" option; default off * (trivial) wallet: rename parameter of a method * kivy settings: more intuitive "recoverable channels" toggle * kivy: settings dialog: call update() from __init__ * lnworker: rm unused import * follow-up prev * lnchannel: rm HTLC value upper limit of ~42 mBTC * android build: add exec permission to apkdiff.py, and print hashes * release script: call build_docker_image.sh * Update release script with APK fresh clone instruction. Add android/fresh_clone to gitignore * android reproducibility: add Signal's "apkdiff.py" tool, and instructions * android build: attempt at reproducible builds * wallet: rm get_txout_address method * cmd: add sign with privkey and wallet (#7147) * wallet: fix channels backups in .backup files * wallet: RBF batching to only consider RBF-opted-in txs, even if local * Update wallet backup access (#7300) * wallet: add address corruption tests for imported wallets too * invoices/lnaddr: LNInvoice.from_bech32 now raises InvoiceError * fix tests: adapt to breaking change of ipaddress.ip_address in py3.9.5 * kivy: (fix) forbid creating LN payreq if LN is disabled for wallet * appimage: update libc6-dev package (#7299) * swaps: fix satoshi conversion bug * fix prev * wallet: (fix) "batch_rbf" must not mutate LN funding txs * lnrouter: add inflight htlcs to liquidity hints * lnworker: async gen create_routes_for_payments * kivy: (trivial) clean-up imports in screens.py * follow-up prev * invoice: fail gracefully with large amount * util: check bip21 url for amount * android build: pin hashes of p4a recipes * mac build: link to issue in README * kivy: relocate atlas so it can be made a submodule later * bip39 auto import, add coolwallet S weird derivation path (#7261) * kivy: improve openchannel dialog for trampoline * release script: add username to signature file, upload files into airlock. * Do not perform webserver update from release script. (see publish.sh and deploy.sh in the electrum-web repo) * contrib: fix find_restricted_dependencies for deps with version range * network: also clear network.path_finder in stop_gossip * tx dialog (Qt): if possible, save psbt and fully signed transaction under the same basename. * lnworker: fix path_finder access * qt send tab: when clicking "Max", show tooltip explaining max amt * qt: cpfp: fix handling "no dynamic fee estimates" * swaps: fix off-by-one sanity check * qt coins tab: Ctrl+F now searches the whole prevout string * Qt MyTreeView: rm usages of Qt.UserRole, use explicit roles instead * (trivial) rm dead code * tests: add test for payto command * android build: update p4a/buildozer to latest upstream * kivy: update wizard message: pin->password * kivy: implement freezing channels * gui messages: mv one more message to messages.py * kivy: make ActionDropdown disappear when an action is selected * kivy: use ActionDropdown in ChannelDetailsPopup * kivy tx dialog: abstract away ActionDropdown, mv into its own file * kivy tx dialog: dscancel btn text was too long * kivy bump fee dialog: handle no dynamic fee estimates * Avoid hiding QR codes with help_text * appimage: update libudev-dev package * commands, input sanitization: allow 'max' amounts only in specific contexts (payto, paytomany) * config: (trivial) add some type hints and rm unused variable * kivy swaps: handle no dynamic fee estimates * logging: don't lose log messages during early startup * logging: (move-only) move module level code to near the end * wallet: make sure we don't create zero input txs * logging: handle "cannot delete old logfile" error * fix running with --offline * appimage build: bundle dependencies of Qt xcb plugin * lnrouter: add hint timestamp * lnrouter: remove blacklist boolean * dnssec: trivial clean-up * Prevent spaces from causing issues in make_osx (#7191) * mnemonic: make sure newly generated seeds are not valid as bip39 * lnpeer test: payment now succeeds in two payments * lnrouter: penalty code simplification * lnrouter+lnworker: use liquidity hints * lnrouter tests: add another channel to graph * reorganize with_lock decorator ------------------------------------------------------------------- Fri Apr 09 15:39:54 UTC 2021 - marec@detebe.org - Update to version 4.1.2: * prepare release 4.1.2 * fix #7190 * android Makefile: do not try to deploy and run * qt update notifications: add another key for redundancy * android: update app icon; use "adaptive icons" on API 26+ * lnrater: use network.asyncio_loop instead of asyncio.get_event_loop() * fix #7185 * android build: only build one apk for debug builds * icons: clean up electrum svg icons * add electrum svg icons * new icons for android * wizard: let UserCancelled propagate out in hw wallet flow * qt init: move Ctrl-C handling earlier * kivy: implement freezing addresses * lnutil: add rationale for MIN_FUNDING_SAT * qt channels dialog: handle funding tx missing * Show txid in text GUI * add missing release notes for old backports * qt: fix some widget parenting issues * qt init: rm gui.close() method * qt init: shutdown properly if last open window was a wizard * qt: even more clean-up before exiting * android backups: fix missing parameter * qt init: more clean-up for system tray * qt init: (trivial) refactor system tray * lnpeer.channel_establishment_flow: check funding_sat in bounds earlier * qt init: don't catch BaseException unless there is good reason * qt gui: some more clean-up when exiting * release script: add hash comparison step before uploading ------------------------------------------------------------------- Tue Apr 06 06:23:07 UTC 2021 - marec@detebe.org - Update to version 4.1.1: * prepare release 4.1.1 * add contrib/release.sh script * Qt swap dialog: do not call update() from the asyncio thread. Fixes some segfaults that were triggered by opening the dialog * fix #7160 * qt tx dialog: handle fiat fee for zero-fee tx * fix #7164 * fix #7165 * locale/i18n: set language as early as possible * i18n: don't translate empty string * android build: update kivy * windows build: (trivial) convert whitespaces in unsign.sh ------------------------------------------------------------------- Wed Mar 31 17:14:46 UTC 2021 - marec@detebe.org - Update to version 4.1.0: * build: clarify which locale files are included * gitignore: add some macOS specific stuff * Do not display the warning about static backups in init_lightning. It is not useful to display the same message twice. * make init_lightning callable at runtime, without reloading the wallet * kivy: remove dead code (follow-up 64a931f21e) * history_list: use from_timestamp and to_timestamp in summary * kivy: remove unnecessary friction in _enable_lightning * wallet: change init_lightning to sometimes create deterministic LN keys * keystore: encapsulate "can_have_deterministic_lightning_xprv" logic * wallet_db: put 'seed_type' into keystores (incl db upgrade) * add back "lightning is experimental" warning text * tests: add test for keystore.get_lightning_xprv * (minor) rephrasing * final release notes * lnworker: change crypto for onchain static backups * update locale * wallet: (minor) fix filtering history by year * fix capital gains * more release notes * (minor) release notes * update release notes * detect conflicting channel backups, add warning before channel creation * lnpeer: log both sent and recv msgs; use pubkey for incoming transports * lnworker: fix another peer-handling race * lnworker: handle multiple transports with same remote node id * regtest backups: test both cases (onchain and imported) * lnchannel: get_state_for_GUI minor fix * fix remove_channel_backup (typo) * lnrater: don't suggest nodes we have a channel backup with * fix privkey in request_force_close_from_backup * lnworker.num_sats_can_send should not return negative values * qt channels list: hide unnamed column from "Copy" context menu * prepare release notes for 4.1.0 * swaps: (fix) for forward swaps, correctly consider num_sats_can_receive * swaps: revise send/recv amount calculation * Qt: minor changes to open channel dialog * (minor) rm confusing adjective * Qt: invert trampoline checkbox in settings dialog. Share the help message with Kivy * Qt: remove the 'local watchtower' option from GUI. * qt: tooltip formatting function * add trampoline.hodlister.co * AppImage build: Include libxcb into the image * wallet.add_transaction: prevent channel backup from being added twice * kivy: minor GUI improvements * sdist build: let pip install put ~everything from tar.gz to site-packages * sdist build: (minor) exclude more stuff from tar.gz, rm git clean log * cosigner_pool: fix #7134 * bitcoin.address_to_scripthash: add net param (#7143) * submarine swaps: use num_sats_can_receive_no_mpp, to prevent funds being locked * hardcoded trampoline nodes: replace IPs with domain names * add another DNS seed * lnworker: guess routing fee in num_sats_can_send * lnpeer: if close_channel times out, check unconfirmed_closing_txid before raising an exception * commands: clean-up inject_fees cmd * check_password_for_directory: safeguards * fix wrong call to request_force_close_from_backup, make it private * lnchannel: rename force_close_detected -> closing_detected, use it only if state is OPEN * (minor) fix GUI if channel is force closing * kivy: if password is unified, allow user to reset pin code * commands: fix signtransaction cmd when used with "privkey" arg * wallet: implement get_utxos at specific block height * (minor) follow-up ed6eea9161e3600e33a4c173d252475f3b108d6c * Add 'has_onchain_backup' to channel storage, to fix the displayed icon. * kivy: make sure there is only one resume dialog * kivy: count open channels * Change warning shown on first channel creation * minor: fix channel backup icon * qt: use the same 'nocloud' icon in wallet information * channels list: group icons to save space * qt channels list: add "features" column with icons (e.g. trampoline) * qt: change backup icon, add tooltip * Android: unify password as soon as we know it is possible * (trivial) just add some TODOs * tests: rename TestSuccess(Exception) to SuccessfulTest * Allow user to remove onchain backups. * kivy: channels list improvements * channels_list: use icon to tell apart channels from backups * lnchannel: add pseudo-state force_close_detected for GUI * lnwatcher: trigger 'verified' callback with the main wallet object. * set initial trampoline fee level to 1 unless we are testing * (temporary) disable e2e and dual trampoline if first trampoline is ACINQ * fix direct payment to trampoline node * (minor) fix mutable default value * wallet: store wanted_height in future_tx, instead of remaining blocks * lntransport: optimise read_messages implementation * tests: rework lntransport test a bit * kivy: add option to request force-close * Minor style changes * Rename excluce to exclude (#7121) * qt ChannelsList: fix opening channel with "max" amount * dependencies: bump min aiorpcx, and enforce at runtime * lnworker: filter active channels in create_routes_for_payment * pay_to_route: raise PaymentFailure in case of dropped peer, so that we reset payment status * lnwatcher.try_redeem: output log only the first time a tx is seen * lnwatcher: try_redeem must return if tx is None * follow-up d8352f1a0acbbaa4c4b8a995414ea2eb3fd69dba * lnpeer: ignore unknown 'odd' type messages * lnworker: nicer logs/error msgs for payment failure * Qt: clarify use_gossip checkbox text * channels_list: improve menu for backups * channels_list: show backup text in the state column. fix missing import in previous commit. * On Android, if channels are not recoverable, display channel backup when a new channel is created. Remove the 'android_backups' setting, which was unpractical. * bump version number. initial release notes for version 4.1.0 * Deterministic NodeID: - use_recoverable_channel is a user setting, available only in standard wallets with a 'segwit' seed_type - if enabled, 'lightning_xprv' is derived from seed - otherwise, wallets use the existing 'lightning_privkey2' * lnpeer: send update_fee if channel was never used (workaround eclair issue 1730) * lnpeer: add sanity checks in channel open flow re ln dummy output * bitbox02: bump dependency to 5.2.0 * qt: use 'local' icon for future transactions * forwarding: temp chan fail on insufficient funds * lnworker: use booleans for enable_htlc_settle, enable_htlc_forwarding * test_backup: sleep is not needed anymore * daemon: change stop() to use events, instead of polling * commands: make stop() CLI cmd wait for daemon to stop * test_backup: check onchain balance * increase width of tx dialog, to have one line per input * BIP-0350: use bech32m for witness version 1+ addresses * tests: add missing test vectors from BIP-0173 (bech32) * inspect_tx_candidate: tx output must be of address type * request_force_close: close and reopen existing peer connection, because channel_reestablish cannot be sent twice in the same session * channels_with_funds: self._channels -> self.channels * network: trigger 'network_updated' as soon as set_parameters finishes * qt channels_list: separate on_success handlers for close_channel and request_force_close * lnworker: merge request_force_close and request_remote_force_close * mpp_split: use single nodes for mpp payments over trampoline * tests: re bolt11 tests, also check invoice str in test_roundtrip * lnworker: minor clean-up, fix typo * lnchannel: verify sig of remote chanupd (for inc edge of direct chan) * fix: add request_force_close method * (trivial) lnbackups -> lnworker * kivy: show channel backup before force-close * kivy: show channel backup capacity * ln gossip: run sig checks in a thread * ln gossip: make sure all signatures are verified * lnworker: (trivial) split handle_error_code_from_failed_htlc method * fix regression from 652d10aa5f810d6db00ce4870ea7c779f9ff35a4 * channel_db: (fix) asyncio.Event.set() is not thread-safe * channel backups: display status from lnworker instead of channel state * kivy server selection: don't hide ':t' protocol suffix * (minor) word wrap qt tooltip * (trivial) rm debugging code * Qt: add "save backup" checkbox to force-close dialog * Qt: add option to request force close of channel * follow-up previous commit * kivy: unify fee dialogs - confirm_tx_dialog and bump_fee_dialog inherit from FeeSliderDialog - changing the slider method does not require an extra popup * remove newlines in get_tx_fee_warning, it does not render well on kivy * binaries: bump python version * appimage build: adapt to new PyQt (5.15.3+) layout * rerun freeze_packages * contrib: freeze_packages should pin latest pip/etc if possible * Kivy: Show fee dialog before opening a new channel. Remove fee and rbf from settings, as they are now always proposed * lnpeer: add comments to process_unfulfilled_htlc * use mktx_for_open_channel in commands module. fix indentation * qt receive tab: change "Expires after" label and help text * add channel backups to result returned by list_channels * qt lightning_tx_dialog: use historical fx rate for fiat amounts * network.best_effort_reliable: use curio APIs instead of asyncio * show capacity of channel backups in GUI * commands: fix list_requests * wallet: factor out "what key to use for invoice" * follow-up 90b228de839d6474f6d23322cd2a80e1da73a254 * follow-up 90b228de839d6474f6d23322cd2a80e1da73a254 * add comments about ChannelBackup fields * add request_force_close command to CLI add regtest for channel backup * fix dict value assignment bug in import_channel_backup. In request_force_close, use Taskgroup with wait=any * (formatting) lnsweep indentation * fix wallet get_full_history: add onchain tx for channels not opened by us * tests: add test for prev * lnworker: try to fail pending HTLCs when shutting down * lnhtlc: (trivial) rename method * lnpeer.maybe_forward_htlc: add FIXME * util: document CallbackManager behaviour * add TODO, rename check_received_mpp_htlc * mpp_split: add penalty for exhaustion of channels * Qt: rm gossip menu item: already available in toolbar, and channel_db is not always present * test_multipart_payment_with_timeout: give extra time for second HTLC to timeout before next test * lnpeer: try to fix tests * crypto: add comment about ripemd.py * tests: fix tearDown() issue in test_lnrouter.py * test_lnpeer: use 2s MPP_TIMEOUT, and split test_multipart_payment_with_timeout * tests: maybe fix tearDown() issue in test_storage_upgrade.py * network.stop: clean-up * {daemon,wallet}|.stop: small clean-up * kivy crash_reporter: a bit more logging * follow-up prev: too much copy-paste * crypto: add chacha20_decrypt; unused for now * test_lnpeer: add test for mpp_timeout * crash reports: fix get_git_version for kivy * follow-up 652d10aa5f810d6db00ce4870ea7c779f9ff35a4 * kivy: fix GridLayout orientations all over * Revert "lnworker: simplify request_force_close_from_backup" * Appimage build: update git=1:2.7.4-0ubuntu1.10 15b5d9d (#7091) * wallet: (trivial) use kwargs for get_tx_item_fiat * daemon/wallet/network: make stop() methods async * lnworker: simplify request_force_close_from_backup * Remove LNBackups object: no longer needed since LNWorker is instantiated by default. * lnworker: set request status after LN payment * tests: test payreq status after getting paid via LN * test_lnpeer: (trivial) prepare_invoice to return both LnAddr and str * lnaddr: add get_features method * Use new value of option_trampoline_routing flag, add it to our invoices. Keep supporting old value for Eclair/Phoenix. Do not add trampoline_routing_hints in invoices. * lnpeer: (trivial) log htlc in on_update_add_htlc * follow-up prev commit * lnworker: fix amount in htlc_log after mpp bucket failure * rm fixme; it was for intermediate stage, between commits. * windows build: skip building pyinstaller if already there * windows build: minor clean-up * windows build: cache pip downloads * windows build: separate 32/64 bit build caches * windows binaries: update pyinstaller to 4.2 * android build: update kivy, and python * lnworker.pay_to_node: re overpayment, raise before actually it happens * test_lnpeer: add missing parameter in pay_to_route * trampoline: do not add node in trampoline hints if it already is the last trampoline of the route * lnworker: fix amount_inflight. (amount with routing fees were used on htlc failures) * lnpeer: fix error code in logs * lnworker: add assert amount_inflight <= amount_to_pay * synchronizer: (trivial) add comment * synchronizer: fix rare race where synchronizer could get stuck * python 3.6 compat: asyncio.Task.set_name was added in 3.8 * fix trampoline forwarding: add_received_htlc must be indexed by payment_secret * test_lnpeer: variables must be declared in MockLNWallet.__init__ * lnpeer: increase max_accepted_htlcs (5->30) * remove trampoline and forwarding regtests, as they are covered by unittests * test_lnpeer: add test for trampoline * trampoline forwarding: return UNKNOWN_NEXT_PEER if we cannot find a route * follow-up prev commit * follow-up previous commit (this was for testing) * use two trampolines: fix blacklisting, use local variables for trampoline_fee_level and use_two_trampolines * follow-up prev * network: close interfaces more aggressively (abort after 2 seconds) * use functools.wraps() for some wrappers * fix wallet.clear_history() * Receive MPP: Use persisted payment status to decide whether to fulfill HTLCs. Without this commit, we might timeout a part of a payment if the client is shut down before all parts are fulfilled. * wallet: don't put partial tx as UTXO into psbt * lnutil: (trivial) add ShortChannelID.from_str() method * Trampoline forwarding: - fix regression in create_routes: fwd_trampoline_onion was not added to the tuple - fix onion structure for e2e - maybe_fulfill_htlc: check the mpp_status of the outer onion, return trampoline_onion to be forwarded * trampoline MPP: fix total_msat in trampoline onion, and bucketing * lnworker: move buckets logic inside first branch of if statement (refactoring commit) * lnhtlc: fix deadlock * lnworker.pay_to_node: (fix) pass correct total_msat to pay_to_route * kivy: InvoiceDialog: make LN invoice QR code scannable * kivy: SendScreen: reliably show LN payment attempt progress for invoice * fix #7078 * lnrouter.get_distances: fix exception due to rare race * add unit test for basic mpp * fix route for non-trampoline MPP * qt channels_list: use monospace font for channel capacity * qt: update all tabs when base_unit changes * qt swap_dialog: use a single button to toggle direction * (minor) fix typos and indentation * lnpeer: more detailed logging in maybe_fulfill_htlc * test_lnpeer: add test: multihop payment that routes around failure * lnworker: run create_route_for_payment end-to-end, incl private edges * lnutil: turn global forwarding fee params into Channel attributes * Trampoline MPP aggregation: - trampoline node is the final recipient of MPP - each trampoline receives a bucket of HTLCs - if a HTLC from a bucket fails, wait for the entire bucket to fail - move trampoline route and onion code into trampoline module * maybe_fulfill_htlc: add failure reason to logs * lnworker: amount passed in HtlcLog must be without fees * _calc_routing_hints_for_invoice: incl max 15 chans to avoid qr overflow * _calc_routing_hints_for_invoice: also incl chans < invoice amount * lnworker: fix handle_error_code_from_failed_htlc for private channels * qt/kivy: lightning_tx_dialog: show LN invoice * android build: (trivial) build arm64 apk first * follow-up prev * kivy channel dialog: fix unit of displayed feerate * qt/kivy ChannelsList: if node alias is unknown, display node id * qt ChannelsList: (trivial) format_fields should not know column order * synchronizer/verifier: ensure fairness between wallets (follow-up) * bech32: another around 10% speedup for bech32_decode * bech32: around 5% speedup for bech32_decode * lnaddr: 15x speedup for lndecode * tests: fix test_lnpeer.test_payment_race * Qt: fix running GUI offline * test_payment_race: increase delay * revert 'keep invoice INFLIGHT', check HTLCs before payment attempt * fix test_lnpeer (follow-up prev commit) * lnworker: keep invoice status INFLIGHT as long as HTLCs are inflight * qt channels dialog: fix for channel backups * logging: eliminate "fee_estimates" log spam * MPP receive: allow payer to retry after mpp timeout * tx dialog: uniform high fee warnings between GUIs * follow-up prev: some clean-up * qt tx dialog: also display fiat amounts * qt tx dialog: add legend for input/output colouring * qt bump fee: rename "Final" checkbox to "Keep Replace-By-Fee enabled" * qt bump fee: add "advanced" button, allow choosing strategy * wallet.bump_fee: add new strategy: decrease payment amounts * qt: move RBF dialog out of main_window.py into its own file * lnpeer.maybe_fulfill_htlc: fix error case FINAL_INCORRECT_HTLC_AMOUNT * lnpeer.maybe_fulfill_htlc: follow BOLTs re some errors * mpp_split: tweak split parameters * mpp_split: undo side effect in tearDown * lnpeer: MPP recv: only fulfill htlc if amt sum exact-matches total_msat * lnpeer: MPP receive: require payment_secret for each htlc * lnworker/lnpeer: add some type hints, force some kwargs * (trivial) wallet: fix over-indentation * create_trampoline_route: check that we can pay the amount and the fees, and that the route is sane * (trivial) lnrouter: fix type of TrampolineEdge.short_channel_id * lnworker: add fees from private path to the amount passed to find_route. (see #7050) * Refactor find_route_for_payment - remove duplicated code - rename variable names to be consistent with the 'path', 'route' terminology - compute private route before route * calc_hops_data: total_msat should be optional * lnworker: add "endurance" ACINQ testnet node as hardcoded trampoline * tests: fix thinko in ElectrumTestCase base class * tests: try to eliminate random failures from mpp_split tests * synchronizer: better handle history-status mismatch * qrscanner: nicer error messages * kivy: add app.scan_qr_non_android * qt: update swap button together with can_send * mpp_split: fix tests for python versions < 3.8 * scripts: add script that broadcasts tx to lots of servers * interface.get_history: enforce sorted order of heights * DeviceMgr: don't mark client as failing if create_client() is None * lnutil.LnFeatures: update LN_FEATURES_IMPLEMENTED * lnutil.LnFeatures: update context for "option_support_large_channel" * lnutil.LnFeatures: impl and use "supports" method for feature-bit-tests * MPP: can_send/can_receive is now the sum, no longer the max * enable MPP with trampoline * follow-up prev commit * MPP: refactor code * lnworker: use suggest_splits for multiple routes * lnonion: add total_msat to onion payment data * mpp_split: implement splitting logic * wizard: focus password field (fix #7048) * network.py: update bitcoin core error msg whitelist * lnpeer: remove recursve call in maybe_fulfill_htlc * fix travis builds (update openssl) * Add back the 'to_height' and 'from_height' to onchain_history command Exclude unconfirmed transactions from --to_height and include them into --from_height. The reason being that an unconfirmed transaction will end up eventually into the last block which most of the time will be higher than --from_height * lnworker: move NoPathFound to lnutil * kivy: receive request: fix RefLabel for "Address" so it can be exported * interface: "block.headers": nicer error if server uses too low 'max' * minor fix following method rename * kivy: show routing options explicitly * lnrater: fix #6764 * invoices: validate 'amount' not to be out-of-bounds * util: assert that Decimal precision is sufficient * bip32: add new test vectors from BIP * minor: fix exception * kivy and qt: adapt open_channel dialogs to trampoline * Trampoline routing: - add support for trampoline forwarding - add regtest with trampoline payment * Trampoline routing. - trampoline is enabled by default in config, to prevent download of `gossip_db`. (if disabled, `gossip_db` will be downloaded, regardless of the existence of channels) - if trampoline is enabled: - the wallet can only open channels with trampoline nodes - already-existing channels with non-trampoline nodes are frozen for sending. - there are two types of trampoline payments: legacy and end-to-end (e2e). - we decide to perform legacy or e2e based on the invoice: - we use trampoline_routing_opt in features to detect Eclair and Phoenix invoices - we use trampoline_routing_hints to detect Electrum invoices - when trying a legacy payment, we add a second trampoline to the path to preserve privacy. (we fall back to a single trampoline if the payment fails for all trampolines) - the trampoline list is hardcoded, it will remain so until `trampoline_routing_opt` feature flag is in INIT. - there are currently only two nodes in the hardcoded list, it would be nice to have more. - similar to Phoenix, we find the fee/cltv by trial-and-error. - if there is a second trampoline in the path, we use the same fee for both. - the final spec should add fee info in error messages, so we will be able to fine-tune fees * kivy: show node alias in channels dialog. Rename the menu back to 'Channels' * windows build: update gnupg(2.2.19-3ubuntu2.1) (#7030) * wallet: follow-up b080df9cff55675935ca3649c6aaa01e8e667b37 * open_channel_coroutine: do not timeout on sign_transaction. fixes #7027 * wallet.bump_fee: (fix) method2 was bumping too much if output was rm-ed * wallet.bump_fee: (fix) make sure input signatures are removed * synchronizer: ensure fairness between wallets * ledger: bump min btchip-python (0.1.30->0.1.32) * wallet: minor clean-up of tx.set_rbf() calls * wallet.bump_fee: (fix) make sure all inputs have same sequence number * ledger: give clear error that old HW.1 cannot send to bech32 address * split code in htlc_switch: - raise OnionRoutingFailure whenever we want to fail a htlc - catch that exception in htlc_switch - this will avoid code duplication in the case of trampoline * lntransport: CancelledError needs priority over LPConnClosed * make_unsigned_request: set network for testnet * Separate pay_to_node logic from pay_invoice: - pay_to_node will be needed to forward trampoline onions. - pay_to_node either is successful or raises - pay_invoice handles invoice status * handle_error_from_failed_htlc: blacklist channel if cannot decode payload * encapsulate get_routing_info in lnaddr * rename lnworker._pay to pay_invoice, call it directly from GUIs * Fix ledger sign message (#7004) * lnpeer: fix timed out mpp * minor: fix typo * cleanup, follow-up f28a2aae73b8a4a2067f41d2f69809e2b1ec6a20 * Qt: fix deprecation warning * Reorganize code so that we can send Multi Part Payments: - LNWorker is notified about htlc events and creates payment events. - LNWorker._pay is a while loop that calls create_routes_from_invoice. - create_route_from_invoices should decide whether to split the payment, using graph knowledge and feedback from previous attempts (not in this commit) - data structures for payment logs are simplified into a single type, HtlcLog * fix tests (follow-up previous commit) * follow-up c0bf9b4509cfdeace824a9054d9c90449ef46ad6 * basic_mpp: receive multi-part payments * LNWorker: do not save PR_INFLIGHT status, detect it on startup instead * paymentrequest: check network on PaymentRequest parse * add function to determine script-type for all inputs in a psbt (#6984) * build-wine/README.md: add comment about needing recent docker version * Fix windows build(travis) (#6981) * lnworker/swaps: add '_sat' suffix to arg names and force kwargs * follow-up prev: fix units when calling lnworker.create_invoice: msat/sat * PaymentInfo: use msat precision * exchange_rate: (fix) rm need to restart app to disable FX rates * windows binaries: bump wine version * wallet: auto-freeze small unconfirmed UTXOs * lnpeer.htlc_switch: (bugfix) don't fulfill htlc until add is irrevocable * tests: lnpeer.htlc_switch: don't fulfill htlc until add is irrevocable * rm unused parameter in maybe_fulfill_htlc * lnpeer: fix flen in INIT * qt network dialog: show protocol (if ":t") for servers in NodesList * qt main_window: add error handling to show_bitcoin_paper * interface.get_transaction: stricter sanitisation * util.is_hex_str: forbid whitespaces * Fix error of showing bitcoin paper(testnet) * Qt: download and show bitcoin whitepaper. fixes #6970 * Qt: set need_update on payment received (minor fix) * kivy: disable gossip button is channel_db is None * Qt: fix invoices refresh (follow-up 94708f63e4f237f5f4c143137de797f9c0ccc08e) * add 'view log' action for LN payments in tx history * qt block explorer: allow custom URL * commands: add 'freeze_utxo' cmd; to expose this to CLI/RPC * wallet: use lock when modifying frozen_{addresses,coins} * wallet.remove_transaction: also rm dependent/child txs * kivy: rename 'Channels' dialog to 'Lightning' * kivy: simplify swaps dialog * qt: fix handling BIP21 URI from e.g. website on macOS * network: fix not retrying main interface in some cases * interface.got_disconnected: change from Future to Event * (trivial) kivy: add missing import * qt send: handle simultaneous NoDynamicFeeEstimates+NotEnoughFunds * kivy: add confirm_tx_dialog, similar to qt * qt: fix PayToEdit.parse_amount (#6951) * formatting (rm blank spaces) * fee-slider: fix dialog crashes for float pos values * swaps: add swaps to android * fix #6341 * set the same features in LNWallet and LNBackups. fixes #6943 * bump_dee and dscancel: call tx.estimated_size() after add_input_info(). This is a workaround, see the FIXME. PartialTxInput.is_segwit() should return the correct value, or raise if information is missing. * rbf_dialog: show error in the dialog window * factorize code for bumb_fee and dscancel dialogs. Disable ok button if fee_rate is None * upfront_shutdown_script: fix ChannelBackup constructor * lnpeer: initialize new channel storage with lnworker db * fix regtest/start_bitcoind.sh: createwallet needs to be called * fix #6674: raise exceptions if dscancel or cpfp create dust or negative output. * check_password_for_directory: skip non-files * Kivy: use the same password for all wallets * kivy wizard: verify seed extension * kivy: fix confirm_seed_dialog (broken in 77e0d3745e990e97ddbac5550e399f3e695af788) * remove broken payment requests. fixes #6350 * kivy: minor fix (follow-up 94708f63e4f237f5f4c143137de797f9c0ccc08e) * Wizard: do not ask seed type, default to segwit * invoices and requests: rm 3 seconds delay * auto-remove paid invoices from GUI - delay 3 seconds in GUI - kivy remove 'delete' buttons from send/receive screens * add unconfirmed state for onchain invoices and requests * Qt: rename incoming/outgoing payments to send/receive queue. fixes #6711 * windows binaries: bump python version (3.7.9->3.8.7) * follow-up previous commit (variable name) * pass blacklist to lnrouter.find_route, so that lnrouter is stateless (see #6778) * fix tests (follow-up 3f5c1a017120f1e7a0cde83bb737779a5bb9f418) * simplify lnrouter API * upfront_shutdown_script: rm dead code, fix test * lnpeer: remove unused imports, code cleanup * lnpeer: add unit test for upfront shutdown script * scripts: add Lightning feature analysis script * lnrater: suggest nodes compatible with our LN features * lnworker: enable upfront shutdown script * lnpeer: implement upfront shutdown script logic * wallet_db: migrate to upfront shutdown scripts * lnwire: add upfront shutdown script tlvs * lnpeer: await on_message handlers to raise exceptions * hw plugins: log exception at import time (but only if interesting) * pass daemon to Commands instance in qt console. fixes #6926 * ChannelDB: avoid duplicate (host,port) entries in ChannelDB._addresses * ChannelDB: fix get_last_good_address * plugins/coldcard/coldcard.py: include derivation path for each part of multisig (for v3.2.1 of firmware) * plugins/coldcard/README.md: updates and cleanup * rerun freeze_packages * requirements: don't use dnspython 2.1 as it installs poetry at build-time * binaries: update bundled PyQt version to 5.15.2 * windows binaries: update libusb to 1.0.24 * windows binaries: update pyinstaller to 4.1 * storage: speed up write() by using faster compression setting * storage/db: use faster JSON encoder settings when wallet is encrypted * qt send tab: mention frozen balance if "not enough funds" in more cases * qt BlockingWaitingDialog: try harder to get label drawn (refresh bug) * qt tx dialog: use WaitingDialog for network requests in __init__ * qt tx dialog: fix visual artifact when opening (widget parenting issue) * lnpeer: fix a comment * kivy wizard: checkum bip39 seeds, because the virtual keyboard imposes the English wordlist * wizard: call on_restore_seed, on_restore_bip39 through self.run. fixes #6895 * fix #4326 * fix #6605 * fix reserve_sat in local_config. see #6896 * lnchannel.available_to_spend: return zero if frozen or not active. Without this, the channel details window displays can_send/can_receive values that are inconsistent with the main window * Require gossip_queries in LNWallet (follow-up f83d2d9fee160e7b5475d397672559fc8f947470) - workaround lnd bug https://github.com/lightningnetwork/lnd/issues/3651 - also reduces bandwidth usage * channel backups: fix exception in raised after channel is force closed * add paste button to qt payto_e. fixes #6878 * qt: follow-up passing-around-config * dns hacks: use a default timeout of 30 sec for dns requests * Move the part of process_gossip that requires access to channel_db into in LNGossip. * wallet: fix bump_fee and dscancel for "not all inputs ismine" case * qt: move window.get{Open,Save}FileName to util * qt: rm some usages of get_parent_main_window * lnworker: follow-up 89a14996ced2463379e3d7b252b48a852762cdc9 * kivy: show exception raised by lnworker.pay. fixes #6495 * add method get_node_alias to lnworker * Correct errors in command 'serialize(deserialize(pbst))' ------------------------------------------------------------------- Sat Dec 19 11:59:24 UTC 2020 - marec@detebe.org - Update to version 4.0.9: * prepare release 4.0.9 * wallet: (fix) bump_fee sometimes created invalid tx that spent orig out * travis: disable macOS build * channels_list: display node_id if node_alias is not available * convert_version_24: loop over list instead of dict items (see #6863 and #6349) * fix #6859: height is must be passed to OnchainInvoice constructor * lnchannel: reflect frozen amounts and disconnected channels ------------------------------------------------------------------- Thu Dec 17 18:55:40 UTC 2020 - marec@detebe.org - Update to version 4.0.8: * prepare release 4.0.8 * wallet_db: impl convert_version_33: put 'height' field into invoices * swaps: fix normal amount formulas * swaps: limit forward amount to receivable amount on lightning * swaps: disable button if no channel present * qt swap dialog: attempt at clearer logic (at the cost of more lines) * kivy: move "lightning" (gossip) btn inside "channels" dialog * kivy: allow address reuse in imported wallets. (fix #6852) * wallet: use height to determine request status (similar to outgoing invoices) * synchronizer: request missing txs for addresses in random order * network: increase MOST_RELAXED default timeout to 10 minutes * kivy: initialize app.android_backups from config, and show error message if save_backup raises an exception * lnworker: remove channel if it was not saved successfully after creation * network: when switching servers, don't wait for old interface to close * build: don't allow setuptools to sneakily install build-time deps * Save height in invoices, use it to determine invoice status (fixes #6609) * tweak electrum-env script * transaction: put full derivation paths into PSBT by default * keystore: ignore fingerprint for pubkeys in psbt, try to match all keys * cleanup, remove if statement (follow-up 13b05f64e6a89b90b80a470538798c116f968170) * mnemonic: tighten seed_type check for old "2fa" type seeds * test_wallet_vertical: add test case for pre-2.7 "2fa" seed * kivy: fix some resource path issues * kivy: dismiss wizard dialog before calling go_back * trustedcoin: fix two-step wallet creation (offline->online) * appimage build: build most of our python dependencies from source * rerun freeze_packages * also support uppercase bip21 URIs ------------------------------------------------------------------- Wed Dec 09 17:14:04 UTC 2020 - marec@detebe.org - Update to version 4.0.7: * appimage: update package in dockerfile * update locale * update locale * prepare 4.0.7 * qt StatusBarButton: use custom theme for macOS if using default theme * qt StatusBarButton: use QToolButton instead of QPushButton * kivy: add on_dismiss method to crash reporter dialog * kivy: handle lightning invoices on wallets that do not have lightning. fix #6371 * keystore: handle unusual derivation paths in PSBT * dnspython: fix deprecation warnings when using dnspython 2.0 * qt swap dialog: fix enabling OK button * kivy: ensure WizardDialog.on_release is not executed more than once (see #6822) * gitignore: add some more build artifacts * update block header checkpoints * rerun freeze_packages * dependencies: rm python-ecdsa * dependencies: support and require dnspython 2.0, rm monkey patches * Qt: keep pending_invoice logic in main_window (follow-up 56579c2, fixes #5829) * cli/rpc: fix 'sweep' command * network: set _loop_thread again as it helps debugging * kivy: remove redundant declaration * plugins: remove 'on_new_window' hook * mnemonic.make_seed: de-duplicate num_bits default magic number * kivy: (fix) clicking "max" to send would raise for empty wallet * kivy: fix open channel with "max" amt * kivy: wizard does not need Factory * Added new brazillian exchange to exchange rates plugin: Walltime. * Use os._exit() for FORKed child browser opener process. Fixes #6404. * follow-up c66c54a (simplification) * revert a9fc440, use Clock.schedule_interval to set address. Fixes #6810 and #6817 * kivy: dismiss invoice_dialog before delete (fix #6816) * kivy: do not save invoice until payment is confirmed by user. add confirmation screen for lightning payments. * kivy screens: initialize is_max (fix #6813) * Qt: do not save pending invoice before the user has confirmed payment * kivy: disable send amount button if lightning invoice has an amount, and fix #6526 * fix #4503: in kivy, catch NotEnoughFunds raised on open channel. * fix #4561 ------------------------------------------------------------------- Sat Dec 05 11:08:14 UTC 2020 - marec@detebe.org - Update to version 4.0.6: * prepare release 4.0.6 * follow-up 427779350f92c4fd19d731474db3ec0db1d848c1 * remove unused declaration * kivy wizard: if wallet creation is aborted, show message in the wizard and stop the GUI. (see #6796) * kivy: split on_wizard_complete in two methods * swaps: fix infinite recursion for max button * kivy: save password after wallet creation * kivy wizard: do call run() when password dialog is dismissed, it modifies the stack. (see #6582) * kivy: do not use an event to call on_wizard_complete, initialize self.app in constructor * rm dead code: first branch of the if never evaluated because WalletDB is called with manual_upgrades=False * kivy: remove dead code (installwizard waiting_dialog) * add debug option to avoid retyping the seed in kivy * kivy: storage is already decrypted in on_open_wallet * kivy: remove unused keyboard binding * kivy: cleanup unused code * fix #6351: set screen attribute right after screen is loaded * Trustedcoin: call wizard.terminate with aborted set to True in various failure conditions (see #4496) * Qt installwizard: raise UserCancelled if user clicks cancel (the wizard was hanging instead of terminating) * fix 'max' button in Kivy (fix #6169) * lnrater: fix KeyError for unknown node * fix #6757: truncate invoice description to 639 bytes * kivy: do not display internal id of onchain invoice, show address instead * Setconfig: set rpc_user rpc_password in daemon (fix #6762). Do not disable auth if password is an empty string. * qt main_window: (trivial) fix error-handling for open_channel * lnworker: better indentation (refactoring only) * wallet: fix dscancel for "not all inputs ismine" case * Move get_channel_info and get_channel_policy code, so that routing hints can be created without access to a ChannelDB instance. * qt send tab: (regression) fix handling multiline fmt for single line * lnrouter: nicer repr for PathEdge and RouteEdge * lnaddr: fix decoding of min_final_cltv_expiry * Fix get_running_loop (python<3.7) (#6765) * Fix daemon being treated as a function (#6771) * bitbox02: more robust account keypath * add mempool.emzy.de * qt send tab: "max" btn should not raise NotEnoughFunds due to fees * mac build: call `git describe` after `git submodule update` * convert Qt flags to int (fix Qt DeprecationWarning) * Update contact_list.py * fix typo * Rename maybe_init_lightning(). Call load_data() from there * exchange_rate: log full traceback in case of unexpected exception * qt history list: fix #6746 ------------------------------------------------------------------- Thu Nov 19 18:50:55 UTC 2020 - marec@detebe.org - Update to version 4.0.5: * android build: bump targetSdkVersion to 29 (follow-up) * update locale submodule * prepare release 4.0.5 * qt receive tab: rename "create onchain" btn to "New Address" * ledger: suppress traceback during device enumeration for locked device * ledger: fix enumerating ledger devices with new bitcoin app (1.5.1) * Qt lightning invoice dialog: make payment_hash copiable * coldcard: avoid creating keystore with testnet/mainnet mixed up * qt swap dialog: fix disabling "OK" btn if NotEnoughFunds * android build: bump targetSdkVersion to 29 * lnrater: follow-up * logging: make sure file logging uses utf8 encoding * daemon: fix local RPC server error messages to conform to jsonrpc spec * qt console: fix usage in --offline mode * build: partially revert 3cd52e2d7b576792c56666d480f6047243713060 * mac build: use a virtualenv instead of global python packages * rerun freeze_packages * contrib/freeze_packages.sh: trivial clean-up * mac build: bundle old PyQt5 so that .app runs on macOS 11 "Big Sur" * requirements: rename some files * qt "open channel" dialog: detect invalid remote node id sooner * invoices: rename "Pending" to "Unpaid" * fix python 3.6 compat * util.randrange: use stdlib 'secrets' module instead of 'python-ecdsa' * qt: move local node id to info menu * guis: reintroduce suggest button * lnrater: module for node rating * follow-up prev * plugins/labels: better error message when using imported wallets * wizard, multisig: on bip39/hw ks, only ask for script type for 1st ks * wizard: on adding bip39/hw ks, don't offer path scanning for multisig * config: fix get_fee_text for static fees * interface: validate protocol-version negotiation on client-side too * qt user interface: send tab: change "Pay" button text to "Pay..." * config: distinguish knowing mempool is empty vs not having mempool_fees * synchronizer: fix request_missing_txs(..allow_server_not_finding_tx=True) * interface: validate field order in "mempool.get_fee_histogram" response * qt history tab: fix shortcut in HistoryModel.refresh() * qt send tab: show friendlier error on mistyped bitcoin address * ledger: fix compat with hw.1 - signing flow deadlocked * Transaction.get_preimage_script: support custom legacy-p2sh inputs * transaction: change Transaction.is_segwit_input(txin) to txin.is_segwit() * bitcoin: implement construct_script and use it * bitcoin: move construct_witness from transaction.py to bitcoin.py * fix #6676 and remove dead code * Remove phishing server (#6660) * lnchan.receive_revocation: tolerate not having htlc fail reason * follow-up: fix qt lightning dialog if gossip is not started * start lngossip if instantiated; this saves a boolean * wallet.py: always instantiate lnbackups * qt: reflect running gossip in lightning icon * kivy: display warning when first channel is opened * qt: display warning when first channel is opened * kivy: remove enable/disable button * qt: remove enable/disable button * cli: remove enable/disable lightning * qt: show channels tab by default if ln wallet * qt: remove node suggestion * gossip: start gossiping when channel is open * network: load gossip db early * lightning: enable by default but without gossip * submarine swap: add comment to explain witness script asymmetry * submarine_swaps: describe event-flow for both swap direction in docstr * contrib: add instructions re cross-compiling libsecp to Linux x86 * kivy: fix app not even starting * wallet.get_history: take locks. * wallet: simplify get_history * wallet: simplify get_wallet_delta * wallet_db: WalletDB.get_txo_addr now returns dict instead of list * wallet: rm wallet.txin_value * wallet: use get_txin_value in get_wallet_delta * qt tx dialog: always show input amounts if we know them * lnworker: add request_remote_force_close which can be used without state * lnworker: make sure to save new channel before we broadcast * network: tighten checks of server responses for type/sanity * kivy: use our logger, not kivy's; and log more exceptions. * Use default sys.ps1 and ps2 as console prompts (#6651) * fix main script hanging (not exiting after exception) in some cases ------------------------------------------------------------------- Fri Oct 16 09:44:44 UTC 2020 - marec@detebe.org - Update to version 4.0.4: * config: make sure fee_per_kb() returns Optional[int] * (trivial) kivy: rename title of DSCancelDialog * prepare release 4.0.4 * frozen deps: don't use colorama 0.4.4 * crypto: check version of pycryptodomex/cryptography at runtime * update locale submodule * rerun freeze_packages * (fix) allow opening LN wallet with --offline * plugins/bitbox02: add support for signing a message * plugins/bitbox02: add support for p2wsh-p2sh multisig * contrib/requirements/requirements-hw.txt: bump bitbox02 dep to 5.0.0 * update release notes * wallet: don't try to get_input_tx from network when offline * network dialog: include protocol in server address field (#6624) * qt console: fix copying text using Ctrl+C * qt coins tab: label(utxo) to consider both label(txid) and label(addr) * wallet: make labels private, and access to need lock * android build: update list of apt deps for buildozer (#6645) * kivy: allow setting password for watch-only wallets * Handle KeyboardInterrupt in Python Console (#6643) * windows build: for the "setup" exe, put another "-debug" exe inside (#6603) * kivy: implement dscancel * wallet: implement cancelling tx by double-spending to self ("dscancel") * wallet: cpfp to send to a change address instead of receive address * wallet: fix clear_history * wallet: (fix) bump_fee and cpfp now returns tx with all wallet-info * Remove rogue phishing server enode.duckdns.org * simplify prev * storage: try to handle user deleting/renaming wallet file while running * SqlDB: fix thread-safety issues re asyncio.Future * qt TorDetector: close socket * ledger: workaround to avoid on-device warning for unusual der path * tx: add deserialize to locktime/version properties (#6633) * cli: allow specifying --wallet at any arg position, as before * commands: use channeldb.to_dict for dumpgraph * channeldb: implement dictionary conversion * Save indented lines in console history * follow-up prev * network: make MAX_INCOMING_MSG_SIZE configurable from config * util: move json_normalize to util * lnworker: minor improvements to 'lightning_listen' handling * lnworker: (fix) a listening node would busy-loop if remote DC-ed early * daemon/rpc: include "jsonrpc" key in rpc responses * (trivial) follow-up 7b91da9966fcef4b2c9b743e38178cd2fd8c20ca * build: update some packages in dockerfiles * transaction: fix regression: witness_utxo was not included in QR code * transaction: impl tx.to_qr_data(): move logic from GUI to tx class * Qt tx dialog: handle "empty" locktime field * LNWatcher: implement diagnostic_name; for nicer log lines * Pass wallet to invoice_status/request_status (#6595) * Keep console input when switching server (#6607) * windows build: some refactor to make building 64 bit binaries easier * appimage: update openssl & libudev-dev (#6599) * Qt history/address tab: defer refreshing while editing (e.g. label) * (trivial) config.get_netaddress: use NetAddress.from_string * Fix multiline script error (#6581) * lnpeer: forbid creating Peer with ourselves (self-connect) * LN cooperative close: avoid address-reuse (#6590) * win binary: build zbar ourselves (#6593) * lnpeer: handle cooperative close edge-case * invoices: always validate that LNInvoice.invoice can be decoded * fix arg order in sign_version * sign_packages: upgrade python ------------------------------------------------------------------- Mon Sep 14 17:39:46 UTC 2020 - marec@detebe.org - Update to version 4.0.3: * prepare release 4.0.3 * update locale submodule * storage: fix update-password edge-case * keystore: improve check_password. * keystore: add comment about find_my_pubkey_in_txinout quirk (re PSBT) * gui: update stdio and text after db and storage separation (#6567) * hardware devices: run all device communication on dedicated thread (#6561) * binaries: pip install build requirements first * rerun freeze_packages * windows binaries: update pyinstaller to 4.0 * binaries: bump python version (3.7.7->3.7.9) * dependencies: rm pyaes from requirements * binaries: bundle 'cryptography' instead of 'pycryptodomex' in binaries * hardware: update device conn. status faster (through GUI indicator) * Qt QR code: when saving QR code as image file, don't include stretch * lnhtlc: fix prev: too much copy-paste * lnhtlc: add all_htlcs_ever, get_htlc_by_id, was_htlc_failed and use them * lnhtlc: add lock to make methods thread-safe * json_db: exempt keystore from StoredDict conversion * tests: add tests for #6066 and #6401. latter is failing atm. * reverse swap: check that received amount is higher than dust threshold * Fix handling of constructs in console * Added for_broadcast argument to payto/paytomany (#6532) * add missing `wallet.save_db()` after adding or rm'ing payment requests (#6435) * scripts: add script to showcase bruteforcing wallet file password * DeviceMgr.scan_devices: do all scanning on hidapi thread * wallet set_tx_label_based_on_invoices: don't overwrite custom label * wallet.get_relevant_invoice_keys_for_tx: take lock in callee not caller * qt history: fixes for tx context-menu "View invoice" if more than one * sdist: bundle make_libsecp256k1.sh in tar.gz * trezor: cache whether TrezorBridge is available to speedup scan_devices * qt wallet>info: use QStackedWidget, one stack item for each keystore * qt wallet>info: show derivation path prefix for keystore * Qt Receive tab: hide "receive_tabs" widget when empty * util.NetworkRetryManager: fix potential overflow * fix display of Zpub in Kivy during multisig wallet creation (see #6456) * transaction: simply PartialTransaction constructor * commands: fix signtransaction cmd * Qt: add Key_Enter wherever Key_Return is used * blockchain.py: maybe fix rare deadlock * sql: test read-write permissions for given path and raise early * windows dns hack: fix #6473 * trezor: use `init_device` instead of `ping` to check connection (fixes #6457) (#6471) * scripts: update quick_start.py to work with 4.0.x internals * wallet: get_full_history should populate acq_price/cap_gains if enabled * bip39 scan: follow-up prev * Automated BIP39 Recovery, squashed * Change sourceforge URL * fix the coldcard multi-sig show address issue * Remove unused methods from Console * Remove empty startup message from console * Remove welcome_message from console.py * transaction: allow PSBT input to have both UTXO and WITNESS_UTXO * Brazilian Bitcoin index source included. * removed scam exchange * fix biscoint ticker path * more price sources * Remove __main__ from console.py * kivy: fix fx history rates defaults. * wallet.set_up_to_date: (trivial) reduce log spam * kivy: fix fiat balance str if there are channels * Size the wizard instantly, do not wait. * bitbox02: add fingerprint to label * bitbox02: implement label() * bitbox02: drop unused `wizard` argument * bitbox02: implement get_soft_device_id so multisig runs more smoothly * Remove servers which are offline * Keep current input when clearing Python console * Clean console.py * appimage build: pin glibc version in docker image, for reproducibility ------------------------------------------------------------------- Thu Jul 09 13:08:00 UTC 2020 - marec@detebe.org - Update to version 4.0.2: * prepare release 4.0.2 * android: handle on-chain/lightning URI on app open * update locale submodule * qt wizard: fix scanning qr code when restoring from xpub * wallet: handle exception when deleting last addr from imported wallet * qt lightning dialog: fix min size * qt history list: only offer "View Invoice" if still have invoice * invoices: rm old corrupted non-bip70 invoices * qt channels tab: implement filtering items * fix wording * exclude qdarkstyle for android build * gui swap: fix swap wording * Update util.py * qt receive tab: fix creating new payreq with all used imported wallet ------------------------------------------------------------------- Sat Jul 04 14:56:13 UTC 2020 - marec@detebe.org - Update to version 4.0.1: * release 4.0.1: prepare release notes, bump version number * android: fix back button not working (main surface loses focus) * interface: check server response for some methods * qt PreviewTxDialog: change feerounding_icon to be a QToolButton * qt PreviewTxDialog: if not enough funds due to fee, fallback to zero fee * qt PreviewTxDialog: check for "not enough funds" also when shortcutting * frozen deps: update bitbox02 and ledger libs * ledger: speed-up sign_transaction * ledger: bump min btchip-python version * dnssec: fix compat with dnspython 1.16 * fix channel backups with old "cryptography" module * plugins/bitbox02: fix compatibility with bitbox02-4.0.0 * fix raise UserCacnelled calls (#6304) * android build: update p4a, buildozer, base ubuntu * Qt: override 'persist_daemon' option if users exits from menu * improve help text regarding watchtower * cosigner pool: use single thread to send messages * cosigner pool: user certifi instead of system ssl cert store * follow-up prev * commands: allow setting custom 'nsequence' in 'serialize' cmd * qt dark theme: on mac, AmountEdit units were using dark text on dark bg * qt dark style: bandaid for dropdown item heights * Remove warning on Segwit inputs and newer Bitcoin application, use generic signing for P2SH inputs * synchronizer: enforce that unconfirmed txs must have fee information * WalletDB: raise different exc if cannot parse given file * invoices: make sure that OnchainInvoice .exp and .time are not None * qt balance str: replace unicode char for LN symbol * forward swaps: save the onchain amount we actually paid * bump version number for next beta * OnchainInvoice: make get_amount_sat return 0 instead of None. fixes #6203 * swaps: fix group_label * fix #6275 * wallet.clear_requests. fixes #6279 * swaps: check_invoice_amount (fixes #6217) * kivy: fix #6280 (share btn in qr_dialog) * kivy: fix #6262 * qt sweep: raise more specific exception so that trace is not logged * mac/qt: fix some refresh bugs in swap_dialog and new_channel_dialog * qt new_channel_dialog: trivial fix in on_clear() * kivy: use on_release instead of on_press in buttons * frozen deps: update coldcard lib * history: allow changing default label of swaps * Add mempool.space option for mainnet block explorer (#6261) * lnworker.add_peer: fix #6274 * fix amount_sat in kivy invoice/request dialogs. (follow-up d5f368c584afb1368f6904517db1ba59ac48989c) * handle_error_code_from_failed_htlc: omg brainfart :( * binaries: use sha256 instead of sha1 for Windows native signing scheme * travis: build binaries if there is a tag (or is master) * release notes: minor nit * remote watchtower: enforce that SSL is used, on the client-side * update release notes * requirements: specify min 'attrs' version * update RELEASE-NOTES for 4.0.0b0 * update locale submodule * update submodule * mac build: add camera permission to entitlements.plist * mac build: try to improve .app startup time on MacOS 10.15 * osx.spec: trivial formatting * update submodule commit * lnworker._check_invoice: add sanity check * lnpeer: only process INIT if we are a backup. fixes #6241 * swaps dialog: handle make_unsigned_tx exceptions. fixes #6246 * wallet.export_{request,invoice}: replace 'amount' field with sat/msat * LN invoices: support msat precision * minor: use wallet.has_lightning() * swaps: update server URL * Group swap transactions in Qt history (fixes #6237) - use tree structure of QTreeView - grouped items have a 'group_id' field - rename 'Normal' swap as 'Forward' * handle_error_code_from_failed_htlc: fix logic bug * lnutil.PaymentAttemptLog: fix error formatting * util: small clean-up for format_satoshis * Update network_dialog.py * Fix Readme to be consistent with commit 485422b072ab6d39ea80efbef8c0f3b6b93838af * network: smarter switch_unwanted_fork_interface * submarine_swaps: minor clean-up (preimage/locktime) * wallet: simplify get_payment_status * network: clarify local_height/server_height * lnworker: rm dead code * qt channel details: maybe fix #5728 * contrib: disable building secp256k1 exhaustive tests * contrib: disable building secp256k1 benchmarks * contrib: secp256k1 no longer has a --disable-jni option * servers: minor refresh to default lists * update block header checkpoints * kivy: improve channels list * fix display of short_channel_id for channel backups * channel open: allow REMOTE to set htlc_minimum_msat to 0 * fix #6243 * lnchannel: explain why if REMOTE f-closes we remain OPEN until mined * swaps: add testnet url * trigger_force_close: set my_current_per_commitment_point to a valid point * swaps: create invoice without saving the request * fix channel backups for "not initiator" channels * channel backups: try fixing force-close-trigger * qt: easier import/export of channel backups * (trivial) qt: disable 'swap' button if lightning disabled * follow-up prev * filter callbacks to wallet: channel, payment_succeeded, payment_failed * android: enable full logging if DEBUG build * submarine_swaps: increase min locktime delta for reverse swap to 60 * qt swap_dialog: "max" now takes into account the server-provided value * submarine swaps: fee_invoice is now a hold invoice * qt swap_dialog: implement "max" button for reverse swap * qt swap_dialog: "max" button now respects max htlc value * qt main_window: fix threading for run_coroutine_from_thread * qt swap_dialog: clean-up imports * submarine_swaps: replace asserts with Exceptions * submarine_swaps: small clean-up * submarine_swaps: wallet.get_unused_address -> get_receiving_address * channel backup versions: trivial clean-up * channel backups: add MAC * channel backups: add another version number, for the backup itself * add encryption version to channel backups * submarine swaps: disable merging of transaction in history * add Max button to swap dialog, fix fee slider behaviour when max is selected * swaps: mapping of prepay_hash to payment_hash * swaps: store fee_preimage * Submarine swaps: - improve gui - allow coin selection - allow spending 'max' * support new protocol (minerFeeInvoice) * minor fix * swaps: add safeguards to gui * swaps: move fee logic to swap_manager, fix command line * swaps: use StoredObject to store data * swaps: perform 10 payment attempts * swaps: show time left until tx can be refunded * swaps: stop watching address once utxo is spent and mined * swaps: improve history display * swaps: disable rbf * swaps: add fee_combo, hide min/max * show swaps as single line in history main_window.run_coroutine_from_thread * submarine swaps: fix expected amounts * follow-up prev commit * submarine swaps: verify amounts * swaps: handle cancellation in password dialog * submarine swaps: fix fee rounding and fee slider behavior * submarine_swaps: add fee slider, improve gui * submarine_swaps: simplification * submarine swaps: new API url * submarine_swaps: add SwapManager * sub swaps: - fix invoice expiration - use p2wsh * submarine swaps: add normal swaps to GUI, various minor fixes * submarine swaps: fix refund tx (p2wsh-in-p2sh, locktime) * qt: separate module for swap_dialog * submarine swaps: create refund transaction * submarine swaps: add forward swaps * submarine swaps: - use lnwatcher callback - add gui button * submarine swaps, initial implementation: - server uses Boltz API (https://docs.boltz.exchange/en/latest/) - reverse swaps only - command-line only * lnsweep: claim our_ctx_to_local if we breach * network: randomise the order of address subscriptions * fix travis: regtest tests were failing with bitcoind 0.20 * crypto: chacha20-methods: make associated_data param optional * on_payment_succeeded: use notify instead of show_message * on_payment_succeeded: show description * appimage: update package in dockerfile * fix typo in prev * git sanity: enforce "git checkout commithash" actually pulls commit * add help text to channel backup QR code * bump libsecp256k1 version * lnchannel: update_fee: improve "can afford" check * lnchannel.available_to_spend: LOCAL now respects "fee spike buffer" * lnchannel.available_to_spend: minor refactor * lnchannel.available_to_spend: consider both receiver's and sender's ctx * ChannelConfig: add some clarifications * crash reporter: propagate HTTP error as exception * invoices: fix #6233 * try fixing email plugin * invoices: minor clean-up (type hints, mark broken things) * fix tests: follow-up prev * sweeping via CLI: allow customising RBF * README: update path to android build instructions * sdist build: update message about reproducibility * travis sdist: git clone repo a second time, to properly set umask * move android stuff to contrib/android * sdist build: stop making .zip distributables as they are not deterministic * sdist build: when building docker image, no interactive prompts! * sdist build: bump base image to ubuntu 20.04 * sdist build: umask should be specified for git clone * sdist build: use modern pip * attempt at reproducible tarballs (sdist) * Fix typos * build: fix win/appimage binaries following jsonrpc dep-removal * setup.py: fix 'full' extra * appimage: update package in dockerfile * rerun freeze_packages * ChannelConfig.validate_params: fix sat/msat unit mismatch * ln: make 'to_self_delay' CSV configurable * win/mac binaries: rm jsonrpc* dependencies * myAiohttpClient: add id counter, and rename to JsonRPCClient * fix json-rpc interface (when not using CLI) * Remove dependencies: jsonrpcserver, jsonrpcclient * lnpeer: review safety check re channel open flow, and tweak params * tx dialog: show various warnings if input amounts cannot be verified (#6217) * config: allow changing "skipmerklecheck" at runtime * qt qrcode: fix DeprecationWarning (float->int conversion) * fix #6210: show_onchain/lightning_invoice dialogs * kivy on_resume: check self.has_pin_code() * (minor) fix missing parameter to PincodeDialog * do not create backups for channels that do not have static_remotekey * follow-up 88bb5309c4d74adb7ba1ac24e5bcb05ef34b2bf9 * wallet: when sweeping, do network reqs in parallel, and don't block GUI * channels_list: minor fix (lnworker might be None) * wallet fixes for lightning disabled (follow up 6058829870fde0ef17b2e08a567110ecc381ab94) * import/exports to json files: - fix #5737 - add import/export or requests * fix #6200: if we cannot parse an onion, send a failure code that has the BADONION bit * split lnpeer.fail_htlc into two methods with less parameters * requirements: bump min protobuf (follow-up prev) * regenerate paymentrequest_pb2.py with new protoc * bitbox02: get prev tx from psbt instead of wallet db * Fix issue #6201: - Pass a proper callback to WalletDialog (we used to call load_wallet_by_name recursively) - Do not cache PasswordDialog instances * HW_PluginBase: small clean-up for 'maximum_library' * fix tests: follow-up psbt changes * invoices: follow-up fixes re clean-up * psbt: always include full prev tx (#6198) * fix tests: follow-up 154b9cab50e7de41fe878359e92f44fd3b07c484 * follow-up prev * fix #6203: do not let request amount be None * coinchooser: change "enable_output_value_rounding" default to True * coinchooser: small clean-up re enable_output_value_rounding * dependencies: update max qdarkstyle * rerun freeze_packages * contrib/freeze_packages: should not use too new python interpreter * plugins/bitbox02: fix min version check * plugins/bitbox02: fix compatibility with bitbox02-3.0.0 * follow-up 6058829870fde0ef17b2e08a567110ecc381ab94 * follow-up 1c436bbc220c54aa1095ee8c078185da628b4a3a * do not display 'Expires in 100 years' for LN invoices * fix #6194 * Use attr.s classes for invoices and requests: - storage upgrade - fixes #6192 - add can_pay_invoice, can_receive_invoice to lnworker * kivy: update devs list * add confirmation dialog for lightning payments. fixes #6100 * kivy: (fix) popups had white background with recent kivy * android build: use python3.7 for now * kivy: (trivial) fix typo in error msg * trustedcoin: (trivial) add a stub method in plugin base class * Qt: do not show node_id in channels_list * trustedcoin: use psbt format on wire. rm psbt to legacy tx conversion. * Add extra state to distinguish shutdown negotiation from post- negotiation, where channel should not be reestablished. See #6182 * Qt: copy request to clipboard when it is created * kivy: remove test_seed and test_xpub. fixes #6146 and #5925 * appimage: update openssl (#6186) * fix #6176 * Qt: show fee combo next to fee slider, and remove it from settings * follow-up previous commit: cleanup imports * follow-up previous commit * move units and amount formatting to simple_config * qt plugins dialog: fix caching "settings" button * wallet: better handle used change addresses reverting to unused * wallet: fix minor locking thing in set_reserved_state_of_address * plugins: fix labels plugin FIXME re "just enabled plugin" * wallet: increase gap limit for change (6 -> 10) * follow-up prev: don't reuse funding tx change address for static_remotekey * wallet: implement reserving addresses, and use it for LN SRK to_remote * wallet: (trivial) rename check_address * wallet: (fix) get_receiving_address must always return an addr * wallet: (trivial) define import/delete_address in Abstract_Wallet * qt locktimeedit: fix max timestamp platform-dependent crash * qt first-time network setup: fix edge case * fix #6168: "'MySortModel' object has no attribute 'item'" * Move create_transaction logic from commands to wallet * lnwatcher: use generic callbacks * qt/kivy: show warning when sending tx with high fee/amount ratio * kivy: fix some bugs when paying 'max' * kivy: confirm all actions even if there is no PIN set * qt ConfirmTxDialog: (fix) allow sending tx with high feerate * qt addresses list: custom sort order for "Type" and "fiat balance" cols * qt MyTreeView: impl custom sort order framework, and use for invoices * fix mac build: follow-up aac770404f9a1f91299ca76c9865465aac05116b * qt receive tab: fix refresh bug on macOS * binaries: update base docker image for wine/appimage * mac build: pin hashes of more build dependencies * mac build: bump libusb version * binaries: bump python version (3.7.6->3.7.7) * binaries: update bundled PyQt version: 5.11.3 -> 5.14.2 * (trivial) log Qt version at startup * tests: lnpeer: make debug htlc failure hooks more uniform * (trivial) lnpeer: rm @log_exceptions from htlc_switch * mac build: conform to macOS 10.15 Gatekeeper requirements * commands: make 'wallet'-mangling in decorator less obscure, and fixes * network: validate server peers sent by main server * kivy: fix "choose from peers" in network server-select popup * coldcard: log exception traceback in create_client * show watchtower db size in GUI * appimage: update libudev-dev in Dockerfile * daemon.py: Add authentication to Watchtower. Define abstract class AuthenticatedServer * follow-up prev commit (fix regtest) * add_lightning_request command: return request object * ln invoices: more relaxed filtering of chans to include route hints for * lnworker: catch exceptions raised in decode_msg * fix #6157 * follow-up prev * follow-up previous commit * fix callback name: request_status * payserver: do not allow create_invoice by default * Simplify services (watchtower, payserver): - Do not expose services settings in GUI - Use a single netaddress configuration variable. * lnrouter: blacklist channels for a limited time (see #6124) * discard channel updates too far in the future, or too close apart (see #6124) * RPC client: exit code 1 if RPC server returned error * new command: get_ssl_domain * One can now click the back button in the show_xpub_and_add_cosigners wizard step * fix #6125: detect self-payments * travis: use other "coveralls" package * follow-up prev: trivial rename * test_lnpeer: add some multi-hop payment unit tests * lnworker._pay: allow specifying path as argument * lnrouter: add PathEdge/LNPaymentPath for (node_id, scid) * test_lnpeer: some clean-up, make it easier to add "num_node>2" tests * lnworker.pay: small clean-up * (trivial) follow-up c1b1638615c37268d2ca33c44abeec398b2d45e3 * small clean-up re "extract preimage from on-chain htlc_tx" * follow-up prev commit: fix test_lnpeer * lnpay: return payment log, increase timeout * follow-up 8ba7e6806428a90ffe01293e2b0b8bd340d07c6b * follow-up prev commit... * follow-up prev commit * follow-up prev commit * fix htlc forwarding: - persist fail_htlc error messages - do not rely on payment_hash in htlc_switch * add test with fail_malformed_htlc to forwarding regtest * add config variable to test update_fail_malformed_htlc * fix #6122: extract preimage from on-chain htlc_tx * Fix "backed" typo in crypto.py * android build: update p4a and buildozer * remove UnknownPaymentHash (exception used as value) * lnpay: save invoice * jsonrpc: pass timeout to aiohttp session * (minor) rename chan.sweep_htlc * create_sweeptxs_for_our_ctx: fix static_remotekey * qt send tab: (fix) allow user to set lower fees if "not enough funds" * qt ConfirmTxDialog: fix exc for "max" invoice when "not enough funds" * daemon: rm "daemon.wallet" reference * qt update checker: do not keep main window ref so it can gc-ed * qt exception window: turn Exception_Hook into singleton * multi-wallet: properly stop lnworker/lnwatcher * lnpeer: (trivial) log name for chan.state and chan.peer_state * network: set .oneserver in __init__ * wallet: disallow fee-bumping/coinjoining ln funding tx * lnpeer: add get_channel_by_id, for small speed-up * lnworker: fix threading issues for .channels attribute * use correct feerate when sweeping htlcs * fix #6111, and show channels tab even if lightning is disabled (follow-up 527e0b9b897e07ae671ca180ab8e5f89423b8aec) * qt main window: only show "Channels" tab if wallet has lightning * qt wallet>info: add text if lightning is not available for wallet * fix #6115: qt wallet>information was broken for imported wallets * qt network dialog: merge "Overview" and "Servers" tabs * network: handle unparseable server-str * interface: make localhost exempt from ip-range bucketing * interface: (trivial) make some methods private * config: "serverfingerprint" key requires "server" key * Add --serverfingerprint option (#6094) * commands: "notify" cmd: stop watching addr if called with empty URL * fixups for CallbackManager refactor * lnworker: blacklist channel if policy is unchanged but has a new timestamp. * channel_db: add verbose option to add_channel_update * set more restrictive file permissions for exported private keys (#6106) * build: update git in dockerfiles (#6107) * follow-up c454564ed6e094aa36be9fbe7aa9e9113a28710c * fix #6101 * fix #6103: local config contains remote reserve * refactoring: remove inspect_edge * separate method that runs Dijkstra and return distances * follow-up prev * fix #6096: bugfix for creating zero amount LN invoice * qt crash reporter: html.escape traceback to avoid formatting issues * hww: stop keystore.thread when closing wallet * hww hidapi usage: try to mitigate some thread-safety issues * hww: fix HardwareClientBase not having reference to plugin * Use non-standard localhost port for server-string fallback (#6087) * network/gui: unify host/port input fields to single server str * network.NetworkParameters: merge host+port+protocol into "server" field * network: allow mixed protocols among interfaces * Add electrum_data to .gitignore (#6092) * interface.get_certificate: use public asyncio APIs * extend 'add_peer', 'list_peers' commands to gossip * sql_db: do not require network object * lnworker: clear peer retry times if proxy settings change * lnworker.peers: follow-up b5811e8072dafda7e2e740f8e5ca604680271291 * lntransport: use network proxy if available * lnworker.peers: fix threading issues * daemon.on_stop: adapt to python 3.8 * build: update some packages in dockerfiles * fix tests: follow-up prev few commits * NetworkRetryManager: add random noise to time * util: add NetworkRetryManager, a baseclass for LNWorker and Network * lnworker: implement exponential backoff for retries * network: (trivial) rename field to indicate private * network: introduce NUM_STICKY_SERVERS * network: rm server_queue * network: implement exponential backoff for retries * network: replace "server" strings with ServerAddr objects * fix tests (follow-up prev commit) * Move callback manager out of Network class * run lnworker.main_loop directly on the event loop * Hard fail on bad server-string (#6086) * require aiohttp_socks>=0.3 * README: mention script location (for "electrum", after pip install) * macOS: duplicate Qt "Preferences" menu item * ln: check if chain tip is stale when receiving HTLC * (trivial) rename lnchannel.channel_states to ChannelState * lnchannel: make AbstractChannel inherit ABC * lnpeer: move ping_if_required away from message_loop * Do not wait wallet sync to reestablish channel (revert e32807d29d). * adapt to new aiohttp_socks: fix deprecation warnings * bitbox02: add to requirements-hw, and include in win/mac binaries * bitbox02: rm plugin.get_client method: just use default impl * bitbox02: rm BitBox02Client.label override * hww: factor out part of hid scan code to HW_PluginBase * bitcoin.py: change API of address_to_hash * rm some unused imports * bitbox02: don't run show_xpub on GUI thread * bitbox02: rm some dead code * bitbox02: fix pairing_dialog * bitbox02: add udev rules * bitbox02: adapt to updated master * BitBox02 Electrum plugin support * Rename 'On-chain' button, add tooltips (see #6053) * add list_peer command. (fix #6057) * add more logging shortcuts * translations: add note that f-strings cannot be translated * qt wizard: tweak GoBack behaviour to recalc inputs to previous dialog * rm dead code: wallet.wait_until_synchronized * fix #6056 * fix #6075 * export channel backup from kivy gui * do not use short_channel_id as state, use channel state for that. display it as soon as the funding tx is mined. * Replace wallet backup with channel backups - channels can be backed up individually - backups are added to lnwatcher - AbstractChannel ancestor class * build: add workaround for "pyinstaller with new setuptools" issue * wizard hww: use exception handling to choose hw device again * wizard: (trivial) add show_error to base class, document API * wizard.create_storage: state API and abide by it * wizard: hww creation flow: don't just swallow exception * wizard hww: scan devices fewer times and move away from GUI thread * wizard: fix crash when decrypting wallet hw device * lnworker: check chain_hash when decoding channel update. * setup.py: specify lnwire as package_data * wizard hww: move devmgr.scan_devices() away from GUI thread * hww: fix threading issue in DeviceMgr: enumerate_func needs self.lock * HardwareClientBase: provide default implementation for label * hww: show model name in device enum lists (e.g. "Trezor T") * hww: select_device: only update label/dev_id after pairing succeeds * hww: smarter auto-selection of which device to pair with * hww: distinguish devices based on "soft device id" (not just labels) * tests_lnpeer: trivial fix * crypto.pw_decode: fix one case of raising incorrect exception * crypto: trivial clean-up of pw_encode/pw_decode functions * do not print the entire payment log again, this is redundant * Use specific Exception when chain isn't synced * trezor pin dialog: only show PIN "strength" when creating/changing * qt PasswordLineEdit: try to clear password from memory * qt: introduce PasswordLineEdit(QLineEdit) * rerun freeze_packages * follow-up prev (typo) * lnpeer: do not assume our privkey is the same as lnworker's privkey. * move maybe_save_short_chan_id to lnchannel * localconfig: rename seed to channel_seed * change derivation of ln channel keys: use hardened paths * Save channel seed in localconfig * android build: use "cryptography" instead of "pycryptodomex" fork * android build: update buildozer/p4a/NDK * include lnwire csv files in binaries (follow-up #6050) * qt wizard: make "GoBack" unroll the call stack to avoid stack overflow * follow-up previous commit * LNWatcher: Distinguish between blockchain-triggered channel state transitions, and actions taken as a result. - state transitions are performed in lnchannel.update_onchain_state() - peer actions are in LNWorker.on_channel_update() * save_short_chan_id: remove unneeded ćalls to lnwatcher * pw_decode, pw_encode: separate bytes functions * follow-up prev commit * move should_channel_be_closed_due_to_expiring_htlcs into Channel class * follow-up 371f55a0f922cf57196ae3d8d7c2fabc7a9f0f08 * lnmsg: small speed-up: read first, check length after * ln feature bits: validate transitive feature deps everywhere * lnaddr: small clean-up * ln: implement option payment_secret * lnpeer: better error handling when processing onion packets * use option varonion: actually use TLV payloads, and signal support * lnaddr: add feature bit support to invoices * lnonion: implement basis of varonion support * ln feature bits: flatten namespaces, and impl feature deps and ctxs * lnmsg: add more tests (for encode_msg, decode_msg) * lnpeer: send and handle "networks" param in "init" msg * lnmsg: implement tests from BOLT-01 * lnmsg: encode/decode TLVs as part of messages * lnmsg: handle "..." as field count * lnmsg: initial TLV implementation * lnmsg.decode_msg: dict values for numbers are int, instead of BE bytes * lnmsg: rewrite LN msg encoding/decoding * hww: fix some threading issues in wizard * hww: rm some code duplication: add "scan_and_create_client_for_device" * wizard: (trivial) add some type hints * qt hww show_settings_dialog: don't scan devices in GUI thread * digitalbitbox: (trivial) user handler instead of handler.win * DeviceMgr: clean-up locks a bit * hww wizard: better handle UserFacingException in one case * hww: catch exceptions when user clicks on hww qt status bar icon * keystore: add workaround for StoredDict issue #6066 * (trivial) follow-up 570f7b7790e6716cff49ba75992728cab3375e21 * hw wallets: during wallet creation, make sure to save correct label * qt wizard decrypt wallet with hww: just pass through cancellation * hw wallets: show e.g. "An unnamed trezor" if no label in select_device * hw wallets: handle cancellation for "query_choice" in wizard * hw wallets: introduce HardwareHandlerBase * trezor: bump lib version, implement new passphrase-on-device UI * wizard: add a warning to multisig wallet creation to backup xpubs * network: update tx broadcast error msgs whitelist * commands: add new cmd "getprivatekeyforpath" to export a WIF for a path * Commands: clarify description of getservers * lnchannel: add more type hints * trivial: use "chunks()" for htlc_sigs in lnchannel * lnchannel: clean-up docstrings a bit * lnchannel: better checks for "update_add_htlc" * small clean-up re max CLTV delta for LN * UTXOList: Split stretch_column out of __init__ * make_libsecp256k1.sh: add comment how to cross-compile to Windows * Readme: Clarify dependencies of make_libsecp256k1.sh * follow-up prev: htlc direction madness * lnchannel: fix included_htlcs * do not show freeze/unfreeze channel options if channel is closed * wallet_db.clear_history: now clears prevouts_by_scripthash too * lnchannel: implement freezing channels (for receiving) * lnworker: rename can_send to num_sats_can_send * lnchannel: when adding HTLCs, run checks for both directions * storage upgrade: move "htlc_minimum_msat" to base channel config * lnchannel: test for max htlc value (needs to be below protocol maximum) * lnchannel: partly fix available_to_spend * lnchannel: implement "freezing" channels (for sending) * qt channels list: sort by short chan id by default * qt channels list: make selection more in line with other tabs * qt channels: expose long channel id (in ctx menu and details dlg) * Document how to disable proxy * follow-up prev * lnworker: fix type error re pending_payments, and impl malformed htlcs * follow-up prev: try to handle json db int key madness :/ * lnpeer: implement basic handling of "update_fail_malformed_htlc" * lnutil.UpdateAddHtlc: use attrs instead of old-style namedtuple * wallet_db: encapsulate type conversions with attr.s converter * Quantitative easing of lightning fees * fix #6037 * lnonion: use random starting bytes in Sphinx packet as in updated BOLT4 * wallet: dust limit calculation should round up (not down) * wallet: put hard limit on minimum of relayfee: 1 sat/byte * lnwatcher: unwatch deeply mined channels * travis: change ppa for bitcoind * follow-up prev: network.interface might be None * fee estimates: use median if auto-connect * Qt: improve channel details window * follow-up prev: rm decorator, preprocess channel_id for all messages * lnpeer: channel_update decorator * Fix #6021: Do not transition channel state to CLOSED if tx is unconfirmed. * follow-up 46d8080c76e79670e8abaaaa0eb2d4d4a74544c1: own channels are no longer in channel_db * kivy: switch position/size of camera and clear buttons * appimage: update package in dockerfile * lnworker.pay: run path finding in sep. thread (don't block evt loop) * kivy: add delete button for invoices/requests * kivy: show payment log details * kivy: requests/invoices dialogs improvements * channel_db: raise specific exception if database is not loaded when we try to find a route * (minor) fix typo * follow-up prev commit * improve payment status callbacks: - add 'computing route' status for lightning payments - use separate callbacks for invoice status and payment popups - show payment error and payment logs in kivy * qt update checker: subclass QDialog instead of QWidget * lnrouter: add comments about path-finding blocking the asyncio loop * (minor) simplification * kivy: update screen in on_activate, remove dead code * kivy: align icons in password_dialog, use IconButton * improve kivy password dialog: - separate classes for pin code and password - add file selector to initial screen * follow-up previous commit * follow-up previous commit * kivy: remove dynamic screen loading. * kivy receive screen: - change behavior of delete button - screen must call parent's methods * invoices list: show 'batch pay' option only if all selected invoices can be paid * kivy: fix display of request messages * Add short channel id to tx labels * Qt history: Do not use monospace font for description column * Fix bug with save_funding_height, save_closing_height (it would enter a state where only closing_height was saved) * lnchannel/lnhtlc: speed up balance calculation for recent ctns * lnhtlc: speed-up methods for recent ctns * move feerate warning to lnpeer * update force-close warning message * lnworker.reestablish_peer_for_given_channel: give each addr a chance * Qt: add info about force closing * fix test_lnpeer * follow-up previous commit: fix test_lnpeer * follow-up previous commit: broadcast_transaction does not return txid * Propagate exceptions raise by force_close to the GUI. Define 'try_force_closing' for cases where we do not want exceptions to be raised. * allow transition from FORCE_CLOSING to REDEEMED. define REDEEM_AFTER_DOUBLE_SPENT_DELAY * do not try to reestablish channel if state is FORCE_CLOSING * Qt: test if lightinng is running * follow-up 17a893441a88eb1b3bc89fd960edfc28140e266f: fix regtest * follow-up 17a893441a88eb1b3bc89fd960edfc28140e266f: satoshis * (minor) fix typo * CLI: show channel reserves and unsettled balances. fixes #5817 * qt: add extra fields to copy submenus * Qt: add 'View channel' to history menu, 'View funding transaction' to channel menu * kivy: show closing transaction in channel dialog * kivy: improve channel detaild dialog * fix #6017 * ln: store network addresses for channel counterparties in channels * kivy README: add instructions re accessing internal storage * kivy pw dialog: don't enforce min length for existing generic password * commands: gate get_channel_ctx behind --iknowwhatimdoing * update block header checkpoints * wallet_db: fix _convert_version_25 (bip70 expiration) * fix for old channels * (minor) typo * kivy: show warning if request/invoice exceeds channel capacity * kivy invoices and requests: show most recent items first * kivy: Show lightning balance. Remove 'unmatured', 'unconfirmed' from info dialog, as this is visible in history. * kivy: fix layout of addresses dialog * kivy: improve open_channel dialog * fix test_lnpeer * lnworker: set invoice status if htlcs are received from previous session * (minor) ButtonsWidget: add 10px offset because of scrollbar * Fix detection of payments. * replace await_local/remote * try to clean-up README * clear up requirements re pycryptodomex * crypto: add 'cryptography' as alt dependency for 'pycryptodomex' * crypto: move LN-related chacha20/poly1305 code into crypto.py * tests: made TestLNTransport.test_loop more robust * invoices: deal with expiration of "0" mess * less verbose update_fee log * lnworker.add_peer: don't block event loop with DNS * lnworker: peer-bootstrapping: add IPv6 fallback nodes * lnworker: re-enable dns seeds for peer-finding bootstrap * backup help text * open channel dialog improvements * Qt: do not filter out paid invoices/requests. let user delete multiple items * (minor) text change: 'Expires after' * Qt: list requests and invoices in descending order * Simplify receive tab: - display receiving address in receiving tabs - display lightning invoice as 'address' - save last active tab in preferences * ChannelDB.load_data: add comment re bad performance, and some speed-up * ChannelDB: fix typo in sql query - seems harmless though? * ChannelDB: (trivial) add prefix to names of db methods * ChannelDB: rm NodeAddress class, just use LNPeerAddr * lnrouter: change edge cost estimate (distance metric) * (minor) rm unneeded decorator * maybe_forward_htlc: catch exceptions raised by nexp_peer. return only error * lnrouter: simplify max fee sanity checks * bolt11 invoice: strip (and so accept with) leading/trailing whitespaces * commands: add changegaplimit and getminacceptablegap cmds * wallet: min_acceptable_gap should mimic wallet.synchronize * Qt LN gossip sync indicator: hide if 100%; rescale 95%->100%; tooltip * ChannelDB: make gossip sync progress updates cheaper * move htlc_switch task to lnpeer * htlc_switch: decouple maybe_send_commitment from htlc processing * lnworker: dissociate htlc forwarding and fulfillment * make maybe_fulfill_htlc, maybe_forward_htlc synchronous. move async operations to lnworker.htlc_switch * lnpeer: do not drop channel updates if cannot send * HTLC switch: - fulfills/fails/forwards HTLCs - onion_packets are saved when update_add_htlc is received * kivy wallet info screen: handle "show seed" for watch-only/no-seed case * kivy tx dialog: don't show "remove tx" option so eagerly * wallet/GUI: don't allow "removing" a LN force-close-tx from history * qt channels list: show node aliases in new column * ChannelDB: trivial fixes re node alias * lnworker: allow changing labels of chan-open/chan-close txns * ChannelDB: fix get_recent_peers * transaction: follow-up prev * transaction: (fix) invalidate ser cache when changing locktime/version * Qt tx dialog: show txid as "unknown" while not finalized * Qt tx dialog: allow setting custom locktime * Qt addresses list: show derivation path in tooltip (also addr dialog) * Qt main_window: handle event 'ln_gossip_sync_progress' if LN disabled * Qt history list: add tooltip for "local" transactions * Qt ln tx dialog: small fixes * lnpeer: Peer.is_initialized() should not raise * add LN gossip sync progress estimate indicator to Qt GUI * ChannelDB: add self.lock and make it thread-safe * Qt address list speedup: wallet.is_beyond_limit was slow * mnemonic: implement Wordlist class * Qt tx dialog: fix file extension when exporting (on MacOS...) * trivial clean-up (typing/imports) * wallet_db.get_transaction: tolerate if tx_hash is None * clean-up hw-wallet "get_password_for_storage_encryption"-related code * network UntrustedServerReturnedError: add "DO NOT TRUST..." tag * follow-up previous commit (fix tests) * store raw messages in gossip_db. Fixes #5960 * Replace lightning_settle_delay with enable_htlc_settle (asyncio.Event) * blockchain: move init_headers_file from network.py to blockchain.py * taskgroups: don't log CancelledError * lnpeer: fix json serialization of funding_inputs * make sure we can send shutdown * rename all TaskGroup() fields to "taskgroup" * lnworker: add own taskgroup (run in daemon.taskgroup) * fix regression in shutdown (from 1c5dc7929838fbb7307faeac6506c95821002049) * Set channel state to OPENING as soon as we receive 'funding_signed', instead of when the funding transaction has been broadcast, because we have no reliable way to know when it will be broadcast. * (minor) fix typo in comment * follow-up e54c69b861c2990adf9cf618b68c6f1c7dd3ebea: we must settle HTCLs after during shutdown * test_close: add unsettled htlc (fails with the current code) * follow-up prev: do all checks, and add tests * keystore: make add_key_origin "API-user-friendly" * Qt tx dialog: warn if user asked for full bip32 paths but info missing * Qt tx dialog: make "export with xpubs" option always available * rm more cruft from test_lnchannel * lnpeer: reduce log spam due to incompatible feature bits * add lnchannel.can_send_ctx_updates. just drop illegal updates for now * (trivial) lnworker: move LNGossip.peer_closed to parent class * restore log lines for send_commitment, on_commitment_signed * define channel.has_pending_changes method * shutdown: - resend shutdown on reestablish - wait until no more pending updates before sending shutdown * (minor) follow-up previous commit * simplify previous commit (revert changes on transaction.py) * lnpeer: verify signature in closing_signed * (minor) simplification * the funder sends the first 'closing_signed' message * transaction.deserialize: more sanity checks * follow-up prev * lnpeer: add "DO NOT TRUST..." remark to errors sent by remote * transaction.BCDataStream: minor fixes * fix BCDataStream.read_bytes (#5991) * fix SPV.hash_merkle_root, add tests/test_verifier.py * lnpeer: cooperative close: verify scriptpubkey matches templates * Added ELECTRUMDIR env variable (#5543) * lnpeer: closing fee negociation: - use fee_rate from config - set upper bound on fee - add test_close to test_lnpeer * lnpeer: await_remote/await_local now more restrictive, and docstring * fix test: test_reestablish_with_old_state * follow-up prev * WalletDB: add type hints, and also corresponding asserts for sanity * lnpeer/lnwatcher: include channel id in log lines * fix undefined name 'CHANNEL_INIT_TIMEOUT' * travis: fix regtest * (minor) fix log * follow-up previous commit * Fix #5975: Forget or redeem channels that are never funded. - initiator: wait until double spent - non-initiator: wait until timeout * Qt: disable preview button in open_channel * db upgrade: store channel tx height and timestamps in 'channels' * Do not save new channels before they are added to lnworker * travis: use more recent Ubuntu, get libsecp from Ubuntu apt (rm ppa) * qt request_list: clear receive addr/req when hiding list * qt receive tab: better "Clear" behaviour * follow-up 54ef6db762b5ea120a59af0a2470eac999c55d93: set channel state to OPENING if funding tx was broadcast later (e.g. cold storage) * cosigner_pool plugin: don't show button in tx dialog before finalizing * qt channels_list: early exit if lightning is disabled * qt coin control status bar: don't defer 'Coins' tab updates * don't raise BaseException * qt open channel: early return if fields are left empty * lnpeer: Use a single queue per channel for messages that are ordered. Forward error messages with 'temporary_channel_id' to the correct channel_id * follow-up previous commit * do not try to reestablish channels in PREOPENING state (per BOLT2). * return preimage in lnpay. fixes #5794 * remove double definition of lightning_history. fixes #5984 * add_future_tx should return success * Qt: show amounts sent to channels in show_transaction * lnpeer: do not dump exceptions raised in initialize * (minor) trigger 'wallet_updated' callback when adding future tx * qt: add menu item to view closing transaction of channel * do not show channel balances if channel is closed * Qt: ask confirmation before closing channel. * sweep_ctx: do not log if channel was not force closed * Qt open channel dialog: suggest and clear buttons * require option static_remotekey in lnwallet * Use a Future for lnpeer.initialized, so that exceptions are passed to the GUI * android build: fix accepting licenses * win binaries: bump python version (3.6.8->3.7.6) * README: rm "Compile the protobuf description file" section * Revert "qt/hww: temporarily bundle our own version of safetlib.qt.pinmatrix" * add comment about minor issue with closing_signed * requirements: bump min archos safet version * disable peer filtering in lnworker * lnwatcher: fix keep_watching if the wallet was not force-closed * libsecp: log exception if failed to load * follow-up previous commit (backward compatibility) * Generate channel keys from random seed * kivy: set pin_code timeout to 5 minutes * select peers with desired features before connecting * lnpeer: - print parent classname in diagnostic name, - fix error message when requested feature is not supported * restrict lightning to p2wpkh wallets * support option_static_remotekey * minor fix: can_send, can_receive * trustedcoin: fix wallet constructor * do not allow channel creation from backup file * revert prrevious commit (used in tests) * remove ChannelDB.add_channel_update (no longer needed after 46d8080c76e79670e8abaaaa0eb2d4d4a74544c1) * move list_channels to commands.py * Lightning: Show sending and receiving capacity. Fixes #5967 * daemon.run_gui: make sure to exit process on exception * fix path for payserver static files * follow-up previous commit * storage upgrade for invoices and requests. fixes #5959 * do not store 'outputs' field in requests (it is unused) * ecc.ECPubkey: also accept bytearray in __init__ * qt InstallWizard: turn some instance variables to locals * follow-up previous commit * remove channel from channel_timestamps if funding_tx has been dropped from mempool * fix get_payments * lnwatcher: use is_mine(addr) instead of (addr in get_addresses()) * fix race in check_onchain_situation * fix flake8 test * follow-up previous commit: show onchain tx dialog for channel open/close transactions * Add lightning tx dialog (qt and kivy) * follow-up a6302b3a124a2bc9a208e0e78ddcb81d53d6bdf9 * ln gossip: don't put own channels into db; always pass them to fn calls * Qt ChannelsList: cosmetics (set font, enable sorting) * qt exc reporter: add FIXME re HTML tags in traceback * lnutil.split_host_port: fix for IPv6 connection string * util.Satoshis: note that sometimes this actually has 'msat' precision * fix wallet history order: incl both on-chain and LN, sorted by time * Qt: fix balance column * Catch exceptions raised in LNWorker._pay_to_route Reset payment status if an exception is caught. Also, do not pass status to the 'invoice_status' network callback. This fixes #5869, #5870, #5964. * fix lnchannel.get_payments: unsettled htlcs may have overwritten the returned results. * breach remedy: get spender transaction from LNWatcher's db * kivy: pass message to password_dialog (follow-up d9172ade714e659d87614e0376e53d8bad155159) * kivy send screen: always show field separators. fix on_clear. * (minor) kivy: initialize invoice_popup * detect redeemed channels (fix #5963) * follow-up previous commit * Do not use network callback to update channel states; call LNWorker methods directly instead. A callback was used because a single LNWnwatcher object used to be shared for all wallets. Since wallet now have their own LNWatcher instance, this can be simplified. * Define network.try_broadcasting() method. Use it when rebroadcasting a force-close tx, because the channel state is already set. * lnwatcher: use height == TX_HEIGHT_LOCAL to determine channel onchain state * switch menus: status <-> wallets * message formatting * kivy: make backups optional * kivy: use password + pin_code - password is per wallet, is retained in memory - pin code is saved in config * kivy/android: ask for STORAGE permission at runtime * kivy: save pin code in memory * Automate backups: - backup wallet file on each channel creation - on android, a backup password is entered in settings - on desktop, the backup path is in settings * save_backup: use db.dump() to clone the db * fix test_lnpeer * wallet backup function for kivy/android * kivy: allow generic passwords for wallets * reestablish: force_close if we are a recent backup * Save and read lighting backups (Qt) * fix lightning "init" msg assertion error * add comment re lnchannel channel_states * (minor) call lnwatcher.add_channel from lnworker.add_channel * follow-up previous commit * channel states: make sure that closing_txid is saved if channel is closed * follow-up fixes to storage-db separation * kivy: more reliable saving of "last wallet" * android build: update buildozer and p4a versions * wallet: fix is_mine/can_sign. don't just rely on ks, also check script * wallet: (sanity) is_mine now guaranteed to handle 'None' input * keystore: 'get_tx_derivations' no longer public * fix data_loss_protect (missing return, json conversion) * test_lnpeer: use less side-effects * test_lnpeer: test_reestablish_with_old_state * reestablish_channel: shorter varnames * channel_reestablish: assume that DLP is enabled, because we require it * windows: dll-load 'hack' needs to be applied not only from main script * windows: when running from source, load DLLs from main dir * gitignore: add .so/.dll in inner 'electrum' folder * add new peer_state for the case where we are waiting for the remote party to force close a channel * reestablish_channel: do not send second channel_reestablish message if they are ahead (they should know it) * test_lnpeer: simple test of channel_reestablish * update README to mention libsecp * build: workaround for 'realpath' missing on macOS * build: create a standalone build script for libsecp256k1 * ecc: hard fail if libsecp256k1 is not found/usable * tests: rm "needs_test_with_all_ecc_implementations" decorator * ecc: small API clean-up * ecc: use libsecp256k1 for pubkey recovery (from sig and msg) * ecc: use libsecp256k1 for signature conversions * ecc: use libsecp256k1 for sign/verify/mul/add * ecc: abstract away some usage of python-ecdsa: bytes<->int conversions * ecc: abstract away some usage of python-ecdsa: randrange * move wrapper definition outside of main_window class * Separate db from storage - storage is content-agnostic - db and storage are passed to wallet contructor * fixes for text interface * qt: don't clear send tab in broadcast_done * cosigner pool: easy fix (works but with worse than previous behaviour) * appimage: update libudev-dev (#5936) * regtest: wait_for_balance * blockchain.fork: better exception if datadir was deleted while running * qt update checker: use longer timeout * cli: history commands: only json-encode once * Restructure wallet storage: - Perform json deserializations in wallet_db - use StoredDict class that keeps tracks of its modifications * (minor) rename class: StoredAttr -> StoredObject * (minor) json_db: add file header, fix formatting * storage upgrade: convert lists to dict (txi, txo, revocation_store channels) * storage: take the DB lock when writing to disk. * regests: organize tests in two classes * Separate JsonDB and WalletDB * use setEnabled() for Qt menu items: Network, Lightning, Watchtower * faster and improved regtests - print the test name before each test - start only needed agents (alice, bob, carol) - set settle_delay using setconfig instead of restarting daemon - test the watchtower ctn in test_watchtower * Start watchtower if run_watchtower is set, even if lightning is not activated (fix #5896). Fix parameters of sweepstore.add_sweep_tx, rm dead code. * Added coloring to the AddressPopup dialog: * Use attr.s for Feeupdates and Outpoints Storage upgrade to version 23 * lnpeer: code factorization * Use attr.s instead of namedtuples for channel config * Fix travis regtest * Fix travis appimage * network dns hacks: split from network.py into its own file * dns hacks on windows: resolve A and AAAA records in parallel * follow-up prev (oops, only committed part of the changes) * Build: Install libxkbcommon-x11 in AppImage * windows build: maybe fix reproducibility (jsonschema-*.dist-info) * Build: Uninstall Cython from AppImage * requirements-hw: re-add Cython * mac build: bump pyinstaller version * mac build: bump python version (3.6.4->3.7.6) * wallet: log when saving already paid invoice * fix incorrect type hint * qt broadcast tx: don't complain about being "offline" for partial tx * qt send tab paytoedit: use monospace font * qt main_window: trivial clean-up re is_onchain * qt send tab: show "Pay" button even in watch-only wallets * Add command line option to forget config on exit. * follow-up prev * qt: defer refreshing tabs until they are visible * qt: clean-up in some MyTreeView children (mv code from update to init) * json_db: only deserialize transactions on-demand * tests: also run unit tests with python 3.8 on Travis * qt paytoedit: properly handle multiple max ('!') outputs * qt main_window: rm require_fee_update (dead code) * qt paytoedit: fixes for pay-to-many (when including "!") * Add block explorer support for mynode.local (#5892) * appimage binary: bump python version (3.6.8->3.7.6) * interface: better error msg for main server re SSL cert issues * fix daemon (don't close instantly) * windows binaries: update nsis * windows binaries: update wine * windows binaries: update pyinstaller to 3.6 * requirements: rm pycryptodomex from "binary"-specific list * binaries: use "--no-dependencies" option for pip install * network.get_transaction: move some response validation logic from Synchronizer * try to fix "--offline" mode * split network main_taskgroup: create daemon.taskgroup * Restoring old behavior of the outpoint copy to clipboard feature (#5879) * ecc.ECPubkey: add custom __deepcopy__ implementation * qt CPFP: handle empty fee field * qt installwizard: fix empty filename crash * wallet: only select mature coins by default * dns hacks on windows: cache dns when using dnspython * network/util: increase default timeout of make_aiohttp_session (30->45s) * fix paying bip70 payment request with Kivy GUI * fix paying bip70 payment request with Qt GUI * interface: make changing max incoming msg size (1 MB) easier * Remove phishing server * appimage build: add notes re investigating reproducibility failure * requirements: bump min python-keepkey to 6.3.1 * commands/jsonrpc: fix specifying "wallet" to commands that need it * util.standardize_path: properly handle "~" (user's home directory) * requirements: bump min python-keepkey to 6.3.0 * keepkey: use libusb to enumerate devices instead of hid * trezor: when restoring, hide Shamir options by default * wallet: encrypt storage by default * windows binaries: skip building libusb if already done * windows binaries: build libusb ourselves * trezor: use BIP39 backup by default even if Shamir is available * trezor: bump library requirement * trezor: implement support for Shamir recovery * trezor: link button messages to enum names * wallet._is_onchain_invoice_paid: support "zero amount" invoice * AppImage: Improve binary stripping * ledger.sign_transaction: always do certain output checks * ledger: faster sign_transaction startup * ledger: support sending to OP_RETURN outputs * kivy: implement opening storage-encrypted wallet files * synchronizer: request tx from server if we only have partial local tx * payment requests: fix explicit "None" expiration * CLI: properly auto-upgrade storage when needed even if storage-encrypted * windows: when running from source, with py3.8+, load DLLs from '.dlls' * follow-up previous commit * lnworker: save timestamp regardless of channel state * qt: also use BlockWaitingDialog in PreviewTxDialog * qt TxDialog: visibility of widgets should be set after parenting * wizard: (qt) add dedicated button to create new wallet * python 3.8: adapt to breaking changes re asyncio.CancelledError * build: update some packages in dockerfiles * trivial: add a few log lines for startup * python3.8: fix DeprecationWarning in qt/paytoedit * adapt to aiohttp 4.0 * Aiohttp must be lower than 4.0.0 * keystore: change derive_pubkey API to return bytes * wallet: faster decrypt_message for Imported_Wallet * wallet: use abstract base classes * Allow requests that never expire * qt: introduce BlockingWaitingDialog * lnworker: don't log InvoiceError * lnworker: introduce PaymentAttemptLog NamedTuple * ln chan verifier: fix code rot * keystore: use abstract base classes, introduce MPKMixin * qt: rm redundant line: ConfirmTxDialog.update_tx() * follow-up prev: add comment * keystore: cache BIP32Node.from_xkey(self.xpub) * keystore: cache derive_pubkey * bitcoin.py: base58 address: make sure all public methods test checksum * base_encode/base_decode: change to saner API * base_encode/base_decode: performance improvement * ln channel open: save funding tx as local tx into wallet * wallet: allow saving partial txns as local (but require txid) * qt: handle exceptions when pressing "Max" button * qt receive tab: show plain bitcoin address * receive requests: encode lightning invoices as uppercase -> smaller QRs * wallet: some clean-up re get_address_history vs db.get_addr_history * qt requests/invoices: use TreeView.sortByColumn instead of model.sort * appimage: update package in dockerfile * add SECURITY.md * qt ConfirmTxDialog: don't catch BaseException for make_tx * fix race in NetworkJobOnDefaultServer constructors * (fix) qt coin selection: signatures for coins would persist in memory * also grind ecdsa low R when using libsecp256k1, and fix tests * Add signature Low R grinding to match with Bitcoin Core * trezor: rm obsolete gui text * appimage: update package in dockerfile * Tests: Remove on_channels_updated (#5819) * rerun freeze_packages * on_open_channel: rm call to non-existing method on_channels_updated * hardware wallets: wizard no longer requests xpub at path "m" * network: make best_effort_reliable smarter and a bit more lenient * require ecdsa version >= 0.13.3 * wallet: better (outgoing) invoice "paid" detection * wallet: minor clean-up * tests: fix testcase test_restoring_wallet_with_manual_delete * LNPeerAddr: fix equality tests and hence lnworker._last_tried_peer * Color-Code Addresses in Kivy UI (#5774) * qt history list: rm and fix magic number * remove GreenAddress instant plugin * interface: fix connecting to raw IPv6 (as hostname) on Windows * qt history list: fix UnboundLocalError when searching * interface.deserialize_server: better ipv6 handling * LNPeerAddr: validate arguments * LNPeerAddr: nicer str formatting for IPv6 hosts * kivy: fix open_channel (API was changed) * add/fix some open_channel related type hints * minor follow-up prev commit * Open lightning channels with partially signed tx. Fixes #5379. * fix #5729 * fix #5728 * simplify add_transaction * follow-up previous commit * fix #5733 * add some type hints * fix tests * trivial: don't print frequent-case log line in lnpeer.mark_open * lnpeer: only set initialized after both sent AND received "init" * Refactor channel states: - persisted states are saved - state transitions are checked - transient states are stored in channel.peer_state - new channel states: 'PREOPENING', 'FUNDED' and 'REDEEMED' - upgrade storage to version 21 * cli: clear up "rbf" arg for "payto" cmd in help text; and use eval_bool * cli: load_wallet now auto-upgrades the WalletStorage when needed * cli: fix load_wallet for storage-encrypted wallets * simplify network callbacks in lnworker * check channel funding_tx amount and script in save_short_channel_id * bitcoin.py: remove some remnants of TYPE_ADDRESS, TYPE_SCRIPT * trivial: use logger.exception instead of traceback.print_exc * qt coin selection: allow selecting an empty set * qt utxo list: spend_list is now a set (and renamed) * lnpeer: (fix) force_close_channel was not awaited in some cases * Return 401 from RPC server for missing auth. * wallet: "future" txns num conf is now negative * qt: consistently show tooltip when copying to clipboard * Qt: Remove unused color from color scheme * kivy: support invoices with "max" amount * wallet: bump fee now supports coin selection * qt open channel: minor dialog fixes * ln: qt channel open: fix max channel size * ln: update list of fallback nodes * lightning qr codes: more robust parsing * qt tx dialog: small clean-up in constructors * qt send tab: subtract 2fa fee when clicking "spend max" * qt send tab: don't allow paying multiple invoices that spend max '!' * qt tx dialog: allow blanking feerate * qt tx dialog: disable "Finalize" btn if tx is None * qt tx dialog: small fee edit fix * qt tx dialog: only allow "save as local" for complete txns * qt: clean-up imports * hardware wallets: handle when label is None * fix #5761 * fix #5761 * fix #5765 * Fix missing wallet argument to _resolver * fix #5767 * fix #5772 * fix #5766 * fix #5770 * fix #5764 * Show outgoing Lightning paymenst with red description * hardware wallets: detect if label changed and update it in wallet file * hardware wallets: better handle label collision when selecting device * fix qt seed dialog (follow-up af86c7e3fdc80cace11de331abafddc012f36867) * hardware wallets: pull udev rules into our repository * old_mnemonic: speed up mn_decode * fix: cache wordlists * make Mnemonic.mnemonic_decode faster * fix #5757 * Pass make_tx function to ConfirmTxDialog - allow 'spend max' when opening a channel (fixes #5698) - display amount minus fee when 'max' buttons are pressed - estimate fee of channel funding using a template with dummy address * qt coin control: introduce second status bar * qt addresses tab: fix "Spend from" * TxDialog: fix hooks. only show psbt widgets when applicable. * PreviewTxDialog: small UI changes * qt utxo list fixes * PreviewTxDialog: fix RBF checkbox * fix Qt tx dialog randomly disappearing (due to gc) * qt/confirm_tx_dialog: fix qt warning * add option to pay multiple invoices * GUI: Separate output selection and transaction finalization. - Output selection belongs in the Send tab. - Tx finalization is performed in a confirmation dialog (ConfirmTxDialog or PreviewTxDialog) - the fee slider is shown in the confirmation dialog - coin control works by selecting items in the coins tab - user can save invoices and pay them later - ConfirmTxDialog is used when opening channels and sweeping keys * hardware wallets: create base class for HW Clients. add some type hints * qt address list: check internal address corruption when copying address * CoinChooser: avoid NotEnoughFunds if zero buckets are sufficient * rename 'copy column' to 'copy' * tx_from_any: strip whitespaces * qt FileDialogs for transactions: better file extension filter * transactions (qt): fix opening raw bytes files * transaction.tx_from_any: recognise even more types, and add tests * wallet: fix #5748 * psbt follow-up: fix ln cooperative close, and minor type clean up * transaction: helpful error msg if user tries to load old partial tx * transactions: reading QR codes: clean-up and accept all encodings * psbt: implement PSBT_GLOBAL_VERSION field * psbt: implement CompactSize key types (previously single-byte types) * psbt: allow insecure signing of legacy UTXOs without full previous tx * kivy tx dialog: was missing tx.add_input_from_wallet() call * tx dialog: try harder to show fee * test_wallet_vertical: add test for manual coinjoin * psbt: "updater" must swap NON_WITNESS_UTXO for WITNESS_UTXO if txin is segwit * psbt: test_wallet_vertical: add asserts to avoid silent breakage of psbts we create * transaction: to_json() debug methods display bip32 str (not int) paths * psbt: follow-ups: BCDataStream.read_bytes() should return bytes * psbt: follow-ups: fix trezor * psbt: follow-ups: fix digital bitbox * psbt: follow-ups: fix ledger * psbt: cleaner API for serialize* methods * psbt: only include xpubs for multisig wallets * psbt: fix bug re witness_utxo serialization * qt tx dialog: add export options for coinjoins and for coldcard * psbt: don't put xpubs and full paths into tx by def; only while signing * psbt: put fake xpubs into globals. keystores handle xfp/der_prefix missing * add support for manual coinjoins * integrate PSBT support natively. WIP * qt tx dialog: show dropdown for "export", instead of separate buttons (#5739) * plugins/coldcard/qt.py: bugfix for API change on main_window.show_transaction * build(deps): bump ecdsa in /contrib/deterministic-build * qt settings dialog: small fixes * commands: gettransaction cmd now tests txid before returning tx * fix qt invoices list: handle lightning disabled * (trivial) logging "verbosity_filter" was renamed to "LOGGING_SHORTCUT" * fix logic error in lnworker.on_channel_closed * fix #5731 * fix #5726 * kivy: - simplify menu - add lightning network dialog * minor fix: show_transaction params * pass both invoice and description to show_transaction * follow-up a0ec2690cf0a1c36bc468fbfb5aec1954eff72ae * fix clear_requests button * Call wallet.set_paid after onchain broadcast. Check if invoices are expired in util.get_request_status * kivy: fix can_pay in invoice_dialog * delete channel from db in remove_channel, becaose it is called from lnworker * filter out None in wallet.get_invoices * fix test following aac0fe9ae6d36b0500f00ad0d5d3378c54a30a5a * fix fee in lnworker.get_history (sign error) * wallet: fix bump_fee when there are only change outputs * kivy: show status with color. show inflight attempts. * kivy: add 'delete channel' button * kivy: minor fixes * segwit_addr: Use normal comparison for tuple literal (#5712) * folllow-up c721e880d0e203c770328d0830a37bd78eeae0e2 * Qt: generic add_copy_menu method for MyTreeView lists * fix #5702 * misc Qt fixes - improve layout of send tab - use tabs to show receive widgets - add menu item to copy address from request - show copied content in copy dialog * fix #5704 * fix #5701 * follow-up prev * fix typo: wallet.requests -> wallet.receive_requests (#5706) * fix expected returned peer address values when opening channel. * fix typo * kivy: toggle lightning dialog * add remove_lightning command * lnworker: less verbose * minor: callback unknown_channels (follow-up 0966edc637ba927ea6767b44aa937b0ca7805dd7) * Allow user to enable lightning in the GUI. Make it a per-wallet setting. * Qt: add lightning button to status bar * fine-grained callbacks for lightning network dialog * payment log: show whether channel have been blacklisted * move handle_error_code_from_failed_htlc to lnworker because it requires access to the network object * Qt: separate lightning and watchtower dialogs * fix #5695 * follow-up previous commit * improve payment log dialog * follow-up dd0be1541eb696d6a41420178543f2c36d20f80e * lnonion: get_failure_msg_from_onion_error might raise in python 3.7 * bump version number to 4.0.0a0 (alpha version) * Improve handling of lightning payment status: - Move 'handle_error_code_from_failed_htlc' to channel_db, and call it from pay_to_route, because it should not be called when HTLCs are forwarded. - Replace 'payment_received' and 'payment_status' callbacks with 'invoice_status' and 'request_status'. - Show payment error logs in the Qt GUI - In the invoices list, show paid invoices for which we still have the log. * lnworker: return error reason in await_payment * follow-up previous commit * Encapsulate lightning payment events: - make LNWorker.pending_payments private - public methods: payment_sent, payment_received, await_payment * lnworker: rename 'invoices' to 'payments' when they can be in both directions * remove another instance of lnworker accessed in lnchannel * Remove lnpeer.payment_preimages: - we can await lnworker.pending_payments instead, because the preimage is saved - also, remove one instance of lnworker being accessed from lnchannel * fix #5681 * wallet: minor invoices fix * do not decode LN invoices in channel_details. fixes #5676 * remove redundant test from lnworker._pay, rename pay_to_route parameter to lnaddr * fix tests: follow-up prev * qt send tab: handle invalid ln invoice; and ln invoice with ln disabled * bug fix in electrum/wallet.py * tests: fix test_find_path_for_payment. need to close sqlite connection * config: no longer singleton. it is passed to Wallet.__init__ * follow-up previous commit * qt settings: create services tab for both watchtower and payserver * Refactor invoices in lnworker. - use InvoiceInfo (NamedTuple) for normal operations, because lndecode operations can be very slow. - all invoices/requests are stored in wallet - invoice expiration detection is performed in wallet - CLI commands: list_invoices, add_request, add_lightning_request - revert 0062c6d69561991d5918163946344c1b10ed9588 because it forbids self-payments * qt send tab: use monospace font in "from" UTXO-selection section * Add from_coins arg to payto/paytomany * qt: fix export history * qt: fix address dialog * commands: add type hints for "wallet" param, and fix code rot found via * lnworker.sync_with_remote_watchtower: use proxy * lnworker: accessing self.channels needs lock * qt: show_info -> show_error * lnworker: fix detection of already paid invoices * lnworker: fee_msat is expected for all entries in history * settings: add vbox with stretch * settings: move block explorer to 'Transactions' tab * bitcoin.relayfee: minor clean-up * fix dns issue on Windows * coldcard tx dialog: "export PSBT" button should not raise on foreign ks * coldcard: show multisig address: more intuitive error msg * coldcard qt: change receive_menu to be similar to other hw plugins * coldcard: do link_wallet in load_wallet hook instead * coldcard: follow-up prev * build_psbt.py: provide witness vs redeem or both scripts * coldcard/build_psbt.py: bugfix: dont assume all keystores implement get_derivation, see BIP32Keystore * Add multisig support for Coldcard plugin * qt: (trivial) some type hints * ecc: small clean-up * simplify prev * ecc: also use libsecp256k1 for point addition * kivy: receive to ln invoice should be disabled if lightning is disabled * kivy: fix "use change addresses" setting (previously ignored, always on) * minor qt send tab fixes. notably 'send max' was broken * qt wizard: follow-up prev; simplify * qt wizard: still show selector window if storage.__init__ raises WFE * kivy: fix paying onchain invoices * qt history tab txn drag and drop: fix #5635 * add SSL context to watchtower server * move lightning settings to settings dialog * Simplify invoices and requests. * qt console: fix commands that do not expect a 'wallet' arg * get_tx_fee: further follow-up 7b828359c6049ab1910154e80490fbb1baaf5fa3 * follow-up 7b828359c6049ab1910154e80490fbb1baaf5fa3 * kivy: do not remove fee from tx value in history (minor) * simplify get_tx_fee * wallet: organise get_tx_fee. store calculated fees. storage version 19. * follow-up 241873f0a4bcf907f5a4ae3bba087355a5f14c34 * wallet: txi/txo small clean-up * address_synchronizer.get_history now returns HistoryItem(NamedTuple)s * return fees in history, show them in kivy GUI * follow-up prev * fix bug in lightning get_history: filter settled htlcs first * kivy: request PIN to load_wallet only on android * define LNWatcher.do_breach_remedy * fix simple_config.estimate_fee * kivy: attempt at handling (some) exceptions on startup * storage: read/write sanity checks * qt wizard: turn 'temp_storage' into local variable * follow-up prev * fix tests * wallet: address_is_old is now checked using SPV (during sync) * config: enforce that SimpleConfig is singleton * follow-up on SingleConfig * config: remove 'open_last_wallet' side-effecting * follow-up: SimpleConfig is supposed to be singleton * follow-up cefa4762ba904ef92d32b4c90005013dd7a7ac4a * add comment in storage._write * do not create multiple instances of SimpleConfig (fix #5629). Add config field to wallet * qt: add some type hints * daemon: make 'wallets' dict private * transaction: kill "name", "csv_delay", "cltv_expiry" fields * uncomment breach_remedy in watchtower * Digital BitBox: Fix sending to self * fix #5513 * add wallet_path to kwargs in run_cmdline * remove --wallet option for daemon. fixes #3752 * wallet: address_is_old minor clean-up * qt addresses list: use IntEnum for dropdown filters * follo-up 35761d1241dbf2685f3fe2d7ee0c4795daec4260 * Save remote policy of chanel in wallet file (for private channels) * wine build: add --build to ./configure: prevents cross-comp. misdetect * build: when building libsecp256k1, patch Makefile.am before autogen.sh * wallet: fix maturity off-by-one * kivy: commit png icons (for svg resources) into repo * kivy amount_dialog: truncate btc amounts to max precision * fix #5618 * lnchannel: handle htlc-address collisions * lnpeer: somewhat nicer log messages * lnrouter: fix off-by-one in NUM_MAX_EDGES_IN_PAYMENT_PATH * lnworker.invoices access now uses lock * create class for ShortChannelID and use it * only require libsecp256k1 if lightning is enabled * fix #5605 * fix CLI exception handling * Fix CLI. Some commands require wallet_path. Return error on exception. * ignore exceptions in payserver * commands: try to fix tests * channeldb.load_data: attempt at fixing race * lnpeer: longer timeouts * follow-up prev (commands) * CLI: always use the daemon's cmd_runner, and pass the 'wallet' parameter explicitly to each command that requires it. Previous code was relying on side effects to set the wallet. This should fix #5614 * kivy: fix ln channel open via scan_qr * qt: minor fixes * add PayServer settings to settings_dialog * Qt: move settings dialog to a separate module * fix websocket messages * fix ssl config names, add new config tab * for now, use PR_PAID for onchain unconfirmed * http server: add ssl and bip70 signed requests * commands: fix "close_wallet" * commands: fix "restore" cmd * CLI: remove timeout for offline commands * README: mention submodule init * fix #5617 * storage: replace STO_EV_* ints with IntEnum * disable http server by default * Qt: fix request menu * fix submodule * Integrate http_server (previously in electrum-merchant) Use submodule to fetch HTML and CSS files * do not raise exception when add_own_channel adds channel update from the cache * add_own_channel does not need to be async * hw wallets: show DeviceUnpairableError nicely in qt gui * qt main_window: fix receive_at, rm dead code * hw wallets: fix "show address" functionality in qt receive tab * qt receive tab: fix on-chain pay.requests without amount * follow-up a4b24df4bb123db86d0d75113b889c2453bdf25f * wallet/keystore: small inheritance clean-up * fix json error in listrequests * fix create_menu error #5609 * wallet.add_hw_info: also store "is_change" in output_info * wallet.add_hw_info: minor clean-up * (trivial) wine build: rm keys in Dockerfile * appimage: don't rm jsonschema-*.dist-info as pkg needs it * replace daemon 'start' subdommand with -d * android build: persist gradle datadir * only build one android apk on Travis (take 3...) * Restructure invoices and requests (WIP) - Terminology: use 'invoices' for outgoing payments, 'requests' for incoming payments - At the GUI level, try to handle invoices in a generic way. - Display ongoing payments in send tab. * Fix for onchain_history summary building * (trivial) travis: move flake8 tests to first stage * only build one android apk on Travis * local jsonrpc: log exceptions daemon-side * commands: add feerate param to payto/paytomany * follow-up prev: only build one apk on Travis * android apk: build two apks. ARMv7 and ARMv8 * android build: don't download Apache ANT on every build * android build: update kivy, p4a, buildozer * kivy: call register_callback only from main_window. Display CTN in channel details. * Syntax change: Require --offline to run commands without a daemon. That makes the syntax less ambiguous. It also makes it possible to implement a CLI that does not import all the electrum modules. * remove redundant 'stop' in regtest setUp (should run a bit faster) * main script: rm init_daemon (dead code), call sys_exit in init_cmdline * pyinstaller binaries: include files needed by new jsonrpc libs * lnpeer: make per-peer TaskGroup a field (as for interfaces), and use it * network: handle main_taskgroup dying better. passthrough CancelledError * Revert "Remove early return in create_sweeptxs_for_our_ctx." * test_breach_with_spent_htlc: do not overwrite default_wallet, load toxic_wallet instead * revert ed086934e5f57745580628a5706a6a40856c695a (this does not work well with travis) * make regtests more robust * In 'daemon start', do not return until the daemon can be reached * Ignore exceptions raised in lnworker.on_network_update. Exception raised there may cancel the network's main taskgroup. * Remove early return in create_sweeptxs_for_our_ctx. - This was added because we did not store the complete htlc history. - It makes the result dependent on the current channel state - That creates a race condition in sweep_info, because the result is cached. - As a result, test_breach_with_spent_htlc was randomly failing. * android build: make sure to use correct pycryptodomex * Remove electrumx.ml because of phishing (#5596) * lnpeer: reestablish_channel - don't replay unacked msgs they alrdy have * Fix travis error * qt channels list: fields should not be editable * bip70 payreq: catch TimeoutError to avoid hanging "please wait" dialog * make parsing lightning qr codes more robust * (trivial) fix variable name * minor fix: ensure request amount is not None * Travis: run regtests in separate job * buildozer: use log_level=1 * lnaddr: Pull in Bech32 and Base58 prefixes from constants * store qt-console-history in wallet file (fix #5563) * test_lnrouter: Pull in chain_hash from constants * Use NamedTuple notation for TxOutput in test_lnchannel * kivy: remove hidden state in RefLabel, use it for seed and private keys * kivy: remove context menus, cleanup unused files * Kivy GUI improvements: - create unique instances of channels_dialog and addresses_dialog - display and refresh balances in channels_dialog - improve formatting of tx history - repurpose left button in receive_tab * Display and refresh the status of incoming payment requests: - All requests have an expiration date - Paid requests are automatically removed from the list - Unpaid, unconfirmed and expired requests are displayed - Fix a bug in get_payment_status, conf was off by one * kivy: add expiration button to receive screen * kivy: update receive screen after adding request * lnpeer, minor fixes: - pass orphaned_ids to lnworker.add_new_ids - fix enumeration of get_unacked_local_updates() * kivy: minor fixes * fix Flake8 tests * run freeze_packages * Turn daemon subcommands into RPCs * minor fix * remove jsonrpclib dependency * Rewrite JsonRPC requests using asyncio. - commands are async - the asyncio loop is started and stopped from the main script - the daemon's main loop runs in the main thread - use jsonrpcserver and jsonrpcclient instead of jsonrpclib * (trivial) fix type annotation * lnpeer: in onion errors, handle channel updates both with and w/o type * lnpeer: use correct failure codes in _maybe_forward_htlc * do not raise BaseException * lnrouter/channeldb: small import clean-up * lnpeer: send own outgoing channel updates to remote peer * channeldb: also store "message_flags" field for channel updates * lnpeer: restore "temp save orphan channel updates" functionality * lnworker: fix silent TypeError in _calc_routing_hints_for_invoice * tests: some regtest tests need to mine more blocks to expire CLTVs * tests: regtest.sh now uses consistent indentation * commands.py: fix type of "timeout" arg * lnpeer: on_channel_open should not fail on server error * minor fix: always initialize Commands.lnworker * Daemon: Replace get_server with request. This function performs a single RPC, and may raise a DaemonNotRunning exception. * (trivial) fix getbalance * daemon: simplify get_fd_or_server * lnpeer: shutdown should wait until no HTLCs remain * lnpeer: failed htlc error handling ignored length of channel_update * lnpeer: add a few sanity checks to payment-forwarding (and related) * lnworker: rework "is_dangerous" * lnhtlc: htlcs_by_direction now returns dict keyed by htlc_id * add jsonrpcserver/jsonrpcclient to requirements * use aiohttp + jsonrpcserver in watchtower * remove unused import * lnpeer: make sure forwarding is disabled by default * lnhtlc: local update raw messages must not be deleted before acked * lnpeer: reestablish_channel - always replay unacked local updates * qt: do not show paid requests * fix race condition with channel_timestamps * require data loss protect * test funding_txn_minimum_depth, show it in GUI * lnpeer: fix and simplify tests in maybe_send_commitment * channel_db: load_data should load node_info * kivy: show pending requests in receive tab instead of dialog * kivy: lnpay_thread * qt gui: simplify signals * simplify tx history: do not use separate columns for lightning * simple_config.estimate_fee: make sure method never fails * lnhtlc.discard_unsigned_remote_updates: fix edge case * lnpeer: should not mark channel as OPEN if reestablish did not complete * lnpeer: reestablish_channel - fix data_loss_protect edge case * move all ctn book-keeping to lnhtlc (from lnchannel) * lnchannel: ctx output-ordering: identical htlcs are ordered by CLTV * lnchannel: start using "latest" and "next" instead of "current" and "pending" * lnworker: only reestablish channels after on-chain state is synchronized * implement data_loss_protect * lnpeer: make feature-bit testing easier * lnpeer: reestablish_channel - replay un-acked local updates * lnpeer: reestablish_channel - discard unsigned remote updates * lnhtlc: move 'next_htlc_id' from ChannelConfig to lnhtlc log * lnpeer: make reestablish_channel saner * lnhtlc: rename ctx_pending to revack_pending, and persist it * lnworker: small clean-up of short_channel_id format * lnpeer: channel_reestablished is now a queue (instead of future) * lnchannel: trivial clean-up * lnpay: check whether invoice has been paid * kivy fix: get_latest_feerate * lnworker.get_invoice_status: test if invoice is expired * use aiohttp+jsonrpcclient to sync with remote watchtower * fix: remove unused parameter to add_sweep_tx * refactor a few lnchannel methods * fix: constraints.feerate -> get_latest_feerate * Synchronize watchtower asynchronously: * (trivial) fix type annotation * lnchannel: move fee update logic to lnhtlc (and hopefully fix it) * revamp fee updates (draft) * lnhtlc: (fix) was locking in too many updates during commit/revoke * cli: fix add_peer cmd * cleanup revoke_current_commitment * follow-up prev commit: pass is_mine to _edge_cost * Do not route through channels for which we did not receive both updates, because this often means one of the nodes is offline. * fix: delete from channel_db * channel_db: update channels_for_node when removing channel * Use one LNWatcher instance per wallet * improve regtest.sh with wait functions * fix type: list * regtest: remove cost limit * lnwatcher: wait until lnwatcher is fully synchronized before check_onchain_situation * Perform breach remedy without sweepstore: - add functions to lnsweep - lnworker: analyze candidate ctx and htlc_tx - watchtower will be optional - add test for breach remedy with spent htlcs - save tx name as label * get rid of sql_alchemy * Do not store message payloads in channel db. Use single primary key for addresses. * optimize channel_db: - use python objects mirrored by sql database - write sql to file asynchronously - the sql decorator is awaited in sweepstore, not in channel_db * separate channel_db module * comment out convert, add logging statement * kivy: simplify open_channel dialog * pycryptodomex for android * remove expensive sql request, python set comparison is faster * Rework wallet history methods: - wallet.get_full_history returns onchain and lightning - capital gains are returned by get_detailed_history - display lightning history in kivy - command line: separate lightning and onchain history * lnpeer: some exception handling clean up * lnworker: set DATA_LOSS_PROTECT flag for LNGossip too * qt channels list: add "short channel id" column * do not "import *" * qt ChannelsList: some clean-up * qt receive tab: fix update_receive_address_styling * qt main window: hide "Channels" tab if lightning is disabled * GUI refactoring for Kivy and lightning. This also touches Qt and wallet code. * display lightning payment attempts using signal * on_revoke_and_ack: be robust to exceptions raised in lnwatcher * fix watchtower: sweep_tx must not be None * lnworker: fix reestablish_peer_for_given_channel by passing chan explicitly * fix encode_msg: optional fields were not sent * send data_loss_protect fields if we support it * on_commitment_signed: distinguish between exceptions * qt: add clear button to receive tab, show invoice right after it is added * request_lists: remove non-sense * lnworker improvements: - enable option data_loss_protect - separate add_peer from open_channel - display exceptions raised in open_channel * regtest: use while loops instead of fine-tuned delays * encapsulate detect_who_closed in channel * lnworker: catch exceptions raised by add_future_tx * simplify_lnsweep * lnhtlc: use boolean instead of int in ctn_latest * lnhtlc: fix adding htlc between sending commitment_signed and receiving revoke_and_ack * raise PaymentFailure in case of timeout (follow-up previous commit) * move lnpay attempts logic to lnworker.pay * lnsweep: minor fix * lnworker: do not create sweep transactions before outputs can be redeemed * fix tests broken by previous commit * Let lnworker sweep HTLC outputs after breach, instead of lnwatcher * on_network_update: check if channel is closed * redeem htlcs: - fix bug in lnsweep: lnwatcher transactions were indexed by prev_txid - add test for breach remedy with unsettled htlcs - add timeout option to lnpay, and replace DO_NOT_SETTLE with SETTLE_DELAY so that we can read intermediate commitment tx in regtest * lnsweep: simplify a few methods * rework on_channel_closed in LNWorker: - use detect_who_closed; this allows us to redeem to_remote of breach ctx - do not redeem to_local of breach ctx, because it is redundant with lnwatcher - rename a few methods * channel close handling: detect situation based on output addresses * set default to_self_delay to 1 day * ChannelDB: trivial bugfix for get_channels_for_node * add to_remote to breach test * add function new_blocks to simplify regtests * qt ChannelDetails: fix show_tx * move lnworker.first_block to constants * lnpeer: process gossip in chunks * ChannelDB.on_node_announcement: some speed-up * fix ChannelDB.compare_channels: was raising "too many SQL variables" * tests/regtest: stop using "bitcoin-cli generate" (deprecated) * gui: channel_details minor fix * minor fixes: remove_channel * redo LNWorker pay: - wait until htlc has been fulfilled - raise if htlc is not fulfilled - return boolean success - try multiple paths in GUI * gui channels_list fixes * improve lightning_dialog GUI settings * update electrumx starting script * channel blacklist: minor fix * add option to remove channel after it has been closed * do not include 'force_closing' in channel states, because it is not part of the peer protocol * fix: key must be unique (sql) * gui: improve display of lightning status * improve filter_channel_updates blacklist channels that do not really get updated * query_short_channel_ids: use Event instead of Lock * fix: add_channel_update * prune channels older than two weeks from database * verify channel updates in peer's TaskGroup * use a single queue for gossip messages, so that they are processed in the correct order * verify node and channel announcements before entering sql lock * lnpeer query_short_channel_ids: BOLT-07 says ids must be sorted * lnpeer reply_channel_range: handle lnd * parallelize short_channel_id requests * LNGossip: sync channel db using query_channel_range * save lightning invoice descriptions as labels and allow user to edit them * post-rebase fix * lightning network dialog * use config instead of watchtower_window to decide if we close the app * add labels to lightning history * lightning: GUI improvements * get_payments: do not include failed payments * wallet: add lnworker in constructor for CLI * fix column names * do not SPV channel announcements; this is too resource intensive * update regexp syntax * follow-up previous * enable lightning through command line option * logging (follow-up rebase) * fix tests * logging: adapt lightning branch to logging changes * Use separate lightning nodes for gossip and channel operations. * remove test_require_data_loss_protect * lnrouter: load data before finding path * minor fix * lnhtlc: handle fails asymmetrically * lnchan: make_commitment and balance (follow-up prev) * lnhtlc: small clean-up / docstrings * lnhtlc: add type hints * follow-up prev commit * fix verify_sig_for_channel_update: use raw message * lnpeer: - disable option data_loss_protect - disable query_short_channel_ids - increase timeouts in pay * lnwatcher fixes * increase timeout in open_channel * lnpeer: - send data_loss_protect fields with channel_reestablish - close connection if we receive an unknown channel_reestablish - log all exceptions that make us close a connection - formatting * lnrouter: fix get_last_good_address: one_or_none -> all * lightning tx: remove amount from label * channel_db: fix timestamp_range, reduce verbosity * lnrouter fixes: - use gossip_queries_req instead of initial_routing_sync - add connected nodes to recent peers only after successful init - derive timestamp used with gossip_timestamp_filter from channel_db - fix query_short_channel_ids: 1. channel IDs must be sorted with zlib 2. limit request to 100 3. do not abuse this to request node_announcements; it is fine not to have all nodes. - fix get_recent_peers: 1. do not set last_connected_date to 'now' if we never connected a node 2. sql query was misconstructed and was returning only one peer - populate FALLBACK_NODE_LIST_MAINNET with nodes that have the requested flags * fix sql conflicts in lnrouter * gui: show only initialized peers * lnpeer: spawn wait_for(self.initialized) to kill the TaskGroup if it times out * lnrouter: fix primary key conflict in Policy update * add get_channel_ctx to CLI, for testing breaches * cleanup tests that use regtest: - separate setup from execution - install bitcoind and electrumx in travis - use the same framework for lnwatcher and forwarding - make tests runnable locally * fix local_index in channel _shutdown * basic watchtower synchronization * follow-up variable renaming * test forwarding * fix icons in receive tab * force-close channel if unfulfilled htlc is close to cltv expiry * fix tests (follow up prev commit) * save timestamps in htlc log * follow-up previous commit * factorize channel opening code into chan.open_with_first_pcp * simplify points, remove side-effect in reestablish_channel * fix local/remote confusion in reestablish_channel * do not duplicate ctn in channel log and config * lnhtlc: remove unused field in log * reestablish_peers_and_channels: spawn tasks in for loop * post rebase fixes * lnhtlc: rename ctnheights -> ctn * lnwatcher: store transactions as binary * create parent class for sql databases * lnwatcher: save sweepstore in sqlite database * start asyncio loop in test_lnrouter and test_lnpeer * sqlite: do not use scoped_session * add sqlalchemy to requirements * follow-up previous commit * lnrouter: perform SQL requests in a separate thread. persist database. * Flatten the structure of lnrouter, so that DBSession is not used outside of ChannelDB * sqlite in lnrouter: lnpeer: introduce _gossip_loop for gossip handling separated from message handling * sqlite in lnrouter: remove useless InDB suffix * sqlite in lnrouter: request missing channel_announcements and node_announcements * sqlite in lnrouter: avoid exceptions on shutdown * sqlite in lnrouter * add 'txpos' field to lightning history items, in case two transactions have the same timestamp * add future transactions to address synchronizer * history: add column for ln amount * fix amount_msat sign in get_history * follow-up previous commit * improve watchtower gui * lightning: display forwarded payments as a single history item * lnchannel: pass reference to lnworker * lnchannel: save timestamp when we settle * ln_message: trigger notification instead of popup * lnchannel: save htlc preimages as soon as possible but horribly hacky * lnchannel: only consider payments finished when we revoke our old ctx * lnhtlc: revert 0c4e7b856f8c96c4f0a33bf3e0d1c8fd8184bd36 * travis: don't build binaries on ln branch (also for appimage) * qt: update whole gui on every LN payment * lnpeer: check that remote only sends commit_sig if there are changes * qt: handle LN invoices better in Send tab * lnworker: minor clean-up re payment_completed * lnhtlc: fix received_in_ctn (LOCAL->REMOTE) * tmp fix for circular imports * qt request_list: disable editing existing items * qt request_list: minor fix for context menu * qt request_list: fix changing between items * lnhtlc: handle settles like adds (asymmetrical across ctns) * more post-rebase fixups * lnchannel: add_htlc and receive_htlc now take and return UpdateAddHtlc * lightning: Save invoices and preimages separately. Save preimages when forwarding * lnpeer: distinguish local and remote pending updates * lnchannel: reformatting * lnpeer: send commitment after receiving updates * move lightning icon * lightning post-rebase fixups * follow-up previous commit * lnpeer: replace asyncio.sleep with events * code refactoring: _maybe_fullfill_htlc, _maybe_forward_htlc * lnchannel: fix error message * Refactor LNPeer in order to support HTLC forwarding: 1. Do not perform channel updates in coroutines, because they would get executed in random order. 2. After applying channel updates, wait only for the relevant commitment (local or remote) and not for both, because local and remote might be out of sync (BOLT 2). 3. When waiting for a commitment, wait until a given ctn has been reached, because a queue cannot be shared by several coroutines * test_lnpeer: add names * Rename lnchan, lnchannel_verifier, lnbase Auto-completions are a pain if files share a long prefix * lnworker: save outgoing invoice when initiating payment * qt: channel_details: prevent crash on stuck SENT htlc * move lightning message encoding to new lnmsg module * lightning: post-rebase fixes, read_QIcon and invalid import * test_forwarding: do not set HOME * lnbase: rename methods, fix tests * script that tests htlc forwarding * Forward HTLCs * lnworker: get_channel_by_short_id * lnpeer: receive_and_revoke, send_and_revoke * set short_channel_id regardless of channel state, because peer might be disconnected * show amount in channel opening/closure * fix: test short_channel_id before removing from channel_db * history tab: render channel opening/closure on a single line * restructure channel_reestablish, resend funding_locked if needed * fix tests * move LNPeer handshake back into initialize * history: better handling of None timestamps * follow-up previous commit * create transport and perform handshake before creating Peer * do not add ephemeral addresses to recent peers * fix channel closure when it was requested by the remote party * CLI: use funding_point in channel_open and channel_close. add host:port to nodeid * rpartition->rsplit * follow-up prev commit: use maxsize to sort timestamps * save channel timestamps, and show lightning payments in history tab * channel: is_closed * fix lnworker.get_balance * gui: display lightning balance in status bar * ln: show full chan id in list, use Event for initialized, more timeouts, return peer from add_peer, set max_htlc_value_in_flight_msat to capacity * add watchtower_window * gui: show incoming lightning requests, add on-chain icon * Store boolean is_received in lightning invoices. Sort lightning history with timestamp. Minor fixes * tests: update lnbase test to use 4-tuple for invoices * follow-up prev commit * lightning: * store invoices for both directions * do not store lightning_payments_inflight, lightning_payments_completed in lnworker * payment history is returned by get_payments method of LNChannel * command line: lightning history, lightning_invoices * re-enable push_msat * lnbase: fix on_open_channel, add TODOs for missing validation * revert low max_htlc_value_in_flight_msat, fix test * ln: handle channel limits better, show remote limits in details dialog, replace rusty's testnet peer (doesn't work currently) * rename paying -> inflight * turn lightning_payments_completed into dict. Show status of lightning payments in GUI. Make 'listchannels' available offline * fix test * remove deterministic derivation for testing * instanciate LNWorker without Network * ln: warn when negotiated feerate is too low * ln: add test_lnwatcher * lnworker: handle null whitelist correctly * lnworker: fix 'channel details' with stuck htlc * lnbase: work around peer not sending funding_locked so channel doesn't get marked open * ln: add closechannel cli command * lnworker: return txid from force_close_channel as expected * lnwatcher: fix incorrect tuple unpacking in do_breach_remedy * lnchan: fix per_commitment_point number in verify_htlc * ln: request_list: post rebase fixup (remove new_request_button deactivation) * sort requests by date * simplify requests list * confirmation dialog before force closure * channel_details: minor fix * lightning: simplify request tab * ln: fix sweeping htlc output from remote ctx (timeout e.g. without htlc tx) * lnchan refactor * request_list: select new items * lnpeer: print port in error_messages * ln: two remaining encumberedTx removal remnants * use to_dict (follow-up baa03a469f3e0e0ae61593272f5cb7e2483d49ad) * request_list: do not mention that ln invoice is bolt-11 * request_list: fix qr code display and keyboard selection of lightning invoices * formatting * remove useless returns and cryptic names * ln: remove EncumberedTransaction * lnbase: fix sig encoding in mutual close * lnsweep: use dicts consistently * lnchan: remove debugging code, commented out code * lnchan: only sign force_close_tx when demanded, assure consistency, fix test * lnbase: fix NameError * lnchan: make force_close_tx() assure that tx is valid, trigger failure in test * fix error message * fix lnsweep: prevout * fix test_lnchan * lnchannel: store pre-signed sweep transactions after each new commitment * on_close_channel: fix output index, and simplify lnsweep * LNWatcher refactoring: - do not store non-breach transactions - send 'channel_open' and 'channel_closed' events - force-closed channels are handled by LNWorker * lnsweep: return ctx.txid instead of None * qt main_window: do not unregister on shutdown * lnsweep: make maybe_create_sweeptx_for_their_ctx_to_local consistent * Channel: add current_commitment method * format message * show lightning network capacity in GUI * lnsweep: fix create_sweeptxs_for_their_just_revoked_ctx * update lightning.json * lightning: post rebase qt gui fixes * add pycryptodomex to requirements * use gossip_timestamp_filter instead of request_initial_sync * qt: channel_details: add more info: sent/received, channel id, funding tx, short channel id, node id * lnaddr: make it possible to use lnaddr to decode arbitrary invoices on the cmd line * rm 'cryptography' as dependency; use new pycryptodomex version * fix channel closure: - add 'CLOSING' state - wait until channel has no inflight HTLC - end fee negocitation when both parties agree on the fee (previously code ended it only when the other party had broadcast) - broadcast the closing transaction * follow up 'replace properties with functions' * further simplify lnwatcher * lnchan: restore process_new_offchain_ctx * fix prev * move sweeping methods from lnchan.py to new file * lnchan: follow-up "replace properties with functions" * make LNWatcher inherit AddressSynchronizer * lnchan: replace properties with functions * qt: channel_details: remove demo code * channel details with list of htlcs * Kivy: Lightning support in Receive tab * tests/lnbase: stub on_channels_updated * Kivy: open channel dialog * follow-up prev commit * lightning: do not handle more than one fee update at a time * Kivy: Support Lightning in Send tab * kivy: restore channel list to working state, add [force-]closing functionality * fix ln tests * lnutil: restructure channel config namedtuples (local/remote config) * add command for listing invoices and their progress, fix list_channels * function that returns map from commitment number to list of HTLCs * after rebase fixes * do not co-op close channels with pending htlcs * call force_close_channel on LNWorker, not Peer * avoid leaving FORCE_CLOSING state, rebroadcast closing tx if reorged out * move force_close_channel to lnbase, test it, add FORCE_CLOSING state * lnwatcher: do not get_transaction before broadcast * lnwatcher: more detailed logging, support notifying test suite of txs * lnwatcher: ensure probable spendability of prev_tx * use IntEnum for TxMinedDepth * watchtower: add watch_channel rpc * lnchan: use NamedTuple for logs instead of dict with static keys (adds, locked_in, settles, fails) * lnchan: make sign_next_commitment revert state * remove incorrect docstrings, attribute docstring sources where applicable * after rebase clean-up * test_lnbase: add test that pays to another local electrum * lnbase: more type annotations, and minor fix * add licence headers to more files * add lnd copyright boilerplate to lnchan, test_lnchan * lnbase: mark initialized later, add tests, etc * lnworker: fix listchannels * lnbase: do not assert only one htlc in commitment * lightning channels reserves: use pretty balance in Qt, fix bugs, add tests * use WaitingDialog to close channels * add close_channel method to peer * fix typo * parse invoices with lightning: prefix * lnbase: self.channel_reestablished is not a queue * lightning channel reserves * lnworker: store invoices based on payment_hash * lnbase: call save_channel in revoke and receive_revoke * fix co-op close * follow-up redeeming of local outgoing htlc outputs, fix tests * lnutil.make_funding_input: don't return payment pubkeys * redeem htlc outputs of our local commitment transaction back to wallet * some more type annotations that needed conditional imports * lnchan: set diagnostic_name * better handling of channel updates for private channels * lnrouter: can_pay for own channels should use amount_to_forward * lnrouter: run Dijkstra in reverse direction * fix confusion re max path length * protect against getting robbed through routing fees * lnbase: when opening channel, test if we have enough balance first * start failing htlcs * lnonion: implement error packet construction * invoice 'r' field fallback: change cltv to 1 * unify hardcoded regtest fee * Qt gui: show messages about payment outcome * encapsulate get_invoice in lnworker * make on_update_add_htlc async * follow-up prev * fix multi-hop payments * lnchan: add available_to_spend() * lnchan: make function for onion_keys decoding/encoding * follow-up 3460ba738e * lnaddr: encode min_final_cltv into invoice * log if no invoice has no routing hints * revert rbf on funding tx * lnbase: fix peer clean-up * improve suggest_peers; add htlcs to list_channels. * funding tx: use fees from config and set rbf * clean-up Peer init * if channel_update for our channel is missing, fill invoice with zeroes * if payment fails with UPDATE onion error, also utilise channel_update for private channels * ln: add lightning_listen config option * lnrouter: use htlc_maximum_msat * lnworker: make add_peer async * follow-up prev commit: channel_flags, message_flags, htlc_maximum_msat * add htlc_maximum_msat feature (bolt7) * lnbase: typo in on_channel_reestablish * path finding: minor clean-up * make function for determining who pays fee * fix prev * lnrouter: filter out unsuitable channels * gather definitions of LN exceptions * fix tests (follow-up previous commit) * move transport code to its own file * future and callback are not needed here * lnbase: split out BOLT-08 (Noise) implementation * fix tests * follow-up prev * channel verifier: NetworkJobOnDefaultServer, and some error handling * start channel verifier in network.start() * add 'recḱless' option to allow using lightning on mainnet * minor fix * fix race between network and lnwatcher (network.add_job does not always work) * add watchtower class, send encumbered tx as json * fix tests * rebase follow-up * lnbase: resend revoke_and_ack if necessary * watchtower: use network job, catch exceptions * remote watchtower: initial commit * rebase fixup: use new broadcast_transaction API * lnbase: use 45000 feerate on regtest for eclair compatibility * open_channel: improved success message * run open_channel in a WaitingDialog * rename lnhtlc->lnchan, HTLCStateMachine->Channel * lnhtlc: only store feerate once, don't store heights since we do not roll back * lnhtlc: merge config and state, remove unnecessary properties * lnhtlc: remove lookup_htlc, use heterogeneously typed lists * lnhtlc: save settled htlc amounts separately * qt channels_list: use repr() and not str() for exceptions * fix previous commit * follow-up 1c8a4bcfa497b117e4511c2f108dbca8a1adb793 * lnbase: handle some error codes re htlc failures ('UPDATE' flag) * lnonion: use IntEnum and IntFlag for failure codes * handle failing htlc after restart * clean up local/global features * on_channel_reestablish: try to get remote to force close channel if out-of-sync. * on_update_fail_htlc: don't send commitment without changes * simplify ChannelDB.on_channel_update * travis: don't build binaries on ln branch * when paying and there are multiple 'r' hints, use one at random * use 'r' field in invoice when making payments (routing hints) * make our channels private, and put routing hints in invoices we create * lnworker: fix race * lnaddr: clean up imports * follow-up previous commit * get rid of callbacks in lnwatcher, use network events instead * lightning: fix tests * follow-up lnwatcher changes * lnwatcher simplification: remove ctn tests and pubkeys * add more fields to list_channels * aiosafe: define user visible exception class * lnbase: propagate error messages received in on_error to their relevant coroutines * create sweep transaction outside of lnwatcher * fix race between lnwatcher/lnworker * fix tests * lnbase: Peer handles its own disconnection instead of lnworker * follow-up prev: avoid storage key collision with old 'lightning_privkey' * make key derivation reasonable * fix lnwatcher for channels initiated by remote * lnutil: missing import * lnhtlc: don't save FeeUpdates to disk, only keep FeeUpdate in memory while in progress * ln: fix opening of channels (NameErrors) * lnbase: update gui after accomodating channel opening request * accept channel opening requests initiated by remote * lnchannelverifier: (minor) use named fields of namedtuple * fix lnworker.choose_preferred_address * new network API: use broadcast_transaction with run_from_other_thread * lnhtlc: multiply weight by feerate before rounding * lnworker.pay(): lightning-integration support * lnhtlc: generalize balance/pending_commitment code over htlc direction * lnworker: add missing import * lnbase: remove code duplication by introducing send_commitment(chan) * lnbase: remove unnecessary branching and duplicated code in receive_commitment_revoke_ack * lnhtlc: save settled or failed htlcs * move connection string decoding to lnworker, fix test_lnutil * qt channels_list: min width, not fixed with (for hiDPI displays), use OK as default button * ecc_fast: require libsecp256k1 on lightning, channel graph breaks electrum without * commands: add dumpgraph command to see which nodes electrum knows about * requirements: require bitstring for lnaddr, cryptography for lnbase * avoid code duplication between methods that send channel updates * ln: commit fee updates as soon as possible * ln fees: avoid resending same fee update before it has been committed to, docs * lnwatcher: fix parameters to broadcast_transaction * lnhtlc: decrease next_htlc_id counter when removing htlcs when saving * simplify syntax * ln: don't save htlcs that are not locked in * lnhtlc: bip69 ordering of htlc signatues we generate * ln: avoid duplicated htlc filter code, support multiple htlcs better * lnutil: remove LI01 sort after Tx.from_io: fixup after rebase on da9d1e6001e3d1133901f5c2b4f16ba1b7a177e0 * avoid reading from queues concurrently in pay() * add pong handler to reduce verbosity * keep htlc history in case a htlc fails * add command to clear ln blacklist, prevent error in pay() from killing Peer * lnchannelverifier: some clean-up * fix lnwatcher: network triggers were renamed * rename LNChanAnnVerifier * fix prev * lnbase: save_channel in revoke * fix: broadcast_transaction from non network thread * partial revert of df24fb00578309b5db27876769306196238ec3f2: process_message should not be async * channel verifier: fix request_chunk args * add lnworker in start_network * lnwatcher: do not assume addr_sync.synchronizer * lnhtlc: also check received htlcs when validating commitment sigs * ln: cooperative close with remote peer initiating * lnhtlc: don't settle htlc with HTLCStateMachine too early * lnhtlc: save logs and feeupdates * lnhtlc: don't throw away fee updates or htlcs * lnhtlc: cleanup and save settled htlcs * lnhtlc: test that sent amount is received * lnwatcher rebased * lightning: post aiorpcx rebase fixup * remove our closed channels from channeldb. note some FIXMEs * lnbase: fix payments * rebase follow-up: use namedtuples from master in new code (TxOutput, TxMinedStatus) * decode onion errors to failure message type * qt: pay_lightning_invoice - attempt paying multiple times in case of failure * lnbase.pay: test if htlc can be added * qt send tab: hide fee fields when paying with lightning * qt open channel dialog: allow pasting invoices to open a channel * lnrouter: use 'disable' flags from channel updates in path finding * ln onchain fees: use 2 block ETAs with 150 s/b fallback * more reliable peer and channel re-establishing * lnworker: fix confusion re what is in self.peers * don't connect to same peer multiple times * fix tests * persist recent peers. implement dns seed bootstrapping. * persist nodes in channel_db on disk * move bolt-04 onion stuff to its own module * ln: share more code with control path for failed htlc, verify ctx'es * ln: fix forwarded payment fees by removing separation between fee and amount in htlc objects * ln: verify received commitment transactions during payment * ln: use START_INDEX instead of 2**48-1 * ln: save htlc signatures * ln: avoid dust sends breaking channel, avoid inline functions * channeldb: allow injecting trusted edges * special case receiving payment after fee update, fee update injector * persist channel db on disk. verify channel gossip sigs. * start using electrum protocol 1.4 * lightning.json with gossip_queries * constants.py: remove duplicate Simnet declaration * ln: do not use mSAT accuracy for commitment fees * ln: fundee must commit to fee first * bolt-08 handshake must use ephemeral key * avoid crash if don't have peer for open channel * use correct dust limit for their to_local/to_remote outputs * ln: initialize genesis with object, fix method name typo, use depth_target_to_fee * lnwatcher: pass address instead of wallet reference * encapsulate funding_address_for_channel * allow paying invoice without amount. min feerate 253 sat/kw. * lnbase: fee handling: add todo since depth_to_fee is inappropriate * asyncio: do not set event loop from wallet * ln: fix race in on_network_update * ln: send update_fee on fee change, handle nodes without data_protect * lnrouter: ignore duplicate channel announcement * remove unused method * ChannelDB: print_graph * qt channels list: update channel when detecting close * qt/channels list: show error in dialog * lnwatcher improvements * move channel_state into HTLCStateMachine * follow-up a7e5b9421c014fc0be72696837cb9d77519c5e03 * lightning: improve request tab layout * do not set background in frozen_style, it does not look good with dark theme * fix crash in lnworker main_loop * lightning: improve receive in Qt GUI * add peer suggestion to open channel dialog. move add_peer code back to lnworker constructor * add lnworker.main_loop to network.futures so it gets cancelled on exit. fix aiosafe verbosity. * diagnostic_name: convert to str * LNWorker: connect to multiple peers. save exceptions in aiosafe. enable adding peer in GUI. * lightning: fixup after rebasing on restructured master * Refresh LN status in GUI using network callback. * lnhtlc: remove unnecessary double application of pending feerate * ln: enable receiving dust htlcs * lnwatcher: naive code to sweep to_local from our ctx (will not wait for timelock yet) * ln: use pending_local_commit while closing (won't be revoked) * ln: raise our dust/reserve to 546 to be compatible with c-lightning * ln: test fix: our commit fee is implicit from outputs * lnbase: do not revoke more than once if we have missed reading commitments * lnwatcher: sweep to_remote and to_local outputs if they close * ln: revoke before sending bare ctx in pay(), remove subtraction of trimmed amt from fee * ln: add two trimming tests, avoid negative numbers in htlc trim decision * lnhtlc: fee update upgrade and passes ReciverCommits and SenderCommits tests, fix NameErrors in lnbase * lnaddr: remove remnants of lightning_payencode directory * lnaddr: fix imports * move comment * move lnaddr.py to lib * ln: avoid code duplication * ln: avoid recursive dependencies, make new lnutil * ln: merge OpenChannel and HTLCStateMachine * ln: shortcut some OpenChannel fields to traversing too much * ln: store HTLCStateMachine in lnworker.channels * improve Qt Receive tab for LN payment requests * Separate open_channel dialog. In open_channel_coroutine, use host and port from channel announcements * ln: use new non-classmethod add_signature_to_txin * ln: trim dust htlc outputs * do not set channel state in close_channel; the watcher should do it * lightning: single shared instance of Watcher, ChannelDB and PathFinder * disable lightning on mainnet * ln: improve lnhtlc, passes test * lnhtlc: use current_per_commitment_point, current_commitment_signature * fix reestablish_channel * reestablish channels in network callback * channel watcher class * ln: add was_announced in test_lnhtlc * ln: close channels * ln: don't corrupt channels storage when multiple funding_locked are received * ln: don't break channel when failing htlc * ln: announcement reliability fixes for qt, remove asserts forbidding unbalanced channels * ln: begin handling htlc failures * add minor comment for RouteEdge as clarification * LNPathFinder: cltv delta of first edge in a path should be ignored * ln: channel announcements * ln: lnpay: revoke until we get a commitment tx without htlcs * ln: fix reestablishing channel with no mined funding tx * ln: fix repeated payments * ln: avoid code duplication * ln: save remote's secrets in RevocationStore, not our secrets. call lnhtlc.receive_revocation * lnbase/lnhtlc: use lnhtlc more instead of manually constructing tx'es * lnbase: use sign_next_commitment for initial remote_ctx * lnbase: use lnhtlc when verifying our initial commitment tx * lnbase: use broadcast_transaction instead of broadcast (follow up e57e55aad) * test_lnbase: use new Peer API (with lnworker) * ln: remove unneeded forwarding htlc features, check commitment sig using lnhtlc while receiving * ln: integrate lnhtlc in lnbase, fix multiple lnhtlc bugs * ln: request_initial_sync, increase our max_htlc_value, fix receiving payment * do not block GUI with open_channel * lightning: display remote balance in gui * lnbase: mark_open on startup * revert the introduction of add_invoice_coroutine in a612c2b09 * do not pass channel list to update_rows signal, as it is sent to all windows * wait for peer.initialized in channel_establishment_flow * follow up 0b3a882e7d57c8a42be48c491a46dc814eab6acb * simplify funding_locked expose lnworker in peer update channel_db when channels are open * Display channel status in the GUI. * integrate channels_list with existing framework * qt: fix unit of lnaddr.amount * follow-up a612c2b0983ab4c6798156aebf1cd550fb3e0447 * ln: htlc state machine (not used yet) * ln: save channels in dict, warn on invoice exceeding max_htlc amount * lightning: connect send button * lightning GUI: use existing receive and send tabs with lightning invoices * ln: don't make invoice if peer can't possibly pay, append _sat to sat parameters to avoid confusion * lnworker: generate and save private key * lnworker: separate invoice creation from payment flow * ln: restore channels correctly after restart * fix channel_reestablish * lnbase: fix read_message * ln: restore functionality * ln: save remote node_id in channel * split lnrouter from lnbase * remove function H256 * fix amount in open_channel, add listchannels command * move on_funding_locked to lnworker * lightning: add payment methods to lnworker * lightning: move lnworker code to its own module * fix lnaddr.py following rebase * update lnbase after crypto refactoring * lnbase: remove lnbase stub * lnbase: pass password to mktx * qt: fix password passed to open_channel, cleanup * lnbase: mSAT hygiene, multiple multi-hop payments can be received * kivy: port lightning ui to lnbase * lightning: remove hub based approach, port qt gui to lnbase * lnbase: use small buffer when reading, support new_channel without payment in online test, send channel_reserve_satoshis * lnbase: use correct cltv_expiry calculation (use invoice) * lnbase: fix multi-hop payments * lnbase: fix onion-hop payload construction again (cltv currently broken) * lnbase: fix multi-hop fees, initial handling of received update_add_htlc during payment * lnbase: calculate cltv_expiry for onion_packet correctly * lnbase: try multi-hop onion package, type safety * PathFinder: change path element semantics from "from node, take edge" to "to get to node, use edge" * create route from path, that includes extra info needed for routing * bolt-04: decryption of errors * lnbase online test: use random node key when making new channel, save node key, multiple actions per invocation * lnbase: fix pay(), save htlc_id's, generate onion packet correctly * lnbase/online_test: save short_channel_id to wallet and build onion packet with it * calc short_channel_id after funding locked * lnbase: initial 'payment to remote' attempt * lnbase: formatting, remove imports * lnbase: verify commitment tx'es again * lnbase: infinite amount of incoming payments * lnbase: two payments working, temporarily disable sig check * lnbase: store remote revocation store, don't store all remote revocation points, verify ctn numbers in reestablish * lnbase: add RevocationStore test, remove unnecessary lnd helper functions * lnbase: compact commitment secret storage * lnbase: no negative commitment number nonsense * lnbase: move channel commitment number increment to function * lnbase: receive repeated payments * tests: don't use default lightning_peers in online test * lnbase: channel reestablishment working * bolt-04: implement processing of onion packets * minor clean-up of prev. util.xor_bytes * implement bolt-04 onion packet construction * lnbase: save channel details in wallet, enable running online test with reestablishment_mode * lnbase: move waiting for funding_locked to new function, make function for signing and sig conversion * lnbase: make function for building htlc_tx depending on if it is for_us/we_receive * lnbase: verify their htlc signature * lnbase: standardize to_bytes calls * lnbase: fix custom local to_self_delay, use node privkey derived from timestamp in online test * test_lnbase_online: pass password=None to channel_establishment_flow * lnbase: avoid copying variables, insert newlines * lnbase: derive keys from wallet keystore * lnbase: avoid local variables, remote useless comments, name basepoints as such * lnbase: set new field in Transaction instead of returning a tuple in make_commitment * lnbase: set to_self_delay back to 144, defer cltv_expiry problem * lnbase: use correct delay * lnbase: avoid code duplication, return htlc outpoint dict in make_commitment * lnbase: simplify commitment transaction building with open channel * lnbase: organize channel data * lnbase: allow passing KeypairGenerator to channel_establishment_flow, fix derive_privkey * lnbase: receiving invoice payment works * lnbase: commitment_signed, revoke_and_ack now accepted without errors * bitcoin.py: SCRIPT-related clean-up. transaction.py: construct_witness * lnbase: fix their new commitment transaction (htlc tx construction still incorrect) * lnbase: fix bug in message parsing * follow up b5eb7dd7683f24f03c80ab8f612658b5f3966eb1 * lnbase: attempt at making htlc_signature to send (currently remote fails due to wrong num_htlcs in commitment_signed) * simplification * lnbase: add TODO explaining how to verify htlc_signature given to us * lnbase: verification of new local commitment working * lnbase: derive next keys when making updated local commitment transaction * lnbase: try to receive payment, work on commitment tx with htlcs * lnbase: handle commitment transaction update (receive funds, not working yet) * simnet/testnet support in bolt11, set max-htlc-value-in-flight * transaction.py: sign_txin. allow override for get_preimage_script. test_commitment_tx_with_all_five_HTLCs_untrimmed_minimum_feerate now passes * redundant: you subscribed only to 'updated' * lnbase: verify remote signature * channel_establishment_flow: use get_per_commitment_secret_from_seed * lnbase: improve htlc_tx generation (only localsig wrong) * get_per_commitment_secret_from_seed: small clean-up * fix derive_secret * get_per_commitment_secret_from_seed (not working yet) * lnbase: avoid race while waiting for funding_locked, wait for un-reversed hash * complete bolt11 port to ecdsa instead of secp256k1 * channel_establishment_flow: wait for confirmations of funding txn * add processing flow for funding_locked * lnbase: fix parameters to make_commitment in htlc test * transaction.py: shortcut witness/scriptSig serialisation * lightning channels list: add mock server for testing * lnbase: add some comments * constants.py: Simnet inherits from Testnet * use same servers for simnet as for regtest * lightning-hub: update rpc stubs, do not ignore them in gitignore * lnbase: fix initial commitment transaction * refactor storage of channels, path finding * avoid duplicating bech32 module * lnbase: more work on make_htlc_tx * lnbase: make_htlc_tx * fix: use remote_per_commitment_point * lnbase: derive blinded pubkey * lnbase: fix variable name * lnbase: add privkey derivation * add test for key derivation * lnbase: key derivation (WIP) * lnbase: test signing of first htlc test case * lnbase: make_received_htlc * fix hash in make_offered_htlc * cleanup lnbase tests * lightning-hub: remove path hack, use relative imports * naive route finding * lnbase: offered htlc script construction * use acceptable variable names * lightning: separate testing from main code * lightning: store network view * lnbase: parse ipv6, fix transport bug * lnbase: fix read_message, reduce verbosity * lnbase: implement key rotation, request initial sync in localfeatures * lnbase: verify signature in node_announcement * bitcoin.py: implement add_number_to_script. fix CSV arg in make_commitment. * lnbase: fix test * implement script_num_to_hex. fix encoding of argument for CSV in make_commitment * lightning_channels_list: use signals to avoid segfault * fixes for make_commitment, but still incorrect destination address (csv arg?) * lnbase: fix tx amounts * lightning-hub: include ln relative to current directory * lnbase_test: add first commitment tx with 5 htlcs test * lnbase: fix locktime and nsequence * lnbase_test: insert remote_signature and compare fields independently * lnbase: create unit test for commitment tx * lnbase: fix signature index * lnbase: initial commitment transaction * lnbase: fix funding address, funding_output_index * follow up 1aac9e59ed957898fceef99b29b9cc17d7843569 * lnbase: communication privkey belongs to peer * lnbase: more parts of channel establishment * lnbase: remove unnecessary try/except * lnbase: lnbase_test must use threadsafe task submission * lnbase: decorator that handles exceptions * lnbase: fix shutdown when lnbase has exception in main_loop * lnbase: print exceptions from main_loop * lnbase: initialize loop variable in main * lnbase: add lnbase_test * lnbase: expose wallet object in LNWorker * lnbase: merge initialize and main_loop * lnbase: handle error during channel establishment * lnbase: channel establishment flow, avoid using Wallet instance * lnbase: use relative imports * lnbase: support simnet/testnet, create accepted open_channel message * lnbase: use valid pubkeys in open_channel * lnbase: try sending open_channel * lnbase: add draft handlers * lnbase: avoid reimplementing int.to_bytes * lnbase: avoid reimplementing int.from_bytes * lnbase: do not catch all exceptions, tolerate calculations with variables from kwargs * integrate lnbase with network * lnbase: process ping messages * lnbase: create main loop * lnbase: save buffer for next read * lnbase: Peer class * lnbase: fix json loading and indentation * lightning: do not list python files as resources, use lightning spec generated serialization * lightning network base * lightning: qt channel dialog, fix for shutdown when lightning disabled * lightning: channel details popup * lightning: do not catch BaseException unnecessarily, fix clearSubscribers, detect passworded wallet correctly * simplify parameters, add lndhost to config * lightning: add --simnet and --lightning switches * lightning: paste sample using clipboard * kivy: fix channel list error handling, close functionality for inactive channels * lightning: assert result type, add invoice qr dialog * lightning: kivy: open channel button in invoice * lightning: fix kivy channel close * lightning: python3.5 compat * lightning: fix channels dialog * lightning: add missing import, set console to none initially * lightning: do not require lock for broadcast tx, it is thread-safe * lightning: save key derivation point * lightning: separate thread for publish transaction * lightning: use queueing lock * lightning: less junk on console, quicker shutdown * lightning: don't receive too much data, workaround by reading byte by byte * lightning: complete moving of lightning objects, acquire net/wallet lock while answering lightning requests * lightning: misc patches, launch asyncio loop on separate thread * lightning: march 2018 rebase, without integration * rename WizardChoiceDialog (ambiguous) * wizard: try harder to have temporarily stored pw erased from memory * qt preferences: cast some config values to bool * signtransaction: pass pubkey to tx.sign (fix #5522) * fix #5558 * disable go_back button in wizard password dialog (fix #5509) * (trivial) time.clock is deprecated, replace with time.process_time * kivy wizard: script type dialog now uses toggle buttons * kivy wizard: dedicated button for seed options * kivy: support bip39 seeds * kivy wizard: undo Window.bind callbacks * Travis CI: Use flake8 to find Python syntax errors and undefined names (#5467) * qt gui: fix qrcodewidget pen for retina display * commands: change API of "make_seed" and "create" commands * rerun freeze_packages * requirements: allow using newer pycryptodomex * appimage build: change base to ubuntu 16.04 * ledger nano: fix monospace font on Windows, and text readability * ledger: remove mobile pairing 2FA support for Ledger Nano * build: update pyinstaller to 3.5 * wine build: pin build dependencies * update block header checkpoints * storage: better error msg on unsupported seed version * qt console: accept kwargs for commands.py methods * Unit tests for Blockchain.verify_header. * Make sure bash can be found on *BSD * bitcoin.py: dedupe pubkeyhash_to_p2pkh_script * wallet: fix offline hw wallet signing when not specifying --offline * gui/kivy: fix installwizard back button behaviour * Build: Set a fixed umask before starting Docker * Removed dead exchange. * Removed dead exchange. * appimage build: rm "build" folder if present as it makes build non-reproducible * change many str(e) to repr(e) as some exceptions were cryptic * exchange_rate: fix #5495 * load version module in make_download * pass host to upload script * Update utxo list when label is changed on history list ------------------------------------------------------------------- Thu Jul 11 15:44:14 UTC 2019 - marec@detebe.org - Update to version 3.3.8: * prepare release 3.3.8 * windows build: calculate COFF checksum ourselves * appimage build: build was failing on some host systems * wallet: loosen bump_fee sanity check further * transaction: segwit input signing was doing quadratic hashing * transaction.serialize_preimage: trivial clean-up * qt coins tab: let user filter by prevout_hash/prevout_n * servers: follow-up prev * servers: rm phishing domain * transaction: fix remove_signatures * wallet: fix restore_wallet_from_text edge case * verifier: further sanity checks for SPV verification. * android build: make buildozer.spec more similar to upstream example * AppImage: Fix webbrowser.open not opening links * AppImage: Bundle more binaries to increase compatibility * Wine Build: Make it less noisy * AppImage: Disable pip warnings about script install locations * qt network dialog: let user edit server host/port in peace * build macOS README: mention how Qt affects min supported macOS version * exchange_rate: fix #5487 * crash reporter UX * added trigger_crash method for testing crash reporter * wallet: fix type error in _bump_fee_through_decreasing_outputs * build readme nits ------------------------------------------------------------------- Wed Jul 03 17:57:09 UTC 2019 - marec@detebe.org - Update to version 3.3.7: * update make_locale doc references, and small nits * mac build: fix locale in binaries * make_tgz: build locale from deterministic submodule * chmod push_locale * separate push and pull locale * update submodule * prepare release 3.3.7 * fix prev: conditional import / type hint failure * wallet: follow-up prev * Do not pass storage to address_synchronizer * trezor: use only Bridge when available * crash reporter: in Qt subclass, do network request using WaitingDialog * build-wine: build our own pyinstaller bootloader * build-wine: some clean-up. cache downloads. better status messages * build-wine: don't use gpg keyservers * change electrum.png to square (by padding) * wallet.bump_fee: loosen sanity check a tiny bit * coinchooser: clarify docs for make_tx * synchronizer: fix race in _on_address_status * qt high dpi: fix some text fields * TorDetector: minor clean-up * Update block explorer URL for btc.com (#5438) * ledger: (trivial) rm some remnants of hw1 setup * interface: check if future already done in handle_disconnect * wallet: some performance optimisations for get_receiving_addresses * network: harden against eclipse attacks * android build: persist debug keystore * fix #4777 again... * build: note whether binary is reproducible in each case * interface.debug will now also print errors * do not log client-side RPC executions * build: make NSIS windows binary deterministic by changing the .ico file * Appimage: follow-up b69249f6c333c56aa62761974bcf58a4cf3e8db1 * Appimage: nits. use "fail" * AppImage: Patch Python sysconfigdata * qt: set WWLabel text to be mouse-selectable by default * build-wine: print some text before "pip install" * requirements-hw: rm Cython * AppImage: Remove unused binaries * AppImage: Improve reproducible Python build reliability on Linux * AppImage: Make build reproducible * coinchooser: clear up what "fee_estimator" expects * coinchooser: don't spend buckets with negative effective value * tests: new tests for bump_fee and rbf_batching * tests: fix existing bump_fee tests * wallet: RBF batching will now reuse the change address * wallet: make "increase fee" RBF logic smarter * wallet: split "change address logic" from make_unsigned_transaction * coinchooser: tweak heuristic scoring. * coinchooser: refactor so that penalty_func has access to change outputs * wallet: fix rbf_batching edge case * qt crash reporter: add warning that report contents are public * TxOutput usage: trivial clean-up * kivy: show tx fee rate in tx dialog * coinchooser: better account for fees in penalty_func * json_db: fix remove_spent_outpoint * qt msgbox: when using rich text, set text format to "AutoText" instead * qt history list: tweak sort order of items * plugins: on some systems plugins with relative imports failed to load * follow-up prev * wallet: stricter validation in export_private_key * AppImage: update appimagetool version * builds: parallelise "make" by setting "-j4" * update block explorer URL for blockchain.info * qt seed completer: colour words yellow if only in old electrum list * android: update kivy, p4a, buildozer * storage: fix bug in convert_version_17 * storage: fix some madness about get_data_ref() and put() interacting badly * bip70 payreq: do not show error messages in gui * follow-up prev * qt payment requests: fix some races * kivy tx_dialog: fix size of buttons in "Options" dropdown * rerun freeze_packages * requirements: restrict qdarkstyle to <2.7 * kivy: offer to copy raw hex tx to clipboard * qt lists right click: fix #5365 * rm dead code * hw: allow bypassing "too old firmware" error when using hw wallets * deprecation warnings: only show when running from source * interface: hide some server-induced errors from log * interface: fix for aiorpcx 0.18 * qt receive tab: "receive address" is now coloured red if already used * update to aiorpcx 0.18 * interface: fix connecting to new servers using self-signed certs * wizard/hw: less spammy logs when hw library unavailable * util: add function "chunks" * kivy: "paste" button now works for transactions * qt: allow QR codes to store a bit more data * qt: "Help" and "?" buttons can show rich text * interface: add comment * fix #5376 * util.parse_URI: more granular exceptions * interface: follow-up 6ec1578a90916436b3bfabe90cafd9bfc804a332 * qt settings: restart needed after toggling log_to_file * follow-up prev * interface was suppressing storage r/w exceptions * keystore/transactions: fix overflow of derivation path indices * Update Johoe's server address (#5363) * Spreading malware (#5356) * kivy: warn user during "Send" if high fee (change condition) * Add AppImage to "Creating Binaries" in README.md ------------------------------------------------------------------- Thu May 16 17:37:43 UTC 2019 - marec@detebe.org - Update to version 3.3.6: * prepare release 3.3.6 * update release notes * interface: follow-up 6cc70bc7a216afd129d24992029dcbd8e9dc861b * AppImage: Remove unused PyQt5 modules * AppImage: Remove Qt.so to prevent importing from PyQt5.Qt * AppImage: Copy libusb binary into image * wallet: (fix) synchronizer would also resub closed wallets... * interface: when disconnecting due to RPCError, don't dump traceback * fix 2fa wallet creation via qt gui * qt wizard: change wizard_dialog semantics to raise exceptions * (trivial) qt main_window: rm unnecessary indendation * qt: factor out util.MessageBoxMixin.msg_box into function and use it * wallet: test_addresses_sanity to include (part of) address in exception * qt wizard: catch wallet/bitcoin exceptions (regression) * kivy fx dialog: fix #5329 * json_db: enforce order of 'load_transactions' and 'upgrade' * qt send tab: fix tx_size and fee calc in case of payment requests * kivy wizard: fix #5333 * qt dark: fix2 "In History tab, labels while edited were being clipped" * wallet: fix deleting address from Imported_Wallet * wallet: fix balance_at_timestamp ------------------------------------------------------------------- Thu May 09 18:06:45 UTC 2019 - marec@detebe.org - Update to version 3.3.5: * requirements: pin PyQt5-sip version due to build problems * update version * date release notes * update locale * gitignore: add more build folders * buildozer: add tests to exclude_dirs * update release notes * logging: don't log to file by default * qt dark: fix "In History tab, labels while edited were being clipped" * logging: '-V' cli option can blacklist/whitelist classes with short names * synchronizer: show progress in GUI * interface: use itertools.count * logging: fix another call with multiple args * logging: fix call with multiple args * kivy: fix a race at startup * fix wine build dir references * requirements: bump python-ecdsa minimum * kivy: fix IPv6 * kivy: fix crash in logging.py; platform.platform() not available * wine build: rm old README * servers: remove phishing server * requirements: use older pycryptodomex for now * qt console: failed to print certain objects with custom __eq__ * rerun freeze_packages * network: sanitize_tx_broadcast_response - new strings in bitcoind 0.18 * qt dark style: fix padding of PayToEdit * update release notes * logging: expose 'disablefilelogging' option in Qt preferences * qt paytoedit: enable up/down keys * qt paytoedit: better height adjustment * servers: update mainnet default list (emzy) * servers: update mainnet default list * network.broadcast_transaction: add "do not trust" text to log messages * rerun freeze_packages * fix prev * commands: fix encrypt/decrypt * logging: port ugly accidental side-effect into readable explicit feature * logging: log exceptions caught by crash reporter * logging: make console log lines shorter * logging: fix for kivy * logging: cli options to filter for modules using -v * logging: basics * standardized logging base with ISO8601, UTC, rotating file logs, and more! * Decouple my GPG pubkey from Animazing * qt txdialog: word-wrap blockhash * interface: partially fix ipv6 proxy * qt: maybe batch do_update_fee() on network fee update * coinchooser: improve performance significantly * qt network dialog: "use Tor proxy" cb would get auto-checked incorrectly * rerun freeze_packages * requirements: relax qdarkstyle version * update to aiorpcx 0.17 * keepkey: rm homescreen stuff (remnants from trezor?) * Trezor: Minor nit in settings screen. Image size was shown as H x W * qt tx dialog: show block height and block hash * wallet: get_tx_info now returns NamedTuple instead of abomination * qt tx dialog: two columns for tx stats * qt: warn user if in testnet mode * servers: update testnet default list * Remove luggs' server from default list (#5300) * x509: show cert expiration date in error * bitcoin: stricter check on WIF for compressed pubkeys * update bitcoin explorer options (#5285) * util make_aiohttp_session: use longer default timeout * minor fix re translated string * kivy tx dialog: allow removing local transactions * kivy tx dialog: "action button" can have multiple options -> dropdown * kivy: fix history tab fiat values * cpfp: include fee already paid by parent tx in calculation * util/Fiat: Fiat(No Data) should equal Fiat(No Data) * qt tabs: restore filter state after refresh * bitcoin: disallow importing/sweeping segwit scripts with uncompressed pubkey * sweep/import key: show error in Qt GUI to user as tooltip * network: allow longer timeouts in _run_new_interface * leave max_button pressed (fix #5251) * network: fix proxy case * interface: better exception handling for _try_saving_ssl_cert_for_first_time * network: do not connect to multiple servers on same /16 * network: cap number of server peers accepted from main server * verifier: trivial clean-up * interface: in server.version, send "electrum/3.3.4" as client name * kivy: "server lagging" -> show number of blocks * appimage build: nits. * binary builder dockerfiles: update packages * Strip whitespace from amounts when copying. Fix bug in request list where address was copied instead of column specific data (#5228) * fix more DeprecationWarnings * fix-up prev * exchange_rate: add Bylls BTC/CAD rates * fix some DeprecationWarnings * make sure DeprecationWarnings are shown * default servers: rm electrum3.hachre.de * keystore: speedup for Old_KeyStore * verifier: fix logic bug. after reorg, some verifs were not undone * blockchain: fix bug when swapping chain with parent * follow-up prev * remove currency from amount fields in exported history * windows DNS resolution: handle domain with only AAAA records * qt invoice list: fix #5222 * windows DNS resolution: follow-up 9b0773cf2bf139eafe4a828c8964461d34ea9e23 * trustedcoin: longer timeout for server signing * windows DNS resolution: handle IPv6 * follow-up prev * android- all fiat currency with history option * network: (trivial) ignore empty string donation address * labels: don't dump trace if failed to connect to server * exchange_rate: change default provider to CoinGecko * exchange_rate: minor clean-up * fx: add CoinGecko and CoinCap * fix Revealer in binaries * appimage: build python with curses and sqlite3 included * rerun freeze_packages * requirements: use PyQt <5.12 in binaries for now. for AppImage * fix sign message not accept rich text (#5210) * interface: if iface conn fails early, don't wait for timeout of 'ready' * rerun freeze_packages * requirements: bump min keepkey * keepkey: support v6.0.0+ firmwares (webusb) * trustedcoin: better UX in Qt when cannot connect to TC server * daemon: in detached modde, redirect strandard file descriptors * qt Coins tab: better tooltip for frozen items * qt Coins tab: add "Copy ..." option to context menu * qt Coins tab: reorder columns so that outpoint is first * add option to freeze individual UTXOs * trivial wallet clean-up * exchange_rate: raise for http status so empty hist rate dicts don't get saved * labels plugin: no need for 'proxy_set' callback * commands: explicitly mention "?"/":" magic chars for "create" cmd * qt network dialog: increase min size * appimage: towards deterministic builds * accept base43-encoded tx in Qt "Load transaction" * new cli command: get_tx_status * let DB handle addresses * wallet: cache get_addr_balance * wallet: towards restoring previous performance 2 * keystore: rm dead code * wizard: fix regression: unencrypted wallets were not getting upgraded * qt qrcodewidget: on MacOS, was grabbing whole screen * daemon: make sure wallet paths are standardised everywhere * storage: fix path standardisation * wizard: partial revert of 2da6692f73921f3b651569900a63e9f3ce7fbc57 * qt wizard: minor clean-up * wizard: some fixes * [trivial] use namedtuple field by name * wizard: fix decryption of hw wallet files * wizard: allow kwargs in run() * qt "new transaction" notifications: change wording * wallet: fix RBF batching * fix storage upgrade tests: "fixture 'func' not found" * wallet: rm dead code * qt: close wizard after splitting an old multi-account wallet * storage: fix convert_version_18 * storage: fix convert_version_17 and add new test case * qt wizard: don't consider old version storage to be incomplete * json_db: store Transaction objects in memory, not raw hex * wallet: towards restoring previous performance * post-storage_db-merge fixups * wallet: generate addresses in Deterministic_Wallet constructor * scripts: simplify quick_start * commands: fix gettransaction * wallet: fix bug in restore_wallet_from_text, and write tests * commands/wallet: separate out 'create' and 'restore' core parts * ledger: suppress error message if user cancels tx signing * json_db: add missing lock * json_db: private methods. return tx in remove_transaction * storage: call load_plugins in decrypt * json_db: make get operations threadsafe * fix: load trustedcoin plugin for two-step wallet creation * storage_db: fix tests, add modified flag to db class * fix tests for json storage * fix json_db list * load wallet plugin in Wallet factory, fix trustedcoin wizard on kivy * jsondb: convert lists to sets * small fixups * abstract database away from wallet and address_synchronizer * separate storage and database (JsonDB) * wizard: do not use on storage object during wallet creation * exchange_rate: small fixups. BitcoinAverage, BitStamp * exchange_rate: some clean-up and fixes * tests: base43/base58 encoding/decoding * do not raise BaseException * wizard: normalize bip32 derivation path * bip32: refactor whole module. clean-up. * mv "electrum seed" stuff from bitcoin.py to mnemonic.py * move opcodes to bitcoin.py * transaction: replace custom enum type for opcodes with stdlib enum * trustedcoin: nicer 'ErrorConnectingServer' exception * util: mv create_URI to create_bip21_uri, and small clean-up * commands: introduce 'removelocaltx' * wallet: default to get_addresses() in get_history() * Add support for Ledger Nano X and future devices (#5140) * qt installwizard: fix small regression * trustedcoin: print messages in both direction when debugging * interface.is_server_ca_signed: don't rely on assert * fix get_fee_text for static fees * test python version in main script * scripts: add "quick_start" to showcase some basic functionality * improve network send_multiple_requests * synchronizer: disconnect from server if cannot deserialize txn * synchronizer: allow server not finding txn sometimes * fix variable name in contrib/sign_version * update make_download * trezor: during device init hide some options behind an "expert" button * trezor: implement "seedless" mode (option during initialization) ------------------------------------------------------------------- Thu Feb 14 21:06:05 UTC 2019 - marec@detebe.org - Update to version 3.3.4: * prepare release 3.3.4 * update locale submodule * add contrib/sign_version * update release notes * trezor: fix minor error handling issue * keystore bip39: minor clean-up * network: reintroduce network.debug (#5093) * wallet get_full_history: add from/to_height info to summary * network: follow-up 38ab7ee554b89b96c5ac7ea1b83d275d6cdb3cad * cli history: add option to filter by block height ------------------------------------------------------------------- Tue Jan 29 14:11:34 UTC 2019 - marec@detebe.org - Update to version 3.3.3: * document linux release process * update release notes * update submodules * validate version update announcements using "bitcoin address" message signing * [Qt] Add optional update notifications * hardware cmdline handler: print messages to stderr * fix wine build: pyinstaller failed to install with new pip * prepare release 3.3.3 * Give visual feedback while starting (#4997) * rerun freeze_packages ------------------------------------------------------------------- Sat Dec 22 12:50:26 UTC 2018 - marec@detebe.org - Update to version 3.3.2: * prepare release 3.2.2 * update icons submodule * [Qt] Fix wrong orientation of finger in clock icons * qt: show_message and friends display plaintext by default * gui: prepend broadcast_transaction errors with explanatory message * kivy network dialog: update server and proxy properly * win build: rm win_inet_pton * util.profiler: simplify * network: put NetworkTimeout constants together (#4945) * qt history: fix exporting history ------------------------------------------------------------------- Fri Dec 21 18:41:55 UTC 2018 - marec@detebe.org - Update to version 3.3.1: * prepare release 3.3.1 * kivy: do not request PIN for watching-only wallets * kivy: improve context menu * kivy: use on_state instead of on_release * kivy: use default scroll_distance and scroll_timeout * revealer: warning re version 0 now includes URL * qt: fix invoices tab * release notes: mention 2fa, shorten qt * win build: wine upstream gpg key weirdness * revealer: warning re version 0 vulnerability * revealer: fix unlucky hex seed causing crash * revealer: split some core parts out into separate file * revealer: clean-up noise-generation. support regeneration of v0 again ------------------------------------------------------------------- Mon Sep 3 16:43:49 UTC 2018 - marec@detebe.org - Update to version 3.2.3: * include plugins in win/mac binaries * follow-up prev * fix #4078 * update submodules * update submodules * prepare release 3.2.3 and release notes * network: don't ask for block -1 if server is on wrong chain * test_bitcoin: fix decorators for running tests twice (#4669) * fix -v syntax * Update __init__.py (#4668) ------------------------------------------------------------------- Mon Jul 2 18:06:30 UTC 2018 - marec@detebe.org - Update to version 3.2.2: * version 3.2.2 * Qt send tab: disable "max" button for invoices * Fix a bug in PaymentRequest __str__() function * don't dns resolve raw IP addresses * socket.getaddrinfo on win32: do our own dns resolution * Revert "socket.getaddrinfo on win32: do our own dns resolution outside the lock" * fix #4481 * fix websockets ------------------------------------------------------------------- Sun Jul 1 15:09:06 UTC 2018 - marec@detebe.org - Update to version 3.2.1: * prepare release 3.2.1 * Revert "Test with Python 3.7" * Test with Python 3.7 * network: disconnect from server if headers sub encounters error * ecc: only print warning about missing libsecp when in verbose mode * initial release notes for 3.2.1 * fix #4475 * fix #4037 (new issue but was merged into that) * docker windows build: fix missing translations * Add date to 3.2 release notes ------------------------------------------------------------------- Sun Jul 1 08:13:11 UTC 2018 - marec@detebe.org - Update to version 3.2.0: * winbuilds: update README. Do not sign in unsign.sh * Pyinstaller: Clean cache before building * windows builds: sign the windows-signed files with gpg * travis builds windows binaries in docker * wine build: use docker to (try to) have reproducible builds * update icons submodule * update commit number of locales submodule * add code name for version 3.2 * labels plugin: fix it. and extend to cli/daemon. * fix: i18n is not imported ------------------------------------------------------------------- Tue Apr 17 07:08:46 UTC 2018 - marec@detebe.org - Update to version 3.1.3: * prepare release 3.1.3 * Fix typos * fix #4266 * qt: allow copying receiving address using ctrl-c (#4258) * bitcoin.py: fix op_push * contrib: detect builds with uncommitted changes * release notes for 3.1.3 * fix: android HistoryScreen was not displaying fiat value of unconfirmed txns * fix #4255 * fix #4253 ------------------------------------------------------------------- Fri Mar 30 11:05:46 UTC 2018 - marec@detebe.org - Update to version 3.1.2: * update release date * fix #4136: revert to extras_require * remove print statement * fix #3294 * freeze_packages (partial): up btchip-python * electrum-env: run from script's dir * fix #4184 * prepare version 3.1.2 * osx builds: use version number from Info.plist ------------------------------------------------------------------- Mon Mar 12 19:24:34 UTC 2018 - marec@detebe.org - Update to version 3.1.1: * version 3.1.1 * Fix crowdin upload * fix #4098 * fix #4100: spent_outpoints does not track everything * fix #4109 * fix #4108 * close #4102 close #3337 * follow-up 3c505660a6c0827b72d12bd9bb7d5756974d5285 * Switch labelsync to electrum.org * version 3.1.0 ------------------------------------------------------------------- Mon Mar 5 18:27:24 UTC 2018 - marec@detebe.org - Update to version 3.1.0: * version 3.1.0 * wizard: rename option to "use a master key" * Add JPY exchange rate (#4016) * fix #4026 * update release notes, add date * simplify fee preferences dialog * improve fee status message * typo in prev * release notes: 3.1 - more stuff ------------------------------------------------------------------- Sat Feb 3 16:39:50 UTC 2018 - marec@detebe.org - Update to version 3.0.6: * prepare release 3.0.6 * ledger: mention "bitcoin" app when update is needed * follow-up 70aa1f1db9ccb3954501849f9c872ab7053c8ff1 * follow-up prev commit. better handling of p2sh-segwit. added comment to describe the problem for native segwit. * Fix PNG file * fix #3788 * fix #3790 * fix #3783 * Change number of zero when base unit changes * revert adding handling of 'blockchain.address.subscribe' in network.py ------------------------------------------------------------------- Mon Jan 8 19:22:35 UTC 2018 - marec@detebe.org - Update to version 3.0.5: * version 3.0.5 * Password-protect the JSON RPC interface * disable jsonrpc commands in the GUI * disable jsonrpc on android * update hw wallet versions * release 3.0.4 * Bundle QR scanner with Android app * fix #3411 * Avoid modifying self.transactions in prepare_for_verifier * fix #3217: make sure qt quits ------------------------------------------------------------------- Sun Jan 7 11:24:26 UTC 2018 - marec@detebe.org - Update to version 3.0.4: * release 3.0.4 * Bundle QR scanner with Android app * fix #3411 * Avoid modifying self.transactions in prepare_for_verifier * fix #3217: make sure qt quits * fix kivy refresh bug with Addresses tab * fix #3601 * fix: kivy Addresses tab crash for Imported_Wallet change * fix #3578 * fix: address filters for Imported_Wallet: wallet.is_used() ------------------------------------------------------------------- Tue Dec 12 19:04:21 UTC 2017 - marec@detebe.org - Update to version 3.0.3: * release notes for 3.0.3 * fix: tx size estimation for multisig * version 3.0.3 * fix sweeping for 2fa wallets * clean-up: use is_segwit_input in wallet.py * Make setup.exe differ less * Add Testnet to main window title in testnet mode * fix #3486 ------------------------------------------------------------------- Tue Nov 14 18:04:03 UTC 2017 - marec@detebe.org - Update to version 3.0.2: * follow-up 70d23f9e3ba0ae78840ac5cd3375685ece23dd32 * windows builds: download icons_rc.py from dedicated repo, because pyrcc5 is not deterministic * remove unused android icon * prepare 3.0.2 release * trustedcoin: add message about how to request new code * fix 3262: protobuf SerializeToString() returns bytes.. * Remove unused imports. Explicitly import a few deep imports. * Remove Python 2 support imports. * file i/o: use 'with' keyword ------------------------------------------------------------------- Tue Nov 7 21:00:17 UTC 2017 - marec@detebe.org - Update to version 3.0.1: * release notes for 3.0.1 * increase version number * Revert "follow-up f7200cb6162ba30f4ebd0e94d933f7b7d559cdb2: remove Info.plist" * fix tests * make tx deserialization more robust to ill-formed tx * fix typo: text gui with no wallet * fix #3211: use bytearray in ledger sign_message * fix #2562: show error message if hardware library is missing * fix: kivy unit selector ------------------------------------------------------------------- Thu Nov 2 09:44:38 UTC 2017 - marec@detebe.org - Update to version 3.0.0: * fix #3170 * release notes * add WIF extension to release notes * release notes: clarify locktime * fix magic number for p2wsh-p2sh * update release notes * from_seed: add missing parameter * follow-up f7200cb6162ba30f4ebd0e94d933f7b7d559cdb2: remove Info.plist * fix typo * Periodically poll fee estimates from server. ------------------------------------------------------------------- Thu Aug 24 19:05:19 UTC 2017 - marec@detebe.org - Update to version 2.9.3: * prepare version 2.9.3 * update wine script for hardware wallets * fix #2719 * Only save config if value changed * fix default sequence number in ledger plugin * change default value of confirmed_only, spending unconfirmed coins * fix #2697 * History list upgrades + add icon tooltip + fix text alignment + add double click for details * network: connection_down if interface fails to connect chunk * TREZOR: Remove sighash from input signatures * Fix commands that require password with unencrypted wallet ------------------------------------------------------------------- Thu Aug 3 17:16:55 UTC 2017 - marec@detebe.org - Update to version 2.9.2: * version 2.9.2 * add websocket to windows builds * force new headers download if file is corrupted * prepare version 2.9.1 * fix segwit script size * update blockchain size after initial file download * updates for new version of buildozer * validate contacts on import * Add Blockchair.com block explorer ------------------------------------------------------------------- Thu Jul 27 18:48:23 UTC 2017 - marec@detebe.org - Update to version 2.9: * version 2.9.4 * Remove decrypt_message; no longer supported by Trezor or KeepKey * storage: refuse to open newer version wallet files * follow-up 387f6db3b6a137f72fa06aa95e45a1bd3fb36858 - py2 fixes * Password-protect the JSON RPC interface * backport security updates: disable CORS and JSONRPC in gui * prepare version 2.9.3 * update wine script for hardware wallets * fix #2719 * fix default sequence number in ledger plugin * change default value of confirmed_only, spending unconfirmed coins * fix #2697 * History list upgrades + add icon tooltip + fix text alignment + add double click for details * network: connection_down if interface fails to connect chunk * TREZOR: Remove sighash from input signatures * Fix commands that require password with unencrypted wallet ------------------------------------------------------------------- Mon May 29 19:29:08 UTC 2017 - marec@detebe.org - Update to version 2.8.3: * version 2.8.3 and release notes * fix #2326: backward-compatibility of wallet files * Trustedcoin: prepaid-only billing * fix input_script and remove unused method inputs_without_script * add help message for hrdware devices on windows * fix test broken by previous commit * input_script: return txin.scriptSig if available. replace txin.is_coinbase with type. fixes #2321 * prepare version 2.8.2 * add save/delete buttons to invoice dialog * fix #2302: signing with imported wallet ------------------------------------------------------------------- Wed Mar 22 19:06:49 UTC 2017 - marec@detebe.org - Update to version 2.8.2: * fix input_script and remove unused method inputs_without_script * add help message for hrdware devices on windows * fix test broken by previous commit * input_script: return txin.scriptSig if available. replace txin.is_coinbase with type. fixes #2321 * prepare version 2.8.2 * add save/delete buttons to invoice dialog * fix #2302: signing with imported wallet * fix #2315 * stream signing for tx with large number of inputs ------------------------------------------------------------------- Sat Mar 11 18:07:43 UTC 2017 - marec@detebe.org - Update to version 2.8.1: * Revert "display unicode wallet path in Qt GUI" * version 2.8.1 and release notes * fix trustedcoin wallet creation * dbb: derivation must be byte string * fix for older formats * Fix CPFP on change * fix #2270: height sorting can use negative value * fix password message issue #2277 * fix #2279: jsonrpc wallet * dbb - bugfix after an upstream change ------------------------------------------------------------------- Thu Mar 9 20:36:45 UTC 2017 - marec@detebe.org - Update to version 2.8.0: * update release notes * fix kivy not updating units in history * kivy: always show wallet name * kivy labels plugin: use Clock * display unicode wallet path in Qt GUI * fix #2262 * use Python 2.7.13 with Windows, and install Cryptodome * fix bug with storage.encrypt * replace PyCrypto with PyCryptodome * windows builds: pass name to pyinstaller (try to fix issue #1000) ------------------------------------------------------------------- Sun Jan 29 11:48:13 UTC 2017 - marec@detebe.org - Update to version 2.7.18: * update buildozer.spec * prepare version 2.7.18 * add currencies list to repo * buildozer.spec: update permissions, version number source * kivy: simplify currency dialog * fix #2133: deserialize_xkey * disable verbose option with kivy * exchange rates: enforce https APIs. store exchanges list in json file. * kivy: reset button state * Added BRL exchanges: Bitvalor, Foxbit, NegocieCoins ------------------------------------------------------------------- Tue Jan 10 18:19:13 UTC 2017 - marec@detebe.org - Update to version 2.7.17: * prepare version 2.7.17 * fix #2107 * fix #2108 * remove 'send from' context menu (replaced by coins tab) * show addresses and utxos before wallet is synchronized * add 'copy address' to utxo menu * prevent busy looping * make fee_slider thread safe * prepare version 2.7.16 * ledger: ImportError fallback ------------------------------------------------------------------- Mon Jan 9 18:30:45 UTC 2017 - marec@detebe.org - Update to version 2.7.16: * show addresses and utxos before wallet is synchronized * add 'copy address' to utxo menu * prevent busy looping * make fee_slider thread safe * prepare version 2.7.16 * ledger: ImportError fallback * ledger new ui and mobile 2fa validation * Add fee slider class with network callback. * use ex_combo.findIndex instead of list.index ------------------------------------------------------------------- Fri Jan 6 12:39:32 UTC 2017 - marec@detebe.org - Update to version 2.7.15: * update release notes * simplify fee preferences * fix #2060: use tx size for high fee warning * Show fee slider for static fees too. Add fee slider to RBF dialog (fix #2083) * prepare version 2.7.15 * fix password issue #2097 * fix android detection * remove 'not enough funds' message when amount field is emptied * always display a receiving address (fix #2031) * prepare version 2.7.14 ------------------------------------------------------------------- Thu Jan 5 19:15:33 UTC 2017 - marec@detebe.org - Update to version 2.7.14: * fix android detection * remove 'not enough funds' message when amount field is emptied * always display a receiving address (fix #2031) * prepare version 2.7.14 * wrap list updates in setUpdatesEnabled() * fix #2096 (variable name) * workaround inefficiency in add_input_info * minor fix * do not save transactions until wallet is closed ------------------------------------------------------------------- Tue Jan 3 18:10:05 UTC 2017 - marec@detebe.org - Update to version 2.7.13: * rename P2PK to P2PKH to avoid confusion * paytoedit: fix is_max * follow-up previous commit * Improve 'send all coins' function: * do use coin chooser when sending all coins (fixes #2000) * allow "!" syntax for multiple outputs (fixes #1698) * show error if cannot import plot module * version 2.7.13, release notes * Update default servers * fix #2063 * minor fix * Properly handle invalid payment request URLs ------------------------------------------------------------------- Wed Nov 9 19:58:56 UTC 2016 - marec@detebe.org - Update to version 2.7.12: * throttle send_requests * version 2.7.12 * fix #2025 * fix #2027 * fix #2026 * fix #2022 * Fixing TrustedCoin logo. * fix #2007 * fix text gui. fixes #2002 * version 2.7.11 * move jnius wrapper to main script * init_headers in daemon thread, and fix #1996 * add version to daemon status, simply display number of spv nodes * kivy: add thread wrapper calling jnius.detach() * kivy: fix typo ------------------------------------------------------------------- Mon Oct 24 15:09:17 UTC 2016 - marec@detebe.org - Update to version 2.7.11: * Fix uninitialized HW.1/Nano and outputs swap with legacy firmware * version 2.7.11 * move jnius wrapper to main script * init_headers in daemon thread, and fix #1996 * add version to daemon status, simply display number of spv nodes * kivy: add thread wrapper calling jnius.detach() * kivy: fix typo * add_hw_info only if a hw wallet is there. that should fix #1995 * version 2.7.10 ------------------------------------------------------------------- Sun Oct 23 11:21:24 UTC 2016 - marec@detebe.org - Update to version 2.7.10: * version 2.7.10 * allow spaces in private keys (fix #1602) * qt: show both sign and broadcast buttons in tx dialog * fix #1673 * improve bump_fee (fix #1985) * fix #1989 * Revert "remove custom entropy option; nobody uses it" * trezor: fix length of signatures array * fix #1987 * fix crash #1987 ------------------------------------------------------------------- Mon Oct 10 08:14:01 UTC 2016 - marec@detebe.org - Update to version 2.7.4: * version 2.7.4 and release notes * remove deprecated note from kivy Readme * fix #1961 * fix #1959 * fix creation of imported keystore * version 2.7.3 * update windows build script * fix pyinstaller not detecting trezorlib.client * bound number of tx inputs in sweep * fix fee computation in sweep ------------------------------------------------------------------- Sun Oct 9 11:15:24 UTC 2016 - marec@detebe.org - Update to version 2.7.3: * version 2.7.3 * update windows build script * fix pyinstaller not detecting trezorlib.client * bound number of tx inputs in sweep * fix fee computation in sweep * fix #1959 * fix issue #1958 * fix bugs in sweep dialog * version 2.7.2, release notes * fix #1954 ------------------------------------------------------------------- Fri Oct 7 10:41:20 UTC 2016 - marec@detebe.org - Update to version 2.7.2: * version 2.7.2, release notes * fix #1954 * fix #1953 * remove the 'deseed' command, it does not work anymore with keystores * command line restore: strip text * update release notes * bump version number * fix #1948 * fix issue with restore from old seed * fix date ------------------------------------------------------------------- Wed Oct 5 18:53:58 UTC 2016 - marec@detebe.org - Update to version 2.7.1: * update buildozer.spec * prepare version 2.7.18 * add currencies list to repo * buildozer.spec: update permissions, version number source * kivy: simplify currency dialog * fix #2133: deserialize_xkey * disable verbose option with kivy * exchange rates: enforce https APIs. store exchanges list in json file. * kivy: reset button state * Added BRL exchanges: Bitvalor, Foxbit, NegocieCoins ------------------------------------------------------------------- Mon Oct 3 18:49:30 UTC 2016 - marec@detebe.org - Update to version 2.7.0: * keepkey: use v0.7.3 in windows binaries * fix: do not display hardware plugins in plugin menu * we need to check requires_split first, and get_action at the end * follow-up * follow-up * check requires_split before upgrade * fix message formatting * Fixing a stupid typo, sorry about that * remove custom entropy option; nobody uses it * Spread payment requests to subdirs ------------------------------------------------------------------- Tue Apr 12 19:23:16 UTC 2016 - marec@detebe.org - Update to version 2.6.4: * replace sync command * add 'offline' option only for 'restore' * add 'sync' command * fix #1751 * follow up 4efa6cb24bde25611c0ff581aa89395dc32328db * follow-up 0ae04a64193475fa56ee3b5de61ce19e44b2c1a5 * fix #1703 * follow up 355f2e07d4657f13d9d3844a51196ffe16c9082e * version 2.6.4, release notes * Added Blockchain URI (BIP 122) to block explorers list. ------------------------------------------------------------------- Thu Mar 31 15:52:41 UTC 2016 - marec@detebe.org - Update to version 2.6.3: * set timeout to 30s for synchronous operations * scan qrcodes with zxing embedded * update readme * improve README * fix path * update readme * kivy: fix * kivy: remove qr_scanner * kivy: revert to using zxing * version 2.6.3, release notes ------------------------------------------------------------------- Mon Mar 7 08:34:17 UTC 2016 - marec@detebe.org - Update to version 2.6.2: * bump version number * trustedcoin: fix get_max_amount * fix typo * fix #1704 * kivy: fix regression * fix password dialog * kivy: update settings dialog before display * kivy: cache dialogs * kivy: improve status dialog * move buildozer.spec ------------------------------------------------------------------- Sat Mar 5 10:26:08 UTC 2016 - marec@detebe.org - Update to version 2.6.1: * release notes * kivy: support old-type seed phrases in wizard * Fix installation when --root is specified * restore 'help' command for the python console * release notes 2.5.1 (bugfixes) * tx_dialog: make a deep copy of the tx * fix #1688 * trezor: remove code duplicated in base class * Update README.rst ------------------------------------------------------------------- Sat Feb 27 10:49:29 UTC 2016 - marec@detebe.org - Update to version 2.6: * replace sync command * add 'offline' option only for 'restore' * add 'sync' command * fix #1751 * follow up 4efa6cb24bde25611c0ff581aa89395dc32328db * follow-up 0ae04a64193475fa56ee3b5de61ce19e44b2c1a5 * fix #1703 * follow up 355f2e07d4657f13d9d3844a51196ffe16c9082e * version 2.6.4, release notes * Added Blockchain URI (BIP 122) to block explorers list. ------------------------------------------------------------------- Thu Nov 12 17:31:01 UTC 2015 - marec@detebe.org - Update to version 2.5.4: * prepare 2.5.4 release * increase min_relay_tx_fee, and make dust_threshold a function * Make use of trigger_callback easier to understand * Remove another non-existent callback * Remove non-existent callbacks and handlers * Labels plugin: drop wallet on window close * Allow syncronizer to be GC-ed * Attempt at fixing issue 1525 * fix json_encode with python console ------------------------------------------------------------------- Wed Oct 28 20:01:40 UTC 2015 - marec@detebe.org - Update to version 2.5.2: * fix: missing import * sanitize inputs in network dialog * add release notes * restore initial indentation * revert to previous restore method, without daemon * dont create wallet instance twice * fix restore messages * fix #1494 * command line: Require 'text' argument for 'restore'. Replace 'concealed' option with ':' magic word * bump version number ------------------------------------------------------------------- Sun Oct 18 16:17:34 UTC 2015 - marec@detebe.org - Update to version 2.5.1: * fix typo * version 2.5.1 * enforce python2 in setup * remove themes, check python3 in setup.py * fix #1479 * fix: sign tx inputs with the new low s class * socket errno 11: raise timeout instead of looping * fix #1488: add formerly deleted method * fixed scripts for wine build ------------------------------------------------------------------- Sat Oct 17 19:44:37 UTC 2015 - marec@detebe.org - Update to version 2.5: * prepare 2.5.4 release * increase min_relay_tx_fee, and make dust_threshold a function * Make use of trigger_callback easier to understand * Remove another non-existent callback * Remove non-existent callbacks and handlers * Labels plugin: drop wallet on window close * Allow syncronizer to be GC-ed * Attempt at fixing issue 1525 * fix json_encode with python console ------------------------------------------------------------------- Sun Aug 23 10:35:28 UTC 2015 - marec@detebe.org - Update to version 2.4.3: * separate signing script * version 2.4.3 and release notes * load_wallet: don't hide and show gui unless we start the wizard * add safety warning for watching only wallets * remove duplicate available_for * added icon for keepkey as well as updated with latest trezor plugin changes * moved up to keep in order * added icon for keepkey * Add Chinese Simplified wordlist * added KeepKey plugin information * created new KeepKey plugin based on Trezor's ------------------------------------------------------------------- Mon Aug 17 16:16:43 UTC 2015 - marec@detebe.org - Update to version 2.4.2: * version 2.4.2 and release notes * fix account renaming issues #1158 #1299 * cmdline: read all arguments before parsing * deprecate dumpprivkeys * read command line arguments from stdin if '-' is passed * fix #1400 * fix #1401 * Improved in network callbacks: * Pass arguments * Don't redraw history when a tx is verified. * Fix new tx notifications. * fix #1399 * test_ripemd: add simple test case for ripemd module * test_bitcoin: add tests for int packing * test_bitcoin: add test case for seeds ------------------------------------------------------------------- Wed Aug 12 19:42:19 UTC 2015 - marec@detebe.org - Update to version 2.4.1: * fix trezor statusbar * recently visited wallets: increase shortcut index * move init_qt hook * tooltips * fix: recently_open * improve recently_open menu * tx window: do not always set prompt_if_unsaved * cosigner pool: don't show both sign and send buttons * labels plugin: abort if there is not mpk * sign tx with empty scriptSig inputs ------------------------------------------------------------------- Sat Aug 1 09:42:33 UTC 2015 - marec@detebe.org - Update to version 2.4: * version 3.2.4 * backport anti-phishing measures to 3.2 * include plugins in win/mac binaries * follow-up prev * fix #4078 * update submodules * update submodules * prepare release 3.2.3 and release notes * network: don't ask for block -1 if server is on wrong chain * test_bitcoin: fix decorators for running tests twice (#4669) ------------------------------------------------------------------- Sat Jun 27 13:51:23 UTC 2015 - marec@detebe.org - Update to version 2.3.3: * Input tx index looks better left-aligned after all * Wrapper func to create and show a TxDialog * version 2.3.3, release notes * More tx dialog improvements * Save the description to the wallet on broadcasting * Add my own public key. * Distinguish receiving and change addrs in TxDialog * Have show-before-broadcast defer password request * fix issue in f307b18546c2fddb7f0ae8c817fe0a65890a9133 * Have transaction_dialog use send_tx() * Make the blockchain class not a thread ------------------------------------------------------------------- Sun Jun 14 10:47:45 UTC 2015 - marec@detebe.org - Update to version 2.3.2: * version 2.3.2 * Support Ledger 2FA Security Card and prepare for new encoding format * blockchain: restore call to set_local_height, forgotten in previous commit * fix is_used for unmatured tx * util: add print_msg() method to DaemonThread * transaction: added missing import * verifier: fix typo * Get rid of libusb dependency * Implement BIP-LI01. ------------------------------------------------------------------- Fri Jun 12 18:34:04 UTC 2015 - marec@detebe.org - Update to version 2.3.1: * version 2.3.1 * fix requests_dir bug * fix --pending option * cosigner pool: exec_->show * travis.yml: add protobuf to requirements and exclude plugins * improve docstrings * Show Synchronizing... when server height is zero * require network to show request status ------------------------------------------------------------------- Thu May 21 13:23:45 UTC 2015 - marec@detebe.org - Update to version 2.2: * version 3.2.2 * Qt send tab: disable "max" button for invoices * Fix a bug in PaymentRequest __str__() function * don't dns resolve raw IP addresses * socket.getaddrinfo on win32: do our own dns resolution * Revert "socket.getaddrinfo on win32: do our own dns resolution outside the lock" * fix #4481 * fix websockets ------------------------------------------------------------------- Sat Apr 25 11:17:27 UTC 2015 - marec@detebe.org - Update to version 2.1.1: * version 2.1.1 * fix bug introduced in 21673c95f4b9546e115fa8a128b0c6bb8c74d4b0 * Mention recommended full push for LabelSync * Fix wallet write to support windows * release notes * add file button to text edits * disable sorting of addresses * add file reader to QRTextEdit, to facilitate key imports * enable sorting for all lists except history * revert 0cd63d19f4b6e0926cc98ad5ade3bec32ffd9345 ------------------------------------------------------------------- Sun Mar 29 09:01:16 UTC 2015 - marec@detebe.org - Update to version 2.0.4: * revert commit 3ae2fb2e90b0296066509d1934d1c24b6333260f * trustedcoin: clarify buy dialog * release notes for 2.0.4 * ask user before closing transaction window with unsaved transaction * add 10 second timeout to header requests * use self.print_error * labels: use https, and fix force param * mpk window: detect self and cosigner keys * reopen the password dialog if user enters incorrect password * Rewrite labels plugin using requests and own signals ------------------------------------------------------------------- Sat Mar 14 14:32:40 UTC 2015 - marec@detebe.org - Update to version 2.0.3: * IOError: add file path to exception message * update rel notes * add rate conversion to receive tab * fix tx dialog buttons using new widgets * do not display daemon socket path * type conversion; fixes #1077 * sort servers in network dialog * fix: receive_at: enable button * version 2.0.3 * Treat FreeBSD just like Linux in setup.py ------------------------------------------------------------------- Mon Mar 9 18:31:10 UTC 2015 - marec@detebe.org - Update to version 2.0.2: * uri fix * do not try to connect to daemon on windows (af_unix) * Disable argv_emulation for OSX builds, fixes #1006 * release notes * bump version number * clarify the 'restore' message * fix transaction sweep; fixes #1066 * add show in set_layout * fix network connection issues ------------------------------------------------------------------- Fri Mar 6 19:41:16 UTC 2015 - marec@detebe.org - Update to version 2.0.1: * revert 33b11422 * minor fix * release notes * update labels plugin for multisig wallets * fix bug with cosignerpool plugin * release notes for 2.0.1 * give a short timeout for daemon calls that actually do not require the network * bump version number * fix issue #1061: normalize trezor passphrases. Add passphrases to restore from seed with trezor. * show wizard before running it ------------------------------------------------------------------- Thu Mar 5 18:57:09 UTC 2015 - marec@detebe.org - Update to version 2.0: * winbuilds: update README. Do not sign in unsign.sh * Pyinstaller: Clean cache before building * windows builds: sign the windows-signed files with gpg * travis builds windows binaries in docker * wine build: use docker to (try to) have reproducible builds * update icons submodule * update commit number of locales submodule * add code name for version 3.2 * labels plugin: fix it. and extend to cli/daemon. * fix: i18n is not imported ------------------------------------------------------------------- Sat Jan 17 18:02:11 UTC 2015 - marec@detebe.org - initial package build
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor