MultiChain 1.0 beta 2 dan 2.0 roadmap

Node Sumber: 1742567

Di mana kita hari ini dan di mana kita pergi besok

Hari ini kami dengan senang hati merilis MultiChain 1.0 beta kedua untuk Linux, Windows dan Mac (untuk saat ini versi Mac membutuhkan kompilasi). Ini menyimpulkan pengembangan yang direncanakan dari MultiChain 1.0 - dengan pengecualian dari setiap perbaikan bug, rilis final MultiChain 1.0 selama musim panas tidak akan berubah.

Bulan ini juga menandai dua tahun sejak rilis alpha pertama MultiChain pada Juni 2015. Seperti halnya produk baru, kami tidak yakin bagaimana pasar akan bereaksi, dan tahu hanya ada satu cara untuk mengetahuinya - merilis produk minimum yang layak, yang berarti versi awal yang memberikan nilai signifikan tetapi pendahuluan oleh desain. Untungnya, tidak seperti produk pertama kami KoinSpark, MultiChain menerima tanggapan positif yang kuat dan langsung. Ini disertai dengan tsunami permintaan fitur yang masuk akal, banyak di antaranya sekarang telah kami terapkan. Sejalan dengan pengembangan produk, penggunaan juga telah tumbuh luar biasa di setiap ukuran. Misalnya, situs web MultiChain menerima kurang dari 3,000 pengunjung pada Juli 2015, dan sekarang menghasilkan sepuluh kali lipat dari jumlah tersebut setiap bulan.

Kinerja MultiChain

Selama dua tahun terakhir kami telah menginvestasikan banyak upaya dalam mengoptimalkan MultiChain, yang merupakan percabangan dari Bitcoin Core, implementasi referensi untuk jaringan bitcoin publik. Di bawah ini adalah perbandingan throughput transaksi untuk pengaturan node tunggal menggunakan lima versi produk:

.throughput td,.throughput th {text-align:right;}
Total transaksi 1.0 alfa 3 1.0 alfa 21 1.0 alfa 22 1.0 1 beta 1.0 2 beta
100 6.5 tps 7.8 541.7 830.6 1465.7
1,000 7.0 7.6 583.9 889.4 1199.6
10,000 4.1 6.4 566.9 746.6 1071.2
100,000 - 6.6 558.0 771.9 1034.2
1,000,000 - - 548.6 773.6 1055.4

Transaksi rata-rata per detik, termasuk overhead dan bangunan API, penandatanganan, penambangan, dan verifikasi transaksi dan blokir.
Tes dilakukan menggunakan ab Alat pembandingan server HTTP mengirim dua permintaan bersamaan ke sendtoaddress API.
Spesifikasi server: Intel Core i7-4770, 4 core @ 3.4 MHz, RAM 32 GB, Seagate 2 TB 7200 RPM SATA, CentOS 6.4.

Secara alami, lompatan terbesar datang pada alpha 22 ketika kita dialihkan ke dompet yang digerakkan oleh basis data. Tapi sejak rilis itu, kami hampir menggandakan kecepatan MultiChain lagi. Kami berharap kami telah menunjukkan bahwa batas bitcoin 4 transaksi per detik adalah karena parameter jaringan tertentu, dan tidak memiliki hubungan dengan blockchains secara umum.

Tentu saja, optimalisasi kinerja adalah tugas yang tidak pernah berakhir, dan tidak ada alasan mengapa MultiChain tidak dapat mencapai 10,000 tx / detik pada suatu Prosesor 16-core dengan perubahan arsitektur yang sesuai. Namun, berdasarkan percakapan dengan pengguna dan mitra kami, tampaknya hanya sedikit yang berharap akan membutuhkan lebih dari 1,000 tx / detik untuk beberapa tahun ke depan. Jadi kami memfokuskan kembali upaya pengembangan kami pada fitur baru, yang membawa kami dengan baik ke subjek MultiChain 2.0.

Ikhtisar MultiChain 2.0

Versi 2.0 dari MultiChain akan menjadi yang pertama dalam dua edisi - Komunitas (open source) dan Enterprise (komersial). Saya akan fokus di sini pada edisi Komunitas gratis, karena kami hanya membahas detail MultiChain Enterprise dengan mitra kami. Dalam hal apa pun, edisi Komunitas dan Perusahaan akan sangat kompatibel, yaitu: (a) aplikasi yang dibangun pada edisi Komunitas akan berjalan tanpa modifikasi pada MultiChain Enterprise, dan (b) kedua edisi akan dapat terhubung dan bertransaksi satu sama lain pada rantai yang sama.

