6个版本
0.13.4 | 2024年1月24日 |
---|---|
0.0.4 | 2023年10月31日 |
0.0.3 | 2023年4月17日 |
0.0.0 | 2023年3月23日 |
#2259 in 神奇豆
366次每月下载
在 37 个crate中使用 (5 直接)
5KB
70 行
Kaspa On Rust
欢迎来到基于Rust的Kaspa全节点及其辅助库的实现。包含的节点发布版可作为现有Golang节点的替代品,至今仍是Kaspa网络的推荐节点软件,向开发者介绍了Rust在Kaspa网络环境下的可能性。
我们邀请开发者和区块链爱好者协作、测试和优化我们的Rust实现。这里的每一行代码都是为开源区块链运动做出贡献的机会,塑造一个旨在可扩展性和速度,而不牺牲去中心化的平台。
您的反馈、贡献和问题报告将是推动此代码库发展和使其成为Kaspa网络可靠节点的关键。
安装
在Linux上构建
-
安装一般先决条件
sudo apt install curl git build-essential libssl-dev pkg-config
-
安装Protobuf(gRPC所需)
sudo apt install protobuf-compiler libprotobuf-dev #Required for gRPC
-
安装clang工具链(RocksDB和WASM secp256k1构建所需)
sudo apt-get install clang-format clang-tidy \ clang-tools clang clangd libc++-dev \ libc++1 libc++abi-dev libc++abi1 \ libclang-dev libclang1 liblldb-dev \ libllvm-ocaml-dev libomp-dev libomp5 \ lld lldb llvm-dev llvm-runtime \ llvm python3-clang
-
安装rust工具链
如果您已经安装了rust,通过运行以下命令更新它:
rustup update
-
安装wasm-pack
cargo install wasm-pack
-
安装wasm32目标
rustup target add wasm32-unknown-unknown
-
克隆仓库
git clone https://github.com/kaspanet/rusty-kaspa cd rusty-kaspa
在Windows上构建
-
安装 Git for Windows 或其他 Git 发行版。
-
安装 Protocol Buffers 并将
bin
目录添加到您的Path
-
将 LLVM 安装目录下的
bin
目录(例如C:\Program Files\LLVM\bin
)添加到 PATH将环境变量
LIBCLANG_PATH
设置为指向bin
目录重要:由于 C++ 依赖配置问题,在 Windows 上安装的 LLVM
AR
可能无法在切换 WASM 和原生 C++ 代码编译(原生RocksDB+secp256k1
与secp256k1
的 WASM32 构建)时正确运行。不幸的是,手动设置AR
环境变量也会使 C++ 构建工具链困惑(它不应为原生设置,而应为 WASM32 目标设置)。目前,解决此问题的最佳方法是:在 Windows 上安装 LLVM 后,转到目标bin
安装目录,并将LLVM_AR.exe
复制或重命名为AR.exe
。 -
安装rust工具链
如果您已经安装了rust,通过运行以下命令更新它:
rustup update
-
安装wasm-pack
cargo install wasm-pack
-
安装wasm32目标
rustup target add wasm32-unknown-unknown
-
克隆仓库
git clone https://github.com/kaspanet/rusty-kaspa cd rusty-kaspa
在 Mac OS 上构建
-
安装Protobuf(gRPC所需)
brew install protobuf
-
安装 llvm。
默认的 XCode llvm 安装不支持 WASM 构建目标。要在 MacOS 上构建 WASM,您需要从 homebrew 安装 llvm(编写时,MacOS 的 llvm 版本为 16.0.1)。
brew install llvm
注意:Homebrew 可以根据您的配置使用不同的 keg 安装位置。例如
/opt/homebrew/opt/llvm
->/opt/homebrew/Cellar/llvm/16.0.1
/usr/local/Cellar/llvm/16.0.1
要确定安装位置,可以使用
brew list llvm
命令,然后相应地修改以下路径% brew list llvm /usr/local/Cellar/llvm/16.0.1/bin/FileCheck /usr/local/Cellar/llvm/16.0.1/bin/UnicodeNameMappingGenerator ...
如果您有
/opt/homebrew/Cellar
,则应能够使用/opt/homebrew/opt/llvm
。将以下内容添加到您的
~/.zshrc
文件中export PATH="/opt/homebrew/opt/llvm/bin:$PATH" export LDFLAGS="-L/opt/homebrew/opt/llvm/lib" export CPPFLAGS="-I/opt/homebrew/opt/llvm/include" export AR=/opt/homebrew/opt/llvm/bin/llvm-ar
重新加载
~/.zshrc
文件source ~/.zshrc
-
安装rust工具链
如果您已经安装了rust,通过运行以下命令更新它:
rustup update
-
安装wasm-pack
cargo install wasm-pack
-
安装wasm32目标
rustup target add wasm32-unknown-unknown
-
克隆仓库
git clone https://github.com/kaspanet/rusty-kaspa cd rusty-kaspa
构建 WASM32 SDK
Rust WebAssembly (WASM) 指的是使用 Rust 编程语言编写可以编译成 WebAssembly 的代码,WebAssembly 是一种在浏览器和 NodeJs 中运行的二进制指令格式。这允许使用 JavaScript 和 TypeScript 编程语言进行轻松开发,同时保留 Rust 的优点。
可以通过运行以下命令从源代码构建 WASM SDK 组件:- ./build-release
- 构建完整的发布包(包括为 web 和 nodejs 目标提供的发布和调试构建)- ./build-docs
- 构建 TypeScript 文档 - ./build-web
- 发布 web 构建 - ./build-web-dev
- 开发 web 构建 - ./build-nodejs
- 发布 nodejs 构建 - ./build-nodejs-dev
- 开发 nodejs 构建
重要:不要在生产环境中使用 dev
构建。它们的大小显著更大,速度更慢,并且包含调试符号。
需求
- NodeJs (v20+):[链接](https://node.org.cn/en)
- TypeDoc:[链接](https://typedoc.org/)
构建和文档
- 发布构建:[链接](https://github.com/kaspanet/rusty-kaspa/releases)
- 开发者构建:[链接](https://kaspa.aspectron.org/nightly/downloads/)
- 开发者 TypeScript 文档:https://kaspa.aspectron.org/docs/
Kaspa CLI + 钱包
`kaspa-cli` 库提供节点驱动的 RPC 接口和 Rusty Kaspa 钱包运行时的终端界面。这些钱包与 WASM SDK 钱包 API 和 Kaspa NG 项目兼容。cd cli
cargo run --release
本地网页钱包
在 wallet/wasm/web
文件夹内运行 http 服务器。如果您没有,可以使用以下内容
cd wallet/wasm/web
cargo install basic-http-server
basic-http-server
默认情况下,basic-http-server 将在 4000 端口上提供服务,因此请打开您的网页浏览器并加载 https://127.0.0.1:4000
该框架与所有主流桌面和移动浏览器兼容。
运行节点
启动主网节点
cargo run --release --bin kaspad
# or with UTXO-index enabled (needed when using wallets)
cargo run --release --bin kaspad -- --utxoindex
启动测试网节点
cargo run --release --bin kaspad -- --testnet
测试网 11
要参与 10BPS 测试网络 (TN11),请参阅以下详细的 指南。
使用配置文件
cargo run --release --bin kaspad -- --configfile /path/to/configfile.toml
# or
cargo run --release --bin kaspad -- -C /path/to/configfile.toml
- 配置文件应是一个由换行符分隔的
CLI argument> = value> 列表。 - 在
=
周围的空白字符是允许的,arg=value
和arg = value
都会被正确解析。 - 包含特殊字符如
.
或=
的值需要引号,即CLI argument> = "<value>"。 - 具有多个值的参数应括在方括号中,如
addpeer = ["10.0.0.1", "1.2.3.4"]
。
例如
testnet = true
utxoindex = false
disable-upnp = true
perf-metrics = true
appdir = "some-dir"
netsuffix = 11
addpeer = ["10.0.0.1", "1.2.3.4"]
通过传递 --help
标志来查看所有可能的参数
cargo run --release --bin kaspad -- --help
高性能 RPC
在 kaspad
中默认禁用了 wRPC 子系统,可以通过以下方式启用
JSON 协议
--rpclisten-json = <interface:port>
# or use the defaults for current network
--rpclisten-json = default
Borsh 协议
--rpclisten-borsh = <interface:port>
# or use the defaults for current network
--rpclisten-borsh = default
注释
Rusty Kaspa 集成了一个可选的 wRPC 子系统。wRPC 是一个高性能、平台无关、以 Rust 为中心、基于 WebSocket 框架的 RPC 实现,可以使用 Borsh 和 JSON 协议编码。
JSON 协议消息类似于 JSON-RPC 1.0,但由于服务器端通知而与规范有所不同。
Borsh 编码旨在用于进程间通信。当使用 Borsh 时,客户端和服务器应从同一代码库构建。
JSON 协议基于 Kaspa 数据结构,且与数据结构版本无关。您可以使用任何 WebSocket 库连接到 JSON 端点。作为 Kaspa WASM 框架的一部分,提供了能够在网页浏览器和 Node.js 中运行的内置 RPC 客户端。
基准测试 & 测试
模拟框架(Simpa)
在 kaspad
和 simpa
中,可以通过以下方式 过滤 日志
当前的代码库支持完整的进程内网络模拟,通过虚拟时间建立实际的 DAG,并具有虚拟延迟和基准验证时间(在模拟生成后)。
查看可用的命令
cargo run --release --bin simpa -- --help
以下命令将运行模拟以生成 1000 个块,具有 2 秒的通信延迟和 8 BPS(每秒块数),同时尝试用最多 200 笔交易填充每个块。
cargo run --release --bin simpa -- -t=200 -d=2 -b=8 -n=1000
堆分析
在 kaspad
和 simpa
中进行堆分析可以通过启用 heap
功能,并使用 --features
参数进行配置。
cargo run --bin kaspad --profile heap --features=heap
这将生成位于工作目录根目录的 {bin-name}-heap.json
文件,可以使用 dhat-viewer 进行检查。
测试
运行单元和大多数集成测试
cd rusty-kaspa
cargo test --release
// or install nextest and run
使用 nextest
cd rusty-kaspa
cargo nextest run --release
基准测试
cd rusty-kaspa
cargo bench
日志记录
在 kaspad
和 simpa
中,可以通过以下方式 过滤 日志
-
定义环境变量
RUST_LOG
-
添加类似于以下示例的 --loglevel 参数
(cargo run --bin kaspad -- --loglevel info,kaspa_rpc_core=trace,kaspa_grpc_core=trace,consensus=trace,kaspa_core=trace) 2>&1 | tee ~/rusty-kaspa.log
在此命令中,我们将
loglevel
设置为INFO
。
依赖关系
~6.5MB
~81K SLoC