الگوریتم گواه اثبات تاریخچه (Proof of History) برای سبک کردن بار گرهها یا نودهای شبکه در بلاکهای در حال پردازش به کار میرود و این کار را با ارائه روشی برای کدگذاری زمان در بلاکچین انجام میدهد. زمانی که درباره یک بلاکچین معمول صحبت میکنیم، رسیدن به اجماع درباره زمانی که صرف استخراج یک بلاک میشود، نکتهای اساسی است؛ درست مانند اجماع درباره وجود تراکنشهای آن بلاک. بنابراین، تعیین زمان (Timestamping) از این جهت مهم است که باعث میشود شبکه از انجام گرفتن تراکنشها در یک توالی خاص، آگاه شود. گواه اثبات تاریخ اساسا شما را قادر میسازد تا بتوانید سابقه تاریخی بسازید که نشانگر وقوع رویدادی در زمانی مشخص است. اما گواه اثبات تاریخچه چیست؟ در این مقاله به توضیح این مفهوم پیچیده و نحوه کارکرد آن میپردازیم. همچنین راجع به شبکه سولانا بیشتر خواهیم گفت. این شبکه به کمک گواه اثبات تاریخچه و دیگر نوآوریهایی که در مقاله پیش رو ذکر خواهد شد، یکی از معدود شبکههای لایه یکی است که به نرخ تراکنش بسیار بالایی دست پیدا کرده است.
با ادامه این مقاله همراه باشید.
الگوریتم گواه اثبات تاریخچه چیست؟

یکی از دشوارترین مشکلاتی که در سیستمهای توزیع شده وجود دارد، توافق یا اجماع بر سر زمان است. در واقع، برخی از افراد میگویند که سیستم گواه اثبات کار (PoW) بیت کوین موثرترین راه برای به اجماع رسیدن در موضوع زمان است؛ اما تیم توسعهدهنده سولانا معتقد است که سیستم گواه اثبات تاریخچه (PoH) راه حل موثرتری برای این موضوع است. در سناریوی گواه اثبات کار، ماینری که زودتر هش معتبر را پیدا کند، بلاک جدید را میسازد؛ این پروسه نیاز به مقدار مشخصی توان محاسباتی دارد. اما گواه اثبات تاریخچه از مفهوم جدیدتری از رمزنگاری به نام “تابع تاخیر قابل تایید (VDF)” استفاده میکند. یک VDF میتواند تنها توسط یک هسته CPU و با اعمال مجموعهای از مراحل متوالی، محاسبه و حل شود. این شبکه از تایماستمپ یا برچسب زمانی یا مهلت زمانی بهبود یافته استفاده میکند. به گفته تیم سولانا:
ساعتهای هماهنگ جالب هستند؛ زیرا میتوانند برای بهبود عملکرد الگوریتمهای توزیع شده استفاده شوند. آنها امکان جایگزینی ارتباط با محاسبات محلی را فراهم میکنند.
الگوریتم گواه اثبات تاریخ، یک منبع زمانی در شبکه است، که بدون نیاز به اجازه و قبل از اجماع کار میکند و راه حلی برای مشکل ساعت یا زمان (Clock) و تایماستمپ در یک شبکه توزیع شده است. در واقع، الگوریتم PoH با هدف سبک کردن بار نودهای شبکه در فرآیند ساخت بلاکها ایجاد شده است.
گواه اثبات تاریخچه، یک سری محاسبات متوالی است که روشی رمزنگاری شده برای اثبات “گذر زمان” بین دو رویداد (Event) ارائه میدهد. این الگوریتم از یک تابع امن رمزگذاری شده استفاده میکند، تا خروجیها از طریق ورودیها قابل پیشبینی نباشند و به طور کامل اجرا شوند تا این خروجی را تولید کنند. این تابع بر روی یک هسته اجرا میشود؛ خروجی قبلی به عنوان ورودی فعلی استفاده میشود و به صورت دورهای، خروجی فعلی و تعداد دفعاتی که این خروجی صدا زده شده را ثبت میکند. سپس این خروجی میتواند توسط کامپیوترهای خارجی (اکسترنال)، به صورت موازی دوباره محاسبه و تایید شود. این کار به صورت بررسی هر بخش (که به طور دنبالهدار به یکدیگر متصل هستند) در یک هسته جداگانه انجام میشود.
Proof of History چگونه کار میکند و چه نقشی در اجماع شبکه سولانا دارد؟
چه میشد اگر به جای اعتماد به تایماستمپ، میتوانستیم اثبات کنیم که یک پیام (تراکنش) قبل یا بعد از یک رویداد رخ داده است؟ زمانی که شما به یک روزنامه نگاه کنید که تصویر سیوسه پل اصفهان بر روی صفحه اول آن قرار دارد، میتوانید اثبات کنید که این عکس قبل از انتشار در روزنامه گرفته شده است. Proof of History تقریبا شبیه به این مثال کار میکند. با این الگوریتم، میتوان یک سابقه تاریخی ایجاد کرد، که اثبات میکند یک واقعه در برهه خاصی از زمان و قبل از ثبت در بلاکچین، رخ داده است.
شیوه کار این الگوریتم را میتوان مشابه یک ساعت آبی باستانی دانست. در ساعتهای آبی، بسته به نوع طراحی آن، آب از ظرفی خارج یا به آن وارد میشود، با توجه به نرخ ورود/خروج آب، نشانهایی بر روی ظرف برای ثبت گذر زمان تعبیه شده است. به خاطر نوع طراحی این ساعتها، میتوان مطمئن بود که نشانهای قدیمیتر (سطوح پایینتر در حالت ورود آب) حتما زودتر از نشانهای بالایی پر شدهاند. گواه اثبات تاریخ نیز با چنین اصلی کار میکند.