Tiga bidang utama fungsionalitas yang disempurnakan di kedua edisi MultiChain 2.0 adalah:

  • Model data yang lebih kaya untuk streaming, termasuk dokumen JSON.
  • Filter transaksi terprogram khusus untuk validasi on-chain.
  • Pembaruan mulus dari protokol dan parameter blockchain.

Mari kita membahas masing-masing secara terperinci.

Model data yang lebih kaya untuk streaming

Aliran MultiChain diperkenalkan pada September 2016 dan telah terbukti sangat populer. Seperti dijelaskan dalam posting ini, stream menyediakan abstraksi sederhana dan alami untuk penyimpanan, pengindeksan, dan pengambilan data keperluan umum pada blockchain. Blockchain MultiChain dapat berisi sejumlah aliran bernama, masing-masing dapat dibuka untuk semua untuk ditulis, atau hanya dapat ditulis dari alamat tertentu.

Di MultiChain 1.0, setiap item aliran memiliki satu atau lebih penerbit (yang menandatanganinya), kunci opsional, muatan data biner hingga 64 MB, dan cap waktu (berasal dari blok tempat tertanamnya). Setiap node dapat dengan bebas memutuskan aliran mana yang berlangganan, atau dapat berlangganan semua aliran secara otomatis. Jika sebuah node berlangganan aliran, itu mengindeks konten aliran itu secara real time, memungkinkan pengambilan efisien oleh penerbit, kunci, blokir, cap waktu atau posisi.

MultiChain 2.0 akan memperkaya fungsionalitas stream ini dalam sejumlah cara:

  • Item JSON. Selain data biner, item aliran akan mendukung objek JSON terstruktur, disimpan di blockchain dalam format serialisasi yang efisien seperti UBJSON. Karena MultiChain API sudah menggunakan JSON di seluruh, objek JSON ini akan dapat ditulis dan dibaca dengan cara alami dan jelas.
  • Beberapa kunci. Item aliran akan mendukung banyak kunci, memungkinkan satu bagian data diindeks dengan berbagai cara untuk pengambilan menggunakan liststreamkeyitems. Kami terus-menerus mengevaluasi seberapa banyak fungsionalitas basis data untuk disertakan dalam MultiChain, dan jangan berharap untuk mendukung pengindeksan sub-elemen dalam item aliran JSON di versi 2.0. Mengizinkan beberapa kunci per item aliran memberikan solusi yang masuk akal.
  • Atomic menulis banyak item. MultiChain 1.0 memungkinkan transaksi tunggal untuk menulis ke beberapa aliran, tetapi tidak untuk menulis beberapa item ke aliran yang sama. MultiChain 2.0 akan menghapus batasan ini.
  • Penggabungan JSON. Daftar objek JSON yang diurutkan dapat secara alami diratakan atau dirangkum untuk membuat objek "digabung". Objek yang digabungkan berisi semua kunci yang muncul di objek individu, di mana nilai yang sesuai untuk setiap kunci diambil dari objek terakhir di mana kunci itu muncul. Jika Anda suka, objek yang digabungkan adalah keadaan akhir baris database, yang kolomnya ditentukan oleh objek pertama dan diperluas atau diperbarui oleh objek yang lebih baru. MultiChain 2.0 akan menambahkan API untuk dengan mudah dan cepat mengambil objek yang digabungkan untuk item JSON dalam aliran dengan kunci atau penerbit tertentu.

Fitur-fitur ini berasal dari cara umum di mana pengembang saat ini menggunakan stream. Dengan kata lain, kami mengamati apa yang sedang dibangun oleh banyak orang di atas MultiChain di tingkat aplikasi, dan membawa fungsionalitas itu ke dalam MultiChain itu sendiri - sebuah pola yang kami ingin terus terapkan. Sekarang item aliran akan menyertakan informasi jenis, mereka dapat dengan mudah diperluas di masa depan untuk mendukung format data lain seperti XML, HDF5 dan PANTOMIMkonten yang teridentifikasi. Belum lagi kemungkinan kompresi dan enkripsi on-chain yang transparan.

MultiChain 2.0 juga akan mendukung objek JSON untuk metadata transaksi mentah (yaitu bukan item streaming) serta metadata untuk peristiwa penerbitan aset dan pembuatan aliran, alih-alih pasangan kunci / nilai teks saja yang diterapkan di MultiChain 1.0. Itu listassets API akan menawarkan penggabungan JSON di semua acara penerbitan aset, sehingga setiap metadata penerbitan dapat secara efektif memperbarui deskripsi akhir aset.

Filter transaksi khusus

