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
。