Cara membangun jaringan blockchain menggunakan Hyperledger Fabric and Composer

Tutorial untuk pengembang blockchain baru

Sebelum saya mulai, Hyperledger Fabric hanya berjalan pada sistem operasi berbasis Unix. Akibatnya, ini tidak akan dapat berjalan di Windows dan Anda akan memiliki batasan tentang apa yang dapat Anda lakukan. Saya sarankan menyiapkan mesin virtual jika Anda menjalankan Windows sebelum melanjutkan.

Artikel ini mengasumsikan beberapa pengetahuan tentang Javascript. Ini bukan tutorial yang ditujukan untuk programmer pemula, melainkan untuk programmer yang merupakan pemula di ruang blockchain.

Apa yang kita bangun?

Jadi, Anda ingin membangun aplikasi blockchain tetapi tidak tahu harus mulai dari mana? Jangan khawatir. Melalui tutorial ini, kami akan menyiapkan jaringan kartu perdagangan. Orang lain Traderyang memiliki TradingCardpemain Bisbol, Sepak Bola, dan Kriket, akan dapat bertukar kartu di antara mereka sendiri.

Kami juga akan menyiapkan server REST API untuk memungkinkan perangkat lunak sisi klien berinteraksi dengan jaringan bisnis kami. Terakhir, kami juga akan membuat aplikasi Angular 4 yang menggunakan REST API untuk berinteraksi dengan jaringan kami.

Anda dapat menemukan kode akhir lengkap dari apa yang akan kami buat di repo Github ini

Apakah anda siap untuk memulai?

Daftar Isi

  • Pengantar Hyperledger Fabric dan aplikasi terkait
  • Menginstal prasyarat, alat, dan runtime Fabric
  • Membuat dan menyebarkan jaringan bisnis kami
  • Menguji jaringan bisnis kami
  • Menghasilkan server REST API
  • Menghasilkan aplikasi Angular yang menggunakan REST API

Pengantar Hyperledger Fabric dan aplikasi terkait

Hyperledger Fabric adalah kerangka kerja sumber terbuka untuk membuat jaringan bisnis blockchain pribadi (berizin), di mana identitas dan peran anggota diketahui oleh anggota lain. Jaringan yang dibangun di atas fabric berfungsi sebagai back-end, dengan aplikasi front-end sisi klien. SDK tersedia untuk Nodejs dan Java untuk membangun aplikasi klien, dengan dukungan Python dan Golang segera hadir.

Hyperledger Composer adalah sekumpulan alat dan skrip berbasis Javascript yang menyederhanakan pembuatan jaringan Hyperledger Fabric. Dengan menggunakan alat ini, kami dapat membuat arsip jaringan bisnis (BNA) untuk jaringan kami. Komposer secara luas mencakup komponen-komponen ini:

  • Arsip Jaringan Bisnis (BNA)
  • Taman Bermain Komposer
  • Server REST Komposer

Arsip Jaringan Bisnis - Komposer memungkinkan kita mengemas beberapa file berbeda dan menghasilkan arsip yang kemudian dapat disebarkan ke jaringan Fabric. Untuk menghasilkan arsip ini, kami membutuhkan:

  • Model Jaringan - Definisi sumber daya yang ada di jaringan. Sumber daya ini termasuk Aset, Peserta, dan Transaksi. Kami akan kembali ke ini nanti.
  • Business Logic - Logika untuk fungsi transaksi
  • Batasan Kontrol Akses - Berisi berbagai aturan yang menentukan hak-hak berbagai peserta dalam jaringan. Ini termasuk, tetapi tidak terbatas pada, mendefinisikan Aset apa yang dapat dikontrol oleh Peserta.
  • File Kueri (opsional) - Sekumpulan kueri yang dapat dijalankan di jaringan. Ini dapat dianggap mirip dengan kueri SQL. Anda dapat membaca lebih lanjut tentang kueri di sini.

Composer Playground adalah antarmuka pengguna berbasis web yang dapat kita gunakan untuk memodelkan dan menguji jaringan bisnis kita. Playground bagus untuk memodelkan Proofs of Concept, karena menggunakan penyimpanan lokal browser untuk mensimulasikan jaringan blockchain. Namun, jika kita menjalankan runtime Fabric lokal dan telah menerapkan jaringan padanya, kita juga dapat mengaksesnya menggunakan Playground. Dalam kasus ini, Playground tidak melakukan simulasi jaringan, Playground berkomunikasi dengan runtime Fabric lokal secara langsung.

