TON: شبکه باز تلگرام. بخش 2: بلاک چین، به اشتراک گذاری

TON: شبکه باز تلگرام. بخش 2: بلاک چین، به اشتراک گذاری

این متن ادامه مجموعه مقالاتی است که در آن به بررسی ساختار شبکه (احتمالاً) توزیع شده تلگرام شبکه باز (TON) می پردازم که برای انتشار در سال جاری آماده می شود. که در قسمت قبلی من ابتدایی ترین سطح آن را توضیح دادم - نحوه تعامل گره ها با یکدیگر.

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

امروز ما به مؤلفه اصلی TON - زنجیره بلوکی نگاه خواهیم کرد.

مفاهیم اساسی

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

قرارداد هوشمند (قرارداد هوشمند). در اصل، این یک مورد خاص از یک حساب است که با کد قرارداد هوشمند و ذخیره متغیرهای آن تکمیل شده است. اگر در مورد یک "کیف پول" می توانید طبق قوانین نسبتاً ساده و از پیش تعیین شده از آن پول واریز و برداشت کنید، در مورد یک قرارداد هوشمند این قوانین در قالب کد آن (در یک تورینگ-کامل خاص) نوشته می شود. زبان برنامه نویسی).

دولت بلاک چین (وضعیت بلاک چین). مجموعه ای از وضعیت های همه حساب ها/قراردادهای هوشمند (به معنای انتزاعی، جدول هش، که در آن کلیدها شناسه حساب ها و مقادیر داده های ذخیره شده در حساب ها هستند).

پیام (پیام). در بالا از عبارت "پول اعتباری و بدهی" استفاده کردم - این یک مثال خاص از یک پیام است ("انتقال N گرم از حساب account_1 به حساب account_2"). بدیهی است که تنها گره ای که دارای کلید خصوصی حساب است می تواند چنین پیامی را ارسال کند account_1 - و می تواند این را با امضا تأیید کند. نتیجه تحویل چنین پیام هایی به حساب معمولی افزایش موجودی آن و نتیجه قرارداد هوشمند اجرای کد آن (که دریافت پیام را پردازش می کند) است. البته پیام های دیگری نیز امکان پذیر است (انتقال مبالغ پولی نه، بلکه داده های دلخواه بین قراردادهای هوشمند).

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

بلاک چین در TON: چیست و چرا؟

همانطور که در مقاله قبلی ذکر شد، بلاک چین یک ساختار داده است که عناصر (بلوک‌های) آن در یک «زنجیره» مرتب شده‌اند و هر بلوک بعدی زنجیره حاوی یک هش از بلوک قبلی است.. نظرات این سوال را مطرح کردند: چرا ما حتی به چنین ساختار داده ای نیاز داریم در حالی که قبلاً یک DHT - یک جدول هش توزیع شده داریم؟ بدیهی است که برخی از داده ها را می توان در DHT ذخیره کرد، اما این فقط برای اطلاعات نه چندان "حساس" مناسب است. موجودی ارزهای دیجیتال را نمی توان در DHT ذخیره کرد - در درجه اول به دلیل عدم بررسی تمامیت. در واقع، کل پیچیدگی ساختار بلاک چین به منظور جلوگیری از تداخل با داده های ذخیره شده در آن افزایش می یابد.

با این حال، بلاک چین در TON حتی پیچیده تر از سایر سیستم های توزیع شده به نظر می رسد - و به دو دلیل. اولین مورد، تمایل به به حداقل رساندن نیاز است چنگال ها. در ارزهای دیجیتال سنتی، همه پارامترها در مرحله اولیه تنظیم می‌شوند و هر تلاشی برای تغییر آنها در واقع منجر به پیدایش «جهان ارزهای دیجیتال جایگزین» می‌شود. دلیل دوم پشتیبانی از خرد کردن (خرد کردن, خرد کردن) بلاک چین بلاک چین ساختاری است که با گذشت زمان نمی تواند کوچکتر شود. و معمولاً هر گره مسئول عملیات شبکه مجبور می شود آن را به طور کامل ذخیره کند. در سیستم های سنتی (متمرکز)، از اشتراک گذاری برای حل چنین مشکلاتی استفاده می شود: برخی از رکوردهای پایگاه داده در یک سرور، برخی در سرور دیگر و غیره قرار دارند. در مورد ارزهای رمزنگاری شده، چنین عملکردی هنوز بسیار نادر است - به ویژه به دلیل این واقعیت که اضافه کردن اشتراک گذاری به سیستمی که در ابتدا برنامه ریزی نشده بود دشوار است.

چگونه TON برای حل هر دو مشکل فوق برنامه ریزی می کند؟

محتوای بلاک چین زنجیر کار.

TON: شبکه باز تلگرام. بخش 2: بلاک چین، به اشتراک گذاری

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

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

همانطور که در بالا ذکر شد، خود بلوک ها شامل تراکنش ها - پیام هایی هستند که به حساب های مختلف account_id تحویل داده می شوند. با این حال، علاوه بر account_id، پیام ها حاوی یک فیلد 32 بیتی نیز هستند workchain_id - به اصطلاح شناسه زنجیره کار (زنجیره کار, بلاک چین در حال کار). این به شما امکان می دهد چندین بلاک چین مستقل از یکدیگر با پیکربندی های مختلف داشته باشید. در این حالت، workchain_id = 0 یک مورد خاص در نظر گرفته می شود. زنجیر کار صفر - موجودی موجود در آن است که با ارز دیجیتال TON (گرم) مطابقت دارد. به احتمال زیاد، در ابتدا، زنجیره های کاری دیگر اصلا وجود نخواهند داشت.

