Sådan opbygges et blockchain-netværk ved hjælp af Hyperledger Fabric og Composer

En tutorial til nye blockchain-udviklere

Før jeg begynder, kører Hyperledger Fabric kun på Unix-baserede operativsystemer. Som et resultat vil det ikke være i stand til at køre på Windows, og du har begrænsninger for, hvad du kan gøre. Jeg foreslår, at du opretter en virtuel maskine, hvis du kører Windows, før du fortsætter.

Denne artikel antager noget kendskab til Javascript. Det er ikke en tutorial rettet mod nybegynderprogrammerere, men snarere mod programmører, der er begyndere i blockchain-rummet.

Hvad bygger vi?

Så du vil bygge en blockchain-applikation, men har ingen idé om, hvor du skal starte? Bare rolig. Gennem denne vejledning opretter vi et netværkskort. Forskellige Traders, der ejer TradingCardbaseball-, fodbold- og cricket-spillere, vil være i stand til at bytte kort indbyrdes.

Vi opretter også en REST API-server, der gør det muligt for klientsidesoftware at interagere med vores virksomhedsnetværk. Endelig genererer vi også en Angular 4-applikation, der bruger REST API til at interface med vores netværk.

Du kan finde den fulde endelige kode for, hvad vi er ved at bygge videre på denne Github repo

Er du klar til at komme i gang?

Indholdsfortegnelse

  • Introduktion til Hyperledger Fabric og relaterede applikationer
  • Installation af forudsætninger, værktøjer og en Fabric runtime
  • Oprettelse og implementering af vores forretningsnetværk
  • Test af vores forretningsnetværk
  • Generering af en REST API-server
  • Generering af en kantet applikation, der bruger REST API

Introduktion til Hyperledger Fabric og relaterede applikationer

Hyperledger Fabric er en open source-ramme til oprettelse af private (tilladte) blockchain-virksomhedsnetværk, hvor medlemmers identiteter og roller er kendt af andre medlemmer. Netværket, der er bygget på stof, fungerer som back-end med en klientsides applikationsfront-end. SDK'er er tilgængelige for Nodejs og Java til at opbygge klientapplikationer, med Python og Golang support kommer snart.

Hyperledger Composer er et sæt Javascript-baserede værktøjer og scripts, der forenkler oprettelsen af ​​Hyperledger Fabric-netværk. Ved hjælp af disse værktøjer kan vi generere et virksomhedsnetværksarkiv (BNA) til vores netværk. Komponist dækker bredt disse komponenter:

  • Business Network Archive (BNA)
  • Komponist Legeplads
  • Komponist REST Server

Business Network Archive - Composer tillader os at pakke et par forskellige filer og generere et arkiv, som derefter kan implementeres på et Fabric-netværk. For at generere dette arkiv har vi brug for:

  • Netværksmodel - En definition af de ressourcer, der findes i netværket. Disse ressourcer inkluderer aktiver, deltagere og transaktioner. Vi kommer tilbage til disse senere.
  • Forretningslogik - Logik for transaktionsfunktionerne
  • Adgangskontrolbegrænsninger - Indeholder forskellige regler, der definerer rettighederne for forskellige deltagere i netværket. Dette inkluderer, men er ikke begrænset til, at definere, hvilke aktiver deltagerne kan kontrollere.
  • Forespørgselsfil (valgfrit) - Et sæt forespørgsler, der kan køres på netværket. Disse kan betragtes som ligner SQL-forespørgsler. Du kan læse mere om forespørgsler her.

Composer Playground er en webbaseret brugergrænseflade, som vi kan bruge til at modellere og teste vores forretningsnetværk. Legeplads er god til modellering af enkle Proofs of Concept, da den bruger browserens lokale lager til at simulere blockchain-netværket. Men hvis vi kører en lokal Fabric-runtime og har implementeret et netværk til den, kan vi også få adgang til det ved hjælp af Playground. I dette tilfælde simulerer Playground ikke netværket, det kommunikerer direkte med den lokale Fabric-runtime.

Composer REST Server er et værktøj, der giver os mulighed for at generere en REST API-server baseret på vores forretningsdefinitionsdefinition. Denne API kan bruges af klientapplikationer og giver os mulighed for at integrere applikationer, der ikke er blockchain, i netværket.

Installation af forudsætninger, værktøjer og en Fabric runtime

1. Installation af forudsætninger

