GithubHelp home page GithubHelp logo

bitcoin-abc / electrumabc Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pirk/electrumabc

32.0 32.0 16.0 57.41 MB

Mirror of https://reviews.bitcoinabc.org/source/bitcoin-abc/browse/master/electrum/

Home Page: https://bitcoinabc.org/electrum

License: Other

Shell 1.53% Python 97.89% NSIS 0.46% Dockerfile 0.11% CMake 0.01%

electrumabc's Introduction

Bitcoin ABC Logo

The goal of Bitcoin ABC is to create sound money that is usable by everyone in the world. This is a civilization-changing technology which will dramatically increase human flourishing, freedom, and prosperity. The project aims to achieve this goal by implementing a series of optimizations and protocol upgrades that will enable peer-to-peer digital cash to succeed at mankind scale.

What is eCash?

eCash is a digital currency that enables instant payments to anyone, anywhere in the world. It uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. eCash is a descendant of Bitcoin.

What is Bitcoin ABC?

Bitcoin ABC is the name of open-source software which enables the use of eCash. It is a fork of the Bitcoin Core software project.

License

Bitcoin ABC is released under the terms of the MIT license. See COPYING for more information or see https://opensource.org/licenses/MIT.

Development Process

This Github repository contains only source code of releases.

Bitcoin ABC development takes place at reviews.bitcoinabc.org

If you would like to contribute, please read CONTRIBUTING.

Disclosure Policy

See DISCLOSURE_POLICY

electrumabc's People

Contributors

akshayaurora avatar andrew-128 avatar bauerj avatar btchip avatar cculianu avatar chrisglass avatar dabura667 avatar danconnolly avatar ecdsa avatar echterago avatar fluffypony avatar fyookball avatar genjix avatar imaginaryusername avatar jhoenicke avatar jimboman77 avatar jonas-lundqvist avatar m0mchil avatar marceloneil avatar markblundeberg avatar mhsmith avatar mrnaif2018 avatar neocogent avatar ovidiusoft avatar pirk avatar romanz avatar rt121212121 avatar sombernight avatar stefaang avatar wozz avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

electrumabc's Issues

Tracking CashFusion Errors

This Issue was created to track common errors seen while running CashFusion. This is a place to collect data and to discuss the trade-offs encountered while trying to mitigate errors.

AttributeError: 'Satochip_Handler' object has no attribute 'button'

Description

Removed card from card reader after seeing a dialog "No satochip found! Please insert card"

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\installwizard.py", line 88, in func_wrapper
  File "electroncash_gui\qt\installwizard.py", line 478, in choice_dialog
  File "electroncash_gui\qt\installwizard.py", line 329, in exec_layout
electroncash_gui.qt.installwizard.GoBack

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Electrum ABC\electroncash_plugins\hw_wallet\qt.py", line 76, in _update_status
    button = self.button
AttributeError: 'Satochip_Handler' object has no attribute 'button'

System information

  • Electrum ABC version: 5.0.2
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: standard
  • Locale: fr_FR

ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI48682\electroncash\bitcoin.pyc)

Description

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\external_plugins_window.py", line 336, in on_toggle_plugin
  File "electroncash\plugins.py", line 276, in enable_external_plugin
  File "electroncash\plugins.py", line 203, in get_external_plugin
  File "electroncash\plugins.py", line 259, in load_external_plugin
  File "<frozen zipimport>", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3 (1).zip\flipstarter\qt.py", line 25, in <module>
    from .funderutil import cancel_pledge
  File "<frozen zipimport>", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3 (1).zip\flipstarter\funderutil.py", line 6, in <module>
    from electroncash.bitcoin import COIN
ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI48682\electroncash\bitcoin.pyc)

System information

  • Electrum ABC version: 5.0.1
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: imported_privkey
  • Locale: de_DE

AttributeError: 'DeviceMgr' object has no attribute 'recognised_hardware'

Description

Traceback

Traceback (most recent call last):
  File "/home/pierre/dev/ElectrumABC/electroncash_gui/qt/main_window.py", line 5086, in hardware_wallet_support
    d = InstallHardwareWalletSupportDialog(self.top_level_window(), self.gui_object.plugins)
  File "/home/pierre/dev/ElectrumABC/electroncash_gui/qt/udev_installer.py", line 119, in __init__
    self.updateStatus()
  File "/home/pierre/dev/ElectrumABC/electroncash_gui/qt/udev_installer.py", line 137, in updateStatus
    rules = self.generateRulesFile()
  File "/home/pierre/dev/ElectrumABC/electroncash_gui/qt/udev_installer.py", line 162, in generateRulesFile
    ids_set = self.device_manager.recognised_hardware.union(self.ADDITIONAL_HARDWARE_IDS)
AttributeError: 'DeviceMgr' object has no attribute 'recognised_hardware'

System information

  • Electrum ABC version: 5.1.0
  • Python version: 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0]
  • Operating system: Linux-5.15.0-27-generic-x86_64-with-glibc2.35
  • Wallet type: standard
  • Locale: en_US

Sign/verify Message using incorrect keys to sign/verify

I have tested this issue using Electron Cash and the bcoin/bcash javascript libraries as reference. Both Electron Cash and bcoin properly sign and verify messages. ElectrumABC does not. I will provide messages, signatures, addresses and public keys to reproduce behavior.

Signed by Electron Cash and bcoin:

msg: cashtab

address:
bitcoincash:qq9a0y2wtqcqu83dhpy8p4n05557u00yscrjpuaf85 / ecash:qq9a0y2wtqcqu83dhpy8p4n05557u00ysc6l4hxnpr / 125cg1ZZm6Pim4FPrsN762H7NW7Cwdvd8T

public key displayed by Electron Cash: 032ab23a5d9f6e53c3972bbd5b45e1a9f6d8c503db5ffcffbe352a71d9068fc1d7

public key recovered by bcoin: 032ab23a5d9f6e53c3972bbd5b45e1a9f6d8c503db5ffcffbe352a71d9068fc1d7

signature:
IGuiW+No+UoD/kyIW8YIsCf4S+7MQKWihCEmfa9DRHsmbzAYEVOuocCC0lrx9GHb6YcRWsKJkcEfLj66ay+edwY=

Verification Result:
Electron Cash: pass
bcoin: pass
Electrum ABC: fail


Signed by Electrum ABC:

msg: cashtab

