Tutorial Hyperledger Fabric: Ghid cuprinzător – Partea 2

Următoarea serie de tutoriale constă din trei articole care vă vor învăța diverse aspecte despre dezvoltarea codului de cod Hyperledger Fabric, de la operații CRUD, protecția datelor și testarea codului de cod.

Partea 1

Partea 2

Partea 3

Tutorial Hyperledger Fabric: Ghid cuprinzător - Partea 2

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

O prezentare generală a seriei:

  • Articolul 1: Dezvoltarea codului de bază de bază și stocarea datelor private în colecții
  • Articolul 2: interogări avansate de cod de cod și interfața grafică CouchDB
  • Articolul 3: Un tutorial pentru testarea codului de chainc cu MockStub

Cerințe

  • 4 GB RAM (se preferă mai mult)
  • Docker, Docker-Compose, editor de cod (de ex. Visual Studio Code), Git
  • NodeJS versiunea 8.9+ (Preferat este 8.9.4 – Sfat: schimbați versiunea cu un manager de versiuni precum „n’)
  • Cunoștințe de bază despre JavaScript

Obiective

  • Aflați despre CouchDB și limba de interogare a acestuia
  • Aflați limba interogării Mango.
  • Creați interogări avansate privind codul de cod, testați-le prin CouchDB GUI și implementați-le în codul de cod.

Introducere

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

În primul articol, am învățat să creăm funcții de bază ale codului de capabilitate care sunt capabile să efectueze operații CRUD pe contabil folosind boilerplate-ul open source furnizat de TheLedger.

În acest al doilea tutorial, ne vom concentra pe crearea de interogări avansate de cod de cod, denumite și interogări bogate, care ne permit să creăm interogări mai complexe în loc să căutăm doar o anumită cheie.

Incepe 

Asigurați-vă că aveți o copie a codului care poate fi găsită pe Github michielmulders / hyperledger-fabric-blockgeeks. Se recomandă utilizarea git clona https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git pentru a crea o clonă locală a depozitului pe mașina dvs. și pentru a verifica a doua parte a tutorialului cu tutorial git checkout-2

Apoi, porniți rețeaua cu ./scripts/startFabric.sh , dacă nu sunteți nou la acest tutorial, asigurați-vă că ați verificat secțiunea „Configurare Boilerplate” din primul articol pentru a porni în funcțiune.

