شاردینگ چیست

شاردینگ یک تکنیک کامپیوتری است که برای افزایش مقیاس پذیری و تمرکززدایی، پایگاه داده یا شبکه را به صورت افقی خرد و تقسیم‌بندی می‌کند. Sharding یک استراتژی جالب است که به غلبه فناوری بلاک چین بر مشکل اصلی خود یعنی مقیاس پذیری ضعیف، کمک شایانی کرده است.

شاردینگ برای دستیابی به مقیاس پذیری بیشتر در سیستم‌های توزیع‌شده و غیر متمرکز ساخته شد. اما امروزه، کاربردهای شاردینگ در تکنولوژی بلاک چین می‌تواند مشکلات شبکه‌هایی مانند بیت کوین و اتریوم را بهبود دهد.

پارتیشن بندی افقی پایگاه داده چیست؟

شاردینگ نوعی تقسیم‌بندی یا خرد کردن شبکه است که با عنوان “Horizontal Partitioning” یا «پارتیشن‌بندی افقی» نیز شناخته می‌شود. این فرآیند شامل خرد کردن یک دیتابیس بسیار بزرگ به پایگاه‌های داده کوچکتر و بخش‌هایی با قابلیت مدیریت بیشتر تحت عنوان «شارد (Shard)» است که ایده بهبود عملکرد و کاهش مدت زمان پاسخ‌دهی به درخواست‌ها را در خود دارد.

شارد‌ها، که اینجا ردیف‌ (Row) نامیده می‌شوند، هر کدام ممکن است مسئول کار خاصی با ویژگی خاصی شوند. به عنوان مثال، یک شارد ممکن است مسئول ذخیره وضعیت و تاریخچه تراکنش برای آدرس خاصی باشد. همچنین، ممکن است بتوان شارد‌ها را بر اساس نوع دارایی دیجیتال ذخیره شده در آن‌ها تقسیم کرد و تراکنش‌های مربوط به آن دارایی دیجیتال ممکن است از طریق همکاری ترکیبی از شارد‌ها امکان پذیر شود.

به عنوان مثال، یک معامله املاک و مستغلات‌ را در نظر بگیرید که در آن چندین شارد دخیل باشند. بخش‌های مختلف مسئول وجوه مختلف این معامله هستند؛ از نام مشتری گرفته تا کلیدهای دیجیتالی که به صورت یک قفل هوشمند برنامه‌ریزی شده‌اند و پس از تکمیل پرداخت معامله، در اختیار خریدار قرار می‌گیرند.

شاردینگ دیتابیس

شاردینگ یک مفهوم جدید نیست و از حداقل دهه 90 میلادی تا کنون در مدیریت دیتابیس‌های متمرکز و سنتی حضور داشته است. این اصطلاح توسط یکی از اولین بازی‌های نقش‌آفرینی آنلاین بزرگ چند نفره به نام Ultima Online محبوب شد که در آن توسعه‌دهندگان بازیکنان را در سرورهای مختلف (یا همان «دنیا» در این بازی) تقسیم‌بندی کردند تا مشکل ترافیک حل شود. اکنون اتریوم یکی از بزرگترین پروژه‌هایی است که می‌خواهد از شاردینگ نهایت استفاده را داشته باشد.

در کسب و کارها، یکی از مثال‌های رایج از شاردینگ یک پایگاه داده بزرگ، شکستن دیتابیس مشتریان به مناطق جغرافیایی است. در این حالت، مشتریان حاضر در مناطق جغرافیایی یکسان گروه‌بندی شده و در سرورهای منحصربه‌فرد جای داده می‌شوند.

شاردینگ در بلاک چین و ارزهای دیجیتال چیست؟

فرآیند Sharding در بلاک چین دقیقا همانند پایگاه داده‌های عادی است. شبکه بلاک چین یک دیتابیس دارد که نودهای آن نماینده سرورهای داده فردی هستند. با اعمال شاردینگ روی یک بلاک چین، یعنی آن شبکه را به قسم‌های فردی یا همان شاردها شکسته‌ایم. حالا هر شارد دارای مجموعه‌ای منحصربه‌فرد از قراردادهای هوشمند و موجودی حساب‌ها است.

