TON: Telegram Open Network. Bahagi 2: Mga Blockchain, sharding

TON: Telegram Open Network. Bahagi 2: Mga Blockchain, sharding

Ang tekstong ito ay isang pagpapatuloy ng isang serye ng mga artikulo kung saan sinusuri ko ang istruktura ng (malamang) ipinamamahaging network na Telegram Open Network (TON), na inihahanda para sa pagpapalabas ngayong taon. SA naunang bahagi Inilarawan ko ang pinakapangunahing antas nito - ang paraan ng pakikipag-ugnayan ng mga node sa isa't isa.

Kung sakali, hayaan mong ipaalala ko sa iyo na wala akong kinalaman sa pagbuo ng network na ito at ang lahat ng materyal ay nakuha mula sa isang bukas (kahit na hindi na-verify) na mapagkukunan - ang dokumento (may kasama rin brochure, maikling binabalangkas ang mga pangunahing punto), na lumitaw sa pagtatapos ng nakaraang taon. Ang dami ng impormasyon sa dokumentong ito, sa aking opinyon, ay nagpapahiwatig ng pagiging tunay nito, kahit na walang opisyal na kumpirmasyon nito.

Ngayon ay titingnan natin ang pangunahing bahagi ng TON - ang blockchain.

Pangunahing konsepto

Account (account). Isang set ng data na kinilala ng isang 256-bit na numero Account ID (madalas ito ang pampublikong susi ng may-ari ng account). Sa base case (tingnan sa ibaba zero workchain), ang data na ito ay tumutukoy sa balanse ng user. "Occupy" na partikular Account ID kahit sino ay maaaring, ngunit ang halaga nito ay maaari lamang baguhin ayon sa ilang mga patakaran.

Matalinong kontrata (matalinong kontrata). Sa esensya, isa itong espesyal na kaso ng isang account, na dinagdagan ng smart contract code at storage ng mga variable nito. Kung sa kaso ng isang "wallet" maaari kang magdeposito at mag-withdraw ng pera mula dito ayon sa medyo simple at paunang natukoy na mga patakaran, kung gayon sa kaso ng isang matalinong kontrata ang mga patakarang ito ay nakasulat sa anyo ng code nito (sa isang tiyak na Turing-kumpleto programming language).

Estado ng Blockchain (estado ng blockchain). Ang hanay ng mga estado ng lahat ng mga account/smart na kontrata (sa abstract na kahulugan, isang hash table, kung saan ang mga susi ay mga identifier ng account at ang mga halaga ay ang data na nakaimbak sa mga account).

Mensahe (mensahe). Sa itaas ay ginamit ko ang expression na "credit at debit money" - ito ay isang partikular na halimbawa ng isang mensahe ("transfer N gramo galing sa account account_1 sa account account_2"). Malinaw, tanging ang node na nagmamay-ari ng pribadong key ng account ang makakapagpadala ng ganoong mensahe account_1 - at kayang kumpirmahin ito sa pamamagitan ng pirma. Ang resulta ng paghahatid ng mga naturang mensahe sa isang regular na account ay isang pagtaas sa balanse nito, at ang resulta ng matalinong kontrata ay ang pagpapatupad ng code nito (na magpoproseso ng pagtanggap ng mensahe). Siyempre, posible rin ang iba pang mga mensahe (hindi ang paglilipat ng mga halaga ng pera, ngunit ang di-makatwirang data sa pagitan ng mga matalinong kontrata).

Transaksyon (transaksiyon). Ang katotohanan na ang isang mensahe ay naihatid ay tinatawag na isang transaksyon. Binabago ng mga transaksyon ang estado ng blockchain. Ito ay mga transaksyon (mga talaan ng paghahatid ng mensahe) na bumubuo sa mga bloke sa blockchain. Sa bagay na ito, maaari mong isipin ang estado ng blockchain bilang isang incremental na database - lahat ng mga bloke ay "mga pagkakaiba" na kailangang ilapat nang sunud-sunod upang makuha ang kasalukuyang estado ng database. Ang mga detalye ng pag-iimpake ng mga "diff" na ito (at pagpapanumbalik ng buong estado mula sa kanila) ay tatalakayin sa susunod na artikulo.

Blockchain sa TON: ano ito at bakit?

