术语表 /节点与软件
Electrum 服务器
又称 Electrum server。
- Electrum 服务器是什么?
- Electrum 服务器按脚本为区块链建立索引并响应轻量级钱包的地址查询,使这些钱包无需自行下载区块链即可即时获得余额。
总得有人来做检索。全节点知道哪些币尚未花费,但并不保存从地址到其历史记录的映射,因此,若钱包希望在一秒而不是一小时内拿到这些历史记录,就要向已建好这种映射的服务器查询。标准做法是在自己的节点旁运行自己的服务器,因为另一种做法等于把您拥有的全部地址列表交给陌生人。
运作方式
Electrum 服务器位于 Bitcoin Core 和钱包之间,在两者之间转换信息。
它在每个区块到达时从节点读取,提取每个输出脚本,并保存从该脚本到涉及它的交易的映射。随后,钱包通过一种简单的、基于行的 JSON 协议连接,明文使用端口50001,TLS 使用端口50002,既可以提出查询,也可以订阅,在答案变化时收到通知。订阅机制使 Electrum 钱包的反应显得即时:付款一到账,服务器就推送通知,而不是由钱包不断轮询。
钱包不会通过该连接发送地址,而是发送脚本哈希,即输出脚本字节反转后的 SHA-256摘要,这是协议约定,而不是隐私保护措施。服务器仍然确切知道您在监视哪些币,因为它会返回该哈希的历史记录,并能立即在自己的索引中查到对应的地址。把脚本哈希当作匿名手段,是关于这款软件最常见的误解。
钱包自己保留的是验证。它下载区块头链,并检查服务器为每笔交易提供的默克尔证明,因此服务器若不同时伪造一条有真实工作量证明支撑的区块头链,就无法凭空捏造一笔从未发生的付款。不过,服务器仍可能通过隐瞒来撒谎,向您隐藏某笔交易或某次花费,这是较小但真实存在的风险。
三种实现涵盖了几乎所有部署:Rust 编写的 electrs,因索引小而受青睐;C++ 编写的 Fulcrum,因查询速度快而受青睐;以及 Python 编写的 ElectrumX,即最初的版本。Electrum Personal Server 另辟蹊径,只监视您在配置文件中列出的钱包,而不为整条区块链建立索引,几乎不占磁盘,但对其他任何人的地址都无法作答。
在哪里会遇到它
Electrum 服务器是大多数桌面比特币钱包中看不见的另一半。
Electrum 本身由 Thomas Voegtlin 于2011年11月首次发布,除非您另行设置,否则它会连接到志愿者运营的公共服务器。Sparrow、Specter 和 BlueWallet 使用的都是同一协议。所有常见的节点套件,包括 Umbrel、Start9、RaspiBlitz 和 myNode,都自带 electrs 或 Fulcrum,正是为了让您笔记本电脑上的钱包可以查询您自己的机器,而不让其他人得知您的地址。
这一点之所以重要,并非假设。从2018年12月下旬起,攻击者在公共 Electrum 网络上运行恶意服务器,利用3.3.3之前版本的一个漏洞,即服务器可以把任意富文本作为错误消息返回。尝试发送付款的用户会看到一个看似官方的安装更新提示,而下载的是恶意软件。据报道,损失达数百枚比特币。客户端随后改为去除服务器消息中的格式,但教训依然成立:公共服务器是您的钱包不断与之通信的不受信任的一方。
Electrum 服务器 vs Neutrino
Electrum 服务器替您做检索,并因此得知您在查找什么;Neutrino 则把原始材料发给您,因此它几乎一无所知。Electrum 模式成本低,每次查询只需几千字节,答案即时返回,因此在与硬件设备配合的桌面钱包中占主导地位。Neutrino 模式为每个区块下载一个紧凑过滤器并在本地检查,花费多得多的带宽,以避免泄露哪些脚本匹配。服务器是您自己的时,选择服务器模式;服务器不可能由您自己运行时,选择过滤器模式。