2 个不稳定版本
0.4.0 | 2022年11月5日 |
---|---|
0.3.0 | 2022年9月26日 |
#7 在 #nakamoto
117 每月下载量
在 11 个 crate (6 个直接) 中使用
45KB
891 行
nakamoto
Nakamoto 是一个使用 Rust 编写的隐私保护比特币轻客户端实现,注重低资源消耗、模块化和安全性。
项目的愿景是构建一套易于嵌入任何程序和平台(无论是移动设备还是桌面)的轻客户端功能库。由于高效的运行时和最小的依赖项集合,Nakamoto 的小型 CPU、内存和代码占用成为可能。其他语言(例如 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 的发展做出贡献,请与我们联系!否则,请阅读贡献指南。
捐赠
为了资助项目并确保其持续的开发和维护,您的 Bitcoin 支持将受到以下地址的欢迎
bc1qa47tl4vmz8j82wdsdkmxex30r23c9ljs84fxah
动机
观察那些对轻客户端不友好的生态系统——以以太坊为例——我们发现绝大多数用户在网络上进行交易时被迫信任第三方。这与区块链的理念和raison d'être 完全相反,并带来了巨大的安全和隐私风险。遗憾的是,这源于对轻客户端的支持不佳,无论是在协议层面还是在可用实现方面。轻客户端对于普通用户能够安全地与像以太坊或比特币这样的网络交互是必要的。
为此,Nakamoto 被构思为一个客户端,可以在任何移动设备上高效运行,同时满足给定限制下的最高隐私和安全标准。
许可证
在 MIT 许可证下发布。© 2020 Alexis Sellier (https://cloudhead.io)
lib.rs
:
点对点网络核心类型。
依赖项
~0.7–1.4MB
~28K SLoC