address:
bitcoincash:qpq0zj7y0d43shc70wjv9rkhdvxnlk7ewgza0d2267 / ecash:qpq0zj7y0d43shc70wjv9rkhdvxnlk7ewgmsmx3suf / 16vPJpG8QS7LBZgzQpbqFYj9RwTAXRyJom

public key displayed by Electrum ABC: 02a01e600984e2fda7e76ccaf59d8372c43741ed9b04aa9df7977ae34486b6cb09

public key recovered by bcoin: 02c04cf7ffb0bcc109aade0861cacd6c1b3ce3adb78e8847961f699478d7006fc9

signature:
H6/MZUiv2OUNhUL3qA08A1j989UHTiPKQkTpLoPxoYItZKT+d46VRq2Bd+oUGNukXmRypNcmbvc7kE6s2umNbno=

Verification Result:
Electron Cash: fail
bcoin: fail
Electrum ABC: pass

If you look at the recovered public key for the signature done by Electrum ABC, you can see that it is not the public key that it is supposed to be. It is however, a vaild signature, that passes in Electron Cash and bcoin for the address associated with that public key ( ecash:qzr7ylkammjkhzacf82fphrx2uhg7myhacylulw7p0 / bitcoincash:qzr7ylkammjkhzacf82fphrx2uhg7myhacajg54y8c / 1DPVZ5xKFAtLuJ5Rghzdc35Qi1Rkzm6Wqr ). Using that different address, along with the msg and signature generated by Electrum ABC will pass verification in both Electron Cash and bcoin.

It appears that there is a bug in the process of selecting and processing the private key for a specified address in Sign/verify Message. The recovered public key / address was not in any of my visible addresses.

use the memo.cash protocol in replacement of cashaccount

Suggestion by @christroutner:

For message.fullstack.cash, I'm using the memo.cash protocol for retrieving names. It searches the tx history for an address and looks for an OP_RETURN with a 0x6d01 prefix.

https://memo.cash/protocol
No server required. Each implementation can use the same protocol without depending on any extra infrastructure.
I've got a JS library for it if anyone is interested. Though it's not well documented yet.
I've also got a REST API with a Mongo DB that catches the name data. That cuts down on redundant processing, and significantly reduces the amount of processing required on a front-end app.

All open source. Happy to give links to the code.

AttributeError: 'Standard_Wallet' object has no attribute 'start_network'

Description

Creating a new wallet from a trezor device, just after the "set wallet file encryption" wizard page, no matter if the checkbox is checked or unchecked.

This happened while testing #162 (probably does not affect master).

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\main_window.py", line 661, in new_wallet
  File "electroncash_gui\qt\__init__.py", line 622, in start_new_window
  File "electroncash_gui\qt\__init__.py", line 682, in _start_wizard_to_select_or_create_wallet
AttributeError: 'Standard_Wallet' object has no attribute 'start_network'

System information

  • Electrum ABC version: 5.0.3
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: standard
  • Locale: fr_FR

Error when trying to read QR code from camera

This happens when trying to read QR code from camera using the AppImage for 5.0.4

Traceback (most recent call last):
  File "/tmp/.mount_ElectrLEEsCq/usr/lib/python3.8/site-packages/electroncash_gui/qt/qrtextedit.py", line 149, in qr_input
    self.qr_dialog = QrReaderCameraDialog(parent=self.top_level_window())
  File "/tmp/.mount_ElectrLEEsCq/usr/lib/python3.8/site-packages/electroncash_gui/qt/qrreader/camera_dialog.py", line 153, in __init__
    self.image_effect = ImageGraphicsEffect(self, self.crop_blur_effect)
  File "/tmp/.mount_ElectrLEEsCq/usr/lib/python3.8/site-packages/electroncash_gui/qt/utils/image_effect.py", line 42, in __init__
    self.graphics_item.setGraphicsEffect(effect)
AttributeError: 'QGraphicsScene' object has no attribute 'setGraphicsEffect'

ElectrumABC issue ledger

After updating electrumABC and apps on ledger live, ElectrumABC doesn't recognise any more my ledger.

satochip error on first access

This error happens often (maybe always?) the first time the device is selected when creating a wallet or opening an existing encrypted wallet. The next time the satochip device is selected, everything works fine.

Found while investigating #168.

The error message says "Failed to create a client for this device. Make sure it is in the correct state."

open failed error

Hi: I am interested in moving my XEC from elctrumabc but whe I try to do it an error of open failed appears what coul I do?
Captura de Pantalla 2021-09-19 a la(s) 10 43 35 p  m

Error message on shutdown

I get this message on every shutdown:

INFO:stem:Error while receiving a control message (SocketClosed): received exception "read of closed file"

It seems harmless, but annoying nonetheless.

SystemError: <built-in function SCardListReaders> returned a result with an error set

Description

While create a new wallet, after selecting "Hardware wallet" and clicking Next (with the card inserted in the card reader).

Traceback

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 0: invalid continuation byte

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/pierre/dev/ElectrumABC/electroncash/util.py", line 878, in run_with_except_hook
    run_original(*args2, **kwargs2)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/CardMonitoring.py", line 163, in run
    currentcards = self.cardrequest.waitforcardevent()
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/CardRequest.py", line 72, in waitforcardevent
    return self.pcsccardrequest.waitforcardevent()
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/pcsc/PCSCCardRequest.py", line 291, in waitforcardevent
    readernames = self.getReaderNames()
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/pcsc/PCSCCardRequest.py", line 91, in getReaderNames
    hresult, pcscreaders = SCardListReaders(self.hcontext, [])
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/scard/scard.py", line 640, in SCardListReaders
    return _scard.SCardListReaders(hcontext, readergroups)
SystemError: &lt;built-in function SCardListReaders&gt; returned a result with an error set

System information

  • Electrum ABC version: 5.0.2
  • Python version: 3.9.5 (default, May 11 2021, 08:20:37)
    [GCC 10.3.0]
  • Operating system: Linux-5.11.0-38-generic-x86_64-with-glibc2.33
  • Wallet type: standard
  • Locale: en_US

Keepkey library no longer loaded in 5.0.3

I get this message when opening a wallet file tied to a keepkey:

Cannot find python library for 'keepkey'.
Make sure you install it with python3

Confirmed it works in 5.0.2. I'm using the AppImage, if it matters.

ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI117442\electroncash\bitcoin.pyc)

