TON: Telegram ашық желісі. 2-бөлім: блокчейндер, бөлшектеу

TON: Telegram ашық желісі. 2-бөлім: блокчейндер, бөлшектеу

Бұл мәтін осы жылы шығаруға дайындалып жатқан Telegram Open Network (TON) таратылған желісінің құрылымын қарастыратын мақалалар сериясының жалғасы болып табылады. IN алдыңғы бөлім Мен оның ең негізгі деңгейін сипаттадым - түйіндердің бір-бірімен әрекеттесуі.

Қалай болғанда да, менің бұл желінің дамуына ешқандай қатысым жоқ екенін және барлық материал ашық (тексерілмеген) дереккөзден алынғанын еске сала кетейін - құжат (ілеспе де бар брошюра, негізгі ойларды қысқаша сипаттайтын), өткен жылдың соңында пайда болды. Бұл құжаттағы ақпараттың көлемі, менің ойымша, бұл туралы ресми растау болмаса да, оның шынайылығын көрсетеді.

Бүгін біз TON негізгі құрамдас бөлігі - блокчейнді қарастырамыз.

Негізгі ұғымдар

шот (шот). 256 биттік санмен анықталған деректер жинағы account_id (көбінесе бұл тіркелгі иесінің ашық кілті). Негізгі жағдайда (төменде қараңыз нөлдік жұмыс тізбегі), бұл деректер пайдаланушының балансына қатысты. «Басып алу» ерекше account_id кез келген адам жасай алады, бірақ оның мәнін тек белгілі бір ережелерге сәйкес өзгертуге болады.

Ақылды келісім (ақылды келісімшарт). Негізінде бұл смарт келісімшарт кодымен және оның айнымалы мәндерін сақтаумен толықтырылған шоттың ерекше жағдайы. Егер «әмиян» жағдайында сіз одан ақшаны салыстырмалы түрде қарапайым және алдын ала белгіленген ережелер бойынша салуға және алуға болады, онда смарт-келісімшарт жағдайында бұл ережелер оның коды түрінде жазылады (белгілі бір Тьюринг-комплексте). бағдарламалау тілі).

Блокчейн күйі (блокчейннің күйі). Барлық тіркелгілердің/ақылды келісім-шарттардың күйлерінің жиынтығы (абстрактілі мағынада хэш-кесте, мұнда кілттер шот идентификаторлары, ал мәндер шоттарда сақталған деректер болып табылады).

хабар (хабар). Жоғарыда мен «кредиттік және дебеттік ақша» тіркесін қолдандым - бұл хабарламаның нақты мысалы («аудару» N грамм шотынан тіркелгі_1 есепке алу тіркелгі_2«). Мұндай хабарламаны тек тіркелгінің жеке кілтіне иелік ететін түйін ғана жібере алатыны анық тіркелгі_1 - және мұны қол қою арқылы растай алады. Мұндай хабарламаларды кәдімгі есептік жазбаға жеткізу нәтижесі оның балансының ұлғаюы болып табылады, ал смарт-келісімшарттың нәтижесі оның кодын орындау болып табылады (ол хабарламаны қабылдауды өңдейді). Әрине, басқа хабарламалар да мүмкін (ақшалай сомаларды емес, ақылды келісімшарттар арасында ерікті деректерді аудару).

мәміле (мәміле). Хабарламаның жеткізілу фактісі транзакция деп аталады. Транзакциялар блокчейннің күйін өзгертеді. Бұл блокчейндегі блоктарды құрайтын транзакциялар (хабарламаларды жеткізу жазбалары). Осыған байланысты блокчейннің күйін қосымша дерекқор ретінде қарастыруға болады - барлық блоктар дерекқордың ағымдағы күйін алу үшін дәйекті түрде қолданылуы керек «айырымдар» болып табылады. Бұл «айырмаларды» орау ерекшеліктері (және олардан толық күйді қалпына келтіру) келесі мақалада талқыланады.

TON-дағы блокчейн: бұл не және неге?

Алдыңғы мақалада айтылғандай, блокчейн – бұл деректер құрылымы, оның элементтері (блоктары) «тізбекке» реттелген және тізбектің әрбір келесі блогында алдыңғысының хэші бар.. Түсініктемелерде сұрақ қойылды: бізде DHT - таратылған хэш кестесі болған кезде мұндай деректер құрылымы не үшін қажет? Әлбетте, кейбір деректерді DHT-де сақтауға болады, бірақ бұл тым «сезімтал» емес ақпарат үшін ғана жарамды. Cryptocurrency қалдықтарын DHT-де сақтау мүмкін емес - бірінші кезекте тексерулердің болмауына байланысты тұтастық. Іс жүзінде блокчейн құрылымының барлық күрделілігі онда сақталған деректерге кедергі келтірмеу үшін өседі.

Дегенмен, TON-дағы блокчейн басқа таратылған жүйелердің көпшілігіне қарағанда күрделірек көрінеді - және екі себеп бойынша. Біріншісі - қажеттілікті барынша азайтуға ұмтылу шанышқылар. Дәстүрлі криптовалюталарда барлық параметрлер бастапқы кезеңде орнатылады және оларды өзгерту әрекеті іс жүзінде «балама криптовалюта әлемінің» пайда болуына әкеледі. Екінші себеп - ұсақтауды қолдау (бөлшектеу, бөлшектеу) блокчейн. Блокчейн – уақыт өте келе кішірейе алмайтын құрылым; және әдетте желінің жұмысына жауапты әрбір түйін оны толығымен сақтауға мәжбүр болады. Дәстүрлі (орталықтандырылған) жүйелерде мұндай мәселелерді шешу үшін sharding қолданылады: деректер қорындағы жазбалардың бір бөлігі бір серверде, кейбіреулері басқа серверде және т.б. Криптовалюта жағдайында мұндай функционалдылық әлі де өте сирек кездеседі - атап айтқанда, бастапқыда жоспарланбаған жүйеге sharding қосу қиын болғандықтан.

TON жоғарыда аталған екі мәселені де қалай шешуді жоспарлап отыр?

Блокчейн мазмұны. Жұмыс тізбектері.

TON: Telegram ашық желісі. 2-бөлім: блокчейндер, бөлшектеу

Алдымен блокчейнде нені сақтау жоспарланғаны туралы сөйлесейік. Есептік жазбалардың күйлері («негізгі жағдайда әмияндар») және смарт келісім-шарттар сонда сақталады (қарапайымдылық үшін бұл шоттармен бірдей деп есептейміз). Негізінде бұл кәдімгі хэш кестесі болады - ондағы кілттер идентификаторлар болады account_id, және мәндер мыналарды қамтитын деректер құрылымдары болып табылады:

  • теңгерім;
  • смарт келісімшарт коды (тек смарт келісімшарттар үшін);
  • смарт келісімшарт деректерін сақтау (тек смарт келісімшарттар үшін);
  • статистика;
  • (міндетті емес) тіркелгіден аударымдар үшін ашық кілт, әдепкі бойынша account_id;
  • шығыс хабарламалар кезегі (мұнда олар алушыға қайта жіберу үшін енгізіледі);
  • осы тіркелгіге жеткізілген соңғы хабарлардың тізімі.

Жоғарыда айтылғандай, блоктардың өзі транзакциялардан тұрады - әртүрлі account_id тіркелгілеріне жеткізілетін хабарламалар. Дегенмен, account_id идентификаторынан басқа хабарларда 32 биттік өріс бар workchain_id — идентификатор деп аталады жұмыс тізбегі (жұмыс тізбегі, жұмыс істейтін блокчейн). Бұл әртүрлі конфигурациялары бар бір-бірінен тәуелсіз бірнеше блокчейнге ие болуға мүмкіндік береді. Бұл жағдайда workchain_id = 0 ерекше жағдай болып саналады, нөлдік жұмыс тізбегі — бұл ондағы қалдықтар TON (Грам) криптовалютасына сәйкес келеді. Ең алдымен, басқа жұмыс тізбектері мүлдем болмайды.

