Hogyan lehet blokklánc-hálózatot építeni a Hyperledger Fabric and Composer segítségével

Bemutató az új blockchain fejlesztők számára

Mielőtt elkezdeném, a Hyperledger Fabric csak Unix alapú operációs rendszereken fut. Ennek eredményeként nem lesz képes futtatni a Windows rendszeren, és korlátozásai vannak a lehetőségeivel kapcsolatban. Azt javaslom, hogy a folytatás előtt állítson be egy virtuális gépet, ha Windows operációs rendszert futtat.

Ez a cikk feltételez némi ismeretet a Javascriptről. Ez nem egy kezdő programozóknak szóló oktatóanyag, sokkal inkább azoknak a programozóknak szól, akik kezdők a blockchain térben.

Mit építünk?

Tehát szeretne létrehozni egy blockchain alkalmazást, de fogalma sincs, hol kezdje? Ne aggódj. Ezen a bemutatón keresztül létrehozunk egy kereskedőkártya-hálózatot. Különböző játékosok, Traderakik TradingCardbaseball-, futball- és krikettjátékosokkal rendelkeznek, képesek lesznek kártyákat cserélni egymás között.

Felállítunk egy REST API-kiszolgálót is, hogy az ügyféloldali szoftverek kölcsönhatásba léphessenek üzleti hálózatunkkal. Végül egy Angular 4 alkalmazást is létrehozunk, amely a REST API-t használja a hálózatunk összekapcsolására.

Megtalálja a teljes végleges kódot, hogy mi készül majd erre a Github repóra

Készen áll a kezdésre?

Tartalomjegyzék

  • A Hyperledger Fabric és a kapcsolódó alkalmazások bemutatása
  • Az előfeltételek, eszközök és a Fabric futásidejének telepítése
  • Üzleti hálózatunk létrehozása és telepítése
  • Üzleti hálózatunk tesztelése
  • REST API-kiszolgáló létrehozása
  • A REST API-t használó szögletes alkalmazás létrehozása

A Hyperledger Fabric és a kapcsolódó alkalmazások bemutatása

A Hyperledger Fabric egy nyílt forráskódú keretrendszer privát (engedélyezett) blockchain üzleti hálózatok készítéséhez, ahol a tagok identitása és szerepe más tagok számára is ismert. A szövetre épített hálózat háttérként szolgál, kliens oldali alkalmazás kezelőfelülettel. SDK-k állnak rendelkezésre a Nodejs és a Java számára kliensalkalmazások készítéséhez, a Python és a Golang támogatás hamarosan megjelenik.

A Hyperledger Composer egy olyan Javascript-alapú eszköz és szkript, amely leegyszerűsíti a Hyperledger Fabric hálózatok létrehozását. Ezen eszközök segítségével üzleti hálózat archívumot (BNA) generálhatunk hálózatunkhoz. A zeneszerző nagyjából ezeket az összetevőket fedi le:

  • Üzleti hálózati archívum (BNA)
  • Zeneszerző játszótér
  • Zeneszerző REST szerver

Üzleti hálózati archívum - a Composer lehetővé teszi számunkra, hogy csomagoljunk néhány különböző fájlt, és létrehozzunk egy archívumot, amelyet aztán egy Fabric hálózatra telepíthetünk. Az archívum létrehozásához szükségünk van:

  • Hálózati modell - A hálózatban lévő erőforrások meghatározása. Ezek az erőforrások tartalmazzák az Eszközöket, a Résztvevőket és a Tranzakciókat. Ezekre később visszatérünk.
  • Üzleti logika - A tranzakciós funkciók logikája
  • Beléptető korlátozások - Különféle szabályokat tartalmaz, amelyek meghatározzák a hálózat különböző résztvevőinek jogait. Ez magában foglalja, de nem kizárólag, annak meghatározását, hogy a Felek milyen eszközöket kezelhetnek.
  • Lekérdezési fájl (opcionális) - A hálózatban futtatható lekérdezések összessége. Ezeket úgy gondolhatjuk, hogy hasonlóak az SQL lekérdezésekhez. A lekérdezésekről itt olvashat bővebben.