این توالی هشها، همچنین میتواند برای ثبت بخشهایی از دیتاهایی که قبل از تولید شدن یک شاخص هش خاص ایجاد شدهاند، به کار رود. با استفاده از تابع ترکیب (Combine) سولانا، میتوان این بخشهای دیتا را با هش فعلی و در شاخص فعلی ترکیب کرد. این داده میتواند یک هش منحصر به فرد دلخواه، از دادههای رویداد فعلی باشد. هش تولید شده بعدی، تایماستمپ دیتای فعلی را نشان میدهد؛ زیرا تنها زمانی میتواند تولید شود که بخشی از دیتای مشخص در شبکه درج شده باشد.
اجرای Proof of History تاریخچهای از سوابق را ایجاد میکند، که اثبات میکند یک واقعه در زمان مشخصی انجام شده است. در حالی که بلاکچینهای دیگر نیازمند ولیدیتورهایی هستند که باید برای اثبات زمان صرف شده با یکدیگر به توافق برسند، هر ولیدیتور سولانا زمان یا کلاک خود را با استفاده از رمزگذاری «گذر زمان» توسط یک الگوریتم ساده SHA-256 محاسبه میکند و به هش کردن مداوم توابع تاخیر قابل تایید یا VDF میپردازد.
در الگوریتم SHA-256، چرخهها تا حد ممکن سریع هستند؛ به طوری که هر خروجی، ورودی بعدی را میسازد. این چرخه نمونهبرداری میشود و تعداد تکرارها و وضعیت، ثبت میشوند. این نمونهبرداریهای ثبت شده، نشاندهنده گذر زمان به صورت رمزنگاری شده به عنوان یک ساختار داده قابل تایید هستند. به علاوه، این چرخه میتواند برای ثبت وقایع نیز استفاده شود.
در این سیستم، تضمین میشود که هر پیامی (تراکنش) که مرجع هر یک از این نمونههاست، پس از نمونهبرداری ساخته شود. این مسیجها میتوانند در داخل یک چرخه قرار گیرند و با یکدیگر و با یک وضعیت هش شوند؛ این کار باعث تضمین ساخته شدن یک پیام، قبل از ثبت کردن پیام بعدی میشود.
این ساختار داده، هم زمان و هم ترتیب وقایع را تضمین میکند. با استفاده از Proof of History، شما میتوانید یک رکورد تاریخی ایجاد کنید که اثبات میکند یک واقعه در یک زمان خاص انجام شده است. الگوریتم PoH یک تابع تاخیر قابل تایید است، که نیازمند یک سری گامهای متوالی برای ارزیابی است، که خروجی منحصر به فردی تولید میکند و به صورت عمومی قابل تایید است.
بلاکچینهای دیگر نیاز به ولیدیتورها (Validator) برای به اجماع رسیدن برای موضوع زمان دارند؛ اما در شبکه سولانا، تمام ولیدیتورها کلاک یا زمان خود را دارند و با حل کردن VDFهای مبتنی بر الگوریتم SHA-256، آن را ثبت میکنند و به خاطر این که هر نود ولیدیتور زمان خود را حفظ میکند، انتخاب پیش از موعد سازنده بلاک بعدی، برای یک دوره کامل برنامهریزی شده است. این دوره هزاران بلاک را در بر میگیرد و هر ولیدیتور به علت اجرای VDF پاداش میگیرد.

