Tutorial Kain Hyperledger: Panduan Komprehensif-Bagian 2

Seri tutorial berikut terdiri dari tiga artikel yang akan mengajari Anda berbagai aspek tentang pengembangan kode rantai Hyperledger Fabric mulai dari operasi CRUD, perlindungan data, dan pengujian kode rantai.

Bagian 1

Bagian 2

Bagian 3

Tutorial Kain Hyperledger: Panduan Komprehensif- Bagian 2

Ringkasan seri:

  • Artikel 1: Pengembangan kode rantai dasar dan menyimpan data pribadi dalam koleksi
  • Artikel 2: Kueri kode rantai lanjutan dan GUI CouchDB
  • Artikel 3: Tutorial untuk menguji kode rantai Anda dengan MockStub

Persyaratan

  • 4GB RAM (lebih disukai)
  • Docker, Docker-Compose, Editor kode (misalnya, Visual Studio Code), Git
  • NodeJS versi 8.9+ (Lebih disukai 8.9.4 – Tip: ubah versi Anda dengan pengelola versi seperti ‘n‘)
  • Pengetahuan dasar JavaScript

Tujuan

  • Pelajari tentang CouchDB dan bahasa kuerinya
  • Pelajari bahasa kueri Mango.
  • Buat kueri kode rantai tingkat lanjut, uji melalui CouchDB GUI dan terapkan di kode rantai Anda.

pengantar

Di artikel pertama, kami belajar membuat fungsi kode rantai dasar yang mampu melakukan operasi CRUD ke buku besar menggunakan boilerplate open source yang disediakan oleh TheLedger.

Dalam tutorial kedua ini, kita akan fokus pada pembuatan kueri kode rantai lanjutan, juga disebut sebagai kueri kaya, yang memungkinkan kami membuat kueri yang lebih kompleks daripada hanya mencari kunci tertentu..

Memulai 

Pastikan Anda memiliki salinan kode yang dapat ditemukan di Github michielmulders / hyperledger-fabric-blockgeeks. Dianjurkan untuk digunakan git clone https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git untuk membuat tiruan lokal dari repositori di komputer Anda dan menyelesaikan bagian kedua dari tutorial dengan git checkout tutorial-2

Selanjutnya, mulai jaringan dengan ./scripts/startFabric.sh , jika Anda baru mengenal tutorial ini, pastikan untuk memeriksa bagian ‘Penyiapan pelat Boiler’ di artikel pertama untuk memulai dan menjalankan.

