TON: Rangkaian Terbuka Telegram. Bahagian 2: Rantaian sekat, sharding

TON: Rangkaian Terbuka Telegram. Bahagian 2: Rantaian sekat, sharding

Teks ini adalah kesinambungan daripada siri artikel di mana saya meneliti struktur rangkaian teragih (mungkin) Rangkaian Terbuka Telegram (TON), yang sedang disediakan untuk keluaran tahun ini. DALAM bahagian sebelumnya Saya menerangkan tahap paling asasnya - cara nod berinteraksi antara satu sama lain.

Untuk berjaga-jaga, izinkan saya mengingatkan anda bahawa saya tidak ada kena mengena dengan pembangunan rangkaian ini dan semua bahan telah dikutip daripada sumber terbuka (walaupun tidak disahkan) - dokumen (ada juga disertakan risalah, menggariskan secara ringkas perkara utama), yang muncul pada akhir tahun lalu. Jumlah maklumat dalam dokumen ini, pada pendapat saya, menunjukkan kesahihannya, walaupun tidak ada pengesahan rasmi mengenainya.

Hari ini kita akan melihat komponen utama TON - blockchain.

Konsep asas

Akaun (akaun). Satu set data yang dikenal pasti dengan nombor 256-bit ID Akaun (selalunya ini ialah kunci awam pemilik akaun). Dalam kes asas (lihat di bawah rantai kerja sifar), data ini merujuk kepada baki pengguna. "Occupy" khusus ID Akaun sesiapa sahaja boleh, tetapi nilainya hanya boleh diubah mengikut peraturan tertentu.

Kontrak pintar (kontrak pintar). Pada dasarnya, ia adalah kes khas akaun, ditambah dengan kod kontrak pintar dan penyimpanan pembolehubahnya. Jika dalam kes "dompet" anda boleh mendeposit dan mengeluarkan wang daripadanya mengikut peraturan yang agak mudah dan telah ditetapkan, maka dalam hal kontrak pintar peraturan ini ditulis dalam bentuk kodnya (dalam Turing-lengkap tertentu bahasa pengaturcaraan).

Negeri Blockchain (keadaan blockchain). Set keadaan semua akaun/kontrak pintar (dalam erti kata abstrak, jadual cincang, yang kuncinya ialah pengecam akaun dan nilainya ialah data yang disimpan dalam akaun).

mesej (mesej). Di atas saya menggunakan ungkapan "wang kredit dan debit" - ini adalah contoh tertentu mesej ("pindahan N gram daripada akaun akaun_1 setiap akaun akaun_2"). Jelas sekali, hanya nod yang memiliki kunci peribadi akaun boleh menghantar mesej sedemikian akaun_1 - dan dapat mengesahkan ini dengan tandatangan. Hasil penghantaran mesej sedemikian ke akaun biasa ialah peningkatan bakinya, dan hasil kontrak pintar ialah pelaksanaan kodnya (yang akan memproses penerimaan mesej). Sudah tentu, mesej lain juga mungkin (memindahkan bukan jumlah wang, tetapi data sewenang-wenang antara kontrak pintar).

transaksi (transaksi). Fakta bahawa mesej dihantar dipanggil transaksi. Transaksi mengubah keadaan blockchain. Ia adalah urus niaga (rekod penghantaran mesej) yang membentuk blok dalam blockchain. Dalam hal ini, anda boleh menganggap keadaan rantaian blok sebagai pangkalan data tambahan - semua blok adalah "perbezaan" yang perlu digunakan secara berurutan untuk mendapatkan keadaan pangkalan data semasa. Khusus pembungkusan "perbezaan" ini (dan memulihkan keadaan penuh daripadanya) akan dibincangkan dalam artikel seterusnya.

Blockchain dalam TON: apakah itu dan mengapa?