این الگوریتم از یک هش متوالیِ مقاوم در برابر پیشتصویر (Pre-Image) استفاده میکند. این بدین معنی است که تابع هش به کار رفته باید به نحوی باشد که در صورت مهیا بودن بخشی از خروجی (برد تابع)، رسیدن به ورودی از لحاظ محاسباتی تقریبا ناممکن باشد. این مفهوم نسبت نزدیکی با یک طرفه بودن توابع دارد.

دادهها میتوانند با افزودن هش دادهها به حالت (State) ایجاد شده قبلی، در یک توالی قرار گیرند. این حالت به همراه دیتای ورودی و شماره (Count) در شبکه منتشر میشوند. ضمیمه شدن دیتای ورودی، باعث میشود که تمام خروجیهایی که در آینده وجود خواهند داشت، به طور غیر قابل پیشبینی تغییر کنند؛ البته هنوز امکان موازیسازی وجود دارد و تا زمانی که تابع هش Pre-Image و مقاوم در برابر برخورد یا تکرار است، ایجاد یک ورودی که بتواند یک هش مشخص یا از پیش تعیین شده را در آینده تولید کند و یا با هشهای یکسان بتواند تاریخچه دیگری (غیر از تاریخچه فعلی) بسازد، غیرممکن خواهد بود.
سولانا میتواند زمان سپری شده بین دو عملیات و دیتاهایی که قبل از این دو عملیات ساخته شدهاند را اثبات کند؛ درست مانند مثالی که درباره تصویر سیوسهپل اصفهان در روزنامه زدیم. میدانیم که این تصویر قبل از این که در روزنامه قرار گیرد، گرفته شده است.

ورودیهای Proof of History می توانند ارجاعاتی به خودِ اثبات تاریخچه داشته باشند. این ارجاعات میتوانند به عنوان بخشی از یک پیام امضا شده کاربران درج شوند؛ بنابراین بدون کلید خصوصی کاربران قابل تغییر نیست. اما از آنجایی که پیام دوباره به جریان اصلی گواه اثبات تاریخچه درج میگردد، میتوانیم اثبات کنیم که این پیام قبل از ثبت در بلاک چین، اجرا شده است.
تاییدیه
از آنجایی که توالی ثبت شده، تنها میتواند از طریق یک هسته CPU تولید شود، خروجی نیز میتواند به صورت موازی تایید شود.

