Browse Source

Merge branch 'master' into docker

3.2.x
ThomasV 7 years ago
committed by GitHub
parent
commit
88eb2390e6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .gitignore
  2. 8
      README.rst
  3. 4
      contrib/build-osx/make_osx
  4. 193
      contrib/build-osx/osx.spec
  5. 6
      contrib/build-wine/build-electrum-git.sh
  6. 43
      contrib/build-wine/deterministic.spec
  7. 7
      contrib/build-wine/prepare-wine.sh
  8. 63
      contrib/deterministic-build/requirements-binaries.txt
  9. 71
      contrib/deterministic-build/requirements-hw.txt
  10. 9
      contrib/deterministic-build/requirements.txt
  11. 2
      contrib/make_apk
  12. 11
      contrib/make_locale
  13. 2
      contrib/requirements/requirements-binaries.txt
  14. 2
      electrum-env
  15. 2
      electrum/__init__.py
  16. 5
      electrum/base_crash_reporter.py
  17. 0
      electrum/base_wizard.py
  18. 0
      electrum/bitcoin.py
  19. 6
      electrum/blockchain.py
  20. 0
      electrum/checkpoints.json
  21. 0
      electrum/checkpoints_testnet.json
  22. 0
      electrum/coinchooser.py
  23. 4
      electrum/commands.py
  24. 0
      electrum/constants.py
  25. 0
      electrum/contacts.py
  26. 0
      electrum/crypto.py
  27. 8
      electrum/currencies.json
  28. 4
      electrum/daemon.py
  29. 0
      electrum/dnssec.py
  30. 0
      electrum/ecc.py
  31. 0
      electrum/ecc_fast.py
  32. 1
      electrum/electrum
  33. 0
      electrum/exchange_rate.py
  34. 0
      electrum/gui/__init__.py
  35. 16
      electrum/gui/kivy/Makefile
  36. 10
      electrum/gui/kivy/Readme.md
  37. 0
      electrum/gui/kivy/__init__.py
  38. 0
      electrum/gui/kivy/data/background.png
  39. 0
      electrum/gui/kivy/data/fonts/Roboto-Bold.ttf
  40. 0
      electrum/gui/kivy/data/fonts/Roboto-Condensed.ttf
  41. 0
      electrum/gui/kivy/data/fonts/Roboto-Medium.ttf
  42. 0
      electrum/gui/kivy/data/fonts/Roboto.ttf
  43. 0
      electrum/gui/kivy/data/fonts/tron/License.txt
  44. 0
      electrum/gui/kivy/data/fonts/tron/Readme.txt
  45. 0
      electrum/gui/kivy/data/fonts/tron/Tr2n.ttf
  46. 0
      electrum/gui/kivy/data/glsl/default.fs
  47. 0
      electrum/gui/kivy/data/glsl/default.png
  48. 0
      electrum/gui/kivy/data/glsl/default.vs
  49. 0
      electrum/gui/kivy/data/glsl/header.fs
  50. 0
      electrum/gui/kivy/data/glsl/header.vs
  51. 0
      electrum/gui/kivy/data/images/defaulttheme-0.png
  52. 0
      electrum/gui/kivy/data/images/defaulttheme.atlas
  53. 0
      electrum/gui/kivy/data/java-classes/org/electrum/qr/SimpleScannerActivity.java
  54. 0
      electrum/gui/kivy/data/logo/kivy-icon-32.png
  55. 0
      electrum/gui/kivy/data/style.kv
  56. 0
      electrum/gui/kivy/i18n.py
  57. 16
      electrum/gui/kivy/main.kv
  58. 46
      electrum/gui/kivy/main_window.py
  59. 2
      electrum/gui/kivy/nfc_scanner/__init__.py
  60. 2
      electrum/gui/kivy/nfc_scanner/scanner_android.py
  61. 2
      electrum/gui/kivy/nfc_scanner/scanner_dummy.py
  62. 0
      electrum/gui/kivy/theming/light/action_bar.png
  63. 0
      electrum/gui/kivy/theming/light/action_button_group.png
  64. 0
      electrum/gui/kivy/theming/light/action_group_dark.png
  65. 0
      electrum/gui/kivy/theming/light/action_group_light.png
  66. 0
      electrum/gui/kivy/theming/light/add_contact.png
  67. 0
      electrum/gui/kivy/theming/light/arrow_back.png
  68. 0
      electrum/gui/kivy/theming/light/bit_logo.png
  69. 0
      electrum/gui/kivy/theming/light/blue_bg_round_rb.png
  70. 0
      electrum/gui/kivy/theming/light/btn_create_account.png
  71. 0
      electrum/gui/kivy/theming/light/btn_create_act_disabled.png
  72. 0
      electrum/gui/kivy/theming/light/btn_nfc.png
  73. 0
      electrum/gui/kivy/theming/light/btn_send_address.png
  74. 0
      electrum/gui/kivy/theming/light/btn_send_nfc.png
  75. 0
      electrum/gui/kivy/theming/light/calculator.png
  76. 0
      electrum/gui/kivy/theming/light/camera.png
  77. 0
      electrum/gui/kivy/theming/light/card.png
  78. 0
      electrum/gui/kivy/theming/light/card_bottom.png
  79. 0
      electrum/gui/kivy/theming/light/card_btn.png
  80. 0
      electrum/gui/kivy/theming/light/card_top.png
  81. 0
      electrum/gui/kivy/theming/light/carousel_deselected.png
  82. 0
      electrum/gui/kivy/theming/light/carousel_selected.png
  83. 0
      electrum/gui/kivy/theming/light/clock1.png
  84. 0
      electrum/gui/kivy/theming/light/clock2.png
  85. 0
      electrum/gui/kivy/theming/light/clock3.png
  86. 0
      electrum/gui/kivy/theming/light/clock4.png
  87. 0
      electrum/gui/kivy/theming/light/clock5.png
  88. 0
      electrum/gui/kivy/theming/light/close.png
  89. 0
      electrum/gui/kivy/theming/light/closebutton.png
  90. 0
      electrum/gui/kivy/theming/light/confirmed.png
  91. 0
      electrum/gui/kivy/theming/light/contact.png
  92. 0
      electrum/gui/kivy/theming/light/contact_overlay.png
  93. 0
      electrum/gui/kivy/theming/light/create_act_text.png
  94. 0
      electrum/gui/kivy/theming/light/create_act_text_active.png
  95. 0
      electrum/gui/kivy/theming/light/dialog.png
  96. 0
      electrum/gui/kivy/theming/light/dropdown_background.png
  97. 0
      electrum/gui/kivy/theming/light/electrum_icon640.png
  98. 0
      electrum/gui/kivy/theming/light/error.png
  99. 0
      electrum/gui/kivy/theming/light/gear.png
  100. 0
      electrum/gui/kivy/theming/light/globe.png

3
.gitignore

@ -4,10 +4,9 @@
build/ build/
dist/ dist/
*.egg/ *.egg/
/electrum.py
contrib/pyinstaller/ contrib/pyinstaller/
Electrum.egg-info/ Electrum.egg-info/
gui/qt/icons_rc.py electrum/gui/qt/icons_rc.py
locale/ locale/
.devlocaltmp/ .devlocaltmp/
*_trial_temp *_trial_temp

8
README.rst

@ -36,7 +36,7 @@ Electrum from its root directory, without installing it on your
system; all the python dependencies are included in the 'packages' system; all the python dependencies are included in the 'packages'
directory. To run Electrum from its root directory, just do:: directory. To run Electrum from its root directory, just do::
./electrum ./run_electrum
You can also install Electrum on your system, by running this command:: You can also install Electrum on your system, by running this command::
@ -73,12 +73,12 @@ Render the SVG icons to PNGs (optional)::
Compile the icons file for Qt:: Compile the icons file for Qt::
sudo apt-get install pyqt5-dev-tools sudo apt-get install pyqt5-dev-tools
pyrcc5 icons.qrc -o gui/qt/icons_rc.py pyrcc5 icons.qrc -o electrum/gui/qt/icons_rc.py
Compile the protobuf description file:: Compile the protobuf description file::
sudo apt-get install protobuf-compiler sudo apt-get install protobuf-compiler
protoc --proto_path=lib/ --python_out=lib/ lib/paymentrequest.proto protoc --proto_path=electrum --python_out=electrum electrum/paymentrequest.proto
Create translations (optional):: Create translations (optional)::
@ -112,4 +112,4 @@ See `contrib/build-wine/`.
Android Android
------- -------
See `gui/kivy/Readme.txt` file. See `electrum/gui/kivy/Readme.md` file.

4
contrib/build-osx/make_osx

@ -46,8 +46,8 @@ git submodule update
rm -rf $BUILDDIR > /dev/null 2>&1 rm -rf $BUILDDIR > /dev/null 2>&1
mkdir $BUILDDIR mkdir $BUILDDIR
cp -R ./contrib/deterministic-build/electrum-locale/locale/ ./lib/locale/ cp -R ./contrib/deterministic-build/electrum-locale/locale/ ./electrum/locale/
cp ./contrib/deterministic-build/electrum-icons/icons_rc.py ./gui/qt/ cp ./contrib/deterministic-build/electrum-icons/icons_rc.py ./electrum/gui/qt/
info "Downloading libusb..." info "Downloading libusb..."

193
contrib/build-osx/osx.spec

