Astrix-Vollknoten und seine Zusatzbibliotheken.
Wir laden Entwickler und Blockchain-Enthusiasten ein, zusammenzuarbeiten, unsere Rust-Implementierung zu testen und zu optimieren. Jede Codezeile hier ist eine Gelegenheit, zur Open-Source-Blockchain-Bewegung beizutragen und eine Plattform zu schaffen, die auf Skalierbarkeit und Geschwindigkeit ausgelegt ist, ohne Kompromisse bei der Dezentralisierung einzugehen.
Ihr Feedback, Ihre Beiträge und Problemberichte werden für die Weiterentwicklung dieser Codebasis und die Weiterentwicklung ihrer Reife als zuverlässiger Knoten im Astrix-Netzwerk von entscheidender Bedeutung sein.
Allgemeine Voraussetzungen installieren
sudo apt install curl git build-essential libssl-dev pkg-config
Protobuf installieren (erforderlich für gRPC)
sudo apt install protobuf-compiler libprotobuf-dev # Required for gRPC
Installieren Sie die Clang-Toolchain (erforderlich für RocksDB- und WASM-secp256k1-Builds).
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
Installieren Sie die Rost-Toolchain
Wenn Sie Rust bereits installiert haben, aktualisieren Sie es, indem Sie Folgendes ausführen: rustup update
Wasm-Pack installieren
cargo install wasm-pack
Wasm32-Ziel installieren
rustup target add wasm32-unknown-unknown
Klonen Sie das Repo
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
Installieren Sie Git für Windows oder eine alternative Git-Distribution.
Installieren Sie Protocol Buffers und fügen Sie das bin
Verzeichnis zu Ihrem Path
hinzu
Installieren Sie LLVM-15.0.6-win64.exe
Fügen Sie das bin
Verzeichnis der LLVM-Installation ( C:Program FilesLLVMbin
) zu PATH hinzu
Legen Sie die Umgebungsvariable LIBCLANG_PATH
so fest, dass sie ebenfalls auf das bin
Verzeichnis verweist
WICHTIG: Aufgrund von Problemen mit der C++-Abhängigkeitskonfiguration funktioniert die LLVM AR
Installation unter Windows möglicherweise nicht ordnungsgemäß, wenn zwischen WASM und nativer C++-Codekompilierung gewechselt wird (native RocksDB+secp256k1
vs. WASM32-Builds von secp256k1
). Leider verwirrt das manuelle Festlegen AR
Umgebungsvariablen auch die C++-Build-Toolchain (sie sollte nicht für native, sondern für WASM32-Ziele festgelegt werden). Derzeit lässt sich dieses Problem am besten wie folgt beheben: Gehen Sie nach der Installation von LLVM unter Windows zum Ziel bin
Installationsverzeichnis und kopieren Sie LLVM_AR.exe
oder benennen Sie es in AR.exe
um.
Installieren Sie die Rost-Toolchain
Wenn Sie Rust bereits installiert haben, aktualisieren Sie es, indem Sie Folgendes ausführen: rustup update
Wasm-Pack installieren
cargo install wasm-pack
Wasm32-Ziel installieren
rustup target add wasm32-unknown-unknown
Klonen Sie das Repo
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
Protobuf installieren (erforderlich für gRPC)
brew install protobuf
Installieren Sie llvm.
Die Standard-XCode-Installation von llvm
unterstützt keine WASM-Build-Ziele. Um WASM unter MacOS zu erstellen, müssen Sie llvm
von Homebrew aus installieren (zum Zeitpunkt des Verfassens dieses Artikels ist die llvm-Version für MacOS 16.0.1).
brew install llvm
HINWEIS: Homebrew kann je nach Konfiguration unterschiedliche Fässer-Installationsorte verwenden. Zum Beispiel:
/opt/homebrew/opt/llvm
-> /opt/homebrew/Cellar/llvm/16.0.1
/usr/local/Cellar/llvm/16.0.1
Um den Installationsort zu bestimmen, können Sie den Befehl brew list llvm
verwenden und dann die folgenden Pfade entsprechend ändern:
% brew list llvm
/usr/local/Cellar/llvm/16.0.1/bin/FileCheck
/usr/local/Cellar/llvm/16.0.1/bin/UnicodeNameMappingGenerator
...
Wenn Sie /opt/homebrew/Cellar
haben, sollten Sie /opt/homebrew/opt/llvm
verwenden können.
Fügen Sie Ihrer ~/.zshrc
Datei Folgendes hinzu:
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
Laden Sie die Datei ~/.zshrc
neu
source ~ /.zshrc
Installieren Sie die Rost-Toolchain
Wenn Sie Rust bereits installiert haben, aktualisieren Sie es, indem Sie Folgendes ausführen: rustup update
Wasm-Pack installieren
cargo install wasm-pack
Wasm32-Ziel installieren
rustup target add wasm32-unknown-unknown
Klonen Sie das Repo
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
Rust WebAssembly (WASM) bezieht sich auf die Verwendung der Programmiersprache Rust zum Schreiben von Code, der in WebAssembly kompiliert werden kann, einem binären Befehlsformat, das in Webbrowsern und NodeJs ausgeführt wird. Dies ermöglicht eine einfache Entwicklung mit den Programmiersprachen JavaScript und TypeScript unter Beibehaltung der Vorteile von Rust.
WASM SDK-Komponenten können aus Quellen erstellt werden, indem Folgendes ausgeführt wird: – ./build-release
– ein vollständiges Release-Paket erstellen (einschließlich Release- und Debug-Builds für Web- und NodeJS-Ziele) – ./build-docs
– TypeScript-Dokumentation erstellen – ./build-web
– Web Build freigeben – ./build-web-dev
– Entwicklung Web Build – ./build-nodejs
– Nodejs Build freigeben – ./build-nodejs-dev
– Entwicklung NodeJS-Build
WICHTIG: Verwenden Sie keine dev
in der Produktion. Sie sind deutlich größer, langsamer und enthalten Debug-Symbole.
cd cli
cargo run --release
Führen Sie einen http-Server im Ordner wallet/wasm/web
aus. Wenn Sie keins haben, können Sie Folgendes verwenden:
cd wallet/wasm/web
cargo install basic-http-server
basic-http-server
Der Basis-http-Server wird standardmäßig auf Port 4000 bereitgestellt. Öffnen Sie also Ihren Webbrowser und laden Sie http://localhost:4000
Das Framework ist mit allen gängigen Desktop- und mobilen Browsern kompatibel.
Starten Sie einen Mainnet-Knoten
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
=
sind in Ordnung, arg=value
und arg = value
werden beide korrekt analysiert..
oder =
erfordert die Angabe des Werts, z. B. addpeer = ["10.0.0.1", "1.2.3.4"]
eingeschlossen werden.Zum Beispiel:
utxoindex = false
disable-upnp = true
perf-metrics = true
appdir = "some-dir"
netsuffix = 11
addpeer = ["10.0.0.1", "1.2.3.4"]
Übergeben Sie das Flag --help
, um alle möglichen Argumente anzuzeigen
cargo run --release --bin astrixd -- --help
Das wRPC-Subsystem ist in astrixd
standardmäßig deaktiviert und kann über Folgendes aktiviert werden:
JSON-Protokoll:
--rpclisten-json = < interface:port >
# or use the defaults for current network
--rpclisten-json = default
Borsh-Protokoll:
--rpclisten-borsh = < interface:port >
# or use the defaults for current network
--rpclisten-borsh = default
Randbemerkung:
Astrix Node integriert ein optionales wRPC-Subsystem. wRPC ist eine leistungsstarke, plattformneutrale, Rust-zentrierte RPC-Implementierung mit WebSocket-Framework, die Borsh- und JSON-Protokollkodierung verwenden kann.
JSON-Protokollnachrichten ähneln JSON-RPC 1.0, weichen jedoch aufgrund serverseitiger Benachrichtigungen von der Spezifikation ab.
Die Borsh-Kodierung ist für die Kommunikation zwischen Prozessen gedacht. Bei Verwendung von Borsh sollten sowohl Client als auch Server auf derselben Codebasis basieren.
Das JSON-Protokoll basiert auf Astrix-Datenstrukturen und ist unabhängig von der Datenstrukturversion. Sie können über jede WebSocket-Bibliothek eine Verbindung zum JSON-Endpunkt herstellen. Integrierte RPC-Clients für JavaScript und TypeScript, die in Webbrowsern und Node.js ausgeführt werden können, sind als Teil des Astrix WASM-Frameworks verfügbar.
Die Anmeldung bei astrixd
und simpa
kann gefiltert werden nach:
Die aktuelle Codebasis unterstützt eine vollständige prozessinterne Netzwerksimulation und baut über virtuelle Zeit eine tatsächliche DAG mit virtueller Verzögerung und Benchmarking-Validierungszeit (im Anschluss an die Simulationsgenerierung) auf.
Um die verfügbaren Befehle anzuzeigen
cargo run --release --bin simpa -- --help
Der folgende Befehl führt eine Simulation aus, um 1000 Blöcke mit einer Kommunikationsverzögerung von 2 Sekunden und 8 BPS (Blöcken pro Sekunde) zu erzeugen, während versucht wird, jeden Block mit bis zu 200 Transaktionen zu füllen.
cargo run --release --bin simpa -- -t=200 -d=2 -b=8 -n=1000
Die Heap-Profilerstellung in astrixd
und simpa
kann durch Aktivieren heap
-Funktion und des Heap-Profils mit dem Argument --features
erfolgen
cargo run --bin astrixd --profile heap --features=heap
Es wird die Datei {bin-name}-heap.json
im Stammverzeichnis des Arbeitsverzeichnisses erstellt, die vom Dhat-Viewer überprüft werden kann
Führen Sie Unit- und die meisten Integrationstests aus
cd astrix-node
cargo test --release
// or install nextest and run
Mit nextest
cd astrix-node
cargo nextest run --release
cd astrix-node
cargo bench
Die Anmeldung bei astrixd
und simpa
kann gefiltert werden nach:
Definieren der Umgebungsvariablen RUST_LOG
Hinzufügen des Arguments --loglevel wie im folgenden Beispiel:
(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
In diesem Befehl setzen wir den loglevel
auf INFO
.