Gaya ng nabanggit sa nakaraang artikulo, Ang blockchain ay isang istraktura ng data, ang mga elemento (mga bloke) na kung saan ay inayos sa isang "kadena", at ang bawat kasunod na bloke ng kadena ay naglalaman ng isang hash ng nauna.. Ang mga komento ay nagtanong ng tanong: bakit kailangan natin ng ganoong istruktura ng data kapag mayroon na tayong DHT - isang distributed hash table? Malinaw, ang ilang data ay maaaring maimbak sa DHT, ngunit ito ay angkop lamang para sa hindi masyadong "sensitibong" impormasyon. Ang mga balanse ng Cryptocurrency ay hindi maiimbak sa DHT - pangunahin dahil sa kakulangan ng mga pagsusuri sa integridad. Sa totoo lang, ang buong kumplikado ng istraktura ng blockchain ay lumalaki upang maiwasan ang pagkagambala sa data na nakaimbak dito.

Gayunpaman, ang blockchain sa TON ay mukhang mas kumplikado kaysa sa karamihan ng iba pang mga distributed system - at sa dalawang dahilan. Ang una ay ang pagnanais na mabawasan ang pangangailangan para sa mga tinidor. Sa tradisyunal na cryptocurrency, ang lahat ng mga parameter ay nakatakda sa unang yugto at anumang pagtatangka na baguhin ang mga ito ay talagang humahantong sa paglitaw ng isang "alternatibong cryptocurrency universe." Ang pangalawang dahilan ay suporta para sa pagdurog (sharding, sharding) blockchain. Ang Blockchain ay isang istraktura na hindi maaaring maging mas maliit sa paglipas ng panahon; at kadalasan ang bawat node na responsable para sa pagpapatakbo ng network ay pinipilit na ganap itong iimbak. Sa tradisyonal (sentralisadong) system, ginagamit ang sharding upang malutas ang mga naturang problema: ang ilan sa mga tala sa database ay matatagpuan sa isang server, ang ilan sa isa pa, atbp. Sa kaso ng mga cryptocurrencies, ang gayong pag-andar ay bihira pa rin - lalo na, dahil sa katotohanan na mahirap magdagdag ng sharding sa isang sistema kung saan hindi ito orihinal na pinlano.

Paano plano ng TON na lutasin ang parehong mga problema sa itaas?

Nilalaman ng Blockchain. Mga workchain.

TON: Telegram Open Network. Bahagi 2: Mga Blockchain, sharding

Una sa lahat, pag-usapan natin kung ano ang nakaplanong itago sa blockchain. Ang mga estado ng mga account ("mga wallet" sa base case) at mga matalinong kontrata ay iimbak doon (para sa pagiging simple, ipagpapalagay namin na ito ay kapareho ng mga account). Sa esensya, ito ay magiging isang regular na hash table - ang mga susi dito ay mga identifier Account ID, at ang mga halaga ay mga istruktura ng data na naglalaman ng mga bagay tulad ng:

  • balanse;
  • smart contract code (para lamang sa mga smart contract);
  • smart contract data storage (para sa mga smart contract lang);
  • mga istatistika;
  • (opsyonal) pampublikong susi para sa mga paglilipat mula sa account, bilang default na account_id;
  • pila ng mga papalabas na mensahe (dito ang mga ito ay ipinasok para sa pagpapasa sa tatanggap);
  • isang listahan ng mga pinakabagong mensaheng inihatid sa account na ito.

Tulad ng nabanggit sa itaas, ang mga block mismo ay binubuo ng mga transaksyon - mga mensaheng inihatid sa iba't ibang account_id account. Gayunpaman, bilang karagdagan sa account_id, naglalaman din ang mga mensahe ng 32-bit na field workchain_id β€” tinatawag na identifier workchain (kadena ng trabaho, gumagana blockchain). Ito ay nagpapahintulot sa iyo na magkaroon ng ilang mga blockchain na independyente sa isa't isa na may iba't ibang mga pagsasaayos. Sa kasong ito, ang workchain_id = 0 ay itinuturing na isang espesyal na kaso, zero workchain β€” ito ay ang mga balanse sa loob nito na tumutugma sa TON (Grams) na cryptocurrency. Malamang, sa una, ang ibang mga workchain ay hindi iiral.

Mga shardchain. Infinite Sharding Paradigm.

