TON: Telegram нээлттэй сүлжээ. 2-р хэсэг: Блокчейн, хуваах

TON: Telegram нээлттэй сүлжээ. 2-р хэсэг: Блокчейн, хуваах

Энэхүү бичвэр нь энэ жил гаргахаар бэлтгэгдэж буй Telegram Open Network (TON) сүлжээний (магадгүй) бүтцийг судалж буй цуврал нийтлэлийн үргэлжлэл юм. IN өмнөх хэсэг Би түүний хамгийн үндсэн түвшинг тодорхойлсон - зангилаанууд хоорондоо хэрхэн харьцдаг талаар.

Ямар ч тохиолдолд би энэ сүлжээг хөгжүүлэхтэй ямар ч холбоогүй бөгөөд бүх материалыг нээлттэй (баталгаагүй ч) эх сурвалжаас цуглуулсан гэдгийг сануулъя. баримт бичиг (дагалдах нь бас байдаг товхимол, өнгөрсөн оны сүүлээр гарч ирсэн гол санааг товч дурдав. Энэ баримт бичигт байгаа мэдээллийн хэмжээ нь миний бодлоор түүний үнэн зөвийг харуулж байна, гэхдээ энэ талаар албан ёсны баталгаа байхгүй байна.

Өнөөдөр бид TON-ийн гол бүрэлдэхүүн хэсэг болох блокчейнийг авч үзэх болно.

Үндсэн ойлголтууд

Дансны (данс). 256 битийн тоогоор тодорхойлогдсон өгөгдлийн багц Дансны ID (ихэнхдээ энэ нь данс эзэмшигчийн нийтийн түлхүүр юм). Үндсэн тохиолдолд (доороос үзнэ үү тэг ажлын хэлхээ), энэ өгөгдөл нь хэрэглэгчийн үлдэгдлийг илэрхийлнэ. "Эзлэх" тусгай Дансны ID хэн ч болно, гэхдээ түүний үнэ цэнийг зөвхөн тодорхой дүрмийн дагуу өөрчилж болно.

Ухаалаг гэрээ (ухаалаг гэрээ). Үндсэндээ энэ нь ухаалаг гэрээний код, түүний хувьсагчдыг хадгалах замаар нэмэлт дансны онцгой тохиолдол юм. Хэрэв "түрийвчний" хувьд та харьцангуй энгийн бөгөөд урьдчилан тодорхойлсон дүрмийн дагуу мөнгө байршуулж, авах боломжтой бол ухаалаг гэрээний хувьд эдгээр дүрмийг түүний код хэлбэрээр (тодорхой Тюринг-иж бүрдэл дээр) бичсэн болно. програмчлалын хэл).

Блокчейн төлөв (блокчейн төлөв байдал). Бүх данс/ухаалаг гэрээний төлөвийн багц (хийсвэр утгаараа хэш хүснэгт, түлхүүрүүд нь дансны танигч, утга нь дансанд хадгалагдсан өгөгдөл юм).

