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 toolchain (จำเป็นสำหรับ RocksDB และ 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
ติดตั้งห่วงโซ่เครื่องมือที่เป็นสนิม
หากคุณได้ติดตั้งสนิมไว้แล้ว ให้อัพเดตโดยรัน: rustup update
ติดตั้ง wasm-pack
cargo install wasm-pack
ติดตั้งเป้าหมาย wasm32
rustup target add wasm32-unknown-unknown
โคลน repo
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
ติดตั้ง Git สำหรับ Windows หรือการแจกจ่าย Git ทางเลือก
ติดตั้ง Protocol Buffers และเพิ่มไดเร็กทอรี bin
ให้กับ Path
ของคุณ
ติดตั้ง LLVM-15.0.6-win64.exe
เพิ่มไดเร็กทอรี bin
ของการติดตั้ง LLVM ( C:Program FilesLLVMbin
) ไปยัง PATH
ตั้งค่าตัวแปรสภาพแวดล้อม LIBCLANG_PATH
ให้ชี้ไปที่ไดเร็กทอรี bin
เช่นกัน
สิ่งสำคัญ: เนื่องจากปัญหาการกำหนดค่าการพึ่งพา C++ การติดตั้ง LLVM AR
บน Windows อาจทำงานไม่ถูกต้องเมื่อสลับระหว่าง WASM และการคอมไพล์โค้ด C++ ดั้งเดิม (เนทิฟ RocksDB+secp256k1
เทียบกับ WASM32 บิวด์ของ secp256k1
) น่าเสียดายที่การตั้งค่าตัวแปรสภาพแวดล้อม AR
ด้วยตนเองยังสร้างความสับสนให้กับ toolchain ของ C++ build (ไม่ควรตั้งค่าสำหรับเนทิฟ แต่ควรตั้งค่าสำหรับเป้าหมาย WASM32) ในปัจจุบัน วิธีที่ดีที่สุดในการจัดการกับปัญหานี้มีดังนี้: หลังจากติดตั้ง LLVM บน Windows แล้ว ให้ไปที่ไดเร็กทอรีการติดตั้ง bin
เป้าหมาย แล้วคัดลอกหรือเปลี่ยนชื่อ LLVM_AR.exe
เป็น AR.exe
ติดตั้งห่วงโซ่เครื่องมือที่เป็นสนิม
หากคุณได้ติดตั้งสนิมไว้แล้ว ให้อัพเดตโดยรัน: rustup update
ติดตั้ง wasm-pack
cargo install wasm-pack
ติดตั้งเป้าหมาย wasm32
rustup target add wasm32-unknown-unknown
โคลน repo
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
ติดตั้ง Protobuf (จำเป็นสำหรับ gRPC)
brew install protobuf
ติดตั้ง llvm.
การติดตั้ง XCode เริ่มต้นของ llvm
ไม่รองรับเป้าหมายบิลด์ WASM ในการสร้าง WASM บน MacOS คุณต้องติดตั้ง llvm
จาก homebrew (ในขณะที่เขียน เวอร์ชัน llvm สำหรับ MacOS คือ 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
ติดตั้งห่วงโซ่เครื่องมือที่เป็นสนิม
หากคุณได้ติดตั้งสนิมไว้แล้ว ให้อัพเดตโดยรัน: rustup update
ติดตั้ง wasm-pack
cargo install wasm-pack
ติดตั้งเป้าหมาย wasm32
rustup target add wasm32-unknown-unknown
โคลน repo
git clone https://github.com/astrix-network/astrix-node
cd astrix-node
Rust WebAssembly (WASM) หมายถึงการใช้ภาษาการเขียนโปรแกรม Rust เพื่อเขียนโค้ดที่สามารถคอมไพล์ลงใน WebAssembly ซึ่งเป็นรูปแบบคำสั่งไบนารี่ที่ทำงานบนเว็บเบราว์เซอร์และ NodeJs ช่วยให้สามารถพัฒนาได้ง่ายโดยใช้ภาษาการเขียนโปรแกรม JavaScript และ TypeScript ในขณะที่ยังคงประโยชน์ของ Rust ไว้
ส่วนประกอบ WASM SDK สามารถสร้างขึ้นจากแหล่งที่มาได้โดยการรัน: - ./build-release
- สร้างแพ็คเกจเวอร์ชันเต็ม (รวมทั้งบิลด์ release และ debug สำหรับเป้าหมายเว็บและ nodejs) - ./build-docs
- สร้างเอกสารประกอบ TypeScript - ./build-web
- ปล่อยการสร้างเว็บ - ./build-web-dev
- การพัฒนาเว็บบิลด์ - ./build-nodejs
- ปล่อย nodejs build - ./build-nodejs-dev
- การพัฒนา nodejs สร้าง
สิ่งสำคัญ: อย่าใช้ dev
builds ในการผลิต มีขนาดใหญ่กว่าอย่างเห็นได้ชัด ช้ากว่า และมีสัญลักษณ์การแก้ไขข้อบกพร่องด้วย
cd cli
cargo run --release
เรียกใช้เซิร์ฟเวอร์ http ภายในโฟลเดอร์ wallet/wasm/web
หากคุณไม่มีเลย คุณสามารถใช้สิ่งต่อไปนี้:
cd wallet/wasm/web
cargo install basic-http-server
basic-http-server
basic-http-server จะให้บริการบนพอร์ต 4000 เป็นค่าเริ่มต้น ดังนั้นให้เปิดเว็บเบราว์เซอร์ของคุณและโหลด http://localhost:4000
เฟรมเวิร์กนี้เข้ากันได้กับเบราว์เซอร์เดสก์ท็อปและมือถือหลัก ๆ ทั้งหมด
เริ่มต้นโหนด mainnet
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
มีการแยกวิเคราะห์อย่างถูกต้องทั้งคู่.
หรือ =
จะต้องมีการเสนอราคาเช่น <อาร์กิวเมนต์ CLI> = "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 คือการใช้งาน RPC ที่มีเฟรม WebSocket ประสิทธิภาพสูง เป็นกลางแพลตฟอร์ม เน้นสนิม ซึ่งสามารถใช้การเข้ารหัสโปรโตคอล Borsh และ JSON
การส่งข้อความโปรโตคอล JSON คล้ายกับ JSON-RPC 1.0 แต่แตกต่างจากข้อกำหนดเนื่องจากการแจ้งเตือนทางฝั่งเซิร์ฟเวอร์
การเข้ารหัส Borsh มีไว้สำหรับการสื่อสารระหว่างกระบวนการ เมื่อใช้ Borsh ควรสร้างทั้งไคลเอนต์และเซิร์ฟเวอร์จากโค้ดเบสเดียวกัน
โปรโตคอล JSON ขึ้นอยู่กับโครงสร้างข้อมูล Astrix และไม่เชื่อเรื่องโครงสร้างข้อมูล-เวอร์ชัน คุณสามารถเชื่อมต่อกับตำแหน่งข้อมูล JSON ได้โดยใช้ไลบรารี WebSocket ใดก็ได้ ไคลเอ็นต์ RPC ในตัวสำหรับ JavaScript และ TypeScript ที่สามารถทำงานในเว็บเบราว์เซอร์ได้ และ Node.js มีให้ใช้งานโดยเป็นส่วนหนึ่งของเฟรมเวิร์ก Astrix WASM
การเข้าสู่ระบบ astrixd
และ simpa
สามารถกรองได้โดย:
ฐานโค้ดปัจจุบันรองรับการจำลองเครือข่ายในกระบวนการเต็มรูปแบบ โดยสร้าง DAG จริงในช่วงเวลาเสมือนโดยมีความล่าช้าเสมือนและเวลาตรวจสอบการเปรียบเทียบ (ตามการสร้างการจำลอง)
เพื่อดูคำสั่งที่ใช้ได้
cargo run --release --bin simpa -- --help
คำสั่งต่อไปนี้จะเรียกใช้การจำลองเพื่อสร้าง 1,000 บล็อกโดยมีความล่าช้าในการสื่อสาร 2 วินาทีและ 8 BPS (บล็อกต่อวินาที) ในขณะที่พยายามเติมแต่ละบล็อกด้วยธุรกรรมสูงสุด 200 รายการ
cargo run --release --bin simpa -- -t=200 -d=2 -b=8 -n=1000
การทำโปรไฟล์ฮีปใน astrixd
และ simpa
สามารถทำได้โดยเปิดใช้งานฟีเจอร์ heap
และโปรไฟล์โดยใช้อาร์กิวเมนต์ --features
cargo run --bin astrixd --profile heap --features=heap
มันจะสร้างไฟล์ {bin-name}-heap.json
ในรูทของ workdir ซึ่งสามารถตรวจสอบได้โดย 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