سپس نودها نیز به جای اعتبارسنجی تمام تراکنش‌ها در کل شبکه، به هر شارد فردی تخصیص داده شده و تنها تراکنش‌ها و عملیات آن شارد را اعتبارسنجی می‌کنند.

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

با این حال، نگرانی‌های امنیتی پیرامون به کار بستن شاردینگ در بلاک چین نیز وجود دارد؛ مثلا هک یا «تصاحب شارد‌ی (Shard Takeover)» تهاجمی است که در آن یک شارد به دیگری حمله می‌کند و منجر به از دست رفتن اطلاعات می‌شود. در ادامه به شرح سازوکار شاردینگ در بلاک چین می‌پردازیم و ضرورت و برنامه اتریوم برای به کار بستن آن را به عنوان یک نمونه بارز بررسی می‌کنیم. برای درک سازوکار Sharding ابتدا باید مفاهیمی مانند تکنولوژی دفتر کل توزیع شده (DL) و مقیاس پذیری را درک کرد.

دفتر کل توزیع شده

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

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

مقیاس پذیری در بلاک چین

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

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

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

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

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

در یک بلاک چین به اصطلاح شارد نشده، هر نود یا گره (Node) در یک شبکه باید تمام حجم تراکنش‌های درون شبکه را پردازش و مدیریت کند. نودها در یک بلاک چین مستقل بوده و مسئول نگهداری و ذخیره تمام داده‌ها در یک شبکه غیر متمرکز هستند. به عبارت دیگر، هر نود باید اطلاعات مهمی مانند موجودی حساب و تاریخچه تراکنش را در سیستم خود ذخیره کند. اکنون، اکثر شبکه‌های بلاک چین به گونه‌ای هستند که هر فول نود باید تمام عملیات، داده‌ها و تراکنش‌های شبکه را پردازش کند.

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

شاردینگ می‌‌تواند در تقسیم بار کاری نودهای یک شبکه بلاک چین عملکرد موثری داشته باشد. در این صورت هر نود نیازی به مدیریت یا پردازش تمام بار کاری بلاک چین ندارد و به نوعی، شاردینگ حجم کار کل شبکه را به پارتیشن‌ها یا شارد‌ها تقسیم می‌کند.

به اشتراک گذاری شاردها

هر شارد هنوز هم می‌تواند بین سایر شارد‌ها به اشتراک گذاشته شود و جنبه کلیدی در فناوری بلاک چین یعنی پایندی به اصول دفتر کل توزیع شده و غیر متمرکز را حفظ ‌کنند. به عبارت دیگر، نامتمرکزی و امنیت DLT هنوز برای هر کاربر قابل لمس است و آن‌ها هنوز هم اجازه ‌دارند تا تمام تراکنش‌های دفتر کل را مشاهده کنند.

شاردینگ اتریوم چیست؟

شبکه اتریوم از هزاران کامپیوتر (معروف به نود) تشکیل شده است که در حال حاضر به استناد وب‌سایت ethernodes.org، تعداد آن‌ها برابر با 5057 واحد است. هر کدام از این نودها مقدار مشخصی قدرت هش را در اختیار این شبکه قرار داده‌اند. در واقع همین قدرت هش است که به ماشین مجازی اتریوم (EVM) اجازه عملکردهایی همچون اجرای قراردادهای هوشمند و برنامه‌های غیر متمرکز (DApp) را می‌دهد.

پیش از تصمیم اتریوم برای مهاجرت به Ethereum 2.0 و افزایش مقیاس پذیری، این شبکه بر اساس اجراهای متوالی کار می‌کرد و هر کدام از این نودها مجبور به محاسبه تک تک عملیات و پردازش تمامی تراکنش‌ها بودند. بنابراین، گذر هر تراکنش از چنین فرآیند اعتبارسنجی بسیار طولانی بود. در سال 2019 و در شلوغی‌های عظیم اتریوم، این شبکه می‌توانست حدود 10 تراکنش بر ثانیه (TPS) را پردازش کند. در مقام مقایسه، مثلا شرکت ویزا به طور متوسط دارای 24،000 TPS است. از طرفی، اضافه کردن کامپیوتر بیشتر هم لزوما کارایی را افزایش نمی‌دهد، چراکه تمام این دفترکل در همه کامپیوترها نگهداری می‌شود و با این کار صرفا زنجیره اعتبارسنجی‌ها طولانی‌تر خواهد شد.

