如何搭配 Bitcoin Core 使用 Electrum 个人服务器和钱包

作者:Anony

2024 年 10 月 29 日重大更新:重新梳理了表述;将过往的历史增补信息汇入文章主体;增补了一个章节,并增加了附录。

本文是这份在树莓派上安装比特币节点的教程的续篇,旨在帮助读者安装 Electrum 个人服务器(Electrum Personal Server,EPS)并使用 Electrum 钱包(Electrum Wallet)。

本指南的操作目标是将 EPS 与比特币节点安装在同一设备(比如树莓派或专门的节点设备)上,而将 Electrum 钱包安装在另一台设备(假设是 Windows 系统的个人电脑)上。第五章专门解释了如何用 “SSH 隧道” 在两台设备间通信。

一. 为什么要使用 Electrum 钱包和 EPS?

总的来说,我们使用 Electrum 钱包是为了它的功能性,以及它的用户体验

  • 相比于其它钱包,Electrum 钱包的功能性非常出色。Electrum 钱包支持:
    • 多签名功能
    • 硬件钱包
    • 基于 microSD 卡的 Air-gapped 体验
      • 在线的 Electrum 钱包只负责构造交易,因此无需保存私钥;而运行在离线设备上的 Electrum 钱包软件负责签名;microSD 卡或 U 盘负责则两台设备间传输数据。
    • 独立的闪电钱包实现
    • 但是,到目前为止(2024 年 9 月),Electrum 钱包还不支持 Taproot 地址
  • 而相比于 Bitcoin Core 自带的钱包模块,Electrum 钱包的用户体验更加友好。
    • Electrum 钱包支持助记词标准,可以用有序词组的形式来保存主私钥。而 Bitcoin Core 钱包模块不支持。
      • 但请注意,Electrum 钱包的助记词标准是独立的,不同于 BIP39 助记词标准。

此外,Electrum 钱包也是完全开源的。

最重要的是,Electrum 允许用户指定服务端(后端)(为钱包提供必要的信息并完成网络通信动作)。你既可以使用 Electrum 钱包团队的节点作为服务端,也可以使用自己的节点作为服务端,还可以使用别人的节点。这在最大程度上减少了单点故障,并给了用户对自己的信息的更强控制权

不过,既然我们要当一个硬核的比特币爱好者,那当然要使用自己的节点。因为使用自己的节点可以更好地保证隐私性,你可以直接把交易发送到网络中,不需要假手他人;当你在区块链上扫描地址,也不会因为借用了别人的节点而被发现你可能在使用哪些地址。

也正因此,我们要学习安装 EPS。因为 Electrum 钱包无法直接跟 Bitcoin Core 通信,它需要借助 EPS。也就是说,实际上,Electrum 钱包是跟 EPS 通信,而 EPS 跟 Bitcoin Core 通信,实现完整的功能

运行 EPS 也有额外的一些好处:它不仅可以作为 Electrum 钱包的后端,也可以作为 Blue Wallet 手机钱包Sparrow 桌面钱包Trezor 硬件钱包套件 Trezor Suite 的后端,它也是最流行的个人钱包服务后端。

不过,到目前为止,EPS 还不支持扫描 Taproot 地址,也不支持用描述符来扫描地址。

二. 参考文档

跟上一篇教程一样,我们会先列出最有帮助的文档,并在具体章节中写明它们的参考价值。这些文档有:

三. 安装 Electrum 钱包

这一部分操作分为三步:下载并安装 Electrum 钱包;初始化设置;生成私钥并获得公钥。

下载并安装 Electrum 钱包

先从 Electrum 钱包下载页下载安装文件,请根据你希望安装 Electrum 钱包的设备的系统选择安装文件。本教程假设读者会在 Windows 系统中安装,但 Electrum 钱包也提供 Linux 版本。(如果你使用 Linux 版本,那么你可以将 Bitcoin Core、EPS 和 Electrum 钱包都安装在同一台设备上。)

为确保软件的安全性,请使用 gpg 验证签名。验证签名的一般化教程可见上一篇教程的附录Bitcoin Wiki 的 Electrum 页面也提供了验证签名的教程。

使用 gpg 验证签名时,请确保签名文件的前缀和被签名的文件的文件名一致,如果被签名文件的名字是 electrum.exe ,则签名文件的名字应该是 electrum.exe.asc 。从下载页中得到的签名文件的前缀与安装文件的名字不一致,会导致无法校验。

