Inti dari kerangka kerja kami untuk mengembangkan blockchain Exonum pribadi ditulis dalam Rust, karena PL ini difokuskan pada keamanan bekerja dengan memori. Namun, bersama dengan banyak keuntungan, Rust memiliki sejumlah fitur yang menyulitkan "interaksi" dengannya: sintaksnya tidak biasa bagi banyak pengembang, dan ambang masuknya cukup tinggi.
Untuk menyederhanakan pekerjaan dengan platform Exonum dan membuatnya lebih mudah diakses oleh audiens, kami memutuskan untuk menulis perpustakaan yang mengikat. Bahasa untuk mengikat telah menjadi Java.
Mengapa kami memilih Jawa, kami beritahukan di bawah kucing.
/ EksonumBeberapa kata tentang Exonum
Exonum adalah kerangka kerja open source kami untuk mengembangkan blockchains pribadi. Blockchain di Exonum jauh lebih cepat daripada blockchain publik dan mampu memproses hingga 5 ribu transaksi per detik. Sebagai perbandingan, dalam Ethereum angka ini
beberapa lusin , sementara Bitcoin memilikinya lebih
sedikit .
Exonum menggunakan algoritma konsensus Bizantium untuk melindungi data. Itu tidak memerlukan penambangan dan
menjamin eksekusi transaksi yang benar, bahkan jika sepertiga dari node jaringan dikompromikan.
Platform Exonum dapat digunakan di segala bidang: keuangan, teknologi, hukum. Secara khusus, kerangka kerja ini cocok untuk menciptakan sistem manajemen hak digital (demo dapat
ditemukan di situs web resmi ) dan mengatur pemilihan (
demo ). Dalam kedua kasus, semua proses yang terjadi adalah setransparan mungkin dan dilindungi oleh mekanisme kriptografi.
Tahun lalu, menggunakan platform Exonum, State Land Cadastre of Ukraina diimplementasikan. Dan sebelum itu, sebuah proyek pengelolaan lahan di Georgia diluncurkan di Exonum. Kami
juga bernegosiasi dengan puluhan perusahaan Fortune 500 dan Uni Eropa untuk menerapkan sistem kami dalam proses bisnis mereka.
Inti dari Exonum ditulis dalam Rust. Pilihan ini dibenarkan oleh fakta bahwa PL ini berfokus pada keamanan dan kecepatan - ini bekerja lebih cepat pada beberapa tugas daripada Java, Go, C dan C ++. Pada saat yang sama, Rust menjamin keamanan memori dan
mencegah balapan ketika dua utas mencoba mengakses data yang sama.
Compiler Rust dirancang untuk
meminimalkan jumlah bug yang disebabkan oleh pengaruh faktor manusia. Misalnya, menghilangkan beberapa kelas kesalahan dengan mengorbankan konsep seumur hidup dan kepemilikan.
Semua nilai di Rust memiliki "domain kepemilikan." Ketika sebuah nama melampaui lingkup ini, sumber daya yang terkait dibebaskan. Berikut adalah satu contoh kode yang
disediakan dalam dokumentasi resmi Rust:
fn use_vec() { let vec = make_vec();
Jika Anda "mengumpankan" ke kompiler, maka itu akan menghasilkan kesalahan:
error: use of moved value: `vec` for i in vec.iter() { ^~~
Ini menunjukkan bahwa vec tidak tersedia karena domain kepemilikannya telah berubah. Dengan demikian, “tembak kaki Anda” dalam proses pengembangan menjadi jauh lebih sulit.
Mengapa kami memutuskan untuk membuat ikatan
Sintaks berisik
Rust menawarkan berbagai tipe data yang nyaman dan luas yang dapat digabungkan satu sama lain. Hal ini memungkinkan untuk merampingkan set nilai dalam kode dan membatasi akses ke data, melindunginya dari akses yang tidak sah.
Fitur-fitur ini
sangat penting ketika bekerja dengan kontrak pintar di Exonum. Berkat mereka, kontrak "pintar" dari kerangka kerja kami memiliki lebih banyak kinerja dan keamanan akses memori daripada, misalnya, solusi Ethereum.
Secara umum, Rust mirip dengan bahasa imperatif lainnya (khususnya, sintaksis Rust menyerupai C / C ++), tetapi ia mewakili sejumlah besar konsep inovatif. Ini memiliki siklus, kondisi, fungsi, tetapi pada saat yang sama area kepemilikan dan jenis muncul. Oleh karena itu, mungkin sulit bagi mereka yang belum pernah bekerja dengan PL ini untuk membaca program tentang itu.
Pada awalnya
mereka tampak "asing". "Pain" menambahkan manajemen memori yang tidak biasa (dibandingkan dengan bahasa lain) yang membuat Rust begitu aman. Musim gugur yang lalu, pencipta Rust menerbitkan jajak pendapat di antara 5 ribu anggota komunitas. Hampir seperempat
responden mengatakan Rust sulit diajak bekerja sama.
Kompiler terlalu menuntut
Seperti yang telah kita catat, tugas kompiler Rust adalah mengurangi jumlah bug dalam kode. Kompiler ketat terhadap teks program, tetapi menampilkan opsi untuk pemecahan masalah. Dalam hal ini, kompilator bahkan menampilkan peringatan mengenai gaya pemrograman.
Pendekatan ini memungkinkan Anda untuk menulis kode yang andal (yang penting ketika bekerja dengan blockchains pada umumnya), tetapi juga memiliki sisi lain dari koin. Terkadang Anda harus menulis program di Rust sehingga kompiler “memahami” bahwa Anda tidak melakukan operasi memori yang dilarang. Dan karena bahasanya masih muda dan terus berkembang, mungkin tidak ada praktik yang mapan. Oleh karena itu, seperti yang dikatakan oleh pengembang Exonum Ilya Bogdanov, banyak pola
harus ditemukan dengan metode poking ilmiah.
Komunitas kecil
Alasan ketiga untuk membuat binder adalah komunitas kecil Rust. Meskipun komunitas bahasa ini cukup ramah, dan anggotanya selalu siap untuk menjawab pertanyaan, bahasa ini “menderita” dari sejumlah kecil literatur dan perpustakaan. Namun, akan adil untuk dicatat di sini bahwa masalah ini sedang dipecahkan secara bertahap.
Dalam beberapa tahun terakhir, Rust telah secara aktif
mempromosikan Mozilla dan
Samsung , yang memiliki efek positif pada jumlah perpustakaan yang sedang dikembangkan dan "pembungkus" baru untuk solusi yang ada dari dunia C / C ++. Bahasa "buku teks" juga mulai muncul secara bertahap. Dari yang sudah ada, ada baiknya menyoroti "
Rust Fundamentals " oleh Ivo Balbaert,
panduan online di situs resmi dan buku terbaru oleh salah satu pengembang proyek Rust, Steve Klabnik, "
The Rust Programming Language ".
Mengapa memilih Java
Salah satu alasan utama yang menentukan pilihan adalah komunitas besar PL ini. Menurut sebuah
penelitian yang dilakukan di situs Stack Overflow tahun lalu, Java berada di tempat ketiga dalam popularitas (hanya JavaScript dan SQL yang melewatinya). Dari 64 ribu pengembang yang disurvei, hampir 40% menulis di Jawa.
Karena ukuran komunitas, PL ini telah memperoleh seperangkat alat yang luas. Ini termasuk IDE, solusi analitis, kerangka kerja benchmark, dll. Ada begitu banyak di antaranya sehingga beberapa perusahaan
mewajibkan pengembang untuk hanya menggunakan IDE dan kerangka kerja tertentu untuk menghindari pemisahan lingkungan kerja.
Pada saat yang sama, Java memiliki sintaks sederhana dan memiliki Java Native Interface (JNI) yang
dapat bekerja dengan C Application Binary Interface (ABI). Selain itu, Java memungkinkan untuk menggunakan bahasa lain pada tumpukan JVM: Scala, Kotlin, Clojure.
Dan akhirnya, mesin Java adalah cross-platform: kode Java dieksekusi dalam kode byte, yang ditafsirkan dan dijalankan pada platform Windows, MacOS, Linux. Pada saat yang sama, bahasa Java lebih terikat pada open source (dibandingkan, misalnya, dengan C #). Alat pengembang Java sebagian besar gratis: keduanya adalah
JDK dan lingkungan pengembangan terintegrasi yang berdasarkan padanya - JDeveloper, NetBeans, Eclipse, dll. Pada saat yang sama, Anda dapat menemukan sejumlah besar proyek open source pada sumber daya khusus (misalnya, di
GitHub ). Ada juga
banyak manual tentang bekerja dengan teknologi open source.
Tantangan utama dalam mengembangkan Java Binding
Perkembangan Java Binding telah lama dan kompleks (dan masih berlangsung). Kami harus mempertimbangkan semua fitur yang membuat Rust dan Java sangat berbeda.
Sebagai contoh, salah satu tantangan adalah mengatur manajemen sumber daya. Intinya adalah bahwa ada Pengumpul Sampah di Jawa, tetapi tidak di Karat. Itu
dihapus di salah satu versi sebelumnya, karena para pengembang sampai pada kesimpulan bahwa mereka dapat memberikan tingkat keandalan yang sama menggunakan sistem tipe.
Java GC, meskipun telah meningkatkan konsumsi sumber daya (memaksa semua fungsi untuk mengembalikan objek yang tidak digunakan untuk menghindari kebocoran memori potensial), cukup nyaman. Oleh karena itu, kami perlu menerapkan mekanisme pembersihan sumber daya yang diinginkan pengembang Java.
Kesulitan lain ternyata terkait dengan struktur data spesifik yang disajikan dalam pohon Exonum-Merkle. Exonum
menggunakannya untuk menggabungkan status blockchain menjadi satu hash. Ini memungkinkan untuk membuktikan keaslian transaksi tanpa harus berkomunikasi dengan beberapa node jaringan yang lengkap. Fungsionalitas ini penting untuk pekerjaan klien ringan kami, oleh karena itu ia juga harus ditafsirkan di Jawa.
Java API hampir sepenuhnya mengulangi Rust API. Hal ini dilakukan untuk memudahkan kita mengadaptasi dokumentasi dan menyederhanakan pekerjaan untuk pengguna. Kami telah menyiapkan panduan terpisah untuk mengonfigurasi dan menjalankan simpul Exonum dengan Aplikasi Java Binding.
Untuk
membuat layanan di Jawa, Anda dapat menggunakan generator templat proyek. Anda perlu menginstal Maven 3 dan menjalankan perintah:
$ mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=com.exonum.binding \ -DarchetypeArtifactId=exonum-java-binding-service-archetype \ -DgroupId=com.example.myservice \ -DartifactId=my-service \ -Dversion=1.0
Anda dapat menggunakan mode interaktif:
$ mvn archetype:generate \ -DarchetypeGroupId=com.exonum.binding \ -DarchetypeArtifactId=exonum-java-binding-service-archetype
Anda akan menemukan panduan lengkap dengan contoh pengaturan layanan Java
dalam dokumentasi di situs web proyek Exonum resmi. Ada rekomendasi untuk memulai simpul Exonum
di repositori di GitHub .
/ EksonumRencana masa depan
Sementara Java Binding ada di alpha. Kami berencana untuk merilisnya sebagai fitur lengkap dan siap pakai dalam waktu dekat. Sekarang kami sedang mengumpulkan umpan balik dari pengguna untuk melacak potensi masalah di perpustakaan dan membuat koreksi.
Pekerjaan juga sedang dilakukan pada dokumentasi, menulis proyek contoh, SDK untuk menyederhanakan integrasi dengan aplikasi pada blockchain dan meningkatkan UX secara umum. Anda
dapat menemukan peta jalan penuh proyek
di repositori di GitHub .
Di sana Anda dapat
mengambil semua sumber untuk mencoba Java Binding dan menulis layanan Java Anda untuk Exonum. Jika Anda memiliki pertanyaan, silakan hubungi
tim pengembangan kami di Gitter . Mereka akan memberi tahu dan membantu sejauh mungkin.