@ -1,97 +1,96 @@
# -*- mode: python -*- # -*- mode: python -*-
from PyInstaller.utils.hooks import collect_data_files, collect_submodules, collect_dynamic_libs from PyInstaller.utils.hooks import collect_data_files, collect_submodules, collect_dynamic_libs
import sys import sys
import os import os
PACKAGE='Electrum' PACKAGE='Electrum'
PYPKG='electrum' PYPKG='electrum'
MAIN_SCRIPT='electrum' MAIN_SCRIPT='run_electrum'
ICONS_FILE='electrum.icns' ICONS_FILE='electrum.icns'
for i, x in enumerate(sys.argv): for i, x in enumerate(sys.argv):
if x == '--name': if x == '--name':
VERSION = sys.argv[i+1] VERSION = sys.argv[i+1]
break break
else: else:
raise Exception('no version') raise Exception('no version')
electrum = os.path.abspath(".") + "/" electrum = os.path.abspath(".") + "/"
block_cipher = None block_cipher = None
# see https://github.com/pyinstaller/pyinstaller/issues/2005 # see https://github.com/pyinstaller/pyinstaller/issues/2005
hiddenimports = [] hiddenimports = []
hiddenimports += collect_submodules('trezorlib') hiddenimports += collect_submodules('trezorlib')
hiddenimports += collect_submodules('btchip') hiddenimports += collect_submodules('btchip')
hiddenimports += collect_submodules('keepkeylib') hiddenimports += collect_submodules('keepkeylib')
hiddenimports += collect_submodules('websocket') hiddenimports += collect_submodules('websocket')
datas = [ datas = [
(electrum+'lib/*.json', PYPKG), (electrum+'electrum/*.json', PYPKG),
(electrum+'lib/wordlist/english.txt', PYPKG + '/wordlist'), (electrum+'electrum/wordlist/english.txt', PYPKG + '/wordlist'),
(electrum+'lib/locale', PYPKG + '/locale'), (electrum+'electrum/locale', PYPKG + '/locale')
(electrum+'plugins', PYPKG + '_plugins'), ]
] datas += collect_data_files('trezorlib')
datas += collect_data_files('trezorlib') datas += collect_data_files('btchip')
datas += collect_data_files('btchip') datas += collect_data_files('keepkeylib')
datas += collect_data_files('keepkeylib')
# Add libusb so Trezor will work
# Add libusb so Trezor will work binaries = [(electrum + "contrib/build-osx/libusb-1.0.dylib", ".")]
binaries = [(electrum + "contrib/build-osx/libusb-1.0.dylib", ".")] binaries += [(electrum + "contrib/build-osx/libsecp256k1.0.dylib", ".")]
binaries += [(electrum + "contrib/build-osx/libsecp256k1.0.dylib", ".")]
# Workaround for "Retro Look":
# Workaround for "Retro Look": binaries += [b for b in collect_dynamic_libs('PyQt5') if 'macstyle' in b[0]]
binaries += [b for b in collect_dynamic_libs('PyQt5') if 'macstyle' in b[0]]
# We don't put these files in to actually include them in the script but to make the Analysis method scan them for imports
# We don't put these files in to actually include them in the script but to make the Analysis method scan them for imports a = Analysis([electrum+ MAIN_SCRIPT,
a = Analysis([electrum+MAIN_SCRIPT, electrum+'electrum/gui/qt/main_window.py',
electrum+'gui/qt/main_window.py', electrum+'electrum/gui/text.py',
electrum+'gui/text.py', electrum+'electrum/util.py',
electrum+'lib/util.py', electrum+'electrum/wallet.py',
electrum+'lib/wallet.py', electrum+'electrum/simple_config.py',
electrum+'lib/simple_config.py', electrum+'electrum/bitcoin.py',
electrum+'lib/bitcoin.py', electrum+'electrum/dnssec.py',
electrum+'lib/dnssec.py', electrum+'electrum/commands.py',
electrum+'lib/commands.py', electrum+'electrum/plugins/cosigner_pool/qt.py',
electrum+'plugins/cosigner_pool/qt.py', electrum+'electrum/plugins/email_requests/qt.py',
electrum+'plugins/email_requests/qt.py', electrum+'electrum/plugins/trezor/client.py',
electrum+'plugins/trezor/client.py', electrum+'electrum/plugins/trezor/qt.py',
electrum+'plugins/trezor/qt.py', electrum+'electrum/plugins/keepkey/qt.py',
electrum+'plugins/keepkey/qt.py', electrum+'electrum/plugins/ledger/qt.py',
electrum+'plugins/ledger/qt.py', ],
], binaries=binaries,
binaries=binaries, datas=datas,
datas=datas, hiddenimports=hiddenimports,
hiddenimports=hiddenimports, hookspath=[])
hookspath=[])
# http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal
# http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal for d in a.datas:
for d in a.datas: if 'pyconfig' in d[0]:
if 'pyconfig' in d[0]: a.datas.remove(d)
a.datas.remove(d) break
break
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(pyz,
exe = EXE(pyz, a.scripts,
a.scripts, a.binaries,
a.binaries, a.datas,
a.datas, name=PACKAGE,
name=PACKAGE, debug=False,
debug=False, strip=False,
strip=False, upx=True,
upx=True, icon=electrum+ICONS_FILE,
icon=electrum+ICONS_FILE, console=False)
console=False)
app = BUNDLE(exe,
app = BUNDLE(exe, version = VERSION,
version = VERSION, name=PACKAGE + '.app',
name=PACKAGE + '.app', icon=electrum+ICONS_FILE,
icon=electrum+ICONS_FILE, bundle_identifier=None,
bundle_identifier=None, info_plist={
info_plist={ 'NSHighResolutionCapable': 'True',
'NSHighResolutionCapable': 'True', 'NSSupportsAutomaticGraphicsSwitching': 'True'
'NSSupportsAutomaticGraphicsSwitching': 'True' }
} )
)

6
contrib/build-wine/build-electrum-git.sh

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
NAME_ROOT=electrum NAME_ROOT=electrum
PYTHON_VERSION=3.5.4 PYTHON_VERSION=3.6.6
# These settings probably don't need any change # These settings probably don't need any change
export WINEPREFIX=/opt/wine64 export WINEPREFIX=/opt/wine64
@ -44,8 +44,8 @@ find -exec touch -d '2000-11-11T11:11:11+00:00' {} +
popd popd
cp $WINEPREFIX/drive_c/electrum/LICENCE . cp $WINEPREFIX/drive_c/electrum/LICENCE .
cp -r $WINEPREFIX/drive_c/electrum/contrib/deterministic-build/electrum-locale/locale $WINEPREFIX/drive_c/electrum/lib/ cp -r $WINEPREFIX/drive_c/electrum/contrib/deterministic-build/electrum-locale/locale $WINEPREFIX/drive_c/electrum/electrum/
cp $WINEPREFIX/drive_c/electrum/contrib/deterministic-build/electrum-icons/icons_rc.py $WINEPREFIX/drive_c/electrum/gui/qt/ cp $WINEPREFIX/drive_c/electrum/contrib/deterministic-build/electrum-icons/icons_rc.py $WINEPREFIX/drive_c/electrum/electrum/gui/qt/
# Install frozen dependencies # Install frozen dependencies
$PYTHON -m pip install -r ../../deterministic-build/requirements.txt $PYTHON -m pip install -r ../../deterministic-build/requirements.txt

43
contrib/build-wine/deterministic.spec