下载好安装文件后,打开以 .exe 为后缀的安装文件就可以正常安装 Electrum 钱包。安装好之后,可以在系统搜索框内输入 “Electrum” 从而打开软件;也可以在其安装位置查找 electrum-<版本号>.exe,用该文件打开软件。

初始化配置

为了避免 Electrum 钱包在启动时默认连入 Electrum 团队提供的节点,我们需要将 Electrum 设置成离线运行。

  • 如果你使用的是 Windows 系统或其它具有图形界面的系统,请正常打开软件。它会弹出如下界面来询问你是否让它自动选择服务器。请取消 “自动选择服务器” 的选项,并在 “服务器” 框内输入 127.0.0.1:50002 。在后续运行中,Electrum 钱包将向该地址发送数据请求,以获得必要的数据。推荐使用 50002,因为该端口也是 EPS 的默认监听端口:
    image-20220712101432449
  • 如果你要使用命令行来运行 Electrum 钱包,请为命令加上 --server localhost:50002:s 参数,最好再加上 --offline 参数(参考【1】)。或者你可以直接编写 Electrum 钱包的配置文件(参考【2】)
  • 最不济,你可以先把电脑的互联网连接完全断开,再运行 Electrum 钱包。

生成私钥并获得公钥

完成网络设置后,Electrum 会引导你生成一个新的钱包。因为 Electrum 钱包的功能非常全面,它支持你生成新的钱包、导入旧的钱包、生成多签名钱包、配合硬件钱包使用,等等。这里为了方便,我们直接生成一个新的钱包。请在遇到下面这个界面时选择 “创建一个新的密语种子”。它将为你生成一套 12 个词的助记词:

image-20220712103518790

再次强调钱包使用的基本原则:如果你没有备份一个钱包,就不要向它控制的地址转入资金!

生成好了以后,我们执行最后一步:获得该钱包的 “扩展公钥”,该 “扩展公钥” 用来让 EPS 扫描区块链和监听交易。在 Electrum 钱包的菜单中点击 “钱包”,选择 “信息”,它将告诉你钱包的类型,闪电网络节点 ID 等等,复制 “扩展公钥” 框中的内容并保存起来。扩展公钥是以 xpub 、 ypub 或 zpub 开头的字符串。注意,不要向他人暴露你的扩展公钥,这会让别人可以知道你所有的地址以及这些地址上的交易!

四. 安装及配置 EPS

本节的目标是在 Linux 系统(假设是 Raspberry OS,树莓派操作系统)上安装及配置 EPS。

下文将涉及命令行操作。如果你还不熟悉,可以参阅上一份指南

Python 编程语言

首先,我们要确保系统已安装了合适版本的 Python 编程语言(EPS 就是用 Python 开发的)。

下文所推荐安装的 EPS 为 0.2.4 版本,已确认无法在 Python 3.12 版本下工作。在参照以下流程之前,请先检查 EPS 的版本,使用更新的版本。

如果没有新版本,则在命令行窗口运行以下命令,检查本地的 python 版本:

python --version

如果你在使用 Python 3.12 版本,请考虑使用 pyenv,该软件可以帮你在系统中安装多个 Python 版本。请在参照附录 1 安装好 pyenv 之后,再回到这里继续阅读指南。

下载 EPS

接下来,我们用命令行下载 EPS:

wget https://github.com/chris-belcher/electrum-personal-server/archive/refs/tags/eps-v0.2.4.tar.gz
tar -xvf eps-v0.2.4.tar.gz
cd /home/<你的用户名>/electrum-personal-server-eps-v0.2.4/

我们分步讲解这几条命令的作用:

  • 第一条命令 wget 是下载 EPS 的压缩包。
    • 这里使用的网址会下载 EPS 0.2.4 版本。如果你发现 EPS 有新版本,可以替换成新版本的下载地址,或手动下载到自己希望存放的位置。
  • 第二条命令 tar 则是使用 tar 软件来解开压缩包。
  • 第三条命令 cd 是进入到 EPS 的代码文件夹。注意,这条命令无法原样复制,你需要把 <你的用户名> 改成你树莓派的用户名。

自签名证书

