Memperkenalkan Aliran MultiChain

Node Sumber: 1213525

Untuk basis data nilai kunci dan deret waktu yang tidak dapat diubah

Hari ini kami dengan bangga merilis versi terbaru MultiChain, yang mengimplementasikan sekumpulan fungsionalitas baru yang penting yang disebut "stream". Stream menyediakan abstraksi alami untuk kasus penggunaan blockchain yang berfokus pada pengambilan data umum, stempel waktu, dan pengarsipan, daripada transfer aset antar peserta. Aliran dapat digunakan untuk mengimplementasikan tiga jenis database yang berbeda pada sebuah rantai:

  1. Database nilai kunci atau penyimpanan dokumen, dengan gaya NoSQL.
  2. Database deret waktu, yang berfokus pada pengurutan entri.
  3. Database berbasis identitas tempat entri diklasifikasikan menurut penulisnya.

Ini dapat dianggap sebagai 'apa', 'kapan' dan 'siapa' dari database bersama.

Dasar-dasar streaming

Sejumlah aliran dapat dibuat dalam blockchain MultiChain, dan setiap aliran bertindak sebagai kumpulan item independen yang hanya dapat ditambahkan. Setiap item dalam aliran memiliki karakteristik sebagai berikut:

  • Satu atau lebih penerbit yang telah menandatangani item itu secara digital.
  • Opsional kunci untuk pengambilan nanti yang nyaman.
  • Beberapa data, yang dapat berkisar dari sepotong kecil teks hingga banyak megabyte biner mentah.
  • A timestamp, yang diambil dari tajuk blok tempat item tersebut dikonfirmasi.

Di balik layar, setiap item dalam aliran diwakili oleh transaksi blockchain, tetapi pengembang dapat membaca dan menulis aliran tanpa menyadari mekanisme yang mendasari ini. (Pengguna yang lebih mahir dapat menggunakan transaksi mentah untuk menulis ke beberapa aliran, menerbitkan atau mentransfer aset dan / atau menetapkan izin dalam satu transaksi atom.)

Aliran terintegrasi dengan sistem izin MultiChain dalam beberapa cara. Pertama, aliran hanya dapat dibuat oleh mereka yang memiliki izin untuk melakukannya, dengan cara yang sama seperti aset hanya dapat diterbitkan oleh alamat tertentu. Ketika aliran dibuat, itu terbuka atau tertutup. Aliran terbuka dapat ditulisi oleh siapa saja yang memiliki izin untuk mengirim transaksi blockchain, sementara aliran tertutup dibatasi untuk daftar alamat yang diizinkan yang dapat diubah. Dalam kasus terakhir, setiap aliran memiliki satu atau beberapa administrator yang dapat mengubah izin menulis tersebut dari waktu ke waktu.

Setiap blockchain memiliki aliran 'root' opsional, yang ditentukan di dalamnya parameter dan ada sejak rantai dibuat. Ini memungkinkan blockchain untuk segera digunakan untuk menyimpan dan mengambil data, tanpa menunggu aliran dibuat secara eksplisit.

Seperti aku dibahas sebelumnya, kerahasiaan adalah tantangan terbesar dalam sejumlah besar kasus penggunaan blockchain. Ini karena setiap node dalam blockchain melihat salinan lengkap dari seluruh konten rantai. Stream menyediakan cara alami untuk mendukung data terenkripsi di blockchain, sebagai berikut:

  1. Satu aliran digunakan oleh peserta untuk mendistribusikan kunci publik mereka untuk skema kriptografi kunci publik apa pun.
  2. Aliran kedua digunakan untuk mempublikasikan data, di mana setiap bagian data dienkripsi menggunakan kriptografi simetris dengan kunci unik.
  3. Aliran ketiga menyediakan akses data. Untuk setiap peserta yang akan melihat sepotong data, entri aliran dibuat yang berisi kunci rahasia data tersebut, dienkripsi menggunakan kunci publik peserta tersebut.

Ini menyediakan cara yang efisien untuk mengarsipkan data di blockchain, sekaligus membuatnya hanya terlihat oleh peserta tertentu.

Mengambil dari aliran

Nilai inti aliran ada dalam pengindeksan dan pengambilan. Setiap node dapat memilih streaming mana yang akan dilanggan, dengan blockchain menjamin bahwa semua node yang berlangganan aliran tertentu akan melihat item yang sama di dalamnya. (Node juga dapat dikonfigurasi untuk secara otomatis berlangganan ke setiap aliran baru yang dibuat.)