Nu hvor vi har en høj forståelse af, hvad der er nødvendigt for at opbygge disse netværk, kan vi begynde at udvikle. Før vi gør det, skal vi dog sikre os, at forudsætningerne er installeret på vores system. En opdateret liste kan findes her.

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

For Ubuntu-brugere har Hyperledger et bash-script til rådighed for at gøre denne proces ekstremt let. Kør følgende kommandoer i din terminal:

Desværre skal Mac-brugere manuelt installere de ovennævnte værktøjer og sørge for, at de har alle forudsætningerne på deres system. Denne side holdes opdateret med installationsinstruktioner.

2. Installation af værktøjer for at lette udviklingen

Kør følgende kommandoer i din Terminal, og sørg for, at du IKKE bruger sudo, når du kører npm-kommandoer.

composer-cli er den eneste vigtige pakke. Resten er ikke kernekomponenter, men viser sig at være yderst nyttig over tid. Vi lærer mere om, hvad hver af disse gør, når vi støder på dem.

3. Installation af en lokal Hyperledger Fabric-runtime

Lad os gennemgå kommandoerne og se, hvad de betyder. Først opretter vi og indtaster en ny mappe. Derefter downloader og udpakker vi de nødvendige værktøjer til installation af Hyperledger Fabric.

Vi specificerer derefter den version af stof, vi ønsker, i skrivende stund har vi brug for 1.2, derfor hlfv12 . Derefter downloader vi stoffets runtime og starter det.

Endelig genererer vi et PeerAdminkort. Deltagere i et Fabric-netværk kan have visitkort, der svarer til det virkelige livs visitkort. Som vi nævnte før, er Fabric et basislag til private blockchains at bygge videre på. Indehaveren af ​​PeerAdmin-visitkortet har beføjelse til at implementere, slette og administrere virksomhedsnetværk på denne Fabric-runtime (også kaldet DU!)

Hvis alt gik godt, skulle du se en output som denne:

Hvis du skriver, kan lsdu også se dette:

Dybest set var det, vi gjorde her bare at downloade og starte et lokalt Fabric-netværk. Vi kan stoppe med at bruge, ./stopFabric.shhvis vi vil. I slutningen af ​​vores udviklingssession skal vi køre./teardownFabric.sh

BEMÆRK: Denne lokale runtime er beregnet til at blive ofte startet, stoppet og nedrevet til udviklingsbrug. For en runtime med mere vedvarende tilstand, vil du ønsker at distribuere netværket uden for dev-miljøet. Du kan gøre dette ved at køre netværket på Kubernetes eller på administrerede platforme som IBM Blockchain. Alligevel skal du først gennemgå denne vejledning for at få en idé.

Oprettelse og implementering af vores forretningsnetværk

Husk pakkerne, yoog generator-hyperledger-composervi installerede tidligere?

yogiver os et generatorøkosystem, hvor generatorer er plugins, der kan køres med yo-kommandoen. Dette bruges til at oprette kedelpladeprøveapplikationer til forskellige projekter. generator-hyperledger-composerer den Yo-generator, vi vil bruge, da den indeholder specifikationer til blandt andet at generere kedelpladeforretningsnetværk.

1. Oprettelse af et virksomhedsnetværk

Åbn terminal i et katalog og valg og type yo hyperledger-composer

Du bliver mødt med noget svarende til ovenstående. Vælg Business Networkog navngiv det cards-trading-networksom vist nedenfor:

2. Modellering af vores forretningsnetværk

Det første og vigtigste skridt i retning af at oprette et virksomhedsnetværk er at identificere de nuværende ressourcer. Vi har fire ressourcetyper på modelleringssproget:

  • Aktiver
  • Deltagere
  • Transaktioner
  • Begivenheder

For vores cards-trading-networkvil vi definere en aktivtype TradingCard, en deltagertype Trader, en transaktion TradeCardog en begivenhed TradeNotification.

Gå videre og åbn de genererede filer i en kodeditor, du vælger. Åbn, org.example.biznet.ctohvilket er modelleringsfilen. Slet al den kode, der er til stede, når vi omskriver den (undtagen erklæringen om navneområdet).

Dette indeholder specifikationen for vores aktiv TradingCard. Alle aktiver og deltagere skal have en unik identifikator til dem, som vi angiver i koden, og i vores tilfælde er detcardId

Vores aktiv har også en GameType cardTypeejendom, der er baseret på den tæller, der er defineret nedenfor. Enums bruges til at specificere en type, der kan have op til N mulige værdier, men intet andet. I vores eksempel, ingen TradingCardkan have en cardTypeanden end Baseball, FootballellerCricket