Odată ce rețeaua dvs. Hyperledger Fabric a început, deschideți acest link (http: // localhost: 5984 / _utils / # / _ all_dbs) în browserul dvs., care ar trebui să afișeze interfața grafică CouchDB.

Despre CouchDB

De fapt, Hyperledger Fabric acceptă atât LevelDB, cât și CouchDB pentru a servi ca bază de date de stare, deținând cea mai recentă stare a fiecărui obiect. LevelDB este baza de date implicită a stării valoare-cheie încorporată în fiecare partener. CouchDB este o bază de date alternativă de stare externă opțională. La fel ca depozitul cheie-valoare LevelDB, CouchDB poate stoca orice date binare care sunt modelate în cod de cod. Cu toate acestea, CouchDB este o alegere mai bună, deoarece acceptă stocarea documentelor JSON, care permite interogări bogate împotriva datelor codului de cod, în timp ce LevelDB acceptă numai interogări împotriva tastelor.

Conform documentației Hyperledger Fabric,

CouchDB rulează ca un proces de bază de date separat alături de peer, de aceea există considerații suplimentare în ceea ce privește configurarea, gestionarea, operațiunile și în special securitatea.”

Deci, LevelDB oferă mai puține funcționalități, cu toate acestea, este configurat corect, în timp ce CouchDB are nevoie de o anumită configurație suplimentară, cum ar fi furnizarea unui utilizator și parolă de administrator de bază de date sau furnizarea unei adrese CouchDB pentru ca colegul să știe unde să caute starea sa actuală.

Boilerplate pe care îl folosim conține o configurație cu CouchDB inclus. Să creăm prima noastră interogare bogată.

CouchDB GUI

Când ați deschis GUI, puteți găsi la http: // localhost: 5984 / _utils / # / _ all_dbs, ar trebui să vedeți următoarea interfață.

Tutorial Hyperledger Fabric: Ghid cuprinzător - Partea 2

Să deschidem mychannel_fabcar (numele canalului combinat cu numele codului de cod) bază de date și explorează obiectele mașinii din interiorul acestuia.

Tutorial Hyperledger Fabric: Ghid cuprinzător - Partea 2

Apoi, deschideți linkul „Rulați o interogare cu Mango” pentru a executa prima noastră interogare. Să începem cu o interogare simplă pentru a găsi toate obiectele Mașinii. Putem realiza acest lucru căutând docType „mașină”.

Tutorial Hyperledger Fabric: Ghid cuprinzător - Partea 2

Operatori de interogare Mango

1. Operator de câmpuri

Operatorul „câmpuri” vă permite să returnați numai câmpuri specifice. Să luăm interogarea din exemplul anterior și să returnăm doar culoarea fiecărui obiect de mașină.

{

  "selector": {

     "docType": "mașină"

  },

  "câmpuri": [

     "culoare"

  ]

}

2. În Operator

Operatorul $ in vă permite să căutați valori specifice într-un câmp. Vă permite să transmiteți o serie de valori posibile pe care doriți să le potriviți. Să luăm interogarea anterioară și să returnăm doar mașinile violet și violet.

{

  "selector": {

     "docType": "mașină",

     "culoare": {

        "$ in": [

           "violet",

           "Violet"

        ]

     }

  },

  "câmpuri": [

     "culoare"

  ]

}

Interogarea va returna trei obiecte auto, unul de culoare ‘violet’ și două de culoare ‘violet’.

Tutorial Hyperledger Fabric: Ghid cuprinzător - Partea 2

3. Limitați și săriți operatorul

Ok, să presupunem, de exemplu, că dorim să omitem primul rezultat și să limităm rezultatul la două mașini, astfel încât să avem doar cele două mașini violete din exemplul anterior. Operatorul de limită vă permite să limitați cantitatea de obiecte returnate, în timp ce operatorul de saltare este capabil să deplaseze cursorul selectorului.

<stil div ="fundal: #ffffff; depășire: auto; lățime: automată; margine: gri solid; lățime-margine: .1em .1em .1em .8em; căptușeală: .2em .6em;"><pre style ="marja: 0; înălțimea liniei: 125%">{

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">  span><span style ="culoare de fundal: # fff0f0">&quot; selector&quot; span>: {

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">     span><span style ="culoare de fundal: # fff0f0">&quot; docType&quot; span>: <span style ="culoare de fundal: # fff0f0">&quot; masina&quot; span>,

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">     span><span style ="culoare de fundal: # fff0f0">&quot; culoare&quot; span>: {

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">        span><span style ="culoare de fundal: # fff0f0">&quot; $ in&quot; span>: [

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">           span><span style ="culoare de fundal: # fff0f0">&quot; violet&quot; span>,

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">           span><span style ="culoare de fundal: # fff0f0">&quot; mov&quot; span>

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">        span>]

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">     span>}

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">  span>},

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">  span><span style ="culoare de fundal: # fff0f0">&quot; câmpuri&quot; span>: [

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">     span><span style ="culoare de fundal: # fff0f0">&quot; culoare&quot; span>

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">  span>],

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">  span><span style ="culoare de fundal: # fff0f0">&quot; limită&quot; span>: <span style ="culoare: # 0000DD; font-weight: bold">2span>,

<span style ="culoare: # FF0000; culoare de fundal: #FFAAAA">  span><span style ="culoare de fundal: # fff0f0">&quot; săriți&quot; span>: <span style ="culoare: # 0000DD; font-weight: bold">1span>

}

pre>div>

4. Operator Regex

După cum sugerează titlul, este posibil să treci regex ca o interogare Mango. Notă laterală mică, nu este recomandat să treceți expresii regex complexe (cum ar fi expresiile imbricate) deoarece necesită o putere de calcul prea mare.

Pentru acest exemplu, dorim să potrivim doar modelele de mașini care conțin cel puțin o literă. Acest lucru ar trebui să elimine CAR5 din rezultat, deoarece modelul este „205”. Hai să aruncăm o privire.

{

  "selector": {

     "model": {

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

     }

  }

}

5. Interogare subdocumente

Este chiar posibil să căutați subdocumente. Imaginați-vă un obiect auto modificat în care câmpul proprietar conține un obiect care constă din proprietăți ale utilizatorului.

{

  “model”,

  „DocType”,

  …,

„Proprietar”: {

      “Nume”,

      “vârstă”,

      “abordare”

  }

}

Mango este destul de flexibil în ceea ce privește subdocumentele, așa cum se arată mai jos – interogarea caută utilizatorii cu vârsta de 18 ani.

{

   "selector": {

       "proprietar.vârstă": 18

   }

}

6. Alți operatori

Există mulți alți operatori:

  • „$ Gt”: câmpul trebuie să fie mai mare decât valoarea X.
  • „$ Lt”: câmpul trebuie să fie mai mic decât valoarea X.
  • „$ Eq”: câmpul trebuie să fie egal cu valoarea X.
  • „$ Sau”: valoarea trebuie să fie în matrice de valori de căutare.
  • „$ Not”: câmpul poate să nu se potrivească cu valoarea X.

Implementarea completă a operatorilor de interogare poate fi găsită Aici.

Interogări bogate în cod de cod

Acum, am învățat să scriem interogări mai avansate, să folosim aceste noi cunoștințe în codul nostru de cod pentru a prelua date. Vom folosi getQueryResultAsList funcție din stubHelper care acceptă un selector și returnează datele necesare.

Din nou, să căutăm toate obiectele auto din baza noastră de date folosind o interogare bogată. Funcția getQueryResultAsList acceptă un obiect care conține interogarea.

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

       retur așteaptă stubHelper.getQueryResultAsList ({

           selector: {

               docType: „mașină”

           }

       });

}

Să repornim rețeaua folosind ./scripts/startFabric.sh și executați comanda docker exec care execută queryAllCars funcționează în codul nostru de conexiune.

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

Docker ne va întoarce o serie plină de obiecte auto. După cum puteți vedea, nu este atât de dificil să creați interogări bogate în codul de cod.

Ce am învățat?

Limbajul de interogare Mango oferă mulți operatori de interogări pe care îi putem folosi pentru a crea interogări mai complexe pentru a găsi date în rețeaua noastră blockchain. Este chiar posibil să utilizați regex pentru a filtra datele, totuși, limitați utilizarea la numai interogări de bază regex din motive de performanță. În afară de aceasta, nu este dificil să implementați aceste interogări bogate în cod de cod, deoarece StubHelper face toată munca grea.

Foaie de cheats pentru cod

  1. O interogare Mango începe cu un selector care vizează un câmp (câmpuri) pe care apelăm unul sau mai mulți operatori.

selector: {

     camp: {

         „$ Operator”: …

     }

}

  1. stubHelper.getQueryResultAsList funcția trimite interogarea către rețeaua noastră Hyperledger Fabric și returnează o matrice de rezultate.

Citește în continuare

De Michiel Mulders

@michiel_mulders

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