A Composer Playground egy webalapú felhasználói felület, amelyet üzleti hálózatunk modellezésére és tesztelésére használhatunk. A Playground jó az egyszerű Proofs of Concept modellezéséhez, mivel a böngésző helyi tárhelyét használja a blokklánc hálózat szimulálására. Ha azonban helyi Fabric futást futtatunk, és hálózatot telepítettünk hozzá, akkor azt a Playground segítségével is elérhetjük. Ebben az esetben a Playground nem a hálózatot szimulálja, hanem közvetlenül a helyi Fabric futási idővel kommunikál.

A Composer REST Server egy olyan eszköz, amely lehetővé teszi számunkra, hogy üzleti hálózatunk definíciója alapján létrehozzunk egy REST API szervert. Ezt az API-t kliens alkalmazások használhatják, és lehetővé teszi számunkra, hogy nem blokkláncos alkalmazásokat integráljunk a hálózatba.

Az előfeltételek, eszközök és a Fabric futásidejének telepítése

1. Az előfeltételek telepítése

Most, hogy magas szinten megértettük, mi szükséges e hálózatok kiépítéséhez, elkezdhetjük a fejlesztést. Mielőtt azonban ezt megtennénk, meg kell győződnünk arról, hogy az előfeltételek telepítve vannak-e a rendszerünkre. Frissített lista itt található.

  • Docker Engine és Docker Compose
  • Nodejs és NPM
  • Git
  • Python 2.7.x

Az Ubuntu felhasználói számára a Hyperledger rendelkezik egy bash szkriptel, amely rendkívül egyszerűvé teszi ezt a folyamatot. Futtassa a következő parancsokat a terminálon:

Sajnos a Mac felhasználóknak manuálisan kell telepíteniük a fent említett eszközöket, és meg kell győződniük arról, hogy a rendszerükön minden előfeltétel megtalálható. Ezt az oldalt naprakészen tartják a telepítési utasításokkal.

2. Eszközök telepítése a fejlesztés megkönnyítése érdekében

Futtassa a következő parancsokat a terminálon, és győződjön meg róla, hogy NMP parancsot NEM használ,

a zeneszerző-cli az egyetlen nélkülözhetetlen csomag. A többi nem alapvető alkotóelem, de idővel rendkívül hasznosnak bizonyul. Többet megtudhatunk arról, hogy ezek mindegyike mit csinál, amikor találkozunk velük.

3. Helyi Hyperledger Fabric futásidejű telepítése

Menjünk át a parancsokon, és nézzük meg, mit jelentenek. Először egy új könyvtárat készítünk és beírunk. Ezután letöltjük és kibontjuk a Hyperledger Fabric telepítéséhez szükséges eszközöket.

Ezután meghatározzuk a Fabric kívánt verzióját, az írás idején szükségünk van 1.2-re, tehát hlfv12-re . Ezután letöltjük a szövet futási idejét és elindítjuk.

Végül létrehozunk egy PeerAdminkártyát. A Fabric hálózat résztvevői rendelkezhetnek üzleti hálózati kártyákkal, hasonlóan a valós életű névjegykártyákhoz. Amint azt korábban említettük, a Fabric egy alapréteg, amelyre a privát blokkláncok építenek. A PeerAdmin névjegykártya birtokosa jogosult üzleti hálózatok telepítésére, törlésére és kezelésére ezen a Fabric futásidején (más néven TE!)

Ha minden jól sikerült, akkor látnia kell egy ilyen kimenetet:

Továbbá, ha beírja ls, ezt látja:

Alapvetően azt tettük itt, hogy csak letöltöttük és elindítottuk a helyi Fabric hálózatot. ./stopFabric.shHa akarjuk, abbahagyhatjuk a használatát . Fejlesztési munkamenetünk végén futnunk kell./teardownFabric.sh

MEGJEGYZÉS: Ezt a helyi futásidőt gyakran indítani, leállítani és lebontani fejlesztési célokra kell. Tartósabb állapotú futás esetén a hálózatot a fejlesztői környezeten kívül kell telepítenie. Ezt úgy teheti meg, hogy a hálózatot futtatja a Kubernetesen vagy olyan felügyelt platformokon, mint az IBM Blockchain. Ennek ellenére először át kell néznie ezt a bemutatót, hogy ötletet szerezzen.

