3 个版本 (破坏性更新)
0.4.0 | 2022年11月5日 |
---|---|
0.3.0 | 2022年9月26日 |
0.2.0 | 2021年1月21日 |
#6 in #nakamoto
41 每月下载次数
在 4 个crate中使用 (3个直接使用)
680KB
15K 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
了解如何使用示例。
点对点层加密(BIP 324),自Bitcoin Core v26.0版本起可用,也将在Nakamoto中很快实现。
最后,将实现C FFI,以便于将客户端嵌入移动应用中。
尽管钱包功能将逐渐添加,但这不是本项目的重点,该项目处于钱包层级之下。
项目目标
-
高保障性:应使用现代技术,如属性和基于模型的测试,以及离散事件模拟和模糊测试对库进行全面测试。这些方法受益于I/O和协议逻辑的清晰分离,并且已经证明比单元测试能够捕获更多的错误。
-
安全性:作为可能被钱包实现使用的库,一个主要目标是安全性和可审计性。因此,我们试图最小化总体依赖性影响,保持代码易于阅读,并禁止任何不安全的代码。
-
效率:区块链同步应尽可能高效,具有低内存、磁盘和带宽开销。我们针对资源受限的环境,如移动设备。
-
隐私:当可能时,应采用隐私保护技术。客户端侧区块过滤(BIP 157/158)应使用在波尔兹曼过滤器(BIP 37)之上,以确保用户隐私并提供审查抵制。
运行测试
cargo test --all
运行守护进程
cargo run --release -p nakamoto-node -- --testnet
贡献
如果您想为Nakamoto的开发做出贡献,请与我们联系!否则,请阅读贡献指南。
捐赠
为了资助项目并确保其持续开发和维护,您可以通过以下地址对我们的比特币支持表示感谢
bc1qa47tl4vmz8j82wdsdkmxex30r23c9ljs84fxah
动机
观察那些对轻客户端不友好的生态系统——以Ethereum为例——我们看到,绝大多数用户在网络上进行交易时被迫信任第三方。这与区块链的理念和raison d'être完全相反,并带来了巨大的安全和隐私风险。遗憾的是,这归因于对轻客户端支持不力,无论是协议层面还是现有实现。轻客户端对于普通用户能够安全地与像Ethereum或Bitcoin这样的网络接口至关重要。
为此,Nakamoto被构想为一个可以在任何移动设备上高效运行的客户端,考虑到限制,实现最高标准的隐私和安全。
许可
在MIT许可下发布。© 2020 Alexis Sellier (https://cloudhead.io)
lib.rs
:
Nakamoto的客户端库。
依赖项
~8MB
~106K SLoC