Rand Protocol
مشارکت

اجرای یک نود Rand

نود کامل مرجع و کیف پول آن با Rust نوشته شده‌اند و از سورس ساخته می‌شوند. دو فایل اجرایی به دست می‌آید: rand-node، یعنی نود و ابزارهای اپراتور، و rand، کیف پولی که یک کلید خرج محافظت‌شده را نگه می‌دارد، از طریق JSON-RPC با هر نودی ارتباط می‌گیرد و برای هر انتقال و هر فراخوانی محرمانه، اثبات‌کننده zkVM را به‌صورت محلی اجرا می‌کند. یک testnet آزمایشی با شناسه زنجیره 21 با 26 اعتبارسنج روی droplet‌های DigitalOcean فعال است. این شبکه ممیزی نشده و ارزش واقعی ندارد. فایل‌های اجرایی هر دو برای Linux x86_64 به انتشار v0.8.0 پیوست شده‌اند؛ همان ساختی که ناوگان به آن ارتقا یافت.

ساخت و اجرای محلی
bash
# 1. Rust (‏rustup نسخه‌ی قفل‌شده 1.98.1 را برمی‌دارد) و وابستگی‌های ساخت RocksDB
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install build-essential clang cmake pkg-config libssl-dev   # Linux

# 2. کلون و ساخت (بار اول 10 تا 20 دقیقه)
git clone https://github.com/randprotocol/fullnode.git
cd fullnode
cargo build --release        # target/release/rand-node, target/release/rand

# 3. یک زنجیره دو اعتبارسنجی روی همین دستگاه (RPC روی 8545 و 8546)
scripts/local-testnet.sh
target/release/rand --rpc http://127.0.0.1:8545 status

# 4. تست‌ها؛ به‌صورت release چون اثبات STARK در حالت debug کند است (678 تست، حدود 43 دقیقه، اندازه‌گیری‌شده در 2026-09-14)
cargo test --workspace --release
پیوستن به testnet عمومی به‌عنوان ناظر
زنجیره 21
# نسخهٔ v0.8.0 (c0878c3f) زنجیرهٔ 21 را اجرا می‌کند و هیچ نسخهٔ پیشین چنین نمی‌کند: زنجیرهٔ 21 مجموعهٔ قیود 9 را اجرا می‌کند و کلیدهای راستی‌آزما و رمزگذاری اثبات آن را هیچ نسخهٔ قدیمی‌تری ندارد. آن را از تگ بسازید، یا روی Linux x86_64
# فایل‌های اجرایی انتشار را بردارید و با SHA256SUMS منتشرشده همراه آن بسنجید.
git checkout v0.8.0 && cargo build --release
curl -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/rand-node -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/rand \
     -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/msauth-vk-production.bin# کلید راستی‌آزمای چندامضایی پین‌شده: rand-node آن را از کنار فایل اجرایی خود بارگذاری می‌کند و بدون آن از راه‌اندازی خودداری می‌کند
sha256sum rand-node rand msauth-vk-production.bin   # باید مقادیر نسخه را چاپ کند (SHA256SUMS، امضاشده به‌صورت SHA256SUMS.sig):
# 324a4ab1029d39e67fc2de36b036341b0f88f13089997d7fe24c596363a58278  rand-node
# e3a38e74ee28743a960fc1c3eb1ac6c538e18dc259411e10afff7f54e268bbf4  rand
# 68facb06c7f321aaf1d4d541acf6b5c0e9d7f17788ed1c9add6c5a8a8f7acd30  msauth-vk-production.bin

# هویت گره شما: کلید اعتبارسنج Dilithium2 و شناسهٔ همتای p2p در یک فایل. کلید خودتان را تولید کنید
# و آن را بیرون از checkout نگه دارید؛ مخزن دیگر هیچ کلیدی را ردیابی نمی‌کند
rand-node keygen --out node.key.json

# بلوک پیدایش همراه مخزن عرضه می‌شود؛ هر گره باید دقیقاً همین فایل را داشته باشد.
# init هش آن را چاپ می‌کند که باید با هش زیر یکسان باشد
rand-node init --datadir ./data --genesis deploy/genesis-chain21.json

# به اعتبارسنج‌های عمومی وصل شوید (زنجیرهٔ 21 کلیدهای زنجیرهٔ 14 را نگه داشت، پس شناسه‌های همتا و IPها نیز همان‌اند).
# --validator را حذف کنید: کلید شما در مجموعهٔ اعتبارسنج‌ها نیست. اعتبارسنج همچنین به NTP نیاز دارد
rand-node run --datadir ./data --key node.key.json \
    --listen /ip4/0.0.0.0/tcp/30303 --rpc 127.0.0.1:8545 --no-mdns \
    --bootstrap /ip4/164.90.239.200/tcp/30303/p2p/12D3KooWEQEbUwZRgqhDPXhW7vNBmcRcnhUDGUADe81VFdv3ALYe \
    --bootstrap /ip4/165.245.173.74/tcp/30303/p2p/12D3KooWJyc5oDHggAr89e9QrRFBy9Tg8TxXh18yzrb1SM6KKLYw \
    --bootstrap /ip4/188.166.235.187/tcp/30303/p2p/12D3KooWSyX84P1DAbWByLHpRBMLRWD53r3Jj4aqVt6tHoF8B2ZQ