Kami telah memikirkan banyak hal tentang cara menambahkan aturan terprogram khusus ke MultiChain. Sementara paradigma “kontrak pintar” Ethereum sangat populer, paradigma ini memiliki sejumlah kelemahan utama untuk blockchain yang diizinkan dengan throughput tinggi. Pertama, kontrak pintar memperkenalkan ketergantungan global di seluruh negara blockchain, yang secara drastis merusak konkurensi dan kinerja. Kedua, kontrak pintar tidak dapat menghentikan transaksi yang salah dari tertanam dalam blockchain, tetapi hanya mencegah transaksi tersebut memperbarui keadaan database blockchain. Sementara dalam jangka panjang kami mengharapkan mesin virtual yang kompatibel dengan Ethereum ditawarkan sebagai abstraksi tingkat tinggi dalam MultiChain, kami tidak berpikir itu solusi yang tepat untuk validasi tingkat rendah.

MultiChain 2.0 akan memperkenalkan paradigma yang berbeda yang disebut filter transaksi, yang memvalidasi transaksi individu tanpa referensi ke negara global mana pun. Kami berharap filter ditulis dalam Javascript dan dieksekusi dalam mesin runtime tertanam seperti v8, yang digunakan di Google Chrome browser dan Node.js peron. Tentu saja, kita perlu memastikan bahwa kode filter berjalan secara identik pada setiap node dalam blockchain, memblokir apa pun sumber non-determinisme seperti membaca waktu, menggunakan angka acak, mengakses jaringan atau disk, atau melakukan operasi matematika yang bergantung pada arsitektur server host. Menciptakan lingkungan runtime Javascript deterministik adalah sebuah tantangan, tetapi (tanpa memberikan terlalu banyak) kami yakin ini akan berguna untuk beberapa fitur MultiChain lainnya di masa mendatang.

Filter akan melewati objek JSON yang menggambarkan transaksi individual, terstruktur seperti keluaran decoderawtransaction tetapi dengan bidang tambahan. Misalnya, setiap input transaksi di JSON akan mencakup struktur yang menggambarkan output transaksi sebelumnya yang dihabiskannya, dan setiap alamat akan disertai dengan daftar izin yang saat ini dipegang oleh alamat itu. Pekerjaan filter adalah mengembalikan nilai Boolean yang menunjukkan apakah transaksi dapat diterima dan jika tidak, berikan kesalahan tekstual yang menjelaskan alasannya. API MultiChain akan mencakup perintah untuk membuat filter, mengujinya pada transaksi sebelumnya atau baru, dan mengaktifkannya tergantung pada konsensus administrator.

Tidak seperti kontrak pintar, jika bug ditemukan dalam kode untuk filter, bug dapat dengan mudah diganti oleh versi baru. Meskipun demikian, seperti semua kode Turing-lengkap, filter masih berisiko memasuki loop tak terbatas. Masalah ini akan dimitigasi dengan dua cara:

  • Filter hanya dapat diinstal dan diaktifkan oleh administrator rantai, tergantung pada konsensus. Ini memberi setiap administrator kesempatan untuk memeriksa kode filter secara mendalam sebelum memberikan suara untuk diaktifkan.
  • Semua node berperilaku baik akan memvalidasi transaksi baru menggunakan filter aktif sebelum meneruskannya ke peer node mereka. Akibatnya, jika transaksi mengirim filter ke infinite loop, transaksi tidak boleh merambat di luar simpul yang membuatnya.

Kami mengharapkan satu aplikasi populer untuk filter untuk memvalidasi item aliran. Misalnya, filter dapat memastikan bahwa bidang tertentu dalam item JSON aliran berisi angka dalam rentang tertentu. Dalam MultiChain 1.0, jenis validasi ini harus dilakukan di tingkat aplikasi, baik saat menulis item streaming (jika sumbernya dipercaya) atau saat membacanya. Sebaliknya, MultiChain 2.0 akan memungkinkan aturan-aturan ini tertanam di dalam blockchain itu sendiri, lebih tepatnya periksa kendala dalam database relasional.

MultiChain 2.0 akan menyertakan dua fitur tambahan untuk membuat filter lebih kuat. Pertama, itu akan memperkenalkan izin yang ditentukan pengguna, yang ada di samping delapan izin yang ditentukan oleh MultiChain. Seperti halnya izin reguler, ini akan diberikan ke alamat khusus oleh administrator (dan dalam beberapa kasus, oleh pengguna dengan activate hak istimewa) dan disertakan bersama alamat dalam objek JSON yang diteruskan ke filter. Misalnya, filter dapat memastikan bahwa hanya alamat dengan izin yang ditentukan pengguna tertentu yang dapat menulis jenis data tertentu ke aliran, atau bertransaksi dalam aset tertentu di atas ambang tertentu.