Seperti yang dinyatakan dalam artikel sebelum ini, blockchain ialah struktur data, unsur-unsur (blok) yang disusun menjadi "rantaian", dan setiap blok rantai berikutnya mengandungi cincangan yang sebelumnya.. Komen bertanya soalan: mengapa kita memerlukan struktur data sedemikian sama sekali apabila kita sudah mempunyai DHT - jadual cincang yang diedarkan? Jelas sekali, sesetengah data boleh disimpan dalam DHT, tetapi ini hanya sesuai untuk maklumat yang tidak terlalu "sensitif". Baki mata wang kripto tidak boleh disimpan dalam DHT - terutamanya disebabkan oleh kekurangan semakan pada integriti. Sebenarnya, keseluruhan kerumitan struktur blockchain berkembang untuk mengelakkan gangguan terhadap data yang disimpan di dalamnya.

Walau bagaimanapun, rantaian blok dalam TON kelihatan lebih kompleks daripada kebanyakan sistem edaran lain - dan atas dua sebab. Yang pertama ialah keinginan untuk meminimumkan keperluan untuk garpu. Dalam mata wang kripto tradisional, semua parameter ditetapkan pada peringkat awal dan sebarang percubaan untuk mengubahnya sebenarnya membawa kepada kemunculan "alam semesta mata wang kripto alternatif." Sebab kedua ialah sokongan untuk menghancurkan (serpihan, serpihan) rantaian blok. Blockchain ialah struktur yang tidak boleh menjadi lebih kecil dari semasa ke semasa; dan biasanya setiap nod yang bertanggungjawab untuk operasi rangkaian terpaksa menyimpannya sepenuhnya. Dalam sistem tradisional (berpusat), sharding digunakan untuk menyelesaikan masalah sedemikian: beberapa rekod dalam pangkalan data terletak pada satu pelayan, beberapa pada yang lain, dsb. Dalam kes mata wang kripto, fungsi sedemikian masih agak jarang berlaku - khususnya, disebabkan oleh fakta bahawa sukar untuk menambah sharding pada sistem di mana ia tidak dirancang pada asalnya.

Bagaimanakah TON merancang untuk menyelesaikan kedua-dua masalah di atas?

Kandungan rantaian blok. Rantai kerja.

TON: Rangkaian Terbuka Telegram. Bahagian 2: Rantaian sekat, sharding

Pertama sekali, mari kita bercakap tentang apa yang dirancang untuk disimpan dalam blockchain. Keadaan akaun (β€œdompet” dalam kes asas) dan kontrak pintar akan disimpan di sana (untuk memudahkan, kami akan menganggap bahawa ini adalah sama dengan akaun). Pada dasarnya, ini akan menjadi jadual cincang biasa - kunci di dalamnya akan menjadi pengecam ID Akaun, dan nilai ialah struktur data yang mengandungi perkara seperti:

  • seimbang;
  • kod kontrak pintar (hanya untuk kontrak pintar);
  • storan data kontrak pintar (untuk kontrak pintar sahaja);
  • statistik;
  • (pilihan) kunci awam untuk pemindahan daripada akaun, secara lalai account_id;
  • baris gilir mesej keluar (di sini mereka dimasukkan untuk dimajukan kepada penerima);
  • senarai mesej terkini yang dihantar ke akaun ini.

Seperti yang dinyatakan di atas, blok itu sendiri terdiri daripada transaksi - mesej yang dihantar ke pelbagai akaun account_id. Walau bagaimanapun, sebagai tambahan kepada account_id, mesej juga mengandungi medan 32-bit id_rantai kerja β€” yang dipanggil pengecam rantai kerja (rantai kerja, blockchain bekerja). Ini membolehkan anda mempunyai beberapa blok blok bebas antara satu sama lain dengan konfigurasi yang berbeza. Dalam kes ini, workchain_id = 0 dianggap sebagai kes khas, rantai kerja sifar β€” baki di dalamnya yang sepadan dengan mata wang kripto TON (Gram). Kemungkinan besar, pada mulanya, rantai kerja lain tidak akan wujud sama sekali.

