4个版本 (破坏性)

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

#3 in #nakamoto

每月33次下载
用于 5 crate

MIT 许可证

150KB
2K SLoC

nakamoto

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

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


[dependencies]
nakamoto = "0.4.0"

设计

Nakamoto被拆分为几个crate,每个crate处理轻客户端协议的不同方面。虽然这些crate旨在协同使用,但由于它们之间明确的边界和trait的使用,因此交换实现变得非常简单。从高层次来看,我们有

  • 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 324),自 Bitcoin Core v26.0 版本以来可用,也将在 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)

依赖项

~9–17MB
~176K SLoC