3个不稳定版本
| 0.13.4 | 2024年1月24日 |
|---|---|
| 0.0.4 | 2023年10月31日 |
| 0.0.0 | 2023年10月31日 |
#2181 in 神奇豆
243 每月下载量
用于 23 个crate(3个直接使用)
295KB
6K SLoC
Kaspa 在 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与WASM32的secp256k1构建)时可能无法正确运行。不幸的是,手动设置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,这是一种在Web浏览器和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](https://node.org.cn/en)
- TypeDoc:[https://typedoc.org/](https://typedoc.org/)
构建与文档
Kaspa CLI + 钱包
`kaspa-cli` 包提供了通过 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://: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
wRPC
在 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
以下命令将运行模拟,生成具有 2 秒通信延迟和 8 BPS(每秒块数)的 1000 个块,同时尝试在每个块中填充最多 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。
依赖
~36–51MB
~828K SLoC