هر قطعه تراکنش ثبت شده را میتوان از ابتدا تا انتها، در هستههای جداگانه در ۱ (ثانیه) تقسیم بر (تعداد هسته) ضربدر زمان تولید به تأیید برساند. بنابراین یک پردازنده گرافیکی مدرن با ۴۰۰۰ هسته، میتواند ۱ ثانیه را در ۰.۲۵ میلی ثانیه تأیید کند.
در سیستم گواه اثبات تاریخچه سولانا، تراکنشها به صورت پشت سر هم و بدون نیاز به تایید مداوم تمام نودها اجرا میشوند. به همین دلیل است که سرعت این شبکه بسیار بالاست. این موضوع همچنین بدین معناست، که سولانا تنها میتواند یک شارد (Shard) باشد؛ اتریوم ۲ و دیگر بلاکچینهای جدید، از شاردینگ برای مقیاسپذیری استفاده میکنند. شاردینگ بلاک چین را به چند قسمت تقسیم میکند که تمام این قسمتها به شبکه اصلی متصل هستند. اما سولانا تنها از یک شارد یا زنجیره، در یک حالت استفاده میکند.
Sharding باعث افزایش مقیاسپذیری و توان عملیاتی شبکهها میشود. مثلا اتریوم ۲ برای دستیابی به پردازش چند هزار تراکنش در ثانیه، از ۶۴ شارد استفاده میکند و تراکنشها را به صورت موازی تایید میکند. هر شارد تنها میتواند بخشی از کل زنجیره را پردازش کند.
شبکه سولانا تنها از یک شارد استفاده میکند و به جای انتظار برای دیگر ولیدیتورها، اعتبارسنجهای سولانا میتوانند از اطلاعات رمزگذاری شده داخل دفتر کل، برای تشخیص معتبر یا نامعتبر بودن تراکنشها استفاده کنند. از آنجایی که PoH همه چیز را قابل پیشبینی میکند، هیچ تاخیری به دلیل انتظار برای دیگر ولیدیتورها به وجود نمیآید.
اعتبارسنجها میتوانند به نوبت در یک “چرخش رهبر (Leader Rotation)” از قبل برنامهریزی شده عمل کنند. تنها لیدر یا رهبر میتواند یک ورودی دفتر کل را در زمان مشخص شده ایجاد کند، که این موضوع بر مبنای سفارش تولید شده به صورت الگوریتمی و تصادفی و با توجه به کوین سپردهگذاری کرده ولیدیتورها انجام میشود. برای مثال، اگر یک نود ۱۰ درصد از کل مبلغ استیک کرده را تامین کرده باشد، میتواند ۱۰ درصد از زمان مشخص شده را به عنوان رهبر انتخاب شود.
در یک بلاک چین معمولی، رسیدن به اجماع در طول زمان استخراج یک بلاک خاص، به اندازه اجماع بر سر وجود تراکنشها در آن بلوک الزامی است. تعیین زمان بسیار مهم است؛ زیرا به شبکه میگوید که تراکنشها در یک دنباله و ترتیب خاص اجرا شدهاند.
PoH چالش زمان را حل میکند و بنابراین، وزن پردازش بلاک چین را کاهش میدهد و باعث سبکتر و سریعتر شدن آن میشود. شبکه سولانا الگوریتم گواه اثبات تاریخ را با یک پروتکل امنیتی به نام «عیبتابی خطای بیزانس تاور (Tower Byzantine Fault Tolerance)» ترکیب میکند، که به مشارکت کنندگان اجازه میدهد تا توکنهای خود را سپردهگذاری (Stake) کنند تا بتوانند به معتبر بودن هش یک PoH رای دهند. این پروتکل نودهای بدکاری را که به نفع فورکی رای دادهاند که با سوابق اثبات تاریخچه همخوانی ندارد، جریمه میکند.
Solana در کنار گواه اثبات تاریخچه، از گواه اثبات سهام (PoS) به منظور تعیین ولیدیتورها یا اعتبارسنجهای معتبر برای شبکه استفاده میکند. از آنجایی که وابستگی به ساعت کامپیوترهای محلی (Local) یا اتمام زمان بین وضعیت تراکنشها در خارج از تابع تاخیر قابل تایید وجود ندارد، VDF اطمینان حاصل میکند که هر تولیدکننده بلاک میتواند مدت زمان انتظار خود را اثبات کند.
در مجموع، شبکه سولانا از الگوریتم PoS استفاده میکند تا بتواند توالی فعلیای که توسط تولیدکننده Proof of History ایجاد شده را به سرعت تایید کند، به تولیدکننده بعدی PoH رای دهد و آن را انتخاب کند و ولیدیتورهای بدکار را مجازات کند. این الگوریتم وابسته به پیامهایی است که در نهایت، به تمام نودهای مشارکتکننده در یک فاصله زمانی مشخص میرسد.
Tower BFT یا نسخه بهینه شده عیبتابی خطای بیزانس برای PoH
چیزی که باید به آن توجه کنید این است که گواه اثبات تاریخچه تنها برای حل مساله دسترسی به زمانی یکپارچه و قابل تایید در شبکه سولانا به کار میرود و نودهای این شبکه طبق الگوریتم Tower BFT که نوعی از الگوریتم عیبتابی خطای بیزانس عملی (PBFT) است، به اجماع بر سر صحت تراکنشها میرسند. سولانا با اتخاذ این الگوریتم، نشان داده است که سرزندگی (liveness) شبکه را به ثبات (consistency) آن ترجیح میدهد – سرزندگی مجموع ویژگی هایی در شبکههای همزمان و سیستمهای توزیع شده است که به سیستم اجازه میدهد تا به پیش رود و متوقف نشود هر چند در مقاطعی پردازندههای مختلف شبکه مجبور باشند تا به شکل نوبتی (و نه همزمان) بخشی از پروسه پردازش را انجام دهند – استفاده از ساعتی هماهنگ و جهانی در شبکه سولانا بدین معنی است که اگر شما نسخهای از دفتر کل شبکه سولانا را پیدا کنید، میتوانید حالت (state) تمامی نودهای شبکه را محاسبه کنید. برای مثال اگر نودی در x تعداد هش آخر ثبت شده رای نداده باشد، آن را میتوان معیوب دانست. همچنین میتوان دفتر کل پیدا شده را معتبر (valid) دانست اگر طی x هش آخر، اکثریت مطلق شبکه، رایهای تاییدیه خود را ثبت کرده باشند.
- تمامی نودهایی که این ساختار داده را بررسی میکنند دقیقا نتیجه مشابهی را محاسبه خواهند کرد و نیازی به هیچ ارتباط همتا به همتایی نخواهند داشت.
- هش PoH به شکلی یکتا فورک دفتر کل را شناسایی خواهد کرد.
- همچنین یک پیغام شامل رای تاییدیه تنها در صورتی معتبر است که هش PoH ای که رایگیری بر روی آن انجام شده است در نسخه ما از دفتر کل موجود باشد.
حال به مقوله رایگیری در PBFT میرسیم. از آن جا که دفتر کل (لجر – ledger) به لطف گواه اثبات تاریخچه، به شکل ساعتی قابل اطمینان عمل میکند، میتوان تایماوتهای PBFT را در خود دفتر کل گنجاند و لحاظ کرد.
- رایگیری با تایم اوت N هشی آغاز میشود: به واسطه جرایم در نظر گرفته شده (slashing) برای اعتبارسنجها (Validator)، اطمینان حاصل میشود که به محض رای دادن به یک هش PoH مشخص، آن اعتبارسنج برای مدت حداقل N هش، به هش PoH دیگری که فرزند (در امتداد شاخه/فورک تایید شده توسط اعتبارسنج) نباشد، رای نخواهد داد.
- مدت تایم اوت برای تمام رایهای پیشین دو برابر میشود. برای آن که از نظر عملی این کار سادهتر باشد، رایگیری منحصر به تعداد مشخصی از هشها میشود که به آن slot گفته میشود. تعداد هشها به نحوی تنظیم شده است که این مقاطع (slots) در حدود ۴۰۰ میلیثانیه باشد. هر ۴۰۰ میلی ثانیه، شبکه فرصت این را دارد تا به حالت پیشین (rollback) بازگردد اما با گذشت هر مقطع و رایگیری بعدی، زمانی که باید شبکه متوقف شود تا بتواند رای را بازگرداند دو برابر میشود. فرض کنید که هر اعتبارسنج در طی ۱۲ ثانیه قبلی ۳۲ بار رای داده است. برای بازگشت شبکه به نقطهای که رای ۱۲ ثانیه پیش داده شد، به دو به توان ۳۲ ثانیه تایم اوت یا توقف شبکه نیاز است که تقریبا برابر ۵۴ سال است. بنابراین میتوان گفت که هیچگاه این رای بازنخواهد گشت. در حالی آخرین رای تنها به ۸۰۰ میلیثانیه توقف شبکه برای بازگشت نیاز دارد.
چه اتفاقی در هنگام باطل شدن تایم اوتها رخ میدهد؟ هر رایی که مدت تایم اوت آن از حد مشخص شده بیشتر شده است، پاک میشود. تایماوتها تنها در صورتی برای رای پیشین دو برابر میشود که تایم اوت فرزند برابر با آن شود.
این رویکرد به شبکه اجازه میدهد تا بیوقفه به استریم کردن بلوکها ادامه دهد تا این که اکثریت مطلق شبکه دفتر کل مشابهی را مشاهده کنند. بدین شکل فورکهای کوچک به وجود آمده به سرعت از بین میروند و کنار گذاشته میشوند. هنگامی که که اعتبارسنجها به چند فورک برمیخورند، اعتبارسنجهای صادق تایم اوتهای هر فورک را با توجه به وزن استیک (وزن رایها با توجه به مقدار استیک شده) محاسبه میکنند و سنگینتر فورک را انتخاب میکنند. این رویکرد در راستای منفعت مالی آنها نیز است. چرا که پاداشهای اعتبارسنجها تنها برای رایهایی که به دو به توان ۳۲ تایم اوت رسند، در نظر گرفته میشود.
توربین؛ پروتکل انتشار بلوک سولانا
یکی از مشکلات اساسی شبکههای بلاکچین، انتشار حجم عظیمی از اطلاعات به تعداد زیادی از نودهاست. راهحل سولانا برای چنین مشکلی توربین (Turbine) نام دارد. توربین که الهام گرفته از تورنت است، برای انتقال اطلاعات از طریق پروتکل UDP و به شکل جریانی پیوسته (stream) بهینه شده است. همچنین هر بسته اطلاعاتی مسیری تصادفی را در شبکه طی میکند. رهبر بلوک، اطلاعات را به تکههای ۶۴ کیلوبایتی میشکند؛ برای بلوکی به حجم ۱۲۸ مگابایت، این برابر با ۲۰۰۰ بسته خواهد بود. او هر بسته را به اعتبارسنج مجزایی انتقال میدهد.