Description

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\external_plugins_window.py", line 336, in on_toggle_plugin
  File "electroncash\plugins.py", line 276, in enable_external_plugin
  File "electroncash\plugins.py", line 203, in get_external_plugin
  File "electroncash\plugins.py", line 259, in load_external_plugin
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3.zip\flipstarter\qt.py", line 25, in &lt;module&gt;
    from .funderutil import cancel_pledge
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3.zip\flipstarter\funderutil.py", line 6, in &lt;module&gt;
    from electroncash.bitcoin import COIN
ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI117442\electroncash\bitcoin.pyc)

System information

  • Electrum ABC version: 5.0.1
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: standard,imported_privkey
  • Locale: de_DE

Wallet file saved in the Electron Cash working directory

Please rename E-ABC working directory to avoid confusion and potential problem for users that install Electrum Cash and E-ABC on the same machine.

edit: I've reproduced the problem on macos and the EC workdir was actually a symlink

use a binary format for wallet files

The Electrum wallet files contain the entire transaction history for a wallet, and thus can reach significant sizes (tens of megabytes). The transaction They are currently saved as JSON text, sometimes encrypted.

This could all be improved significantly by using a more compact data format than JSON for disk storage. A structured binary file would reduce the disk space usage, and using a file format that allows for an easy access to some data without having to read/parse all of it would improve performance significantly.

The following formats come to mind:

  • sqlite (database format)
  • HDF5 (easy to use data format with built-in indexing, compression....); drawback: dependency on numpy (+300MB packages)

Wallet automatically opens Bitcoin Cash Electron wallet file, fresh install.

Hi.
I've recently installed this wallet, and noticed it didn't ask me to create a new wallet, and just asked me to open my already existing wallet! (But I don't have a wallet!!)
So I've entered the password to the other wallet that I have (Bitcoin Cash). and it opened up!
the addresses it shows in the address tab start with q
and the seed is the same as Bitcoin Cash wallet.
but why?
shouldn't the wallet access its own folder:
%USER%\appdata\roaming\ElectrumABC\wallets\default_wallet
instead of a folder related to another wallet:
%USER%\appdata\roaming\electroncash\wallets\default_wallet

Edit: I noticed it copied the wallet file from the electroncash over to the electrumabc.

ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI5282\electroncash\bitcoin.pyc)

Description

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\external_plugins_window.py", line 336, in on_toggle_plugin
  File "electroncash\plugins.py", line 276, in enable_external_plugin
  File "electroncash\plugins.py", line 203, in get_external_plugin
  File "electroncash\plugins.py", line 259, in load_external_plugin
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3 (1).zip\flipstarter\qt.py", line 25, in &lt;module&gt;
    from .funderutil import cancel_pledge
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3 (1).zip\flipstarter\funderutil.py", line 6, in &lt;module&gt;
    from electroncash.bitcoin import COIN
ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI5282\electroncash\bitcoin.pyc)

System information

  • Electrum ABC version: 5.0.1
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: imported_privkey
  • Locale: de_DE

Cashfusion: SSL certificate expired

| 13.612| |10| [Fusion] Connect failed: SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1125)')
| 13.612| |10| [Fusion] Failed: Could not connect to  SSL fusion.tokamak.cash:8788
| 13.612| |10| [fusion] notify_server_status: False ('failed', 'Could not connect to  SSL fusion.tokamak.cash:8788')

localize USD amounts

After merging #60 , BCHA amounts are now localized, e.g. they use a comma as decimal point on a french computer. But fiat amounts still use a dot. This should be harmonized.
Screenshot from 2021-01-03 09-00-44

Ledger wallet - can't sign transactions in ElectrumABC to move XEC that is on ledger

Note: I meanwhile figured out the issue described in this first comment, but it made me run into a second issue that is in the next comment.

Hello,

I had my BCH in a Ledger and wanted to split it. I've read the guide https://blog.bitcoinabc.org/2020/11/25/how-to-split-your-bch-bchn-and-bcha-coins-using-electrum-abc-and-electron-cash/ so I decided to send BCH to a fresh wallet in Electron cash and then follow the steps in the guide.

I think I made a mistake on the way though because I decided to first send a test transaction from ledger to Electron and test the process in the guide. I saw the coins from the test transaction in both ElectronCash and ElectrumABC and was able to split them.

I then sent the rest of the coins to the next receiving address in Electron Cash. These coins only appear in Electron cash and not in Electrum ABC. My XEC balance there remains the same. What would be the reason here and how can I solve it?

Related question: I also tried connecting my Ledger directly to ElectrumABC to see if I could just move the coins directly from there. I can import my ledger wallet, but only one of two BCH accounts I have in Ledger live. And unfortunately it's the one I no longer use and has zero balance. How can I import the second one as that's where the coins are? I already tried the 'scan more addresses' with number set to 1000 but that didn't give any result.

Thanks

TypeError: disconnect() failed between 'textChanged' and all its connections

Description

Traceback

Traceback (most recent call last):
  File "C:\Users\17193\AppData\Roaming\ElectrumABC\external_plugins\AutoCove-Plugin.zip\AutoCove\qt.py", line 663, in AsmBoxHighlighted
    def AsmBoxHighlighted(self,Index): self.AsmBox.setCurrentIndex(Index), self.AsmBoxActivated()   #Highlighted → Activated.
  File "C:\Users\17193\AppData\Roaming\ElectrumABC\external_plugins\AutoCove-Plugin.zip\AutoCove\qt.py", line 671, in AsmBoxActivated
    self.ColorsBox.setChecked(False), self.AsmBoxHighlighted(0), self.AsmBox.setCurrentIndex(Index), self.ColorsBox.setChecked(ColorsBool)
  File "C:\Users\17193\AppData\Roaming\ElectrumABC\external_plugins\AutoCove-Plugin.zip\AutoCove\qt.py", line 663, in AsmBoxHighlighted
    def AsmBoxHighlighted(self,Index): self.AsmBox.setCurrentIndex(Index), self.AsmBoxActivated()   #Highlighted → Activated.
  File "C:\Users\17193\AppData\Roaming\ElectrumABC\external_plugins\AutoCove-Plugin.zip\AutoCove\qt.py", line 672, in AsmBoxActivated
    self.ScriptBox.textChanged.disconnect(), self.ScriptBox.selectionChanged.disconnect()
TypeError: disconnect() failed between 'textChanged' and all its connections

System information

  • Electrum ABC version: 5.0.4
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: standard
  • Locale: en_US

satochip error when detecting the card

Error during connection, when trying to create a new wallet using a Satochip hardware device.