Üzleti hálózatunk létrehozása és telepítése

Ne feledje, a csomagok yoés generator-hyperledger-composertelepítettünk korábban?

yogenerátor ökoszisztémát biztosít számunkra, ahol a generátorok pluginok, amelyeket a yo paranccsal lehet futtatni. Ez arra szolgál, hogy különféle projektekhez hozzanak létre kazánminta alkalmazásokat. generator-hyperledger-composera Yo generátor, amelyet használni fogunk, mivel specifikációkat tartalmaz többek között kazán üzleti hálózatok létrehozására.

1. Üzleti hálózat létrehozása

Nyissa meg a terminált egy kiválasztott és típusú könyvtárban yo hyperledger-composer

A fentihez hasonlóval fog fogadni. Válassza ki Business Networkés nevezze el cards-trading-networkaz alábbiak szerint:

2. Üzleti hálózatunk modellezése

Az üzleti hálózat létrehozása felé vezető első és legfontosabb lépés a jelenlévő erőforrások azonosítása. Négy erőforrástípusunk van a modellezési nyelven:

  • Eszközök
  • Résztvevők
  • Tranzakciók
  • Események

A mi cards-trading-networkfogjuk meghatározni az eszköz típusát TradingCard, a résztvevő típusától Trader, a tranzakció TradeCardés az esemény TradeNotification.

Nyissa meg a létrehozott fájlokat a választott kódszerkesztőben. Nyissa meg, org.example.biznet.ctomelyik a modellezési fájl. Törölje az összes benne lévő kódot, amikor átírjuk (kivéve a névtér deklarációt).

Ez tartalmazza az eszközünk specifikációját TradingCard. Minden eszköznek és résztvevőnek egyedi azonosítóval kell rendelkeznie, amelyet megadunk a kódban, esetünkben pedigcardId

Vagyonunk rendelkezik egy GameType cardTypetulajdonsággal, amely az alábbiakban meghatározott számlálón kívül található. Az enumokat olyan típus megadására használják, amelynek legfeljebb N lehetséges értéke lehet, de semmi más. A példánkban nem TradingCardlehet egy cardTypeeltérő Baseball, FootballvagyCricket

A Traderrésztvevő erőforrás típusunk megadásához adja hozzá a következő kódot a modellezési fájlba

Ez viszonylag egyszerűbb és meglehetősen könnyen érthető. Résztvevő típusunk van, Traderés egyedileg azonosítják őket a traderIds.

Most hozzá kell adnunk egy hivatkozást az TradingCards-hez, hogy referencia mutasson a tulajdonosukra, hogy tudjuk, kié a kártya. Ehhez vegye fel a következő sort az TradingCardeszközébe:

--> Trader owner

hogy a kód így nézzen ki:

Ez az első alkalom, hogy a --&gt-t használjuk ; és biztosan kíváncsi vagy, mi ez. Ez egy kapcsolati pont r. oa nd -> hogyan különböztetjük meg az erőforrás saját tulajdonságait és egy másik erőforrástípussal való kapcsolatot. Mivel a tulajdonos is a Trader, amely résztvevője a hálózatnak, that közvetlenül a Traderre szeretnénk hivatkozni , és ez pontosan whitt található ->.

Végül folytassa, és adja hozzá ezt a kódot a modellezési fájlba, amely meghatározza, hogy milyen paraméterekre lesz szükség egy tranzakció végrehajtásához és egy esemény kibocsátásához.

3. Logika hozzáadása tranzakcióinkhoz

A logika hozzáadásához a TradeCardfüggvény mögé szükségünk van egy Javascript logikai fájlra. Hozzon létre egy új könyvtárat liba projekt mappájában, és hozzon létre egy új fájlt logic.jsa következő kóddal:

MEGJEGYZÉS: A funkció megjegyzésében szereplő dekorátor nagyon fontos. A @param {org.example.biznet.TradingCard} tradefunkció nélkül fogalma sincs arról, hogy Transactiona kód melyik modellezési nyelvre hivatkozik. Győződjön meg arról is, hogy az átadott paraméter neve (azaz trade) az, amelyet közvetlenül a funkciódefinícióban ad át.

