Seuraava opetusohjelma koostuu kolmesta artikkelista, jotka opettavat sinulle erilaisia ​​näkökohtia Hyperledger Fabric -ketjukoodikehityksestä CRUD-operaatioista, tietosuojasta ja ketjukooditestauksesta.

Osa 1

Osa 2

Osa 3

Hyperledger-kankaan opetusohjelma: Kattava opas - osa 2

Katsaus sarjaan:

  • 1 artikla: Perustietoketjun kehittäminen ja yksityisten tietojen tallentaminen kokoelmiin
  • 2 artikla: Edistyneet ketjukoodikyselyt ja CouchDB-käyttöliittymä
  • Artikkeli 3: Opetusohjelma ketjukoodin testaamiseen MockStubilla

Vaatimukset

  • 4 Gt RAM-muistia (enemmän suositellaan)
  • Docker, Docker-Compose, koodieditori (esim. Visual Studio Code), Git
  • NodeJS-versio 8.9+ (suositeltava on 8.9.4 – Vinkki: vaihda versiosi versionhallinnalla, kutenn’)
  • Perustiedot JavaScriptistä

Tavoitteet

  • Lisätietoja CouchDB: stä ja sen kyselykielestä
  • Opi Mango-kyselykieli.
  • Luo edistyneitä ketjukoodikyselyjä, testaa ne CouchDB-käyttöliittymän kautta ja ota ne käyttöön ketjukoodissasi.

Johdanto

Ensimmäisessä artikkelissa opimme luomaan perusketjutoiminnot, jotka pystyvät suorittamaan CRUD-operaatiot pääkirjaan TheLedgerin tarjoaman avoimen lähdekoodin kattilalevyn avulla..

Tässä toisessa opetusohjelmassa keskitymme kehittyneiden ketjukoodikyselyjen, joita kutsutaan myös rikkaiksi kyselyiksi, avulla voimme luoda monimutkaisempia kyselyjä sen sijaan, että etsimme vain tiettyä avainta.

Aloittaa 

Varmista, että sinulla on kopio koodista, jonka löydät Github michielmulders / hyperledger-kangas-blockgeeks. On suositeltavaa käyttää git-klooni https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git luoda paikallinen klooni arkistosta koneellesi ja tarkistaa opetusohjelman toinen osa git-kassan opetusohjelma-2

Käynnistä seuraavaksi verkko ./scripts/startFabric.sh , jos olet uusi tässä opetusohjelmassa, muista tutustua ensimmäisen artikkelin osaan Boilerplate setup, jotta pääset alkuun.