Shardchains. Paradigma Sharding Infinite.

Tetapi pertumbuhan bilangan blokchain tidak berhenti di situ. Mari kita berurusan dengan sharding. Mari kita bayangkan bahawa setiap akaun (account_id) diperuntukkan blockchainnya sendiri - ia mengandungi semua mesej yang datang kepadanya - dan keadaan semua blockchain tersebut disimpan pada nod yang berasingan.

Sudah tentu, ini sangat membazir: kemungkinan besar, dalam setiap ini rantai beling (rantai beling, rantaian serpihan) transaksi akan tiba sangat jarang, dan banyak nod yang berkuasa akan diperlukan (melihat ke hadapan, saya perhatikan bahawa kita bukan hanya bercakap tentang pelanggan pada telefon mudah alih - tetapi mengenai pelayan yang serius).

Oleh itu, shardchain menggabungkan akaun mengikut awalan perduaan pengecamnya: jika shardchain mempunyai awalan 0110, maka ia akan memasukkan transaksi semua account_id yang bermula dengan nombor ini. ini awalan_serpihan boleh mempunyai panjang dari 0 hingga 60 bit - dan perkara utama ialah ia boleh berubah secara dinamik.

TON: Rangkaian Terbuka Telegram. Bahagian 2: Rantaian sekat, sharding

Sebaik sahaja salah satu shardchain mula menerima terlalu banyak transaksi, nod yang bekerja di atasnya, mengikut peraturan yang telah ditetapkan, "memecahkannya" kepada dua kanak-kanak - awalan mereka akan menjadi sedikit lebih lama (dan untuk salah satu daripada mereka bit ini akan menjadi sama dengan 0, dan untuk yang lain - 1). Sebagai contoh, awalan_serpihan = 0110b akan berpecah kepada 01100b dan 01101b. Sebaliknya, jika dua rantai serpihan "jiran" mula berasa cukup selesa (untuk beberapa ketika), ia akan bergabung semula.

Oleh itu, serpihan dilakukan "dari bawah ke atas" - kami menganggap bahawa setiap akaun mempunyai serpihan sendiri, tetapi buat masa ini ia "dilekatkan bersama" oleh awalan. Inilah maksudnya Paradigma Sharding Infinite (paradigma sharding yang tidak terhingga).

Secara berasingan, saya ingin menekankan bahawa rantai kerja hanya wujud secara maya - sebenarnya, id_rantai kerja ia adalah sebahagian daripada pengecam rantai beling tertentu. Dalam istilah formal, setiap shardchain ditakrifkan oleh sepasang nombor (id_rantai kerja, awalan_serpihan).

Pembetulan kesilapan. Blockchain menegak.

Secara tradisinya, sebarang urus niaga pada blockchain dianggap sebagai "ditetapkan dalam batu." Walau bagaimanapun, dalam kes TON, adalah mungkin untuk "menulis semula sejarah" - sekiranya seseorang (yang dipanggil. simpul nelayan) akan membuktikan bahawa salah satu blok telah ditandatangani secara tidak betul. Dalam kes ini, blok pembetulan khas ditambahkan pada shardchain yang sepadan, yang mengandungi cincangan blok itu sendiri yang sedang dibetulkan (dan bukan blok terakhir dalam shardchain). Memikirkan rantaian beling sebagai rantaian blok yang dibentangkan secara mendatar, kita boleh mengatakan bahawa blok pembetulan dilampirkan pada blok yang salah bukan ke kanan, tetapi dari atas - jadi ia dianggap sebagai sebahagian daripada "blockchain menegak" kecil. . Oleh itu, kita boleh mengatakan bahawa shardchains adalah blok blok dua dimensi.

TON: Rangkaian Terbuka Telegram. Bahagian 2: Rantaian sekat, sharding