Зурвас (мессеж). Дээр би "зээл ба дебит мөнгө" гэсэн хэллэгийг ашигласан - энэ бол мессежийн тодорхой жишээ юм ("шилжүүлэх" N грамм данснаас бүртгэл_1 данс руу бүртгэл_2"). Мэдээжийн хэрэг, зөвхөн дансны хувийн түлхүүрийг эзэмшдэг зангилаа ийм мессеж илгээх боломжтой бүртгэл_1 - мөн үүнийг гарын үсгээр баталгаажуулах боломжтой. Ийм мессежийг ердийн дансанд хүргэсний үр дүн нь түүний үлдэгдэл нэмэгдэх бөгөөд ухаалаг гэрээний үр дүн нь түүний кодыг гүйцэтгэх явдал юм (энэ нь мессежийг хүлээн авах үйл явц юм). Мэдээжийн хэрэг, бусад мессежүүд бас боломжтой (мөнгөн дүнгээр биш, харин ухаалаг гэрээний хооронд дур зоргоороо өгөгдөл шилжүүлэх).

Гүйлгээ (ажил гүйлгээ). Мессежийг хүргэж байгааг гүйлгээ гэж нэрлэдэг. Гүйлгээ нь блокчейн төлөвийг өөрчилдөг. Энэ нь блокчэйн дэх блокуудыг бүрдүүлдэг гүйлгээ (мессеж хүргэх бүртгэл) юм. Үүнтэй холбогдуулан та блокчэйний төлөвийг нэмэлт мэдээллийн сан гэж үзэж болно - бүх блокууд нь мэдээллийн сангийн одоогийн төлөвийг авахын тулд дэс дараалан хэрэглэх шаардлагатай "ялгаа" юм. Эдгээр "ялгаанууд" -ын савлагааны онцлогийг (мөн тэдгээрээс бүрэн төлөвийг нь сэргээх) дараагийн өгүүллээр хэлэлцэх болно.

TON дахь блокчейн: энэ юу вэ, яагаад?

Өмнөх нийтлэлд дурдсанчлан, блокчэйн нь өгөгдлийн бүтэц бөгөөд түүний элементүүд (блокууд) нь "гинж" хэлбэрээр эрэмблэгдсэн бөгөөд гинжин хэлхээний дараагийн блок бүр өмнөх блокийн хэшийг агуулдаг.. Сэтгэгдэлүүд нь бидэнд DHT буюу хуваарилагдсан хэш хүснэгттэй байхад яагаад ийм өгөгдлийн бүтэц хэрэгтэй байна вэ гэсэн асуултыг тавьсан. Мэдээжийн хэрэг, зарим өгөгдлийг DHT-д хадгалах боломжтой боловч энэ нь зөвхөн хэт "эмзэг" мэдээлэлд тохиромжтой. Криптовалютын үлдэгдлийг DHT-д хадгалах боломжгүй бөгөөд энэ нь үндсэндээ шалгахгүйн улмаас бүрэн бүтэн байдал. Үнэн хэрэгтээ блокчейн бүтцийн бүх нарийн төвөгтэй байдал нь түүнд хадгалагдсан өгөгдөлд хөндлөнгөөс оролцохоос урьдчилан сэргийлэхийн тулд нэмэгддэг.

Гэсэн хэдий ч TON дахь блокчэйн нь бусад тархсан системүүдээс бүр ч илүү төвөгтэй харагддаг бөгөөд энэ нь хоёр шалтгааны улмаас юм. Эхнийх нь хэрэгцээг багасгах хүсэл юм сэрээ. Уламжлалт криптовалютын хувьд бүх параметрүүдийг эхний шатанд тохируулдаг бөгөөд тэдгээрийг өөрчлөх оролдлого нь үнэндээ "криптовалютын өөр ертөнц" үүсэхэд хүргэдэг. Хоёрдахь шалтгаан нь бутлах дэмжлэг (хуваах, хуваах) блокчейн. Блокчейн бол цаг хугацааны явцад жижигрэх боломжгүй бүтэц юм; ихэвчлэн сүлжээний ажиллагааг хариуцдаг зангилаа бүр үүнийг бүрэн хадгалахаас өөр аргагүй болдог. Уламжлалт (төвлөрсөн) системд ийм асуудлыг шийдэхийн тулд sharding ашигладаг: мэдээллийн сан дахь зарим бичлэгүүд нэг сервер дээр, зарим нь нөгөө сервер дээр байрладаг гэх мэт. Криптовалютын хувьд ийм ажиллагаа нэлээд ховор хэвээр байгаа бөгөөд ялангуяа анх төлөвлөөгүй байсан системд sharding нэмэхэд хэцүү байдагтай холбоотой.

TON дээрх хоёр асуудлыг хэрхэн шийдвэрлэхээр төлөвлөж байна вэ?

Блокчейн контент. Ажлын гинж.

TON: Telegram нээлттэй сүлжээ. 2-р хэсэг: Блокчейн, хуваах

Юуны өмнө блокчэйнд юу хадгалахаар төлөвлөж байгаа талаар ярилцъя. Дансны төлөв (үндсэн тохиолдолд хэтэвч) болон ухаалаг гэрээнүүд тэнд хадгалагдах болно (хялбар байхын тулд бид үүнийг данстай адилхан гэж үзэх болно). Үндсэндээ энэ нь ердийн хэш хүснэгт байх болно - түүний доторх түлхүүрүүд нь танигч байх болно Дансны ID, болон утгууд нь дараах зүйлсийг агуулсан өгөгдлийн бүтэц юм:

  • тэнцвэр;
  • ухаалаг гэрээний код (зөвхөн ухаалаг гэрээний хувьд);
  • ухаалаг гэрээний өгөгдөл хадгалах (зөвхөн ухаалаг гэрээнд зориулагдсан);
  • статистик;
  • (Нэмэлт) данснаас шилжүүлэх нийтийн түлхүүр, анхдагчаар account_id;
  • гарч буй мессежийн дараалал (энд хүлээн авагч руу дамжуулахаар оруулсан болно);
  • энэ бүртгэлд хүргэгдсэн хамгийн сүүлийн мессежүүдийн жагсаалт.

Дээр дурдсанчлан блокууд нь гүйлгээнээс бүрддэг - янз бүрийн account_id данс руу илгээсэн мессежүүд. Гэсэн хэдий ч, account_id-ээс гадна зурвасууд нь 32 бит талбарыг агуулна workchain_id - тодорхойлогч гэж нэрлэгддэг ажлын хэлхээ (ажлын хэлхээ, ажиллаж байгаа блокчэйн). Энэ нь өөр өөр тохиргоотой, бие биенээсээ хамааралгүй хэд хэдэн блокчейнтэй байх боломжийг танд олгоно. Энэ тохиолдолд workchain_id = 0 нь онцгой тохиолдол гэж тооцогддог. тэг ажлын хэлхээ - энэ нь ТОН (Грам) криптовалюттай тохирч байгаа үлдэгдэл юм. Эхэндээ бусад ажлын хэлхээ огт байхгүй байх магадлалтай.

Shardchains. Хязгааргүй хуваах парадигм.

Гэхдээ блокчейн тоон өсөлт үүгээр зогсохгүй. Хугацааны асуудлыг шийдье. Бүртгэл бүрт (account_id) өөрийн гэсэн блокчлон хуваарилагдсан байдаг - энэ нь түүнд ирж буй бүх мессежийг агуулдаг - бүх блокчейн төлөвүүд нь тусдаа зангилаанууд дээр хадгалагддаг гэж төсөөлөөд үз дээ.

Мэдээжийн хэрэг, энэ нь маш их дэмий үрэлгэн юм: хамгийн их магадлалтай, эдгээр нь тус бүрт shardchains (shardchain, хэлтэрхий блокчэйн) гүйлгээ нь маш ховор тохиолддог бөгөөд маш олон хүчирхэг зангилаа шаардлагатай болно (урагш харахад бид зөвхөн гар утсан дээрх үйлчлүүлэгчдийн тухай биш, харин ноцтой серверүүдийн тухай ярьж байгааг би тэмдэглэж байна).

Иймд shardchain нь дансуудыг танигчийнхаа хоёртын угтвараар нэгтгэдэг: хэрвээ shardchain нь 0110 угтвартай бол эдгээр тоогоор эхэлсэн бүх account_id-н гүйлгээг багтаана. Энэ shard_prefix 0-ээс 60 битийн урттай байж болох бөгөөд гол зүйл нь динамикаар өөрчлөгдөх боломжтой юм.

TON: Telegram нээлттэй сүлжээ. 2-р хэсэг: Блокчейн, хуваах

Shardchain-ийн аль нэг нь хэт олон гүйлгээг хүлээн авч эхэлмэгц түүн дээр ажиллаж буй зангилаанууд урьдчилан тодорхойлсон дүрмийн дагуу үүнийг хоёр хүүхдэд "хуваах" - тэдний угтвар нь арай урт байх болно (мөн тэдгээрийн аль нэгнийх нь хувьд энэ бит байх болно). 0-тэй тэнцүү, нөгөө нь - 1). Жишээлбэл, shard_prefix = 0110б хуваагдана 01100b ба 01101б. Хариуд нь, хэрэв хоёр "хөрш" shardchains (хэсэг хугацаанд) хангалттай тайван санагдаж эхэлбэл тэд дахин нэгдэх болно.

