Naslednja vadnica je sestavljena iz treh člankov, ki vas bodo naučili različnih vidikov razvoja verižne kode Hyperledger Fabric, od CRUD operacij, zaščite podatkov in testiranja verižne kode.

1. del

2. del

3. del

Vadnica za tkanine Hyperledger: Izčrpen vodnik - 2. del

Pregled serije:

  • Člen 1: Razvoj osnovne verižne kode in shranjevanje zasebnih podatkov v zbirkah
  • 2. člen: Napredne poizvedbe verižne kode in grafični vmesnik CouchDB
  • 3. člen: Vadnica za preizkušanje verižne kode z MockStubom

Zahteve

  • 4 GB RAM-a (zaželeno je več)
  • Docker, Docker-Compose, urejevalnik kode (npr. Visual Studio Code), Git
  • Različica NodeJS 8.9+ (Najprimernejša je 8.9.4 – Nasvet: spremenite različico z upraviteljem različic, kot je ‘n’)
  • Osnovno znanje JavaScript

Cilji

  • Spoznajte CouchDB in njegov jezik poizvedb
  • Naučite se poizvedbeni jezik Mango.
  • Ustvarite napredne poizvedbe verižne kode, preizkusite jih prek GUI CouchDB in jih vključite v svojo verižno kodo.

Uvod

V prvem članku smo se naučili ustvariti osnovne funkcije verižne kode, ki lahko izvajajo CRUD operacije na knjigi z uporabo odprtokodne vzorčne plošče, ki jo ponuja TheLedger.

V tej drugi vadnici se bomo osredotočili na ustvarjanje naprednih poizvedb z verižno kodo, imenovanih tudi bogate poizvedbe, kar nam omogoča ustvarjanje bolj zapletenih poizvedb, namesto da bi iskali določen ključ.

Začeti 

Poskrbite, da imate kopijo kode, ki jo najdete na Github michielmulders / hyperledger-fabric-blockgeeks. Priporočljivo je uporabljati klon git https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git da na vašem računalniku ustvarite lokalni klon repozitorija in preverite drugi del vadnice z git checkout tutorial-2

Nato zaženite omrežje z ./scripts/startFabric.sh , če ste prvič v tej vadnici, si oglejte razdelek „Nastavitev bojlerja“ v prvem članku, če želite začeti delovati.

