TON: Telegram Open Network. 2-qism: Blokcheynlar, parchalanish

TON: Telegram Open Network. 2-qism: Blokcheynlar, parchalanish

Ushbu matn bir qator maqolalarning davomi bo'lib, unda men bu yil chiqarishga tayyorlanayotgan (ehtimol) Telegram Open Network (TON) taqsimlangan tarmog'ining tuzilishini ko'rib chiqaman. IN oldingi qism Men uning eng asosiy darajasini tasvirlab berdim - tugunlarning bir-biri bilan o'zaro ta'siri.

Har holda, shuni eslatib o'tamanki, mening ushbu tarmoqni rivojlantirishga hech qanday aloqam yo'q va barcha materiallar ochiq (tasdiqlanmagan bo'lsa ham) manbadan olingan - hujjat (shuningdek, hamroh bor broshyura, o'tgan yilning oxirida paydo bo'lgan asosiy fikrlarni qisqacha bayon qilgan. Ushbu hujjatdagi ma'lumotlarning miqdori, mening fikrimcha, uning haqiqiyligini ko'rsatadi, garchi buning rasmiy tasdig'i yo'q.

Bugun biz TON ning asosiy komponenti - blokcheynni ko'rib chiqamiz.

Asosiy tushunchalar

Account (hisob). 256 bitli raqam bilan aniqlangan ma'lumotlar to'plami account_id (ko'pincha bu hisob egasining ochiq kalitidir). Asosiy holatda (pastga qarang nol ish zanjiri), bu ma'lumotlar foydalanuvchi balansiga tegishli. "Occupy"ga xos account_id har kim mumkin, lekin uning qiymati faqat ma'lum qoidalarga muvofiq o'zgartirilishi mumkin.

Aqlli shartnoma (aqlli shartnoma). Aslida, bu aqlli shartnoma kodi va uning o'zgaruvchilarini saqlash bilan to'ldirilgan hisobning alohida holati. Agar "hamyon" bo'lsa, siz nisbatan oddiy va oldindan belgilangan qoidalarga muvofiq pul qo'yishingiz va undan pul olishingiz mumkin bo'lsa, aqlli shartnomada bu qoidalar uning kodi ko'rinishida yoziladi (ma'lum bir Turing-komplektda). dasturlash tili).

Blokcheyn holati (blokcheyn holati). Barcha hisoblar/aqlli shartnomalar holatlari to'plami (mavhum ma'noda xesh-jadval, bu erda kalitlar hisob identifikatorlari va qiymatlar hisoblarda saqlanadigan ma'lumotlar).

Xabar (Xabar). Yuqorida men "kredit va debet pullari" iborasini ishlatganman - bu xabarning o'ziga xos namunasidir ("o'tkazish" N gramm hisobidan hisob_1 hisobga olish hisob_2"). Shubhasiz, faqat hisobning shaxsiy kalitiga ega bo'lgan tugun bunday xabarni yuborishi mumkin hisob_1 - va buni imzo bilan tasdiqlashi mumkin. Bunday xabarlarni oddiy hisob qaydnomasiga etkazish natijasi uning balansining ko'payishi bo'lib, aqlli shartnomaning natijasi esa uning kodini bajarishdir (bu xabarni qabul qilishni qayta ishlaydi). Albatta, boshqa xabarlar ham mumkin (pul summalarini emas, balki aqlli shartnomalar o'rtasida o'zboshimchalik bilan ma'lumotlarni o'tkazish).

Tranzaksiya (operatsiya). Xabar yetkazilganligi tranzaksiya deb ataladi. Tranzaksiyalar blokcheyn holatini o'zgartiradi. Bu blokcheyndagi bloklarni tashkil etuvchi tranzaktsiyalar (xabarlarni etkazib berish yozuvlari). Shu munosabat bilan siz blokcheyn holatini qo'shimcha ma'lumotlar bazasi sifatida ko'rishingiz mumkin - barcha bloklar ma'lumotlar bazasining joriy holatini olish uchun ketma-ket qo'llanilishi kerak bo'lgan "farqlar". Ushbu "farqlarni" qadoqlashning o'ziga xos xususiyatlari (va ulardan to'liq holatni tiklash) keyingi maqolada muhokama qilinadi.

TONda blokcheyn: bu nima va nima uchun?

Oldingi maqolada aytib o'tilganidek, blokcheyn - bu ma'lumotlar tuzilmasi bo'lib, uning elementlari (bloklari) "zanjir" ga tartiblangan va zanjirning har bir keyingi bloki avvalgisining xeshini o'z ichiga oladi.. Sharhlarda savol berildi: nega bizda DHT - taqsimlangan xesh jadvali mavjud bo'lsa, bunday ma'lumotlar tuzilmasi umuman kerak? Shubhasiz, ba'zi ma'lumotlar DHT-da saqlanishi mumkin, ammo bu faqat juda "sezgir" bo'lmagan ma'lumotlar uchun mos keladi. Kriptovalyuta qoldiqlarini DHT-da saqlash mumkin emas - bu birinchi navbatda tekshirilmaganligi sababli. yaxlitlik. Aslida, blokcheyn strukturasining butun murakkabligi unda saqlangan ma'lumotlarga xalaqit bermaslik uchun o'sib boradi.

Biroq, TON-dagi blokcheyn boshqa taqsimlangan tizimlarga qaraganda ancha murakkab ko'rinadi - va ikkita sababga ko'ra. Birinchisi, ehtiyojni minimallashtirish istagi vilkalar. An'anaviy kriptovalyutalarda barcha parametrlar dastlabki bosqichda o'rnatiladi va ularni o'zgartirishga bo'lgan har qanday urinish aslida "muqobil kriptovalyuta olami" ning paydo bo'lishiga olib keladi. Ikkinchi sabab - maydalashni qo'llab-quvvatlash (parchalanish, parchalanish) blokcheyn. Blokcheyn - vaqt o'tishi bilan kichrayib bo'lmaydigan tuzilma; va odatda tarmoqning ishlashi uchun mas'ul bo'lgan har bir tugun uni to'liq saqlashga majbur bo'ladi. An'anaviy (markazlashtirilgan) tizimlarda bunday muammolarni hal qilish uchun sharding qo'llaniladi: ma'lumotlar bazasidagi yozuvlarning bir qismi bir serverda, ba'zilari boshqasida va hokazo. Kriptovalyutalarga kelsak, bunday funksionallik hali ham juda kam uchraydi - xususan, dastlab rejalashtirilmagan tizimga sharding qo'shish qiyinligi sababli.

TON yuqoridagi ikkala muammoni qanday hal qilishni rejalashtirmoqda?

Blokcheyn tarkibi. Ish zanjirlari.

TON: Telegram Open Network. 2-qism: Blokcheynlar, parchalanish

Avvalo, keling, blockchain-da nima saqlanishi rejalashtirilganligi haqida gapiraylik. Hisoblar holati (asosiy holatda hamyonlar) va aqlli shartnomalar u erda saqlanadi (oddiylik uchun biz buni hisoblar bilan bir xil deb hisoblaymiz). Aslida, bu oddiy xesh jadvali bo'ladi - undagi kalitlar identifikatorlar bo'ladi account_id, va qiymatlar ma'lumotlar tuzilmalari bo'lib, quyidagilarni o'z ichiga oladi:

  • muvozanat;
  • aqlli shartnoma kodi (faqat aqlli shartnomalar uchun);
  • aqlli shartnoma ma'lumotlarini saqlash (faqat aqlli shartnomalar uchun);
  • statistika;
  • (ixtiyoriy) hisobdan o'tkazish uchun ochiq kalit, sukut bo'yicha account_id;
  • chiquvchi xabarlar navbati (bu erda ular qabul qiluvchiga yo'naltirish uchun kiritiladi);
  • ushbu hisobga yuborilgan so'nggi xabarlar ro'yxati.

Yuqorida aytib o'tilganidek, bloklarning o'zi tranzaktsiyalardan iborat - turli account_id hisoblariga yuborilgan xabarlar. Biroq, account_id ga qo'shimcha ravishda xabarlar 32 bitli maydonni ham o'z ichiga oladi workchain_id β€” identifikator deb ataladi ish zanjiri (ish zanjiri, ishlaydigan blokcheyn). Bu sizga turli xil konfiguratsiyalar bilan bir-biridan mustaqil bo'lgan bir nechta blokcheynlarga ega bo'lish imkonini beradi. Bunday holda, workchain_id = 0 alohida holat hisoblanadi, nol ish zanjiri β€” aynan undagi balanslar TON (Gram) kriptovalyutasiga mos keladi. Ehtimol, birinchi navbatda, boshqa ish zanjirlari umuman bo'lmaydi.

Shardchains. Cheksiz Sharding Paradigmasi.

Ammo blokcheynlar sonining o'sishi shu bilan to'xtamaydi. Keling, sharding bilan shug'ullanamiz. Tasavvur qilaylik, har bir hisob (account_id) o'z blokcheyniga ajratilgan - u unga kelgan barcha xabarlarni o'z ichiga oladi - va barcha bunday blokcheynlarning holati alohida tugunlarda saqlanadi.

Albatta, bu juda isrofgarchilikdir: ehtimol, ularning har birida shardchains (shardchain, shard blokcheyn) tranzaktsiyalar juda kamdan-kam hollarda keladi va juda ko'p kuchli tugunlar kerak bo'ladi (oldinga qarab, biz nafaqat mobil telefonlardagi mijozlar haqida - balki jiddiy serverlar haqida gapirayotganimizni ta'kidlayman).

Shuning uchun, shardchainlar hisoblarni o'z identifikatorlarining ikkilik prefikslari bo'yicha birlashtiradi: agar shardchain 0110 prefiksiga ega bo'lsa, u ushbu raqamlar bilan boshlanadigan barcha account_ids tranzaksiyalarini o'z ichiga oladi. Bu shard_prefiks uzunligi 0 dan 60 bitgacha bo'lishi mumkin - va asosiysi, u dinamik ravishda o'zgarishi mumkin.

TON: Telegram Open Network. 2-qism: Blokcheynlar, parchalanish

Shardchainlardan biri juda ko'p tranzaktsiyalarni qabul qila boshlagach, unda ishlaydigan tugunlar, oldindan belgilangan qoidalarga ko'ra, uni ikkita bolaga "bo'ladi" - ularning prefikslari bir oz ko'proq bo'ladi (va ulardan biri uchun bu bit bo'ladi). 0 ga teng, ikkinchisi uchun - 1). Masalan, shard_prefiks = 0110b ga bo'linadi 01100b va 01101b. O'z navbatida, agar ikkita "qo'shni" shardchain o'zini etarlicha qulay his qila boshlasa (bir muncha vaqt), ular yana birlashadilar.

Shunday qilib, sharding "pastdan yuqoriga" amalga oshiriladi - biz har bir hisobning o'z parchasi bor deb taxmin qilamiz, ammo hozircha ular prefikslar bilan "bir-biriga yopishtirilgan". Bu nimani anglatadi Cheksiz Sharding Paradigmasi (cheksiz sharding paradigmasi).

Alohida ta'kidlashni istardimki, ish zanjirlari faqat virtual tarzda mavjud - aslida, workchain_id u ma'lum bir shardchain identifikatorining bir qismidir. Rasmiy ma'noda, har bir shardchain bir juft raqamlar bilan belgilanadi (workchain_id, shard_prefiks).

Xatoni tuzatish. Vertikal blokcheynlar.

An'anaga ko'ra, blokcheyndagi har qanday tranzaksiya "toshga o'rnatilgan" deb hisoblanadi. Biroq, TON holatida, agar kimdir (deb nomlangan) bo'lsa, "tarixni qayta yozish" mumkin. baliqchi tugun) bloklardan biri noto'g'ri imzolanganligini isbotlaydi. Bunday holda, mos keladigan shardchainga maxsus tuzatish bloki qo'shiladi, unda tuzatilayotgan blokning o'zi xesh mavjud (va shardchaindagi oxirgi blok emas). Shardchainni gorizontal ravishda yotqizilgan bloklar zanjiri sifatida o'ylab, shuni aytishimiz mumkinki, tuzatuvchi blok noto'g'ri blokga o'ngga emas, balki yuqoridan biriktirilgan - shuning uchun u kichik "vertikal blokcheyn" ning bir qismiga aylanadi. . Shunday qilib, biz shardchains deb aytishimiz mumkin ikki o'lchovli blokcheynlar.

TON: Telegram Open Network. 2-qism: Blokcheynlar, parchalanish

Agar xato blokdan keyin u tomonidan kiritilgan o'zgarishlar keyingi bloklar tomonidan havola qilingan bo'lsa (ya'ni, noto'g'ri bo'lganlar asosida yangi tranzaktsiyalar amalga oshirilgan bo'lsa), tuzatuvchi bloklar ham "yuqorida" qo'shiladi. Agar bloklar "ta'sirlangan" ma'lumotlarga ta'sir qilmasa, bu "tuzatuvchi to'lqinlar" ularga taalluqli emas. Masalan, yuqoridagi rasmda C hisobining qoldig'ini oshiruvchi birinchi blokning operatsiyasi noto'g'ri deb topildi - shuning uchun uchinchi blokdagi ushbu hisobning qoldig'ini kamaytiradigan operatsiya ham bekor qilinishi kerak va tuzatuvchi blok. blokning o'zida amalga oshirilishi kerak.

Shuni ta'kidlash kerakki, tuzatuvchi bloklar asl bloklarning "yuqorida" joylashganidek tasvirlangan bo'lsa-da, aslida ular tegishli blokcheynning oxiriga qo'shiladi (ular xronologik bo'lishi kerak). Ikki o'lchovli joylashuv faqat blokcheynning qaysi nuqtasiga "bog'langanligini" ko'rsatadi (ular ichida joylashgan asl blokning xeshi orqali).

Siz "o'tmishni o'zgartirish" qarorining qanchalik yaxshi ekanligi haqida alohida falsafa qilishingiz mumkin. Ko'rinishidan, agar biz shardchain-da noto'g'ri blok paydo bo'lishi mumkinligini tan olsak, unda xato tuzatuvchi blok paydo bo'lishidan qochib qutula olmaymiz. Bu erda, men aytishim mumkinki, farq yangi bloklar bo'yicha konsensusga erishishi kerak bo'lgan tugunlar sonida - har bir shardchainda ishlaydiganlar soni nisbatan kam bo'ladi.ishchi guruhiΒ» tugunlari (tarkibini tez-tez o'zgartiradigan) va tuzatuvchi bloklarni joriy qilish uchun hammaning roziligi talab qilinadi. validator tugunlari. Keyingi maqolada validatorlar, ishchi guruhlar va boshqa tugun rollari haqida ko'proq gaplashaman.

Ularning barchasini boshqarish uchun bitta blokcheyn

Yuqorida sanab o'tilgan blokcheynlarning har xil turlari haqida juda ko'p ma'lumotlar mavjud, ularning o'zi ham bir joyda saqlanishi kerak. Xususan, biz quyidagi ma'lumotlar haqida gapiramiz:

  • ish zanjirlarining soni va konfiguratsiyasi haqida;
  • shardchainlar soni va ularning prefikslari haqida;
  • qaysi tugunlar hozirda qaysi shardchainlar uchun javobgar ekanligi haqida;
  • barcha shardchainlarga qo'shilgan oxirgi bloklarning xeshlari.

Siz taxmin qilganingizdek, bularning barchasi boshqa blokcheyn xotirasida qayd etilgan - masterchain (bosh zanjir, master blockchain). Uning bloklarida barcha shardchainlar bloklaridan xeshlar mavjudligi sababli, bu tizimni yuqori darajada bog'langan qiladi. Bu shuni anglatadiki, masterchain-da yangi blokning generatsiyasi shardchain-da bloklar yaratilgandan so'ng darhol sodir bo'ladi - shardchain-dagi bloklar deyarli bir vaqtning o'zida taxminan har 5 soniyada paydo bo'lishi kutilmoqda, keyingi blok esa masterchain - bundan keyin bir soniya.

Ammo bu titanik ishlarni amalga oshirish uchun kim javobgar bo'ladi - xabarlarni yuborish, aqlli shartnomalarni bajarish, shardchain va masterchain-da bloklarni shakllantirish va hatto bloklarni xatolar uchun tekshirish? Bularning barchasi Telegram mijozi o'rnatilgan millionlab foydalanuvchilarning telefonlari tomonidan yashirincha amalga oshiriladimi? Yoki, ehtimol, Durov jamoasi markazsizlashtirish g'oyalarini tark etadi va ularning serverlari buni eski uslubda qilishadi?

Aslida, na bir, na boshqa javob to'g'ri. Ammo ushbu maqolaning chegaralari tezda tugaydi, shuning uchun biz keyingi qismda tugunlarning turli xil rollari (siz ulardan ba'zilari haqida eslatib o'tgan bo'lishingiz mumkin), shuningdek, ularning ish mexanikasi haqida gaplashamiz.

Manba: www.habr.com

a Izoh qo'shish