اما با قدم گذاشتن در مسیر اتریوم 2 و استفاده از شاردینگ این بلاک چین از نظر تئوری قادر به پردازش 100,000 تراکنش در ثانیه خواهد بود. ایده استفاده از Sharding، حرکت از یک مدل اجرایی خطی که تمامی نودها مجبور به محاسبه کل عملیات هستند، به یک مدل اجرای موازی است که در آن نودها برای پردازش محاسبات خاص تخصیص داده می‌شوند. این امر پردازش موازی تراکنش‌ها به صورت همزمان را امکان‌پذیر می‌سازد.

ذخیره داده‌های عظیم در اتریوم بدون استفاده از شاردینگ

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

با این حال، اتریوم برای تبدیل شدن به جایگزینی قوی برای حالت‌های متمرکز موجود، باید قادر باشد حجم عظیمی از داده‌ها را با احترام به هدف اصلی خود یعنی تمرکززدایی، ذخیره، کنترل و مدیریت کند. در حالت سنتی، در سرویس‌هایی مانند خدمات وب آمازون (AWS)، حجم عظیم داده‌های مربوط به هزاران اپلیکیشن به‌راحتی ذخیره می‌‌شوند و در حال حاضر، اتریوم از توانایی ذخیره داده‌ها به اندازه سرویس متمرکزی مانند AWS هنوز فاصله زیادی دارد. در واقع، اتریوم در طول مدتی که مورد استفاده عموم قرار گرفته، دچار نقص عملکرد پلتفرم شده و هزینه‌های شبکه آن به شدت بالا رفته است.

پشت پرده اتریوم، یک شبکه جهانی از نودهاست که توسط کاربران و گروه‌های توسعه‌دهنده اداره می‌‌شوند. هر نود کل تاریخچه و داده‌های مربوط به شبکه اتریوم را ذخیره می‌‌کند.‌ این بدان معناست که تمام داده‌ها در مورد اینکه چه شخصی و در چه تاریخی تراکنشی را ارسال کرده و چه مقدار دارایی جابه‌جا شده است، در هر نود ذخیره می‌شود. همچنین اطلاعات مربوط به قراردادهای هوشمند، کدهای نوشته شده برای مدیریت منابع مالی و غیره نیز در هر نود نگهداری می‌شوند.

همانطور که می‌‌توانید تصور کنید، این داده‌ها حجم بسیار زیادی دارند و این سوال پیش می‌آید که چرا همه نودها نیاز به ذخیره کل تاریخچه داده‌هایی به این بزرگی را دارند؟‌ البته این همان چیزی است باعث غیرمتمرکز شدن اتریوم می‌شود و طبق ادعای این پروژه، توانایی ساخت اپلیکیشن‌هایی که «هیچ‌کس» قادر به دستکاری آن‌ها نیست را فراهم می‌کند.

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

علی رغم همه این‌ها، مشکل ‌این است که‌ این نودها (که به فول نود (full nodes) نیز معروفند) معمولا به فضای ذخیره سازی بزرگی نیاز دارند که اجرا و نگهداری آن‌ها سخت و پیچیده است. شاردینگ یکی از روش‌های ممکن برای تجهیز اتریوم با قابلیتی برای ذخیره داده‌های بیشتر در عین حفظ اصول تمرکز زدایی است. در اصل قدمی است که باید توسط این پروژه برداشته شود تا اجرای موفقیت آمیز هزاران اپلیکیشن‌ غیر متمرکز یا دی اپ‌ها در پلتفرم آن بتواند محقق شود.

چرا اتریوم به شاردینگ نیاز دارد؟