Composer REST Server adalah alat yang memungkinkan kita menghasilkan server REST API berdasarkan definisi jaringan bisnis kita. API ini dapat digunakan oleh aplikasi klien dan memungkinkan kami untuk mengintegrasikan aplikasi non-blockchain dalam jaringan.

Menginstal prasyarat, alat, dan runtime Fabric

1. Menginstal Prasyarat

Sekarang setelah kami memiliki pemahaman tingkat tinggi tentang apa yang dibutuhkan untuk membangun jaringan ini, kami dapat mulai mengembangkan. Sebelum kita melakukan itu, kita perlu memastikan bahwa kita memiliki prasyarat yang terinstal di sistem kita. Daftar yang diperbarui dapat ditemukan di sini.

  • Docker Engine dan Docker Compose
  • Nodejs dan NPM
  • Git
  • Python 2.7.x

Untuk pengguna Ubuntu, Hyperledger memiliki skrip bash yang tersedia untuk membuat proses ini sangat mudah. Jalankan perintah berikut di terminal Anda:

Sayangnya, pengguna Mac harus menginstal alat yang disebutkan di atas secara manual dan memastikan mereka memiliki semua prasyarat di sistem mereka. Halaman ini selalu diperbarui dengan petunjuk instalasi.

2. Menginstal alat untuk memudahkan pengembangan

Jalankan perintah berikut di Terminal Anda, dan pastikan Anda TIDAK menggunakan sudo saat menjalankan perintah npm.

composer-cli adalah satu-satunya paket penting. Sisanya bukan komponen inti tetapi akan menjadi sangat berguna seiring waktu. Kita akan belajar lebih banyak tentang apa yang masing-masing lakukan saat kita menemukannya.

3. Menginstal runtime Fabric Hyperledger lokal

Mari kita telusuri perintah dan lihat apa artinya. Pertama kita buat dan masuk direktori baru. Kemudian, kami mengunduh dan mengekstrak alat yang diperlukan untuk menginstal Hyperledger Fabric.

Kami kemudian menentukan versi Fabric yang kami inginkan, pada saat penulisan kami membutuhkan 1.2, maka hlfv12 . Kemudian, kami mengunduh waktu proses fabric dan memulainya.

Akhirnya, kami menghasilkan PeerAdminkartu. Peserta dalam jaringan Fabric dapat memiliki kartu jaringan bisnis, yang serupa dengan kartu bisnis kehidupan nyata. Seperti yang kami sebutkan sebelumnya, Fabric adalah lapisan dasar untuk blockchain pribadi untuk dibangun. Pemegang kartu nama PeerAdmin memiliki wewenang untuk menyebarkan, menghapus, dan mengelola jaringan bisnis pada runtime Fabric ini (alias ANDA!)

Jika semuanya berjalan dengan baik, Anda akan melihat keluaran seperti ini:

Selain itu, jika Anda mengetik, lsAnda akan melihat ini:

Pada dasarnya yang kami lakukan di sini hanyalah mengunduh dan memulai jaringan Fabric lokal. Kita bisa berhenti menggunakan ./stopFabric.shjika kita mau. Di akhir sesi pengembangan kita, kita harus lari./teardownFabric.sh

CATATAN: Waktu proses lokal ini dimaksudkan untuk sering dimulai, dihentikan, dan dihancurkan untuk penggunaan pengembangan. Untuk runtime dengan status yang lebih persisten, Anda sebaiknya menerapkan jaringan di luar lingkungan dev. Anda dapat melakukan ini dengan menjalankan jaringan di Kubernetes atau pada platform terkelola seperti IBM Blockchain. Namun, Anda harus melalui tutorial ini terlebih dahulu untuk mendapatkan ide.

Membuat dan menyebarkan jaringan bisnis kami

Ingat paket yodan generator-hyperledger-composerkami menginstal sebelumnya?

yomemberi kita ekosistem generator di mana generator adalah plugin yang dapat dijalankan dengan perintah yo. Ini digunakan untuk menyiapkan aplikasi sampel boilerplate untuk berbagai proyek. generator-hyperledger-composeradalah generator Yo yang akan kami gunakan karena berisi spesifikasi untuk menghasilkan jaringan bisnis boilerplate antara lain.

1. Menghasilkan jaringan bisnis

Buka terminal di direktori pilihan dan tipe yo hyperledger-composer

Anda akan disambut dengan sesuatu yang mirip di atas. Pilih Business Networkdan beri nama cards-trading-networkseperti yang ditunjukkan di bawah ini:

2. Memodelkan jaringan bisnis kami

Langkah pertama dan terpenting untuk membuat jaringan bisnis adalah mengidentifikasi sumber daya yang ada. Kami memiliki empat jenis sumber daya dalam bahasa pemodelan:

  • Aktiva
  • Peserta
  • Transaksi
  • Acara

Untuk kami cards-trading-network, kami akan menentukan jenis aset TradingCard, jenis peserta Trader, transaksi TradeCarddan acara TradeNotification.

Lanjutkan dan buka file yang dihasilkan di editor kode pilihan. Buka org.example.biznet.ctoyang merupakan file pemodelan. Hapus semua kode yang ada di dalamnya saat kita akan menulis ulang (kecuali untuk deklarasi ruang nama).

Ini berisi spesifikasi untuk aset kami TradingCard. Semua aset dan partisipan harus memiliki pengenal unik untuk mereka yang kami tentukan dalam kode, dan dalam kasus kami, itucardId

Juga, aset kami memiliki GameType cardTypeproperti yang didasarkan pada pencacah yang ditentukan di bawah ini. Enum digunakan untuk menentukan tipe yang dapat memiliki hingga N kemungkinan nilai, tapi tidak ada yang lain. Dalam contoh kita, tidak ada TradingCarddapat memiliki cardTypeselain Baseball, FootballatauCricket

Sekarang, untuk menentukan Traderjenis sumber daya peserta kita , tambahkan kode berikut di file pemodelan

Ini relatif lebih sederhana dan cukup mudah dimengerti. Kami memiliki tipe peserta Traderdan mereka diidentifikasi secara unik oleh mereka traderId.

Sekarang, kita perlu menambahkan referensi ke TradingCards kita untuk memiliki referensi yang menunjuk ke pemiliknya sehingga kita tahu milik siapa kartu itu. Untuk melakukan ini, tambahkan baris berikut di dalam TradingCardaset Anda :

--> Trader owner

sehingga kodenya terlihat seperti ini:

Ini adalah pertama kalinya kami menggunakan --> dan Anda pasti bertanya-tanya apa ini. Ini adalah poin hubungan r. oa nd -> adalah cara kita membedakan antara properti sumber daya itu sendiri vs hubungan dengan jenis sumber daya lain. Karena pemilik is a Trader yang merupakan peserta dalam jaringan, kami menginginkan referensi ke that Trader secara langsung, dan itulah tepatnya whdi -> lakukan.

Terakhir, lanjutkan dan tambahkan kode ini di file pemodelan yang menentukan parameter apa yang diperlukan untuk melakukan transaksi dan memancarkan peristiwa.

3. Menambahkan logika untuk transaksi kita

Untuk menambahkan logika di balik TradeCardfungsi tersebut, kita membutuhkan file logika Javascript. Buat direktori baru dengan nama libdi folder proyek Anda dan buat file baru bernama logic.jsdengan kode berikut:

CATATAN: Fungsi dekorator dalam komentar di atas sangat penting. Tanpa @param {org.example.biznet.TradingCard} trade, fungsi tidak tahu Transactionkode mana yang mengacu dari bahasa pemodelan. Selain itu, pastikan nama parameter yang dikirimkan (yaitu trade) adalah nama yang Anda berikan dalam definisi fungsi tepat setelahnya.

Kode ini pada dasarnya memeriksa apakah kartu yang ditentukan memiliki forTrade == truedan memperbarui pemilik kartu dalam kasus itu. Kemudian, TradeNotificationacara untuk kartu itu dimulai .

4. Mendefinisikan izin dan aturan akses

Tambahkan aturan baru permissions.acluntuk memberi peserta akses ke sumber daya mereka. Dalam produksi, Anda ingin lebih ketat dengan aturan akses ini. Anda dapat membaca lebih lanjut tentang mereka di sini.

5. Menghasilkan Arsip Jaringan Bisnis (BNA)

Sekarang setelah semua pengkodean selesai, saatnya membuat file arsip untuk jaringan bisnis kita sehingga kita dapat menerapkannya pada runtime Fabric lokal kita. Untuk melakukan ini, buka Terminal di direktori proyek Anda dan ketik ini:

composer archive create --sourceType dir --sourceName .

Perintah ini memberi tahu Hyperledger Composer bahwa kami ingin membangun BNA dari direktori yang merupakan folder root kami saat ini.