# کیف پول یک کلید جداگانهٔ محافظت‌شده (shielded) است. نشانی rand1… آن حدود 1.6 KB متن است
rand keygen && rand address

# مینت faucet را یک اعتبارسنج امضا می‌کند، پس به RPC یک اعتبارسنج نیاز دارد: روی
# زنجیرهٔ محلی دو‌اعتبارسنجی همان‌طور که هست کار می‌کند؛ یک ناظر پاسخ می‌دهد «ask a validator node». در زنجیرهٔ 21
# faucet فقط به 16 کیف پولی مینت می‌کند که پیدایش آن‌ها را مجاز شمرده، و فقط از اعتبارسنج‌هایی که نام می‌برد
rand faucet                                  # 100 RAND در یک یادداشت (note) که فقط شما می‌توانید بازش کنید
rand balance                                 # درخت را با کلید شما پویش می‌کند؛ هیچ‌کس دیگری نمی‌تواند
rand send <rand1 address> 1.5              # تأیید می‌خواهد، اثبات می‌سازد (~2 دقیقه)، منتظر کامیت می‌ماند
اعتبارسنج‌ها
26
حدنصاب
18 of 26
Genesis
ca76c2766ed6090ac6ba5dad86b724dd5d2b80c0edfaed287cd8b129e663ca9a
انجام یک فراخوانی محرمانه
rand
# یک guest داخلی را مونتاژ کنید: اگر چهار موجودی خصوصی آن را پوشش دهند، مازاد بر 1000 را بپردازید
rand program build --guest private_payment --arg 1000 --out pp.json
rand program deploy pp.json                  # شناسه برنامه (هش محتوای آن) را چاپ می‌کند

# اثبات محلی؛ فقط اثبات، هشت کلمه خروجی و یک رونوشت ورودی مهروموم‌شده روی زنجیره می‌رود
rand call <program id> --input 400 --input 250 --input 300 --input 75
rand receipt <tx>                            # خروجی‌ها [1, 0, 25, 0, ...]: مازاد، منتشرشده به‌صورت داده

# بعداً رونوشت را باز کنید و با H_IN منتشرشده در اثبات بسنجید
rand open-call <tx>                          # inputs: [400, 250, 300, 75] — verdict: faithful
زنجیره شناسه برنامه، سطح گاز و هشت کلمه خروجی را می‌بیند. موجودی‌ها را هرگز نمی‌بیند، و چون کارمزد را یک بسته محافظت‌شده می‌پردازد، نمی‌فهمد فراخواننده چه کسی است؛ خروجی‌ها داده‌اند و هر پرداختی بسته‌ای است که فراخواننده می‌سازد. اندازه‌گیری روی Apple Silicon: اثبات حدود 7 s در سطح 10، اثبات حدود 1.2 MB با پروفایل FRI با 80 پرس‌وجو، و راستی‌آزمایی در حدود 16 ms با کلید راستی‌آزمای گرم؛ نود این کلید را برای هر سطح یک بار محاسبه می‌کند و میان برنامه‌ها دوباره به کار می‌برد.

نیازمندی‌ها

سیستم‌عامل
Linux x86_64 یا macOS arm64
Rust
1.98.1، قفل‌شده با rust-toolchain.toml؛ rustup آن را نصب می‌کند
وابستگی‌های ساخت
کامپایلر C++‎، cmake، pkg-config، هدرهای OpenSSL (برای RocksDB)
ساخت اول
10 تا 20 دقیقه: RocksDB و Plonky3 از سورس
پورت‌ها
TCP 30303 ورودی روی نودهای عمومی؛ RPC روی 127.0.0.1:8545
سرور
یک نمونه ابری با 1 تا 2 vCPU یک اعتبارسنج testnet را اجرا می‌کند
ساعت
NTP (chrony) روی اعتبارسنج: اعتبارسنج از رأی دادن به بلوکی که بیش از 15 s جلوتر از ساعت خودش باشد خودداری می‌کند، پس ساعت کند بی‌سروصدا رأی دادن را متوقف می‌کند
اثبات‌سازی
امروز فقط روی CPU: یک انتقال محافظت‌شده روی لپ‌تاپ حدود دو دقیقه طول می‌کشد (اثبات مجوز 7 s و اثبات بسته حدود 110 s) و حدود 6 GB حافظه می‌خواهد؛ یک فراخوانی کوچک حدود 30 s اضافه می‌کند