WARNING:pysatochip.CardConnector:Error during connection: CardConnectionException('Invalid protocol in transmit: must be CardConnection.T0_protocol, CardConnection.T1_protocol, or CardConnection.RAW_protocol')
Traceback (most recent call last):
  File "/home/pierre/.local/lib/python3.9/site-packages/pysatochip/CardConnector.py", line 191, in card_transmit
    (response, sw1, sw2) = self.cardservice.connection.transmit(apdu)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/CardConnectionDecorator.py", line 86, in transmit
    return self.component.transmit(bytes, protocol)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/CardConnection.py", line 161, in transmit
    data, sw1, sw2 = self.doTransmit(bytes, protocol)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/pcsc/PCSCCardConnection.py", line 237, in doTransmit
    raise CardConnectionException(
smartcard.Exceptions.CardConnectionException: Invalid protocol in transmit: must be CardConnection.T0_protocol, CardConnection.T1_protocol, or CardConnection.RAW_protocol
WARNING:pysatochip.CardConnector:Error during connection: CardConnectionException('Invalid protocol in transmit: must be CardConnection.T0_protocol, CardConnection.T1_protocol, or CardConnection.RAW_protocol')
Traceback (most recent call last):
  File "/home/pierre/.local/lib/python3.9/site-packages/pysatochip/CardConnector.py", line 191, in card_transmit
    (response, sw1, sw2) = self.cardservice.connection.transmit(apdu)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/CardConnectionDecorator.py", line 86, in transmit
    return self.component.transmit(bytes, protocol)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/CardConnection.py", line 161, in transmit
    data, sw1, sw2 = self.doTransmit(bytes, protocol)
  File "/home/pierre/.local/lib/python3.9/site-packages/smartcard/pcsc/PCSCCardConnection.py", line 237, in doTransmit
    raise CardConnectionException(
smartcard.Exceptions.CardConnectionException: Invalid protocol in transmit: must be CardConnection.T0_protocol, CardConnection.T1_protocol, or CardConnection.RAW_protocol

ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI5282\electroncash\bitcoin.pyc)

Description

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\external_plugins_window.py", line 336, in on_toggle_plugin
  File "electroncash\plugins.py", line 276, in enable_external_plugin
  File "electroncash\plugins.py", line 203, in get_external_plugin
  File "electroncash\plugins.py", line 259, in load_external_plugin
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3 (1).zip\flipstarter\qt.py", line 25, in &lt;module&gt;
    from .funderutil import cancel_pledge
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3 (1).zip\flipstarter\funderutil.py", line 6, in &lt;module&gt;
    from electroncash.bitcoin import COIN
ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI5282\electroncash\bitcoin.pyc)

System information

  • Electrum ABC version: 5.0.1
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: imported_privkey
  • Locale: de_DE

Add text to the install wizard screen.

This is a wallet creation dialog/wizard in which the user is invited to give a name to their first wallet or load an existing wallet file.

Replace "wallet_1" with your new wallet name. example: "XECWallet_savings
Screen Shot 2022-03-15 at 9 28 43 AM
"

improvements to invoice

  • show formatted invoice (at payment time)
  • option to export invoice as pdf
  • more optional fields
    • invoice creation date (automatically filled, with an edit option)
    • invoice payment date (automatically filled, with an edit option)
    • name and address of payer
    • name and address of payee
  • show fiat amount for information when user enters a XEC amount
  • add a button to fill the "fixed rate" from the selected API

Cannot connect to testnet servers

Running ./electrum-abc --testnet --verbose shows an SSLError:

|  0.583| |00| [SimpleConfig] electrum-abc directory /home/user/.electrum-abc/testnet
|  0.586| |00| [Plugins] registering hardware digitalbitbox: ('hardware', 'digitalbitbox', 'Digital Bitbox wallet')
|  0.829| |00| [Plugins] Job added fusion
|  0.829| |00| [Plugins] loaded internal plugin fusion
|  0.834| |00| [Plugins] registering hardware keepkey: ('hardware', 'keepkey', 'KeepKey wallet')
|  0.834| |00| [Plugins] registering hardware ledger: ('hardware', 'ledger', 'Ledger wallet')
|  0.835| |00| [Plugins] registering hardware satochip: ('hardware', 'satochip', 'Satochip wallet')
|  0.836| |00| [Plugins] registering hardware trezor: ('hardware', 'trezor', 'Trezor wallet')
|  0.838| |00| [Plugins] loaded internal plugin virtualkeyboard
|  0.838| |00| [Plugins] Job added <electroncash.plugins.DeviceMgr object at 0x7965e84bc400>
|  0.838| |00| [profiler] Plugins.__init__ 0.2545
|  0.839| |00| [Network] blockchains dict_keys([0])
|  0.839| |00| [Network] server blacklist: set() server whitelist: {'telectrum.bitcoinabc.org:60002:s'}
|  0.839| |00| [Network] starting network
|  0.845| |00| [Network] connecting to telectrum.bitcoinabc.org:60002:s as new interface
|  0.849| |00| [FxThread] using exchange CoinGecko
|  0.850| |00| [Network] Job added <electroncash.exchange_rate.FxThread object at 0x7965df6df820>
|  1.127| |00| [ElectrumGui] Setting layout direction: left-to-right
|  1.187| |00| [ElectrumGui] Auto update check: interval set to 10.0 seconds
|  1.187| |00| [WalletStorage] wallet path /home/user/Downloads/my-wallet2
|  1.215| |00| [profiler] Abstract_Wallet.load_transactions 0.0000
|  1.215| |00| [profiler] Abstract_Wallet.build_reverse_history 0.0000
|  1.215| |00| [profiler] Abstract_Wallet.check_history 0.0001
|  1.218| |01| [my-wallet2] clean_pruned_txo_thread: thread started
|  1.221| |00| [Network] Job added <electroncash.verifier.SPV object at 0x7965df63e700>
|  1.221| |00| [Network] Job added <electroncash.synchronizer.Synchronizer object at 0x7965df63e220>
|  1.221| |00| [Network] Job added <electroncash.verifier.SPV object at 0x7965df63e2b0>
|  1.616| |02| [TaskThread/my-wallet2/Wallet] started
|  1.715| |00| [ExceptionHook] Installed.
|  1.813| |00| [SysTray.QMenu] destroyed
|  2.031| |03| [telectrum.bitcoinabc.org] SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1123)
|  2.575| |00| [profiler] HistoryList.on_update 0.0003
|  5.318| |03| [telectrum.bitcoinabc.org] SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)
| 11.425| |03| [_Req@65152] Requesting from https://raw.github.com/Bitcoin-ABC/ElectrumABC/master/contrib/update_checker/releases.json ...
| 11.426| |00| [ElectrumGui] Auto update check: interval set to 14400.0 seconds
| 11.426| |00| [UpdateChecker] Downloading progress 10% from https://raw.github.com/Bitcoin-ABC/ElectrumABC/master/contrib/update_checker/releases.json
| 16.345| |03| [_Req@65152] got response 559 bytes
| 16.347| |00| [UpdateChecker] Downloading progress 100% from https://raw.githubusercontent.com/Bitcoin-ABC/ElectrumABC/master/contrib/update_checker/releases.json
| 16.348| |00| [UpdateChecker] Active _Req@65152 finished