Ko se začne omrežje Hyperledger Fabric, odprite to povezavo (http: // localhost: 5984 / _utils / # / _ all_dbs) v brskalniku, ki naj prikaže grafični vmesnik CouchDB.

O CouchDB

Dejansko Hyperledger Fabric podpira LevelDB kot CouchDB, ki služi kot podatkovna baza stanja in vsebuje najnovejše stanje vsakega predmeta. LevelDB je privzeta baza podatkov stanja ključ-vrednost, vdelana v vsako enakovredno stran. CouchDB je neobvezna alternativna zunanja podatkovna baza. Tako kot shramba ključ-vrednost LevelDB lahko tudi CouchDB shrani vse binarne podatke, ki so modelirani v verižni kodi. Vendar je CouchDB boljša izbira, saj podpira shranjevanje dokumentov JSON, ki omogoča bogate poizvedbe glede podatkov verižne kode, LevelDB pa podpira samo poizvedbe proti ključem.

Glede na dokumentacijo Hyperledger Fabric,

CouchDB deluje kot ločen postopek zbirke podatkov skupaj z enakovrednim računalnikom, zato obstajajo dodatni premisleki glede nastavitve, upravljanja, operacij in zlasti varnosti.”

Torej LevelDB ponuja manj funkcionalnosti, vendar je pravilno konfiguriran, medtem ko CouchDB potrebuje nekaj dodatne konfiguracije, na primer zagotavljanje skrbniškega uporabnika in gesla baze podatkov ali zagotavljanje naslova CouchDB, da vrstnik ve, kje naj išče trenutno stanje.

Tabla, ki jo uporabljamo, vsebuje konfiguracijo z vključenim CouchDB. Ustvarimo svojo prvo bogato poizvedbo.

GUI za CouchDB

Ko odprete GUI, ga lahko najdete na http: // localhost: 5984 / _utils / # / _ all_dbs, bi morali videti naslednji vmesnik.

Vadnica za tkanine Hyperledger: Izčrpen vodnik - 2. del

Odprimo mychannel_fabcar (ime kanala v kombinaciji z imenom verižne kode) in raziščite avtomobilske predmete v njej.

Vadnica za tkanine Hyperledger: Izčrpen vodnik - 2. del

Nato odprite povezavo »Zaženi poizvedbo z mangom«, da izvedete našo prvo poizvedbo. Začnimo s preprostim poizvedbo za iskanje vseh predmetov avtomobila. To lahko dosežemo z iskanjem docType “avto”.

Vadnica za tkanine Hyperledger: Izčrpen vodnik - 2. del

Operatorji poizvedb Mango

1. Operator polj

Operator ‘polja’ vam omogoča vrnitev samo določenih polj. Vzemimo poizvedbo iz prejšnjega primera in vrnemo samo barvo vsakega predmeta avtomobila.

{

  "izbirnik": {

     "docType": "avto"

  },

  "polja": [

     "barva"

  ]

}

2. V operaterju

Operator $ in vam omogoča iskanje določenih vrednosti znotraj polja. Omogoča vam posredovanje niza možnih vrednosti, ki se jim želite ujemati. Vzemimo prejšnjo poizvedbo in vrnimo samo vijolične in vijolične avtomobile.

{

  "izbirnik": {

     "docType": "avto",

     "barva": {

        "$ v": [

           "vijolična",

           "vijolična"

        ]

     }

  },

  "polja": [

     "barva"

  ]

}

Poizvedba bo vrnila tri avtomobilske predmete, enega v barvi ‘vijolična’ in dva v barvi ‘vijolična’.

Vadnica za tkanine Hyperledger: Izčrpen vodnik - 2. del

3. Omejevalnik in preskoči operater

Ok, recimo, da želimo na primer preskočiti prvi rezultat in rezultat omejiti na dva avtomobila, tako da imamo samo dva vijolična avtomobila iz prejšnjega primera. Operator omejitve vam omogoča, da omejite količino vrnjenih predmetov, medtem ko lahko operater preskoka premika izbirni kurzor.

<div slog ="ozadje: #ffffff; preliv: samodejno; širina: samodejno; obroba: polno siva; meja-širina: .1em .1em .1em .8em; oblazinjenje: .2em .6em;"><pred slog ="marža: 0; višina črte: 125%">{

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">  razpon><slog razpona ="barva ozadja: # fff0f0">&”izbirnik&”razpon>: {

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">     razpon><slog razpona ="barva ozadja: # fff0f0">&quot; docType&”razpon>: <slog razpona ="barva ozadja: # fff0f0">&quot; avto&”razpon>,

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">     razpon><slog razpona ="barva ozadja: # fff0f0">&”barva&”razpon>: {

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">        razpon><slog razpona ="barva ozadja: # fff0f0">&quot; $ in&”razpon>: [

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">           razpon><slog razpona ="barva ozadja: # fff0f0">&”vijolična&”razpon>,

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">           razpon><slog razpona ="barva ozadja: # fff0f0">&”vijolična&”razpon>

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">        razpon>]

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">     razpon>}

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">  razpon>},

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">  razpon><slog razpona ="barva ozadja: # fff0f0">&”polja;&”razpon>: [

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">     razpon><slog razpona ="barva ozadja: # fff0f0">&”barva&”razpon>

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">  razpon>],

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">  razpon><slog razpona ="barva ozadja: # fff0f0">&”meja&”razpon>: <slog razpona ="barva: # 0000DD; teža pisave: krepko">2span>,

<slog razpona ="barva: # FF0000; barva ozadja: #FFAAAA">  razpon><slog razpona ="barva ozadja: # fff0f0">&”preskoči&”razpon>: <slog razpona ="barva: # 0000DD; teža pisave: krepko">1span>

}

pred>div>

4. Operater regularnega izraza

Kot je razvidno iz naslova, lahko regularni izraz posredujemo kot poizvedbo Mango. Majhna stranska opomba, ni priporočljivo, da posredujete zapletene izraze regularnih izrazov (kot so ugnezdeni izrazi), ker zahtevajo preveč računalniške moči.

V tem primeru želimo ujemati samo modele avtomobilov, ki vsebujejo vsaj eno črko. To bi moralo odstraniti CAR5 iz rezultata, saj je model ‘205’. Oglejmo si.

{

  "izbirnik": {

     "model": {

        "$ regularni izraz": "[A-Z]+"

     }

  }

}

5. Poizvedba Poddokumenti

Poizvedeti je mogoče tudi za poddokumente. Predstavljajte si spremenjeni objekt avtomobila, kjer polje lastnika vsebuje objekt, ki je sestavljen iz lastnosti uporabnika.

{

  “Model”,

  “DocType”,

  …,

“Lastnik”: {

      “Ime”,

      “Starost”,

      “Naslov”

  }

}

Mango je glede prilagoditvenih dokumentov precej prilagodljiv, kot je prikazano spodaj – poizvedba išče uporabnike, stare 18 let.

{

   "izbirnik": {

       "lastnik.starost": 18

   }

}

6. Drugi operaterji

Obstajajo številni drugi operaterji:

  • “$ Gt”: Polje mora biti večje od vrednosti X.
  • “$ Lt”: Polje mora biti nižje od vrednosti X.
  • “$ Eq”: Polje mora biti enako vrednosti X.
  • “$ Ali”: Vrednost mora biti v nizu iskalnih vrednosti.
  • “$ Not”: Polje se morda ne ujema z vrednostjo X.

Najdete popolno izvedbo operatorjev poizvedb tukaj.

Poizvedbe z bogato verižno kodo

Zdaj smo se naučili pisati naprednejše poizvedbe, uporabimo to novo znanje v naši verižni kodi za pridobivanje podatkov. Uporabili bomo getQueryResultAsList funkcija iz stubHelperja, ki sprejme izbirnik in vrne zahtevane podatke.

Ponovno poizvedimo za vse avtomobilske predmete v naši zbirki podatkov z uporabo bogate poizvedbe. Funkcija getQueryResultAsList sprejme objekt, ki vsebuje poizvedbo.

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

       vrnitev čaka stubHelper.getQueryResultAsList ({

           izbirnik: {

               docType: ‘avto’

           }

       });

}