اعتبارسنجها به سطوح مختلف همسایگی تقسیم شدهاند (این تقسیم بندی برای اساس وزن استیک آنهاست). در سطح صفر، اولین گروه از اعتبارسنجها قرار دارند. در هر سطح تعدادی همسایگی وجود دارد و در هر همسایگی تعدادی اعتبارسنج همتا وجود دارد. هر همسایگی مسئول انتقال بخشی از دادههای خود به سطوح همسایگی زیرین خود است.

اگر هر همسایگی از ۲۰۰ نود تشکیل شده باشد، در یک شبکه سه سطحی که با یک رهبر در بالا آغاز میشود، میتوان به ۴۰ هزار اعتبارسنج طی دو هاپ (hop) یا تقریبا ۲۰۰ میلیثانیه (با فرض آن که هر لینک شبکه به طور متوسط ۱۰۰ میلی ثانیه است) رسید.
بزرگترین معضل سر راه این معماری، بحث امنیت است. نودهای خرابکار میتوانند از بازانتشار اطلاعات خودداری کنند یا اطلاعات نادرست منتشر کنند. برای مقابله با چنین تهدیدی، سولانا از Erasure Code رید-سالومون (Reed-Solomon) استفاده میکند. این شیوه به هر نود این اجازه را میدهد تا بتواند کل بلوک را بدون دریافت تمامی بستهها بازسازی کند.