خلاصه کلام این است که شاردینگ می‌‌تواند اجرای فول نودها در اتریوم را آسان‌تر کند. طبق داده‌های بلاک اکسپلورر اتر اسکن (Etherscan)، فول نودهای اتریوم در حال حاضر حداقل پنج ترابایت فضای ذخیره‌سازی نیاز دارند، که تقریبا 10 برابر فضایی است که یک رایانه معمولی می‌تواند در خود جای دهد. همچنین پیش‌بینی می‌شود که نودها با گذر زمان و پیوستن کاربران بیشتر به پلتفرم، برای ذخیره‌سازی داده‌ها با مشکل جدی روبرو شوند.

شاردینگ یک تکنیک رایج در علوم کامپیوتر برای مقیاس‌بندی است تا امکان پشتیبانی از داده‌های بیشتری را فراهم کند. اگر شاردینگ را بتوان به درستی در اتریوم پیاده‌سازی کرد (که هنوز هم نمی‌شود از این مساله مطمئن بود)، هر کاربر می‌تواند برخلاف روشی که معمولاً بلاک چین‌ها اکنون با آن کار می‌کند، تنها قسمتی از تاریخچه تغییرات پایگاه داده، و نه همه، را در سیستم خود ذخیره کند.

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

سازوکار شاردینگ در بلاک چین اتریوم

قبل از اینکه بخواهیم به نحوه عملکرد شاردینگ در بلاک چین اتریوم بپردازیم، اجازه دهید واژگان مهم در این زمینه را تعریف کنیم:

  • حالت: حالت، وضعیت یا استیت (State) در اصل کل مجموعه اطلاعاتی که یک سیستم را در هر نقطه از زمان توصیف می‌کند. در اتریوم، این مجموعه اطلاعات به عنوان یک حالت در زمانی خاص شامل موجودی‌ یا بالانس در جریان، کد قرارداد هوشمند و غیره است. هر تراکنش جدید این حالت را به یک حالت کاملاً جدید تغییر می‌دهد.
    در واقع این عملِ شاردینگِ حالت است که مقیاس پذیری را برای یک بلاک چین به ارمغان می‌آورد. نود‌های اتریوم اگر اکنون می‌توانند کل حالت کنونی را در خود ذخیره کنند‌، به خاطر این است که اتریوم در حال حاضر هر ثانیه تنها 14 تراکنش را پردازش می‌کند. هنگامی‌که این سیستم بخواهد هزاران تراکنش را در ثانیه پردازش کند، حالت اکسپلود یا مختل می‌شود، زیرا همه این تراکنش‌ها روی حالت کنونی اثر می‌گذارند.
  • تراکنش: به هر عملیاتی که توسط کاربر صادر می‌شود و حالت یک سیستم را تغییر می‌دهد گفته می‌شود.
  • درخت مرکل (Merkle Tree): ساختار داده‌ای که می‌تواند حجم زیادی از داده‌ها را از طریق هش‌های رمزنگاری ذخیره کند. درخت مرکل بررسی اینکه آیا یک قطعه داده بخشی از ساختاری بزرگ‌تر است را در مدت زمان بسیار کوتاه و با فرآیند محاسباتی آسان‌تر ممکن می‌کند.
  • رسید: اثر جانبی یک تراکنش است که در حالت سیستم ذخیره نمی‌شود، اما در درخت مرکل نگهداری می‌شود تا به راحتی در یک نود تأیید شود. به عنوان مثال، گزارش قراردادهای هوشمند در اتریوم به عنوان یک رسید (Receipt) در مرکل نگهداری می‌شود.

با دانستن این اصطلاحات، بیایید نگاهی به نحوه عملکرد اتریوم 2.0 و پیاده سازی شاردینگ در آن بیندازیم: ابتدا یک زنجیره جانبی به نام بیکن چین (Beacon Chain) به طور تصادفی ایجاد می‌شود که هش‌های بلاک‌های زنجیره اصلی را در بلاک‌های خود ذخیره می‌کند. این زنجیره جانبی یک سیستم اثبات سهام کامل است که طبق پروتکل کسپر – Casper the Friendly Finality Gadget (Casper FFG) – کار می‌کند و منبعی برای توزیع تصادفی می‌سازد و در نتیجه اجرای شاردینگ را در سیستم ممکن می‌کند. اتریوم همچنین راه حلی برای اتک شاردی، یا همان مشکل بزرگ حمله یک شارد به شارد دیگر و از دست رفتن اطلاعات ارائه می‌دهد که به طور خلاصه با انتخاب تصادفی اعتبار‌سنج‌ها در هر شارد اتفاق می‌افتد.

