最近有需要研究electrum钱包,准备边研究边做下记录,记在steemit上备忘,也给需要的人参考。
研究过程中不可避免会查找网络资料,并摘抄一些信息记录,会在参考中表明链接地址,如有遗漏或异议,请联系我删除。
简介
Electrum 是一款受欢迎的轻量级比特币钱包,基于中本聪提出的SPV原理对比特币交易信息进行验证。其功能丰富,开源而且注重安全。
为什么使用Electrum钱包?
优点
- Electrum是轻量钱包,占用空间少。安装文件只有30M,程序运营不需要下载区块链数据文件,这个钱包的查询功能使用 SPV 验证模式和在一个随机的服务器列表。这意味着在验证支付信息的时候只需对第三方很少的信任。不过,它不像Bitcoin Core完全节点的比特币钱包那样安全。
- 安全性高。这个钱包每次交易后使用新的找零地址,这种滚动方式使用地址的方式使得窥探你的余额和支付历史变得难上加难。官方钱包Bitcoin Core 比特币核心同样要求每次支付的时候都使用一个新的比特币地址。
- 只需一次备份,恢复钱包非常简单。支持HD模式(分层确定性钱包,BIP32),通过安全种子恢复全部比特币地址;你可以用便于记忆的安全种子来随时恢复自己的钱包,安全种子是一小段能被快速记住的英文句子。
- 支持多重签名,对安全性有极高要求的用户和企业可以使用多重签名对比特币进行管理。
- 支持二步验证功能(Tow Factoring Authentication),开通二步认证也可以让盗取你的比特币变得难上加难。
- 支持Trezor、Bwallet等硬件钱包,可以方便操作硬件钱包。
- 支持冷存储,可以无需网络即可离线签名进行交易。
- 可用于Tor 网络。这个钱包让你建立并把Tor当成一个代理来使用。这样可以防止攻击者或防止互联网服务供应商把你的支付和你的 IP 地址联系在一起。
- 官方发布了绿色版Windows程序,可以把程序文件放到U盘随身携带。
缺点
- 这个钱包的使用需要链接SPV查询服务器,而这个中心服务器可以把你的支付历史联系在一起并记录你的 IP 地址。
- 第一次运行默认显示英文界面,需要进入钱包后设置为中文。
- 这个钱包运行在电脑上,与官方钱包Bitcoin Core 一样,电脑容易受恶意软件攻击。你需要使用一个安全性高的密码口令、把你的大部分资金转移到冷储存来保证电脑安全。或开通二步验证。
基本概念理解
习惯性的在查了介绍后,简单了解一下里面不熟悉的概念,有些概念可能已经了解,为了方便其他人查看,一并列出
钱包种类
以下列出的是我用过的钱包,至于各钱包支持哪些币有时间或有需要时我再列出来
轻量级钱包
不用下载整个区块链帐本的钱包,移动端上的大部分应该都是轻量级的,例如imToken、jaxx、Blockchain、ROOTOKEN、bitWallet、火币钱包等
重量级钱包(全节点钱包)
pc上的支持矿工和完整区块链的就是重钱包(全节点钱包),如bitcoin核心客户端、Mist、Parity等,pc上当然也有轻量级钱包,例如要研究的electrum等
网页端钱包
应该也归属于轻量级钱包,如MyEtherWallet、MetaMask
硬件钱包
如Legder(这个没用过)
SPV(Simplified Payment Verification)
中本聪论文简要地提及了这一概念,是一种客户端的替代解决方案,用这种方案可以实现轻量级的钱包客户端,这种模式的客户端不必下载完整的区块链数据,只需要下载每个区块的区块头(header),每个区块头的大小大概是80字节,非常小,所以不管区块扩展到2M还是8M, 使用这种模型的轻量级钱包都会非常的小,大概每年增加4.2m的空间。spv钱包可以从区块头中的默克尔根推算出二叉树的支链,这样可以为一个完整节点中存在的交易做证明,它发起一个交易时要向全节点发起请求,一旦根据默克尔根推算出的二叉树验证了一个交易的存在,这个钱包就可以在相应的难度上做为一个交易验证和安全的代理。
这里有个细节需要注意,SPV指的是“支付验证“,而不是“交易验证”。
这两种验证有很大区别。
“交易验证”非常复杂,涉及到验证是否有足够余额可供支出、是否存在双花、脚本能否通过等等,通常由运行完全节点的矿工来完成。
“支付验证”则比较简单,只判断用于“支付”的那笔交易是否已经被验证过,并得到了多少的算力保护(多少确认数)。
HD模式
记得当时每一次看到HD模式,以为是Hard Disk,或者Hard Wallet,后来发现不是,HD的全称是Hierarchical Deterministic,中文叫分层确定性。
所谓分层,就是一个大公司可以为每个子部门分别生成不同的私钥,子部门还可以再管理子子部门的私钥,每个部门可以看到所有子部门里的币,也可以花这里面的币。也可以只给会计人员某个层级的公钥,让他可以看见这个部门及子部门的收支记录,但不能花里面的钱,使得财务管理更方便了。
相比传统的钱包,HD钱包提供了一些好处:
- 备份更容易
- 私钥离线存放更安全
- 权限控制
- 记账
不扩展了,这一块再扩展还得说很多,有些概念我也没去深入理解,基本概念了解下就得!
至于其它一些概念如多重签名、不确定性钱包、确定性钱包、BIP32、BIP39等等,有时间单独写文章介绍!
安装
做为一个技术人士,还是从源码开始吧,源码位置如下:
github位置:https://github.com/spesmilo/electrum
我用的是mac系统,打开目录下的README.rst查看说明
可以使用命令行,Check out代码:
git clone git://github.com/spesmilo/electrum.git
cd electrum
我直接用sourcetree从 git://github.com/spesmilo/electrum.git 克隆项目
安装:
python3 setup.py install
我一直用python2.7,没有安装python3,会提示安装python3.4以上版本,从 https://www.python.org/ 下载pyhton3最新版本并安装,如下:
Chaim:electrum Chaim$ python3 setup.py install
running install
running bdist_egg
running egg_info
creating Electrum.egg-info
...
Using /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
Finished processing dependencies for Electrum==3.1
迫不及待的运行一下,显示如下:
Chaim:electrum Chaim$ ./electrum
Error: Could not import PyQt5 on Linux systems, you may try 'sudo apt-get install python3-pyqt5'
还需要安装pyqt5库,我电脑上没有apt-get,用pip安装,注意这个地方要用pip3,要不缺省用的pip还是2.7
Chaim:electrum Chaim$ pip3 install pyqt5
Collecting pyqt5
Downloading PyQt5-5.10-5.10.0-cp35.cp36.cp37-abi3-macosx_10_6_intel.whl (86.1MB)
100% |████████████████████████████████| 86.1MB 17kB/s
Collecting sip<4.20,>=4.19.4 (from pyqt5)
Downloading sip-4.19.7-cp36-cp36m-macosx_10_6_intel.whl (51kB)
100% |████████████████████████████████| 51kB 916kB/s
Installing collected packages: sip, pyqt5
Successfully installed pyqt5-5.10 sip-4.19.7
可以写个简单代码测试一下pyqt5是否安装好了,如下:
import sys
from PyQt5 import QtWidgets, QtCore
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
widget.resize(360, 360)
widget.setWindowTitle("Hello, PyQt5!")
widget.show()
sys.exit(app.exec_())
到python文件目录,执行
Chaim:python Chaim$ python3 PyQt_test.py
会弹出一个“Hello world”的窗口,pyqt5安装正常!
再次执行,提示如下:
Chaim:electrum Chaim$ ./electrum
cannot import name 'icons_rc'
Error: Could not find icons file.
Please run 'pyrcc5 icons.qrc -o gui/qt/icons_rc.py', and reinstall Electrum
需要编译图标文件,执行如下命令:
Chaim:electrum Chaim$ pip install pyqt5-dev-tools
Collecting pyqt5-dev-tools
Could not find a version that satisfies the requirement pyqt5-dev-tools (from versions: )
No matching distribution found for pyqt5-dev-tools
但是pip3找不到pyqt5-dev-tools,在 https://pypi.python.org/pypi/pyqt5-tools#downloads 只看到windows版本,查了下好像说pyqt5-tools不支持mac系统,这下麻烦了!
尝试安装pyqt5-dev-tools
无法直接用pip安装,需要其它安装方法,找到如下方法:
- 从PyQt官网下载安装dmg格式的安装文件;
- brew install pyqt5;
- pip install pyqt5-macos-built
在brew install时出现permission denied错误,参见解决方案 https://steemit.com/cn/@chaimyu/mac-brew-install-and-link-permission-denied
在pip install进也出现permission denied错误,如下:
error: could not create '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyQt5/bin/pyrcc5': Permission denied
pyrcc5 这不是刚才需要运行的命令吗?看来真理越来越接近了!
继续解决pip install出现的权限问题,尝试了很多种方法,还是不得不说virtualenv是神器,参见解决方案 https://steemit.com/cn/@chaimyu/pip-install-permission-denied
尝试使用virtualenv运行
在electrum目录下运行以下命令启动virtualenv3环境,然后需要按前面步骤把相关库重新安装一遍:
Chaim:electrum Chaim$ virtualenv3 env
Using base prefix '/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/Chaim/Documents/workspace/electrum/env/bin/python3
Also creating executable in /Users/Chaim/Documents/workspace/electrum/env/bin/python
Installing setuptools, pip, wheel...done.
Chaim:electrum Chaim$ source env/bin/activate
(env) Chaim:electrum Chaim$ python setup.py install
running install
running bdist_egg
running egg_info
writing Electrum.egg-info/PKG-INFO
...
Using /Users/Chaim/Documents/workspace/electrum/env/lib/python3.6/site-packages
Finished processing dependencies for Electrum==3.1
(env) Chaim:electrum Chaim$ pip install pyqt5
Collecting pyqt5
Downloading PyQt5-5.10.1-5.10.1-cp35.cp36.cp37.cp38-abi3-macosx_10_6_intel.whl (86.8MB)
100% |████████████████████████████████| 86.8MB 14kB/s
Collecting sip<4.20,>=4.19.4 (from pyqt5)
Downloading sip-4.19.8-cp36-cp36m-macosx_10_6_intel.whl (51kB)
100% |████████████████████████████████| 61kB 54kB/s
Installing collected packages: sip, pyqt5
Successfully installed pyqt5-5.10.1 sip-4.19.8
(env) Chaim:electrum Chaim$ pip install pyqt5-macos-built
Collecting pyqt5-macos-built
Using cached pyqt5-macos-built-5.5.0.tar.gz
Collecting docopt (from pyqt5-macos-built)
Using cached docopt-0.6.2.tar.gz
Building wheels for collected packages: pyqt5-macos-built, docopt
Running setup.py bdist_wheel for pyqt5-macos-built ... done
Stored in directory: /Users/Chaim/Library/Caches/pip/wheels/82/85/98/823a266cdba75c750701dc31ccd8cd649906fd3e8ec3347183
Running setup.py bdist_wheel for docopt ... done
Stored in directory: /Users/Chaim/Library/Caches/pip/wheels/b2/16/5f/c33a2bb5f2dce71205f8e65cbfd05647d79d441282be31fd82
Successfully built pyqt5-macos-built docopt
Installing collected packages: docopt, pyqt5-macos-built
Successfully installed docopt-0.6.2 pyqt5-macos-built-5.5.0
(env) Chaim:electrum Chaim$ pyrcc5 pyrcc5 icons.qrc -o gui/qt/icons_rc.py
Segmentation fault: 11
还是出错啊~怪不得在网上也没找到mac下安装的说明,真是很麻烦啊!!!
尝试解决pyrcc5 Segmenttation fault
怀疑是pyqt5与qt5版本不匹配,调用时出错?不过前面安装pyqt5后已经用python脚本测试过了,能正常运行,是这个问题的可能性不大!
查看双方版本
qt5
Chaim:python Chaim$ brew info qt5
qt: stable 5.10.1 (bottled), HEAD [keg-only]
Cross-platform application and UI framework
https://www.qt.io/
/usr/local/Cellar/qt/5.10.1 (9,375 files, 295.1MB)
pyqt5
Chaim:python Chaim$ pip3 show PyQt5
Name: PyQt5
Version: 5.10
Summary: Python bindings for the Qt cross platform UI and application toolkit
Home-page: https://www.riverbankcomputing.com/software/pyqt/
Author: Riverbank Computing Limited
Author-email: [email protected]
License: GPL v3
Location: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
Requires: sip
qt5与pyqt5相差1个小版本,看起来不像有关系,不管了,试一下吧,想办法装一个qt5.10的版本,安装方法参见 https://steemit.com/cs/@chaimyu/brew
安装下载时间太长,觉得不是这个问题,直接中断了!
尝试pyqt5-macos-built-5.5.0指定版本(此段包括sip、pyqt5的编译安装内容)
pyrcc5是安装pyqt5-macos-built-5.5.0后才能使用的,也就是说这个库是5.5.0,在官网 https://pypi.python.org/pypi/pyqt5-macos-built 上看到如下信息:
The main tools used to build PyQt5 depend on the package version:
5.4.2.x: installs PyQt 5.4.2 built with SIP 4.16.8 and Python 3.4.3
那是不是说我应该用低一点的版本呢,或者直接用上面信息中的版本吧
全部又得来一遍,崩溃...
试图用pip安装pyqt5.4.2,但是已经没有这么低的版本了
(env) Chaim:PyQt-gpl-5.4.2 Chaim$ pip install pyqt5==5.4.2
Collecting pyqt5==5.4.2
Could not find a version that satisfies the requirement pyqt5==5.4.2 (from versions: 5.7.1, 5.8, 5.8.1.1, 5.8.2, 5.9, 5.9.1, 5.9.2, 5.10, 5.10.1)
No matching distribution found for pyqt5==5.4.2
在 https://zh.osdn.net/projects/sfnet_pyqt/releases/ 找到pyqt的旧版本5.4.2,下载
先试图在qt5.10.1下安装pyqt5.4.2,提示版本不兼容:
(env) Chaim:PyQt-gpl-5.4.2 Chaim$ python configure.py -q /usr/local/Cellar/qt/5.10.1/bin/qmake
Querying qmake about your Qt installation...
Determining the details of your Qt installation...
This is the GPL version of PyQt 5.4.2 (licensed under the GNU General Public
License) for Python 3.6.4 on darwin.
Error: This version of PyQt5 and the commercial version of Qt have incompatible
采取brew安装旧版本的方式都找不到5.4这个版本,直接从qt网上下载试试,http://download.qt.io/archive/qt/5.4/5.4.2/
耗时的下载dmg文件,安装指定目录,然后继续命令行试试:
(env) Chaim:PyQt-gpl-5.4.2 Chaim$ python configure.py -q /Users/Chaim/Qt5.4.2/5.4/clang_64/bin/qmake
Querying qmake about your Qt installation...
Determining the details of your Qt installation...
This is the GPL version of PyQt 5.4.2 (licensed under the GNU General Public
这一下是过了,但是make时又说找不到sip相关文件,干脆把sip也下个对应版本4.16.8,下载网站 https://riverbankcomputing.com/news ,这网站上pyqt的各个版本也有
sip安装
(env) Chaim:Downloads Chaim$ cd sip-4.16.8
(env) Chaim:sip-4.16.8 Chaim$ python configure.py
(env) Chaim:sip-4.16.8 Chaim$ make
(env) Chaim:sip-4.16.8 Chaim$ make install
sip4.16.8倒是很容易安装成功了,继续去pyqt目录下make,还是报错误!各种引用不存在之类的错误!
考虑是不是sip重新编译安装了,需要重新配置一下,果真如此,终于顺利编过了,如下:
pyqt安装
(env) Chaim:PyQt-gpl-5.4.2 Chaim$ python configure.py -q /Users/Chaim/Qt5.4.2/5.4/clang_64/bin/qmake
Querying qmake about your Qt installation...
Determining the details of your Qt installation...
This is the GPL version of PyQt 5.4.2 (licensed under the GNU General Public
...
Generating the top-level .pro file...
Making the pyuic5 wrapper executable...
Generating the Makefiles...
(env) Chaim:PyQt-gpl-5.4.2 Chaim$ make
(env) Chaim:PyQt-gpl-5.4.2 Chaim$ make install
继续去运行一下测试pyqt的python程序,执行成功!
进入electrum目录,执行如下命令:
(env) Chaim:electrum Chaim$ pwd
/Users/Chaim/Documents/workspace/electrum
(env) Chaim:electrum Chaim$ ./electrum
cannot import name 'icons_rc'
Error: Could not find icons file.
Please run 'pyrcc5 icons.qrc -o gui/qt/icons_rc.py', and reinstall Electrum
(env) Chaim:electrum Chaim$ pyrcc5 icons.qrc -o gui/qt/icons_rc.py
(env) Chaim:electrum Chaim$ ./electrum
这次执行pyrcc5终于成功了,执行electrum时居然出Electrum的安装向导了!!!
折腾这个让昨天晚上都没睡好,也许qt还是windows下面省心,不过很多年都没怎么用windows了!
进入界面如下图:
各种助记词、密码设置,Electrum钱包终于在mac os上安装成功!
参考
http://www.8btc.com/bitcoin-electrum-intro
http://blog.csdn.net/jeason29/article/details/51611752
https://zhuanlan.zhihu.com/p/30297080
https://www.metachris.com/2016/03/how-to-install-qt56-pyqt5-virtualenv-python3/
https://pypi.python.org/pypi/pyqt5-macos-built
https://stackoverflow.com/questions/34583811/how-can-i-install-pyqt5-on-mac/34585171
https://stackoverflow.com/questions/31456956/error-installing-pyqt-5-4-2-sip-api-reference
***************************************
作者简介
老鱼,从事互联网技术十余年,知名上市公司CTO;炒股十余年,从亏损几十万到略有盈利;顺应创业大潮多次创业,在传统行业和手游行业有所获;研习佛学易理,性格淡泊清净!
欢迎有兴趣的朋友加入微信群和电报群,一起学习探讨,一起实现咱们的小目标!
- 百分百区块链群,微信扫码后会再显示一个二维码,长按图片“识别图中二维码”加入!
- 百倍区块链电报群 https://t.me/blockchain100 希望以后能给先加入的人送一份大礼!