Astrix全节点及其辅助库。
我们邀请开发人员和区块链爱好者合作、测试和优化我们的 Rust 实现。这里的每一行代码都是为开源区块链运动做出贡献的机会,塑造一个旨在实现可扩展性和速度而不影响去中心化的平台。
您的反馈、贡献和问题报告将成为该代码库发展和持续成熟作为 Astrix 网络中可靠节点的不可或缺的一部分。
安装一般先决条件
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 工具链
如果您已经安装了 rustup,请运行以下命令进行更新: rustup update
安装 wasm-pack
cargo install wasm-pack
安装 wasm32 目标
rustup target add wasm32-unknown-unknown
克隆存储库
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
安装适用于 Windows 的 Git 或替代的 Git 发行版。
安装 Protocol Buffers 并将bin
目录添加到您的Path
中
安装 LLVM-15.0.6-win64.exe
将 LLVM 安装的bin
目录 ( C:Program FilesLLVMbin
) 添加到 PATH
设置LIBCLANG_PATH
环境变量也指向bin
目录
重要提示:由于 C++ 依赖项配置问题,在 WASM 和本机 C++ 代码编译(本机RocksDB+secp256k1
与 WASM32 版本的secp256k1
)之间切换时,Windows 上的 LLVM AR
安装可能无法正常运行。不幸的是,手动设置AR
环境变量也会混淆 C++ 构建工具链(不应该为原生设置,而应该为 WASM32 目标设置)。目前,解决这个问题的最佳方法是:在 Windows 上安装 LLVM 后,进入目标bin
安装目录,将LLVM_AR.exe
复制或重命名为AR.exe
。
安装 Rust 工具链
如果您已经安装了 rustup,请运行以下命令进行更新: rustup update
安装 wasm-pack
cargo install wasm-pack
安装 wasm32 目标
rustup target add wasm32-unknown-unknown
克隆存储库
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
安装 Protobuf(gRPC 必需)
brew install protobuf
安装llvm。
llvm
的默认 XCode 安装不支持 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 工具链
如果您已经安装了 rustup,请运行以下命令进行更新: rustup update
安装 wasm-pack
cargo install wasm-pack
安装 wasm32 目标
rustup target add wasm32-unknown-unknown
克隆存储库
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
Rust WebAssembly (WASM) 是指使用 Rust 编程语言编写可以编译为 WebAssembly 的代码,WebAssembly 是一种在 Web 浏览器和 NodeJ 中运行的二进制指令格式。这样可以使用 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
版本。它们明显更大、更慢并且包含调试符号。
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 上提供服务,因此打开 Web 浏览器并加载 http://localhost:4000
该框架与所有主要桌面和移动浏览器兼容。
启动主网节点
cargo run --release --bin astrixd
# or with UTXO-index enabled (needed when using wallets)
cargo run --release --bin astrixd -- --utxoindex
cargo run --release --bin astrixd -- --configfile /path/to/configfile.toml
# or
cargo run --release --bin astrixd -- -C /path/to/configfile.toml
=
周围的空格没问题, arg=value
和arg = value
都可以正确解析。.
或=
需要引用该值,即 addpeer = ["10.0.0.1", "1.2.3.4"]
。例如:
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 astrixd -- --help
wRPC 子系统在astrixd
中默认被禁用,可以通过以下方式启用:
JSON协议:
--rpclisten-json = < interface:port >
# or use the defaults for current network
--rpclisten-json = default
博尔什协议:
--rpclisten-borsh = < interface:port >
# or use the defaults for current network
--rpclisten-borsh = default
旁注:
Astrix Node 集成了可选的 wRPC 子系统。 wRPC 是一个高性能、平台中立、以 Rust 为中心、WebSocket 框架的 RPC 实现,可以使用 Borsh 和 JSON 协议编码。
JSON 协议消息传递类似于 JSON-RPC 1.0,但由于服务器端通知而与规范有所不同。
Borsh 编码用于进程间通信。使用 Borsh 时,客户端和服务器都应该从相同的代码库构建。
JSON 协议基于 Astrix 数据结构,并且与数据结构版本无关。您可以使用任何 WebSocket 库连接到 JSON 端点。能够在 Web 浏览器和 Node.js 中运行的 JavaScript 和 TypeScript 内置 RPC 客户端可作为 Astrix WASM 框架的一部分使用。
登录astrixd
和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
astrixd
和simpa
中的堆分析可以通过使用--features
参数启用heap
功能和分析来完成
cargo run --bin astrixd --profile heap --features=heap
它将在 workdir 的根目录中生成{bin-name}-heap.json
文件,该文件可以由 dhat-viewer 检查
运行单元测试和大多数集成测试
cd astrix-node
cargo test --release
// or install nextest and run
使用下一个
cd astrix-node
cargo nextest run --release
cd astrix-node
cargo bench
登录astrixd
和simpa
可以通过以下任一方式进行过滤:
定义环境变量RUST_LOG
添加 --loglevel 参数,如下例所示:
(cargo run --bin astrixd -- --loglevel info,astrix_rpc_core=trace,astrix_grpc_core=trace,consensus=trace,astrix_core=trace) 2>&1 | tee ~/astrix-node.log
在此命令中,我们将loglevel
设置为INFO
。