Ez a kód alapvetően ellenőrzi, hogy a megadott kártya rendelkezik-e, forTrade == trueés ebben az esetben frissíti a kártya tulajdonosát. Ezután kilövi az TradeNotificationeseményt ennek a kártyának.

4. Engedélyek és hozzáférési szabályok meghatározása

Adjon hozzá egy új szabályt a permissions.aclrésztvevők hozzáférésének biztosításához az erőforrásaikhoz. A gyártás során szigorúbbnak szeretné lenni ezeket a hozzáférési szabályokat. Bővebben itt olvashat róluk.

5. Üzleti hálózati archívum (BNA) létrehozása

Most, hogy az összes kódolás elkészült, itt az ideje, hogy archív fájlt készítsen üzleti hálózatunk számára, hogy telepíthessük a helyi Fabric futásidejére. Ehhez nyissa meg a Terminált a projektkönyvtárban, és írja be ezt:

composer archive create --sourceType dir --sourceName .

Ez a parancs azt mondja a Hyperledger Composer-nek, hogy egy BNA-t szeretnénk felépíteni egy könyvtárból, amely a jelenlegi gyökérmappánk.

MEGJEGYZÉS: A BNA név és verzió a package.jsonfájlból származik. További kód hozzáadásakor meg kell változtatnia az ott található verziószámot, hogy egyedi archívumokat telepítsen a meglévő üzleti hálózatok frissítésére.

6. Telepítse és telepítse a BNA fájlt

A felhasználót felhasználva telepíthetjük és telepíthetjük a hálózatot a helyi Fabric futásidejünkre PeerAdmin. Az üzleti hálózat telepítéséhez írja be a következőt:

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

Az üzleti hálózat telepítéséhez írja be

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

A networkNameés networkVersion-nek meg kell egyeznie a dokumentumban megadottakkal, package.jsonkülönben nem fog működni.

--filefelveszi a hálózat névjegykártyájához létrehozandó fájl nevét. Ezt a kártyát be kell importálni, hogy gépeléssel használható legyen

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

Elképesztő. Gépeléssel most megerősíthetjük, hogy hálózatunk működik

composer network ping --card [email protected]

--card ezúttal annak a rendszergazdának a kártyáját veszi igénybe, amelyet pingelni akarunk.

Ha minden jól sikerült, ehhez hasonlót kell látnia:

Üzleti hálózatunk tesztelése

Most, hogy hálózatunk működik és működik a Fabric-on, elindíthatjuk a Composer Playground-ot, hogy kölcsönhatásba lépjünk vele. Ehhez írja composer-playgroundbe a Terminált, és nyissa meg //localhost:8080/a böngészőjét, és ehhez hasonlót kell látnia:

Nyomja meg a Csatlakozás most lehetőséget, [email protected]és ezzel a képernyővel fogadja:

A Define oldalon megadhatunk változtatásokat a kódunkban, telepíthetjük ezeket a módosításokat a hálózatunk frissítésére és az üzleti hálózati archívumok exportálására.

Menjen át a Teszt oldalra a felső menüből, és ezt látja:

Válasszon Tradera Résztvevők közül, kattintson a jobb felső sarokban található Új résztvevő létrehozása elemre , és készítsen Traderehhez hasonló újat :

Menj előre, és csinálj még pár Traders-t. Így néz ki három kereskedőm Haardik, John és Tyrone nevekkel.

Készítsünk néhány eszközt. Kattintson TradingCarda bal oldali menüből, majd nyomja meg az Új eszköz létrehozása gombot . Figyelje meg, hogy a ownermező különösen érdekes itt, és valami ilyesmit néz ki:

Ez egy kapcsolat. Ez az, amit a --> eszközök. Megadjuk a pontos erőforrástípust, majd az egyedi azonosítójuk és voila, van kapcsolatmutatónk.

Folytassa, és készítsen TradingCardvalami hasonlót ehhez:

Figyelje meg, hogy a ownermezők rám utalnak Trader#1más néven Haardik. Készítsen még pár kártyát, és tegye lehetővé, hogy egy pár forTradeigazra álljon.

Figyelje meg, hogy Card#2van forTrade == true?

Most pedig a szórakoztató dolgokért próbáljuk ki a kártyák cseréjét: D