Jika, selepas blok yang salah, perubahan yang dibuat olehnya dirujuk oleh blok berikutnya (iaitu, urus niaga baharu dibuat berdasarkan yang tidak sah), yang pembetulan juga ditambahkan pada blok ini "di atas". Jika blok tidak menjejaskan maklumat "terjejas", "gelombang pembetulan" ini tidak terpakai kepada mereka. Sebagai contoh, dalam ilustrasi di atas, urus niaga blok pertama, meningkatkan baki akaun C, diiktiraf sebagai tidak betul - oleh itu, urus niaga mengurangkan baki akaun ini dalam blok ketiga juga harus dibatalkan, dan blok pembetulan harus dilakukan di atas blok itu sendiri.

Perlu diingat bahawa walaupun blok pembetulan digambarkan sebagai terletak "di atas" yang asal, sebenarnya ia akan ditambah pada penghujung blok yang sepadan (di mana ia harus mengikut kronologi). Lokasi dua dimensi hanya menunjukkan ke titik mana dalam blockchain mereka akan "dipautkan" (melalui cincang blok asal yang terletak di dalamnya).

Anda boleh berfalsafah secara berasingan tentang betapa baiknya keputusan untuk "mengubah masa lalu". Nampaknya jika kita mengakui kemungkinan blok yang salah muncul dalam shardchain, maka kita tidak boleh mengelakkan kemungkinan blok pembetulan yang salah muncul. Di sini, sejauh yang saya tahu, perbezaannya adalah dalam bilangan nod yang mesti mencapai konsensus pada blok baharu - akan ada bilangan yang agak kecil orang yang bekerja pada setiap rantaian shard."kerja berkumpulanΒ» nod (yang mengubah komposisinya agak kerap), dan pengenalan blok pembetulan akan memerlukan persetujuan semua orang nod pengesah. Saya akan bercakap lebih lanjut mengenai pengesah, kumpulan kerja dan peranan nod lain dalam artikel seterusnya.

Satu blok untuk memerintah mereka semua

Terdapat banyak maklumat yang disenaraikan di atas tentang pelbagai jenis rantaian blok, yang juga harus disimpan di suatu tempat. Khususnya, kita bercakap tentang maklumat berikut:

  • tentang bilangan dan konfigurasi rantai kerja;
  • tentang bilangan shardchain dan awalannya;
  • tentang nod mana yang bertanggungjawab pada rantaian beling mana;
  • cincang blok terakhir ditambahkan pada semua rantaian beling.

Seperti yang mungkin anda duga, semua perkara ini direkodkan dalam storan blockchain lain - rantai induk (rantai induk, induk blockchain). Disebabkan kehadiran cincang dari blok semua rantaian beling dalam bloknya, ia menjadikan sistem sangat bersambung. Ini bermakna, antara lain, penjanaan blok baharu dalam rantai induk akan berlaku serta-merta selepas penjanaan blok dalam rantaian beling - dijangkakan bahawa blok dalam rantai beling akan muncul hampir serentak kira-kira setiap 5 saat, dan blok seterusnya dalam rantai induk - sesaat selepas itu.

Tetapi siapa yang akan bertanggungjawab untuk pelaksanaan semua kerja besar ini - untuk menghantar mesej, melaksanakan kontrak pintar, membentuk blok dalam shardchains dan masterchain, dan juga menyemak blok untuk kesilapan? Adakah semua ini akan dilakukan secara rahsia oleh telefon berjuta-juta pengguna dengan pelanggan Telegram dipasang pada mereka? Atau, mungkin, pasukan Durov akan meninggalkan idea-idea desentralisasi dan pelayan mereka akan melakukannya dengan cara lama?

Malah, tidak satu pun atau jawapan yang lain adalah betul. Tetapi margin artikel ini cepat habis, jadi kami akan bercakap tentang pelbagai peranan nod (anda mungkin telah melihat sebutan beberapa daripada mereka), serta mekanik kerja mereka, di bahagian seterusnya.

Sumber: www.habr.com

Tambah komen