حمله تصرف شارد در شاردینگ بلاک چین

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

فرض کنید قراردادی را به نام قرارداد ثبت اعتبار سنج یا ولیدیتور (Validator Registration Contract) در بلاک چین اصلی مستقر کنیم. طبق این قرار داد، افراد باید 32 واحد ارز دیجیتال اتریوم  (ETH) را در ازای تبدیل شدن به اعتبارسنج در زنجیره جانبی بسوزانند. زنجیره بیکن به صورت دوره‌ای وضعیت اعتبار سنج‌های ثبت شده را بررسی می‌کند و در نتیجه آن‌هایی که ETH کافی سوزانده‌اند را در صفی برای انتخاب شدن به عنوان ولیدیتور در قرارداد قرار می‌دهد. بیکن چین به عنوان یک دستگاهِ هماهنگی در یک سیستم شاردینگ عمل می‌کند، زیرا امکان انتخاب شبه تصادفی و توزیع شده را فراهم می‌کند که در انتخاب گروه اعتبار سنج‌ها در شاردها حیاتی است.

در هر شارد، نودهایی به نام پیشنهادگر (Proposers) یا نود رابط (Collators) خواهیم داشت که وظیفه ایجاد یک کراس لینک یا لینک میانه در زنجیره بیکن را بر عهده دارند. لینک میانه ساختار خاصی است که اطلاعات مهمی‌ را در مورد شاردی خاص در بر می‌گیرد و شامل توضیحات مختصری از وضعیت و تراکنش‌های یک شارد خاص هستند. یک کراس لینک معمولا اطلاعات زیر را در بر دارد:

  • اطلاعاتی در مورد این که نود رابط (کلاتور) با چه شاردی مطابقت دارد؛
  • اطلاعات مربوط به حالت یا استیت فعلی شارد قبل از اعمال همه تراکنش‌ها؛
  • اطلاعاتی در مورد حالت شارد پس از اعمال تمام تراکنش‌ها؛
  • و امضا حداقل دو سوم کل کلاتورها که بلاک‌های تولید شده توسط شارد را تایید می‌کنند.

حال اگر تراکنشی بین شاردها اتفاق بیفتد چطور؟ به عنوان مثال، اگر من از آدرسی که در شارد 1 است به آدرسی در شارد 10 پول ارسال کنم، چطور؟ یکی از مهم‌ترین بخش‌های این سیستم، توانایی برقراری ارتباط بین شاردهاست، که اگر اینطور نباشد در واقع کل این اتفاقات بیهوده است. برای این منظور از مفهوم رسید در سیستم کمک می‌گیریم. فرض کنید علی (آدرسی در شارد اول) می‌خواهد 100 واحد اتریوم به مجتبی (آدرسی در شارد دهم) بفرستد، مطابقا اتفاقاتی به ترتیب زیر در سسیتم به جریان می‌افتند:

  1. تراکنشی به شارد اول ارسال می‌شود که موجودی علی را به اندازه 100 اتر کاهش می‌دهد.
  2. سیستم منتظر می‌ماند تا تراکنش نهایی شود.
  3. یک رسید برای تراکنش ایجاد می‌شود که در حالت ذخیره نمی‌شود بلکه در درخت مرکل قرار می‌گیرد و به راحتی قابل تأیید است.
  4. یک تراکنش به شارد دهم ارسال می‌شود که شامل رسید صادر شده است.
  5. شارد دهم بررسی می‌کند که این رسید هنوز معتبر بوده و خرج نشده باشد.
  6. شارد دهم تراکنش را پردازش می‌کند و موجودی مجتبی را به اندازه 100 ETH افزایش می‌دهد.
  7. سپس تایید می‌کند که رسید صادر شده از شارد اول خرج شده و دیگر معتبر نیست.
  8. شارد دهم یک رسید جدید ایجاد می‌کند که می‌تواند در تراکنش‌های بعدی استفاده شود.

شاردینگ اتریوم

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

تکنیک شاردینگ چه مشکلاتی را حل می‌کند؟

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