CATATAN: Nama dan versi BNA berasal dari package.jsonfile. Saat Anda menambahkan lebih banyak kode, Anda harus mengubah nomor versi di sana untuk menyebarkan arsip unik yang mampu meningkatkan jaringan bisnis yang ada.

6. Instal dan Terapkan file BNA

Kami dapat menginstal dan menerapkan jaringan ke runtime Fabric lokal kami menggunakan PeerAdminpengguna. Untuk menginstal jaringan bisnis, ketik

composer network install --archiveFile [email protected] --card [email protected]

Untuk menyebarkan jaringan bisnis, ketik

composer network start --networkName cards-trading-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card [email protected] --file cards-trading-admin.card

The networkNamedan networkVersionharus sama seperti yang ditentukan dalam Anda package.jsonjika tidak maka tidak akan bekerja.

--filemengambil nama file yang akan dibuat untuk kartu nama jaringan INI. Kartu ini kemudian perlu diimpor agar dapat digunakan dengan mengetik

composer card import --file cards-trading-admin.card

Luar biasa. Sekarang kami dapat mengonfirmasi bahwa jaringan kami aktif dan berjalan dengan mengetik

composer network ping --card [email protected]

--card kali ini membutuhkan kartu admin dari jaringan yang ingin kita ping.

Jika semuanya berjalan dengan baik, Anda akan melihat sesuatu yang mirip dengan ini:

Menguji Jaringan Bisnis kami

Sekarang jaringan kita sudah aktif dan berjalan di Fabric, kita dapat memulai Composer Playground untuk berinteraksi dengannya. Untuk melakukan ini, ketik composer-playgroundTerminal dan buka //localhost:8080/di browser Anda dan Anda akan melihat sesuatu yang mirip dengan ini:

Tekan Hubungkan Sekarang untuk [email protected]dan Anda akan disambut dengan layar ini:

The Tentukan halaman di mana kita dapat membuat perubahan pada kode kita, menyebarkan perubahan tersebut untuk meng-upgrade jaringan kami, dan arsip jaringan bisnis ekspor.

Buka halaman Tes dari menu atas, dan Anda akan melihat ini:

Pilih Traderdari Peserta, klik Buat Peserta Baru di dekat kanan atas, dan buat yang baru Traderseperti ini:

Silakan dan buat beberapa lagi Trader. Inilah tampilan ketiga trader saya dengan nama Haardik, John, dan Tyrone.

Sekarang, mari buat beberapa Aset. Klik TradingCarddari menu kiri dan tekan Create New Asset . Perhatikan bagaimana ownerbidang ini sangat menarik di sini, terlihat seperti ini:

Ini adalah sebuah hubungan. Inilah yang --> cara. Kami menentukan jenis sumber daya yang tepat diikuti dengan pengenal unik dan voila, kami memiliki penunjuk hubungan.

Silakan dan selesaikan membuat TradingCardsesuatu yang mirip dengan ini:

Perhatikan bagaimana ownerbidang menunjuk ke Trader#1aka Haardikbagi saya. Lanjutkan dan buat beberapa kartu lagi, dan aktifkan pasangan untuk forTradedisetel ke true.

Perhatikan bagaimana saya Card#2memiliki forTrade == true?

Nah untuk hal-hal yang menyenangkan, yuk coba tukar menukar kartu: D

Klik Submit Transaction di kiri dan cardtunjuk TradingCard#2dan newOwnertunjuk Trader#3seperti ini:

Tekan Kirim dan lihat TradingCards milik Anda, Anda akan melihat bahwa Card#2sekarang memiliki pemilik Trader#3: D

Menghasilkan Server REST API

Bertransaksi dengan Playground memang bagus, tapi belum maksimal. Kami harus membuat perangkat lunak sisi klien bagi pengguna untuk memberi mereka pengalaman yang mulus, mereka bahkan tidak perlu tahu tentang teknologi blockchain yang mendasarinya. Untuk melakukannya, kami membutuhkan cara yang lebih baik untuk berinteraksi dengan jaringan bisnis kami. Untungnya, kami memiliki composer-rest-servermodul untuk membantu kami dalam hal itu.

Ketik composer-rest-serverterminal Anda, tentukan [email protected], pilih jangan pernah gunakan ruang nama , dan lanjutkan dengan opsi default untuk sisanya sebagai berikut:

Buka //localhost:3000/explorer/dan Anda akan disambut dengan versi terdokumentasi dari REST API yang dibuat secara otomatis: D