یک نقش انتخاب کنید

  • ناظر باز برای همه

    همان فایل اجرایی بدون --validator. زنجیره را همگام می‌کند، هر گواهی و هر اثبات بسته و فراخوانی را راستی‌آزمایی می‌کند، هر بلوک را دوباره اجرا می‌کند، رسیدها را مقایسه می‌کند و JSON-RPC ارائه می‌دهد. این همان چیزی است که یک کلید جدید روی testnet عمومی اجرا می‌کند.

  • اعتبارسنج با سپرده

    تحت HotStuff زنجیره‌ای رأی می‌دهد و پیشنهاد می‌کند. در زنجیرهٔ 21، مانند زنجیرهٔ 20، یک اعتبارسنج جدید ابتدا با رأی پذیرفته می‌شود: اعتبارسنج‌هایی که بیش از دو‌سوم سهام را در اختیار دارند، یک کنش AdmitValidator را برای کلید آن امضا می‌کنند. سپس کلید گره را ثبت می‌کند (rand-node register --v2)، دست‌کم 1,000 RAND را از یک کیف پول وثیقه می‌گذارد، و در سومین مرز دورهٔ 1,000 بلوکی پس از وثیقه وارد مجموعه می‌شود (تأخیر دو‌دوره‌ای وثیقه در زنجیرهٔ 18). زنجیرهٔ 18 با 26 اعتبارسنج و برای هر کدام 1,000 RAND آغاز شد؛ برای کامیت، بیش از دو‌سوم سهام، یعنی 18 از 26، باید برخط باشد و رأی دهد. کلید خودتان را تولید کنید: دیگر هیچ کلید اعتبارسنجی در مخزن نگه داشته نمی‌شود، و فایل‌های کلیدی که برای زنجیره‌های پیشین کامیت شده‌اند seedهایی منتشرشده‌اند.

  • کیف پول و اثبات‌کننده محلی

    کلاینت rand یک کلید خرج 256 بیتی نگه می‌دارد و چیزی را امضا نمی‌کند: دو اثبات مجوز هستند، یک اثبات کوچک که با کلید خرج ساخته می‌شود و اثبات بسته 4-ورودی-4-خروجی. درخت را برای یادداشت‌های خودش پویش می‌کند، هر دو اثبات را روی دستگاه شما می‌سازد، با همان شکل برای RAND و هر توکن RPL، و برای فراخوانی محرمانه برنامه را هم اثبات می‌کند. فقط اثبات‌ها، تعهدها، نالیفایرها و پاکت‌های مهروموم‌شده به زنجیره می‌رسند.

نود اجرا نمی‌کنید؟ همین کیف پول به‌صورت اپ برای iOS، Android، Chrome و Firefox عرضه می‌شود: کیف پول‌ها.

سورس
randprotocol/fullnode
GPL-3.0-only · testnet روی v0.8.0 اجرا می‌شود، آخرین انتشار
راستی‌آزمایی

هر نود همه‌چیز را بررسی می‌کند

نودی که همگام می‌شود پیش از پذیرش، هر گواهی را دوباره راستی‌آزمایی می‌کند، هر بلوک را همراه اثبات‌هایش دوباره اجرا می‌کند و رسیدها را مقایسه می‌کند. هنگام راه‌اندازی پایگاه داده خودش را بررسی می‌کند، هر چیز ناسازگار را کوتاه می‌کند و در عین حال وضعیت ایمنی رأی را نگه می‌دارد، و شکاف را از همتایان دوباره می‌گیرد.

# نود متوقف شد: هش‌ها، QC‌ها، امضاها، اثبات‌ها، بازپخش
rand-node verify --datadir ./data --mode full
rand-node verify --datadir ./data --repair

آزمون‌های خطا روی testnet زنده اجرا می‌شوند

  • ›یکی از چهار اعتبارسنج را متوقف کنید: زنجیره به commit ادامه می‌دهد و نود پس از بازگشت در چند ثانیه عقب‌ماندگی را جبران می‌کند.
  • ›دو تا از چهار را متوقف کنید: زنجیره بدون حدنصاب می‌ایستد و با بازگشت آن‌ها بدون fork از سر گرفته می‌شود.
  • ›پایگاه داده یک نود را خراب کنید: هنگام راه‌اندازی شناسایی می‌شود، کوتاه می‌شود، از همتایان دوباره همگام می‌شود و پس از آن بایت‌به‌بایت یکسان است.
  • ›انتقال‌ها از طریق نودهای مختلف: همه commit شدند، موجودی‌ها همه‌جا یکسان‌اند و عرضه تغییر نکرده است.
  • ›پیوند همتای قطع‌شده ظرف حدود 30 ثانیه با منطق اتصال مجدد دوباره برقرار می‌شود.

هنوز پیاده‌سازی نشده

این فهرست آمده تا فاصله میان مقاله و نود خوانا باشد و نیازی به حدس نباشد.

  • ›وضعیت پایدار هر برنامه و فراخوانی‌های میان‌برنامه‌ای
  • ›یک کامپایلر در خود کیف پول: برنامه یا یک guest اسمبل‌شده و درونی است، یا یک ایمیج که با ابزار جداگانهٔ rand-guest ساخته می‌شود
  • ›برش (slashing) و زندانی‌کردن (jailing)، پاداش بلوک، بازارهای کارمزد، و بیکن انتخاب رهبر مبتنی بر hash-sortition
  • ›یک انباشته‌گر nullifier، هرس اثبات‌ها پس از قطعیت، و دسته‌بندی اثبات‌ها
  • ›یک اثبات رده ۲۰ برای انتقال SPL Token، و بازار prover مبتنی بر GPU که در مقاله آمده است