
Selamat siang, para pembaca, nama saya Nikolai Nefedov, saya seorang konsultan teknis di IBM, dalam artikel ini saya ingin memperkenalkan Anda ke platform blockchain - Hyperledger Fabric. Platform ini dirancang untuk membangun aplikasi bisnis di tingkat perusahaan (kelas Perusahaan). Level artikel - untuk pembaca yang tidak terlatih dengan pengetahuan dasar teknologi IT.
Hyperledger Fabric adalah proyek open-source, salah satu cabang dari proyek open-source Hyperledger, sebuah konsorsium Linux Foundation. Hyperledger Fabric awalnya diluncurkan oleh Aset Digital dan IBM. Fitur utama platform Hyperledger Fabric adalah fokusnya pada aplikasi perusahaan. Oleh karena itu, platform dikembangkan dengan mempertimbangkan kecepatan transaksi dan biayanya yang rendah, serta identifikasi semua peserta. Keuntungan ini dicapai melalui pemisahan layanan verifikasi transaksi dan pembentukan blok baru dari registri terdistribusi, serta penggunaan otoritas sertifikasi dan otorisasi peserta.
Artikel saya adalah bagian dari serangkaian artikel tentang Hyperledger Fabric dalam kerangka yang kami uraikan desain sistem akuntansi untuk siswa yang memasuki universitas.
Arsitektur Kain Umum Hyperledger
Hyperledger Fabric adalah jaringan blockchain terdistribusi yang terdiri dari berbagai komponen fungsional yang diinstal pada node jaringan. Komponen Fabric Hyperledger adalah wadah Docker yang dapat diunduh secara bebas dari DockerHub. Hyperledger Fabric juga dapat dijalankan di lingkungan Kubernetes.
Untuk menulis kontrak pintar (chaincode dalam konteks Hyperledger Fabric), kami menggunakan Golang (meskipun Hyperledger Fabric memungkinkan Anda untuk menggunakan bahasa lain). Dalam kasus kami, Node.js dengan Hyperledger Fabric SDK yang sesuai digunakan untuk mengembangkan aplikasi khusus.
Node menjalankan logika bisnis (kontrak pintar) - chaincode, menyimpan status registri terdistribusi (data buku besar) dan menjalankan layanan sistem lainnya dari platform. Node hanya unit logis, node yang berbeda dapat ada di server fisik yang sama. Jauh lebih penting adalah bagaimana node dikelompokkan (Domain tepercaya) dan fungsi apa dari jaringan blockchain yang terkait dengannya.
Arsitektur umum adalah sebagai berikut:

Gambar 1. Arsitektur Umum dari Kain Hyperledger
Aplikasi pengguna (Mengirim Klien) - aplikasi yang digunakan pengguna untuk bekerja dengan jaringan blockchain. Agar berhasil, Anda harus memiliki wewenang dan hak yang sesuai untuk berbagai jenis tindakan di jaringan.
Rekan hadir dalam beberapa peran:
- Endorsing Peer - simpul yang mensimulasikan pelaksanaan transaksi (mengeksekusi kode kontrak pintar). Setelah memeriksa dan mengeksekusi kontrak pintar, node mengembalikan hasil aplikasi klien bersama dengan tanda tangannya.
- Layanan Pemesanan - layanan terdistribusi pada beberapa node, berfungsi untuk membentuk blok baru dari registri terdistribusi dan membuat urutan transaksi. Layanan Pemesanan tidak menambahkan blok baru ke registri (Untuk meningkatkan kinerja, fungsi ini telah ditransfer ke Teman Berkomitmen).
- Committing Peer - simpul yang berisi registri terdistribusi dan menambahkan blok baru ke registri (yang dibentuk oleh Layanan Pemesanan). Semua Rekan Berkomitmen berisi salinan lokal dari registri terdistribusi. Peer Berkomitmen, sebelum menambahkan blok baru secara lokal, memeriksa semua transaksi di dalam blok untuk validitas.
Kebijakan Pengesahan adalah kebijakan validasi transaksi. Kebijakan ini menentukan set simpul yang diperlukan di mana kontrak pintar harus dijalankan agar transaksi diakui sebagai sah.
Registry Terdistribusi - Lerger - terdiri dari dua bagian: WolrldState (juga disebut - State DataBase) dan BlockChain.
BlockChain adalah rantai blok yang menyimpan catatan semua perubahan yang terjadi dengan objek registri terdistribusi.
WolrldState adalah komponen dari registri terdistribusi yang menyimpan nilai saat ini (ekstrem) dari semua objek dalam registri terdistribusi.
WorldState adalah database, dalam versi dasar - LevelDB atau lebih kompleks - CouchDB, yang berisi pasangan nilai kunci, misalnya: Nama depan - Ivan, Nama belakang - Ivanov, tanggal pendaftaran dalam sistem - 12/12/21, tanggal lahir - 12/17/1961, dll. WorldState dan registri terdistribusi harus konsisten dengan semua anggota saluran ini.
Karena Hyperledger Fabric adalah jaringan tempat semua peserta diketahui dan disahkan, otoritas sertifikasi khusus - CA (Otoritas Sertifikasi) digunakan di sini. CA beroperasi berdasarkan standar X.509 dan infrastruktur kunci publik - PKI.
Layanan Keanggotaan adalah layanan yang melaluinya para peserta memverifikasi kepemilikan suatu objek dalam suatu organisasi atau saluran tertentu.
Suatu transaksi, dalam banyak kasus, merupakan catatan data baru dalam registri terdistribusi.
Ada juga transaksi untuk membuat saluran atau kontrak pintar. Transaksi dimulai oleh aplikasi pengguna dan diakhiri dengan catatan dalam registri terdistribusi.
Saluran adalah subnet tertutup yang terdiri dari dua atau lebih peserta dalam jaringan blockchain, yang dirancang untuk melakukan transaksi rahasia dalam lingkaran terbatas peserta yang terkenal. Saluran ini ditentukan oleh peserta, registri terdistribusi, kontrak pintar, Layanan Pemesanan, WorldState. Setiap anggota saluran harus diberi wewenang untuk mengakses saluran dan memiliki hak untuk melakukan berbagai jenis transaksi. Otorisasi dilakukan menggunakan Layanan Keanggotaan.
Skenario Eksekusi Transaksi Biasa
Selanjutnya, saya ingin berbicara tentang skenario eksekusi transaksi khas menggunakan proyek kami sebagai contoh.
Sebagai bagian dari proyek internal kami, kami menciptakan jaringan Hyperledger Fabric, yang dirancang untuk mendaftarkan dan merekam siswa yang masuk universitas. Jaringan kami terdiri dari dua organisasi milik Universitas A dan Universitas B. Setiap organisasi berisi aplikasi klien, serta Temannya yang Menyetujui dan Menyokong. Kami juga menggunakan layanan Pemesanan Layanan umum, Layanan Memebership, dan Otoritas Sertifikasi.
1) Inisiasi Transaksi
Aplikasi pengguna, menggunakan Hyperledger Fabric SDK, memulai permintaan transaksi dan mengirimkan permintaan ke node dengan kontrak pintar. Permintaan dapat untuk modifikasi atau membaca dari registri terdistribusi (Buku Besar). Jika kita mempertimbangkan contoh konfigurasi pengujian sistem untuk mahasiswa universitas akuntansi, aplikasi klien mengirimkan permintaan transaksi ke simpul universitas A dan B, yang termasuk dalam kebijakan Endorsement dari kontrak pintar yang disebut. Node A adalah simpul yang ada di universitas yang mendaftarkan siswa yang masuk, dan simpul B adalah simpul yang ada di universitas lain. Agar transaksi disimpan dalam registri terdistribusi, perlu bahwa semua node yang menurut logika bisnis harus menyetujui transaksi berhasil menyelesaikan kontrak pintar dengan hasil yang sama. Aplikasi pengguna node A, menggunakan alat SDK Hyperledger Fabric, menerima kebijakan Endorsement dan mencari tahu node mana yang perlu dikirimi permintaan transaksi. Ini adalah permintaan untuk memohon kontrak pintar tertentu (fungsi chaincode) untuk membaca atau menulis data tertentu ke registri terdistribusi. Secara teknis, SDK klien menggunakan fungsi yang sesuai, API yang melewatkan objek dengan parameter transaksi, dan juga menambahkan tanda tangan klien dan mengirimkan data ini melalui buffer protokol melalui gRPC ke node yang sesuai (endorsing peer).

