Ethereum Light clients

go-ethereum 在 2019 年 7 月推出了 v1.9.x 版本。

Geth v1.9.0为轻型客户端提供了一种新模式,称为超轻型客户端 ultra light client

此模式旨在将自己定位在受信任服务器和轻型服务器之间的安全范围中,用来自大多数受信任服务器的数字签名代替PoW验证。借助来自独立实体的足够签名,可以为非关键DApp实现远远超过足够的安全性。就是说,超轻量客户端模式并不是真正针对您的普通节点,而是希望将Geth嵌入到自己的流程中的项目。

轻客户端不下载和验证任何块头,而是使用硬编码检查点(hard coded checkpoint)作为起点。这个检查点包含了全部的必要的信息,从而验证之前的区块的正确性。所以从安全角度而言,没有任何的损失。

但是硬编码检查点(hard coded checkpoint)也有缺点:

  • 由于检查点被硬编码到发行版二进制文件中,因此较旧的发行版将始终从较旧的块开始同步。几个月就可以了,但是最终变得很烦人。当然,您可以更新Geth来获取一个新的检查点,也可以获取所有的变更,但是很少有人希望这样做。
  • 由于这些检查点已嵌入到代码中,因此如果您想在自己的专用网络中支持它们,那将很不幸,需要修改Geth,或通过配置文件配置检查点,并在每次更新检查点时分发一个新文件。可行,但长期而言并不可行。

Geth v1.9.x 附带了对链上检查点oracle的支持。超轻型客户端 ultra light client 可以不依赖于硬编码的检查点,而可以联系远程轻服务器,并要求它们返回存储在链上智能合约中的更新的检查点。最好的部分是,超轻型客户端 ultra light client 可以通过密码证明返回的数据已由所需数量的批准验证者签名!

等等,超轻型客户端 ultra light client 如何知道谁被授权签署链上检查站?对于开箱即用的受支持网络,Geth附带硬编码的检查点oracle地址和授权签署者的列表;对于专用网络,可以通过配置文件指定oracle详细信息。

尽管新旧检查点机制看起来很相似(两者都需要Geth或配置文件中的硬编码数据),但新检查点oracle只需要配置一次,然后可以任意长时间使用以发布新的检查点。

checkpoint-adminGeth v1.9.x 附带的针对 checkpoint oracle contract 的管理工具。

checkpoint-admin 可用于查询已部署合同的状态。--rpc 需要指向一个light node,或者一个开启 --lightserv 特性的 full node。

1
2
3
4
5
6
7
8
9
$ checkpoint-admin --rpc ~/.ethereum/rinkeby/geth.ipc status
Oracle => 0xebe8eFA441B9302A0d7eaECc277c09d20D684540

Admin 1 => 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3
Admin 2 => 0x78d1aD571A1A09D60D9BBf25894b44e4C8859595
Admin 3 => 0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7
Admin 4 => 0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E

Checkpoint (published at #4638418) 140 => 0x488c2eba92d31baeccfb6968fad5c21a3df93181b43b4cf253b4d572b64172ef

该命令也可以用户部署一个oracle,用以更新checkpoint,并publish该checkpoint到区块链网络中。

将来,checkpoint-admin 也可以离线工作,并有 clef 钱包签名。

参考文档==> Geth v1.9.0 Six months distilled