0.1.0 |
|
---|
#11 在 #nakamoto
13KB
210 行
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
。
自Bitcoin Core v26.0以来可用的点对点层加密(BIP 324)也将很快在Nakamoto中实现。
最后,将实现一个C FFI,以便于将客户端嵌入到移动应用程序中。
尽管钱包功能将逐步添加,但这不是本项目的主要目标,本项目位于钱包级别之下。
项目目标
-
高保证:库应使用现代技术进行彻底测试,例如属性和基于模型的测试,以及离散事件模拟和模糊测试。这些方法受益于I/O和协议逻辑的清晰分离,并且已被证明比单元测试能捕捉到更多的错误。
-
安全性:作为可能被钱包实现所采用的库,主要目标是安全性和可审计性。因此,我们尽量减少总依赖足迹,保持代码易于阅读,并禁止任何不安全代码。
-
效率:区块链同步应尽可能地高效,具有低内存、磁盘和带宽开销。我们针对资源受限的环境,如移动设备。
-
隐私:在可能的情况下,应采用保护隐私的技术。《客户端侧区块过滤》(BIP 157/158)应使用在布隆过滤器(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)
依赖关系
~10-18MB
~193K SLoC