Rand متنباز است. گره کامل، کاوشگر، پل، پژوهش اثبات و کلاینتهای کیف پول هر یک در مخزن جداگانهٔ خود در GitHub قرار دارند. کد را بخوانید، آزمونها را اجرا کنید، وصله بفرستید. این صفحه نقشهٔ راه است: هر مؤلفه کجاست، با چه ساخته شده، سیستم اثبات تا کجا پیش رفته و امروز کجا متوقف میشود.
مخزنها
| مخزن | محتوا | زبان |
|---|---|---|
randprotocol/fullnode | گره کامل مرجع و کیف پول: HotStuff BFT زنجیرهای، شبکهسازی libp2p، استخر نوتهای محافظتشدهٔ RAND، تأییدکنندهٔ اثبات zkVM، JSON-RPC، رابط خط فرمان کیف پول rand و اثباتکنندهٔ تفویضی rand-prover. | Rust |
randprotocol/randscan.org | کاوشگر بلاک پشت randscan.org: یک نمایهساز axum با API از نوع REST و WebSocket روی PostgreSQL، و یک رابط کاربری Next.js. | Rust · TypeScript |
randprotocol/bridge | پل نگهبان برای USDT و USDC از Ethereum، Binance Smart Chain، Tron و Solana: قراردادهای امانتداری، قالب مشترک گواهی و بردارهای آزمون آن. | Solidity · Rust |
randprotocol/zkp-circuits | راهنمای گامبهگام سیستمهای اثبات (Groth16 در برابر STARK، استخر محافظتشده، امضاهای حلقهای، میکسر)، research/، zkVM مرجع Rand، recursion/، ماشین مجازی بازگشتی، زنجیرهٔ ابزار مهمان و دو مترجم، و هستههای CUDA. ساخت fullnode نیاز دارد این مخزن در کنار آن با نام circuits/ کلون شده باشد. | Rust |
randprotocol/clients | کلاینتهای کیف پول: دسکتاپ، وب، iOS و Android. | Rust · Swift · Java · JavaScript |
پشته
سراسر Rust. Rand زنجیرهٔ مستقل خود را دارد: یک گره HotStuff BFT با لایهٔ شایعهپراکنی libp2p، یک استخر نوت کاملاً محافظتشده بهعنوان دفتر کل، امضاها و رمزنگاری نوتهای مقاوم در برابر کوانتوم، و zkVM مربوط به Rand برای محاسبات محرمانه، همه در مخزن fullnode. خود سیستم اثبات بخشی است که در حال پژوهش فعال است؛ در ادامه آمده است.
| لایه | آنچه اجرا میشود |
|---|---|
| اجماع | HotStuff BFT زنجیرهای، حدنصابهای وزندار بر اساس سهم، تأیید سهزنجیرهای |
| شبکهسازی | libp2p: TCP، Noise، Yamux، gossipsub، Kademlia، و mDNS در شبکههای محلی |
| دفتر کل | استخر نوت محافظتشده: درخت Poseidon2 با عمق ۳۲، مجموعهٔ ابطالگر، یک بستهٔ دارایی پنهان ۴ ورودی و ۴ خروجی در هر تراکنش (۲ ورودی و ۲ خروجی تا زنجیرهٔ ۱۳)؛ از زنجیرهٔ ۱۷ یک اثبات احراز هویت دوم از رده ۱۰ در کنار اثبات بسته (مجوز دوبخشی)؛ از زنجیرهٔ ۱۸ پاکتهای نوت ۱٬۸۶۰ بایتی با یادداشت رمزنگاریشده |
| توکنها | RPL: توکن یک ورودی ثبتنام در دفتر کل با شناسهٔ rpl1… است، نه یک قرارداد؛ بهصورت نوت در همان استخر جابهجا میشود |
| سهامگذاری | ثبت عمومی اعتبارسنجها: وثیقه از یک بسته، آزادسازی وثیقه در دو دوره، دورههای ۱٬۰۰۰ بلوکی؛ از زنجیرهٔ ۲۰ اعتبارسنج جدید با رأی مجموعه پذیرفته میشود |
| محاسبات محرمانه | zkVM مربوط به Rand: RV32IM زیر یک STARK دستهای Plonky3، FRI با پنهانسازی ZK، مجموعهٔ قیود ۸؛ از زنجیرهٔ ۱۸ هر فراخوانی یک سقف گاز اعلام میکند که مدار آن را اِعمال میکند و به ازای هر گاز و هر KiB هزینه پرداخت میشود؛ از زنجیرهٔ ۲۰ یک برنامه حالت خود را در سلولها نگه میدارد و ارزش را در یک خزانه (RPL-2) در اختیار دارد |
| رمزنگاری | Dilithium2 · ML-KEM-768 · Poseidon2 · BLAKE3 · ChaCha20-Poly1305 |
| ذخیرهسازی | یک RocksDB برای هر گره، کامیتهای fsyncشده، بررسی یکپارچگی هنگام راهاندازی؛ هرس اختیاری تاریخچه (--prune-history 24h) و گرههای آرشیو که همهچیز را نگه میدارند |
| پل | قفلهای گواهیشده توسط نگهبانان روی چهار زنجیره، با حدنصاب همامضایی Dilithium2 روی هر mint؛ دارایی پلشده یک نوت در همان استخر است |
| زبان | سراسر Rust؛ Solidity برای پل، TypeScript برای کاوشگر |
یک رابطه برای هر برنامه
رابطهٔ اجرای جهانی در white paper یعنی R_exec بهصورت کد وجود دارد: rand_zkvm، یک ماشین RV32IM که زیر یک STARK دستهای واحد روی Plonky3 و بر میدان Goldilocks اثبات میشود. این اثبات میکند که یک ردگیری، برنامهٔ hc را روی ورودیهایی که با H_IN نمکدار متعهد شدهاند تا این خروجیهای عمومی اجرا کرده است، و هیچ چیزی دربارهٔ برنامه هرگز پارامتر تأییدکننده نیست. انتشار یک برنامهٔ محرمانه یعنی ثبت یک هش، نه ساخت یک مدار اختصاصی.
سیستم اثبات شفاف است، بدون تنظیم اولیهٔ مورد اعتماد و بدون منحنی pairing، و فرض آن یک تابع هش مقاوم در برابر برخورد است. انتظار میرود هر مؤلفهٔ دیگری که با اثباتها سروکار دارد به جای ساختن نسخهٔ خودش، به این crate همگرا شود. این crate در zkp-circuits/research قرار دارد و در مجموعهٔ قیود ۸ در fullnode گنجانده شده است (circuits aeacf31، fullnode نسخههای v0.6.7 و v0.6.8). جدولها و اندازهگیریهای زیر مجموعهٔ قیود ۵ (نقطهٔ عطف M4.2) را توصیف میکنند، مگر آنکه سطری مجموعهای متأخرتر را نام ببرد؛ آنها از docs/zkvm.md، docs/zkvm-milestones.md و docs/confidential.md در fullnode تا تاریخ 2026-09-13 گرفته شدهاند، و اندازهگیریها همانطور که روی یک لپتاپ Apple Silicon سنجیده شدهاند آمدهاند، نه بهعنوان هدف.
هشت جدول روی باسهای نامدار، و نهمی در صورت نیاز
یک تعهد، یک گشایش FRI. جدولها هرگز یکدیگر را فراخوانی نمیکنند؛ آنها حقایق را روی باسهای LogUp نامدار مبادله میکنند (PROGRAM، PROGRAM_WORD، MEMORY، ALU، POSEIDON2، INPUT_DIGEST، INPUT_READ، KECCAK و جستجوهای بازه و نیبل) و تأییدکننده بررسی میکند که هر باس بهصورت سراسری متوازن باشد. بیشینهٔ درجهٔ قید هر جدول با یک آزمون زیر سقف ۸ که ضریب انبساط FRI اجازه میدهد ثابت نگه داشته شده است.
| جدول | نوع | نقش |
|---|---|---|
program | شاهد | کلمات دستورالعمل خام که از M3.4 در مدار رمزگشایی میشوند و توسط cpu در hc هضم میشوند |
cpu | شاهد | یک سطر برای هر چرخه، بهعلاوهٔ سطرهای هضم که برنامه را در hc و ورودیهای نمکدار را در H_IN جذب میکنند |
memory | شاهد | ثباتها و RAM در یک جدول، مرتبشده بر اساس (space, addr, ts)؛ دسترسی زیرکلمه از M2.5 |
alu | شاهد | حساب بایت-اندامی، شیفتها، مقایسهها؛ ضرب و تقسیم RV32M از M2.6 |
range | از پیش پردازششده · ۲۵۶ سطر | بررسیهای بازه و جستجوی توانهای دو |
nibble | از پیش پردازششده · ۲۵۶ سطر | AND، OR و XOR چهاربیتی؛ هر برخورد خود یک بررسی بازه روی هر دو operand است |
poseidon2 | شاهد | یک سطر برای هر دور جایگشت در بلوکهای ۳۲ سطری؛ باس POSEIDON2 و هر دو هضم را سرویس میدهد |
input | شاهد · از M4.1 | یک سطر برای هر کلمهٔ ورودی خصوصی؛ INPUT_DIGEST و INPUT_READ را سرویس میدهد، بنابراین یک خواندن نمیتواند از تعهد بگریزد |
keccak | شاهد · اختیاری | Keccak-f[1600] در بلوکهای ۳۲ سطری، فقط در اثباتی حاضر است که مهمان آن KECCAK را فراخوانده باشد (M4.2) |
از آن زمان سه مجموعهٔ قیود دیگر اضافه شده است. مجموعهٔ ۶ یک جدول اجباری public برای ورودی عمومی زمان استقرار یک برنامه افزود که به هضم بدون نمک H_PUB گره خورده است، و یک جدول اختیاری sha256 در کنار keccak. مجموعهٔ ۷ (زنجیرهٔ ۱۶) هر پایانهٔ LogUp را روی یک باس جدید BLIND کور میکند و هر جدول اعلامشده را روی کف 2⁷ سطر مینشاند، و فراخوانی سیستمی POSEIDON2_LEN با طول مقید را اضافه میکند. مجموعهٔ ۸ (زنجیرهٔ ۱۸) یک ستون GAS به جدول cpu و یک مقدار عمومی، یعنی GAS_LIMIT اعلامشده، میافزاید.
آنچه یک اثبات آشکار میکند
عمومی: هش کد hc (هشت کلمهٔ هضم درون مدار)، تعهد ورودی نمکدار H_IN (هشت کلمه)، رده گاز، و هشت کلمهٔ خروجی. از مجموعهٔ قیود ۶ همچنین H_PUB، هضم ورودی عمومی، و از مجموعهٔ قیود ۸ سقف گاز اعلامشده. سرآیند اثبات ارتفاع جدولهای Keccak و SHA-256 را اعلام میکند، بنابراین نشان میدهد که آیا یک فراخوانی هش کرده است و، بالاتر از کف 2⁷، تقریباً چقدر.
پنهان: ورودیهای خصوصی (H_IN نمکدار است، پس هم پنهانکننده است و هم الزامآور)؛ هر کلمهٔ دستورالعمل، چون تأییدکننده hc را بررسی میکند و هرگز برنامه را نه؛ هر مقدار ثبات و حافظه؛ هر شاخهای که پیموده شده؛ تعداد دقیق چرخهها و گاز دقیق مصرفشده؛ و اینکه کدام فراخوانیهای سیستمی اجرا شدهاند، جز آنچه ارتفاع دو جدول هش نشان میدهد.
رده برای هر اثبات عمومی است، چون اندازهٔ یک STARK از پیش ارتفاع ردگیری آن را آشکار میکند؛ پنهان کردن شاخص چیزی نصیب ما نمیکرد. hc الزامآور است، نه پنهانکننده: به امروز کجا متوقف میشود نگاه کنید.
اندازهگیریشده، در مجموعهٔ قیود ۵
| FRI | ۸۰ پرسوجو · ۲۰ بیت PoW · ضریب انبساط ۸ · arity برابر ۸ · ZK روشن؛ ۲۶۰ بیت حدسی، حدود ۸۶ اثباتشده. تنظیم مجدد ۲۷ پرسوجویی M2 با ممیزی 2026-09-12 بازگردانده شد |
| فراخوانی | private_payment در رده ۱۰: حدود ۷ ثانیه برای اثبات، حدود ۱٫۲ MB اثبات با ۸۰ پرسوجو (۴۳۵ KB با ۲۷)، پایینتر از ۲۱٫۶ ثانیه و ۸۹۲ KB در M1 |
| انتقال | مهمان بستهٔ ۲ ورودی و ۲ خروجی در زنجیرهها تا ۱۳: ۳٬۸۱۱ کلمه، حدود ۹٬۱۶۰ چرخه، رده ۱۴؛ حدود ۱۰۰ ثانیه برای اثبات، حدود ۱٫۳ MB اثبات. مهمان دارایی پنهان ۴ ورودی و ۴ خروجی زنجیرهٔ ۱۴ به همان رده پین شده است: حدود ۱۰۰ ثانیه، حدود ۱٫۴۲ MB |
| تأیید | حدود ۱۶ ms با کلید گرم؛ نخستین تأیید در یک کلید تازهٔ (رده، ارتفاعها) حدود ۲۳۰ ms |
| بلوک | بودجهٔ ۴ MiB و سقف اثبات ۲ MiB: حدود سه انتقال محافظتشده در هر بلوک با ۸۰ پرسوجو |
لپتاپ Apple Silicon، ساخت release. تقسیم جدول بایت در M2.3 همان چیزی است که زمان اثبات را جابهجا کرد؛ پروفایل ۸۰ پرسوجویی همان چیزی است که اندازهٔ اثبات را دوباره بالا برد. کلید تأییدکننده مستقل از محتوای برنامه است و بر اساس رده و ارتفاعهای برنامه، ورودی و keccak که اثبات اعلام کرده کلیدگذاری میشود، بنابراین یک گره یک کلید را گرم میکند و دوباره به کار میبرد.
پس از مجموعههای بعدی، اندازهها تغییر کردند. تحت مجموعهٔ قیود 7، اثبات رده 10 در پروفایل تولیدی 1,367,688 بایت است و اثبات رده 10 حاوی Keccak برابر 3,283,898 بایت (اندازهگیریشده در 2026-09-28). از chain 17 به بعد، هر انتقال دو اثبات دارد: اثبات بستهٔ رده 14 با حدود 1.49 MB، و اثبات احراز رده 10 با حدود 1.37 MB که اثبات آن حدود 7 s طول میکشد. جنسیس chain 20 بلوک 20 MiB و سقف اثبات 4 MiB را تعیین میکند و هیچ فراخوانی نمیتواند از رده 14 فراتر رود.
سه هدف، یک مدار
فقط RISC-V بهصورت بومی اجرا میشود. برنامههای Solidity و Solana یا روی یک guest مفسر در همان رابطه اجرا میشوند و بایتکد آنها ورودی است، یا خارج از زنجیره به برنامههای RISC-V ترجمه میشوند که خروجیشان کلمهبهکلمه با خروجی مفسر برابر است. opcodeهای پرهزینه جدولهای همپردازندهٔ اختصاصی میخواهند، نه شبیهسازی بیتبهبیت.
| هدف | مسیر | همپردازندهها |
|---|---|---|
| RISC-V | بومی. RV32IM، یا دستاسمبلشده با asm.rs یا Rust از نوع no_std که برای riscv32im-unknown-none-elf کامپایل شده و از M4.1 به بعد بهصورت باینری تخت بارگذاری میشود، یا ساختهشده از Rust یا C توسط rand-guest در کانتینر تصویر (استقرار یک برنامهٔ Rust) | Poseidon2 (و از مجموعهٔ 7 POSEIDON2_LEN)؛ Keccak-f[1600] از M4.2؛ SHA-256 از مجموعهٔ 6 |
| Solidity | solc --bin-runtime برای تولید بایتکد EVM، سپس یا guest مفسر evm.bin (بایتکد بهعنوان ورودی) یا evm2rv که بایتکد را به C ترجمه میکند و rand-guest آن را به تصویر RV32IM با همان خروجیها میسازد (مترجم Ethereum) | Keccak-256 (جدول همراه است)، حساب پیمانهای 256 بیتی، ECRECOVER، فراخوانیهای سیستمی شاهد Merkle برای storage |
| Solana / SVM | یک ELF از نوع sBPF، که guest مفسر sbpf.bin اجرایش میکند یا sbpf2rv آن را به تصویر RV32IM با همان خروجیها ترجمه میکند (مترجم Solana) | SHA-256، تأیید Ed25519، ضرب 64 بیتی |
نقاط عطف
نقطهٔ عطف 1 ماشین همهمنظوره را اثبات کرد. نقطهٔ عطف 3 آن را به یک استخر محافظتشده تبدیل کرد: انتقالی با اثبات عضویت درون مدار تحت R_exec اثبات میشود و تأییدکننده hc را بدون دیدن حتی یک کلمهٔ برنامه بررسی میکند. نقطهٔ عطف 4 دربارهٔ سازگاری است: بارگذار، تعهد ورودی و جدول Keccak آن بهصورت مجموعههای قیود 4 و 5 عرضه شدند و جدول SHA-256 با مجموعهٔ 6. guestهای مفسر EVM و sBPF، زنجیرهٔ ابزار rand-guest و دو مترجم ساخته شدهاند. انتقال ERC-20 روی یک ماشین 128 GB اثبات شده است؛ اثبات SPL Token در رده 20 هنوز انجام نشده. نقطهٔ عطف 5 ماشین بازگشتی پشت تجمیع بلوکهاست که ساخته شده و روی همهٔ زنجیرها خاموش است. مجموعههای قیود 7 و 8 پس از بازبینیهای سپتامبر و مدل gas آمدند.
| شناسه | دامنه | معیار خروج | وضعیت |
|---|---|---|---|
| M1 | پنج جدول، ISA پایهٔ RV32I، HALT/WRITE_OUTPUT/READ_INPUT، ZK روشن، پدینگ رده، اسمبلر، شبیهساز | fib، memcpy، bubble_sort، alu_mix و balance_check اثبات و تأیید میشوند؛ هر آزمون تقلب رد میشود | انجام شد. 44 آزمون؛ یک بازبینی بعدی پنج شکاف درستی (soundness) را در یک موج بست |
| M1.5 | کلیدهای مشاهده: یک guest انتقال محافظتشدهٔ یکبهیک، پاکتهای یادداشت زیر ML-KEM-768 و ChaCha20-Poly1305، افشای محدود به طرف و به تراکنش، یک دفتر کل شبیهسازیشده | یک انتقال در رده 12 اثبات میشود و دفتر کل آن را میپذیرد؛ هر دامنهٔ افشا دقیقاً ردیفهای خودش را باز میکند؛ یک کلید مشاهده نمیتواند خرج کند | انجام شد. در node گنجانده نشده است |
| M2 | حافظهٔ نهان کلید تأییدکننده، تنظیم مجدد FRI روی هدف حدسی 100 بیتی، شکافتن جدول بایت به جدول بازه و جدول نیبل، بارها و ذخیرههای زیرکلمهای، افزونهٔ RV32M | محدودتر از برنامه تحویل شد: بارگذار باینری تخت و اتصال محکمتر READ_INPUT به M4.1 منتقل شد | انجام شد. fib در رده 10: اثبات از 892 KB به 268 KB، زمان اثبات از 21.6 s به 3.1 s، نخستین تأیید از 2.17 s به 16 ms. مجموعهٔ قیود 3، یک هاردفورک |
| M3 | تراشهٔ Poseidon2 و فراخوانی سیستمی؛ NOTE_COMMIT، NULLIFY و MERKLE_VERIFY بهصورت روالهای guest روی آن؛ انتقال تعهد خرجشده از خروجی عمومی؛ جدول برنامه بهعنوان شاهد با hc که درون مدار هضم میشود | رابطهٔ انتقال تحت R_exec با عضویت درون مدار اثبات میشود و verify(hc, proof) هرگز کلمهای از برنامه نمیبیند | انجام شد. guest انتقال: 4,554 دستور، 4,903 چرخه، رده 14. پیمایش Merkle اکنون یک حلقهٔ شمارشی است، پس اندازهٔ برنامه دیگر با عمق درخت رشد نمیکند |
| CUDA | بکاند اثباتکنندهٔ GPU: NTTها و تعهدهای Merkle با Poseidon2 بهصورت کرنلهای CUDA پشت traitهای Dft و Mmcs در Plonky3؛ rand send، call و deploy گزینهٔ --cuda را میپذیرند | هر guest از طریق دوقلوی مرجع Rust خالص و درایور mock اثبات و تأیید میشود؛ تأییدکنندهٔ CPU بکاندها را از هم تشخیص نمیدهد | انجام شد؛ نخستین اجرا روی سختافزار 2026-09-28. روی NVIDIA H100 کرنلها برای sm_80 و sm_90 به PTX ساخته میشوند و با مرجع CPU و Plonky3 مطابقت دارند. اندازهگیری مجدد تولیدی روی یک گره GPU ناوگان هنوز مانده است. یک فراخوانی CUDA نمیتواند پاکت ورودی را مهر و موم کند، چون salt هرگز از اثباتکننده خارج نمیشود |
| M4.1 | بارگذار باینری تخت و نخستین guestهای no_std Rust کامپایلشده برای riscv32im-unknown-none-elf؛ تعهد ورودی saltدار H_IN با جدول ورودی مخصوص خودش، تا READ_INPUT یک جستجو در برابر بردار متعهد باشد | یک guest ساختهشده با زنجیرهٔ ابزار استاندارد بارگذاری، اثبات و تأیید میشود؛ دو خواندن از یک اندیس ورودی همخواناند و ورودیها به H_IN متصلاند | انجام شد. در 2026-09-11 بهصورت مجموعهٔ قیود 4 فرود آمد: 26 مقدار عمومی، هشت جدول، یک هاردفورک |
| M4.2 | جدول همپردازندهٔ Keccak-f[1600] دستنویس و فراخوانی سیستمی KECCAK، که فقط در صورت استفادهٔ guest در اثبات حاضر است؛ ارتفاع حافظهٔ اعلامشده در اثبات؛ کلید تأییدکنندهای که بر چهار مؤلفه کلید میخورد؛ FRI بازگشته به 80 پرسوجو پس از ممیزی 2026-09-12 | keccak256 بهعنوان guest کامپایلشده اثبات میشود و اثبات بدون این جدول از نظر شکل با اثباتی از M4.1 بایتبهبایت یکسان است | انجام شد. در 2026-09-12 بهصورت مجموعهٔ قیود 5 فرود آمد، یک هاردفورک. یک اثبات حاوی Keccak حدود 1.9 MB بزرگتر است و از سقف پیشفرض 2 MiB فراتر میرود. زنجیری که جنسیسش سقف را بالا ببرد آن را میپذیرد: chain 13 (8 MiB) در 2026-09-19 یک فراخوانی حاوی Keccak با 3.41 MB را پذیرفت و سقف chain 20 برابر 4 MiB است |
| M4.3 · M4.4 | guestهای مفسر EVM و sBPF کامپایلشده به RV32IM با بایتکد خارجی بهعنوان ورودی؛ یک جدول همپردازندهٔ SHA-256 در کنار Keccak؛ سپس زنجیرهٔ ابزار rand-guest و مترجمهای evm2rv و sbpf2rv (2026-09-18) | یک انتقال ERC-20 و یک SPL Transfer هر یک تحت R_exec اثبات میشوند | ساخته شده؛ یک اثبات خروج انجام شده است. evm.bin (18,009 کلمه) و sbpf.bin (8,317) بردارهای ERC-20 و SPL Token را اجرا میکنند و تصویرهای ترجمهشده کلمهبهکلمه با آنها یکساناند. transfer در ERC-20 در رده 18 روی یک droplet با 128 GB در 2026-09-19 اثبات شد (اوج 85.0 GB، 53.8 min)؛ اثبات SPL Token در رده 20 با برونیابی حدود 330 GB برآورد شده و انجام نشده است (حافظهٔ اثبات). هیچکدام روی زنجیره قابل فراخوانی نیست: فراخوانی در رده 14 سقف دارد |
| M5 | ماشین بازگشتی (rVM): ماشین بومی Goldilocks با 24 دستور که برنامههایش اثباتهای zkVM در Rand را تأیید میکنند، یک برنامهٔ تجمیع N-عمومی برای هر شکل اثبات داخلی، تفکیک بکاند CPU و CUDA، و یک خودتأییدکننده (M5.1 تا M5.4، 2026-09-13 تا 2026-09-16) | 50 اثبات بستهٔ تولیدی واقعی پذیرفته شد و 50 اثبات دستکاریشده در مرحلهٔ نامبرده رد شد؛ یک اثبات rVM از برنامهٔ تأییدکننده روی یک اثبات بستهٔ واقعی بهصورت بومی تأیید میشود (پروفایل آزمون) | ساخته شده؛ اثباتهای تولیدی ماشین بزرگ میخواهند. بهصورت crates/randprotocol-rvm vendored شده است. تجمیع سمت زنجیره ادغام شده و روی همهٔ زنجیرها خاموش است (در ادامه) |
| set 7 | هر پایانهٔ LogUp کورشده؛ ارتفاع هر جدول اعلامشده حداقل 2⁷ ردیف؛ بررسیهای بازهٔ 32 بیتی روی کلمههای ورودی، عمومی و salt؛ فراخوانی سیستمی POSEIDON2_LEN؛ اصلاح JALR؛ کلیدهای تأییدکننده با salt از key_derivation_v2 | اصلاحات بازبینیهای zkVM در 2026-09-27 و 28 که یک کلید تأییدکننده را جابهجا میکنند، در یک برش | انجام شد. Fullnode v0.6.1، chain 16 (2026-09-28)، یک هاردفورک |
| set 8 | سنجهٔ gas: ستون GAS در جدول cpu و یک GAS_LIMIT عمومی، با اثبات GAS ≤ GAS_LIMIT درون مدار؛ gas دقیق اجرا خصوصی میماند | هر فراخوانی هزینهٔ حدی را که اعلام میکند میپردازد و هر اثبات بسته همان حد ثابتشده را اعلام میکند | انجام شد. Fullnode v0.6.7-rc1، chain 18 (2026-09-29)، یک هاردفورک. bundle_gas_limit برابر 20,479 است |
فازهای استخر محافظتشده
دفتر کل fullnode در سه فاز فرود آمد که هر کدام یک هاردفورک بود (docs/shielded.md §7). S1 دفتر کل حسابمحور را با یک استخر یادداشت جایگزین کرد؛ S3 پل را بهصورت یادداشت بازگرداند و اول فرود آمد؛ S2 استیکینگ را روی آن گذاشت. هر سه روی main و روی زنجیر فعلی هستند.
چین ۱۴ و ردیفهای زیر S2 کار v0.5 هستند. هر ردیف یک هارد فورک است؛ همه با هم بهصورت یک زنجیرهی تازه، یعنی chain 14، در تاریخ 2026-09-20 از بیلد b3c594c بریده شدند و همان روز، پس از یک رفتوبرگشت زندهی zUSD از طریق نقاط پایانی مبدأ مستقرشده، با برچسب v0.5 منتشر شدند. Chain 15، که از 2026-09-26 روی v0.5.8 و نسخههای بعدی زنده بود، همهی آن را داشت و اصلاحات وابسته به genesis در ممیزیهای v4 و v5 را نیز فعال کرده بود: یک faucet با فهرست مجاز و بودجهی هر epoch، فعالسازی تأخیری bond، سقف وزن stake، ثبتنامهای وابسته به genesis، consensus_domain برابر 1، قواعد پل نسخهی 2 و سقف رجیستری توکن، کارمزد ثبت سوختهشده و کران 2⁶³ برای note. Chain 20 که از 2026-10-01 ساعت 06:17 UTC روی v0.6.8 (c9c9bd3c) زنده است و هارد فورکی از chain 19 است، همهی اینها را نگه میدارد و کار انتشارهای v0.6 را که در ادامه فهرست شده است به آن میافزاید.
| شناسه | دامنه | معیار خروج | وضعیت |
|---|---|---|---|
| S1 | خود استخر: noteها، بستههای اثباتشدهی 2-in-2-out، درخت تعهد Poseidon2 با عمق 32 و مجموعهی nullifier، کیف پول rand با اثباتگر محلی، RPC حذفشدهی اطلاعات حساس | یک انتقال shielded بین کیف پولها، یک رقابت double-spend بین دو اعتبارسنج و یک استقرار-و-فراخوانی که با بستهها پرداخت میشود، همگی در مجموعهی آزمون خوشهای میگذرند | انجام شد. از chain 6 (2026-09-12) روی ناوگان عمومی زنده است |
| S3 | پل بهصورت note: دارایی پلشده شاخص دارایی رجیستری را حمل میکند، یک گواهی یک note واریز میکند که خود زنجیره آن را محاسبه میکند، BridgeBurn تنها تراکنش دوبستهای است؛ پاکتهای مهرشده برای ورودیهای فراخوانی که فراخواننده، یک کلید برای هر فراخوانی یا یک ممیز نامبرده میتواند بازشان کند | یک دارایی پلشده بهصورت note ضرب، خرج و سوزانده میشود؛ فراخواننده میتواند آنچه یک برنامه روی آن اجرا شده را بدون انتشار آن افشا کند و rand open-call گشایش را با H_IN مقایسه میکند | انجام شد. نخست فرود آمد. Chainهای 9 تا 13 بخش پل را از genesis خود حذف کردند؛ هر زنجیره از 14 به بعد آن را دارد. از chain 14 هر burn یک بسته است، نه دو |
| S2 | استیکینگ روی زنجیرهی shielded: یک ثبتنام عمومی اعتبارسنج، Bond از burn یک بسته، Unbond طی دو epoch، Withdraw به یک note در نشانی پرداخت، epochهای 1,000 بلوکی که مجموعه را دوباره استخراج میکنند، و یک ممیزی عرضه روی ثبتنام و استخر | یک اعتبارسنج پنجم ثبتنام میکند، bond میگذارد و از epoch بعد پیشنهاد بلوک میدهد؛ یکی از مجموعه unbond میکند و به noteای برداشت میکند که کیف پول پرداخت آن را خرج میکند؛ هر دو در مجموعهی آزمون خوشهای میگذرند | انجام شد. درخت تعهد محلی کیف پول در 2026-09-21 به دنبال آن آمد: کیف پول witnessهای خود را محاسبه میکند و دیگر به نود خود نمیگوید کدام برگ را خرج میکند |
| RPL | استاندارد توکن (docs/tokens.md): توکن یک مدخل رجیستری در دفتر کل با شناسهی bech32m 62 نویسهای rpl1… است؛ ساخت آن در ازای کارمزد ثبت به RAND بدون نیاز به مجوز است؛ مرجع ضرب هنگام ثبت ثابت میشود: هیچکس، یک کلید یا پل؛ نمادها یکتا نیستند؛ rand token create، mint، set-authority، burn، info، list و rand_getTokens، rand_getToken، rand_getTokenSupply | یک توکن ثبت، ضرب، با rand send --asset ارسال و بهصورت note در همان استخر سوزانده میشود | از chain 14 (v0.5) در حال اجراست. روی chain 20 کارمزد ثبت 1 RAND است و سوزانده میشود، رجیستری حداکثر 4,096 توکن را نگه میدارد و genesis فهرست zUSD را در شاخص 1 دارد |
| RPL-2 | وضعیت برنامه (docs/program-state.md): سلولهای هر برنامه (کلیدی 8 کلمهای به مقداری 8 کلمهای، در ریشهی وضعیت)، یک خزانهی عمومی برای هر دارایی، توکنی که فقط برنامهاش آن را ضرب میکند، و کنش Invoke (Action 33)، فراخوانیای که سلولهایی را که میخواند و مینویسد و noteهایی را که پرداخت میکند اعلام میکند؛ rand program invoke، state، vault و rand_getProgramCell، rand_getProgramCells، rand_getProgramVault | دفتر کل یک گذار را فقط وقتی اعمال میکند که هر خوانش اعلامشده هنوز برقرار باشد و خزانه همهی پرداختها را پوشش دهد؛ خوانش کهنه رد و دوباره اثبات میشود | از chain 20 (v0.6.8) در حال اجراست. cell_fee برابر 0.01 RAND برای هر سلول ساختهشده؛ حداکثر 8 خوانش، 8 نوشتن و 4 پرداخت در هر invoke. نک. برنامهها |
| بستهی دارایی پنهان | هر تراکنش دقیقاً یک بستهی 4-in-4-out بهجای بستهی 2-in-2-out دارد: شکافهای 0–1 دارایی خصوصی را نگه میدارند (در انتقال فقط-RAND ساختگیاند)، شکافهای 2–3 همیشه RANDاند و کارمزد را میپردازند. انتقال توکن دوبستهای و burn پل دوبستهای حذف شدهاند | انتقال RAND و انتقال هر توکن RPL شکل یکسانی منتشر میکنند، پس دارییای که جابهجا شد پنهان میماند | از chain 14 (v0.5) در حال اجراست. Tier 14، حدود 100 s برای اثبات، حدود 1.42 MB اثبات روی chainهای 14 و 15؛ hc_bundle برابر 83d3a370… در آنها. Chainهای 18 تا 20 گارد بستهی v3 را پین میکنند، hc_bundle برابر 60af094a…، حدود 1.49 MB |
| الزام تراکنش | هر اثبات بسته روی H("rand-tx-bind-1", chain_id ‖ tx with proofs blanked) ساخته و در برابر آن راستیآزمایی میشود، که در بخش ورودی عمومی حمل میشود | یک اثبات رونوشتشدهی دستنخورده که با مقصد، اعتبارسنج یا memo تغییرکرده دوباره ارسال شود رد میشود | از chain 14 (v0.5) در حال اجراست. از chain 20 (binding_domain برابر 1) پیشتصویر H("rand-tx-bind-2", genesis hash ‖ chain_id ‖ …) است و هر پیام کنش امضاشده نیز هش genesis را حمل میکند، پس هیچچیزی که برای یک زنجیره اثبات یا امضا شده باشد روی زنجیرهی دیگر راستیآزمایی نمیشود |
| B1–B4 | سختسازی پل (docs/bridge.md §§14–20). B1: سقف ضرب روزانه برای هر پشتوانه، و کلید مکثی که فقط میتواند مکث کند (رفع مکث نیازمند حد نصاب PQ است). B2: مهر زمانی بلوکی که بیش از 60 s پس از والدش باشد نامعتبر است و اعتبارسنج به بلوکی که بیش از 15 s جلوتر از ساعتش باشد رأی نمیدهد، پس اعتبارسنجها به NTP نیاز دارند. B3: حد نصاب همامضایی Dilithium2 روی هر ضرب. B4: فهرستکردن توکن پلشده یا یک پشتوانه پس از genesis تحت حد نصاب نگهبانان PQ، بدون برش زنجیره | zUSD، یک توکن با هفت پشتوانه (USDT و USDC روی Ethereum، Binance Smart Chain، Tron و Solana)، با تراکنش ثبت میشود و total_supply == Σ backings.locked بهطور ساختاری برقرار است. دروازهی محلی نهفازی (zusd_e2e.rs: چهار اعتبارسنج، اثباتهای واقعی، faucet تا ثبت تا واریز تا انتقال تا burn تا ممیزی) 9 از 9 را گذراند | از chain 14 (v0.5) در حال اجراست. روی chain 20: سقف ضرب 100,000 zUSD در روز برای هر پشتوانه بهعلاوهی 4,000 zUSD سراسری در هر 24 ساعت غلتان (قواعد پل نسخهی 2)، مجموعهی نگهبانان 1 با هشت نگهبان PQ، کارمزد 10 bps به zUSD روی هر ضرب و هر burn (bridge.fees)، و چرخش نگهبانان که نیازمند تصرف است و 86,400 s انتظار دارد (bridge.rotation). zUSD در genesis مربوط به chain 20 با هفت پشتوانهاش و 99 zUSD قفلشده در لحظهی برش فهرست شده است |
| ممیزی v3 | اصلاحات دور سوم ممیزی داخلی، به رهبری یکی از همبنیانگذاران (2026-09-19؛ هیچ ممیزی مستقلی انجام نشده است). POOL-1: Mint مربوط به faucet گشایش note خود را (pk، time، r) حمل میکند، پذیرش تعهد را دوباره محاسبه میکند و ضربکننده rand-mint-2 را امضا میکند؛ noteهای alloc در genesis نیز گشایش دارند. RPC-1: rand_getWitness(es) حداکثر دو بازسازی درخت را همزمان اجرا میکند و پس از 10 s پاسخ -32000 busy میدهد. OPS-1: هر هجده کلید اعتبارسنج چرخانده شد، خارج از مخزن تولید شد و هیچ کلیدی در مخزن ردیابی نمیشود | ضربی که تعهدش به بیش از مقدارش باز شود رد میشود؛ هیچ کلید chain 14 هرگز در مخزن نبوده است | از chain 14 (v0.5) در حال اجراست. PRIV-1، یعنی درخواست witness که برگ را نام میبرد، در 2026-09-21 با درخت خود کیف پول بسته شد |
انتشارها پس از v0.5
هر انتشار یک برچسب git با مدخلی در CHANGELOG.md مربوط به fullnode است. انتشاری که اجماع، قالب سیمی یا کلید راستیآزمایی را تغییر دهد با یک زنجیرهی جدید عرضه میشود؛ بقیه یکییکی نود به نود روی زنجیرهی زنده میروند.
| نسخه | آنچه آورد | زنجیره |
|---|---|---|
| v0.5 تا v0.5.8 | توکنهای RPL، zUSD و پل مستحکمشده (در بالا)؛ اصلاحات ممیزی؛ هرس تاریخچه؛ مستحکمسازی اجماع و همگامسازی | 14، 15 |
| v0.5.9 | اصلاحات بازپویش: faucet فقط از اعتبارسنجهای genesis ضرب میکند، عقبنشینی در همگامسازی، پیشبررسیهای gossip | 15 |
| v0.5.10 | اشتراکگذاری نشانی: اثرانگشتها، پیوندهای randpay: و کدهای QR؛ یادداشت رمزگذاریشده که نخستینبار در زنجیره 18 روشن شد | 15 |
| v0.5.11 | آزادسازی تدریجی زمانقفلدار در genesis برای سهم تیم، سرمایهگذاران و شرکا. وابسته به genesis و در هیچ زنجیرهای فعال نیست | هیچکدام |
| v0.6 | اصلاحات zkVM، rVM و تجمیع از بازبینیهای شهریور | 15 |
| v0.6.1 | مجموعه قیود 7: پوشانندگی LogUp، کف جدول 2⁷، بررسیهای بازه 32 بیتی، POSEIDON2_LEN، اصلاح JALR. زنجیره 16 با hardening_v6 و guest بسته نسخه 2 ساخته شد | 16 |
| v0.6.2 | اثباتسازی تفویضی، مرحله 1: باینری rand-prover و گزینه --prover کیف پول. اثباتگر مرحله 1 کلید خرج را دریافت میکند | 16 |
| v0.6.3، v0.6.4 | اثباتسازی تفویضی، مرحله 2: مجوزدهی تفکیکشده. اثبات بسته دیگر کلید خرج را نمیگیرد، اثبات مجوز در سطح 10 آن را میگیرد، و دامنه شناسه تراکنش به rand-txid-3 تغییر میکند | 17 |
| v0.6.6، v0.6.7-rc1 | گس: مجموعه قیود 8، سقف گس اعلامشده برای هر اثبات، قیمتهای پویای گس و بایت؛ یادداشت روشن شد. v0.6.6 هرگز بهصورت تگشده منتشر نشد | 18 |
| v0.6.7 | اصلاحاتی در زنجیره 18 که هیچ قاعده اجماعی را تغییر نمیدهند: هرس اثباتهای مهرومومشده (خاموش)، تثبیت قالب envelope، بهداشت کلید مشاهده، تخصیصدهنده حافظه rVM، همپوشانی در کرنلهای GPU، پوشش آزمون ALU. پیش از پایان مجموعه آزمون کامل workspace تگ شد | 18، 19 |
| v0.6.8 | RPL-2: سلولهای برنامه، خزانههای برنامه و کنش Invoke. کارمزدهای پل zUSD در هر دو جهت. آخرین اصلاحات audit-v6: بدون آزادسازی خودکار قفل (CON-4) و یک pacemaker مبتنی بر گواهی وقفه زمانی (CH-1)؛ شنوندهٔ --public-rpc، محدودیتهای خواندن، همتاهای اعتبارسنج رزروشده، بودجههای همگامسازی و gossip، سقف بایت استخر، و کران بر درجه اعلامشده در سرایند اثبات (ZKV-4)؛ و قواعد وابسته به genesis که زنجیره 20 روشن میکند: اتصال به هش genesis، testnet، پنجره اثبات 1,024 بلوکی، سقف قیمت گس و بار بایت پرداختشده، پذیرش با رأی، سقف ورود سهام بهصورت کسری، و مالکیت و تأخیر برای چرخشهای پل. کیف پولها برای ارسال در زنجیره 20 به این ساخت نیاز دارند | 20 |
امروز تا کجا پیش رفته
انحرافها از whitepaper، بیانشده و نه پنهانشده. هر یک در مستندات خود crate همراه با نقطه عطفی که آن را میبندد پیگیری میشود.
hcمتعهدکننده است اما پوشاننده نیست: نمک ندارد، بنابراین یک برنامه حدسزدهشده را میتوان تأیید کرد و دو استقرار از یک برنامه به هم قابل پیوندند. آنچه M3.4 برداشت این بود که تأییدگر کل برنامه را آشکارا در اختیار داشته باشد.- کیف پولی که پیش از 2026-09-21 ساخته شده باشد شاهدها را از گره خود میخواهد، و درخواست شاهد برگی را نام میبرد که قرار است خرج شود.
randفعلی نسخه خود از درخت را نگه میدارد و هرگز درخواست نمیکند؛ گره همچنانrand_getWitnessرا برای کیف پولهای قدیمیتر ارائه میدهد. - سپردهها در مرز عمومیاند: ضرب faucet، نوت genesis و سپرده پل همگی مقدارشان را آشکارا حمل میکنند (از زنجیره 14 به بعد ضرب و نوت genesis بازگشایی خود را هم حمل میکنند، بنابراین کلید مالک نیز عمومی است)، همان دیدپذیری یکگامی که سپرده از حالت شفاف به حالت shielded در هر جای دیگر دارد.
- دانشصفر آماری است، نه کامل. این همان ویژگیای است که FRI پوشاننده Plonky3 0.7 در عمل فراهم میکند، و crate هم همین را میگوید.
- هش transcript از نوع Poseidon2 با ثابتهای دور توسعهای است، نه SHA3-384 / BLAKE3-384 مقالهها. یک تعویض پیکربندی است، نه بازنویسی.
- با 80 پرسوجوی FRI، اثبات بسته در زنجیرههای 14 و 15 حدود 1.42 MB بود (حدود 1.3 MB تا زنجیره 13). از زنجیره 17 به بعد یک انتقال حدود 2.85 MB اثبات حمل میکند: اثبات بسته، حدود 1.49 MB، و اثبات مجوز، حدود 1.37 MB. در یک زنجیره پیشفرض، با بلوکهای 4 MiB و سقف اثبات 2 MiB، اثباتی که Keccak دارد یکسره از سقف اثبات فراتر میرود؛ genesis زنجیره 20 بلوکهای 20 MiB و سقف اثبات 4 MiB تعیین میکند (زنجیرههای 13 تا 16 مقدار 8 MiB داشتند).
- سرایند اثبات فراخوانی پنهان نیست. سطح و ارتفاع جدولهای Keccak و SHA-256 را اعلام میکند، پس نشان میدهد که فراخوانی هش کرده است یا نه. فراخوانیهایی که در زنجیره 15 پیش از کف اثباتگر v0.6 ثبت شدند بیش از این را آشکار میکردند: جدول خصوصی با کمتر از 2⁷ سطر را میشد از اثبات بیرون خواند. کف اثباتگر v0.6 این را برای فراخوانیهای جدید بست، و مجموعه قیود 7 با
hardening_v6آن را از زنجیره 16 به بعد به قاعده زنجیره تبدیل کرد. - هر فراخوانی تا سطح 14 محدود است، با حداکثر 2¹² سطر Keccak (128 جایگشت) و 2¹³ سطر SHA-256 (128 فشردهسازی)، و تحت
hardening_v6برنامهای با بیش از 8,180 کلمه قابل استقرار نیست. guestهای مفسر EVM و sBPF و تصاویر ترجمهشده ERC-20 و SPL Token همگی از این حد بزرگترند. - هر که شاهد را در اختیار دارد همهچیز را میبیند. ZK دید تأییدگر را محافظت میکند، نه دید اثباتگر را. از زنجیره 17 به بعد کیف پول میتواند اثبات بسته را بدون سپردن کلید خرج به یک
rand-proverجفتشده بسپارد، اما آن اثباتگر همچنان کلید مشاهده را دارد و نوتها را میبیند. بکاند CUDA نخستینبار در 2026-09-28 روی سختافزار اجرا شد و هنوز اندازهگیری تولیدی ندارد.
ساختار مخزن
workspace Cargo مربوط به fullnode، همانگونه که در README و دایرکتوری crates/ آن چیده شده است.
| مسیر | آنچه در آن است |
|---|---|
crates/randprotocol-core/ | منطق محض، بدون I/O: رمزنگاری، نوتها و درخت تعهد، قواعد دفتر کل، گس، genesis، ماشین حالت HotStuff |
crates/randprotocol-zkvm/ | zkVM مربوط به Rand، vendored از zkp-circuits/research در مجموعه قیود 8 (مدارها aeacf31؛ با deploy/sync-zkvm.sh دوباره همگام شده)، بهعلاوه تأییدگر اثبات سمت زنجیره و حافظه نهان کلید تأییدگر آن |
crates/randprotocol-rvm/ | ماشین بازگشتی، vendored از zkp-circuits/recursion: ماشینی بومی میدان که برنامههایش اثباتهای zkVM مربوط به Rand را تأیید میکنند |
crates/bridge-codec/ | قالب سیمی پل نگهبان و قاعده حدنصاب آن، بایت به بایت مشترک با قراردادهای Solidity و برنامه Solana |
crates/randprotocol-node/ | ذخیرهسازی RocksDB، شبکه libp2p، mempool، همگامسازی بلوک، سرور JSON-RPC و باینری rand-node |
crates/randprotocol-client/ | باینری کیف پول rand و کتابخانه RpcClient، بدون وابستگی به RocksDB یا libp2p |
crates/randprotocol-prover/ | باینری rand-prover: اثباتگری تفویضی که بستهها را برای کیف پولهای جفتشده اثبات میکند |
deploy/ | فایلهای genesis شبکه testnet، nodes.env، اسکریپتهای اجرا، آمادهسازی ابری، اسکریپتهای انتقال و بازسازی. از زمان آمادهسازی زنجیره 14 هیچ کلیدی در اینجا ردیابی نمیشود |
docs/ | مستندات مرجع و مشخصات طراحی |
scripts/ | testnet محلی با دو اعتبارسنج |
مشخصشده، اما هنوز عرضهنشده
این مؤلفهها در مقالهها یا مستندات fullnode توصیف شدهاند اما در حال اجرا نیستند: یا در مخزنها وجود ندارند، یا ساخته شدهاند و برای هیچ زنجیرهای روشن نیستند. فهرست شدهاند تا فاصله میان مشخصات و کد خوانا باشد و نه استنباطی.
| مؤلفه | وضعیت |
|---|---|
| پل · نگهبان | دیمنهای نگهبان و رله که قالب گواهی را سرتاسر اجرا میکنند؛ قراردادها، codec و نیمه دریافتکننده fullnode عرضه شدهاند، دیمنها نه |
| fullnode · تجمیع | تجمیع بلوک با ماشین بازگشتی: مهروموم، هرس و همگامسازی به شکل مهرومومشده. ساخته شده و در همه زنجیرهها خاموش است؛ rand-node genesis دارای بخش aggregation را رد میکند. هنوز به تمرین سرتاسری مجموع جعلی نیاز دارد، و فقط اثبات بسته را حذف میکند، نه اثبات مجوز را. اثباتهای تولیدی rVM به ماشینی بزرگ نیاز دارند: تحت مجموعه قیود 7 تجمیع دو مورد 133 GB، سه مورد 221 GB، و اثبات خروج بیش از 256 GB گرفت (اندازهگیریشده در 2026-09-28 و 29؛ تحت مجموعه قیود 8 دوباره اندازهگیری نشده) |
| fullnode · آزادسازی تدریجی | تخصیصهای زمانقفلدار genesis برای تیم، سرمایهگذاران و شرکا (v0.5.11، docs/vesting.md). وابسته به genesis: بدون بخش vesting چهار کنش آزادسازی تدریجی رد میشوند، و هیچ زنجیرهای چنین بخشی ندارد. ممیزی عرضه زنجیره 20 همه شمارندههای آزادسازی تدریجی را صفر گزارش میکند. از v0.6.8 یک ورودی قابلابطال با حدنصابی از ابطالکنندگانش باطل میشود، و فقط به خزانهای که ورودی genesis آن نام برده |
| fullnode · جریمه سپرده | جریمه سپرده و زندانیکردن برای دوگانهگویی رهبر در v0.6.8 پشت staking.slashing ساخته شدهاند و در زنجیره 20 خاموشاند (genesis آن چنین بخشی ندارد، در حالی که هر 26 کلید اعتبارسنج به یک اپراتور تعلق دارند). پاداش بلوک، فانوس رهبر مبتنی بر hash-sortition، انباشتگر nullifier و فراخوانیهای میانبرنامهای ساخته نشدهاند. وضعیت پایدار برای هر برنامه بهصورت RPL-2 عرضه شد (بالا) |
prover/ | دیمن اثباتسازی GPU: دستهها را از صف برمیدارد، در ثبت رقابت میکند. کرنلهای CUDA در zkp-circuits قرار دارند و نخستینبار در 2026-09-28 روی NVIDIA H100 اجرا شدند؛ دیمن بازار وجود ندارد. rand-prover که عرضه شده است برای کیف پولهای جفتشده با خود اثبات میسازد و بازار نیست |
| zkp-circuits · M4.4 اثبات خروج | اثبات یک انتقال SPL Token (سطح 20)، با برونیابی حدود 330 GB. انتقال ERC-20 (سطح 18) در 2026-09-19 روی یک droplet با 128 GB اثبات شد. هیچکدام در زنجیره 20 قابل فراخوانی نیست، زیرا فراخوانی را به سطح 14 محدود میکند |
ساخت و آزمون
Rust در هر مخزن، گردشکار استاندارد خود را دارد. fullnode یک workspace واحد Cargo است با toolchain پینشده و یک مجموعه تست خوشهای که گرههای واقعی را روی TCP راهاندازی میکند. ساخت آن به این نیاز دارد که مخزن circuits در کنار آن، در دایرکتوریای با نام circuits و روی commitی که crateهای vendored از آن همگامسازی شدهاند (aeacf31 برای v0.6.7 و v0.6.8) checkout شده باشد. zkVM یک crate مستقل در zkp-circuits است که toolchain پینشدهٔ خودش را دارد و یک نمونهٔ نمایشی که شرح میدهد یک فراخوانی محرمانه چه چیزی را آشکار میکند و چه چیزی را آشکار نمیکند.
fullnode:
git clone https://github.com/randprotocol/fullnode.git
git clone https://github.com/randprotocol/zkp-circuits.git circuits # the sibling directory must be named circuits
git -C circuits checkout "$(sed -n 's/^circuits: //p' fullnode/crates/randprotocol-zkvm/guests-compiled/PROVENANCE.md)"
cd fullnode
# Rust 1.98.1 is pinned by rust-toolchain.toml; first build pulls RocksDB and Plonky3, 10 to 20 minutes
cargo build --release # target/release/rand-node, target/release/rand, target/release/rand-prover
# All crates; release because STARK proving is slow in debug. One to two hours, mostly proving
cargo test --release
# One machine, two validators
scripts/local-testnet.sh
target/release/rand --rpc http://127.0.0.1:8545 status
zkVM پژوهشی، در zkp-circuits/research:
# Toolchain is pinned by rust-toolchain.toml; the first build pulls Plonky3
cargo build --release
# Narrated demo: thirteen proofs, one at production FRI parameters (~6-7 min)
cargo run --release
# Emulator, per-table constraints, cheating provers, ZK, end-to-end, viewing keys, compiled guests (395 tests, ~17 min)
cargo test
مجموعه تست fullnode با اندازهگیری در v0.6.1 روی ماشینی با ۱۶ vCPU: core ۵۲۱ تست، node ۳۷۳، client ۱۱۷، مجموعهٔ prover متقلب ۱۱۶، تقلبهای hidden-bundle ۲۱ (۷۵ دقیقه)، جریان کیف پول ۶ (۵۳ دقیقه)، خوشه ۲۶ (۴۴ دقیقه) و گیت end-to-end برای zUSD ۲ (۵۱ دقیقه). اثباتهای تولیدی ماشین بازگشتی (recursion VM) خارج از آن هستند و به حافظهای نیاز دارند که در بالا فهرست شده است.
راهاندازی یک گره نحوهٔ پیوستن به testnet عمومی را با همین ساخت توضیح میدهد؛ genesis مربوط به testnet، همتاهای bootstrap و اسکریپتهای اجرا در دایرکتوری deploy/ مخزن fullnode عرضه میشوند و صفحهٔ دانلود خلاصهٔ آن را دارد.
مشارکت
fullnode تحت مجوز GNU General Public License v3.0 (GPL-3.0-only) منتشر شده است؛ پیش از این Apache-2.0 بود. برای اشکالها و پیشنهادهای طراحی، در مخزنی که تغییر به آن مربوط میشود issue باز کنید. pull requestها پذیرفته میشوند: پیش از ارسال، cargo fmt && cargo clippy را اجرا کنید و تغییرات را محدود و متمرکز نگه دارید. issueهای fullnode جای شروع است.
معماری، مدار حریم خصوصی، اثبات توکن کارمزد و مصالحهٔ پساکوانتومی، همگی در whitepaper در صفحهٔ مقالات مستند شدهاند. دایرکتوری docs/ خود مخزن fullnode منبعی است که هر صفحه در این مستندات با آن راستیآزمایی شده است.