TON: Telegram Open Network. 2-бөлүк: Блокчейндер, бөлүү

TON: Telegram Open Network. 2-бөлүк: Блокчейндер, бөлүү

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

Болбосо, мен бул тармакты өнүктүрүүгө эч кандай тиешем жок экенин жана бардык материалдар ачык (текшерилбеген болсо да) булактан алынганын эскерте кетейин - документ (коштоочу дагы бар брошюра, негизги пункттарды кыскача баяндап) еткен жылдын аягында пайда болгон. Бул документтеги маалыматтын көлөмү, менин оюмча, муну расмий ырастоо жок болсо да, анын аныктыгын көрсөтүп турат.

Бүгүн биз ТОНдун негизги компонентин - блокчейнди карап чыгабыз.

Негизги түшүнүктөр

каттоо эсеби (каттоо эсеби). 256 биттик сан менен аныкталган маалыматтар топтому account_id (көбүнчө бул эсеп ээсинин ачык ачкычы). негизги учурда (төмөндө карагыла нөл жумушчу чынжыр), бул маалымат колдонуучунун балансын билдирет. "Окупация" өзгөчө account_id ар ким болот, бирок анын маанисин белгилүү бир эрежелерге ылайык гана өзгөртүүгө болот.

Акылдуу келишим (акылдуу келишим). Негизи, бул акылдуу келишим коду жана анын өзгөрмөлөрүнүн сакталышы менен толукталган эсептин өзгөчө учуру. Эгерде "капчыкта" сиз салыштырмалуу жөнөкөй жана алдын ала аныкталган эрежелер боюнча андан акча салып жана ала алсаңыз, анда акылдуу келишимде бул эрежелер анын коду түрүндө жазылат (белгилүү бир Тюринг-толукта). программалоо тили).

Блокчейн абалы (blockchain абалы). Бардык эсептердин/акылдуу контракттардын абалынын жыйындысы (абстрактуу мааниде хэш таблицасы, мында ачкычтар эсептин идентификаторлору жана баалуулуктар эсептерде сакталган маалыматтар).

