3 个版本 (重大变更)

0.4.0 2022年11月5日
0.3.0 2022年9月26日
0.2.0 2021年1月21日
0.1.0 2020年8月5日

#5 in #nakamoto


2 crate 中使用

MIT 许可证

130KB
3K SLoC

nakamoto

Nakamoto 是一个基于 Rust 的隐私保护比特币轻客户端实现,注重低资源占用、模块化和安全性。

项目的愿景是构建一套针对轻客户端功能的库,易于嵌入任何程序和任何平台,无论是移动还是桌面。由于其高效的运行时和最小化依赖集,项目的小型 CPU、内存和代码占用成为可能。实现语言 Rust 开辟了用其他语言(例如 Swift、Python、Java)编写的程序通过外部函数接口(FFI)直接绑定到它的可能性。


[dependencies]
nakamoto = "0.4.0"

设计

Nakamoto 分为几个 crate,每个 crate 处理轻客户端协议的不同方面。尽管这些 crate 设计为协同使用,但由于它们之间的显式边界和 traits 的使用,替换实现变得非常简单。从高层次来看,我们有

  • nakamoto-client: 核心轻客户端库
  • nakamoto-p2p: 协议状态机实现
  • nakamoto-chain: 块存储和分叉选择逻辑
  • nakamoto-net: 反应器实现使用的网络原语
  • nakamoto-net-poll: 默认的基于 poll 的网络后端
  • nakamoto-common: 所有 crate 使用的通用功能
  • nakamoto-node: 一个独立的轻客户端守护进程
  • nakamoto-wallet: 基于上述 crate 构建的非常基础的只读钱包

有关上述内容的概述,请参阅 docs 文件夹中的 架构图

状态

虽然该项目还处于起步阶段,但基本功能已经实现。Nakamoto可以查找对等节点、下载并验证最长链以及处理分叉,同时实现完整的头部验证协议。

客户端块过滤(BIP 157/158)已实现并正在运行。请参阅nakamoto-wallet,了解如何使用它的示例。

自Bitcoin Core v26.0以来可用的对等层加密(BIP 324)也将在Nakamoto中很快实现。

最后,将实现C FFI,以便轻松将客户端嵌入移动应用程序中。

尽管钱包功能将逐渐添加,但这不是该项目的重点,该项目位于钱包一级以下。

项目目标

  • 高可靠性:该库应通过现代技术如属性基于模型的测试以及离散事件模拟模糊测试进行彻底测试。这些方法受益于I/O和协议逻辑之间的清晰分离,并且已经证明比单元测试可以发现更多的错误。

  • 安全性:作为一个可能进入钱包实现的库,主要目标是安全性和可审计性。因此,我们试图最小化总依赖性足迹,保持代码易于阅读,并禁止任何不安全代码。

  • 效率:区块链同步应尽可能高效,具有低内存、磁盘和带宽开销。我们针对资源受限的环境,如移动设备。

  • 隐私性:在可能的情况下,应采用保护隐私的技术。《客户端侧块过滤》(BIP 157/158)应与BIP 37的Bloom过滤器相比使用,以确保用户隐私并提供审查阻力。

运行测试

cargo test --all

运行守护进程

cargo run --release -p nakamoto-node -- --testnet

贡献

如果您想为Nakamoto的开发做出贡献,请与我们联系!否则,请阅读贡献指南

捐赠

为了资助该项目并确保其持续开发和维护,您可以在以下地址获得比特币的支持

bc1qa47tl4vmz8j82wdsdkmxex30r23c9ljs84fxah

动机

观察那些对轻客户端不友好的生态系统——例如以太坊——我们看到,绝大多数用户在网络上进行交易时被迫信任第三方。这与区块链的想法和raison d'être完全相反,并带来了巨大的安全和隐私风险。遗憾的是,这是由于对轻客户端的支持不足,无论是在协议层面还是在现有实现方面。轻客户端对于普通用户能够安全地与像以太坊或比特币这样的网络交互是必要的。

为此,Nakamoto被构想为一个可以在任何移动设备上高效运行的客户端,考虑到限制,达到最高标准的隐私和安全。

许可

根据MIT许可协议许可。© 2020 Alexis Sellier (https://cloudhead.io)


lib.rs:

独立轻客户端守护进程。作为后台进程运行轻客户端。

依赖项

~9–19MB
~194K SLoC