由于 EPS 0.2.4 版本的 SSL 证书已在 2023 年 3 月过期,其它应用将无法与之建立正常的网络连接。因此,我们需要参考这份 Issue 来更新 SSL 证书。简述如下:

第一步:(假设我们已在 EPS 的代码文件夹内)移动到证书相关的目录,备份老的证书并在目标文件夹内删除老证书:

cd ./electrumpersonalserver/certs
cp -r ../certs ../certs_backup
rm cert.*

第二步:生成自签名的证书:

openssl genrsa -des3 -passout pass:<password> -out server.pass.key 2048
openssl rsa -passin pass:<password> -in server.pass.key -out cert.key
rm server.pass.key
openssl req -new -key cert.key -out cert.csr
openssl x509 -req -days 1825 -in cert.csr -signkey cert.key -out cert.crt
openssl x509 -enddate -in cert.crt

第一行指令是在生成私钥。注意,这里的口令(password)必须长于 4 位,短于 1300 位

第二行是生成公钥。后面是移除私钥、生成证书请求以及签名证书。注意,在生成证书请求时,它可能要求你填入地区、组织名、用户名一类的信息,并无特别大的意义,但似乎不应一个都不填。最后一行是为证书添加 5 年的使用时间。

运行完这些命令之后,自签名的证书就生成好了。

重要提醒:

如果你曾依据本指南的一个较老的版本成功运行过 EPS、并且使用 Electrum 钱包成功连接过,那么,在给 EPS 更新完证书之后,你的 Electrum 钱包可能会无法连接 EPS。

这是因为:如果你此前成功连接过,则 Electrum 钱包会根据 IP 地址记录 EPS 的证书。但如今 EPS 的证书已经改变,两者就无法匹配了。因此,我们需要手动删除 Electrum 钱包存储的旧证书。

如果你在使用 Windows 系统,证书的目录在:

C:\Users\<你的用户名>\AppData\Roaming\Electrum\certs

找出以你连接 EPS 时使用的 IP 地址为用户名的文件(在我们这里是 127.0.0.1),将它删除。

然后便可重试使用 Electrum 钱包连接 EPS。

安装并配置 EPS

接下来,我们要回到 EPS 代码文件夹(electrum-personal-server-eps-v0.2.4)中,运行以下命令:

pip3 install --user .
cp config.ini_sample config.ini
bitcoin-cli createwallet <任意名称> true
  • 第一行命令是安装 EPS 为一个可以在命令行中直接调用的软件。
  • 第二行命令将一个案例文件的内容存放到新建的文件 config.ini 中。
  • 第三行是在 Bitcoin Core 中新建一个空钱包,以供 EPS 调用 Bitcoin Core 内部的功能。