Тиймээс, хуваалтыг "доороос дээш" хийдэг - бид данс бүр өөрийн гэсэн хэлтэрхийтэй гэж үздэг боловч одоогоор тэдгээрийг угтвараар "наасан" байна. Энэ нь юу гэсэн үг вэ Хязгааргүй хуваах парадигм (хязгааргүй хуваах парадигм).

Ажлын гинж нь зөвхөн виртуал байдлаар байдаг гэдгийг би онцлон тэмдэглэхийг хүсч байна - үнэндээ, workchain_id энэ нь тодорхой shardchain-ийн тодорхойлогчийн нэг хэсэг юм. Албан ёсны утгаараа shardchain бүрийг хос тоогоор тодорхойлдог (workchain_id, shard_prefix).

Алдаа засах. Босоо блокчейн.

Уламжлал ёсоор блокчэйн дээрх аливаа гүйлгээг "чулуунд хийсэн" гэж үздэг. Гэсэн хэдий ч TON-ийн хувьд хэн нэгэн (гэж нэрлэгдэх) тохиолдолд "түүхийг дахин бичих" боломжтой. загасчны зангилаа) блокуудын нэг нь буруу гарын үсэг зурсан болохыг нотлох болно. Энэ тохиолдолд тусгай залруулгын блокыг харгалзах shardchain-д нэмсэн бөгөөд энэ нь өөрөө засч байгаа блокийн хэшийг (мөн shardchain-ийн сүүлчийн блок биш) агуулсан болно. Shardchain-ийг хэвтээ байрлалтай блокуудын гинж гэж бодвол засах блок нь алдаатай блок дээр баруун талд биш, харин дээрээс бэхлэгдсэн гэж хэлж болно - тиймээс энэ нь жижиг "босоо блокчейн"-ийн нэг хэсэг болсон гэж үздэг. . Тиймээс бид shardchains гэж хэлж болно хоёр хэмжээст блокчейн.