Gambar 2. Inisiasi Transaksi
2) Pemenuhan kontrak yang cerdas
Node (Endorsing Peers), setelah menerima permintaan untuk transaksi, memverifikasi tanda tangan klien dan, jika semuanya beres, mereka mengambil objek dengan data permintaan dan memulai simulasi eksekusi kontrak pintar (fungsi chaincode) dengan data ini. Kontrak pintar adalah logika bisnis dari suatu transaksi, serangkaian kondisi dan instruksi tertentu (dalam kasus kami, ini adalah verifikasi siswa, ini adalah siswa baru, atau dia sudah terdaftar, verifikasi umur, dll.). Untuk menjalankan kontrak yang cerdas, Anda juga akan memerlukan data dari WorldState. Sebagai hasil dari simulasi kontrak pintar pada Endorsing peer, diperoleh dua set data - Read Set dan Write Set. Set Baca dan Tulis Set adalah nilai asli dan baru WorldState. (baru - dalam arti diperoleh selama simulasi kontrak pintar).

Gambar 3. Eksekusi kontrak pintar
3) Mengembalikan data ke aplikasi klien
Setelah simulasi kontrak pintar, Endorsing Peers mengembalikan ke aplikasi klien data awal dan hasil simulasi, serta RW Set, yang ditandatangani dengan sertifikat mereka. Pada tahap ini, tidak ada perubahan yang dilakukan pada registri terdistribusi. Aplikasi klien memeriksa tanda tangan dari Endorsing Peer, dan juga membandingkan data sumber dari transaksi yang dikirim dan data yang dikembalikan (yaitu, ia memeriksa apakah data sumber yang menjadi sumber transaksi yang disimulasikan distorsi). Jika transaksi hanya untuk membaca data dari registri, maka aplikasi klien yang sesuai menerima Baca Set yang diperlukan dan ini biasanya menyelesaikan transaksi dengan sukses tanpa mengubah registri terdistribusi. Dalam kasus transaksi yang seharusnya mengubah data dalam registri, aplikasi klien juga memeriksa implementasi kebijakan Endorsing. Ada kemungkinan bahwa aplikasi klien tidak memeriksa hasil Kebijakan Endorsement, tetapi platform Hyperledger Fabric dalam hal ini menyediakan untuk memeriksa kebijakan pada node (Comitting Peers) pada tahap menambahkan transaksi ke registri.

Gambar 4. Mengembalikan data ke aplikasi klien
4) Mengirim RW set ke Memesan Peer
Aplikasi klien mengirimkan transaksi beserta data terkait ke layanan Pemesanan. Ini termasuk Perangkat RW, Endorsing Peer, dan ID Saluran.
Layanan pemesanan - berdasarkan nama, fungsi utama layanan ini adalah untuk membangun transaksi masuk dalam urutan yang benar. Serta pembentukan blok baru dari registri terdistribusi dan pengiriman dijamin blok-blok baru yang dibentuk untuk semua node yang berkomitmen, sehingga memastikan konsistensi data pada semua node yang mengandung registri terdistribusi (Commiting peers). Pada saat yang sama, layanan Pemesanan itu sendiri tidak mengubah registri dengan cara apa pun. Memesan Layanan adalah komponen vital dari sistem, sehingga merupakan sekelompok beberapa node. Layanan Pemesanan tidak memeriksa validitas transaksi, itu hanya menerima transaksi dengan pengenal saluran tertentu, mengatur transaksi masuk dalam urutan tertentu dan membentuk blok baru dari registri terdistribusi dari mereka. One Ordering Service dapat melayani beberapa saluran secara bersamaan. Layanan Pemesanan mencakup kluster Kafka, yang mendukung antrian transaksi yang benar (tidak berubah) (lihat Klausul 7).

