TON: Jaringan Terbuka Telegram. Bagian 2: Blockchain, sharding

TON: Jaringan Terbuka Telegram. Bagian 2: Blockchain, sharding

Teks ini merupakan kelanjutan dari serangkaian artikel di mana saya mengkaji struktur jaringan terdistribusi Telegram Open Network (TON), yang sedang dipersiapkan untuk dirilis tahun ini. DI DALAM bagian sebelumnya Saya menjelaskan level paling dasar - cara node berinteraksi satu sama lain.

Untuk berjaga-jaga, izinkan saya mengingatkan Anda bahwa saya tidak ada hubungannya dengan pengembangan jaringan ini dan semua materi diperoleh dari sumber terbuka (walaupun tidak terverifikasi) - dokumen (ada juga yang menemani brosur, menguraikan secara singkat poin-poin utama), yang muncul pada akhir tahun lalu. Banyaknya informasi dalam dokumen ini, menurut saya, menunjukkan keasliannya, meski belum ada konfirmasi resmi mengenai hal tersebut.

Hari ini kita akan melihat komponen utama TON - blockchain.

Konsep dasar

Аккаунт (rekening). Sekumpulan data yang diidentifikasi dengan angka 256-bit ID Akun (paling sering ini adalah kunci publik pemilik akun). Dalam kasus dasar (lihat di bawah rantai kerja nol), data ini mengacu pada saldo pengguna. "Menempati" spesifik ID Akun siapapun bisa, tapi nilainya hanya bisa diubah menurut aturan tertentu.

Kontrak pintar (kontrak pintar). Intinya, ini adalah kasus khusus dari sebuah akun, dilengkapi dengan kode kontrak pintar dan penyimpanan variabelnya. Jika dalam kasus “dompet” Anda dapat menyetor dan menarik uang darinya sesuai dengan aturan yang relatif sederhana dan telah ditentukan sebelumnya, maka dalam kasus kontrak pintar, aturan ini ditulis dalam bentuk kodenya (dalam Turing-complete tertentu bahasa pemrograman).

Negara Blockchain (keadaan blockchain). Kumpulan status semua akun/kontrak pintar (dalam arti abstrak, tabel hash, di mana kuncinya adalah pengidentifikasi akun dan nilainya adalah data yang disimpan di akun).

Pesan (pesan). Di atas saya menggunakan ungkapan "kredit dan debit uang" - ini adalah contoh khusus dari sebuah pesan ("transfer N gram dari akun akun_1 per akun akun_2"). Jelasnya, hanya node yang memiliki kunci pribadi akun tersebut yang dapat mengirim pesan seperti itu akun_1 - dan dapat mengkonfirmasi hal ini dengan tanda tangan. Hasil dari penyampaian pesan tersebut ke akun biasa adalah peningkatan saldo, dan hasil dari kontrak pintar adalah eksekusi kodenya (yang akan memproses penerimaan pesan). Tentu saja, pesan lain juga dimungkinkan (mentransfer bukan jumlah uang, tetapi data sewenang-wenang antar kontrak pintar).

Transaksi (.). Fakta bahwa suatu pesan terkirim disebut transaksi. Transaksi mengubah keadaan blockchain. Ini adalah transaksi (catatan pengiriman pesan) yang membentuk blok-blok di blockchain. Dalam hal ini, Anda dapat menganggap status blockchain sebagai basis data tambahan - semua blok adalah “perbedaan” yang perlu diterapkan secara berurutan untuk mendapatkan status basis data saat ini. Detail pengemasan “perbedaan” ini (dan memulihkan keadaan penuh dari perbedaan tersebut) akan dibahas di artikel berikutnya.

Blockchain di TON: apa itu dan mengapa?

Seperti disebutkan dalam artikel sebelumnya, blockchain adalah struktur data, elemen (blok) yang diurutkan menjadi "rantai", dan setiap blok rantai berikutnya berisi hash dari yang sebelumnya. Komentar menanyakan pertanyaan: mengapa kita memerlukan struktur data seperti itu ketika kita sudah memiliki DHT - tabel hash terdistribusi? Tentu saja, beberapa data dapat disimpan dalam DHT, tetapi ini hanya cocok untuk informasi yang tidak terlalu “sensitif”. Saldo mata uang kripto tidak dapat disimpan dalam DHT - terutama karena kurangnya pemeriksaan integritas. Sebenarnya, seluruh kompleksitas struktur blockchain berkembang untuk mencegah gangguan terhadap data yang tersimpan di dalamnya.