然后,我们要编辑 coinfig.ini 文件。可以直接在文档管理器中以图形界面打开。编辑的要点如下:

  • 文件里面包括注释的内容很多,看起来可能很烦人。但如果你不需要配置相应的参数,就保持原样不要动它。请不要删去方括号([])框起来的部分!
  • 我们需要配置的部分有: [master-public-keys] 、 [bitcoin-rpc] 、 [electrum-server] 。
  • 在 [master-public-keys] 部分, #any_name_works 下面一行,输入你在 Electrum 钱包中得到的扩展公钥: <随便什么名字> = <你的扩展公钥>
    • 如果你有多个扩展公钥,可以分行输入,使用不同的名字就互不影响
  • 在 [bitcoin-rpc] 部分,在 datadir = 前面加上 # ,将它注释掉,然后将 #rpc_user = 和 #rpc_password = 前面的 # 删去,在后面填上你在 bitcoin.conf 配置文件中相应的值。
    • 这一大串文字是什么意思呢?它主要解决的是你的 EPS 如何跟 Bitcoin Core 程序通信的问题。要么使用 datadir 参数,填入 Bitcoin Core 的数据目录,EPS 会到该目录去寻找一个 .cookie 文件来获得 Bitcoin Core 的相关参数(这需要保持后文的 rpc 参数的注释符号);要么使用 rpc 方法,这就需要把 datadir 参数注释掉。
    • 但是,如上一篇教程所述,我们将 Bitcoin Core 的运行参数写成了一个配置文档,这使得其数据目录里面根本不会产生 .cookie 文件,EPS 也将无法运行。因此我们要注释掉 datadir 参数,使用 rpc 方法。RPC 方法的用户名和口令,请在自己的 Bitcoin Core 配置文件里面找,找到后复制过来即可。如果你阅读了上一篇教程,这应该不是什么难事。
    • 如果你没有为 Bitcoin Core 编写过配置文件,比如你用的是 bitcoin-qt 而不是 bitcoind ,那么,是可以通过在 datadir 参数中填入目录来让 EPS 工作的。
    • 请一定保持 rpc_user 和 rpc_password 这两个参数的名称不变,不然会出错(中间的 _ 不能删去)。
  • 在 [bitcoin-rpc] 部分, wallet_filename = 后填入你使用 bitcoin-cli createwallet 生成钱包时所用的名称。
    • 这个钱包实际上变成了 EPS 调用 Bitcoin Core 钱包组件的一个端口。请不要为这个钱包设置口令,不然你启动 EPS 时将需要把口令也附上;又因为它没有口令的保护,请不要真的使用这个钱包。我们使用 Electrum 钱包就好。
  • [bitcoin-rpc] 的其余部分是跟资源消耗量有关的参数,比如多久在网络中查询一次新交易之类的。如果你可以看懂配置文件中的注释,可以自己调一下,但不是非调不可。
  • 在 [electrum-server] 部分中,将 broadcast_method 的值改为 own-node ,这将保证 EPS 只会通过你的比特币节点来跟比特币网络通信。
    • 这个参数也事关 EPS 使用 Internet 还是洋葱网络来跟外界通信。笔者没有专门了解过洋葱网络在当前网络环境下的可用性,也没有设置过 Bitcoin Core 使用洋葱网络。如果想要设置使用洋葱网络,读者还需自己做点功课。

至此,EPS 的配置文件就编辑完成了。我们使用命令行来启动 EPS。

electrum-personal-server config.ini

如果你的命令行窗口在 EPS 目录内,你可以直接使用上面这条命令。否则你可能需要:

electrum-personal-server /home/<你的用户名>/electrum-personal-server-eps-v0.2.4/config.ini

理论上,EPS 现在能够正常启动了,你将能够在命令行窗口内看到 EPS 的启动信息和捐赠地址。

五. Electrum 钱包与 EPS 的通信

如第一章所述,在我们的三个软件中,EPS 负责与 Bitcoin Core 通信,以取得所需比特币地址的交易历史;而 Electrum 钱包与 EPS 通信,将这些历史展现给用户,并协助用户构造和签名交易。

在上一章中,我们解决了 EPS 与 Bitcoin Core 通信的问题。并且,由于两者位于同一台设备上,这相对比较容易理解。但是,位于两台不同的设备,Electrum 钱包与 EPS 如何通信呢?

这就需要用到一种叫做 “SSH 隧道” 的技术。

SSH” 是 “Secure Shell” 的缩写,其主要用途就是建立安全的网络通信。在实践中,SSH 常常用于设备的远程登录和控制。在上一篇指南中,我们也简单提到了使用 SSH 来控制同一内网中的树莓派电脑的方法。

SSH 隧道则更进一步,可以将对本设备某个网络端口的访问,传递到目标设备的某个网络端口。从而,目标设备上的服务,也可以为本地软件所使用。

简单来说,我们让 Electrum 钱包以本地的某个端口为服务端,但使用 SSH 隧道,将对该端口的数据请求都传递给运行 EPS 的设备(树莓派),然后,正常运行的 EPS 就可以收到数据请求并返回数据。

假定我们的桌面设备(运行 Electrum 钱包)和树莓派(运行 EPS)处在同一内网中(比如使用同一 WiFi,或连接到同一个路由器),则我们可以在桌面设备的 “命令提示符(CMD)” 或 “Powershell” 命令行界面内,使用如下命令,建立 SSH 隧道:

ssh <你的树莓派的用户名>@<你的树莓派的网络地址,如 192.168.1.105> -N -L 50002:localhost:50002

这里的 50002:localhost:50002,前一个 50002 表示本地要被转发的端口,而后一个 50002 表示目标设备接收请求的端口。实际上,前者是 Electrum 钱包要与之通信的本地端口;而后者是 EPS 要监听的端口;只不过两者的编号都恰好是 50002。也可以自定义别的端口,只是在软件中要有相应的配置。