Jika node berlangganan aliran, informasi dapat diambil dari aliran itu dengan beberapa cara:

  • Mengambil item dari arus secara berurutan.
  • Mengambil item dengan kunci tertentu.
  • Mengambil item yang ditandatangani oleh penerbit tertentu.
  • Mencantumkan kunci yang digunakan dalam aliran, dengan jumlah item untuk setiap kunci.
  • Mencantumkan penerbit di aliran, dengan jumlah item.

Seperti yang disebutkan di awal, metode pengambilan ini memungkinkan aliran digunakan untuk database nilai kunci, database deret waktu dan database berbasis identitas. Semua API pengambilan menawarkan awal dan menghitung parameter, memungkinkan subbagian dari daftar panjang untuk diambil secara efisien (seperti klausa LIMIT dalam SQL). Nilai negatif untuk awal memungkinkan item terbaru untuk diambil.

Stream dapat berisi banyak item dengan kunci yang sama, dan ini secara alami menyelesaikan ketegangan antara kekekalan blockchain dan kebutuhan untuk memperbarui database. Setiap 'entri' database yang efektif harus diberi kunci unik dalam aplikasi Anda, dengan setiap pembaruan ke entri tersebut diwakili oleh item aliran baru dengan kuncinya. API pengambilan aliran MultiChain kemudian dapat digunakan untuk: (a) mengambil versi pertama atau terakhir dari entri yang diberikan, (b) mengambil riwayat versi lengkap untuk entri, (c) mengambil informasi tentang beberapa entri, termasuk yang pertama dan terakhir versi masing-masing.

Perhatikan bahwa karena arsitektur peer-to-peer blockchain, item dalam aliran dapat tiba di node yang berbeda dalam pesanan yang berbeda, dan MultiChain memungkinkan item untuk diambil sebelum 'dikonfirmasi' dalam sebuah blok. Akibatnya, semua API pengambilan menawarkan pilihan antara global (default) atau pemesanan lokal. Pengurutan global menjamin bahwa, setelah rantai mencapai konsensus, semua node menerima respons yang sama dari panggilan API yang sama. Pemesanan lokal menjamin bahwa, untuk node tertentu mana pun, urutan item aliran tidak akan pernah berubah di antara panggilan API. Setiap aplikasi dapat membuat pilihan yang sesuai dengan kebutuhannya.

Streams dan roadmap MultiChain

Dengan dirilisnya aliran, kami telah menyelesaikan pekerjaan besar terakhir untuk MultiChain 1.0, dan sekarang berada di jalur beta. Kami berharap untuk menghabiskan beberapa bulan ke depan memperluas rangkaian pengujian internal kami (sudah cukup besar!), Menyelesaikan port Windows dan Mac, menambahkan beberapa API yang lebih berguna, memperbarui Penjelajah untuk streaming, mengubah aspek mekanisme konsensus, merilis demo web kami, dan secara umum merapikan kode dan pesan bantuan. Yang terpenting, kami akan terus memperbaiki bug apa pun segera setelah ditemukan, sehingga kesalahan kami tidak mengganggu pekerjaan Anda.

Dalam jangka panjang, di manakah aliran cocok dengan roadmap MultiChain? Mundur selangkah, MultiChain sekarang menawarkan tiga area fungsionalitas tingkat tinggi:

  • izin untuk mengontrol siapa yang dapat terhubung, bertransaksi, membuat aset / aliran, menambang / memvalidasi dan mengatur.
  • Aktiva termasuk penerbitan, penerbitan kembali, transfer, pertukaran atom, escrow dan penghancuran.
  • Streaming dengan API untuk membuat aliran, menulis, berlangganan, mengindeks, dan mengambil.

Setelah rilis MultiChain 1.0 (dan versi premium), apa selanjutnya dalam daftar ini? Jika Anda melihat file Perintah API yang digunakan untuk membuat aliran, Anda akan melihat parameter yang tampaknya tidak berguna, dengan nilai tetap stream. Parameter ini akan memungkinkan MultiChain mendukung jenis entitas tingkat tinggi lainnya di masa mendatang.

Nilai masa depan yang mungkin untuk parameter termasuk evm (untuk sebuah Ethereummesin virtual -compatible), sql (untuk database gaya SQL) atau bahkan wiki (untuk teks yang diedit secara kolaboratif). Setiap entitas bersama yang statusnya ditentukan oleh serangkaian perubahan yang teratur merupakan kandidat potensial. Setiap entitas tersebut akan membutuhkan: (a) API yang menyediakan abstraksi yang tepat untuk memperbarui statusnya, (b) mekanisme yang sesuai untuk node langganan untuk melacak status tersebut, dan (c) API untuk mengambil sebagian atau seluruh status secara efisien. Kami menunggu untuk mempelajari entitas tingkat tinggi lainnya yang paling berguna, untuk diterapkan oleh kami atau oleh pihak ketiga melalui arsitektur plug-in.

Bagaimana dengan kontrak pintar?