Setelah jaringan Hyperledger Fabric Anda dimulai, buka tautan ini (http: // localhost: 5984 / _utils / # / _ all_dbs) di browser Anda yang seharusnya menampilkan GUI CouchDB.

Tentang CouchDB

Sebenarnya, Hyperledger Fabric mendukung LevelDB sebagai CouchDB untuk berfungsi sebagai database status, yang menyimpan status terbaru setiap objek. LevelDB adalah database status nilai kunci default yang disematkan di setiap peer. CouchDB adalah database status eksternal alternatif opsional. Seperti penyimpanan nilai kunci LevelDB, CouchDB dapat menyimpan data biner apa pun yang dimodelkan dalam kode rantai. Namun, CouchDB adalah pilihan yang lebih baik karena mendukung penyimpanan dokumen JSON yang memungkinkan kueri kaya terhadap data kode rantai sedangkan LevelDB hanya mendukung kueri terhadap kunci..

Menurut dokumentasi Hyperledger Fabric,

CouchDB berjalan sebagai proses database terpisah di samping peer, oleh karena itu ada pertimbangan tambahan dalam hal penyiapan, manajemen, operasi, dan terutama keamanan.”

Jadi, LevelDB menawarkan fungsionalitas yang lebih sedikit, namun dikonfigurasi dengan benar sedangkan CouchDB memerlukan beberapa konfigurasi tambahan seperti memberikan pengguna dan kata sandi admin database atau memberikan alamat CouchDB agar peer tahu di mana harus mencari statusnya saat ini..

Boilerplate yang kami gunakan berisi konfigurasi dengan CouchDB disertakan. Mari buat kueri kaya pertama kita.

GUI CouchDB

Ketika Anda telah membuka GUI, Anda dapat menemukannya di http: // localhost: 5984 / _utils / # / _ all_dbs, Anda akan melihat antarmuka berikut.

Tutorial Kain Hyperledger: Panduan Komprehensif- Bagian 2

Mari kita buka mychannel_fabcar (nama saluran digabungkan dengan nama kode rantai) dan jelajahi objek mobil di dalamnya.

Tutorial Kain Hyperledger: Panduan Komprehensif- Bagian 2

Selanjutnya, buka tautan ‘Jalankan Kueri dengan Mangga’ untuk menjalankan kueri pertama kita. Mari kita mulai dengan kueri sederhana untuk menemukan semua objek Mobil. Kita dapat melakukannya dengan mencari docType ‘car’.

Tutorial Kain Hyperledger: Panduan Komprehensif- Bagian 2

Operator Permintaan Mangga

1. Operator Lapangan

Operator ‘bidang’ memungkinkan Anda untuk mengembalikan hanya bidang tertentu. Mari kita ambil kueri dari contoh sebelumnya dan hanya mengembalikan warna setiap objek mobil.

{

  "pemilih": {

     "docType": "mobil"

  },

  "bidang": [

     "warna"

  ]

}

2. Di Operator

Operator $ in memungkinkan Anda mencari nilai tertentu di dalam bidang. Ini memungkinkan Anda untuk meneruskan larik nilai yang mungkin ingin Anda cocokkan. Mari kita ambil kueri sebelumnya dan hanya mengembalikan mobil ungu dan ungu.

{

  "pemilih": {

     "docType": "mobil",

     "warna": {

        "$ masuk": [

           "ungu",

           "ungu"

        ]

     }

  },

  "bidang": [

     "warna"

  ]

}

Kueri akan mengembalikan tiga objek mobil, satu dengan warna ‘ungu’ dan dua dengan warna ‘ungu’.

Tutorial Kain Hyperledger: Panduan Komprehensif- Bagian 2

3. Batasi dan Lewati Operator

Oke, misalkan kita ingin melewatkan hasil pertama dan membatasi hasil ke dua mobil jadi kita hanya memiliki dua mobil violet dari contoh sebelumnya. Operator batas memungkinkan Anda membatasi jumlah objek yang dikembalikan sedangkan operator lewati mampu menggerakkan kursor pemilih.

<gaya div ="latar belakang: #ffffff; overflow: auto; width: auto; border: solid grey; border-width: .1em .1em .1em .8em; padding: .2em .6em;"><pra gaya ="margin: 0; tinggi garis: 125%">{

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">  menjangkau><gaya rentang ="background-color: # fff0f0">&quot; pemilih&quot; span>: {

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">     menjangkau><gaya rentang ="background-color: # fff0f0">&quot; docType&quot; span>: <gaya rentang ="background-color: # fff0f0">&quot; mobil&quot; span>,

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">     menjangkau><gaya rentang ="background-color: # fff0f0">&quot; warna&quot; span>: {

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">        menjangkau><gaya rentang ="background-color: # fff0f0">&quot; $ masuk&quot; span>: [

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">           menjangkau><gaya rentang ="background-color: # fff0f0">&quot; ungu&quot; span>,

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">           menjangkau><gaya rentang ="background-color: # fff0f0">&quot; ungu&quot; span>

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">        menjangkau>]

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">     menjangkau>}

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">  menjangkau>},

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">  menjangkau><gaya rentang ="background-color: # fff0f0">&quot; bidang&quot; span>: [

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">     menjangkau><gaya rentang ="background-color: # fff0f0">&quot; warna&quot; span>

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">  menjangkau>],

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">  menjangkau><gaya rentang ="background-color: # fff0f0">&quot; batas&quot; span>: <gaya rentang ="warna: # 0000DD; font-weight: bold">2span>,

<gaya rentang ="warna: # FF0000; warna-latar belakang: #FFAAAA">  menjangkau><gaya rentang ="background-color: # fff0f0">&quot; lewati&quot; span>: <gaya rentang ="warna: # 0000DD; font-weight: bold">1span>

}

pra>div>

4. Operator Regex

Seperti yang disarankan oleh judulnya, regex dapat dikirim sebagai kueri Mango. Catatan kecil, tidak disarankan untuk meneruskan ekspresi regex yang kompleks (seperti ekspresi bertingkat) karena ekspresi tersebut memerlukan terlalu banyak daya komputasi.

Untuk contoh ini, kami hanya ingin mencocokkan model mobil yang berisi setidaknya satu huruf. Ini harus menghilangkan CAR5 dari hasil karena modelnya adalah ‘205’. Mari lihat.

{

  "pemilih": {

     "model": {

        "$ regex": "[A-Z]+"

     }

  }

}

5. Subdokumen Permintaan

Bahkan mungkin untuk membuat kueri untuk sub dokumen. Bayangkan sebuah objek mobil yang dimodifikasi dimana kolom pemilik berisi sebuah objek yang terdiri dari properti pengguna.

{

  “model”,

  “DocType”,

  …,

“Pemilik”: {

      “nama”,

      “usia”,

      “alamat”

  }

}

Mango cukup fleksibel terkait subdocuments seperti yang ditunjukkan di bawah ini – kueri mencari pengguna yang berusia 18 tahun.

{

   "pemilih": {

       "owner.age": 18

   }

}

6. Operator Lainnya

Ada banyak operator lain:

  • “$ Gt”: Bidang harus lebih besar dari nilai X.
  • “$ Lt”: Bidang harus lebih rendah dari nilai X.
  • “$ Eq”: Bidang harus sama dengan nilai X.
  • “$ Or”: Nilai harus dalam larik nilai pencarian.
  • “$ Not”: Bidang mungkin tidak cocok dengan nilai X.

Implementasi penuh dari operator kueri dapat ditemukan sini.

Kueri Kaya Chaincode

Sekarang, kita telah belajar menulis kueri yang lebih canggih, mari gunakan pengetahuan baru ini di kode rantai kita untuk mengambil data. Kami akan menggunakan getQueryResultAsList fungsi dari stubHelper yang menerima selektor dan mengembalikan data yang diperlukan.

Sekali lagi, mari membuat kueri untuk semua objek mobil di database kami menggunakan kueri yang kaya. Fungsi getQueryResultAsList menerima objek yang berisi kueri.

async queryAllCars (stubHelper: StubHelper, args: string []): Promise<apa saja> {

       return menunggu stubHelper.getQueryResultAsList ({

           pemilih: {

               docType: ‘car’

           }

       });

}

Mari mulai ulang jaringan menggunakan ./scripts/startFabric.sh dan jalankan perintah exec buruh pelabuhan yang menjalankan file queryAllCars berfungsi dalam kode rantai kami.

docker exec cli peer chaincode query -C mychannel -n fabcar -c ‘{“ function ”:” queryAllCars ”,“ Args ”: [“ ”]} ‘

Docker akan mengembalikan array yang penuh dengan objek mobil. Seperti yang Anda lihat, tidak sulit membuat kueri yang kaya dalam kode rantai.

Apa yang kami pelajari?

Bahasa kueri Mango menawarkan banyak operator kueri yang dapat kami gunakan untuk membuat kueri yang lebih kompleks untuk menemukan data di jaringan blockchain kami. Bahkan dimungkinkan untuk menggunakan ekspresi reguler untuk memfilter data, namun membatasi penggunaan hanya untuk kueri ekspresi reguler dasar karena alasan kinerja. Selain itu, tidak sulit untuk menerapkan kueri yang kaya ini ke dalam kode rantai karena StubHelper melakukan semua kerja keras.

Lembar Kode Kode

  1. Kueri Mango dimulai dengan pemilih yang menargetkan bidang tempat kami memanggil satu atau beberapa operator.

pemilih: {

     bidang: {

         “$ Operator”: …

     }

}

  1. Itu stubHelper.getQueryResultAsList fungsi mengirimkan kueri ke jaringan Fabric Hyperledger kami dan mengembalikan larik hasil.

Bacaan lebih lanjut

Oleh Michiel Mulders

@michiel_mulders

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map