Znova zaženimo omrežje z uporabo ./scripts/startFabric.sh in izvedite ukaz docker exec, ki zažene queryAllCars v naši verižni kodi.

docker exec cli peer verižna koda poizvedba -C mychannel -n fabcar -c ‘{“ function ”:” queryAllCars ”,“ Args ”: [“ ”]}’

Docker nam bo vrnil vrsto avtomobilov. Kot lahko vidite, v verižni kodi ni tako težko ustvariti bogatih poizvedb.

Kaj smo se naučili?

Jezik poizvedb Mango ponuja številne operaterje poizvedb, s katerimi lahko ustvarimo bolj zapletene poizvedbe za iskanje podatkov v našem blockchain omrežju. Mogoče je celo uporabiti regularni izraz za filtriranje podatkov, vendar omejitev uporabe omejite samo na osnovne poizvedbe regularnih izrazov zaradi razlogov uspešnosti. Poleg tega ni težko te bogate poizvedbe implementirati v verižno kodo, saj StubHelper naredi vse težko delo.

Code Cheatsheet

  1. Poizvedba Mango se začne z izbirnikom, ki cilja na polja, na katerih pokličemo enega ali več operaterjev.

izbirnik: {

     polje: {

         “$ Operator”: …

     }

}

  1. The stubHelper.getQueryResultAsList funkcija pošlje poizvedbo v naše omrežje Hyperledger Fabric in vrne matriko rezultatov.

Nadalje bere

Avtor Michiel Mulders

@michiel_mulders

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me