Secara umum, MultiChain mengambil pendekatan di mana data tertanam secara permanen dalam blockchain, tetapi kode untuk menafsirkan bahwa data ada di node atau lapisan aplikasi. Ini sengaja berbeda dari paradigma "kontrak pintar", seperti yang dicontohkan oleh Ethereum, di mana kode disematkan di blockchain dan dijalankan di mesin virtual. Secara teori, karena kontrak pintar Turing lengkap, mereka dapat mereproduksi perilaku MultiChain atau platform blockchain lainnya. Namun, dalam praktiknya, kontrak pintar bergaya Ethereum memiliki banyak kekurangan yang menyakitkan:

  • Setiap node harus melakukan setiap komputasi, baik itu menarik atau tidak. Sebaliknya, di MultiChain setiap node memutuskan aliran mana yang akan dilanggan, dan dapat mengabaikan data yang dimuat oleh orang lain.
  • Mesin virtual yang digunakan untuk kontrak pintar memiliki kinerja yang jauh lebih buruk daripada kode yang telah dikompilasi secara native untuk arsitektur komputer tertentu.
  • Kode kontrak pintar tetap tertanam dalam rantai, mencegah fitur ditambahkan dan bug diperbaiki. Ini ditunjukkan dengan paksa di matinya DAO.
  • Transaksi dikirim ke kontrak pintar tidak dapat memperbarui keadaan blockchain sampai pemesanan akhirnya diketahui, karena sifat penghitungan tujuan umum. Hal ini menyebabkan penundaan (sampai transaksi dikonfirmasi dalam satu blok) serta kemungkinan pembalikan (jika terjadi percabangan dalam rantai). Sebaliknya, MultiChain dapat memperlakukan setiap jenis transaksi yang belum dikonfirmasi dengan cara yang tepat: (a) aset yang masuk segera memperbarui saldo node yang belum dikonfirmasi, (b) item aliran masuk langsung tersedia, dengan pemesanan globalnya kemudian diselesaikan, (c) perubahan izin diterapkan segera dan kemudian diputar ulang di blok yang masuk.

Meskipun demikian, seperti saya katakan sebelumnya, kami tentu tidak mengesampingkan kontrak pintar sebagai paradigma yang berguna untuk aplikasi blockchain, jika dan ketika kami melihat kasus penggunaan yang kuat. Namun, dalam kontrak pintar MultiChain akan diimplementasikan di lapisan seperti aliran di atas blockchain, bukan di tingkat transaksi terendah. Ini akan mempertahankan kinerja superior MultiChain untuk entitas blockchain yang lebih sederhana seperti aset dan aliran, sambil menawarkan komputasi on-chain yang lebih lambat di tempat yang benar-benar dibutuhkan. Tetapi kasus seperti itu lebih sedikit daripada yang mungkin Anda pikirkan.

 

Silakan kirim komentar di LinkedIn.

 

Tambahan teknis

Semua perintah yang terkait dengan aliran didokumentasikan secara lengkap di Halaman MultiChain API, tapi berikut ringkasan singkatnya:

  • Buat aliran menggunakan create stream or createfrom ... stream
  • Tambahkan item ke aliran dengan publish or publishfrom
  • Ambil daftar aliran menggunakan liststreams
  • Mulai atau hentikan pelacakan streaming dengan subscribe dan unsubscribe
  • Ambil item aliran menggunakan liststreamitems, liststreamkeyitems dan liststreampublisheritems
  • Buat daftar kunci streaming dan penerbit dengan liststreamkeys dan liststreampublishers
  • Untuk item aliran besar, ambil data lengkap menggunakan gettxoutdata (Lihat maxshowndata bawah)
  • Kontrol izin per streaming dengan panggilan seperti grant [address] stream1.write
  • Lihat izin streaming menggunakan listpermissions stream1.*

Beberapa catatan pengembang lain yang berkaitan dengan aliran:

  • Grafik create izin memungkinkan alamat untuk membuat aliran.
  • Izin per aliran yang relevan adalah write, admin dan activate
  • New parameter blockchain: root-stream-name (biarkan kosong untuk tidak ada), root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • New parameter runtime: autosubscribe untuk secara otomatis berlangganan aliran baru yang dibuat dan maxshowndata untuk membatasi jumlah data dalam tanggapan API (lihat gettxoutdata atas).
  • Ukuran maksimum data item aliran ditetapkan oleh max-std-op-return-size parameter blockchain, serta yang lebih kecil dari maximum-block-size dan max-std-tx-size nilai minus beberapa ratus byte.
  • Node yang menggunakan format dompet lama tidak dapat berlangganan aliran, dan harus ditingkatkan.

 

Stempel Waktu:

Lebih dari Multichain