Ngunit ang paglaki sa bilang ng mga blockchain ay hindi titigil doon. Harapin natin ang sharding. Isipin natin na ang bawat account (account_id) ay inilalaan ng sarili nitong blockchain - naglalaman ito ng lahat ng mensaheng dumarating dito - at ang mga estado ng lahat ng naturang blockchain ay nakaimbak sa magkahiwalay na mga node.

Siyempre, ito ay napaka-aksaya: malamang, sa bawat isa sa mga ito mga shardchain (shardchain, shard blockchain) ang mga transaksyon ay darating nang napakabihirang, at maraming makapangyarihang mga node ang kakailanganin (sa hinaharap, tandaan ko na hindi lamang kami ay nagsasalita tungkol sa mga kliyente sa mga mobile phone - ngunit tungkol sa mga seryosong server).

Samakatuwid, pinagsama-sama ng mga shardchain ang mga account sa pamamagitan ng mga binary prefix ng kanilang mga identifier: kung ang isang shardchain ay may prefix na 0110, isasama nito ang mga transaksyon ng lahat ng account_id na nagsisimula sa mga numerong ito. Ito shard_prefix maaaring magkaroon ng haba mula 0 hanggang 60 bits - at ang pangunahing bagay ay maaari itong magbago nang pabago-bago.

TON: Telegram Open Network. Bahagi 2: Mga Blockchain, sharding

Sa sandaling ang isa sa mga shardchain ay nagsimulang makatanggap ng masyadong maraming mga transaksyon, ang mga node na gumagana dito, ayon sa paunang natukoy na mga patakaran, ay "hatiin" ito sa dalawang bata - ang kanilang mga prefix ay magiging mas mahaba nang kaunti (at para sa isa sa kanila ang bit na ito ay magiging katumbas ng 0, at para sa isa pa - 1). Halimbawa, shard_prefix = 0110b hahatiin sa 01100b at 01101b. Sa turn, kung ang dalawang "kapitbahay" na shardchain ay nagsimulang makaramdam ng sapat na kaginhawahan (sa loob ng ilang panahon), muli silang magsasama.

Kaya, ang sharding ay ginagawa "mula sa ibaba pataas" - ipinapalagay namin na ang bawat account ay may sariling shard, ngunit sa ngayon sila ay "nakadikit" ng mga prefix. Ito ang ibig sabihin nito Infinite Sharding Paradigm (walang katapusang sharding paradigm).

Hiwalay, gusto kong bigyang-diin na ang mga workchain ay umiiral lamang halos - sa katunayan, workchain_id ito ay bahagi ng identifier ng isang partikular na shardchain. Sa mga pormal na termino, ang bawat shardchain ay tinutukoy ng isang pares ng mga numero (workchain_id, shard_prefix).

Pagwawasto ng error. Mga vertical na blockchain.

Ayon sa kaugalian, ang anumang transaksyon sa isang blockchain ay itinuturing na "nakatakda sa bato." Gayunpaman, sa kaso ng TON, posible na "muling isulat ang kasaysayan" - kung sakaling may isang tao (ang tinatawag na. buhol ng mangingisda) ay magpapatunay na ang isa sa mga bloke ay nalagdaan nang mali. Sa kasong ito, ang isang espesyal na bloke ng pagwawasto ay idinagdag sa kaukulang shardchain, na naglalaman ng hash ng bloke mismo na itinatama (at hindi ang huling bloke sa shardchain). Sa pag-iisip ng shardchain bilang isang kadena ng mga bloke na inilatag nang pahalang, maaari nating sabihin na ang corrective block ay nakakabit sa maling bloke hindi sa kanan, ngunit mula sa itaas - kaya itinuturing na ito ay bahagi ng isang maliit na "vertical blockchain" . Kaya, maaari nating sabihin na ang mga shardchain ay dalawang-dimensional na blockchain.

TON: Telegram Open Network. Bahagi 2: Mga Blockchain, sharding

Kung, pagkatapos ng isang maling bloke, ang mga pagbabagong ginawa nito ay na-refer ng mga kasunod na bloke (ibig sabihin, ang mga bagong transaksyon ay ginawa batay sa mga hindi wasto), ang mga pagwawasto ay idinagdag din sa mga bloke na ito "sa itaas". Kung ang mga bloke ay hindi nakakaapekto sa "apektadong" impormasyon, ang mga "corrective wave" na ito ay hindi nalalapat sa kanila. Halimbawa, sa ilustrasyon sa itaas, ang transaksyon ng unang bloke, ang pagtaas ng balanse ng account C, ay kinilala bilang hindi tama - samakatuwid, ang transaksyong nagpapababa sa balanse ng account na ito sa ikatlong bloke ay dapat ding kanselahin, at isang corrective block dapat gawin sa ibabaw ng mismong bloke.