اگر رهبر بلوک یک سوم بستهها را به شکل کدهای erasure نماید، آن گاه شبکه میتواند با از دست دادن یک سوم پاکتها بدون مشکل به بازسازی بلوک بپردازد. رهبر میتواند این عدد را به شکل دینامیک و با توجه به وضعیت شبکه تعیین نماید. همه اعتبارسنجها یکسان نیستند؛ آن اعتبارسنجهایی که مقدار بیشتری سپردهگذاری کردهاند، اهمیت بیشتری دارند، بنابراین الگوریتم به نحوی طراحی شده است که این نودها در سطح نزدیکتری به رهبر بلوک قرار گیرند. با وجود بکارگیری erasure codeها، نودهای خرابکار میتوانند با گنجاندن خود به شکل خاص در ساختار شبکه، خطایی بیش از مجموع سپرده خود به شبکه وارد نمایند، خصوصا اگر با حمله محرومسازی از سرویس (DoS) همراه شود. شبکه سولانا با استفاده از الگوریتمی خاص، مسیر هر بسته را با توجه به امضای دیجیتال آن، به شکل تصادفی انتخاب می کند و مسیر از پیش مشخص نیست. بنابراین چنین حملهای در سطح یک همسایگی نیازمند کنترل خرابکاران بر تقریبا کل شبکه است.
با تنها یک سطح همسایگی و به کمک تکنیکهای ذکر شده، شبکه میتواند بین ۲۰۰ تا ۱۰۰۰ نود داشته باشد. با کارتهای شبکهای با نرخ انتقال یک گیگابیت بر ثانیه (Gbps) و وجود پهنای باند مناسب، یک اعتبارسنج میتواند تا هزار بسته ۶۴ کیلوبایتی را در یک ثانبه منتقل کند.
گلف استریم؛ راهکار سولانا برای حذف ممپول
وجود ممپول مانعی بر سر راه نرخ تراکنشهای بالاست؛ نودها در شبکههایی همچون بیت کوین و اتریوم از پروتکل گاسیپ (Gossip Protocol) برای همگامسازی و انتقال درخواستهای تراکنش و ایجاد ممپولهای محلی استفاده میکنند. اگر نرخ ورود تراکنشها بیش از حد باشد، پروتکل گاسیپ توان بروزرسانی تراکنشها در سطح شبکه را ندارد و نودهایی که فاصله زیادی در شبکه از یکدیگر دارند، تراکنشها را با تاخیر فراوان دریافت میکنند. راهکار سولانا برای این مشکل، پروتکلی به نام گلف استریم (Gulf Stream) است. از آن جا که برنامه انتخاب رهبر تا چند بلوک بعدی برای شبکه سولانا از پیش مشخص است، اعتبارسنجها و کلاینتها تراکنشها را از پیش به رهبر بعدی میفرستند.
این عمل سبب کاهش زمان تایید، چرخش رهبر سریعتر و کاهش فشار بر روی حافظه اعتبارسنجها به دلیل انباشت تراکنشهای تاییدنشده میشود. کلاینتها (برای مثال کیفهای پول) تراکنشها را با توجه به هش بلوک مشخصی امضا می کنند. این چنین، اعتبارسنجها متوجه زمان شده و با توجه به برنامه چرخش رهبر، میتوانند آن را برای رهبر بعدی بفرستند. همچنین با توجه به منقضی شدن هش بلوک در مدتی مشخص (در قسمت قبلی دیدیم که برای مثال این عدد ۳۲ است)، کلاینتها میتوانند مطمئن باشند که یا تراکنش آنها به درستی اجرا می شود و یا با گذشت زمان مشخص منقضی شده و بر روی شبکه قرار نخواهد گرفت.
کلود بریک؛ معماری مقیاسپذیر افقی سولانا
در هنگام بهبود مقیاسپذیری یک شبکه بلاکچین بدون استفاده از شاردینگ، تنها مانع محدودیت محاسبات نیست. حافظهای که برای نگهداری حسابها (تمامی آدرسها اعم از شخص و قراردادهای هوشمند) و اطلاعات مربوط به آنها استفاده میشود، تبدیل به مانعی جدی بر سر تحقق این امر خواهد بود؛ نه تنها به واسطه حجم زیاد اطلاعات، بلکه پای محدودیت سرعت دسترسی سختافزارها هم در میان است. برای مثال، دیتابیس LevelDB که در سطح بسیاری از شبکهها برای مدیریت این اطلاعات استفاده میشود، بنا بر آزمایشها نمیتواند بیش از ۵۰۰۰ تراکنش در ثانیه را پشتیبانی کند. یک راه سادهآنگارانه، انباشت حالت (state) کلی شبکه در حافظه رم است. اما این امر از لحاظ اقتصادی بهصرفه نیست. راه دیگر استفاده از حافظه SSD است که هر چند تا ۳۰ برابر اقتصادیتر است، اما تا مرتبه یک هزارم کندتر است. همچنین تنها در یک تراکنش ساده انتقال، نیاز به خواندن دو حساب و نوشتن بر روی یک حساب است. کلیدهای عمومی حسابها توابع رمزنگاریشدهای هستند که کاملا تصادفی هستند و نمیتوان حسابهای مربوط را در خانههای نزدیک به یکدیگر قرار داد.
کلود بریک (Cloudbreak)، طراحی منحصر به فرد سولانا برای حل این مشکل است. این طراحی به نحوی انجام شده است تا نرمافزار مانعی بر سر استفاده کامل از ظرفیت سختافزار نباشد. در سولانا از فایلهای حافظه نگاشت (memory-mapped) استفاده میشود. در این شیوه بایتهای فایل بر روی آدرس مجازی یک پردازنده نگاشته شدهاند. هسته پردازنده ممکن است بخشی از حافظه را بر روی رم کش کند اما در این روش مقدار حافظه فیزیکی محدود به مقدار حجم ابزار ذخیرهسازی است و نه مقدار حافظه رم. دیگر نکته لحاظ شده در این طراحی، استفاده از عملیات پشت سر هم و گام به گام به جای عملیات تصادفی است. پردازندههای مرکزی (CPU) برای پیش تخصیص حافظهای که به شکل گام به گام مورد دسترسی قرار می گیرد عالی است.
اشاره به جزییات فنی این طراحی خارج از حوزه این مقاله است. بنا بر اطلاعات منتشر شده از سوی سولانا، با استفاده از این طراحی و تنها با استفاده از یک حافظه SSD، میتوان به اعدادی نزدیک به یک میلیون عملیات خواندن و نوشتن در شبکهای با ده میلیون حساب رسید.