Network server for ABC BCHA no longer available?

Hi,
I used Electron Cash to split off BCHA from my BCHN five months ago. Shortly after the split I sent my BCHN back to another wallet. However, I wanted to now send my BCHA coin to the ViaWallet. My understanding would be that within the Electron Cash desktop I would select a server on the ABC network and then I could send those coins, but the electrom abc server is no longer available. I input it manually but it instantly popped up in the "banned" list. Are there no longer ABC servers available or am I going about this wrong? Although my split ABC coin does not show up in Electron cash ABC I believe it would if I was able to select a network server, my coin does show up as received on the ABC address qzlryncqf8s6sdmrkm2h78xj2wfumg3lyqrx7ck44h. Any help on this from a knowledgeable BCHA person?

CI: run plugin tests

There are tests in the plugins package that are currently not executed on Travis.

Using ElectrumABC with Ledger hardware wallet.

Is it possible to use ElectrumABC with the Ledger Nano S hardware wallet?
I tried setting it up following this guide, but when I get to step 7 and click next, I get this error message:

We encountered an error while connecting to your device:
"Device id not found or was changed"

Refactor the package

At some point the ElectronCash package got refactored to make it possible to execute it from a simple script. This may seem like a good idea for development purposes, but it has the side effect of requiring some auto-generated files to be part of the source package: protobuf compiled file, icons.py, libsecp256k1 (.dll or .so)...