Gambar 5. Mengirimkan set RW ke Ordering Peers
Blok yang dibentuk dalam Layanan Pemesanan ditransmisikan ke semua node jaringan. Setiap node, setelah menerima blok baru, memeriksa kepatuhannya dengan Kebijakan Endorsing, memverifikasi bahwa semua Endorsing Peers menerima hasil yang sama (Write Set) sebagai hasil dari mensimulasikan kontrak pintar, dan juga memeriksa apakah nilai asli telah berubah (mis. - Baca Set - data dibaca oleh kontrak pintar dari WorldState) sejak transaksi dimulai. Jika semua kondisi terpenuhi, transaksi ditandai valid, jika tidak, transaksi menerima status yang tidak valid.

Gambar 6. Mengirim blok yang sudah dibentuk ke Committing Peer
6) Menambahkan blok ke registri
Setiap node menambahkan transaksi ke salinan lokal dari registri terdistribusi, dan jika transaksi tersebut valid, maka Set Penulis diterapkan ke WorldState (kondisi saat ini), sehingga nilai-nilai baru dari objek yang dipengaruhi oleh transaksi dicatat. Jika transaksi menerima token - tidak valid (misalnya, dua transaksi terjadi dengan objek yang sama dalam blok yang sama, maka salah satu transaksi akan berubah menjadi tidak valid, karena nilai awal telah diubah oleh transaksi lainnya). Transaksi ini juga ditambahkan ke registri terdistribusi dengan token yang tidak valid, tetapi Set Penulisan transaksi ini tidak berlaku untuk keadaan WorldState saat ini dan, karenanya, tidak mengubah objek yang berpartisipasi dalam transaksi. Setelah ini, pemberitahuan dikirim ke aplikasi pengguna bahwa transaksi selamanya ditambahkan ke registri terdistribusi, serta status transaksi, yaitu, valid atau tidak ...

Gambar 7. Menambahkan blok ke registri
LAYANAN PEMESANAN
Layanan Pemesanan terdiri dari kluster Kafka dengan simpul ZooKeeper yang sesuai dan Node Layanan Pemesanan (OSN), yang berada di antara klien layanan Pemesanan dan Cluster Kafka. Kafka Cluster adalah platform manajemen distribusi (pengiriman pesan) yang toleran terhadap kesalahan. Setiap saluran (topik) di Kafka adalah urutan catatan yang tidak dapat diubah yang hanya mendukung penambahan catatan baru (menghapus yang sudah ada tidak dimungkinkan). Ilustrasi struktur topik diberikan di bawah ini. Properti Kafka inilah yang digunakan untuk membangun platform blockchain.

diambil dari kafka.apache.org
Gambar 8. Struktur Topik Layanan Pemesanan
Tautan yang bermanfaat
Youtube - Membangun blockchain untuk bisnis dengan Proyek Hyperledger
Dokumen Kain Hyperledger
Kain Hyperledger: sistem operasi terdistribusi untuk blockchains diizinkan
Ucapan Terima Kasih
Saya mengucapkan terima kasih yang mendalam atas bantuannya dalam mempersiapkan artikel ini kepada rekan-rekan saya:
Nikolay Marina
Igor Hapov
Dmitry Gorbachev
Alexander Zemtsov
Ekaterina Kurdenkova
Ekaterina Guseva