#kaspa #rpc #version #full-node #infrastructure #macro #testing

kaspa-rpc-macros

Kaspa RPC 基础设施的宏

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 日

#45 in #full-node

Download history 22/week @ 2024-04-08 32/week @ 2024-04-15 38/week @ 2024-04-22 28/week @ 2024-04-29 43/week @ 2024-05-06 9/week @ 2024-05-13 29/week @ 2024-05-20 41/week @ 2024-05-27 36/week @ 2024-06-03 27/week @ 2024-06-10 31/week @ 2024-06-17 48/week @ 2024-06-24 12/week @ 2024-07-08 44/week @ 2024-07-15 26/week @ 2024-07-22

90 每月下载次数
14 个crate中使用 (直接使用 4 个)

MIT/Apache

26KB
522

Kaspa On Rust

欢迎来到基于 Rust 的 Kaspa 全节点及其辅助库的实现。包含的节点发布版可作为现有 Golang 节点 的替代品,并且至今是 Kaspa 网络推荐的节点软件,为开发者介绍 Rust 在 Kaspa 网络环境中的可能性。

我们邀请开发者和区块链爱好者协作、测试和优化我们的 Rust 实现。这里每一行代码都是为开源区块链运动做出贡献的机会,塑造一个旨在可扩展性和速度的平台,同时不牺牲去中心化。

您的反馈、贡献和问题报告将对于这个代码库的演变和作为 Kaspa 网络中可靠节点的成熟至关重要。

安装

在 Linux 上构建
  1. 安装通用先决条件

    sudo apt install curl git build-essential libssl-dev pkg-config 
    
  2. 安装 Protobuf(gRPC 所需)

    sudo apt install protobuf-compiler libprotobuf-dev #Required for gRPC
    
  3. 安装 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
    
  4. 安装 rust 工具链

    如果您已安装 rust,请运行以下命令更新它:rustup update

  5. 安装 wasm-pack

    cargo install wasm-pack
    
  6. 安装 wasm32 目标

    rustup target add wasm32-unknown-unknown
    
  7. 克隆仓库

    git clone https://github.com/kaspanet/rusty-kaspa
    cd rusty-kaspa
    
在 Windows 上构建
  1. 安装 Git for Windows 或其他 Git 发行版。

  2. 安装 Protocol Buffers 并将 bin 目录添加到您的 Path

  3. 安装 LLVM-15.0.6-win64.exe

    将 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

  4. 安装 rust 工具链

    如果您已安装 rust,请运行以下命令更新它:rustup update

  5. 安装 wasm-pack

    cargo install wasm-pack
    
  6. 安装 wasm32 目标

    rustup target add wasm32-unknown-unknown
    
  7. 克隆仓库

    git clone https://github.com/kaspanet/rusty-kaspa
    cd rusty-kaspa
    
在 Mac OS 上构建
  1. 安装 Protobuf(gRPC 所需)

    brew install protobuf
    
  2. 安装 llvm。

    llvm 的默认 XCode 安装不支持 WASM 构建目标。要在 MacOS 上构建 WASM,您需要从 homebrew 安装 llvm(截至编写本文时,MacOS 的 llvm 版本是 16.0.1)。

    brew install llvm
    

    注意:Homebrew 的安装位置可能会根据您的配置而有所不同。例如

    • /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
    
  3. 安装 rust 工具链

    如果您已安装 rust,请运行以下命令更新它:rustup update

  4. 安装 wasm-pack

    cargo install wasm-pack
    
  5. 安装 wasm32 目标

    rustup target add wasm32-unknown-unknown
    
  6. 克隆仓库

    git clone https://github.com/kaspanet/rusty-kaspa
    cd rusty-kaspa
    
构建 WASM32 SDK

Rust WebAssembly (WASM) 指的是使用 Rust 编程语言编写代码,这些代码可以编译成 WebAssembly,这是一种在网页浏览器和 NodeJs 中运行的二进制指令格式。这允许在保留 Rust 优点的同时,使用 JavaScript 和 TypeScript 编程语言轻松开发。

可以通过运行以下命令从源构建 WASM SDK 组件:- ./build-release - 构建 full release 包(包括 web 和 nodejs 目标的发布和调试构建)- ./build-docs - 构建 TypeScript 文档 - ./build-web - 发布 web 构建 - ./build-web-dev - 开发 web 构建 - ./build-nodejs - 发布 nodejs 构建 - ./build-nodejs-dev - 开发 nodejs 构建

重要:不要在生产环境中使用 dev 构建。它们的大小大得多,速度较慢,并且包含调试符号。

要求

构建和文档

Kaspa CLI + 钱包`kaspa-cli` 库提供了用于节点 cli 驱动的 RPC 接口以及用于 Rusty Kaspa 钱包运行时的终端界面。这些钱包与 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 上提供服务,所以打开您的网页浏览器并加载 http://localhost: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 参数> = <值> 列表。
  • 在 `= 周围的空白字符是可以的,`arg=value` 和 `arg = value 都可以被正确解析。
  • 包含特殊字符如 `.` 或 `=` 的值需要将值引起来,即 <CLI 参数> = "<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 框架中提供了内置的 JavaScript 和 TypeScript RPC 客户端,可在网页浏览器和 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
堆分析

kaspadsimpa 中,可以通过启用 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` 中,可以通过以下方式 过滤 日志

  1. 定义环境变量 RUST_LOG

  2. 添加类似以下示例中的 --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

依赖项

~4–5.5MB
~98K SLoC