Menghasilkan aplikasi Angular yang menggunakan REST API

Ingat yo hyperledger-composergeneratornya? Itu dapat melakukan lebih dari sekadar menghasilkan jaringan bisnis. Itu juga dapat membuat aplikasi Angular 4 yang berjalan terhadap REST API yang kami buat di atas.

Untuk membuat aplikasi web Angular, ketik yo hyperledger-composerTerminal Anda, pilih Angular, pilih untuk menyambung ke jaringan bisnis yang ada dengan kartu [email protected], dan sambungkan ke REST API yang ada juga. ( Sunting: Versi perangkat lunak yang lebih baru mungkin meminta file kartu alih-alih hanya nama kartu)

Ini akan terus berjalan npm install, tunggu sebentar, dan setelah semuanya selesai Anda akan dapat memuat //localhost:4200/dan disambut dengan halaman yang mirip dengan ini:

Sunting: Versi perangkat lunak yang lebih baru mungkin mengharuskan Anda untuk menjalankannya npm installsendiri dan kemudian menjalankannyanpm start

Sekarang Anda dapat bermain dengan jaringan Anda dari aplikasi ini secara langsung, yang berkomunikasi dengan jaringan melalui server REST yang berjalan pada port 3000.

Selamat! Anda baru saja menyiapkan jaringan bisnis blockchain pertama Anda menggunakan Hyperledger Fabric dan Hyperledger Composer: D

Anda dapat menambahkan lebih banyak fitur ke jaringan perdagangan kartu, mengatur harga pada kartu dan memberikan keseimbangan untuk semua Trader. Anda juga dapat memiliki lebih banyak transaksi yang memungkinkan Traders untuk mengubah nilai forTrade. Anda dapat mengintegrasikan ini dengan aplikasi non-blockchain dan mengizinkan pengguna untuk membeli kartu baru yang ditambahkan ke akun mereka, yang kemudian dapat mereka perdagangkan lebih lanjut di jaringan.

Kemungkinannya tidak terbatas, apa yang akan Anda buat darinya? Beri tahu saya di kolom komentar: D

BUG DIKENAL: Apakah aplikasi web Angular Anda tidak menangani Transaksi dengan benar?

Pada saat penulisan, generator sudut memiliki masalah di mana tombol Panggil ungu di halaman Transaksi tidak melakukan apa pun. Untuk memperbaikinya, kita perlu membuat beberapa perubahan pada aplikasi angular yang dihasilkan.

1. Dapatkan modal untuk membuka saat Anda menekan tombol

Perubahan pertama yang perlu kita lakukan adalah membuat tombol membuka jendela modal. Kode sudah berisi jendela modal yang diperlukan, tombol (click)dan data-targetatributnya tidak ada.

Untuk mengatasi ini, buka /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

Nama file dapat bervariasi berdasarkan transactionnama Anda . Jika Anda memiliki beberapa transactiondalam jaringan bisnis Anda, Anda harus melakukan perubahan ini di semua file HTML jenis sumber daya transaksi.

Gulir ke bawah sampai akhir dan Anda akan melihat a on> tag. Go ahead and add these two attributes to that tag:

(click)="resetForm();" data-target="#addTransactionModal"

so the line looks like this:

Invoke<;/button>

The (click) attribute calls resetForm(); which sets all the input fields to empty, and data-target specifies the modal window to be opened upon click.

Save the file, open your browser, and try pressing the invoke button. It should open this modal:

Original text


2. Removing unnecessary fields

Just getting the modal to open isn’t enough. We can see it requests transactionId and timestamp from us even though we didn’t add those fields in our modeling file. Our network stores these values which are intrinsic to all transactions. So, it should be able to figure out these values on it’s own. And as it turns out, it actually does. These are spare fields and we can just comment them out, the REST API will handle the rest for us.

In the same file, scroll up to find the input fields and comment out the divs responsible for those input fields inside addTransactionModal

Save your file, open your browser, and press Invoke. You should see this:

You can now create transactions here by passing data in these fields. Since card and newOwner are relationships to other resources, we can do a transaction like this:

Press Confirm, go back to the Assets page, and you will see that TradingCard#2 now belongs to Trader#1:

Congratulations! You have successfully built and deployed a blockchain business network on Hyperledger Fabric. You also generated a REST API server for that network and learnt how to make web apps which interact with that API.

If you have any questions or doubts, drop it in the comments and I will get back to you.

Email: [email protected]

LinkedIn: //www.linkedin.com/in/haardikkk