افزایش فعالیت‌های تراکنشی، منجر به ایجاد تقاضای بیشتر روی نودها برای اعتبارسنجی تراکنش‌ها می‌شود و در نتیجه، تهدید مسدودیت این بلاک چین‌ها را (همانطور که در شبکه اتریوم در هنگام محبوبیت بازی Kryptokitties شاهد بودیم و این بازی 11 درصد تراکنش‌های آن را تشکیل می‌داد) به دنبال دارد. در این حالت، سرعت تراکنش‌ها بسیار کاهش می‌یابد که شرایط ایده‌آلی برای پذیرش بلند مدت و پایدار یک بلاک چین نخواهد بود.

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

چالش‌ها و محدودیت‌های شاردینگ در بلاک چین چیست؟

در حال حاضر، چالش اصلی شاردینگ مربوط به ارتباطات و امنیت است. با شکستن یک بلاک چین به بخش‌های مجزا، هر شارد به صورت یک بلاک چین جداگانه ظاهر می‌شود. در این صورت، کاربران و اپلیکیشن‌های یک ساب‌دامین بدون پیاده‌سازی یک مکانیزم ارتباطی خاص و میان شاردی (Intershard)، قادر به برقراری ارتباط با برنامه‌ها و کاربران یک ساب‌دامین دیگر نخواهند بود. این امر لایه اضافه‌ای از پیچیدگی را برای توسعه‌دهندگان ایجاد می‌کند.

حمله یک درصدی در شاردینگ بلاک چین

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

آیا جایگزینی برای تکنیک Sharding وجود دارد؟

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

در صورت افزایش نامحدود اندازه بلوک، تنها تجهیزات کامپیوتری پر قدرت و بسیار پیشرفته و تخصصی قادر به مدیریت قدرت پردازش مورد نیاز برای تبدیل شدن به یک نود خواهند بود. بنابراین، افزایش هزینه در این نوع تجهیزات به این معناست که استخرهای نودها الزاما کوچکتر و متمرکزتر شده و خطر حمله 51 درصد را افزایش خواهند داد. افزایش سایز بلاک همچنین نیازمند هارد فورک (Hard Fork) است که ریسک جداسازی جامعه را به همراه دارد. در صورت عدم آپگرید شدن تمام نودهای شبکه در بلاک چین جدید، دو زنجیره مجزا وجود خواهد داشت که از دو کوین جدا هم استفاده خواهند کرد. به همین خاطر، افزایش اندازه بلوک صرفا یک راه‌حل کوتاه مدت است. به این نکته در شاردینگ اتریوم توجه ویژه شده است.

حمله 51 درصدی

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

کدام پروژه‌ها از شاردینگ استفاده می‌کنند؟

برخی از بلاک چین‌ها هم‌اکنون مکانیزم Sharding را به کار گرفته و در برخی دیگر این تکنیک همچنان در حال توسعه است. در ادامه به برخی پروژه‌های مبتنی بر بلاک چین که از شاردینگ استفاده می‌کنند، اشاره خواهیم کرد.

زیلیکا (ZIL)

زیلیکا (Zilliqa) اولین بلاک چین عمومی بود که شاردینگ را پیاده‌سازی کرد. زیلیکا توانست با این روش در شبکه آزمایشی خود به 2,828 تراکنش در ثانیه برسد. ویژگی‌های پروتکل Zilliqa را می‌‌توان در چند نکته خلاصه کرد:

  • تمام تراکنش‌ها در تک شاردها به صورت موازی اجرا می‌شوند.
  • تراکنش‌هایی که بر یک قرارداد هوشمند تأثیر می‌گذارد به صورت موازی اجرا نمی‌شوند.
  • هیچ تراکنشی که بر بیش از یک شارد تاثیر می‌گذارد به موازات تراکنش‌ دیگری اجرا نمی‌شوند.

