2 个不稳定版本
0.13.4 | 2024 年 1 月 24 日 |
---|---|
0.0.0 | 2024 年 1 月 24 日 |
#18 在 #collecting
每月 31 次下载
用于 4 个软件包 (直接使用 2 个)
190KB
4K SLoC
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)与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中运行的二进制指令格式。这允许在保留Rust的优势的同时,使用JavaScript和TypeScript编程语言轻松开发。
可以通过运行以下命令从源代码构建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/
构建和文档
Kaspa CLI + 钱包
`kaspa-cli`包提供对节点和Rusty Kaspa Wallet运行时的命令行RPC接口以及终端接口。这些钱包与WASM SDK钱包API和Kaspa NG项目兼容。cd cli
cargo run --release
本地Web钱包
在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
- 配置文件应该是一个由换行符分隔的
= 列表。 - 在
=
周围的空白是可以的,arg=value
和arg = value
都可以正确解析。 - 包含特殊字符,如
.
或=
的值需要将值引号引用,即= "<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端点。JavaScript和TypeScript的内置RPC客户端可以作为Kaspa WASM框架的一部分在网页浏览器和Node.js中运行。
基准测试与测试
模拟框架(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
。
依赖项
~38–56MB
~868K SLoC