4 个版本 (2 个破坏性更新)
0.3.1 | 2024年6月26日 |
---|---|
0.3.0 | 2024年6月21日 |
0.2.0 | 2024年6月21日 |
0.1.0 | 2024年6月14日 |
#4 in #esplora
每月下载量680次
用于 lwk_wollet
78KB
2K SLoC
瀑布
瀑布是一个为 Web 轻客户端钱包提出的新扫描机制,它利用新的服务器端点。
当前客户端
目前用于 https://liquidwebwallet.org/
由于浏览器限制,网页钱包必须使用 HTTP esplora API。
使用此 API,我们无法像在 electrum 客户端中那样批量请求,并且由于服务器强制执行速率限制,我们无法并发请求,这导致扫描性能非常差。
由于我们在浏览器中持久化钱包数据(加密),第一次扫描后的扫描速度更快。
扫描
交易 | 第一次 | 后续 |
---|---|---|
80 | 66秒(344个请求) | 33秒(187个请求) |
3 | 11秒(63个请求) | 11秒(65个请求) |
新客户端
目前可在 https://liquidwebwallet.org/waterfalls 获取
新的瀑布客户端通过将比特币描述符发送到服务器来避免多次请求。这有一些隐私影响,但我们认为这与将我们所有的地址单独发送到服务器并没有太大的区别。具体来说,在后者中,我们不会发送由前者中的描述符可导出的未来地址的知识。真正的隐私收益是迁移到自托管服务器或个人节点。此外,liquid 具有特定的优势,即具有保密交易,并且盲化密钥不会发送到服务器,因此恶意服务器将知道钱包的交易,但不会知道交换的资产和交易的价值。
扫描
注意,第一次迭代的扫描结果包括交易解盲,每个交易大约需要100毫秒。
交易 | 第一次 | 后续 |
---|---|---|
80 | 22秒(85个请求) | 1秒(5个请求) |
3 | 2秒(11个请求) | 1秒(5个请求) |
ADR
- 端点是 GET,允许请求至少缓存一段时间(甚至 5 秒)以防止 DOS。GET 端点需要特别注意隐私,并且只能通过 HTTPS 执行,服务器不得保存服务器日志。
- 为了这些原因,我们没有在electrs中开发新的端点,而是创建了一个独立的可执行文件
- 开发速度(我们可能将来会在electrs中这样做)
- 针对所需端点而定的特定数据模型,该模型不适用于当前的electrs数据模型。特别是
- 在electrs中,需要迭代数据库中的值,这阻止了使用“多获取”调用以加快多行检索,这对于恢复数百个脚本公钥来说非常必要
- 在electrs中存储了更多信息,而通过只保存严格所需的更多数据,更多的数据可以适合内存
- 瀑布端点镜像了所有Esplora端点(可能通过像nginx这样的Web服务器),但瀑布端点除外
- 返回数据的格式类似于Esplora中的多个
script_get_history
调用,以最小化所需的客户端更改。唯一的例外是提供一些额外的信息(区块时间戳),以避免更多的请求。 - 端点返回的数据混合了区块和内存池中的数据,因为数据的性质不同(例如,您可以将来自区块的数据缓存一分钟),在分离不同端点返回的数据中可能会有一些优势,但我们决定这些收益不值得复杂性。
待办事项
-
WaterfallRequest
和WaterfallResponse
应该在一个单独的crate中很方便,这样客户端就可以使用它。 - 缓存脚本派生,同时缓存最大派生,这样您就可以用它来做单个多获取,而不是n*gap_limit。
- 轮询可配置,默认为1秒,就像现在一样(但测试可以使用更少的时间)。
依赖关系
~38–57MB
~784K SLoC