Dapat pansinin na kahit na ang mga corrective block ay inilalarawan na matatagpuan "sa itaas" ng mga orihinal, sa katunayan sila ay idaragdag sa dulo ng kaukulang blockchain (kung saan sila ay dapat na chronologically). Ang dalawang-dimensional na lokasyon ay nagpapakita lamang kung saang punto sa blockchain sila ay "mai-link" (sa pamamagitan ng hash ng orihinal na bloke na matatagpuan sa kanila).

Maaari mong hiwalay na pilosopiya kung gaano kahusay ang desisyon na "baguhin ang nakaraan". Mukhang kung aaminin natin ang posibilidad ng isang maling bloke na lumilitaw sa shardchain, hindi natin maiiwasan ang posibilidad na lumitaw ang isang maling corrective block. Dito, sa abot ng aking masasabi, ang pagkakaiba ay nasa bilang ng mga node na dapat maabot ang pinagkasunduan sa mga bagong bloke - magkakaroon ng medyo maliit na bilang ng mga taong nagtatrabaho sa bawat shardchain."grupong nagtatrabahoΒ» mga node (na madalas nagbabago sa komposisyon nito), at ang pagpapakilala ng mga corrective block ay mangangailangan ng pahintulot ng lahat mga validator node. Magsasalita pa ako tungkol sa mga validator, workgroup, at iba pang mga tungkulin ng node sa susunod na artikulo.

Isang blockchain upang mamuno sa kanilang lahat

Mayroong maraming impormasyon na nakalista sa itaas tungkol sa iba't ibang uri ng blockchain, na dapat ding itago sa isang lugar. Sa partikular, pinag-uusapan natin ang sumusunod na impormasyon:

  • tungkol sa bilang at mga pagsasaayos ng mga workchain;
  • tungkol sa bilang ng mga shardchain at ang kanilang mga prefix;
  • tungkol sa kung aling mga node ang kasalukuyang responsable para sa kung aling mga shardchain;
  • mga hash ng mga huling bloke na idinagdag sa lahat ng shardchain.

Tulad ng nahulaan mo, ang lahat ng mga bagay na ito ay naitala sa isa pang imbakan ng blockchain - masterchain (masterchain, master blockchain). Dahil sa pagkakaroon ng mga hash mula sa mga bloke ng lahat ng shardchain sa mga bloke nito, ginagawa nitong lubos na konektado ang system. Nangangahulugan ito, bukod sa iba pang mga bagay, na ang pagbuo ng isang bagong bloke sa masterchain ay magaganap kaagad pagkatapos ng pagbuo ng mga bloke sa shardchain - inaasahan na ang mga bloke sa shardchain ay lilitaw nang halos sabay-sabay humigit-kumulang bawat 5 segundo, at ang susunod na bloke sa masterchain - isang segundo pagkatapos nito.

Ngunit sino ang magiging responsable para sa pagpapatupad ng lahat ng napakalaking gawaing ito - para sa pagpapadala ng mga mensahe, pagpapatupad ng mga matalinong kontrata, pagbuo ng mga bloke sa shardchain at masterchain, at kahit na suriin ang mga bloke para sa mga error? Ang lahat ba ng ito ay lihim na gagawin ng mga telepono ng milyun-milyong user na may Telegram client na naka-install sa kanila? O, marahil, aabandonahin ng koponan ng Durov ang mga ideya ng desentralisasyon at gagawin ito ng kanilang mga server sa makalumang paraan?

Sa katunayan, hindi tama ang isa o ang isa pang sagot. Ngunit ang mga margin ng artikulong ito ay mabilis na nauubos, kaya't pag-uusapan natin ang tungkol sa iba't ibang mga tungkulin ng mga node (maaaring napansin mo na ang mga pagbanggit ng ilan sa mga ito), pati na rin ang mga mekanika ng kanilang trabaho, sa susunod na bahagi.

Pinagmulan: www.habr.com

Magdagdag ng komento