Namun, blockchain di TON terlihat lebih kompleks dibandingkan kebanyakan sistem terdistribusi lainnya - dan karena dua alasan. Yang pertama adalah keinginan untuk meminimalkan kebutuhan garpu. Dalam mata uang kripto tradisional, semua parameter ditetapkan pada tahap awal dan setiap upaya untuk mengubahnya sebenarnya mengarah pada munculnya “dunia mata uang kripto alternatif.” Alasan kedua adalah dukungan untuk menghancurkan (pecahan, pecahan) rantai blok. Blockchain adalah struktur yang tidak bisa mengecil seiring berjalannya waktu; dan biasanya setiap node yang bertanggung jawab atas pengoperasian jaringan terpaksa menyimpannya secara lengkap. Dalam sistem tradisional (terpusat), sharding digunakan untuk memecahkan masalah berikut: beberapa catatan dalam database terletak di satu server, beberapa di server lain, dll. Dalam kasus mata uang kripto, fungsi seperti itu masih cukup langka - khususnya, karena sulitnya menambahkan sharding ke sistem yang awalnya tidak direncanakan.

Bagaimana rencana TON untuk menyelesaikan kedua masalah di atas?

Konten blockchain. rantai kerja.

TON: Jaringan Terbuka Telegram. Bagian 2: Blockchain, sharding

Pertama-tama, mari kita bicara tentang apa yang rencananya akan disimpan di blockchain. Status akun (“dompet” dalam kasus dasar) dan kontrak pintar akan disimpan di sana (untuk mempermudah, kami berasumsi bahwa ini sama dengan akun). Intinya, ini akan menjadi tabel hash biasa - kunci di dalamnya akan menjadi pengidentifikasi ID Akun, dan nilai adalah struktur data yang berisi hal-hal seperti:

  • keseimbangan;
  • kode kontrak pintar (hanya untuk kontrak pintar);
  • penyimpanan data kontrak pintar (hanya untuk kontrak pintar);
  • statistik;
  • (opsional) kunci publik untuk transfer dari akun, secara default account_id;
  • antrian pesan keluar (di sini dimasukkan untuk diteruskan ke penerima);
  • daftar pesan terbaru yang dikirimkan ke akun ini.

Seperti disebutkan di atas, blok itu sendiri terdiri dari transaksi – pesan yang dikirimkan ke berbagai akun_id_akun. Namun, selain account_id, pesan juga berisi bidang 32-bit rantai kerja_id — yang disebut pengenal rantai kerja (rantai kerja, blockchain yang berfungsi). Hal ini memungkinkan Anda memiliki beberapa blockchain yang independen satu sama lain dengan konfigurasi berbeda. Dalam hal ini, workchain_id = 0 dianggap sebagai kasus khusus, rantai kerja nol — saldo di dalamnya akan sesuai dengan mata uang kripto TON (Gram). Kemungkinan besar, pada awalnya, rantai kerja lain tidak akan ada sama sekali.

rantai pecahan. Paradigma Sharding Tak Terbatas.

Namun pertumbuhan jumlah blockchain tidak berhenti di situ. Mari kita berurusan dengan sharding. Mari kita bayangkan bahwa setiap akun (account_id) dialokasikan pada blockchainnya sendiri - akun tersebut berisi semua pesan yang masuk ke akun tersebut - dan status semua blockchain tersebut disimpan pada node terpisah.

Tentu saja, ini sangat sia-sia: kemungkinan besar, pada masing-masing hal tersebut rantai pecahan (rantai pecahan, pecahan blockchain) transaksi akan sangat jarang tiba, dan banyak node yang kuat akan dibutuhkan (ke depan, saya perhatikan bahwa kita tidak hanya berbicara tentang klien di ponsel - tetapi tentang server yang serius).

Oleh karena itu, shardchains menggabungkan akun dengan awalan biner pengidentifikasinya: jika shardchain memiliki awalan 0110, maka itu akan mencakup transaksi semua account_id yang dimulai dengan angka-angka ini. Ini pecahan_awalan dapat memiliki panjang dari 0 hingga 60 bit - dan yang terpenting adalah dapat berubah secara dinamis.

TON: Jaringan Terbuka Telegram. Bagian 2: Blockchain, sharding

Segera setelah salah satu shardchain mulai menerima terlalu banyak transaksi, node yang mengerjakannya, sesuai dengan aturan yang telah ditentukan, “membaginya” menjadi dua anak - awalannya akan sedikit lebih panjang (dan untuk salah satu dari mereka, bit ini akan menjadi sama dengan 0, dan untuk lainnya - 1). Misalnya, pecahan_awalan = 0110b akan terpecah menjadi 01100b dan 01101b. Pada gilirannya, jika dua shardchain “bertetangga” mulai merasa cukup nyaman (untuk beberapa waktu), mereka akan bergabung kembali.

Jadi, sharding dilakukan “dari bawah ke atas” - kami berasumsi bahwa setiap akun memiliki shardnya sendiri, tetapi untuk saat ini mereka “direkatkan” dengan awalan. Inilah artinya Paradigma Sharding Tak Terbatas (paradigma sharding tak terbatas).

Secara terpisah, saya ingin menekankan bahwa rantai kerja hanya ada secara virtual - pada kenyataannya, rantai kerja_id itu adalah bagian dari pengidentifikasi rantai pecahan tertentu. Secara formal, setiap shardchain ditentukan oleh sepasang angka (rantai kerja_id, pecahan_awalan).