该命令会要求你提供所用的树莓派用户的口令(password)。输入正确的口令并按下回车之后,隧道就将建立。正常的运行会留下一个闪烁的输入指针(|),不正常的运行就会出现报错信息。如果报错表示拒绝连接,请参考上一章、检查 EPS 的工作情形。

如果你无法成功建立隧道,请检查:

  • 你的树莓派是否开启了 SSH 功能
  • 你的桌面设备是否安装了 SSH 功能

实用及安全的建议

如果你觉得总是输入口令很麻烦、不安全,那么 SSH 支持 “无口令登录”。原理是让本地设备生成一对公私钥,并将公钥上传到目标设备,在发起 SSH 连接时指定该私钥。目标设备会通过公钥来检查签名、完成身份验证,从而省去口令验证。配置好公钥后可以禁用口令登录。

这一方式不仅更加方便,也更加安全。但超出了本文的范围,因此不细述。感兴趣的读者可以搜索 “SSH 技巧”。

SSH 并不仅仅支持内网内的远程控制。实际上,只要你能通过一个 IP 地址访问到目标设备,就可以发起远程登录和控制。

现在,我们启动 Electrum 钱包,在钱包的主界面,你可以看到右下角出现绿色小点,左下角显示你的余额:

image-20220712231135243

需要提醒的是,在 Electrum 钱包工作期间,需要保持 EPS 的命令行窗口,该命令行窗口关闭会使 EPS 停止运行。

结语

至此,我们已经配置好了 Electrum 个人服务器并使之搭配 Bitcoin Core 来运行。有了 EPS,我们可以将它作为我们的 Electrum 钱包的服务端,从而最大限度保证我们的隐私性。EPS 还可以服务其它钱包软件。Electrum 钱包内也可以生成多个钱包,为使它工作,只需将其扩展公钥填入 EPS 的配置文件即可。

附录 1. Pyenv 与多版本 Python

在树莓派上安装 Pyenv

在命令行窗口运行以下命令:

sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

这是为 Pyenv 软件安装依赖。然后,运行 Pyenv 自动安装器:

curl https://pyenv.run | bash

安装完成后,窗口会出现一段信息,包含以下字样:

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

复制上述信息,并输入以下命令:

sudo nano ~/.bashrc

该命令会打开 .bashrc 的编辑界面。在文件的底部,粘贴上述信息,保存后退出。这是为了将 Pyenv 添加到环境目录中。

重启环境:

source ~/.bashrc

然后运行:

pyenv versions

如果安装成功,程序会输出系统内已安装好的 Python 版本,例如:

* system (set by /home/pi/.pyenv/version)

安装 Python 3.11.10

运行命令:

pyenv install 3.11.10

运行完之后,使用命令 pyenv versions 检查效果。如果安全不成功,回到上一节,确保自己安装了所有依赖。

创建虚拟环境并运行

运行以下命令:

pyenv shell 3.11.10
mkdir py311
python -m venv ./py311
  • 第一行的作用是将当前执行环境的 Python 语言改为 3.11.10 版本。
  • 第二行的作用是创建一个名为 “py311” 的新文件夹。
  • 第三行的作用是在 “py311” 文件夹内创造一个属于 Python 3.11.10 的 “虚拟环境”。该环境将独立于系统,有自身的 Python 版本和软件库。

运行完成后,关闭当前的命令行窗口,开启一个新的命令行窗口,并运行如下命令:

cd ./py311
source ./bin/activate

第一行是为了移动到 “py311” 文件夹内,第二行是为了启动虚拟环境。启动之后,命令行前面会多一串字符:(py311)

请在该命令行窗口内,继续下载、安装和配置 EPS。这会将 EPS 变成依赖于该虚拟环境的软件,从而不受系统 Python 语言的影响。

注意:

  1. 在安装 EPS 时,安装命令 pip3 install --user . 需要改成 pip3 install .
  2. 此后,每当你尝试重新运行 EPS,都需要先激活虚拟环境 source ~/py311/bin/activate,然后再运行 EPS :electrum-personal-server config.ini

(完)

Anony2022-07-12
https://www.btcstudy.org/2022/07/12/setting-up-electrum-personal-server-and-electrum-wallet-working-with-bitcoin-core/

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