TON: Telegram нээлттэй сүлжээ. 2-р хэсэг: Блокчейн, хуваах

Хэрэв алдаатай блок хийсний дараа түүний хийсэн өөрчлөлтийг дараагийн блокуудаар иш татсан бол (жишээ нь, хүчингүй зүйл дээр үндэслэн шинэ гүйлгээ хийсэн) залруулга нь эдгээр блокуудад "дээд талд" нэмэгддэг. Хэрэв блокууд нь "нөлөөлөлд өртсөн" мэдээлэлд нөлөөлөөгүй бол эдгээр "засах долгион" нь тэдгээрт хамаарахгүй. Жишээлбэл, дээрх зураг дээр С дансны үлдэгдлийг нэмэгдүүлэх эхний блокийн гүйлгээг буруу гэж хүлээн зөвшөөрсөн тул гурав дахь блок дахь энэ дансны үлдэгдлийг бууруулсан гүйлгээг мөн цуцалж, залруулах блок хийх шаардлагатай. блок дээр өөрөө хийх ёстой.

Хэдийгээр залруулах блокууд нь анхны блокуудын "дээр" байрласан гэж дүрслэгдсэн боловч үнэн хэрэгтээ тэдгээр нь холбогдох блокийн төгсгөлд нэмэгдэх болно (тэдгээр нь он цагийн дарааллаар байх ёстой). Хоёр хэмжээст байршил нь зөвхөн блокчейн аль цэг рүү "холбох" болохыг харуулдаг (тэдгээрт байрлах анхны блокийн хэшээр).