билдирүү (билдирүү). Жогоруда мен "кредиттик жана дебеттик акча" деген сөз айкашын колдондум - бул билдирүүнүн өзгөчө мисалы ("которуу" N грамм эсебинен эсеп_1 эсепке эсеп_2"). Албетте, эсептин купуя ачкычына ээ болгон түйүн гана мындай билдирүүнү жөнөтө алат эсеп_1 - жана муну кол коюу менен ырастай алат. Мындай билдирүүлөрдү үзгүлтүксүз эсепке жеткирүүнүн натыйжасы анын балансынын көбөйүшү, ал эми акылдуу келишимдин натыйжасы анын кодунун аткарылышы (билдирүүнү кабыл алууну иштетет). Албетте, башка билдирүүлөр да мүмкүн (акчалай суммаларды эмес, акылдуу келишимдердин ортосунда ыктыярдуу маалыматтарды которуу).

транзакция (бүтүм). Кабардын жеткирилиши транзакция деп аталат. Транзакциялар блокчейндин абалын өзгөртөт. Бул блокчейндеги блокторду түзгөн транзакциялар (билдирүүлөрдү жеткирүү жазуулары). Ушуга байланыштуу, сиз блокчейндин абалын кошумча маалымат базасы катары карасаңыз болот - бардык блоктор базанын учурдагы абалын алуу үчүн ырааттуу колдонулушу керек болгон "айырмачылыктар". Бул "айырмаларды" таңгактоо өзгөчөлүктөрү (жана алардан толук абалын калыбына келтирүү) кийинки макалада талкууланат.

ТОНдо блокчейн: бул эмне жана эмне үчүн?

Мурунку макалада айтылгандай, blockchain - бул маалымат структурасы, анын элементтери (блоктору) "чынжырга" иреттелген жана чынжырдын ар бир кийинки блогу мурункусунун хэштерин камтыйт. Комментарийлерде суроо берилди: бизде DHT - бөлүштүрүлгөн хэш таблицасы бар болгондо, эмне үчүн мындай маалымат структурасы керек? Албетте, кээ бир маалыматтар DHTде сакталышы мүмкүн, бирок бул өтө "сезги" эмес маалымат үчүн гана ылайыктуу. Cryptocurrency баланстарын DHTде сактоо мүмкүн эмес - биринчи кезекте текшерүүлөрдүн жоктугуна байланыштуу бүтүндүк. Чынында, блокчейн структурасынын бүт татаалдыгы андагы сакталган маалыматтарга кийлигишүүнү болтурбоо үчүн өсөт.

Бирок, ТОНдогу блокчейн башка бөлүштүрүлгөн системаларга караганда дагы татаал көрүнөт - жана эки себеп менен. Биринчиси, муктаждыкты азайтуу каалоосу айрылар. Салттуу криптовалюталарда бардык параметрлер баштапкы этапта коюлат жана аларды өзгөртүү аракети иш жүзүндө “альтернативдик криптовалюталык ааламдын” пайда болушуна алып келет. Экинчи себеп - майдалоону колдоо (бөлүү, бөлүү) blockchain. Блокчейн - бул убакыттын өтүшү менен кичирейе албаган структура; жана адатта тармактын иштеши үчүн жооптуу ар бир түйүн аны толугу менен сактоого аргасыз болот. Салттуу (борборлоштурулган) системаларда мындай көйгөйлөрдү чечүү үчүн sharding колдонулат: маалымат базасындагы жазуулардын бир бөлүгү бир серверде, кээ бирлери экинчисинде ж.б. Криптовалюталарда мындай функция дагы эле сейрек кездешет - атап айтканда, алгач пландаштырылбаган системага sharding кошуу кыйын болгондугуна байланыштуу.

ТОН жогорудагы эки маселени тең кантип чечүүнү пландаштырууда?

Блокчейн мазмуну. Workchains.

TON: Telegram Open Network. 2-бөлүк: Блокчейндер, бөлүү

Биринчиден, блокчейнде эмнени сактоо пландалып жатканы жөнүндө сүйлөшөлү. Эсептердин абалы (негизги учурда капчыктар) жана акылдуу келишимдер ошол жерде сакталат (жөнөкөйлүк үчүн, биз бул эсептерге окшош деп ойлойбуз). Негизи, бул кадимки хэш таблицасы болот - андагы ачкычтар идентификаторлор болот account_id, жана баалуулуктар төмөнкүлөрдү камтыган маалымат структуралары болуп саналат:

  • баланс;
  • акылдуу келишим коду (акылдуу келишимдер үчүн гана);
  • акылдуу келишим маалыматтарын сактоо (акылдуу келишимдер үчүн гана);
  • статистика;
  • (кошумча) эсептен которуулар үчүн ачык ачкыч, демейки боюнча account_id;
  • чыгуучу билдирүүлөрдүн кезеги (бул жерде алар алуучуга жөнөтүү үчүн киргизилет);
  • бул каттоо эсебине жеткирилген акыркы билдирүүлөрдүн тизмеси.

Жогоруда айтылгандай, блоктордун өзү транзакциялардан турат - ар кандай account_id эсептерине жеткирилген билдирүүлөр. Бирок, account_id'ден тышкары, билдирүүлөр 32 биттик талааны да камтыйт workchain_id — идентификатор деп аталган жумушчу чынжыр (жумушчу чынжыр, жумушчу блокчейн). Бул ар кандай конфигурациялар менен бири-биринен көз карандысыз бир нече блокчейндерге ээ болууга мүмкүндүк берет. Бул учурда, workchain_id = 0 өзгөчө учур катары каралат, нөл жумушчу чынжыр — бул андагы баланстар TON (Грам) криптовалютасына туура келет. Кыязы, адегенде башка иш чынжырчалары такыр жок болот.

Shardchains. Infinite Sharding парадигмасы.

Бирок блокчейндердин санынын өсүшү муну менен эле токтоп калбайт. Келгиле, бөлүү менен алектенели. Келгиле, ар бир аккаунтка (account_id) өзүнүн блокчейни бөлүнгөнүн элестетип көрөлү - анда ага келген бардык билдирүүлөр камтылган - жана бардык блокчейндердин абалы өзүнчө түйүндөрдө сакталат.

Албетте, бул абдан ысырапкорчулук: кыязы, булардын ар биринде shardchains (shardchain, сынык блокчейн) транзакциялар өтө сейрек келет жана көптөгөн күчтүү түйүндөр керек болот (алдыга карап, биз мобилдик телефондордогу кардарлар жөнүндө эле эмес, олуттуу серверлер жөнүндө айтып жатканыбызды байкадым).

Ошондуктан, shardchains эсептерди өздөрүнүн идентификаторлорунун бинардык префикстери боюнча бириктирет: эгерде shardchain 0110 префиксине ээ болсо, анда ал ушул сандар менен башталган бардык account_ids транзакцияларын камтыйт. Бул shard_prefix узундугу 0дөн 60 битке чейин болушу мүмкүн - жана эң негизгиси, ал динамикалык түрдө өзгөрө алат.

TON: Telegram Open Network. 2-бөлүк: Блокчейндер, бөлүү

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

Ошентип, бөлүү "төмөндөн өйдө" жасалат - биз ар бир аккаунттун өзүнүн сыныгы бар деп ойлойбуз, бирок азырынча алар префикстер менен "бириктирилген". Бул эмнени билдирет Infinite Sharding парадигмасы (чексиз парадигмасы).

Өзүнчө, мен иш чынжырчалары виртуалдык түрдө гана бар экенин баса белгилегим келет - чындыгында, workchain_id бул белгилүү бир shardchain идентификаторунун бир бөлүгү. Расмий түрдө, ар бир shardchain бир жуп сандар менен аныкталат (workchain_id, shard_prefix).

Катаны оңдоо. Вертикалдуу блокчейндер.

Салт боюнча, блокчейндеги ар кандай транзакция "ташка салынган" деп эсептелет. Бирок, ТОН учурда, "тарыхты кайра жазуу" мүмкүн - эгер кимдир бирөө (деп аталган. балыкчы түйүнү) блоктордун бирине туура эмес кол коюлгандыгын далилдейт. Бул учурда, тиешелүү shardchainге атайын оңдоо блогу кошулат, анда түзөтүлүп жаткан блоктун хэши камтылат (жана shardchainдеги акыркы блок эмес). Шардчейнди горизонталдуу жайгаштырылган блоктордун чынжырчасы катары ойлоп, биз корректордук блок туура эмес блокко оңго эмес, жогору жактан бекитилет деп айта алабыз - ошондуктан ал кичинекей "вертикалдуу блокчейндин" бир бөлүгү болуп калат деп эсептелет. . Ошентип, биз shardchains деп айта алабыз эки өлчөмдүү блокчейндер.

TON: Telegram Open Network. 2-бөлүк: Блокчейндер, бөлүү

Эгерде жаңылыштык блоктон кийин ал тарабынан киргизилген өзгөртүүлөр кийинки блокторго шилтеме кылынса (б.а., жаңы транзакциялар жараксыздардын негизинде жасалган), түзөтүүчүлөрү да бул блокторго "үстүнө" кошулат. Эгерде блоктор "таасирленген" маалыматка таасир этпесе, анда бул "түзөтүүчү толкундар" аларга тиешелүү эмес. Мисалы, жогорудагы сүрөттө С эсебинин балансын көбөйтүүчү биринчи блоктун транзакциясы туура эмес деп таанылган - ошондуктан үчүнчү блокто бул эсептин балансын азайткан транзакция да жокко чыгарылып, түзөтүүчү блок киргизилиши керек. блоктун үстүнө жасалышы керек.

Белгилей кетүүчү нерсе, түзөтүүчү блоктор түпнускалардын "үстүндө" жайгашкан катары сүрөттөлсө да, алар тиешелүү блокчейндин аягына кошулат (алар хронологиялык түрдө болушу керек). Эки өлчөмдүү жайгашуу блокчейндин кайсы чекитине "байланышканын" гана көрсөтөт (аларда жайгашкан баштапкы блоктун хэштери аркылуу).

"Өткөндү өзгөртүү" чечими канчалык жакшы экенин өз-өзүнчө философиялай аласыз. Шардчейнде туура эмес блоктун пайда болуу мүмкүнчүлүгүн моюнга алсак, анда ката түзүүчү блоктун пайда болушунан кача албайбыз. Бул жерде, мен айта алам, айырма жаңы блоктор боюнча консенсуска жетиши керек болгон түйүндөрдүн санында - ар бир shardchain боюнча иштегендердин салыштырмалуу аз саны болот."жумушчу топ» түйүндөрү (анын курамын тез-тез өзгөртөт) жана түзөтүүчү блокторду киргизүү ар бир адамдын макулдугун талап кылат валидатордук түйүндөр. Мен кийинки макалада валидаторлор, жумушчу топтор жана башка түйүн ролдору жөнүндө көбүрөөк сүйлөшөм.

Алардын баарын башкаруу үчүн бир блокчейн

Блокчейндердин ар кандай түрлөрү жөнүндө жогоруда саналып өткөн көп маалымат бар, алар өзү да бир жерде сакталышы керек. Атап айтканда, биз төмөнкү маалыматтар жөнүндө сөз болуп жатат:

  • жумушчу чынжырчалардын саны жана конфигурациялары жөнүндө;
  • shardchains жана алардын префикстеринин саны жөнүндө;
  • учурда кайсы түйүндөр кайсы shardchains үчүн жооптуу экендиги жөнүндө;
  • акыркы блоктордун хэштери бардык shardchains кошулган.

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

Бирок бул титаникалык иштердин бардыгын - билдирүүлөрдү жөнөтүү, акылдуу келишимдерди аткаруу, shardchains жана мастерчейндеги блокторду түзүү, ал тургай блокторду каталарды текшерүү үчүн ким жооп берет? Мунун баарын Telegram кардары орнотулган миллиондогон колдонуучулардын телефондору жашыруун жасайбы? Же, балким, Дуров командасы борбордон ажыратуу идеяларынан баш тартып, алардын серверлери муну эскичил жол менен жасашат?

Чынында, бири да, экинчиси да туура эмес. Бирок бул макаланын чектери тез эле түгөнүп баратат, андыктан түйүндөрдүн ар кандай ролдору (сиз алардын айрымдары жөнүндө айтылганын байкаган чыгарсыз), ошондой эле алардын ишинин механикасы жөнүндө кийинки бөлүктө сүйлөшөбүз.

Source: www.habr.com

Комментарий кошуу