Koreksi kesalahan. Blockchain vertikal.

Secara tradisional, setiap transaksi pada blockchain dianggap “ditetapkan”. Namun, dalam kasus TON, dimungkinkan untuk "menulis ulang sejarah" - jika seseorang (yang disebut. simpul nelayan) akan membuktikan bahwa salah satu blok ditandatangani secara tidak benar. Dalam hal ini, blok koreksi khusus ditambahkan ke shardchain terkait, yang berisi hash dari blok itu sendiri yang sedang diperbaiki (dan bukan blok terakhir di shardchain). Memikirkan shardchain sebagai rantai blok yang ditata secara horizontal, kita dapat mengatakan bahwa blok korektif dipasang ke blok yang salah bukan di sebelah kanan, tetapi dari atas - sehingga dianggap menjadi bagian dari “blockchain vertikal” kecil. . Jadi, kita dapat mengatakan bahwa shardchains adalah blockchain dua dimensi.

TON: Jaringan Terbuka Telegram. Bagian 2: Blockchain, sharding

Jika, setelah blok yang salah, perubahan yang dilakukan direferensikan ke blok berikutnya (yaitu, transaksi baru dibuat berdasarkan blok yang tidak valid), transaksi korektif juga ditambahkan ke blok ini “di atas”. Jika blok tersebut tidak mempengaruhi informasi yang “terkena dampak”, maka “gelombang korektif” ini tidak berlaku untuk informasi tersebut. Misalnya pada ilustrasi di atas, transaksi blok pertama penambahan saldo akun C dianggap salah - oleh karena itu, transaksi penurunan saldo akun ini di blok ketiga juga harus dibatalkan, dan blok korektif harus dilakukan di atas blok itu sendiri.

Perlu dicatat bahwa meskipun blok korektif digambarkan terletak “di atas” blok asli, pada kenyataannya blok tersebut akan ditambahkan ke akhir blockchain yang sesuai (yang seharusnya berada secara kronologis). Lokasi dua dimensi hanya menunjukkan ke titik mana di blockchain mereka akan “ditautkan” (melalui hash dari blok asli yang terletak di dalamnya).

Anda dapat berfilsafat secara terpisah tentang betapa bagusnya keputusan untuk “mengubah masa lalu”. Tampaknya jika kita mengakui kemungkinan munculnya blok yang salah di shardchain, maka kita tidak dapat menghindari kemungkinan munculnya blok korektif yang salah. Di sini, sejauh yang saya tahu, perbedaannya terletak pada jumlah node yang harus mencapai konsensus mengenai blok baru - akan ada sejumlah kecil orang yang bekerja pada setiap shardchain."kelompok kerja» node (yang cukup sering mengubah komposisinya), dan penerapan blok korektif memerlukan persetujuan semua orang node validator. Saya akan membahas lebih lanjut tentang validator, kelompok kerja, dan peran node lainnya di artikel berikutnya.

Satu blockchain untuk mengatur semuanya

Ada banyak informasi yang tercantum di atas tentang berbagai jenis blockchain, yang juga harus disimpan di suatu tempat. Secara khusus, kita berbicara tentang informasi berikut:

  • tentang jumlah dan konfigurasi rantai kerja;
  • tentang jumlah rantai pecahan dan awalannya;
  • tentang node mana yang saat ini bertanggung jawab atas shardchain yang mana;
  • hash dari blok terakhir ditambahkan ke semua shardchain.

Seperti yang sudah Anda duga, semua hal ini dicatat di penyimpanan blockchain lain - rantai utama (rantai utama, menguasai blockchain). Karena adanya hash dari blok semua shardchain di bloknya, membuat sistem menjadi sangat terhubung. Artinya, antara lain, pembuatan blok baru di masterchain akan terjadi segera setelah pembuatan blok di shardchains - diharapkan blok di shardchains akan muncul hampir bersamaan kira-kira setiap 5 detik, dan blok berikutnya di shardchains akan muncul hampir secara bersamaan, kira-kira setiap XNUMX detik, dan blok berikutnya di shardchains. masterchain - sedetik setelah itu.

Namun siapa yang akan bertanggung jawab atas implementasi semua pekerjaan besar ini - untuk mengirim pesan, mengeksekusi kontrak pintar, membentuk blok di shardchains dan masterchain, dan bahkan memeriksa kesalahan blok? Akankah semua ini dilakukan secara diam-diam oleh ponsel jutaan pengguna yang telah menginstal klien Telegram di dalamnya? Atau mungkin tim Durov akan meninggalkan gagasan desentralisasi dan server mereka akan melakukannya dengan cara lama?

Faktanya, tidak satu pun jawaban yang benar. Namun margin artikel ini segera habis, jadi kita akan membahas berbagai peran node (Anda mungkin sudah memperhatikan penyebutan beberapa di antaranya), serta mekanisme kerjanya, di bagian selanjutnya.

Sumber: www.habr.com

Tambah komentar