3 个版本 (破坏性)

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

#2872 in 魔法豆

MIT 许可证

760KB
16K SLoC

nakamoto

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

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


[dependencies]
nakamoto = "0.4.0"

设计

Nakamoto 被分割成几个 crate,每个 crate 负责轻客户端协议的不同方面。虽然这些 crate 被设计成协同使用,但由于它们之间有明确的边界以及特质的用法,所以交换实现变得非常简单。从高层次来看,我们有:

  • 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 了解如何使用它的示例。

一旦点对点层加密(BIP 151)在核心中实现,它也将被纳入 Nakamoto。

最后,将实现 C FFI,以使在移动应用程序中嵌入客户端变得简单。

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

项目目标

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

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

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

  • 隐私:在可能的情况下,应采用保护隐私的技术。应使用 客户端侧块过滤(BIP 157/158)而不是 bloom 过滤器(BIP 37),以确保用户隐私并提供抗审查性。

运行测试

cargo test --all

运行守护进程

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

贡献

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

捐赠

为了资助项目并确保其持续的开发和维护,您对以下地址的比特币支持将受到欢迎

bc1qa47tl4vmz8j82wdsdkmxex30r23c9ljs84fxah

动机

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

为此,Nakamoto 被设想为一个可以在任何移动设备上高效运行的客户端,在给定的约束条件下,实现最高标准的隐私和安全。

许可

在 MIT 许可证下授权。© 2020 Alexis Sellier (https://cloudhead.io)

依赖关系

~8–18MB
~195K SLoC