آرشیوکنندهها
برای مدیریت خجم عظیم دادههای شبکه، سولانا از روشی الهام گرفته از گواه بازسازی (Proof of Replication – PoRep) که برای اولین بار توسط شبکه فیل کوین ارائه شد، استفاده میکند. در هنگام کار با ظرفیت کامل، شبکه سولانا هر ثانیه یک گیگابایت داده تولید میکند. این رقم برابر با ۴ پتابایت در سال خواهد بود. اگر از هر نود شبکه بخواهیم تا این اطلاعات را ذخیره نماید، عضویت در شبکه را منحصر به موجودیتهای متمرکزی کردهایم که توانایی ایجاد چنینی زیرساخت سختافزاری را دارند. اینجا وای گروهی دیگر در شبکه به میان میآید: آرشیوکنندهها. این گروه در فرایند اجماع به شکل مستقیم نقش ندارند و تنها بخشی از دفتر کل توزیع شده شبکه را میزبانی میکنند. نسخه سولانا از PoRep اجازه تایید سریع اطلاعات را میدهد علاوه بر آن توزیع اطلاعات در شبکه چیزی مشابه شبکه بیت تورنت است.
آرشیوکنندهها به شبکه اطلاع میدهند که مقدار مشخصی فضای خالی برای ذخیرهسازی دارند. شبکه، دفتر کل را به بخشهای کوچکتر، با توجه به نرخ بازسازی و تحمل خطا (با توجه به کدهای رید-سالومون که به آن اشاره شد)، تقسیم میکند. همچنین تعداد آرشیوکنندهها و حجم قابل ارائه آنها نقشی حیاتی در این امر بازی می کند. پس از آن که آرشیوکننده بخش مربوط به خود را از اعتبارسنجها دریافت کرد، در تناوبهای مختلف از سوی شبکه به چالش کشیده میشود تا به وسیله ارائه گواه بازسازی، ثابت کند که دادهها را در اختیار دارد. سه درصد از نرخ تورم سالیانه شبکه، به پاس زحمات آرشیوکنندهها به آنها به شکل پاداش پرداخت میشود. جزییات فنی این عمل شامل استفاده از روش VDF، رمزنگاری CBC و استفاده از هستههای GPU برای تایید و اعتبارسنجی سریعتر دادههاست.
جمعبندی
گواه اثبات تاریخچه چیست؟ به طور خلاصه، میتوان گفت که الگوریتم PoH به نودها اجازه میدهد که تاریخچه دیتاهایی را ذخیره کنند، که به صورت یک الگوریتم «اثبات» عمل میکنند. مکانیزم گواه اثبات تاریخچه (که باعث ایجاد بلاکها با سرعت زیاد میشود)، قبل از شبکه سولانا در صنعت بلاک چین دیده نشده است. به کمک نشانگذاری بلوکها به وسیله گواه اثبات تاریخچه، دفتر کل شبکه سولانا توسط تمامی نودها قابل اعتماد بوده و در حکم ساعتی جهانی واحد و قابل اعتماد در شبکه ناهمگام (asynchronous) این بلاکچین عمل میکند. دیگر نوآوریهای این شبکه همچون تکهتکه کردن هشها و استفاده از هستههای پردازنده برای اعتبارسنجی سریعتر آنها، طراحی نوین حافظه برای مقیاسپذیری افقی شبکه، حل مشکل ممپول و توزیع دفتر کل حجیم این شبکه، سبب شده است که این شبکه به رقیبی قابل اعتنا برای شبکه اتریوم بدل شود.
دیدگاههای خود را در خصوص این الگوریتم اجماع و دیگر نوآوریهای شبکه سولانا با ما و دیگر خوانندگان میهن بلاکچین به اشتراک بگذارید.