Shardchains. Шексіз бөлу парадигмасы.

Бірақ блокчейндер санының өсуі мұнымен тоқтап қалмайды. Бөлшектеумен айналысайық. Әрбір тіркелгіге (account_id) жеке блокчейн бөлінгенін елестетіп көрейік - ол оған келетін барлық хабарламаларды қамтиды - және барлық блокчейндердің күйлері бөлек түйіндерде сақталады.

Әрине, бұл өте ысырап: олардың әрқайсысында, ең алдымен, shardchains (shardchain, сынық блокчейн) транзакциялар өте сирек келеді және көптеген қуатты түйіндер қажет болады (алға қарап, біз ұялы телефондардағы клиенттер туралы ғана емес, маңызды серверлер туралы айтып отырғанымызды ескеремін).

Сондықтан shardchain идентификаторларының екілік префикстері бойынша тіркелгілерді біріктіреді: егер shardchain префиксі 0110 болса, онда ол осы сандардан басталатын барлық account_ids транзакцияларын қамтиды. Бұл shard_prefix ұзындығы 0-ден 60 битке дейін болуы мүмкін - ең бастысы ол динамикалық түрде өзгере алады.

TON: Telegram ашық желісі. 2-бөлім: блокчейндер, бөлшектеу

Шардчейндердің бірі тым көп транзакцияларды ала бастағанда, онда жұмыс істейтін түйіндер алдын ала белгіленген ережелерге сәйкес оны екі балаға «бөледі» - олардың префикстері бір бит ұзағырақ болады (және олардың біреуі үшін бұл бит болады). 0-ге тең, ал екіншісі үшін - 1). Мысалы, shard_prefix = 0110б бөлінеді 01100b және 01101б. Өз кезегінде, егер екі «көрші» shardchains өзін жеткілікті түрде еркін сезіне бастаса (біраз уақыт), олар қайтадан біріктіріледі.

Осылайша, бөлу «төменнен жоғары» орындалады - біз әрбір тіркелгіде өз сынығы бар деп есептейміз, бірақ әзірше олар префикстер арқылы «бір-біріне жабыстырылған». Бұл дегеніміз осы Шексіз бөлу парадигмасы (шексіз бөлу парадигмасы).

Сонымен қатар, мен жұмыс тізбектері тек виртуалды түрде бар екенін атап өткім келеді - шын мәнінде, workchain_id ол нақты shardchain идентификаторының бөлігі болып табылады. Ресми түрде әрбір shardchain жұп сандармен анықталады (workchain_id, shard_prefix).

Қателерді түзеу. Тік блокчейндер.

Дәстүрлі түрде блокчейндегі кез келген транзакция «таста орнатылған» болып саналады. Дегенмен, TON жағдайында «тарихты қайта жазуға» болады - егер біреу (деп аталатын. балықшы түйіні) блоктардың біріне дұрыс қол қойылмағанын дәлелдейді. Бұл жағдайда, түзетілетін блоктың хэшін қамтитын тиісті shardchain-ге арнайы түзету блогы қосылады (және shardchain ішіндегі соңғы блок емес). Шардчейнді көлденең орналасқан блоктар тізбегі ретінде қарастыра отырып, түзету блогы қате блокқа оңға емес, жоғарыдан бекітілген деп айта аламыз, сондықтан ол шағын «тік блокчейннің» бөлігі болады деп саналады. . Осылайша, біз shardchains деп айта аламыз екі өлшемді блокчейндер.

TON: Telegram ашық желісі. 2-бөлім: блокчейндер, бөлшектеу