اولین قانون در زیلیکا این است که تمام تراکنش‌ها در تک شاردها به صورت موازی اجرا می‌شوند؛ اما تنها زمانی اجرای موازی تراکنش‌ها راحت است که شروع تراکنش و قرارداد هوشمند در یک شارد مشابه باشد. مثلا، فلتا (Fleta) بلاک چین دیگری است که روی شاردینگ کار می‌کند؛ روش انجام پرداخت‌ها در فلتا کاملاً بر اساس‌ این‌ ایده طراحی شده که می‌توان از هر شاردی به جای دیگری استفاده کرد که در زیلیکا چنین قانونی وجود ندارد. در Fleta، شارد مورد نظر توسط فرستنده تراکنش فراخوانده و انتخاب می‌شود، در حالی که در زیلیکا شاردی که در ابتدا با تراکنش سروکار دارد توسط قرارداد دیکته می‌شود.

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

در صورت شارد نشدن حالت هم تنها وقتی سیستم درست کار می‌کند که خروجی خرج نشده تراکنش (Unspent Transaction Output) یا UTXO برای هر حساب به همه نشان داده شود. اگر حساب‌ها اطلاعات موجودی و مقدار انباشته شده را در خود ذخیره کنند، پردازش تراکنش در دو شارد مختلف با یک گیرنده مشابه، تغییرات متناقضی در حساب گیرنده اعمال می‌کنند.

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

مشکلی که در Zilliqa وجود دارد این است که با اینکه این بلاک چین به هزاران شارد تقسیم می‌شود، ولی تعداد محدودی از dAppهای برتر در تعداد محدودی از شاردهای مختص خود قرار می‌گیرند. در نتیجه قدرت پردازش شارد مربوطه و ذخیره‌سازی حالت شاردینگ مشکل و محدود می‌شوند.

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

نیر (NEAR)

بستر ارز دیجیتال نیر (Near) امکان ساخت و استقرار راحت اپلیکیشن‌های غیر متمرکز را برای توسعه‌دهندگان فراهم کرده است. این شبکه همچنین خود را «یک بلاک چین شارد شده توسعه‌دهنده پسند اثبات سهام» نامیده و اظهار داشته است که فناوری شاردینگ به نودها اجازه می‌دهد برای اجرا روی سرورهای ساده میزبان کلاود و حتی گوشی‌های موبایل در آینده، تا جای ممکن کوچک باقی بمانند.

دیگر موارد

از دیگر بلاک چین هایی که به دنبال استفاده از شاردینگ به عنوان راه‌حلی برای بهبود مقیاس پذیری هستند می‌توان کاردانو، کوارک چین (QuarkChain) و پی چین (PChain) را نام برد.

سخن پایانی ؛ آینده شاردینگ در بلاک چین چه خواهد شد؟

پس از معرفی پروژه رمز ارزی فیس بوک به نام لیبرا (Libra) که بعدا به دیم (Diem) تغییر نام یافت، توجهات به شاردینگ مخصوصا در اتریوم افزایش یافت. در آن زمان فیس بوک حتی تیم توسعه‌دهنده شرکت Chainspace را برای کار روی این حوزه به خدمت گرفت.

می‌توان گفت که هدف شاردینگ، فائق آمدن بر سه‌گانه بلاک چین (Blockchain Trilemma) است. به گفته ویتالیک بوترین، هم‌بنیان‌گذار اتریوم، در سه‌گانه بلاک چین شما قادر به حفظ دو مورد از سه مشخصه اصلی بلاک چین در یک زمان هستید. این سه مشخصه امنیت، تمرکززدایی و مقیاس پذیری هستند. دلیل این اتفاق این است که برای داشتن دو مشخصه، باید حتما یکی از آن‌ها را به خطر بیندازید.

سه گانه بلاک چین

به گفته بنیامین مینکو (Beniamin Mincu)، مدیر عامل شبکه الروند، یک پروتکل بلاک چینی متمرکز بر مقیاس پذیری و تعامل متقابل، اگر بتوان بر چالش‌های شاردینگ غلبه کرد، بدون به خطر انداختن تمرکززدایی یا امنیت می‌توان مقیاس پذیری را در بلاک چین‌ها حتی شبکه‌های بزرگ مثل اتریوم با شاردینگ قرار داد. در این حالت، فناوری بلاک چین یک قدم دیگر به پذیرش جمعی نزدیک‌تر خواهد شد. به گفته مینکو:

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

تهیه شده در بیت 24