Kedua, MultiChain 2.0 akan mendukung metadata khusus (biner atau JSON) dalam output transaksi reguler. Ini akan memungkinkan output apa pun untuk bertindak sebagai baris basis data umum, "dimiliki" oleh alamat di dalamnya. Filter akan melihat metadata apa pun dalam pengeluaran yang dikeluarkan dan dibuat sebagai bagian dari deskripsi JSON. Sebagai hasilnya, MultiChain akan menjadi mesin basis data universal yang universal, di mana validitas transaksi ditentukan oleh fungsi yang dapat disesuaikan dari baris yang dibuat dan dihapusnya. (Jika ini terdengar agak abstrak, kami pasti akan memberikan beberapa contoh nyata.)

Pembaruan blockchain

Karena blockchain dirancang untuk berjalan selama bertahun-tahun, karakteristiknya mungkin perlu diubah seiring waktu. Versi MultiChain saat ini telah memberikan tingkat fleksibilitas yang adil, memungkinkan perubahan izin (termasuk administrator dan penambang berdasarkan konsensus), aset dan aliran baru yang akan dibuat, dan node yang ditambahkan atau dihapus dari jaringan tanpa hambatan. Meskipun demikian, dalam MultiChain 1.0 dasar blockchain parameter, seperti ukuran blok maksimum dan waktu konfirmasi target, ditetapkan ketika rantai dibuat dan selanjutnya tidak dapat diubah.

MultiChain 2.0 akan menambahkan kemampuan untuk memperbarui blockchain, memungkinkan banyak (tetapi tidak semua) parameternya untuk dimodifikasi sementara rantai terus berjalan. Seperti operasi penting lainnya, memperbarui blockchain akan memerlukan tingkat konsensus administrator yang dapat disesuaikan, di mana level ini sendiri merupakan parameter yang dapat diubah. Pembaruan akan mulai berlaku dari blok tertentu, dan berlaku untuk setiap blok berikutnya hingga pembaruan berikutnya.

Parameter Blockchain yang dapat diperbarui akan mencakup:

  • Versi protokol. Ini akan memungkinkan blockchain yang dibuat dengan satu versi MultiChain untuk ditingkatkan untuk mendukung fitur dalam versi baru, seperti item aliran JSON atau filter transaksi. Memang, versi protokol 10008 diperkenalkan di MultiChain 1.0 alpha 29 (dan digunakan dalam versi beta) telah terbukti di masa depan dengan dukungan tidak berdokumen untuk jenis peningkatan ini. Setelah blockchain MultiChain 1.0 ditingkatkan ke protokol 2.0, itu juga akan mendapatkan akses ke perubahan parameter lain yang dijelaskan di sini.
  • Penskalaan blockchain. Blokir yang menjadi populer dapat melebihi nilai awal yang ditetapkan untuk waktu konfirmasi target mereka atau transaksi maksimum dan ukuran blokir. MultiChain 2.0 akan memungkinkan nilai-nilai ini ditingkatkan atau diturunkan seperlunya.
  • Model perizinan. MultiChain 2.0 akan memungkinkan pembaruan banyak parameter yang berkaitan dengan perizinan dan tata kelola, termasuk: (a) anyone-can-* parameter yang mengontrol cara di mana blockchain terbuka atau tertutup, (b) admin-consensus-* parameter yang menentukan tingkat konsensus administrator yang diperlukan untuk operasi tertentu, dan (c) mining-diversity parameter yang mengontrol ketatnya algoritma konsensus round-robin.

Setelah fungsi pemutakhiran ini diterapkan, seharusnya tidak ada alasan mengapa blockchain yang dibuat di MultiChain tidak dapat berjalan selama beberapa dekade atau lebih.

Melihat ke depan

Kami sudah mulai mengerjakan MultiChain 2.0, dan melihat ke depan untuk menyampaikan peta jalan ini. Tidak diragukan lagi peningkatan lainnya akan disertakan juga. Seperti dengan MultiChain 1.0, kami akan memiliki rilis alpha di sepanjang jalan, sehingga pengembang dapat menggunakan dan mempelajari fitur-fitur baru ketika mereka diterapkan (dan tentu saja, melaporkan masalah atau kekurangan). Secara alami, kami akan terus mempertahankan versi 1.0 sepanjang periode ini, memperbaiki semua bug yang muncul.

Saya ingin menyelesaikannya dengan berterima kasih kepada tim pengembangan kami, yang dipimpin oleh Dr Michael Rozantsev, atas keunggulan dan kerja keras mereka. Kami melihat MultiChain sebagai proyek rekayasa perangkat lunak secara langsung, di mana kualitas kode dan pengujian sangat penting. Merupakan hak istimewa saya untuk bekerja dengan orang-orang yang dapat mengubah visi produk yang kompleks menjadi perangkat lunak yang stabil dengan efisiensi dan kecepatan yang luar biasa.

Silakan kirim komentar di LinkedIn.

Stempel Waktu:

Lebih dari Multichain