I would like to switch back to a package structure where only source files written by humans are part of the repository, and other files are generated only when installing or generating binaries.
It will still be possible to run the program from the development repository, using an intermediate script that builds the necessary files in a temporary build directory and patches the Python path to include the build (see https://github.com/silx-kit/silx/blob/master/bootstrap.py)

This will be a good opportunity to rename the subpackages, and merge them into a single package.

The current structure of the project is a loose bundle of 3 packages and many resource files:

ElectrumABC -- electrum-abc (script)
            |- setup.py
            |- electroncash -- __init__.py .
            |               |- ...
            |
            |- electroncash_gui -- __init__.py
            |                   |- ...
            |
            |- electroncash_plugins -- __init__.py
            |                       |- ...
            |
            |- icons/

Various resources and auto-generated files are placed in various places in that structure and outside (contrib...). The requirements*.txt files are in the contrib directory.

The structure I would like to have:

ElectrumABC -- setup.py
            |- bootstrap.py   (run the script in development mode)
            |- requirements.txt
            |- electrumabc |- __init.__.py 
                           |- __main__.py  (with code previously in the script)
                           |- tests |- __init__.py
                           |        |- ...
                           |
                           |- core -- __init__.py .
                           |       |- ...
                           |
                           |- gui -- __init__.py
                           |      |- ...
                           |
                           |- plugins --__init__.py
                           |          |- ...
                           |- resources -- __init__.py
                                        |- icons/
                                        |- fonts/
                                        |- protobuf/
                                        |- misc/    (servers.json...)

The resources subpackage would replace the current use of the Qt resource system. See https://github.com/silx-kit/silx/blob/master/silx/resources/ for an implementation.

The setup.py file would install the executable script as an entry point: https://chriswarrick.com/blog/2014/09/15/python-apps-the-right-way-entry_points-and-scripts/

This would be a first step to make the entire program installable using a simple pip install electrumabc command. Other steps include providing proper packages for some dependencies (secp256k1) as binary wheels for windows and MacOS.

Protect hardware wallets with a password

Reported by a user : Currently anyone with access to my computer can open Electrum ABC and see all my funds and transactions.

Regular hot wallets can be protected by a password, which is prompted before opening the GUI. This protects both private and public keys. But there is no option to add a password for a hardware wallet. Only private keys are safe, but not public keys.

Problem opening a Ledger on Windows

Firmware 1.4.7

Reported issue:

It says derivation path is not compatible and then it shows some random address in my ledger
The problem happens after selectiing "unamed ledger xxxxxx" . The "Derivation path for standard wallet" is never displayed.

Log message when run in --verbose mode (this is Electron Cash, but the user reports the same problem for Electrum)

| 38.014| |04| [ec-bcn.criptolayer.net] connected chunk, height=661796 count=147 proof_was_provided=True
| 38.308| |00| [Plugins] loaded internal plugin digitalbitbox
| 38.364| |00| [Plugins] loaded internal plugin keepkey
| 38.384| |00| [Plugins] loaded internal plugin ledger
| 38.401| |00| [satochip] init()
| 38.401| |00| [Plugins] loaded internal plugin satochip
| 38.506| |00| [Plugins] loaded internal plugin trezor
| 38.507| |00| [DeviceMgr] scanning devices...
| 38.558| |00| [satochip] detect_smartcard_reader
| 38.560| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (1): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
| 40.674| |00| [DeviceMgr] scanning devices...
| 40.756| |00| [satochip] detect_smartcard_reader
| 40.757| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (9): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
| 96.322| |00| [DeviceMgr] scanning devices...
| 96.377| |00| [satochip] detect_smartcard_reader
| 96.379| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "electroncash\base_wizard.py", line 249, in on_device
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 611, in setup_device
    client.get_xpub("m/44'/0'", 'standard') # TODO replace by direct derivation once Nano S > 1.1
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 47, in catch_exception
    return func(self, *args, **kwargs)
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 114, in get_xpub
    nodeData = self.dongleObject.getWalletPublicKey(prevPath)
  File "site-packages\btchip\btchip.py", line 124, in getWalletPublicKey
  File "site-packages\btchip\btchipComm.py", line 127, in exchange
btchip.btchipException.BTChipException: Exception : Invalid status 6985

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (2): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
| 42.842| |00| [DeviceMgr] scanning devices...
| 42.922| |00| [satochip] detect_smartcard_reader
| 42.924| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (3): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
=> b'f026000000'
<= b''6d00
| 45.061| |00| [DeviceMgr] Registering <electroncash_plugins.ledger.ledger.Ledger_Client object at 0x05ADE6B0>
| 45.064| |00| [DeviceMgr] scanning devices...
| 45.146| |00| [satochip] detect_smartcard_reader
| 45.148| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '
INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (10): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
| 98.501| |00| [DeviceMgr] scanning devices...
| 98.581| |00| [satochip] detect_smartcard_reader
| 98.583| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "electroncash\base_wizard.py", line 249, in on_device
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 611, in setup_device
    client.get_xpub("m/44'/0'", 'standard') # TODO replace by direct derivation once Nano S > 1.1
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 47, in catch_exception
    return func(self, *args, **kwargs)
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 114, in get_xpub
    nodeData = self.dongleObject.getWalletPublicKey(prevPath)
  File "site-packages\btchip\btchip.py", line 124, in getWalletPublicKey
  File "site-packages\btchip\btchipComm.py", line 127, in exchange
btchip.btchipException.BTChipException: Exception : Invalid status 6985

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (11): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
|111.550| |00| [Daemon] stopping, removing lockfile
|111.551| |00| Removed lockfile: C:\Users\admin\AppData\Roaming\ElectronCash\daemon
|111.594| |16| [Daemon] shutting down network
|111.672| |04| [Network] stopping network
|111.676| |04| [Network] stopped
|111.676| |16| [Daemon] stopped
|111.782| |17| [Plugins] stopped

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (6): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
=> b'e0c4000000'
<= b'1b30010407010003'9000
=> b'e024000000'
<= b'01'9000
=> b'e02280000130'
<= b''6d00
=> b'e040000005018000002c'
<= b''6985
| 86.919| |00| [InstallWizard] Traceback (most recent call last):
  File "electroncash\base_wizard.py", line 249, in on_device
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 611, in setup_device
    client.get_xpub("m/44'/0'", 'standard') # TODO replace by direct derivation once Nano S > 1.1
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 47, in catch_exception
    return func(self, *args, **kwargs)
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 114, in get_xpub
    nodeData = self.dongleObject.getWalletPublicKey(prevPath)
  File "site-packages\btchip\btchip.py", line 124, in getWalletPublicKey
  File "site-packages\btchip\btchipComm.py", line 127, in exchange
btchip.btchipException.BTChipException: Exception : Invalid status 6985

| 89.766| |00| [DeviceMgr] scanning devices...
| 89.814| |00| [satochip] detect_smartcard_reader
| 89.815| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "electroncash\base_wizard.py", line 249, in on_device
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 611, in setup_device
    client.get_xpub("m/44'/0'", 'standard') # TODO replace by direct derivation once Nano S > 1.1
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 47, in catch_exception
    return func(self, *args, **kwargs)
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 114, in get_xpub
    nodeData = self.dongleObject.getWalletPublicKey(prevPath)
  File "site-packages\btchip\btchip.py", line 124, in getWalletPublicKey
  File "site-packages\btchip\btchipComm.py", line 127, in exchange
btchip.btchipException.BTChipException: Exception : Invalid status 6985

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (7): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
| 91.931| |00| [DeviceMgr] scanning devices...
| 91.991| |00| [satochip] detect_smartcard_reader
| 91.993| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "electroncash\base_wizard.py", line 249, in on_device
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 611, in setup_device
    client.get_xpub("m/44'/0'", 'standard') # TODO replace by direct derivation once Nano S > 1.1
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 47, in catch_exception
    return func(self, *args, **kwargs)
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 114, in get_xpub
    nodeData = self.dongleObject.getWalletPublicKey(prevPath)
  File "site-packages\btchip\btchip.py", line 124, in getWalletPublicKey
  File "site-packages\btchip\btchipComm.py", line 127, in exchange
btchip.btchipException.BTChipException: Exception : Invalid status 6985

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (8): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
| 94.117| |00| [DeviceMgr] scanning devices...
| 94.199| |00| [satochip] detect_smartcard_reader
| 94.201| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "electroncash\base_wizard.py", line 249, in on_device
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 611, in setup_device
    client.get_xpub("m/44'/0'", 'standard') # TODO replace by direct derivation once Nano S > 1.1
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 47, in catch_exception
    return func(self, *args, **kwargs)
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\ledger\ledger.py", line 114, in get_xpub
    nodeData = self.dongleObject.getWalletPublicKey(prevPath)
  File "site-packages\btchip\btchip.py", line 124, in getWalletPublicKey
  File "site-packages\btchip\btchipComm.py", line 127, in exchange
btchip.btchipException.BTChipException: Exception : Invalid status 6985

During handling of the above exception, another exception occurred:
INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (4): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
| 47.265| |00| [DeviceMgr] scanning devices...
| 47.347| |00| [satochip] detect_smartcard_reader
| 47.349| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

INFO [init] enumerate_devices | Enumerating UdpTransport: found 0 devices
DEBUG [connectionpool] _new_conn | Starting new HTTP connection (5): 127.0.0.1:21325
INFO [init] enumerate_devices | Enumerating BridgeTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating WebUsbTransport: found 0 devices
INFO [init] enumerate_devices | Enumerating HidTransport: found 0 devices
=> b'e0c4000000'
<= b'1b30010407010003'9000
| 53.221| |00| [DeviceMgr] scanning devices...
| 53.310| |00| [satochip] detect_smartcard_reader
| 53.311| |00| [satochip] Error during connection: EstablishContextException(-2146435043,)
Traceback (most recent call last):
  File "C:\Program Files (x86)\Electron Cash\electroncash_plugins\satochip\satochip.py", line 519, in detect_smartcard_reader
    cardrequest = CardRequest(timeout=0.1, cardType=self.cardtype)
  File "site-packages\smartcard\CardRequest.py", line 61, in init
  File "site-packages\smartcard\pcsc\PCSCCardRequest.py", line 82, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 56, in init
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 70, in renewContext
  File "site-packages\smartcard\pcsc\PCSCContext.py", line 40, in init
smartcard.pcsc.PCSCExceptions.EstablishContextException: 'Failure to establish context: The Smart Card Resource Manager is not running. '

(reported via telegram, messages don't seem to be in the right order)

Trezor not working on MacOS for release 5.0.4

Trezor released version 0.13.0 of their library in december 2021, and the MacOS build script did not pinpoint the exact library version, while the plugin rejects any version that is not a 0.12.x

The best solution is to upgrade the plugin to work with 0.13.x (#183).

A safer temporary workaround is to pinpoint the version in the requirements file that is used by Mac OS and also by people installing from sources with pip install ..... This is safer because 0.12.4 has already been used in a previous release for Linux and Windows, and we know it works.

protobuf generated file outdated

Protobuf seems to have made a backwards incompatible change in version 3.21 (released on May 26th 2022)

Traceback (most recent call last):
  File "/usr/local/bin/coverage", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/site-packages/coverage/cmdline.py", line 943, in main
    status = CoverageScript().command_line(argv)
  File "/usr/local/lib/python3.10/site-packages/coverage/cmdline.py", line 659, in command_line
    return self.do_run(options, args)
  File "/usr/local/lib/python3.10/site-packages/coverage/cmdline.py", line 830, in do_run
    runner.run()
  File "/usr/local/lib/python3.10/site-packages/coverage/execfile.py", line 160, in run
    self._prepare2()
  File "/usr/local/lib/python3.10/site-packages/coverage/execfile.py", line 124, in _prepare2
    pathname, self.package, self.spec = find_module(self.modulename)
  File "/usr/local/lib/python3.10/site-packages/coverage/execfile.py", line 43, in find_module
    spec = importlib.util.find_spec(modulename)
  File "/usr/local/lib/python3.10/importlib/util.py", line 94, in find_spec
    parent = __import__(parent_name, fromlist=['__path__'])
  File "/tmp/cirrus-ci-build/electroncash/__init__.py", line 5, in <module>
    from .wallet import Synchronizer, Wallet
  File "/tmp/cirrus-ci-build/electroncash/wallet.py", line 85, in <module>
    from . import paymentrequest
  File "/tmp/cirrus-ci-build/electroncash/paymentrequest.py", line 40, in <module>
    from . import paymentrequest_pb2 as pb2
  File "/tmp/cirrus-ci-build/electroncash/paymentrequest_pb2.py", line 35, in <module>
    _descriptor.FieldDescriptor(
  File "/usr/local/lib/python3.10/site-packages/google/protobuf/descriptor.py", line 560, in __new__
    _message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates

IndexError: list index out of range

Description

Traceback

Traceback (most recent call last):
  File "/git/ElectrumBCHA/electroncash_gui/qt/util.py", line 1177, in _doIt
    retval = self.func(*args, **kwargs) # and.. call the function. use latest invocation's args
  File "/git/ElectrumBCHA/electroncash_gui/qt/util.py", line 1251, in _call_func_for_all
    self.func_target(obj, *args, **kwargs)
  File "/git/ElectrumBCHA/electroncash_gui/qt/history_list.py", line 87, in update
    super().update()
  File "/git/ElectrumBCHA/electroncash_gui/qt/util.py", line 744, in update
    self.on_update()
  File "/git/ElectrumBCHA/electroncash/util.py", line 353, in &lt;lambda&gt;
    return lambda *args, **kw_args: do_profile(args, kw_args)
  File "/git/ElectrumBCHA/electroncash/util.py", line 349, in do_profile
    o = func(*args, **kw_args)
  File "/git/ElectrumBCHA/electroncash_gui/qt/history_list.py", line 139, in on_update
    status, status_str = self.wallet.get_tx_status(tx_hash, height, conf, timestamp)
  File "/git/ElectrumBCHA/electroncash/wallet.py", line 1735, in get_tx_status
    status_str = _(TX_STATUS[status]) if status &lt; 4 else time_str
IndexError: list index out of range

System information

  • Electrum ABC version: 4.3.2
  • Python version: 3.8.5 (default, Jul 28 2020, 12:59:40)
    [GCC 9.3.0]
  • Operating system: Linux-5.4.0-56-generic-x86_64-with-glibc2.29
  • Wallet type: standard
  • Locale: en_US

Keys and Hashes

Hi there and thanks for working on ElectrumABC!.

Is there a plce where could I find the right checksums and keys for the release?

Thanks a lot.

error when building a proof with a unconfirmed coin with an unconfirmed parent

Traceback (most recent call last):
  File "/home/pierre/dev/ElectrumABC/electroncash_gui/qt/avalanche_dialogs.py", line 240, in _on_generate_clicked
    proof = self._build()
  File "/home/pierre/dev/ElectrumABC/electroncash_gui/qt/avalanche_dialogs.py", line 291, in _build
    proofbuilder.add_utxo(
  File "/home/pierre/dev/ElectrumABC/electroncash/avalanche/proof.py", line 246, in add_utxo
    stake = Stake(utxo, amount, height, privkey.get_pubkey(), is_coinbase)
  File "/home/pierre/dev/ElectrumABC/electroncash/avalanche/proof.py", line 69, in __init__
    self.stake_id = UInt256(sha256d(self.serialize()))
  File "/home/pierre/dev/ElectrumABC/electroncash/avalanche/proof.py", line 78, in serialize
    + struct.pack("qI", self.amount, height_ser)
struct.error: argument out of range

OSError%3A%20%5BErrno%2028%5D%20No%20space%20left%20on%20device

%0A%23%20Description%0A%3C%21---%20Please%20add%20under%20this%20line%20additional%20information%2C%20such%20as%20a%20description%0A%20of%20what%20action%20led%20to%20the%20error---%3E%0A%0A%23%20Traceback%0A%60%60%60%0ATraceback%20%28most%20recent%20call%20last%29%3A%0A%20%20File%20%22electroncash/blockchain.py%22%2C%20line%20354%2C%20in%20write%0AOSError%3A%20%5BErrno%2028%5D%20No%20space%20left%20on%20device%0A%0ADuring%20handling%20of%20the%20above%20exception%2C%20another%20exception%20occurred%3A%0A%0ATraceback%20%28most%20recent%20call%20last%29%3A%0A%20%20File%20%22electroncash/util.py%22%2C%20line%20840%2C%20in%20run_with_except_hook%0A%20%20File%20%22electroncash/network.py%22%2C%20line%201497%2C%20in%20run%0A%20%20File%20%22electroncash/network.py%22%2C%20line%201470%2C%20in%20wait_on_sockets%0A%20%20File%20%22electroncash/network.py%22%2C%20line%20889%2C%20in%20process_responses%0A%20%20File%20%22electroncash/network.py%22%2C%20line%20800%2C%20in%20process_response%0A%20%20File%20%22electroncash/network.py%22%2C%20line%201543%2C%20in%20on_notify_header%0A%20%20File%20%22electroncash/network.py%22%2C%20line%201562%2C%20in%20_process_latest_tip%0A%20%20File%20%22electroncash/blockchain.py%22%2C%20line%20363%2C%20in%20save_header%0A%20%20File%20%22electroncash/blockchain.py%22%2C%20line%20355%2C%20in%20write%0AOSError%3A%20%5BErrno%2028%5D%20No%20space%20left%20on%20device%0A%0A%60%60%60%0A%0A%23%20System%20information%0A%0A-%20Electrum%20ABC%20version%3A%205.0.0%0A-%20Python%20version%3A%203.8.9%20%28default%2C%20Jun%2026%202021%2C%2018%3A32%3A23%29%20%0A%5BClang%2012.0.5%20%28clang-1205.0.22.11%29%5D%0A-%20Operating%20system%3A%20macOS-11.5.2-x86_64-i386-64bit%0A-%20Wallet%20type%3A%20standard%0A-%20Locale%3A%20None%0A%0A

ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI38002\electroncash\bitcoin.pyc)

Description

Traceback

Traceback (most recent call last):
  File "electroncash_gui\qt\external_plugins_window.py", line 336, in on_toggle_plugin
  File "electroncash\plugins.py", line 276, in enable_external_plugin
  File "electroncash\plugins.py", line 203, in get_external_plugin
  File "electroncash\plugins.py", line 259, in load_external_plugin
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3.zip\flipstarter\qt.py", line 25, in &lt;module&gt;
    from .funderutil import cancel_pledge
  File "&lt;frozen zipimport&gt;", line 259, in load_module
  File "C:\Users\memoc\AppData\Local\Temp\scoped_dir4436_1403141819\electrum_abc_data\external_plugins\flipstarter-1.3.zip\flipstarter\funderutil.py", line 6, in &lt;module&gt;
    from electroncash.bitcoin import COIN
ImportError: cannot import name 'COIN' from 'electroncash.bitcoin' (C:\Users\memoc\AppData\Local\Temp\_MEI38002\electroncash\bitcoin.pyc)

System information

  • Electrum ABC version: 5.0.1
  • Python version: 3.8.9 (tags/v3.8.9:a743f81, Apr 6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
  • Operating system: Windows-10-10.0.19041-SP0
  • Wallet type: standard
  • Locale: de_DE

Label sync issues

#166 is an attempt to re-enable the LabelSync plugin that has been disabled ever since the fork from Electron Cash.
This is a very requested feature, but it's current design has some major flaws.

To summarize the way the plugin works, there is a server running that stores the encrypted labels in a database. A wallet is identified by a hash of it's master public key. Encrypted labels associated with a given wallet are indexed by their encrypted txid. The servers also stores a nonce for each label. This helps the client figure out if his version of a label is outdated. The server and the client store the highest nonce as a "wallet nonce", which is used to determine whether the wallet needs to be synced and which of the client or server is most up to date.

There are 3 basic things the servers does:

  • register a new label or update an existing label
    Client plugin:

          bundle = {"walletId": wallet_id,
                    "walletNonce": nonce,
                    "externalId": self.encode(wallet, item),
                    "encryptedLabel": self.encode(wallet, label if label else '')}
          self.do_request("POST", "/label", False, bundle, True)
          # Caller will write the wallet
          self.set_nonce(wallet, nonce + 1)
    

    Server: https://github.com/maran/electrum-sync-server/blob/master/sync_master.go#L56

  • register multiple new labels (initial upload)
    Client:

          bundle = {"labels": [],
                    "walletId": wallet_id,
                    "walletNonce": self.get_nonce(wallet)}
          for key, value in wallet.labels.items():
              try:
                  encoded_key = self.encode(wallet, key)
                  encoded_value = self.encode(wallet, value)
              except:
                  self.print_error('cannot encode', repr(key), repr(value))
                  continue
              bundle["labels"].append({'encryptedLabel': encoded_value,
                                       'externalId': encoded_key})
    
          self.do_request("POST", "/labels", True, bundle)
    

    Server: https://github.com/maran/electrum-sync-server/blob/master/sync_master.go#L75

  • serve all labels for a wallet since a nonce (used for sync or initial download):

    Client:

    response = self.do_request("GET", ("/labels/since/%d/for/%s" % (nonce, wallet_id)))
    

    Server: https://github.com/maran/electrum-sync-server/blob/master/sync_master.go#L116

This design has the benefit of offering privacy. The xpub is hashed. The txid and label are encrypted.
The drawback is that the server cannot determine whether the data is a genuine txid and label. It could be random spam filling up progressively the disk space. As far as I can tell, there is not DoS mitigation at all in the server code. It seems to only have some timeout preventing downloading or uploading too much data by a client. I can't find this timeout anywhere in the code, so I'm assuming it is the default for whatever framework the server uses.

BCH and eCash users run into timeout, when attempting to synchronize large wallets with a lot of labels.
One of the issue that has been identified is that uploading multiple labels causes multiple database accesses: maran/electrum-sync-server#3

Improvement ideas:

  • optimize the server to batch database updates for force upload0
  • implement spam mitigation on the server side to avoid disk overflow attacks
  • don't hardcode a default sync server, let the user specify a server url
  • figure out an economic incentive model for running a sync server, and/or update the plugin and server to support user registration; a user would need to register their wallet id (hash of the xpub) and specify a password for it. Requests for unregistered wallets could simply be ignored by the server.

Unsigned transactions cannot be parsed by bitcoind

Steps to reproduce

  1. Setup a transaction in ElectrumABC
  2. Preview the transaction (do not sign it)
  3. Click 'Copy' to copy the raw tx to clipboard
  4. bitcoin-cli decoderawtransaction <raw-tx-hex>

Expected output

{
  "txid": "db...4d",
  "hash": "db...4d",
  "version": 2,
  "size": 85,
  "locktime": 0,
  "vin": [
    {
      "txid": "ed...f6",
      "vout": 1,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ]...

(note empty script sig)

Actual output

error code: -22                                                                
error message:                                                                                                                                                                                                                   
TX decode failed

Investigation at a glance

The raw hex output by ElectrumABC appears to fill in some garbage in the scriptSig instead of the scriptSig byte length expected to be 0 (which will give output like in the Expected Output section above). The expected output was generated using createrawtransaction (see example here: https://developer.bitcoin.org/examples/transactions.html#simple-raw-transaction ) and comparing its output fed back into decoderawtransaction against the output from ElectrumABC.

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

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

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.