زنجیر خرد شده. پارادایم شاردینگ بی نهایت.

اما رشد تعداد بلاک چین ها به همین جا متوقف نمی شود. بیایید با شاردینگ مقابله کنیم. بیایید تصور کنیم که هر حساب (account_id) به بلاک چین اختصاص داده شده است - شامل تمام پیام هایی است که به آن می رسد - و وضعیت همه این بلاک چین ها در گره های جداگانه ذخیره می شود.

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

بنابراین، شاردچین‌ها حساب‌ها را با پیشوندهای باینری شناسه‌هایشان ترکیب می‌کنند: اگر یک شاردچین پیشوند 0110 داشته باشد، آنگاه شامل تراکنش‌های تمام account_id‌هایی می‌شود که با این اعداد شروع می‌شوند. این پیشوند_شارد می تواند از 0 تا 60 بیت طول داشته باشد - و نکته اصلی این است که می تواند به صورت پویا تغییر کند.

TON: شبکه باز تلگرام. بخش 2: بلاک چین، به اشتراک گذاری

به محض اینکه یکی از زنجیره های خرد شروع به دریافت تراکنش های بیش از حد می کند، گره هایی که روی آن کار می کنند، طبق قوانین از پیش تعیین شده، آن را به دو فرزند تقسیم می کنند - پیشوندهای آنها یک بیت طولانی تر خواهد بود (و برای یکی از آنها این بیت خواهد بود. برابر با 0 و برای دیگری - 1). مثلا، پیشوند_شارد = 0110b به تقسیم خواهد شد 01100b و 01101b. به نوبه خود، اگر دو زنجیر خرد شده "همسایه" به اندازه کافی (برای مدتی) احساس راحتی کنند، دوباره با هم ادغام می شوند.

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

به طور جداگانه، من می خواهم تأکید کنم که زنجیره های کار فقط به صورت مجازی وجود دارند - در واقع، workchain_id بخشی از شناسه یک زنجیره خرد شده خاص است. در اصطلاح رسمی، هر زنجیره خرد شده با یک جفت اعداد تعریف می شود (workchain_id, پیشوند_شارد).

تصحیح خطا. بلاک چین های عمودی

به طور سنتی، هر تراکنش در یک بلاک چین به عنوان «سنگ تنظیم شده» در نظر گرفته می شود. با این حال، در مورد TON، امکان "بازنویسی تاریخ" وجود دارد - در صورتی که کسی (به اصطلاح. گره ماهیگیر) ثابت می کند که یکی از بلوک ها اشتباه امضا شده است. در این مورد، یک بلوک تصحیح ویژه به شاردچین مربوطه اضافه می‌شود که حاوی هش خود بلوک در حال اصلاح (و نه آخرین بلوک در زنجیره خرد) است. با در نظر گرفتن زنجیره خرد به عنوان زنجیره ای از بلوک ها که به صورت افقی قرار گرفته اند، می توان گفت که بلوک اصلاحی نه از سمت راست، بلکه از بالا به بلوک اشتباه متصل شده است - بنابراین در نظر گرفته می شود که بخشی از یک "بلاک چین عمودی" کوچک می شود. . بنابراین، می توان گفت که شاردچین هستند بلاک چین های دو بعدی.

TON: شبکه باز تلگرام. بخش 2: بلاک چین، به اشتراک گذاری

اگر پس از یک بلوک اشتباه، تغییرات ایجاد شده توسط آن توسط بلوک های بعدی ارجاع داده شد (یعنی تراکنش های جدید بر اساس موارد نامعتبر انجام شده است)، موارد اصلاحی نیز به این بلوک ها "در بالا" اضافه می شود. اگر بلوک ها بر اطلاعات "تأثیر" تأثیری نداشته باشند، این "امواج اصلاحی" برای آنها اعمال نمی شود. به عنوان مثال، در تصویر بالا، تراکنش بلوک اول، افزایش مانده حساب C، نادرست تشخیص داده شد - بنابراین، تراکنش کاهش مانده این حساب در بلوک سوم نیز باید لغو شود و یک بلوک اصلاحی باید در بالای خود بلوک متعهد شود.

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

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

یک بلاک چین برای حکومت بر همه آنها

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

  • در مورد تعداد و تنظیمات زنجیره های کاری؛
  • در مورد تعداد زنجیره های خرد شده و پیشوندهای آنها؛
  • در مورد کدام گره ها در حال حاضر مسئول کدام شاردچین هستند.
  • هش های آخرین بلوک های اضافه شده به همه شاردچین ها.

همانطور که ممکن است حدس بزنید، همه این موارد در ذخیره سازی بلاک چین دیگری ثبت می شوند - زنجیره اصلی (زنجیره اصلی, استاد بلاک چین). به دلیل وجود هش از بلوک های همه شاردچین ها در بلوک های آن، سیستم را به شدت متصل می کند. این به این معنی است که از جمله موارد دیگر، تولید یک بلوک جدید در masterchain بلافاصله پس از تولید بلوک ها در Shardchain رخ می دهد - انتظار می رود که بلوک ها در Shardchain تقریباً به طور همزمان تقریباً هر 5 ثانیه ظاهر شوند و بلوک بعدی در masterchain - یک ثانیه بعد از آن.

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

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

منبع: www.habr.com

اضافه کردن نظر