Kun Hyperledger Fabric -verkko on käynnistynyt, avaa tämä linkki (http: // localhost: 5984 / _utils / # / _ all_dbs) selaimessasi, jonka pitäisi näyttää CouchDB-käyttöliittymä.

Tietoja CouchDB: stä

Hyperledger Fabric tukee itse asiassa molempia LevelDB: tä CouchDB: nä toimiakseen tilatietokantana pitämällä kunkin objektin viimeisintä tilaa. LevelDB on oletusarvoinen avainarvotila-tietokanta, joka on upotettu jokaiseen vertaisverkkoon. CouchDB on valinnainen vaihtoehtoinen ulkoisen tilan tietokanta. Kuten LevelDB-avainarvosäilö, CouchDB voi tallentaa kaikki binääridata, joka on mallinnettu ketjukoodissa. CouchDB on kuitenkin parempi valinta, koska se tukee JSON-asiakirjojen tallennusta, mikä mahdollistaa monipuoliset kyselyt ketjukooditietoja vastaan, kun taas LevelDB tukee vain avaimia vastaan ​​tehtyjä kyselyjä.

Hyperledger Fabric -dokumentaation mukaan,

CouchDB toimii erillisenä tietokantaprosessina vertaisryhmän rinnalla, joten asennuksessa, hallinnassa, toiminnoissa ja erityisesti tietoturvassa on muita näkökohtia.”

Joten, LevelDB tarjoaa vähemmän toimintoja, mutta se on määritetty oikein, kun taas CouchDB tarvitsee ylimääräisiä kokoonpanoja, kuten tietokannan järjestelmänvalvojan käyttäjän ja salasanan antaminen tai CouchDB-osoitteen antaminen vertaiselle, jotta hän tietää, mistä sen nykyisen tilan voi etsiä..

Käyttämämme kattilalevy sisältää kokoonpanon, johon sisältyy CouchDB. Luodaan ensimmäinen monipuolinen kysely.

CouchDB-käyttöliittymä

Kun olet avannut käyttöliittymän, löydät osoitteesta http: // localhost: 5984 / _utils / # / _ all_dbs, sinun pitäisi nähdä seuraava käyttöliittymä.

Hyperledger-kankaan opetusohjelma: Kattava opas - osa 2

Avataan mychannel_fabcar (kanavan nimi yhdistettynä ketjukoodinimeen) -tietokanta ja tutkia sen sisällä olevia auto-objekteja.

Hyperledger-kankaan opetusohjelma: Kattava opas - osa 2

Avaa seuraavaksi Suorita kysely Mangolla-linkki suorittaaksesi ensimmäisen kyselymme. Aloitetaan yksinkertaisella kyselyllä kaikkien auton objektien löytämiseksi. Voimme saavuttaa tämän etsimällä docType-autoa.

Hyperledger-kankaan opetusohjelma: Kattava opas - osa 2

Mango-kyselyoperaattorit

1. Kenttien operaattori

Kentät-operaattorin avulla voit palauttaa vain tietyt kentät. Otetaan kysely edellisestä esimerkistä ja palautetaan vain jokaisen auto-objektin väri.

{

  "valitsin": {

     "docType": "auto"

  },

  "kentät": [

     "väri-"

  ]

}

2. Operatorissa

$ In -operaattorin avulla voit etsiä tiettyjä arvoja kentästä. Sen avulla voit välittää joukon mahdollisia arvoja, jotka haluat sovittaa. Otetaan edellinen kysely ja palautetaan vain violetit ja violetit autot.

{

  "valitsin": {

     "docType": "auto",

     "väri-": {

        "$ sisään": [

           "violetti",

           "violetti"

        ]

     }

  },

  "kentät": [

     "väri-"

  ]

}

Kysely palauttaa kolme autoobjektia, joista toinen on väri ”violetti” ja kaksi ”violetti”..

Hyperledger-kankaan opetusohjelma: Kattava opas - osa 2

3. Rajoita ja ohita operaattori

Ok, sanotaan esimerkiksi, että haluamme ohittaa ensimmäisen tuloksen ja rajoittaa tuloksen kahteen autoon, joten meillä on vain kaksi edellisen esimerkin violettiautoa. Rajaoperaattorin avulla voit rajoittaa palautettujen objektien määrää, kun taas ohitusoperaattori pystyy siirtämään valintakohdistinta.

<div tyyli ="tausta: #ffffff; ylivuoto: auto; leveys: auto; reuna: yhtenäinen harmaa; reunan leveys: .1em .1em .1em .8em; pehmuste: .2em .6em;"><pre tyyli ="marginaali: 0; viivan korkeus: 125%">{

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">  jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; valitsin&quot; span>: {

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">     jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; docType&quot; span>: <span tyyli ="taustaväri: # fff0f0">&quot; auto&quot; span>,

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">     jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; väri&quot; span>: {

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">        jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; $ sisään&quot; span>: [

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">           jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; violetti&quot; span>,

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">           jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; violetti&quot; span>

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">        jänneväli>]

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">     jänneväli>}

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">  jänneväli>},

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">  jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; kentät&quot; span>: [

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">     jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; väri&quot; span>

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">  jänneväli>],

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">  jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; raja&quot; span>: <span tyyli ="väri: # 0000DD; fontin paino: lihavoitu">2span>,

<span tyyli ="väri: # FF0000; taustaväri: #FFAAAA">  jänneväli><span tyyli ="taustaväri: # fff0f0">&quot; ohita&quot; span>: <span tyyli ="väri: # 0000DD; fontin paino: lihavoitu">1span>

}

pre>div>

4. Regex-operaattori

Kuten otsikosta käy ilmi, regex on mahdollista välittää Mango-kyselynä. Pieni huomautus, ei ole suositeltavaa välittää monimutkaisia ​​regex-lausekkeita (kuten sisäkkäisiä lausekkeita), koska ne vaativat liikaa laskentatehoa.

Tässä esimerkissä haluamme sovittaa yhteen vain automallit, jotka sisältävät vähintään yhden kirjaimen. Tämän pitäisi poistaa CAR5 tuloksesta, koska malli on 205. Katsotaanpa.

{

  "valitsin": {

     "malli-": {

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

     }

  }

}

5. Kyselyn aliasiakirjat

Alidokumentteja on jopa mahdollista kysellä. Kuvittele muokattu autoobjekti, jossa omistaja-kentässä on objekti, joka koostuu käyttäjän ominaisuuksista.

{

  “malli”,

  “DocType”,

  …,

“Omistaja”: {

      “nimi”,

      “ikä”,

      “osoite”

  }

}

Mango on melko joustava aliasiakirjojen suhteen, kuten alla on esitetty – kysely etsii 18-vuotiaita käyttäjiä.

{

   "valitsin": {

       "omistaja. ikä": 18

   }

}

6. Muut operaattorit

Monet muut operaattorit ovat olemassa:

  • “$ Gt”: Kentän on oltava suurempi kuin arvo X.
  • “$ Lt”: Kentän on oltava pienempi kuin arvo X.
  • “$ Eq”: Kentän on oltava yhtä suuri kuin arvo X.
  • “$ Tai”: Arvon on oltava joukko hakuarvoja.
  • “$ Not”: Kenttä ei välttämättä vastaa arvoa X.

Kyselyoperaattoreiden täydellinen toteutus löytyy tässä.

Ketjukoodin sisältämät kyselyt

Nyt olemme oppineet kirjoittamaan edistyneempiä kyselyjä. Käytetään tätä uutta tietoa ketjukoodissamme tietojen noutamiseen. Käytämme getQueryResultAsList toiminto stubHelperiltä, ​​joka hyväksyy valitsimen ja palauttaa vaaditut tiedot.

Kysymme jälleen kerran kaikista tietokannassamme olevista auto-objekteista rikkaalla kyselyllä. GetQueryResultAsList-toiminto hyväksyy objektin, joka sisältää kyselyn.

async queryAllCars (stubHelper: StubHelper, args: string []): Lupa<minkä tahansa> {

       return odota stubHelper.getQueryResultAsList ({

           valitsin: {

               docType: ‘auto’

           }

       });

}

Käynnistetään verkko uudelleen ./scripts/startFabric.sh ja suorita Docker exec -komento, joka suorittaa queryAllCars toimii ketjukoodissamme.

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

Docker palauttaa meille joukon täynnä auton esineitä. Kuten näette, rikas kyselyjen luominen ketjukoodissa ei ole niin vaikeaa.

Mitä opimme?

Mango-kyselykieli tarjoaa monia kyselyoperaattoreita, joiden avulla voimme luoda monimutkaisempia kyselyitä tietojen löytämiseksi blockchain-verkostostamme. On jopa mahdollista käyttää regex-sovellusta tietojen suodattamiseen, mutta rajoita käyttö vain perustavanlaatuisiin kyselyihin suorituskykysyistä. Tämän lisäksi ei ole vaikeaa toteuttaa näitä rikas kyselyjä ketjukoodiksi, koska StubHelper tekee kaiken kovan työn.

Code-huijauslehti

  1. Mango-kysely alkaa valitsimella, joka kohdistaa kenttiin, joihin kutsumme yhtä tai useampaa operaattoria.

valitsin: {

     kenttä: {

         “$ Operaattori”: …

     }

}

  1. stubHelper.getQueryResultAsList function lähettää kyselyn Hyperledger Fabric -verkkoomme ja palauttaa tulostaulukon.

Lue lisää

Tekijä Michiel Mulders

@michiel_mulders

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