@ -10,7 +10,7 @@ for i, x in enumerate(sys.argv):
else: else:
raise Exception('no name') raise Exception('no name')
PYTHON_VERSION = '3.5.4' PYTHON_VERSION = '3.6.6'
PYHOME = 'c:/python' + PYTHON_VERSION PYHOME = 'c:/python' + PYTHON_VERSION
home = 'C:\\electrum\\' home = 'C:\\electrum\\'
@ -31,10 +31,9 @@ binaries += [b for b in collect_dynamic_libs('PyQt5') if 'qwindowsvista' in b[0]
binaries += [('C:/tmp/libsecp256k1.dll', '.')] binaries += [('C:/tmp/libsecp256k1.dll', '.')]
datas = [ datas = [
(home+'lib/*.json', 'electrum'), (home+'electrum/*.json', 'electrum'),
(home+'lib/wordlist/english.txt', 'electrum/wordlist'), (home+'electrum/wordlist/english.txt', 'electrum/wordlist'),
(home+'lib/locale', 'electrum/locale'), (home+'electrum/locale', 'electrum/locale'),
(home+'plugins', 'electrum_plugins'),
('C:\\Program Files (x86)\\ZBar\\bin\\', '.') ('C:\\Program Files (x86)\\ZBar\\bin\\', '.')
] ]
datas += collect_data_files('trezorlib') datas += collect_data_files('trezorlib')
@ -42,21 +41,21 @@ datas += collect_data_files('btchip')
datas += collect_data_files('keepkeylib') datas += collect_data_files('keepkeylib')
# We don't put these files in to actually include them in the script but to make the Analysis method scan them for imports # We don't put these files in to actually include them in the script but to make the Analysis method scan them for imports
a = Analysis([home+'electrum', a = Analysis([home+'run_electrum',
home+'gui/qt/main_window.py', home+'electrum/gui/qt/main_window.py',
home+'gui/text.py', home+'electrum/gui/text.py',
home+'lib/util.py', home+'electrum/util.py',
home+'lib/wallet.py', home+'electrum/wallet.py',
home+'lib/simple_config.py', home+'electrum/simple_config.py',
home+'lib/bitcoin.py', home+'electrum/bitcoin.py',
home+'lib/dnssec.py', home+'electrum/dnssec.py',
home+'lib/commands.py', home+'electrum/commands.py',
home+'plugins/cosigner_pool/qt.py', home+'electrum/plugins/cosigner_pool/qt.py',
home+'plugins/email_requests/qt.py', home+'electrum/plugins/email_requests/qt.py',
home+'plugins/trezor/client.py', home+'electrum/plugins/trezor/client.py',
home+'plugins/trezor/qt.py', home+'electrum/plugins/trezor/qt.py',
home+'plugins/keepkey/qt.py', home+'electrum/plugins/keepkey/qt.py',
home+'plugins/ledger/qt.py', home+'electrum/plugins/ledger/qt.py',
#home+'packages/requests/utils.py' #home+'packages/requests/utils.py'
], ],
binaries=binaries, binaries=binaries,
@ -68,7 +67,7 @@ a = Analysis([home+'electrum',
# http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal # http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal
for d in a.datas: for d in a.datas:
if 'pyconfig' in d[0]: if 'pyconfig' in d[0]:
a.datas.remove(d) a.datas.remove(d)
break break
@ -85,7 +84,7 @@ exe_standalone = EXE(
pyz, pyz,
a.scripts, a.scripts,
a.binaries, a.binaries,
a.datas, a.datas,
name=os.path.join('build\\pyi.win32\\electrum', cmdline_name + ".exe"), name=os.path.join('build\\pyi.win32\\electrum', cmdline_name + ".exe"),
debug=False, debug=False,
strip=None, strip=None,

7
contrib/build-wine/prepare-wine.sh

@ -13,7 +13,7 @@ LIBUSB_FILENAME=libusb-1.0.22.7z
LIBUSB_URL=https://prdownloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.22/$LIBUSB_FILENAME?download LIBUSB_URL=https://prdownloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.22/$LIBUSB_FILENAME?download
LIBUSB_SHA256=671f1a420757b4480e7fadc8313d6fb3cbb75ca00934c417c1efa6e77fb8779b LIBUSB_SHA256=671f1a420757b4480e7fadc8313d6fb3cbb75ca00934c417c1efa6e77fb8779b
PYTHON_VERSION=3.5.4 PYTHON_VERSION=3.6.6
## These settings probably don't need change ## These settings probably don't need change
export WINEPREFIX=/opt/wine64 export WINEPREFIX=/opt/wine64
@ -81,6 +81,11 @@ set -e
wine 'wineboot' wine 'wineboot'
# HACK to work around https://bugs.winehq.org/show_bug.cgi?id=42474#c22
# needed for python 3.6+
rm -f /opt/wine-stable/lib/wine/fakedlls/api-ms-win-core-path-l1-1-0.dll
rm -f /opt/wine-stable/lib/wine/api-ms-win-core-path-l1-1-0.dll.so
cd /tmp/electrum-build cd /tmp/electrum-build
# Install Python # Install Python

63
contrib/deterministic-build/requirements-binaries.txt

@ -1,42 +1,43 @@
pip==10.0.1 \ pip==10.0.1 \
--hash=sha256:717cdffb2833be8409433a93746744b59505f42146e8d37de6c62b430e25d6d7 \ --hash=sha256:717cdffb2833be8409433a93746744b59505f42146e8d37de6c62b430e25d6d7 \
--hash=sha256:f2bd08e0cd1b06e10218feaf6fef299f473ba706582eb3bd9d52203fdbd7ee68 --hash=sha256:f2bd08e0cd1b06e10218feaf6fef299f473ba706582eb3bd9d52203fdbd7ee68
pycryptodomex==3.6.1 \ pycryptodomex==3.6.4 \
--hash=sha256:1869d7735f445bbf1681afa2acce10ad829857cfb7a4a7b702e484f222021892 \ --hash=sha256:0461e88a7199f9e88f9f90c2c1e109e9e1f7bbb94dc6192e5df52829d31510c1 \
--hash=sha256:24e054190d2b11ad3b8517d186c0b3df6f902a5f5a91be8e4bb6a3fcdc65b2cf \ --hash=sha256:08d0aba5a72e8af5da118ac4b6a5d75befceca7dd92a031b040ed5ff4417cec2 \
--hash=sha256:26967d31fabb0d80cb2b254a7c0f55f8dec9931e8676891edd24aa5aaeb0d021 \ --hash=sha256:0e22d47935d5fa95f556d5f5857576bc6750233964de06a840d58459010c3889 \
--hash=sha256:2a341b57bb5844d53b8f632f79277cd534762f502fb73bff5dc1a2f615ff91ed \ --hash=sha256:10ef21d1728ec0b8afc4f8e1d8d9ea66f317154ea18731a4a05bd996cdc33fdf \
--hash=sha256:43d6eb014aba7be354f3e8fe2693fe96446f6791da2b9570e8d54d481e3ab224 \ --hash=sha256:1962b81eef81bf5c42d625816904a22a0bd23d15ca5d49891a54e3c0d0189d84 \
--hash=sha256:4c271577f4f8c5cced55a60f4504b34545121c14facb8fc357f89c24089c81fc \ --hash=sha256:24aae88efe3cbcb4a9cf840b2c352e7de1d6c2c5b3df37ff99b5c7e271e8f3a8 \
--hash=sha256:59721f2853df9cf2265304d3b6d6d8cebe3a86b1fddc00f2bfbf18eb2a48fb78 \ --hash=sha256:43ad6d1d7ca545d53360bf412ee70fcb9ede876b4376fc6db06fc7328f70588c \
--hash=sha256:63a77a1b27d12ed1c42f4e539d9dbe588a88b70ec64b55271cdf1f56c1223bd6 \ --hash=sha256:4daabe7c0404e673b9029aa43761c779b9b4df2cbe11ccd94daded6a0acd8808 \
--hash=sha256:6d04640386c55b9f44015747496c3b6582360b5b3b4e42f9ce3fc7c6840f80d0 \ --hash=sha256:4e15af025e02b04b0d0728e8248e4384d3dc7a3a89a020f5bd4d04ef2c5d9d4c \
--hash=sha256:730bd75d90e16975a112ea79863ce1faa7703d3b54f10d77656e7dadf6be0ef6 \ --hash=sha256:5b4d3c4a069a05972e0ed7111071bbcb4727ac652b5d7e8f786e8ea2fe63306b \
--hash=sha256:75a300aa86c56e9c19a7b476c397cb22fda3be7af4cf2f105990fdd94c52f486 \ --hash=sha256:67ad8b2ad15a99ae70e287454a112f67d2abaf160ee9c97f9daebf2296066447 \
--hash=sha256:7c6f67005c6e421f02fd7fe9d95876094307b31628d728adc6c2e038e2ed9c09 \ --hash=sha256:6d7e6fb69d9fd2c57e177f8a9cdf6489a725da77568e3d0a226c7dd18504396a \
--hash=sha256:82b758f870c8dd859f9b58bc9cff007403b68742f9e0376e2cbd8aa2ad3baa83 \ --hash=sha256:7907d7a5adde7cd07d19f129a4afa892b68b0b52a07eaf989e48e2677040b4bf \
--hash=sha256:8528a958b746c4da767bfba5ac370250dcb741f4c69e55873bd6efe89ac07291 \ --hash=sha256:88210edafd564c8ff4a68716aaf0627e3bc43e9c192a33d6f5616743f72c2d9b \
--hash=sha256:93582ea5bc3e8f95cb36d9dd752c01452085b54b396e3ed775ac1793b8dc486a \ --hash=sha256:8a6b14a90bdcbcdc268acae87126c33bf4250d3842803a93a548d7c10135893a \
--hash=sha256:94e0105ad8d82d3bf5a032c92fc03b01e3bc9ea40b58308c2da42f8cf8c16c47 \ --hash=sha256:94a10446ad61965516aecd610a2dd28d79ab1dfd8723903e1bd19ffa985c208e \
--hash=sha256:a65889424bf10a884ff031e7f3fd12273dd5b420ee08ca8fcfd431a2f6cbabc1 \ --hash=sha256:99bda900a0bf6f9e6c69bdeb6114f7f6730b9d36a47bc1fe144263ce85bfc403 \
--hash=sha256:a8467982d26bfb90089f50c3c5d9ed541b7fe9f9df20803fede70d5046cd4ff1 \ --hash=sha256:9dae2e738622bd35ba82fe0b06f773be137a14e6b28defb2e36efc2d809cd28a \
--hash=sha256:ab497d4e7361511ede562ed3cd4528f46c005781bc23b1b943612d27bfb078c3 \ --hash=sha256:a04cd6021ff2756c38135a95f81b980485507bccbff4d2b8f62e537552270471 \
--hash=sha256:bb05caf3f6cf41d964c01e08dfaddfe48086c7b3e96708d50647f0a29ff33f56 \ --hash=sha256:a3b61625b60dd5e72556520a77464e2ac568c20b8ad12ea1f4443bf5051dc624 \
--hash=sha256:c4643647f5656855975b2aaf70fe3aa1e0c1558f8d1b5de0c9a8ccac65114c57 \ --hash=sha256:a9a91fd9e7967a5bad88d542c9fce09323e15d16cb6fa9b8978390e46e68cbdf \
--hash=sha256:c550e20834b679ed0b7608c345a816f97047d2297aab4f4599f95edee5d16e99 \ --hash=sha256:afc44f1b595bd736ec3762dd9a2d0ef276a6ac560c85f643acfc4c0bf0c73384 \
--hash=sha256:cc797712add76cd658110585481c380833637b68df1404190777ba715a81c9b9 \ --hash=sha256:b5f3c8912b36e6abb843a51eecb414a1161f80c0ca0b65066c23aa449b5f98db \
--hash=sha256:dff0c883d495bf45d18acc74938d1de4d6a08b3345acb9177a46c6997a578c44 \ --hash=sha256:cc07c8b7686dd7093f33067a02b92f4fed860d75ad2bcc4e60624f70fdb94576 \
--hash=sha256:e4f69af1f5b46255ec7b8116a853879a55e8e6b595a73c39f14ca430c410c469 \ --hash=sha256:da646eddbe026306fd1cb2c392a9aee4ebea13f2a9add9af303bb3151786a5d8 \
--hash=sha256:f61d0d83e9dd974849f9b0826ec20f49dbd9ed233fd90bf2592be1337231418e \ --hash=sha256:df93eaccd5c09e6380fab8f15c06a89944415e4bb9af64a94f467ce4c782ff8e \
--hash=sha256:f65f21d2b616c30ad4ba801504343eb768fd0a2894c5f587e784201320556543 --hash=sha256:e667303019770834354c75022ab0324d5ae5bf7cd7015939678033a58f87ee70 \
--hash=sha256:f921219040ce994c9118b7218b7f7b4e9394e507c97cfc869ce5358437fc26cd
PyQt5==5.10.1 \ PyQt5==5.10.1 \
--hash=sha256:1e652910bd1ffd23a3a48c510ecad23a57a853ed26b782cd54b16658e6f271ac \ --hash=sha256:1e652910bd1ffd23a3a48c510ecad23a57a853ed26b782cd54b16658e6f271ac \
--hash=sha256:4db7113f464c733a99fcb66c4c093a47cf7204ad3f8b3bda502efcc0839ac14b \ --hash=sha256:4db7113f464c733a99fcb66c4c093a47cf7204ad3f8b3bda502efcc0839ac14b \
--hash=sha256:9c17ab3974c1fc7bbb04cc1c9dae780522c0ebc158613f3025fccae82227b5f7 \ --hash=sha256:9c17ab3974c1fc7bbb04cc1c9dae780522c0ebc158613f3025fccae82227b5f7 \
--hash=sha256:f6035baa009acf45e5f460cf88f73580ad5dc0e72330029acd99e477f20a5d61 --hash=sha256:f6035baa009acf45e5f460cf88f73580ad5dc0e72330029acd99e477f20a5d61
setuptools==39.2.0 \ setuptools==40.0.0 \
--hash=sha256:8fca9275c89964f13da985c3656cb00ba029d7f3916b37990927ffdf264e7926 \ --hash=sha256:012adb8e25fbfd64c652e99e7bab58799a3aaf05d39ab38561f69190a909015f \
--hash=sha256:f7cddbb5f5c640311eb00eab6e849f7701fa70bf6a183fc8a2c33dd1d1672fb2 --hash=sha256:d68abee4eed409fbe8c302ac4d8429a1ffef912cd047a903b5701c024048dd49
SIP==4.19.8 \ SIP==4.19.8 \
--hash=sha256:09f9a4e6c28afd0bafedb26ffba43375b97fe7207bd1a0d3513f79b7d168b331 \ --hash=sha256:09f9a4e6c28afd0bafedb26ffba43375b97fe7207bd1a0d3513f79b7d168b331 \
--hash=sha256:105edaaa1c8aa486662226360bd3999b4b89dd56de3e314d82b83ed0587d8783 \ --hash=sha256:105edaaa1c8aa486662226360bd3999b4b89dd56de3e314d82b83ed0587d8783 \

71
contrib/deterministic-build/requirements-hw.txt

@ -9,36 +9,35 @@ chardet==3.0.4 \
click==6.7 \ click==6.7 \
--hash=sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d \ --hash=sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d \
--hash=sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b --hash=sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b
Cython==0.28.3 \ Cython==0.28.4 \
--hash=sha256:0344e9352b0915910e212c38403b63f902ce1cba75dde7a43a9112ff960eb2a5 \ --hash=sha256:01487236575df8f17b46982071438dce4f7eaf8acc8fb99fca3510d343cd7a28 \
--hash=sha256:0a390c39e912fc5f82d5feae2d16ea061971407099e1efb0fecb255cb96fbeff \ --hash=sha256:0671d17c7a27634d6819246e535241b951141ed0e3f6f2a6d618fd32344dae3e \
--hash=sha256:0f2b2e09f94c498f555935e732b7321b5f62f00e7a789238f6c5ddd66987a54d \ --hash=sha256:0e6190d6971c46729f712dd7307a9c0a8c027bfa5b4d8f2edef106b01759926c \
--hash=sha256:15614592616b6dd5e919e158796350ebeba6cb6b5d2998cfff41b53f568c8355 \ --hash=sha256:202587c754901d0678bd6ff89c707f099987928239049a528470c06c6c922cf8 \
--hash=sha256:1aae6d6e9858888144cea147eb5e677830f45faaff3d305d77378c3cba55f526 \ --hash=sha256:345197ba9278cf6a914cb7421dc665a0531a219b0072abf6b0cebfdf68e75725 \
--hash=sha256:200583297f23e558744bc4688d8a2b2605ab6ad7d1494a9fd8c8094ad65ebf3c \ --hash=sha256:3a296b8d6b02f0e01ab04bedea658f43eef5ad2f8e586a820226ead1a677d9b1 \
--hash=sha256:295facc211a6b55db9979455b856180f2839be22ab767ffdea55986bee83ca9f \ --hash=sha256:484572a2b22823a967be106137a93f7d634db116b3f7accb37dbd760eda2fa9f \
--hash=sha256:36c16bf39280fe857213d8da31c07a6179d3878c3dc2e435dce0974b9f8f0729 \ --hash=sha256:4c67c9c803e50ceff32cc5e4769c50fc8ae8df9c4e5cc592ce8310b5a1076d23 \
--hash=sha256:3fef8dfa9cf86ab7814ca31369374ddd5b9524f54406aa83b53b5937965b8e88 \ --hash=sha256:539038087c321911745fc2e77049209b1231300d481cb4d682b2f95c724814b3 \
--hash=sha256:439d233d3214e3d69c033a9a93516758f2c8a03e83ea51ae14b6eed13687d224 \ --hash=sha256:58113e0683c3688594c112103d7e9f2d0092fd2d8297a220240bea22e184dfdd \
--hash=sha256:455ab39c6c0849a6c008fcdf2fae42475f18d0801a3be229e8f75367bbe3b325 \ --hash=sha256:65cb25ca4284804293a2404d1be3b5a98818be21a72791649bacbcfa4e431d41 \
--hash=sha256:56821e3791209e6a11992e294afbf7e3dcda7d4fd54d06396dd521928d3d14fe \ --hash=sha256:699e765da2580e34b08473fc0acef3a2d7bcb7f13eb29401cd25236bcf000080 \
--hash=sha256:62b594584889b33bbea7e71f9d7c5c6539091b341334ef7ca1ae7e30a9dd3e15 \ --hash=sha256:6b54c3470810cea49a8be90814d05c5325ceb9c5bf429fd86c36fc1b32dfc157 \
--hash=sha256:70f81a75fb25c1c3c61843e3a6fe771a76c4ebf4d154455a7eff0740ad47dff4 \ --hash=sha256:71ac1629e4eae2ed329be8caf45efea10bfe1af3d8767e12e64b83e4ea5a3250 \
--hash=sha256:8011090beb09251cb4ece1e14263e574b38eda696b788552b369ad343373d0e9 \ --hash=sha256:722c179d3df8677f3daf45b1a2764678ed4f0aaddbaa7211a8a08ebfd907c0db \
--hash=sha256:80d6a0369333a162fc32a22637f5870f3e87fb038c7b58860bbe00b05b58aa62 \ --hash=sha256:76ac2b08d3d956d77b574bb43cbf1d37bd58b9d50c04ba281303e695854ebc46 \
--hash=sha256:85b04e32af58a3c008c0ba8169017770aaa342a5972b748f81d043d66363e437 \ --hash=sha256:7eff1157be9e26bf7494288c89979ca69d593a009e2c7420a739e2cf1e0635f5 \
--hash=sha256:9ed273d82116fa148c92901b9639030e087979d455982bd7bf727fb486c0bd17 \ --hash=sha256:99546c8696d27d0efa639c77b2f8af6e61dc3a5073caae4f27ffd991ca926f42 \
--hash=sha256:a1af59e6c9b4acc07c429d8495fc016a35e0a1270f28c57317352f512df7e214 \ --hash=sha256:a0c263b31d335f29c11f4a9e98fbcd908d0731d4ea99bfd27c1c47caaeb4ca2e \
--hash=sha256:b894ff4daf8dfaf657bf2d5e7190a4de11b2400b1e0fb0902974d35c23a26dea \ --hash=sha256:a29c66292605bff962adc26530c030607aa699206b12dfb84f131b0454e15df4 \
--hash=sha256:c2659981150b4de04397dcfd4bff64e384d3ba25af60d1b22820fdf108298cb2 \ --hash=sha256:a4d3724c5a1ddd86d7d830d8e02c40151839b833791dd4b6fe9e144380fa7d37 \
--hash=sha256:c981a750858f1727995acf861ab030b267d264ca6efda2f01104941187a3675f \ --hash=sha256:aed9f33b19d542eea56c38ef3862ca56147f7903648156cd57eabb0fe47c35d6 \
--hash=sha256:cc4152b19ec168391f7815d24b70c8911829ba281bd5fcd98cab9dc21abe62ff \ --hash=sha256:b57e733dd8871d2cc7358c2e0fe33027453afffbcd0ea6a537f54877cad5131c \
--hash=sha256:d0f5b1668e7f7f6fc9849f49a20c5db10562a0ab29cd66818894dfebbca7b304 \ --hash=sha256:d5bf4db62236e82955c40bafbaa18d54b20b5ceefa06fb57c7facc443929f4bd \
--hash=sha256:d7152006ed1a3adb8f978077b57d237ddafa188240af53cd72b5c79e4ed000e3 \ --hash=sha256:d9272dd71ab78e87fa34a0a59bbd6acc9a9c0005c834a6fc8457ff9619dc6795 \
--hash=sha256:e5f877472993474296125c22b84c334b550010815e513cccce73da854a132d64 \ --hash=sha256:e9d5671bcbb90a41b0832fcb3872fcbaca3d68ff11ea09724dd6cbdf31d947fb \
--hash=sha256:e7c2c87ff2f99ed4be1bb046d6eddfb388af627928037f9e0a420c05daaf14ed \ --hash=sha256:ee54646afb2b73b293c94cf079682d18d404ebd6c01122dc3980f111aec2d8ae \
--hash=sha256:edd7d499685655031be5b4d33005096b6345f81eeb7ab9d2dd415db0c7bcf64e \ --hash=sha256:f16a87197939977824609005b73f9ebb291b9653a14e5f27afc1c5d6f981ba39
--hash=sha256:f99a777fda569a88deea863eac2722b5e88957c4d5f4413949740da791857ac9
ecdsa==0.13 \ ecdsa==0.13 \
--hash=sha256:40d002cf360d0e035cf2cb985e1308d41aaa087cbfc135b2dc2d844296ea546c \ --hash=sha256:40d002cf360d0e035cf2cb985e1308d41aaa087cbfc135b2dc2d844296ea546c \
--hash=sha256:64cf1ee26d1cde3c73c6d7d107f835fed7c6a2904aef9eac223d57ad800c43fa --hash=sha256:64cf1ee26d1cde3c73c6d7d107f835fed7c6a2904aef9eac223d57ad800c43fa
@ -95,15 +94,15 @@ pyblake2==1.1.2 \
requests==2.19.1 \ requests==2.19.1 \
--hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 \ --hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 \
--hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a --hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a
setuptools==39.2.0 \ setuptools==40.0.0 \
--hash=sha256:8fca9275c89964f13da985c3656cb00ba029d7f3916b37990927ffdf264e7926 \ --hash=sha256:012adb8e25fbfd64c652e99e7bab58799a3aaf05d39ab38561f69190a909015f \
--hash=sha256:f7cddbb5f5c640311eb00eab6e849f7701fa70bf6a183fc8a2c33dd1d1672fb2 --hash=sha256:d68abee4eed409fbe8c302ac4d8429a1ffef912cd047a903b5701c024048dd49
six==1.11.0 \ six==1.11.0 \
--hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \
--hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb
trezor==0.10.1 \ trezor==0.10.2 \
--hash=sha256:09b4edfa83b787975c6f30728c13bb413621d5bdf722231748758ba0181b8a60 \ --hash=sha256:4dba4d5c53d3ca22884d79fb4aa68905fb8353a5da5f96c734645d8cf537138d \
--hash=sha256:5bcad3e97129fccd6f8b4cf08f81862e423373617c857feb492cfa1b1807844e --hash=sha256:d2b32f25982ab403758d870df1d0de86d0751c106ef1cd1289f452880ce68b84
urllib3==1.23 \ urllib3==1.23 \
--hash=sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf \ --hash=sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf \
--hash=sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5 --hash=sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5

9
contrib/deterministic-build/requirements.txt

@ -41,15 +41,18 @@ pyaes==1.6.1 \
--hash=sha256:02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f --hash=sha256:02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f
PySocks==1.6.8 \ PySocks==1.6.8 \
--hash=sha256:3fe52c55890a248676fd69dc9e3c4e811718b777834bcaab7a8125cf9deac672 --hash=sha256:3fe52c55890a248676fd69dc9e3c4e811718b777834bcaab7a8125cf9deac672
QDarkStyle==2.5.4 \
--hash=sha256:3eb60922b8c4d9cedecb6897ca4c9f8a259d81bdefe5791976ccdf12432de1f0 \
--hash=sha256:51331fc6490b38c376e6ba8d8c814320c8d2d1c2663055bc396321a7c28fa8be
qrcode==6.0 \ qrcode==6.0 \
--hash=sha256:037b0db4c93f44586e37f84c3da3f763874fcac85b2974a69a98e399ac78e1bf \ --hash=sha256:037b0db4c93f44586e37f84c3da3f763874fcac85b2974a69a98e399ac78e1bf \
--hash=sha256:de4ffc15065e6ff20a551ad32b6b41264f3c75275675406ddfa8e3530d154be3 --hash=sha256:de4ffc15065e6ff20a551ad32b6b41264f3c75275675406ddfa8e3530d154be3
requests==2.19.1 \ requests==2.19.1 \
--hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 \ --hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 \
--hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a --hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a
setuptools==39.2.0 \ setuptools==40.0.0 \
--hash=sha256:8fca9275c89964f13da985c3656cb00ba029d7f3916b37990927ffdf264e7926 \ --hash=sha256:012adb8e25fbfd64c652e99e7bab58799a3aaf05d39ab38561f69190a909015f \
--hash=sha256:f7cddbb5f5c640311eb00eab6e849f7701fa70bf6a183fc8a2c33dd1d1672fb2 --hash=sha256:d68abee4eed409fbe8c302ac4d8429a1ffef912cd047a903b5701c024048dd49
six==1.11.0 \ six==1.11.0 \
--hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \
--hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb

2
contrib/make_apk

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
pushd ./gui/kivy/ pushd ./electrum/gui/kivy/
if [[ -n "$1" && "$1" == "release" ]] ; then if [[ -n "$1" && "$1" == "release" ]] ; then
echo -n Keystore Password: echo -n Keystore Password:

11
contrib/make_locale

@ -8,8 +8,7 @@ import requests
os.chdir(os.path.dirname(os.path.realpath(__file__))) os.chdir(os.path.dirname(os.path.realpath(__file__)))
os.chdir('..') os.chdir('..')
code_directories = 'gui plugins lib' cmd = "find electrum -type f -name '*.py' -o -name '*.kv'"
cmd = "find {} -type f -name '*.py' -o -name '*.kv'".format(code_directories)
files = subprocess.check_output(cmd, shell=True) files = subprocess.check_output(cmd, shell=True)
@ -19,13 +18,13 @@ with open("app.fil", "wb") as f:
print("Found {} files to translate".format(len(files.splitlines()))) print("Found {} files to translate".format(len(files.splitlines())))
# Generate fresh translation template # Generate fresh translation template
if not os.path.exists('lib/locale'): if not os.path.exists('electrum/locale'):
os.mkdir('lib/locale') os.mkdir('electrum/locale')
cmd = 'xgettext -s --from-code UTF-8 --language Python --no-wrap -f app.fil --output=lib/locale/messages.pot' cmd = 'xgettext -s --from-code UTF-8 --language Python --no-wrap -f app.fil --output=electrum/locale/messages.pot'
print('Generate template') print('Generate template')
os.system(cmd) os.system(cmd)
os.chdir('lib') os.chdir('electrum')
crowdin_identifier = 'electrum' crowdin_identifier = 'electrum'
crowdin_file_name = 'files[electrum-client/messages.pot]' crowdin_file_name = 'files[electrum-client/messages.pot]'

2
contrib/requirements/requirements-binaries.txt

@ -1,2 +1,2 @@
PyQt5 PyQt5<5.11
pycryptodomex pycryptodomex

2
electrum-env

@ -22,6 +22,6 @@ fi
export PYTHONPATH="/usr/local/lib/python${PYTHON_VER}/site-packages:$PYTHONPATH" export PYTHONPATH="/usr/local/lib/python${PYTHON_VER}/site-packages:$PYTHONPATH"
./electrum "$@" ./run_electrum "$@"
deactivate deactivate

2
lib/__init__.py → electrum/__init__.py

@ -10,5 +10,5 @@ from . import bitcoin
from . import transaction from . import transaction
from . import daemon from . import daemon
from .transaction import Transaction from .transaction import Transaction
from .plugins import BasePlugin from .plugin import BasePlugin
from .commands import Commands, known_commands from .commands import Commands, known_commands

5
lib/base_crash_reporter.py → electrum/base_crash_reporter.py

@ -28,8 +28,9 @@ import os
import requests import requests
from electrum import ELECTRUM_VERSION, constants from .version import ELECTRUM_VERSION
from electrum.i18n import _ from .import constants
from .i18n import _
class BaseCrashReporter(object): class BaseCrashReporter(object):

0
lib/base_wizard.py → electrum/base_wizard.py

0
lib/bitcoin.py → electrum/bitcoin.py

6
lib/blockchain.py → electrum/blockchain.py

@ -34,6 +34,8 @@ MAX_TARGET = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
class MissingHeader(Exception): class MissingHeader(Exception):
pass pass
class InvalidHeader(Exception):
pass
def serialize_header(res): def serialize_header(res):
s = int_to_hex(res.get('version'), 4) \ s = int_to_hex(res.get('version'), 4) \
@ -46,9 +48,9 @@ def serialize_header(res):
def deserialize_header(s, height): def deserialize_header(s, height):
if not s: if not s:
raise Exception('Invalid header: {}'.format(s)) raise InvalidHeader('Invalid header: {}'.format(s))
if len(s) != 80: if len(s) != 80:
raise Exception('Invalid header length: {}'.format(len(s))) raise InvalidHeader('Invalid header length: {}'.format(len(s)))
hex_to_int = lambda s: int('0x' + bh2u(s[::-1]), 16) hex_to_int = lambda s: int('0x' + bh2u(s[::-1]), 16)
h = {} h = {}
h['version'] = hex_to_int(s[0:4]) h['version'] = hex_to_int(s[0:4])

0
lib/checkpoints.json → electrum/checkpoints.json

0
lib/checkpoints_testnet.json → electrum/checkpoints_testnet.json

0
lib/coinchooser.py → electrum/coinchooser.py

4
lib/commands.py → electrum/commands.py

@ -35,12 +35,12 @@ from decimal import Decimal
from .import util, ecc from .import util, ecc
from .util import bfh, bh2u, format_satoshis, json_decode, print_error, json_encode from .util import bfh, bh2u, format_satoshis, json_decode, print_error, json_encode
from .import bitcoin from . import bitcoin
from .bitcoin import is_address, hash_160, COIN, TYPE_ADDRESS from .bitcoin import is_address, hash_160, COIN, TYPE_ADDRESS
from .i18n import _ from .i18n import _
from .transaction import Transaction, multisig_script from .transaction import Transaction, multisig_script
from .paymentrequest import PR_PAID, PR_UNPAID, PR_UNKNOWN, PR_EXPIRED from .paymentrequest import PR_PAID, PR_UNPAID, PR_UNKNOWN, PR_EXPIRED
from .plugins import run_hook from .plugin import run_hook
known_commands = {} known_commands = {}

0
lib/constants.py → electrum/constants.py

0
lib/contacts.py → electrum/contacts.py

0
lib/crypto.py → electrum/crypto.py

8
lib/currencies.json → electrum/currencies.json

@ -341,6 +341,12 @@
"Bitcointoyou": [ "Bitcointoyou": [
"BRL" "BRL"
], ],
"BitcoinVenezuela": [
"ARS",
"EUR",
"USD",
"VEF"
],
"Bitmarket": [ "Bitmarket": [
"PLN" "PLN"
], ],
@ -814,4 +820,4 @@
"USD" "USD"
], ],
"itBit": [] "itBit": []
} }

4
lib/daemon.py → electrum/daemon.py

@ -41,7 +41,7 @@ from .storage import WalletStorage
from .commands import known_commands, Commands from .commands import known_commands, Commands
from .simple_config import SimpleConfig from .simple_config import SimpleConfig
from .exchange_rate import FxThread from .exchange_rate import FxThread
from .plugins import run_hook from .plugin import run_hook
def get_lockfile(config): def get_lockfile(config):
@ -307,7 +307,7 @@ class Daemon(DaemonThread):
gui_name = config.get('gui', 'qt') gui_name = config.get('gui', 'qt')
if gui_name in ['lite', 'classic']: if gui_name in ['lite', 'classic']:
gui_name = 'qt' gui_name = 'qt'
gui = __import__('electrum_gui.' + gui_name, fromlist=['electrum_gui']) gui = __import__('electrum.gui.' + gui_name, fromlist=['electrum'])
self.gui = gui.ElectrumGui(config, self, plugins) self.gui = gui.ElectrumGui(config, self, plugins)
try: try:
self.gui.main() self.gui.main()

0
lib/dnssec.py → electrum/dnssec.py

0
lib/ecc.py → electrum/ecc.py

0
lib/ecc_fast.py → electrum/ecc_fast.py

1
electrum/electrum

@ -0,0 +1 @@
../run_electrum

0
lib/exchange_rate.py → electrum/exchange_rate.py

0
gui/__init__.py → electrum/gui/__init__.py

16
gui/kivy/Makefile → electrum/gui/kivy/Makefile

@ -8,25 +8,25 @@ theming:
$(PYTHON) -m kivy.atlas theming/light 1024 theming/light/*.png $(PYTHON) -m kivy.atlas theming/light 1024 theming/light/*.png
prepare: prepare:
# running pre build setup # running pre build setup
@cp tools/buildozer.spec ../../buildozer.spec @cp tools/buildozer.spec ../../../buildozer.spec
# copy electrum to main.py # copy electrum to main.py
@cp ../../electrum ../../main.py @cp ../../../run_electrum ../../../main.py
@-if [ ! -d "../../.buildozer" ];then \ @-if [ ! -d "../../.buildozer" ];then \
cd ../..; buildozer android debug;\ cd ../../..; buildozer android debug;\
cp -f gui/kivy/tools/blacklist.txt .buildozer/android/platform/python-for-android/src/blacklist.txt;\ cp -f electrum/gui/kivy/tools/blacklist.txt .buildozer/android/platform/python-for-android/src/blacklist.txt;\
rm -rf ./.buildozer/android/platform/python-for-android/dist;\ rm -rf ./.buildozer/android/platform/python-for-android/dist;\
fi fi
apk: apk:
@make prepare @make prepare
@-cd ../..; buildozer android debug deploy run @-cd ../../..; buildozer android debug deploy run
@make clean @make clean
release: release:
@make prepare @make prepare
@-cd ../..; buildozer android release @-cd ../../..; buildozer android release
@make clean @make clean
clean: clean:
# Cleaning up # Cleaning up
# rename main.py to electrum # rename main.py to electrum
@-rm ../../main.py @-rm ../../../main.py
# remove buildozer.spec # remove buildozer.spec
@-rm ../../buildozer.spec @-rm ../../../buildozer.spec

10
gui/kivy/Readme.md → electrum/gui/kivy/Readme.md

@ -112,15 +112,7 @@ e.g. those needed in the next step.
~/.buildozer/android/platform/android-sdk-20/tools/android update sdk -u -t build-tools-27.0.3,android-19,extra-android-m2repository ~/.buildozer/android/platform/android-sdk-20/tools/android update sdk -u -t build-tools-27.0.3,android-19,extra-android-m2repository
## 9. Set apk version ## 9. Build the APK
Create a file `contrib/versions.py` with contents similar to:
```
version_apk = '3.1.999'
```
This will be the version of the Android app.
## 10. Build the APK
```sh ```sh
contrib/make_apk contrib/make_apk

0
gui/kivy/__init__.py → electrum/gui/kivy/__init__.py

0
gui/kivy/data/background.png → electrum/gui/kivy/data/background.png

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

0
gui/kivy/data/fonts/Roboto-Bold.ttf → electrum/gui/kivy/data/fonts/Roboto-Bold.ttf

0
gui/kivy/data/fonts/Roboto-Condensed.ttf → electrum/gui/kivy/data/fonts/Roboto-Condensed.ttf

0
gui/kivy/data/fonts/Roboto-Medium.ttf → electrum/gui/kivy/data/fonts/Roboto-Medium.ttf

0
gui/kivy/data/fonts/Roboto.ttf → electrum/gui/kivy/data/fonts/Roboto.ttf

0
gui/kivy/data/fonts/tron/License.txt → electrum/gui/kivy/data/fonts/tron/License.txt

0
gui/kivy/data/fonts/tron/Readme.txt → electrum/gui/kivy/data/fonts/tron/Readme.txt

0
gui/kivy/data/fonts/tron/Tr2n.ttf → electrum/gui/kivy/data/fonts/tron/Tr2n.ttf

0
gui/kivy/data/glsl/default.fs → electrum/gui/kivy/data/glsl/default.fs

0
gui/kivy/data/glsl/default.png → electrum/gui/kivy/data/glsl/default.png

Before

Width:  |  Height:  |  Size: 224 B

After

Width:  |  Height:  |  Size: 224 B

0
gui/kivy/data/glsl/default.vs → electrum/gui/kivy/data/glsl/default.vs

0
gui/kivy/data/glsl/header.fs → electrum/gui/kivy/data/glsl/header.fs

0
gui/kivy/data/glsl/header.vs → electrum/gui/kivy/data/glsl/header.vs

0
gui/kivy/data/images/defaulttheme-0.png → electrum/gui/kivy/data/images/defaulttheme-0.png

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

0
gui/kivy/data/images/defaulttheme.atlas → electrum/gui/kivy/data/images/defaulttheme.atlas

0
gui/kivy/data/java-classes/org/electrum/qr/SimpleScannerActivity.java → electrum/gui/kivy/data/java-classes/org/electrum/qr/SimpleScannerActivity.java

0
gui/kivy/data/logo/kivy-icon-32.png → electrum/gui/kivy/data/logo/kivy-icon-32.png

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

0
gui/kivy/data/style.kv → electrum/gui/kivy/data/style.kv

0
gui/kivy/i18n.py → electrum/gui/kivy/i18n.py

16
gui/kivy/main.kv → electrum/gui/kivy/main.kv

@ -1,7 +1,7 @@
#:import Clock kivy.clock.Clock #:import Clock kivy.clock.Clock
#:import Window kivy.core.window.Window #:import Window kivy.core.window.Window
#:import Factory kivy.factory.Factory #:import Factory kivy.factory.Factory
#:import _ electrum_gui.kivy.i18n._ #:import _ electrum.gui.kivy.i18n._
########################### ###########################
@ -189,7 +189,7 @@
Color: Color:
rgba: 0.192, .498, 0.745, 1 rgba: 0.192, .498, 0.745, 1
BorderImage: BorderImage:
source: 'atlas://gui/kivy/theming/light/card_bottom' source: 'atlas://electrum/gui/kivy/theming/light/card_bottom'
size: self.size size: self.size
pos: self.pos pos: self.pos
@ -203,7 +203,7 @@
Color: Color:
rgba: 0.192, .498, 0.745, 1 rgba: 0.192, .498, 0.745, 1
BorderImage: BorderImage:
source: 'atlas://gui/kivy/theming/light/card_bottom' source: 'atlas://electrum/gui/kivy/theming/light/card_bottom'
size: self.size size: self.size
pos: self.pos pos: self.pos
@ -216,7 +216,7 @@
Color: Color:
rgba: 0.192, .498, 0.745, 1 rgba: 0.192, .498, 0.745, 1
BorderImage: BorderImage:
source: 'atlas://gui/kivy/theming/light/card_bottom' source: 'atlas://electrum/gui/kivy/theming/light/card_bottom'
size: self.size size: self.size
pos: self.pos pos: self.pos
@ -326,8 +326,8 @@
valign: 'middle' valign: 'middle'
bold: True bold: True
font_size: '12.5sp' font_size: '12.5sp'
background_normal: 'atlas://gui/kivy/theming/light/tab_btn' background_normal: 'atlas://electrum/gui/kivy/theming/light/tab_btn'
background_down: 'atlas://gui/kivy/theming/light/tab_btn_pressed' background_down: 'atlas://electrum/gui/kivy/theming/light/tab_btn_pressed'
<ColoredLabel@Label>: <ColoredLabel@Label>:
@ -416,14 +416,14 @@ BoxLayout:
rgb: .6, .6, .6 rgb: .6, .6, .6
Rectangle: Rectangle:
size: self.size size: self.size
source: 'gui/kivy/data/background.png' source: 'electrum/gui/kivy/data/background.png'
ActionBar: ActionBar:
ActionView: ActionView:
id: av id: av
ActionPrevious: ActionPrevious:
app_icon: 'atlas://gui/kivy/theming/light/logo' app_icon: 'atlas://electrum/gui/kivy/theming/light/logo'
app_icon_width: '100dp' app_icon_width: '100dp'
with_previous: False with_previous: False
size_hint_x: None size_hint_x: None

46
gui/kivy/main_window.py → electrum/gui/kivy/main_window.py

@ -7,13 +7,13 @@ import traceback
from decimal import Decimal from decimal import Decimal
import threading import threading
import electrum
from electrum.bitcoin import TYPE_ADDRESS from electrum.bitcoin import TYPE_ADDRESS
from electrum import WalletStorage, Wallet from electrum.storage import WalletStorage
from electrum_gui.kivy.i18n import _ from electrum.wallet import Wallet
from electrum.i18n import _
from electrum.paymentrequest import InvoiceStore from electrum.paymentrequest import InvoiceStore
from electrum.util import profiler, InvalidPassword from electrum.util import profiler, InvalidPassword
from electrum.plugins import run_hook from electrum.plugin import run_hook
from electrum.util import format_satoshis, format_satoshis_plain from electrum.util import format_satoshis, format_satoshis_plain
from electrum.paymentrequest import PR_UNPAID, PR_PAID, PR_UNKNOWN, PR_EXPIRED from electrum.paymentrequest import PR_UNPAID, PR_PAID, PR_UNKNOWN, PR_EXPIRED
@ -30,10 +30,10 @@ from kivy.metrics import inch
from kivy.lang import Builder from kivy.lang import Builder
## lazy imports for factory so that widgets can be used in kv ## lazy imports for factory so that widgets can be used in kv
#Factory.register('InstallWizard', module='electrum_gui.kivy.uix.dialogs.installwizard') #Factory.register('InstallWizard', module='electrum.gui.kivy.uix.dialogs.installwizard')
#Factory.register('InfoBubble', module='electrum_gui.kivy.uix.dialogs') #Factory.register('InfoBubble', module='electrum.gui.kivy.uix.dialogs')
#Factory.register('OutputList', module='electrum_gui.kivy.uix.dialogs') #Factory.register('OutputList', module='electrum.gui.kivy.uix.dialogs')
#Factory.register('OutputItem', module='electrum_gui.kivy.uix.dialogs') #Factory.register('OutputItem', module='electrum.gui.kivy.uix.dialogs')
from .uix.dialogs.installwizard import InstallWizard from .uix.dialogs.installwizard import InstallWizard
from .uix.dialogs import InfoBubble, crash_reporter from .uix.dialogs import InfoBubble, crash_reporter
@ -56,16 +56,16 @@ from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.label import Label from kivy.uix.label import Label
from kivy.core.clipboard import Clipboard from kivy.core.clipboard import Clipboard
Factory.register('TabbedCarousel', module='electrum_gui.kivy.uix.screens') Factory.register('TabbedCarousel', module='electrum.gui.kivy.uix.screens')
# Register fonts without this you won't be able to use bold/italic... # Register fonts without this you won't be able to use bold/italic...
# inside markup. # inside markup.
from kivy.core.text import Label from kivy.core.text import Label
Label.register('Roboto', Label.register('Roboto',
'gui/kivy/data/fonts/Roboto.ttf', 'electrum/gui/kivy/data/fonts/Roboto.ttf',
'gui/kivy/data/fonts/Roboto.ttf', 'electrum/gui/kivy/data/fonts/Roboto.ttf',
'gui/kivy/data/fonts/Roboto-Bold.ttf', 'electrum/gui/kivy/data/fonts/Roboto-Bold.ttf',
'gui/kivy/data/fonts/Roboto-Bold.ttf') 'electrum/gui/kivy/data/fonts/Roboto-Bold.ttf')
from electrum.util import (base_units, NoDynamicFeeEstimates, decimal_point_to_base_unit_name, from electrum.util import (base_units, NoDynamicFeeEstimates, decimal_point_to_base_unit_name,
@ -363,7 +363,7 @@ class ElectrumWindow(App):
memo = req.get('memo') memo = req.get('memo')
amount = req.get('amount') amount = req.get('amount')
fund = req.get('fund') fund = req.get('fund')
popup = Builder.load_file('gui/kivy/uix/ui_screens/invoice.kv') popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/invoice.kv')
popup.is_invoice = is_invoice popup.is_invoice = is_invoice
popup.amount = amount popup.amount = amount
popup.requestor = requestor if is_invoice else req.get('address') popup.requestor = requestor if is_invoice else req.get('address')
@ -382,7 +382,7 @@ class ElectrumWindow(App):
from electrum.util import format_time from electrum.util import format_time
fund = req.get('fund') fund = req.get('fund')
isaddr = 'y' isaddr = 'y'
popup = Builder.load_file('gui/kivy/uix/ui_screens/invoice.kv') popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/invoice.kv')
popup.isaddr = isaddr popup.isaddr = isaddr
popup.is_invoice = False popup.is_invoice = False
popup.status = status popup.status = status
@ -435,7 +435,7 @@ class ElectrumWindow(App):
currentActivity.startActivity(it) currentActivity.startActivity(it)
def build(self): def build(self):
return Builder.load_file('gui/kivy/main.kv') return Builder.load_file('electrum/gui/kivy/main.kv')
def _pause(self): def _pause(self):
if platform == 'android': if platform == 'android':
@ -592,7 +592,7 @@ class ElectrumWindow(App):
d = WalletDialog() d = WalletDialog()
d.open() d.open()
elif name == 'status': elif name == 'status':
popup = Builder.load_file('gui/kivy/uix/ui_screens/'+name+'.kv') popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/'+name+'.kv')
master_public_keys_layout = popup.ids.master_public_keys master_public_keys_layout = popup.ids.master_public_keys
for xpub in self.wallet.get_master_public_keys()[1:]: for xpub in self.wallet.get_master_public_keys()[1:]:
master_public_keys_layout.add_widget(TopLabel(text=_('Master Public Key'))) master_public_keys_layout.add_widget(TopLabel(text=_('Master Public Key')))
@ -602,7 +602,7 @@ class ElectrumWindow(App):
master_public_keys_layout.add_widget(ref) master_public_keys_layout.add_widget(ref)
popup.open() popup.open()
else: else:
popup = Builder.load_file('gui/kivy/uix/ui_screens/'+name+'.kv') popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/'+name+'.kv')
popup.open() popup.open()
@profiler @profiler
@ -618,9 +618,9 @@ class ElectrumWindow(App):
#setup lazy imports for mainscreen #setup lazy imports for mainscreen
Factory.register('AnimatedPopup', Factory.register('AnimatedPopup',
module='electrum_gui.kivy.uix.dialogs') module='electrum.gui.kivy.uix.dialogs')
Factory.register('QRCodeWidget', Factory.register('QRCodeWidget',
module='electrum_gui.kivy.uix.qrcodewidget') module='electrum.gui.kivy.uix.qrcodewidget')
# preload widgets. Remove this if you want to load the widgets on demand # preload widgets. Remove this if you want to load the widgets on demand
#Cache.append('electrum_widgets', 'AnimatedPopup', Factory.AnimatedPopup()) #Cache.append('electrum_widgets', 'AnimatedPopup', Factory.AnimatedPopup())
@ -777,7 +777,7 @@ class ElectrumWindow(App):
self.send_payment(address, amount=amount, label=label, message=message) self.send_payment(address, amount=amount, label=label, message=message)
def show_error(self, error, width='200dp', pos=None, arrow_pos=None, def show_error(self, error, width='200dp', pos=None, arrow_pos=None,
exit=False, icon='atlas://gui/kivy/theming/light/error', duration=0, exit=False, icon='atlas://electrum/gui/kivy/theming/light/error', duration=0,
modal=False): modal=False):
''' Show an error Message Bubble. ''' Show an error Message Bubble.
''' '''
@ -789,7 +789,7 @@ class ElectrumWindow(App):
exit=False, duration=0, modal=False): exit=False, duration=0, modal=False):
''' Show an Info Message Bubble. ''' Show an Info Message Bubble.
''' '''
self.show_error(error, icon='atlas://gui/kivy/theming/light/important', self.show_error(error, icon='atlas://electrum/gui/kivy/theming/light/important',
duration=duration, modal=modal, exit=exit, pos=pos, duration=duration, modal=modal, exit=exit, pos=pos,
arrow_pos=arrow_pos) arrow_pos=arrow_pos)
@ -829,7 +829,7 @@ class ElectrumWindow(App):
info_bubble.show_arrow = False info_bubble.show_arrow = False
img.allow_stretch = True img.allow_stretch = True
info_bubble.dim_background = True info_bubble.dim_background = True
info_bubble.background_image = 'atlas://gui/kivy/theming/light/card' info_bubble.background_image = 'atlas://electrum/gui/kivy/theming/light/card'
else: else:
info_bubble.fs = False info_bubble.fs = False
info_bubble.icon = icon info_bubble.icon = icon

2
gui/kivy/nfc_scanner/__init__.py → electrum/gui/kivy/nfc_scanner/__init__.py

@ -41,4 +41,4 @@ class NFCBase(Widget):
NFCScanner = core_select_lib('nfc_manager', ( NFCScanner = core_select_lib('nfc_manager', (
# keep the dummy implementation as the last one to make it the fallback provider.NFCScanner = core_select_lib('nfc_scanner', ( # keep the dummy implementation as the last one to make it the fallback provider.NFCScanner = core_select_lib('nfc_scanner', (
('android', 'scanner_android', 'ScannerAndroid'), ('android', 'scanner_android', 'ScannerAndroid'),
('dummy', 'scanner_dummy', 'ScannerDummy')), True, 'electrum_gui.kivy') ('dummy', 'scanner_dummy', 'ScannerDummy')), True, 'electrum.gui.kivy')

2
gui/kivy/nfc_scanner/scanner_android.py → electrum/gui/kivy/nfc_scanner/scanner_android.py

@ -10,7 +10,7 @@ if platform != 'android':
raise ImportError raise ImportError
import threading import threading
from electrum_gui.kivy.nfc_scanner import NFCBase from . import NFCBase
from jnius import autoclass, cast from jnius import autoclass, cast
from android.runnable import run_on_ui_thread from android.runnable import run_on_ui_thread
from android import activity from android import activity

2
gui/kivy/nfc_scanner/scanner_dummy.py → electrum/gui/kivy/nfc_scanner/scanner_dummy.py

@ -1,6 +1,6 @@
''' Dummy NFC Provider to be used on desktops in case no other provider is found ''' Dummy NFC Provider to be used on desktops in case no other provider is found
''' '''
from electrum_gui.kivy.nfc_scanner import NFCBase from . import NFCBase
from kivy.clock import Clock from kivy.clock import Clock
from kivy.logger import Logger from kivy.logger import Logger

0
gui/kivy/theming/light/action_bar.png → electrum/gui/kivy/theming/light/action_bar.png

Before

Width:  |  Height:  |  Size: 552 B

After

Width:  |  Height:  |  Size: 552 B

0
gui/kivy/theming/light/action_button_group.png → electrum/gui/kivy/theming/light/action_button_group.png

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 188 B

0
gui/kivy/theming/light/action_group_dark.png → electrum/gui/kivy/theming/light/action_group_dark.png

Before

Width:  |  Height:  |  Size: 380 B

After

Width:  |  Height:  |  Size: 380 B

0
gui/kivy/theming/light/action_group_light.png → electrum/gui/kivy/theming/light/action_group_light.png

Before

Width:  |  Height:  |  Size: 375 B

After

Width:  |  Height:  |  Size: 375 B

0
gui/kivy/theming/light/add_contact.png → electrum/gui/kivy/theming/light/add_contact.png

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

0
gui/kivy/theming/light/arrow_back.png → electrum/gui/kivy/theming/light/arrow_back.png

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

0
gui/kivy/theming/light/bit_logo.png → electrum/gui/kivy/theming/light/bit_logo.png

Before

Width:  |  Height:  |  Size: 683 B

After

Width:  |  Height:  |  Size: 683 B

0
gui/kivy/theming/light/blue_bg_round_rb.png → electrum/gui/kivy/theming/light/blue_bg_round_rb.png

Before

Width:  |  Height:  |  Size: 242 B

After

Width:  |  Height:  |  Size: 242 B

0
gui/kivy/theming/light/btn_create_account.png → electrum/gui/kivy/theming/light/btn_create_account.png

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 311 B

0
gui/kivy/theming/light/btn_create_act_disabled.png → electrum/gui/kivy/theming/light/btn_create_act_disabled.png

Before

Width:  |  Height:  |  Size: 427 B

After

Width:  |  Height:  |  Size: 427 B

0
gui/kivy/theming/light/btn_nfc.png → electrum/gui/kivy/theming/light/btn_nfc.png

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

0
gui/kivy/theming/light/btn_send_address.png → electrum/gui/kivy/theming/light/btn_send_address.png

Before

Width:  |  Height:  |  Size: 210 B

After

Width:  |  Height:  |  Size: 210 B

0
gui/kivy/theming/light/btn_send_nfc.png → electrum/gui/kivy/theming/light/btn_send_nfc.png

Before

Width:  |  Height:  |  Size: 209 B

After

Width:  |  Height:  |  Size: 209 B

0
gui/kivy/theming/light/calculator.png → electrum/gui/kivy/theming/light/calculator.png

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

0
gui/kivy/theming/light/camera.png → electrum/gui/kivy/theming/light/camera.png

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

0
gui/kivy/theming/light/card.png → electrum/gui/kivy/theming/light/card.png

Before

Width:  |  Height:  |  Size: 866 B

After

Width:  |  Height:  |  Size: 866 B

0
gui/kivy/theming/light/card_bottom.png → electrum/gui/kivy/theming/light/card_bottom.png

Before

Width:  |  Height:  |  Size: 383 B

After

Width:  |  Height:  |  Size: 383 B

0
gui/kivy/theming/light/card_btn.png → electrum/gui/kivy/theming/light/card_btn.png

Before

Width:  |  Height:  |  Size: 357 B

After

Width:  |  Height:  |  Size: 357 B

0
gui/kivy/theming/light/card_top.png → electrum/gui/kivy/theming/light/card_top.png

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 550 B

0
gui/kivy/theming/light/carousel_deselected.png → electrum/gui/kivy/theming/light/carousel_deselected.png

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

0
gui/kivy/theming/light/carousel_selected.png → electrum/gui/kivy/theming/light/carousel_selected.png

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

0
gui/kivy/theming/light/clock1.png → electrum/gui/kivy/theming/light/clock1.png

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

0
gui/kivy/theming/light/clock2.png → electrum/gui/kivy/theming/light/clock2.png

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

0
gui/kivy/theming/light/clock3.png → electrum/gui/kivy/theming/light/clock3.png

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

0
gui/kivy/theming/light/clock4.png → electrum/gui/kivy/theming/light/clock4.png

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

0
gui/kivy/theming/light/clock5.png → electrum/gui/kivy/theming/light/clock5.png

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

0
gui/kivy/theming/light/close.png → electrum/gui/kivy/theming/light/close.png

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

0
gui/kivy/theming/light/closebutton.png → electrum/gui/kivy/theming/light/closebutton.png

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

0
gui/kivy/theming/light/confirmed.png → electrum/gui/kivy/theming/light/confirmed.png

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

0
gui/kivy/theming/light/contact.png → electrum/gui/kivy/theming/light/contact.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
gui/kivy/theming/light/contact_overlay.png → electrum/gui/kivy/theming/light/contact_overlay.png

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

0
gui/kivy/theming/light/create_act_text.png → electrum/gui/kivy/theming/light/create_act_text.png

Before

Width:  |  Height:  |  Size: 330 B

After

Width:  |  Height:  |  Size: 330 B

0
gui/kivy/theming/light/create_act_text_active.png → electrum/gui/kivy/theming/light/create_act_text_active.png

Before

Width:  |  Height:  |  Size: 308 B

After

Width:  |  Height:  |  Size: 308 B

0
gui/kivy/theming/light/dialog.png → electrum/gui/kivy/theming/light/dialog.png

Before

Width:  |  Height:  |  Size: 393 B

After

Width:  |  Height:  |  Size: 393 B

0
gui/kivy/theming/light/dropdown_background.png → electrum/gui/kivy/theming/light/dropdown_background.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
gui/kivy/theming/light/electrum_icon640.png → electrum/gui/kivy/theming/light/electrum_icon640.png

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 178 KiB

0
gui/kivy/theming/light/error.png → electrum/gui/kivy/theming/light/error.png

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

0
gui/kivy/theming/light/gear.png → electrum/gui/kivy/theming/light/gear.png

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

0
gui/kivy/theming/light/globe.png → electrum/gui/kivy/theming/light/globe.png

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save