For at specificere vores Traderdeltagerressourcetype skal du nu tilføje følgende kode i modelleringsfilen

Dette er relativt enklere og ret let at forstå. Vi har en deltagertype, Traderog de identificeres entydigt ved deres traderIds.

Nu skal vi tilføje en henvisning til vores TradingCards for at have en reference, der peger på deres ejer, så vi ved, hvem kortet tilhører. For at gøre dette skal du tilføje følgende linje inden i dit TradingCardaktiv:

--> Trader owner

så koden ser sådan ud:

Dette er første gang, vi bruger --> og du må undre dig over, hvad dette er. Dette er et forhold pointe r. oa nd -> er, hvordan vi skelner mellem en ressource egne egenskaber og et forhold til en anden ressourcetype. Da ejeren is a Trader, der er deltager i netværket, ønsker vi en henvisning til that Trader direkte, og det er præcis whved -> gør.

Endelig skal du fortsætte og tilføje denne kode i modelleringsfilen, der specificerer hvilke parametre der kræves for at foretage en transaktion og udsende en begivenhed.

3. Tilføjelse af logik for vores transaktioner

For at tilføje logik bag TradeCardfunktionen har vi brug for en Javascript-logikfil. Opret en ny mappe med navnet libi dit projekts mappe, og opret en ny fil logic.jsmed den følgende kode:

BEMÆRK: Dekoratøren i kommentarerne over funktionen er meget vigtig. Uden den @param {org.example.biznet.TradingCard} tradehar funktionen ingen idé om, hvilken Transactionkode der henvises til fra modelleringssproget. Sørg også for, at parameternavnet, der sendes (dvs. trade), er det, du sender videre i funktionsdefinitionen lige efter.

Denne kode kontrollerer grundlæggende, om det angivne kort har forTrade == trueog opdaterer kortets ejer i så fald. Derefter affyrer det TradeNotificationbegivenheden for det kort.

4. Definition af tilladelser og adgangsregler

Tilføj en ny regel i for permissions.aclat give deltagerne adgang til deres ressourcer. I produktionen vil du være strengere med disse adgangsregler. Du kan læse mere om dem her.

5. Generering af et Business Network Archive (BNA)

Nu hvor al kodning er færdig, er det tid til at oprette en arkivfil til vores forretningsnetværk, så vi kan implementere den på vores lokale Fabric-runtime. For at gøre dette skal du åbne Terminal i din projektmappe og skrive dette:

composer archive create --sourceType dir --sourceName .

Denne kommando fortæller Hyperledger Composer, at vi vil oprette en BNA fra et bibliotek, der er vores nuværende rodmappe.

BEMÆRK: BNA-navnet og -versionen kommer fra package.jsonfilen. Når du tilføjer mere kode, skal du ændre versionsnummeret der for at implementere unikke arkiver, der kan opgradere eksisterende forretningsnetværk.

6. Installer og implementer BNA-filen

Vi kan installere og distribuere netværket til vores lokale Fabric-runtime ved hjælp af PeerAdminbrugeren. For at installere virksomhedsnetværket skal du skrive

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

For at implementere virksomhedsnetværket skal du skrive

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

Den networkNameog networkVersionskal være den samme som angivet i din, package.jsonellers fungerer den ikke.

--filetager navnet på den fil, der skal oprettes til DETTE netværks visitkort. Dette kort skal derefter importeres for at være anvendeligt ved at skrive

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

Fantastiske. Vi kan nu bekræfte, at vores netværk er i gang ved at skrive

composer network ping --card [email protected]

--card denne gang tager admin-kortet for det netværk, vi vil pinge.

Hvis alt gik godt, skulle du se noget lignende:

Test af vores forretningsnetværk

Nu hvor vores netværk er i gang på Fabric, kan vi starte Composer Playground for at interagere med det. For at gøre dette skal du skrive composer-playgroundTerminal og åbne //localhost:8080/i din browser, og du skal se noget lignende:

Tryk på Opret forbindelse nu for at [email protected]blive mødt med denne skærm:

Siden Definer er, hvor vi kan foretage ændringer i vores kode, distribuere disse ændringer for at opgradere vores netværk og eksportere virksomhedsnetværksarkiver.

Gå over til testsiden fra topmenuen, og du vil se dette:

Vælg Traderblandt deltagere, klik på Opret ny deltager øverst til højre, og lav en ny Tradersvarende til denne:

Fortsæt og lav et par flere Traders. Her er hvordan mine tre handlende ser ud med navnene Haardik, John og Tyrone.

Lad os nu lave nogle aktiver. Klik på TradingCardfra menuen til venstre, og tryk på Opret nyt aktiv . Læg mærke til, hvordan ownermarken er særlig interessant her, når du ser sådan ud:

Dette er et forhold. Dette er hvad --> midler. Vi specificerer den nøjagtige ressourcetype efterfulgt af deres unikke identifikator og voila, vi har en relationsmarkør.

Fortsæt og slut med at lave TradingCardnoget lignende:

Læg mærke til, hvordan ownerfelterne peger på Trader#1aka Haardikfor mig. Fortsæt og lav et par flere kort, og gør det muligt for et par at have forTradesat til sandt.

Læg mærke til hvordan min Card#2har forTrade == true?

Lad os prøve at bytte kort til de sjove ting: D

Klik på Send transaktion i venstre side, og cardpeg på TradingCard#2og newOwnerpeg på Trader#3denne måde:

Tryk på Send og kig på dine TradingCards, du vil se, at der Card#2nu er ejer Trader#3: D

Generering af en REST API-server

At foretage transaktioner med Playground er rart, men ikke optimalt. Vi er nødt til at lave klientsidesoftware, så brugerne giver dem en problemfri oplevelse, de behøver ikke engang nødvendigvis at vide om den underliggende blockchain-teknologi. For at gøre det har vi brug for en bedre måde at interagere med vores forretningsnetværk på. Heldigvis har vi composer-rest-servermodulet til at hjælpe os med netop det.

Indtast composer-rest-serverdin terminal, angiv [email protected], vælg aldrig brug navneområder , og fortsæt med standardindstillingerne for resten som følger:

Åbn, //localhost:3000/explorer/så bliver du mødt med en dokumenteret version af en automatisk genereret REST API: D

Generering af en kantet applikation, der bruger REST API

Kan du huske yo hyperledger-composergeneratoren? Det kan mere end at generere et virksomhedsnetværk. Det kan også oprette en Angular 4-applikation, der kører mod den REST API, vi oprettede ovenfor.

For at oprette Angular-webapplikationen skal du indtaste yo hyperledger-composerdin Terminal, vælge Angular, vælge at oprette forbindelse til et eksisterende virksomhedsnetværk med kortet [email protected]og også oprette forbindelse til en eksisterende REST API. ( Rediger: Nyere versioner af softwaren beder muligvis om kortfilen i stedet for kun navnet på kortet)

Dette fortsætter med at køre npm install, giv det et øjeblik, og når det hele er gjort, kan du indlæse //localhost:4200/og blive mødt med en side, der ligner denne:

Rediger: Nyere versioner af softwaren kræver muligvis, at du kører npm installselv og derefter kørernpm start

Du kan nu spille med dit netværk direkte fra denne applikation, som kommunikerer med netværket via REST-serveren, der kører på port 3000.

Tillykke! Du opretter netop dit første blockchain-virksomhedsnetværk ved hjælp af Hyperledger Fabric og Hyperledger Composer: D

Du kan tilføje flere funktioner til korthandelsnetværket, indstille priserne på kortene og give en balance for alle Trader. Du kan også have flere transaktioner, der tillader Traders at skifte værdien af forTrade. Du kan integrere dette med ikke-blockchain-applikationer og give brugerne mulighed for at købe nye kort, der føjes til deres konto, som de derefter kan handle videre på netværket.

Mulighederne er uendelige, hvad vil du gøre af dem? Lad mig vide i kommentarerne: D

KENDT BUG: Håndterer din Angular webapp ikke Transaktioner ordentligt?

I skrivende stund har vinkelgeneratoren et problem, hvor den lilla Invoke-knap på siden Transaktioner ikke gør noget. For at løse dette er vi nødt til at foretage et par ændringer i den genererede kantede app.

1. Få en modal til at åbne, når du trykker på knappen

Den første ændring, vi skal foretage, er, at knappen åbner modalvinduet. Koden indeholder allerede den krævede modal vinduet, knappen er bare mangler (click)og data-targetattributter.

For at løse dette skal du åbne /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

Filnavnet kan variere afhængigt af dit transactionnavn. Hvis du har flere transactions i dit virksomhedsnetværk, skal du foretage denne ændring på tværs af alle HTML-filer for transaktionsressourcetypen.

Rul ned til slutningen, så ser du en 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:

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