Rand مفتوحة المصدر. العقدة الكاملة، والمستكشف، والجسر، وأبحاث الإثبات، وتطبيقات المحفظة، لكلٍّ منها مستودعه الخاص على GitHub. اقرأ الشيفرة، وشغّل الاختبارات، وأرسل التصحيحات. هذه الصفحة هي الخريطة: أين يقع كل مكوّن، وبماذا بُني، وإلى أي مدى وصل نظام الإثبات، وأين يتوقف اليوم.
المستودعات
| المستودع | ما يحتويه | اللغة |
|---|---|---|
randprotocol/fullnode | العقدة الكاملة المرجعية والمحفظة: HotStuff BFT المتسلسل، وشبكات libp2p، ومجمّع ملاحظات RAND المحمية، ومتحقّق إثباتات zkVM، وJSON-RPC، وأداة سطر الأوامر rand للمحفظة، والمُثبِت المفوَّض rand-prover. | Rust |
randprotocol/randscan.org | مستكشف الكتل الذي يقف خلف randscan.org: مُفهرِس axum بواجهة 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 بعمق 32، ومجموعة المُبطِلات (nullifiers)، وحزمة واحدة بأربعة مدخلات وأربعة مخرجات لأصول مخفية في كل معاملة (مدخلان ومخرجان حتى السلسلة 13)؛ ومنذ السلسلة 17 إثبات تفويض ثانٍ من المستوى 10 بجانب إثبات الحزمة (تفويض مجزّأ)؛ ومنذ السلسلة 18 أغلفة ملاحظات بحجم 1,860 بايت مع مذكّرة مشفّرة |
| الرموز | RPL: الرمز إدخال في سجل دفتر الأستاذ بمعرّف rpl1… وليس عقدًا؛ وينتقل في صورة ملاحظات في المجمّع نفسه |
| الرهن | سجل مُصادِقين علني: رهن من حزمة، وفكّ رهن على حقبتين، وحقب من 1,000 كتلة؛ ومنذ السلسلة 20 يُقبل المُصادِق الجديد بتصويت المجموعة |
| الحوسبة السرّية | zkVM الخاصة بـ Rand: RV32IM تحت STARK دفعي على Plonky3، وFRI مُخفٍ بالمعرفة الصفرية، ومجموعة القيود 8؛ ومنذ السلسلة 18 يعلن الاستدعاء حدّ غاز تفرضه الدائرة ويدفع عن كل وحدة غاز وكل KiB؛ ومنذ السلسلة 20 يحتفظ البرنامج بالحالة في خلايا ويحوز القيمة في خزنة (RPL-2) |
| التشفير | Dilithium2 · ML-KEM-768 · Poseidon2 · BLAKE3 · ChaCha20-Poly1305 |
| التخزين | قاعدة RocksDB واحدة لكل عقدة، وإيداعات مزامنة بـ fsync، وفحص سلامة عند الإقلاع؛ مع تقليم اختياري للتاريخ (--prune-history 24h)، وتحتفظ عقد الأرشيف بكل شيء |
| الجسر | أقفال مُقرّة من الحرّاس على أربع سلاسل، مع نصاب توقيع مشترك بـ Dilithium2 على كل سكّ؛ والأصل المُجسَّر ملاحظة في المجمّع نفسه |
| اللغة | Rust في كل مكان؛ وSolidity للجسر، وTypeScript للمستكشف |
علاقة واحدة لكل برنامج
علاقة التنفيذ الشاملة R_exec في الورقة البيضاء موجودة الآن شيفرةً: rand_zkvm، وهي آلة RV32IM يُبرهَن عليها تحت STARK دفعي واحد على Plonky3 فوق حقل Goldilocks. يُثبت أن أثر تنفيذ ما شغّل البرنامج hc وصولًا إلى هذه المخرجات العلنية، على مدخلات التُزم بها عبر H_IN مملَّح، ولا يكون أي شيء عن البرنامج معاملًا للمتحقّق أبدًا. نشر برنامج سرّي يعني تسجيل تجزئة، لا توليد دائرة مخصّصة.
نظام الإثبات شفاف، بلا إعداد موثوق ولا منحنى اقتران، وافتراضه الوحيد دالة تجزئة مقاومة للتصادم. ويُتوقع أن يتقارب كل مكوّن آخر يمسّ الإثباتات نحو هذه الحزمة بدل أن ينشئ نظامه الخاص. تقع الحزمة في zkp-circuits/research وهي مضمّنة في fullnode عند مجموعة القيود 8 (circuits aeacf31، وfullnode v0.6.7 وv0.6.8). تصف الجداول والقياسات أدناه مجموعة القيود 5 (المرحلة 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 وجداول النطاق والنبلات) ويتحقق المتحقّق من أن كل ناقل متوازن على المستوى العام. والدرجة القصوى لقيود كل جدول مثبّتة باختبار تحت السقف 8 الذي يسمح به تضخيم FRI.
| الجدول | النوع | الدور |
|---|---|---|
program | شاهد | كلمات التعليمات الخام، تُفكّ داخل الدائرة منذ M3.4، ويهضمها cpu إلى hc |
cpu | شاهد | صف واحد لكل دورة، إضافة إلى صفوف هضم تمتصّ البرنامج في hc والمدخلات المملَّحة في H_IN |
memory | شاهد | السجلات وRAM في جدول واحد، مرتّبة حسب (space, addr, ts)؛ والوصول دون الكلمة منذ M2.5 |
alu | شاهد | حساب بأطراف بايت، والإزاحات، والمقارنات؛ والضرب والقسمة في RV32M منذ M2.6 |
range | مُعدّ مسبقًا · 256 صفًا | فحوص النطاق وجدول قوى العدد 2 |
nibble | مُعدّ مسبقًا · 256 صفًا | AND وOR وXOR على 4 بتات؛ والإصابة فيه هي نفسها فحص نطاق على المعامليْن كليهما |
poseidon2 | شاهد | صف واحد لكل جولة تبديل في كتل من 32 صفًا؛ يخدم ناقل POSEIDON2 والهضميْن كليهما |
input | شاهد · منذ M4.1 | صف واحد لكل كلمة مدخل خاص؛ يخدم INPUT_DIGEST وINPUT_READ، فلا تستطيع قراءة الإفلات من الالتزام |
keccak | شاهد · اختياري | Keccak-f[1600] في كتل من 32 صفًا، ولا يوجد إلا في إثبات استدعى ضيفه KECCAK (M4.2) |
وصلت منذئذٍ ثلاث مجموعات قيود. أضافت المجموعة 6 جدول public إلزاميًا للمدخل العلني للبرنامج وقت النشر، مرتبطًا بالهضم غير المملَّح H_PUB، وجدول sha256 اختياريًا بجانب keccak. وتُعمّي المجموعة 7 (السلسلة 16) كل طرف نهائي في LogUp على ناقل جديد هو BLIND وتفرض حدًّا أدنى 2⁷ صفًا على كل جدول مُعلَن، وتضيف استدعاء النظام POSEIDON2_LEN المقيَّد بالطول. وتضيف المجموعة 8 (السلسلة 18) عمود GAS إلى جدول cpu وقيمة علنية واحدة هي GAS_LIMIT المُعلَن.
ما يكشفه الإثبات
علني: تجزئة الشيفرة hc (ثماني كلمات هضم داخل الدائرة)، والتزام المدخلات المملَّح H_IN (ثماني كلمات)، ومستوى الغاز، وثماني كلمات مخرجات. ومنذ مجموعة القيود 6 أيضًا H_PUB، هضم المدخل العلني، ومنذ مجموعة القيود 8 حدّ الغاز المُعلَن. يعلن ترويس الإثبات ارتفاعات جدولَي Keccak وSHA-256، فيُظهر ما إذا كان الاستدعاء قد أجرى تجزئة، وكم تقريبًا إن تجاوز ذلك الحدّ الأدنى 2⁷.
مخفي: المدخلات الخاصة (فـH_IN مملَّح، فهو مُخفٍ إضافةً إلى كونه مُلزِمًا)؛ وكل كلمة تعليمات، لأن المتحقّق يفحص hc ولا يرى البرنامج أبدًا؛ وكل قيمة في السجلات والذاكرة؛ وكل فرع اتُّخذ؛ وعدد الدورات الدقيق والغاز المستهلك بدقة؛ واستدعاءات النظام التي نُفّذت، باستثناء ما يكشفه ارتفاعا جدولَي التجزئة.
المستوى علني في كل إثبات لأن حجم STARK يكشف أصلًا ارتفاع أثره؛ وإخفاء الفهرس لن يفيد بشيء. أما hc فهو مُلزِم لا مُخفٍ: انظر أين يتوقف اليوم.
القياسات، عند مجموعة القيود 5
| FRI | 80 استعلامًا · 20 بت PoW · تضخيم 8 · ترتيب 8 · المعرفة الصفرية مفعّلة؛ 260 بت بالتخمين، ونحو 86 بالبرهان. أُلغي ضبط 27 استعلامًا في M2 بتدقيق 2026-09-12 |
| الاستدعاء | private_payment عند المستوى 10: نحو 7 ثوانٍ للإثبات، ونحو 1.2 MB من الإثبات عند 80 استعلامًا (435 KB عند 27)، بعد أن كان 21.6 ثانية و892 KB عند M1 |
| التحويل | ضيف الحزمة بمدخلين ومخرجين في السلاسل حتى 13: 3,811 كلمة، ونحو 9,160 دورة، المستوى 14؛ ونحو 100 ثانية للإثبات، ونحو 1.3 MB من الإثبات. وضيف الأصول المخفية بأربعة مدخلات وأربعة مخرجات في السلسلة 14 مثبّت على المستوى نفسه: نحو 100 ثانية، ونحو 1.42 MB |
| التحقق | نحو 16 ms بمفتاح دافئ؛ وأول تحقق عند مفتاح (مستوى، ارتفاعات) جديد نحو 230 ms |
| الكتلة | ميزانية 4 MiB وسقف إثباتات 2 MiB: نحو ثلاثة تحويلات محمية في الكتلة عند 80 استعلامًا |
حاسوب محمول بمعالج Apple Silicon، بناء إصدار. وما غيّر زمن الإثبات هو تقسيم جداول البايت في M2.3؛ وما أعاد حجم الإثبات إلى الارتفاع هو ملف 80 استعلامًا. مفتاح المتحقّق مستقل عن محتوى البرنامج، ومفهرس بالمستوى وبارتفاعات البرنامج والمدخل وkeccak التي يعلنها الإثبات، فتُدفئ العقدة مفتاحًا واحدًا وتعيد استخدامه.
لقد حرّكت المجموعات اللاحقة الأحجام. في ظل مجموعة القيود 7، يبلغ حجم إثبات المستوى 10 نحو 1,367,688 بايت في ملف الإنتاج، ويبلغ حجم إثبات المستوى 10 الحامل لـ Keccak نحو 3,283,898 (قِيس في 2026-09-28). ومنذ السلسلة 17 تحمل كل حوالة إثباتين: إثبات الحزمة من المستوى 14 بحجم نحو 1.49 MB، وإثبات التفويض من المستوى 10 بحجم نحو 1.37 MB ويستغرق إثباته نحو 7 ثوانٍ. وتحدد نشأة السلسلة 20 كتلة بحجم 20 MiB وحدًّا أقصى للإثبات بحجم 4 MiB، ولا يجوز أن يتجاوز الاستدعاء المستوى 14.
ثلاثة أهداف، دارة واحدة
لا ينفَّذ أصلًا إلا RISC-V. أما برامج Solidity وSolana فتعمل إما على ضيف مفسِّر داخل العلاقة نفسها مع إدخال شيفرتها البايتية، وإما تُترجم خارج السلسلة إلى برامج RISC-V تطابق مخرجاتها مخرجات المفسِّر كلمةً بكلمة. أما التعليمات المكلفة فتتطلب جداول معالجات مساعدة مخصصة بدلًا من المحاكاة بتًّا ببت.
| الهدف | المسار | المعالجات المساعدة |
|---|---|---|
| RISC-V | أصلي. RV32IM، إما مجمَّع يدويًا عبر asm.rs وإما Rust من نوع no_std مترجم إلى riscv32im-unknown-none-elf، ويُحمَّل كملف ثنائي مسطَّح منذ M4.1، أو يُبنى من Rust أو C بواسطة rand-guest في حاوية الصورة (نشر برنامج Rust) | Poseidon2 (وPOSEIDON2_LEN منذ المجموعة 7)؛ Keccak-f[1600] منذ M4.2؛ SHA-256 منذ المجموعة 6 |
| Solidity | solc --bin-runtime إلى شيفرة EVM البايتية، ثم إما الضيف المفسِّر evm.bin (الشيفرة البايتية مدخلًا) وإما evm2rv الذي يترجم الشيفرة البايتية إلى C تبنيه rand-guest في صورة RV32IM بالمخرجات نفسها (مترجم Ethereum) | Keccak-256 (الجدول مشحون)، حساب معياري على 256 بت، ECRECOVER، استدعاءات نظام لشواهد Merkle من أجل التخزين |
| Solana / SVM | ملف ELF بصيغة sBPF، يشغِّله الضيف المفسِّر sbpf.bin أو يترجمه sbpf2rv إلى صورة RV32IM بالمخرجات نفسها (مترجم Solana) | SHA-256، التحقق من Ed25519، الضرب على 64 بت |
المراحل
أثبتت المرحلة 1 الآلة العامة الغرض. وحوّلتها المرحلة 3 إلى مجمّع محمي: تُثبَت الحوالة ذات العضوية داخل الدارة وفق R_exec، ويتحقق المتحقق من hc دون أن يرى كلمة واحدة من البرنامج. أما المرحلة 4 فهي التوافق: شُحن محمّلها والتزام المدخلات وجدول Keccak ضمن مجموعتي القيود 4 و5، وجدول SHA-256 مع المجموعة 6. وقد بُني الضيفان المفسِّران لـ EVM وsBPF، وسلسلة أدوات rand-guest، والمترجمان. وأُثبتت حوالة ERC-20 على جهاز بذاكرة 128 GB؛ أما إثبات SPL Token، عند المستوى 20، فلم يتم. والمرحلة 5 هي آلة التراجع (recursion) الكامنة وراء تجميع الكتل، وهي مبنية ومعطّلة على كل سلسلة. وجاءت مجموعتا القيود 7 و8 بعد مراجعات سبتمبر ونموذج الغاز.
| المعرّف | النطاق | معيار الإنجاز | الحالة |
|---|---|---|---|
| M1 | خمسة جداول، مجموعة تعليمات RV32I الأساسية، HALT/WRITE_OUTPUT/READ_INPUT، ZK مفعّل، حشو المستويات، مجمِّع، محاكٍ | تُثبَت fib وmemcpy وbubble_sort وalu_mix وbalance_check وتُتحقَّق؛ ويُرفض كل اختبار غش | منجز. 44 اختبارًا؛ وأغلقت مراجعة لاحقة خمس ثغرات في السلامة (soundness) في موجة واحدة |
| M1.5 | مفاتيح العرض: ضيف حوالة محمية بمدخل واحد ومخرج واحد، أغلفة ملاحظات بـ ML-KEM-768 وChaCha20-Poly1305، إفصاح محصور بالطرف وبالمعاملة، دفتر أستاذ محاكى | تُثبَت الحوالة عند المستوى 12 ويقبلها دفتر الأستاذ؛ ويفتح كل نطاق إفصاح صفوفه وحدها؛ ولا يستطيع مفتاح العرض الإنفاق | منجز. غير مدمج في العقدة |
| 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 كروتينات ضيف فوقها؛ نقل الالتزام المنفَق خارج المخرج العام؛ جدول البرنامج شاهدًا مع هضم hc داخل الدارة | تُثبَت علاقة الحوالة وفق R_exec مع العضوية داخل الدارة، ولا يرى verify(hc, proof) كلمة من البرنامج | منجز. ضيف الحوالة: 4,554 تعليمة، 4,903 دورة، المستوى 14. صار مسار Merkle حلقة معدودة، فلم يعد حجم البرنامج يتغير مع عمق الشجرة |
| CUDA | واجهة إثبات على GPU: NTT والتزامات Merkle بـ Poseidon2 كنوى CUDA خلف سمتَي Dft وMmcs في Plonky3؛ وتقبل rand send وcall وdeploy الخيار --cuda | يُثبَت كل ضيف ويُتحقَّق منه عبر التوأم المرجعي بـ Rust الخالصة والمشغِّل الوهمي؛ ولا يميّز المتحقق على CPU بين الواجهات | منجز؛ أول تشغيل على العتاد في 2026-09-28. على NVIDIA H100 تُبنى النوى إلى PTX للمعماريتين sm_80 وsm_90 وتطابق مرجعَي CPU وPlonky3. ولا يزال قياس الإنتاج على عقدة GPU في الأسطول مطلوبًا. ولا يستطيع استدعاء CUDA ختم غلاف مدخل، لأن الملح لا يغادر المُثبِت أبدًا |
| M4.1 | محمِّل الملف الثنائي المسطَّح وأول ضيوف Rust من نوع no_std مترجمة إلى riscv32im-unknown-none-elf؛ التزام المدخلات المملَّح H_IN بجدول مدخلات خاص به، فتصبح READ_INPUT بحثًا في متجه ملتزَم به | ضيف مبني بسلسلة الأدوات القياسية يُحمَّل ويُثبَت ويُتحقَّق منه؛ وتتفق قراءتان للفهرس نفسه من المدخلات وترتبط المدخلات بـ H_IN | منجز. استقر في 2026-09-11 بوصفه مجموعة القيود 4: 26 قيمة عامة، ثمانية جداول، تفرّع صلب |
| M4.2 | جدول معالج مساعد Keccak-f[1600] مكتوب يدويًا واستدعاء النظام KECCAK، يظهران في الإثبات فقط إذا استخدمهما الضيف؛ ارتفاع ذاكرة يُعلنه الإثبات؛ مفتاح تحقق مبني على أربعة مكونات؛ وعودة FRI إلى 80 استعلامًا بعد تدقيق 2026-09-12 | يُثبَت keccak256 ضيفًا مترجمًا، ويطابق إثبات بلا الجدول في شكله بايتًا ببايت إثباتًا من M4.1 | منجز. استقر في 2026-09-12 بوصفه مجموعة القيود 5، تفرّع صلب. إثبات حامل لـ Keccak أكبر بنحو 1.9 MB، أي فوق الحد الافتراضي 2 MiB. وتقبله سلسلة ترفع نشأتها هذا الحد: السلسلة 13 (8 MiB) قبلت استدعاءً حاملًا لـ Keccak بحجم 3.41 MB في 2026-09-19، وحد السلسلة 20 هو 4 MiB |
| M4.3 · M4.4 | ضيفان مفسِّران لـ 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 دقيقة)؛ أما إثبات SPL Token، عند المستوى 20، فقُدِّر بنحو 330 GB بالاستقراء ولم يُنجَز (ذاكرة الإثبات). ولا يمكن استدعاء أي منهما على السلسلة: فالاستدعاء محدود بالمستوى 14 |
| M5 | آلة التراجع (rVM): آلة أصلية في Goldilocks من 24 تعليمة تتحقق برامجها من إثباتات Rand zkVM، وبرنامج تجميع واحد عام في N لكل شكل إثبات داخلي، وفصل بين واجهتي CPU وCUDA، ومتحقق ذاتي (M5.1 إلى M5.4، من 2026-09-13 إلى 2026-09-16) | قُبل 50 إثبات حزمة إنتاجي حقيقي ورُفض 50 إثباتًا معبَّثًا به عند الخطوة المسماة؛ ويتحقق أصليًا إثبات rVM لبرنامج المتحقق على إثبات حزمة حقيقي واحد (ملف الاختبار) | مبني؛ وتحتاج إثباتات الإنتاج إلى جهاز كبير. مدمج بوصفه crates/randprotocol-rvm. والتجميع من جهة السلسلة مدموج ومعطّل على كل سلسلة (أدناه) |
| المجموعة 7 | حجب كل طرف نهائي في LogUp؛ رفع كل جدول مُعلَن إلى حد أدنى 2⁷ صفوف؛ فحوص نطاق 32 بت على كلمات المدخل والعام والملح؛ استدعاء النظام POSEIDON2_LEN؛ إصلاح JALR؛ مفاتيح تحقق مملَّحة من key_derivation_v2 | إصلاحات مراجعتَي zkVM في 2026-09-27 و28 التي تحرّك مفتاح التحقق، مأخوذة في قطع واحد | منجز. العقدة الكاملة v0.6.1، السلسلة 16 (2026-09-28)، تفرّع صلب |
| المجموعة 8 | عدّاد الغاز: عمود GAS في جدول cpu وGAS_LIMIT عام، مع إثبات GAS ≤ GAS_LIMIT داخل الدارة؛ ويبقى الغاز الفعلي للتشغيل خاصًا | يدفع الاستدعاء مقابل الحد الذي يعلنه، ويعلن كل إثبات حزمة الحد المثبَّت نفسه | منجز. العقدة الكاملة v0.6.7-rc1، السلسلة 18 (2026-09-29)، تفرّع صلب. قيمة bundle_gas_limit هي 20,479 |
مراحل المجمّع المحمي
استقر دفتر أستاذ العقدة الكاملة على ثلاث مراحل، كل منها تفرّع صلب (docs/shielded.md §7). حلّت S1 مجمّع ملاحظات محل دفتر الحسابات؛ وأعادت S3 الجسر في صورة ملاحظات واستقرت أولًا؛ ووضعت S2 الإيداع الرهني (staking) فوق ذلك. وكلها في main وعلى السلسلة الحالية.
أُنجزت الصفوف الواقعة تحت S2 ضمن عمل v0.5. كل صف منها تفرّع صلب (hard fork)، وقد أُخذت معًا في سلسلة جديدة واحدة هي السلسلة 14، التي أُنشئت في 2026-09-20 من البناء b3c594c، ووُسمت v0.5 في اليوم نفسه بعد رحلة zUSD كاملة وحيّة عبر نقاط المصدر المنشورة. أما السلسلة 15، التي عملت منذ 2026-09-26 على v0.5.8 وما بعدها، فقد حملت ذلك كله مع تفعيل إصلاحات التدقيقين v4 وv5 المرتبطة بالجينيسيس: صنبور بقائمة سماح وميزانية لكل حقبة، وتأخير تفعيل السندات، وسقف لوزن الحصة، وتسجيلات مرتبطة بالجينيسيس، وconsensus_domain بقيمة 1، وقواعد الجسر v2، وسقف سجل الرموز، ورسم تسجيل محروق، وحدّ 2⁶³ للملاحظات. وأما السلسلة 20، العاملة منذ 2026-10-01 الساعة 06:17 UTC على v0.6.8 (c9c9bd3c) وهي تفرّع صلب من السلسلة 19، فتحتفظ بذلك كله وتضيف عمل إصدارات v0.6، المدرج أدناه.
| المعرّف | النطاق | معيار الإنجاز | الحالة |
|---|---|---|---|
| S1 | المجمّع نفسه: الملاحظات، وحزم مُثبتة بصيغة 2 مدخلات و2 مخرجات، وشجرة التزامات Poseidon2 بعمق 32 ومجموعة المبطِلات (nullifiers)، ومحفظة rand ذات المُثبِت المحلي، وRPC المنقَّح | تجتاز مجموعة اختبارات العنقود جميعها: تحويل محمي بين محفظتين، وسباق إنفاق مزدوج بين مصادِقَين، ونشر واستدعاء برنامج تُدفع كلفتهما بالحزم | منجز. يعمل على الأسطول العام منذ السلسلة 6 (2026-09-12) |
| S3 | الجسر في صورة ملاحظات: الحيازة المُجسَّرة تحمل فهرس الأصل في السجل، وشهادة إثبات تودِع ملاحظة واحدة تحسبها السلسلة بنفسها، وBridgeBurn هو المعاملة الوحيدة ذات الحزمتين؛ ومظاريف مختومة لمدخلات الاستدعاء، يستطيع فتحها المستدعي أو مفتاح لكل استدعاء أو مدقِّق مسمّى | يُسَك أصل مُجسَّر ويُنفَق ويُحرَق في صورة ملاحظة؛ ويستطيع المستدعي الإفصاح عمّا شغّله البرنامج دون نشره، ويتحقق rand open-call من الفتح مقابل H_IN | منجز. كان الأول وصولًا. تركت السلاسل من 9 إلى 13 قسم الجسر خارج جينيسيسها؛ وكل سلسلة منذ 14 تتضمنه. ومنذ السلسلة 14 صار الحرق حزمة واحدة لا حزمتين |
| S2 | الإيداع (staking) على السلسلة المحمية: سجل علني للمصادِقين، وBond من حرق حزمة، وUnbond على مدى حقبتين، وWithdraw إلى ملاحظة عند عنوان صرف، وحقب من 1,000 كتلة تعيد اشتقاق المجموعة، ومراجعة للعرض عبر السجل والمجمّع | يسجّل مصادِق خامس ويودِع ويقترح من الحقبة التالية؛ ويفكّ آخر إيداعه ويخرج من المجموعة ويسحب إلى ملاحظة تنفقها محفظة الصرف الخاصة به؛ وكلاهما يجتاز مجموعة اختبارات العنقود | منجز. تبعتها شجرة الالتزامات المحلية للمحفظة في 2026-09-21: تحسب المحفظة شهاداتها بنفسها ولم تعد تخبر عقدتها بالورقة التي تنفقها |
| 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 ويُحرَق في صورة ملاحظات داخل المجمّع نفسه | يعمل منذ السلسلة 14 (v0.5). في السلسلة 20 رسم التسجيل 1 RAND محروقة، ويحمل السجل 4,096 رمزًا على الأكثر، ويُدرج الجينيسيس zUSD عند الفهرس 1 |
| RPL-2 | حالة البرنامج (docs/program-state.md): خلايا لكل برنامج (مفتاح من 8 كلمات إلى قيمة من 8 كلمات، داخل جذر الحالة)، وخزنة علنية لكل أصل، ورمز لا يُسَك إلا بواسطة برنامجه، وإجراء Invoke (Action 33)، وهو استدعاء يعلن الخلايا التي يقرؤها ويكتبها والملاحظات التي يدفعها؛ rand program invoke وstate وvault، وrand_getProgramCell وrand_getProgramCells وrand_getProgramVault | لا يطبّق دفتر الأستاذ انتقالًا إلا إذا ظلّت كل قراءة مُعلَنة صالحة وغطّت الخزنة كل دفعة؛ وتُرفض القراءة القديمة وتُعاد إثباتها | يعمل منذ السلسلة 20 (v0.6.8). cell_fee 0.01 RAND للخلية المنشأة؛ وبحدٍّ أقصى 8 قراءات و8 كتابات و4 دفعات في الاستدعاء الواحد. انظر البرامج |
| حزمة الأصل المخفي | تحمل كل معاملة حزمة واحدة بالضبط من 4 مدخلات و4 مخرجات بدل حزمة 2 في 2: تحتوي الخانتان 0–1 الأصل الخاص (خانات وهمية في تحويل RAND فقط)، وتكون الخانتان 2–3 دائمًا RAND وتدفعان الرسم. وقد أُلغي تحويل الرموز ذو الحزمتين وحرق الجسر ذو الحزمتين | يُنشر تحويل RAND وتحويل أي رمز RPL بالشكل نفسه تمامًا، فيبقى الأصل المنقول مخفيًا | يعمل منذ السلسلة 14 (v0.5). المستوى 14، نحو 100 ثانية للإثبات، ونحو 1.42 MB من الإثبات على السلسلتين 14 و15؛ وhc_bundle هو 83d3a370… هناك. وتثبّت السلاسل من 18 إلى 20 الإصدار v3 من ضيف الحزمة، وhc_bundle هو 60af094a…، بنحو 1.49 MB |
| ربط المعاملة | يُنشأ كل إثبات حزمة على H("rand-tx-bind-1", chain_id ‖ tx with proofs blanked) ويُتحقَّق منه مقابله، وهو محمول في مقطع المدخلات العلنية | يُرفض إثبات منسوخ غير معدَّل أُعيد تقديمه بوجهة أو مصادِق أو مذكرة مغيَّرة | يعمل منذ السلسلة 14 (v0.5). منذ السلسلة 20 (binding_domain 1) صار المدخل المُجزَّأ H("rand-tx-bind-2", genesis hash ‖ chain_id ‖ …)، وتحمل كل رسالة إجراء موقَّعة هي أيضًا تجزئة الجينيسيس، فلا يصحّ على سلسلة أخرى شيء أُثبت أو وُقّع لسلسلة واحدة |
| B1–B4 | تحصين الجسر (docs/bridge.md §§14–20). B1: سقف سك يومي لكل دعم، ومفتاح إيقاف لا يستطيع إلا الإيقاف (ورفع الإيقاف يحتاج نصاب PQ). B2: الطابع الزمني للكتلة الذي يتجاوز طابع أبيها بأكثر من 60 ثانية غير صالح، ولا يصوّت المصادِق لكتلة تسبق ساعته بأكثر من 15 ثانية، لذا يحتاج المصادِقون إلى NTP. B3: نصاب توقيع مشترك Dilithium2 على كل عملية سك. B4: إدراج رمز مُجسَّر أو دعم بعد الجينيسيس تحت نصاب الأوصياء PQ، دون قطع سلسلة جديدة | يُسجَّل zUSD، وهو رمز واحد بسبعة دعومات (USDT وUSDC على Ethereum وBinance Smart Chain وTron وSolana)، بمعاملة، ويصحّ total_supply == Σ backings.locked بالبناء. اجتازت البوابة المحلية ذات المراحل التسع (zusd_e2e.rs: أربعة مصادِقين، وإثباتات حقيقية، من الصنبور إلى التسجيل إلى الإيداع إلى التحويل إلى الحرق إلى المراجعة) 9 من 9 | يعمل منذ السلسلة 14 (v0.5). في السلسلة 20: سقف السك 100,000 zUSD يوميًا لكل دعم، إضافة إلى سقف عام قدره 4,000 zUSD لكل 24 ساعة متحركة (قواعد الجسر v2)، ومجموعة الأوصياء 1 بثمانية أوصياء PQ، ورسم 10 bps بعملة zUSD على كل عملية سك وكل حرق (bridge.fees)، وتدوير أوصياء يتطلب الحيازة وينتظر 86,400 ثانية (bridge.rotation). وzUSD مُدرج في جينيسيس السلسلة 20 بدعوماته السبعة و99 zUSD مقفلة عند القطع |
| تدقيق v3 | إصلاحات الجولة الثالثة من التدقيق الداخلي، بقيادة أحد المؤسسين المشاركين (2026-09-19؛ ولم يُجرَ أي تدقيق مستقل). POOL-1: يحمل Mint الصادر عن الصنبور فتح ملاحظته (pk وtime وr)، ويعيد القبول حساب الالتزام، ويوقّع الساكّ rand-mint-2؛ وتحمل ملاحظات تخصيص الجينيسيس فتحًا أيضًا. RPC-1: يشغّل rand_getWitness(es) إعادتَي بناء للشجرة على الأكثر في وقت واحد، ويجيب -32000 مشغول بعد 10 ثوانٍ. OPS-1: دُوِّرت مفاتيح المصادِقين الثمانية عشر كلها، وأُنشئت خارج المستودع، ولا مفتاح متتبَّع في المستودع | تُرفض عملية سك يُفتح التزامها على أكثر من مقدارها؛ ولم يوجد مفتاح من السلسلة 14 في المستودع قط | يعمل منذ السلسلة 14 (v0.5). أُغلق PRIV-1، وهو طلب الشاهد الذي يسمّي الورقة، في 2026-09-21 بشجرة المحفظة الخاصة |
الإصدارات منذ v0.5
كل إصدار وسمٌ في git له مدخل في CHANGELOG.md الخاص بالعقدة الكاملة. والإصدار الذي يغيّر الإجماع أو صيغة الأسلاك أو مفتاح مُتحقِّق يصدر مع سلسلة جديدة؛ أما الإصدارات الأخرى فتنتقل إلى السلسلة الحية عقدة بعد عقدة.
| الإصدار | ما أضافه | السلسلة |
|---|---|---|
| v0.5 إلى v0.5.8 | رموز RPL وzUSD والجسر المحصَّن (أعلاه)؛ إصلاحات التدقيق؛ تقليم السجل التاريخي؛ تحصين الإجماع والمزامنة | 14، 15 |
| v0.5.9 | إصلاحات إعادة المسح: لا تسك الصنبور إلا من المدقّقين الأوائل في genesis، وتراجع تدريجي في المزامنة، وفحوص مسبقة للإشاعة | 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 وحزمة الضيف الإصدار 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 لا تغيّر أي قاعدة إجماع: تقليم الإثباتات المختومة (خامل)، وتثبيت صيغة المغلّف، وسلامة مفاتيح العرض، ومخصِّص الذاكرة في rVM، وتداخل الأسماء في نوى GPU، وتغطية اختبارات ALU. وُسم قبل أن تنتهي مجموعة اختبارات مساحة العمل الكاملة | 18، 19 |
| v0.6.8 | RPL-2: خلايا البرامج وخزائن البرامج والإجراء Invoke. رسوم جسر zUSD في الاتجاهين. آخر إصلاحات audit-v6: لا تحرير تلقائي للأقفال (CON-4) ومنظّم إيقاع بشهادة انقضاء المهلة (CH-1)؛ ومستمع --public-rpc، وحدود القراءة، وأقران مدقّقين محجوزون، وميزانيات المزامنة والإشاعة، وسقف البايتات للمجمّع، وحدّ لدرجة الترويسة المعلنة في الإثبات (ZKV-4)؛ والقواعد المشروطة بـ genesis التي تفعّلها السلسلة 20: ربط تجزئة genesis، وtestnet، ونافذة إثبات من 1,024 كتلة، وسقوف لأسعار الغاز وحمل البايتات المدفوع، والقبول بالتصويت، وسقف الدخول في الحصة كنسبة، والحيازة ومهلة لتدوير الجسر. تحتاج المحافظ إلى هذا الإصدار للإرسال على السلسلة 20 | 20 |
أين يتوقف اليوم
انحرافات عن الورقة البيضاء، نذكرها صراحةً بدل تلطيفها. يُتتبَّع كلٌّ منها في توثيق الحزمة البرمجية نفسها مع المرحلة التي تغلقه.
hcملزِم لكنه غير مخفٍ: فهو لا يحمل ملحًا، فيمكن تأكيد برنامج مخمَّن، ويمكن ربط نشرين لبرنامج واحد. أما ما أزالته M3.4 فهو أن يحتفظ المتحقق بالبرنامج كاملًا بلا تعمية.- المحفظة المبنية قبل 2026-09-21 تطلب الشواهد من عقدتها، وطلب الشاهد يسمّي الورقة التي توشك على إنفاقها. أما
randالحالي فيحتفظ بنسخته الخاصة من الشجرة ولا يطلب شيئًا؛ وما زالت العقدة تخدمrand_getWitnessللمحافظ الأقدم. - الإيداعات علنية عند الحدّ: فسكّ الصنبور وملاحظة genesis وإيداع الجسر تحمل جميعًا مبلغها بلا إخفاء (ومنذ السلسلة 14 يحمل السكّ وملاحظة genesis فتحهما أيضًا، فمفتاح المالك علني كذلك)، وهي الرؤية ذاتها بقفزة واحدة التي يتيحها أي إيداع من شفاف إلى محمي في أي مكان.
- المعرفة الصفرية إحصائية وليست تامة. وهذه هي الخاصية التي يوفرها فعلًا FRI المخفي في Plonky3 0.7، وتنص الحزمة على ذلك.
- تجزئة السجل هي Poseidon2 بثوابت جولات للتطوير، لا SHA3-384 / BLAKE3-384 كما في الأوراق. تبديل في الإعداد، لا إعادة كتابة.
- عند 80 استعلام FRI بلغ إثبات الحزمة نحو 1.42 MB على السلسلتين 14 و15 (نحو 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 كلمة. وضيوف مفسِّري EVM وsBPF وصور ERC-20 وSPL Token المترجمة كلها فوق هذا الحدّ. - من يملك الشاهد يرى كل شيء. المعرفة الصفرية تحمي رؤية المتحقق لا رؤية المثبِت. ومنذ السلسلة 17 يمكن للمحفظة أن تسلّم إثبات الحزمة إلى
rand-proverمقترن بها دون تسليم مفتاح الإنفاق، لكن ذلك المثبِت يظل يحتفظ بمفتاح العرض ويرى الملاحظات. وقد عمل خلفية CUDA على العتاد أول مرة في 2026-09-28 وليس له بعدُ قياس في الإنتاج.
بنية المستودع
مساحة عمل Cargo للعقدة الكاملة، كما هي موضّحة في README الخاص بها وفي دليل crates/.
| المسار | ما يحتويه |
|---|---|
crates/randprotocol-core/ | منطق خالص بلا إدخال/إخراج: التشفير، والملاحظات وشجرة الالتزامات، وقواعد السجل، والغاز، وgenesis، وآلة حالات HotStuff |
crates/randprotocol-zkvm/ | Rand zkVM، منسوخة من zkp-circuits/research عند مجموعة القيود 8 (الدارات aeacf31؛ وتُعاد مزامنتها بـ deploy/sync-zkvm.sh)، مع متحقق الإثباتات من جهة السلسلة وذاكرته المؤقتة لمفاتيح المتحقق |
crates/randprotocol-rvm/ | آلة التراجع التكراري، منسوخة من zkp-circuits/recursion: آلة أصلية للحقل تتحقق برامجها من إثباتات Rand zkVM |
crates/bridge-codec/ | صيغة التبادل وقاعدة النصاب في جسر الحرّاس، مشتركة بايتًا ببايت مع عقود Solidity وبرنامج Solana |
crates/randprotocol-node/ | تخزين RocksDB، وشبكات libp2p، والمجمّع، ومزامنة الكتل، وخادم JSON-RPC، والملف التنفيذي rand-node |
crates/randprotocol-client/ | الملف التنفيذي للمحفظة rand ومكتبة RpcClient، دون اعتماد على RocksDB أو libp2p |
crates/randprotocol-prover/ | الملف التنفيذي rand-prover: مثبِت مفوَّض يُثبت الحزم للمحافظ المقترنة به |
deploy/ | ملفات genesis للشبكة التجريبية، وnodes.env، ونصوص التشغيل، وتجهيز السحابة، ونصوص الانتقال وإعادة البناء. لا يُتتبَّع هنا أي مفتاح منذ تحضير السلسلة 14 |
docs/ | التوثيق المرجعي ومواصفات التصميم |
scripts/ | شبكة تجريبية محلية بمدقّقَين |
محدد وغير مُسلَّم بعد
هذه المكونات موصوفة في الأوراق أو في توثيق العقدة الكاملة لكنها لا تعمل: إما غائبة عن المستودعات، وإما مبنية وغير مفعَّلة على أي سلسلة. نسردها لتكون الفجوة بين المواصفة والشيفرة مقروءة لا مستنتجة.
| المكوّن | الحالة |
|---|---|
| bridge · guardian | خادما الحارس والمرحِّل اللذان يشغّلان صيغة الإقرار من البداية إلى النهاية؛ العقود والمرمِّز وجانب الاستقبال في العقدة الكاملة مُسلَّمة، أما الخادمان فلا |
| fullnode · aggregation | تجميع الكتل بآلة التراجع التكراري: الختم والتقليم والمزامنة بالصيغة المختومة. مبني ومعطَّل على كل سلسلة؛ ويرفض rand-node أي genesis فيه قسم aggregation. ولا يزال يحتاج إلى تمرين التجميع المزوَّر من البداية إلى النهاية، وهو يزيل إثبات الحزمة فقط، لا إثبات التفويض. وتحتاج إثباتات rVM الإنتاجية إلى آلة كبيرة: ففي ظل مجموعة القيود 7 استغرق تجميع اثنين 133 GB، وثلاثة 221 GB، وإثبات الخروج أكثر من 256 GB (قيست في 2026-09-28 و29؛ ولم يُعد قياسها في ظل مجموعة القيود 8) |
| fullnode · vesting | حصص genesis ذات القفل الزمني للفريق والمستثمرين والشركاء (v0.5.11، docs/vesting.md). مشروطة بـ genesis: بلا قسم vesting تُرفض إجراءات الاستحقاق الأربعة، ولا سلسلة لها هذا القسم. ويُبلغ تدقيق العرض في السلسلة 20 عن كل عدّادات الاستحقاق بصفر. ومنذ v0.6.8 يُلغى الإدخال القابل للإلغاء بعتبة من ملغيه، ولا يكون ذلك إلا إلى الخزينة التي يسميها إدخاله في genesis |
| fullnode · slashing | الخفض والسجن عند تعارض القائد (equivocation) مبنيان في v0.6.8 خلف staking.slashing ومعطَّلان على السلسلة 20 (genesis الخاص بها بلا هذا القسم، بينما تعود مفاتيح المدقّقين الـ 26 كلها إلى مشغّل واحد). أما مكافآت الكتل، ومنارة القائد بالفرز بالتجزئة، ومجمِّع المبطِلات، والاستدعاءات بين البرامج فغير مبنية. وقد سُلِّمت الحالة الدائمة لكل برنامج في RPL-2 (أعلاه) |
prover/ | خادم إثبات على GPU: يطالب بالدفعات من الطابور ويتسابق على التقديم. نوى CUDA موجودة في zkp-circuits وعملت أول مرة على NVIDIA H100 في 2026-09-28؛ أما خادم السوق فغير موجود. أما rand-prover المُسلَّم فيُثبت للمحافظ المقترنة به وليس سوقًا |
| zkp-circuits · M4.4 exit proof | إثبات حوالة SPL Token (المستوى 20)، مقدَّر بالاستقراء بنحو 330 GB. وأُثبتت حوالة ERC-20 (المستوى 18) على droplet بذاكرة 128 GB في 2026-09-19. ولا يمكن استدعاء أيٍّ منهما على السلسلة 20 التي تحدّ الاستدعاء بالمستوى 14 |
البناء والاختبار
عملية سير عمل Rust القياسية في كل مستودع. الـ fullnode هو مساحة عمل Cargo واحدة بسلسلة أدوات مثبّتة ومجموعة اختبارات عنقودية تشغّل عقدًا حقيقية عبر TCP. ويتطلب بناؤه أن يكون مستودع الدوائر (circuits) منسوخًا بجانبه في مجلد باسم circuits، عند الإيداع الذي نُسخت منه الحزم المضمّنة (aeacf31 للإصدارين v0.6.7 وv0.6.8). أما الـ zkVM فهي حزمة مستقلة في zkp-circuits لها تثبيت خاص لسلسلة الأدوات، ومعها عرض توضيحي يشرح ما تكشفه المكالمة السرية وما لا تكشفه.
الـ 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 على جهاز بـ 16 vCPU: النواة 521 اختبارًا، والعقدة 373، والعميل 117، ومجموعة المُثبِت الغاش 116، وغشّ الحزم المخفية 21 (75 دقيقة)، وتدفق المحفظة 6 (53 دقيقة)، والعنقود 26 (44 دقيقة)، وبوابة zUSD الشاملة 2 (51 دقيقة). أما إثباتات الإنتاج الخاصة بآلة العودية فهي خارج هذه المجموعة وتحتاج إلى الذاكرة المذكورة أعلاه.
يشرح Running a node كيفية الانضمام إلى testnet العامة باستخدام هذا البناء؛ وتأتي ملفات تكوين genesis الخاصة بـ testnet وأقران الإقلاع (bootstrap peers) وسكربتات التشغيل في مجلد deploy/ في الـ fullnode، كما تقدّم صفحة التنزيل النسخة المختصرة.
المساهمة
رُخِّص الـ fullnode بموجب رخصة GNU General Public License v3.0 (GPL-3.0-only)؛ وكان مرخّصًا بموجب Apache-2.0 سابقًا. افتح بلاغات (issues) للأخطاء ومقترحات التصميم في المستودع الذي يمسّه التغيير. طلبات السحب (Pull requests) مرحَّب بها: شغّل cargo fmt && cargo clippy قبل التقديم وأبقِ التغييرات محصورة في نطاقها. تُعدّ بلاغات الـ fullnode نقطة البداية.
البنية والدائرة الخاصة بالخصوصية وإثبات رمز الرسوم والمفاضلة ما بعد الكمّية موثّقة كلها في الورقة البيضاء في صفحة الأوراق. أما مجلد docs/ في مستودع الـ fullnode نفسه فهو المصدر الذي يُتحقَّق من كل صفحة في هذه الوثائق بمطابقته.