Kattintson a Tranzakció elküldése elemre a bal oldalon, és cardmutasson rá, TradingCard#2és newOwnermutasson rá, Trader#3mint ez:

Nyomja meg a Küldés gombot, és nézze meg a saját TradingCards-ját, és meglátja, hogy Card#2most már van tulajdonosa Trader#3: D

REST API-kiszolgáló létrehozása

A Playgrounddal jó tranzakciókat végezni, de nem optimális. Kliensoldali szoftvert kell készítenünk a felhasználók számára, hogy zökkenőmentes élményt nyújtsanak számukra, még csak nem is kell feltétlenül tudniuk az alapul szolgáló blockchain technológiáról. Ehhez jobb módszerre van szükségünk az üzleti hálózatunkkal való interakcióhoz. Szerencsére van egy composer-rest-servermodulunk, amely éppen ebben segít.

Írja composer-rest-serverbe a terminált, adja meg [email protected], jelölje be, hogy soha ne használja a névtereket , és folytassa az alapértelmezett beállításokkal a többit az alábbiak szerint:

Nyissa meg, //localhost:3000/explorer/és egy automatikusan létrehozott REST API dokumentált verziója fogadja: D

A REST API-t használó szögletes alkalmazás létrehozása

Emlékszel a yo hyperledger-composergenerátorra? Többre képes, mint üzleti hálózat létrehozása. Ezenkívül létrehozhat egy Angular 4 alkalmazást, amely a fent létrehozott REST API-val fut.

Az Angular webalkalmazás létrehozásához írja yo hyperledger-composerbe a terminált, válassza az Angular elemet, válassza ki, hogy csatlakozik-e egy meglévő üzleti hálózathoz a kártyával [email protected], és csatlakozzon egy meglévő REST API-hoz is. ( Szerkesztés: A szoftver újabb verziói a kártya fájlját kérhetik a kártya neve helyett)

Ez tovább fog futni npm install, adjon neki egy percet, és miután ez minden elkészült, betöltheti //localhost:4200/és egy ehhez hasonló oldallal üdvözölheti:

Szerkesztés: A szoftver újabb verzióihoz szükség lehet arra, hogy futtassa npm installmagát, majd futtassanpm start

Most már közvetlenül ebből az alkalmazásból játszhat a hálózatával, amely a 3000-es porton futó REST szerveren keresztül kommunikál a hálózattal.

Gratulálunk! Most építette fel első blokklánc üzleti hálózatát a Hyperledger Fabric és a Hyperledger Composer segítségével: D

További funkciókat adhat hozzá a kártyakereskedési hálózathoz, meghatározhatja az árakat a kártyákon, és mindenkinek megadhatja az egyensúlyt Trader. Több tranzakcióval is rendelkezhet, amelyek lehetővé teszik az Traders számára az értékek váltását forTrade. Ezt integrálhatja nem blockchain alkalmazásokkal, és lehetővé teheti a felhasználók számára, hogy új kártyákat vásároljanak, amelyek hozzáadódnak a fiókjukhoz, és ezután tovább kereskedhetnek a hálózaton.

A lehetőségek végtelenek, mit fog csinálni belőlük? Mondd meg a kommentekben: D

Ismert hiba: Az Ön Angular webalkalmazása nem kezeli megfelelően a tranzakciókat?

Az írás idején a szöggenerátornak olyan problémája van, hogy a Tranzakciók oldalon a lila Invoke gomb nem tesz semmit. Ennek kijavításához néhány módosítást kell végrehajtanunk a létrehozott szögletes alkalmazásban.

1. Szerezzen meg egy modált, amelyet megnyithat, amikor megnyomja a gombot

Az első változtatás, amelyet meg kell tennünk, hogy a gomb megnyissa a modális ablakot. A kód már tartalmazza a szükséges modális ablakot, a gombból éppen hiányzik a (click)és az data-targetattribútum.

Ennek megoldásához nyissa meg /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

A fájlnév az Ön nevétől függően változhat transaction. Ha több transactions van az üzleti hálózatban, akkor ezt a változást meg kell tennie az összes tranzakciós erőforrás típusú HTML fájlban.

Görgessen lefelé a végéig, és meglátja a 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:

Original text


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