از این بخش برای دیدن این که چه کسی در هنگام عبور یک انتقال از Rand چه کاری انجام میدهد استفاده کنید. اثباتسازی پرهزینه و راستیآزمایی ارزان است، بنابراین کار در امتداد همین مرز تقسیم شده است. سمتِ فرستنده اثباتها را میسازد. اعتبارسنجها (validators) فقط آنها را بررسی میکنند، مرتب میکنند و رأی میدهند. یک aggregator، پس از روشن شدن، اثباتهای بسیار را در یک اثبات ادغام میکند. شکل مسیر یک انتقال را از کیف پول تا یک بلاک نهایی دنبال میکند؛ بخشهای بعد از آن هر نقش را بهنوبت بررسی میکنند.
مسیر یک انتقال
- کیف پول انتقال را میسازد. نوتهای ورودی خود را برمیگزیند، شاهدهای Merkle آنها را دریافت میکند، چهار خروجی میسازد و هر کدام را در یک پاکتِ ML-KEM-768 مهروموم میکند. سپس binding تراکنش را محاسبه میکند، یعنی هشی از همهچیز بهجز اثباتها (Transactions).
- کیف پول مجوز را خودش اثبات میکند. این یک اثبات tier-10 روی کلید خرج و یک salt تازه است و چند ثانیه طول میکشد. این تنها اثباتی است که به کلید خرج دست میزند و همیشه روی دستگاه خودِ کیف پول ساخته میشود.
- اثبات بسته (bundle) جایی ساخته میشود که حافظهاش وجود دارد. این اثبات tier-14 مالکیت، عضویت، nullifierها و تراز را نشان میدهد و به حدود ۶ گیگابایت در اوج نیاز دارد. برنامهٔ دسکتاپ و تلفنی با حدود ۸ گیگابایت آن را خودشان میسازند. هر دستگاه کوچکتر کار را به یک prover جفتشده با خود میسپارد: proverی که خودتان اجرا میکنید، یا استخر validatorها در
prover.randprotocol.org. به هر دو کلید مشاهده و salt فرستاده میشود، نه کلید خرج (Proofs). - یک گره RPC آن را بررسی میکند. هر گرهای که کیف پول به آن ارسال کند، digest بسته را دوباره محاسبه میکند، هر دو اثبات را در برابر binding راستیآزمایی میکند، کارمزد را بررسی میکند و تنها پس از آن تراکنش را به همتایان خود gossip میکند (Proofs، Mempool).
- اعتبارسنجها آن را مرتب و نهایی میکنند. رهبر view تراکنشهایی را که هنوز معتبرند برمیدارد، با بیشترین کارمزد بهازای هر KiB در ابتدا، و یک بلاک پیشنهاد میکند. هر اعتبارسنج همهٔ اثباتهای درون آن را دوباره راستیآزمایی میکند و رأی میدهد. بلاک زمانی کامیت میشود که سه گواهی حدنصاب (quorum certificate) در viewهای متوالی روی آن زنجیر شوند، که به آنلاین بودن ۱۸ اعتبارسنج از ۲۶ اعتبارسنج chain 20 نیاز دارد (Consensus).
- بلاک نهایی است و همه میتوانند آن را بررسی کنند. یک تراکنش وقتی نهایی است که
rand_getTransactionیک بلاک برگرداند. گرهی که بعداً همگام شود، هر گواهی و هر اثبات را دوباره راستیآزمایی میکند و به امضاها اعتماد نمیکند.
نقشها
| role | what it does | proves? | what it sees | runs |
|---|---|---|---|---|
| کیف پول | انتقالها و فراخوانیها را میسازد، مجاز میکند و ارسال میکند؛ زنجیر را با کلیدهای خودش اسکن میکند | همیشه اثبات مجوز؛ اثبات بسته وقتی دستگاه حافظهٔ کافی دارد | همهچیز دربارهٔ نوتهای خودش | برنامههای صفحهٔ Clients، یا rand؛ روی chain 20، Rand Wallet یا rand نسخهٔ v0.6.8 یا بالاتر |
| prover واگذارشده | اثبات بسته را برای کیف پولِ جفتشده با خود میسازد؛ هر پاسخ پیش از ارسال هر چیز توسط کیف پول بررسی میشود | فقط اثباتهای بسته | کلید مشاهدهٔ کیف پولِ جفتشده: کل تاریخچهٔ آن، گذشته و آینده؛ نمیتواند خرج کند | rand-prover run، یا rand-node run --prover |
| استخر prover اعتبارسنجها | یک prover واگذارشده که چهار میزبان آن را اجرا میکنند، دو اعتبارسنج و دو ماشین که فقط اثبات میسازند، پشت یک نام و یک کلید، برای کیف پولهایی که proverی از خود ندارند؛ بدون کارمزد | فقط اثباتهای بسته | همان چیزی که هر prover واگذارشده میبیند، برای هر کیف پولی که آن را جفت کند | prover.randprotocol.org، اثر انگشت RGTF-7HKJ-XZFV-GQ1J |
| گره RPC (ناظر) | همگام میشود، هر اثبات را دوباره راستیآزمایی میکند، JSON-RPC ارائه میدهد، تراکنشهای راستیآزماییشده را gossip میکند؛ بدون رأی | خیر | فقط فیلدهای عمومی: commitmentها، nullifierها، پاکتهای مهرومومشده، اثباتها | rand-node run |
| اعتبارسنج | هر کاری که ناظر میکند، بهعلاوهٔ پیشنهاد بلاک در viewهای خود و رأی دادن در HotStuff | خیر | فقط فیلدهای عمومی | rand-node run --validator |
| aggregator | یک اثبات بازگشتی روی پنجرهای از اثباتهای بستهٔ نهاییشده میسازد و آن را برای یک بلاک مهرکننده ارسال میکند | بله، بزرگترین اثباتهای شبکه | فقط فیلدهای عمومی و اثباتها | rand-node aggregate --watch، روی زنجیری که بخش aggregation دارد |
اثباتسازی و اعتبارسنجی دو کار جداگانهاند و اعتبارسنج به سختافزار prover نیاز ندارد. دو عضو از چهار عضو استخر اعتبارسنجهایی هستند که یک prover را هم بهعنوان سرویس اجرا میکنند؛ دو عضو دیگر ماشینهای اختصاصی اثباتسازیاند که کلید اعتبارسنج ندارند. اجرای استخر جزئی از اعتبارسنجی نیست. اندازههای لازم برای هر نقش و حافظهٔ اثباتسازیِ اندازهگیریشده برای هر tier در Validator and aggregator hardware آمده است.
هر نقش چه چیزی میتواند بفهمد
حریم خصوصی یک انتقال به این بستگی دارد که کدام کلید دست چه کسی است، نه به اعتماد به شبکه:
- اعتبارسنجها، گرههای RPC و explorer همان چیزی را میبینند که هر گرهی میبیند: commitmentها، nullifierها، پاکتهای مهرومومشده، کارمزد و اثباتها. نه مبلغ را، نه دارایی را، نه فرستنده را و نه گیرنده را.
- به prover واگذارشده، از جمله استخر، کلید مشاهده فرستاده میشود. با آن میتواند کل تاریخچهٔ کیف پولِ جفتشده را بخواند. هرگز نمیتواند خرج کند، زیرا اثبات مجوز روی کلید خرج بر روی دستگاه کیف پول ساخته میشود. جفت کردن استخر یعنی انتخاب این که آن تاریخچه به اپراتورهای آن نشان داده شود. اگر میخواهید خصوصی بماند، روی دستگاه خودتان اثبات بسازید یا proverِ خودتان را اجرا کنید.
- prover واگذارشده نمیتواند کیف پول را فریب دهد. کیف پول digest را از هر اثباتی که به آن داده میشود میخواند، اندازه را بررسی میکند و آن را بهصورت محلی راستیآزمایی میکند، بنابراین اثبات نادرست هرگز به گره نمیرسد.
تجمیع: ساخته شده، روشن نیست
امروز هر بلاک همهٔ اثباتهای خام را حمل میکند، حدود ۲٫۸۵ مگابایت برای یک انتقال، بنابراین یک بلاک ۲۰ MiB حدود هفت انتقال را در خود جا میدهد. تجمیع بلاک پاسخ fullnode به این مسئله است. یک aggregator اثباتهای بستهٔ پنجرهای از بلاکهای نهاییشده را (rand_getUnsealed) برمیدارد، یک اثبات بازگشتی میسازد که همهٔ آنها را راستیآزمایی میکند و آن را ارسال میکند. بلاکی که آن را شامل شود پنجره را مهر میکند. سپس اعتبارسنجها بهجای N اثبات یک اثبات تجمیعی را راستیآزمایی میکنند و گرهها میتوانند اثباتهای خامِ پوششدادهشده را کنار بگذارند. aggregatorها وثیقهگذارند و بدون نیاز به مجوزند، روی ماشینهای همرده GPU اجرا میشوند و سهم اثباتسازیِ بستههای پوششدادهشده را بهعلاوهٔ یارانهٔ بلاک به RAND جدید دریافت میکنند.
ساخته و ادغام شده، اما فعال نیست. به یک بخش aggregation در genesis نیاز دارد و chain 20 هیچکدام ندارد، بنابراین rand_status همهٔ شمارندههای تجمیع را صفر گزارش میکند. پیش از آن که بتوان آن را روشن کرد، شکل بستهٔ آن باید زیر مجموعهٔ محدودیتهای فعلی دوباره اندازهگیری شود و باید یک تمرین aggregate جعلی در برابر راستیآزمای بازگشتی اجرا شود. روی زنجیری با مجوز تفکیکشده نیز فقط اثباتهای بسته را مهر میکند، نه اثباتهای مجوز را (Proofs).