Егер қате блоктан кейін ол енгізген өзгерістерге келесі блоктар сілтеме жасаса (яғни, жарамсыздардың негізінде жаңа транзакциялар жасалса), түзеткіштер де осы блоктарға «жоғарғы жағында» қосылады. Егер блоктар «зардап шеккен» ақпаратқа әсер етпесе, бұл «түзету толқындары» оларға қолданылмайды. Мысалы, жоғарыдағы суретте С шотының сальдосын көбейтетін бірінші блоктың операциясы дұрыс емес деп танылды - сондықтан үшінші блоктағы осы шоттың қалдығын азайтатын транзакция да жойылуы керек, ал түзету блогы блоктың өзінде жасалуы керек.

Айта кету керек, түзету блоктары түпнұсқалардың «жоғарыда» орналасқанымен бейнеленгенімен, олар сәйкес блокчейннің соңына қосылады (олар хронологиялық түрде болуы керек). Екі өлшемді орын тек блокчейннің қай нүктесіне «байланыстырылатынын» көрсетеді (оларда орналасқан бастапқы блоктың хэші арқылы).

Сіз «өткенді өзгерту» туралы шешімнің қаншалықты жақсы екендігі туралы бөлек философия жасай аласыз. Егер біз shardchain-де қате блоктың пайда болу мүмкіндігін мойындасақ, қате түзеткіш блоктың пайда болу мүмкіндігін болдырмайтын сияқтымыз. Бұл жерде, менің білуімше, айырмашылық жаңа блоктар бойынша консенсусқа жетуі керек түйіндердің санында - әрбір shardchain бойынша жұмыс істейтін адамдардың салыстырмалы түрде аз саны болады ».жұмыс тобы» түйіндері (құрамын жиі өзгертеді) және түзету блоктарын енгізу үшін барлығының келісімі қажет болады. валидатор түйіндері. Мен келесі мақалада валидаторлар, жұмыс топтары және басқа түйін рөлдері туралы көбірек айтатын боламын.

Олардың барлығын басқару үшін бір блокчейн

Жоғарыда аталған блокчейндердің әртүрлі түрлері туралы көптеген ақпарат бар, олардың өзі де бір жерде сақталуы керек. Атап айтқанда, біз келесі ақпарат туралы айтып отырмыз:

  • жұмыс тізбектерінің саны мен конфигурациялары туралы;
  • shardchains және олардың префикстерінің саны туралы;
  • қазіргі уақытта қандай түйіндер қандай shardchains үшін жауап беретіні туралы;
  • барлық shardchains қосылған соңғы блоктардың хэштері.

Сіз болжағандай, мұның бәрі басқа блокчейн қоймасында жазылған - мастерчейн (мастерчейн, мастер блокчейн). Оның блоктарында барлық shardchains блоктарынан хэштердің болуына байланысты ол жүйені жоғары дәрежеде байланыстырады. Бұл, басқалармен қатар, мастерчейндегі жаңа блоктың генерациясы shardchains блоктарын генерациялаудан кейін бірден пайда болады дегенді білдіреді - shardchains блоктары шамамен әр 5 секунд сайын дерлік бір уақытта пайда болады деп күтілуде, ал келесі блок келесі блокта пайда болады. masterchain - содан кейін секунд.

Бірақ осы титаникалық жұмыстың орындалуына кім жауапты болады - хабарламалар жіберу, смарт келісім-шарттарды орындау, shardchains мен мастерчейнде блоктарды қалыптастыру, тіпті блоктарды қателерді тексеру үшін? Мұның бәрін Telegram клиенті орнатылған миллиондаған пайдаланушылардың телефондары жасырын түрде жасай ма? Немесе, бәлкім, Дуров командасы орталықсыздандыру идеяларынан бас тартады және олардың серверлері мұны ескі әдіспен жасайды ма?

Шын мәнінде, бір де, екіншісі де дұрыс емес. Бірақ бұл мақаланың шеттері тез бітеді, сондықтан біз келесі бөлімде түйіндердің әртүрлі рөлдері (сіз олардың кейбіреулері туралы айтылғанын байқаған боларсыз), сондай-ақ олардың жұмысының механикасы туралы айтатын боламыз.

Ақпарат көзі: www.habr.com

пікір қалдыру