"Өнгөрсөн үеийг өөрчлөх" шийдвэр хэр сайн болохыг та тусад нь философи хийж болно. Хэрэв бид shardchain-д буруу блок гарч ирэх боломжийг хүлээн зөвшөөрвөл алдаа засах блок гарч ирэх магадлалаас зайлсхийх боломжгүй юм шиг санагдаж байна. Энд миний хэлж байгаагаар ялгаа нь шинэ блокууд дээр зөвшилцөлд хүрэх ёстой зангилааны тоонд байгаа юм - shardchain бүр дээр харьцангуй цөөн тооны хүмүүс ажиллах болно."ажлын хэсэг» зангилаа (энэ нь найрлагыг нь байнга өөрчилдөг), залруулах блокуудыг нэвтрүүлэхэд хүн бүрийн зөвшөөрөл шаардлагатай болно. баталгаажуулагч зангилаа. Би баталгаажуулагч, ажлын хэсэг болон бусад зангилааны үүргүүдийн талаар дараагийн өгүүллээр дэлгэрэнгүй ярих болно.

Бүгдийг нь удирдах нэг блокчейн

Өөр өөр төрлийн блокчэйнүүдийн талаар дээр дурдсан маш олон мэдээлэл байдаг бөгөөд тэдгээрийг хаа нэгтээ хадгалах ёстой. Ялангуяа бид дараахь мэдээллийн талаар ярьж байна.

  • ажлын хэлхээний тоо, тохиргооны тухай;
  • shardchains болон тэдгээрийн угтваруудын тоо;
  • ямар зангилаа одоогоор ямар shardchains хариуцаж байгаа талаар;
  • бүх shardchains дээр нэмсэн сүүлийн блокуудын хэшүүд.

Таны таамаглаж байсанчлан эдгээр бүх зүйл өөр блокчейн санд бичигдсэн байдаг - masterchain (мастер сүлжээ, мастер блокчэйн). Түүний блокуудад бүх shardchain-ийн блокуудын хэшүүд байгаа тул энэ нь системийг өндөр холболттой болгодог. Энэ нь бусад зүйлсийн дотроос masterchain-д шинэ блок үүсгэх нь shardchain-д блок үүсгэсний дараа шууд үүснэ гэсэн үг юм - shardchain дахь блокууд бараг нэгэн зэрэг ойролцоогоор 5 секунд тутамд гарч ирэх төлөвтэй байгаа бөгөөд дараагийн блок нь masterchain - үүнээс хойш секундын дараа.

Гэхдээ мессеж илгээх, ухаалаг гэрээ байгуулах, shardchain болон masterchain-д блок үүсгэх, тэр ч байтугай блокуудыг алдаа байгаа эсэхийг шалгах зэрэг энэ бүх титаник ажлыг хэн хариуцах вэ? Энэ бүхнийг Telegram клиент суулгасан сая сая хэрэглэгчдийн утас нууцаар хийх болов уу? Эсвэл Дуровын баг төвлөрлийг сааруулах санаагаа орхиж, серверүүд нь үүнийг хуучин хэв маягаар хийх болов уу?

Үнэндээ нэг нь ч, нөгөө нь ч зөв биш. Гэхдээ энэ өгүүллийн захын хэмжээ хурдан дуусч байгаа тул бид зангилааны янз бүрийн үүргийн талаар (тэдгээрийн заримыг дурьдсаныг та аль хэдийн анзаарсан байх), мөн тэдгээрийн ажлын механикийн талаар дараагийн хэсэгт ярих болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх