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日

#8 in #nakamoto

Download history 22/week @ 2024-03-11 22/week @ 2024-03-18 16/week @ 2024-03-25 64/week @ 2024-04-01 16/week @ 2024-04-08 14/week @ 2024-04-15 18/week @ 2024-04-22 19/week @ 2024-04-29 22/week @ 2024-05-06 19/week @ 2024-05-13 17/week @ 2024-05-20 27/week @ 2024-05-27 19/week @ 2024-06-03 24/week @ 2024-06-10 20/week @ 2024-06-17 26/week @ 2024-06-24

89 每月下载量
用于 8 个库 (6 直接)

MIT 许可证

105KB
2K SLoC

nakamoto

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

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


[dependencies]
nakamoto = "0.4.0"

设计

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

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

有关上述内容的概述,请参阅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)


lib.rs:

所有 crate 共享的常见比特币功能库。

依赖项

~8MB
~107K SLoC