Hyperledger szövet bábuknak

Blockchain platform a vállalat számára

Hyperledger szövet bábuknak

Jó napot, kedves olvasók, a nevem Nikolay Nefedov, az IBM műszaki szakértője vagyok, ebben a cikkben szeretném bemutatni a blokklánc platformot - a Hyperledger Fabric-et. A platformot nagyvállalati szintű üzleti alkalmazások építésére tervezték. A cikk szintje felkészületlen, informatikai technológiai alapismeretekkel rendelkező olvasóknak szól.

A Hyperledger Fabric egy nyílt forráskódú projekt, a nyílt forráskódú Hyperledger projekt egyik ága, amely a Linux Foundation konzorciuma. A Hyperledger Fabric-et eredetileg a Digital Assets és az IBM indította el. A Hyperledger Fabric platform fő jellemzője a vállalati használatra való összpontosítás. Ezért a platform kialakításánál figyelembe vették a tranzakciók nagy sebességét és alacsony költségét, valamint az összes résztvevő azonosítását. Ezeket az előnyöket a tranzakció-ellenőrzési szolgáltatás szétválasztása és az elosztott nyilvántartás új blokkjainak kialakítása, valamint a hitelesítési központ használata és a résztvevők engedélyezése biztosítja.

Cikkem a Hyperledger Fabricról szóló cikksorozat része, amelyen belül egy rendszerprojektet írunk le az egyetemre belépő hallgatók rögzítésére.

A Hyperledger Fabric általános architektúrája

A Hyperledger Fabric egy elosztott blokklánc-hálózat, amely különféle funkcionális összetevőkből áll, amelyek a hálózati csomópontokra vannak telepítve. A Hyperledger Fabric összetevői Docker-tárolók, amelyek szabadon letölthetők a DockerHubról. A Hyperledger Fabric Kubernetes környezetben is futtatható.

Intelligens szerződések (a Hyperledger Fabric kontextusában lánckód) írásához Golangot használtunk (bár a Hyperledger Fabric lehetővé teszi más nyelvek használatát). Egyéni alkalmazás fejlesztéséhez esetünkben a Node.js-t használtuk a megfelelő Hyperledger Fabric SDK-val.

A csomópontok üzleti logikát (intelligens szerződés) - lánckódot hajtanak végre, tárolják az elosztott nyilvántartás állapotát (főkönyvi adatok) és végrehajtják a platform egyéb rendszerszolgáltatásait. A csomópont csak egy logikai egység, ugyanazon a fizikai szerveren különböző csomópontok létezhetnek. Sokkal fontosabb, hogy a csomópontok hogyan vannak csoportosítva (Trusted domain), és a blokklánc hálózat milyen funkcióihoz kapcsolódnak.

Az általános architektúra így néz ki:

Hyperledger szövet bábuknak

1. kép. A Hyperledger Fabric általános építészete

A felhasználói alkalmazás (Submitting Client) egy olyan alkalmazás, amellyel a felhasználók a blokklánc hálózattal dolgoznak. A munkavégzéshez felhatalmazással és megfelelő jogosultságokkal kell rendelkeznie a hálózaton végzett különféle műveletekhez.

A társak többféle szerepet töltenek be:

  • Az Endorsing Peer egy olyan csomópont, amely egy tranzakció végrehajtását szimulálja (végrehajtja az intelligens szerződés kódját). Az intelligens szerződés ellenőrzése és végrehajtása után a csomópont visszaküldi a végrehajtás eredményeit az ügyfélalkalmazásnak az aláírásával együtt.
  • A Rendelési szolgáltatás több csomóponton elosztott szolgáltatás, amely az elosztott nyilvántartás új blokkjainak generálására és a tranzakciók végrehajtására szolgáló sor létrehozására szolgál. A Rendelési szolgáltatás nem ad hozzá új blokkokat a rendszerleíró adatbázishoz (Ez a szolgáltatás a teljesítmény javítása érdekében átkerült a Committing Peers részbe).
  • A Committing Peer egy olyan csomópont, amely elosztott rendszerleíró adatbázist tartalmaz, és új blokkokat ad hozzá a rendszerleíró adatbázishoz (amelyeket a Rendelési szolgáltatás hozott létre). Minden kötelezettséget vállaló partner tartalmazza az elosztott főkönyv helyi másolatát. A Committing Peer ellenőrzi a blokkon belüli összes tranzakció érvényességét, mielőtt új blokkot adna hozzá helyileg.

A jóváhagyási szabályzat a tranzakció érvényességének ellenőrzésére szolgáló szabályzat. Ezek a házirendek határozzák meg a csomópontok azon szükséges készletét, amelyeken az intelligens szerződést végre kell hajtani, hogy a tranzakció érvényesnek minősüljön.

Az elosztott nyilvántartás - Lerger - két részből áll: WolrldState (más néven State DataBase) és BlockChain.

A BlockChain egy blokkok lánca, amely az elosztott rendszerleíró objektumokon bekövetkezett összes változás rekordját tárolja.

A WolrldState egy elosztott főkönyvi komponens, amely az összes elosztott főkönyvi objektum aktuális (vágóél) értékét tárolja.

A WorldState egy adatbázis, az alapverzióban - LevelDB vagy egy összetettebb - CouchDB, amely kulcs-érték párokat tartalmaz, például: Keresztnév - Ivan, Vezetéknév - Ivanov, regisztráció dátuma a rendszerben - 12.12.21/17.12.1961/XNUMX , születési dátum - XNUMX. stb. A WorldState-nek és az elosztott nyilvántartásnak konzisztensnek kell lennie egy adott csatorna összes résztvevője között.

Mivel a Hyperledger Fabric olyan hálózat, amelyben minden résztvevő ismert és hitelesített, egy dedikált hitelesítési hatóságot – CA-t (Certification Authority) használ. A CA az X.509 szabványon és a nyilvános kulcsú infrastruktúrán (PKI) alapul.

A Tagsági szolgáltatás egy olyan szolgáltatás, amelyen keresztül a tagok ellenőrzik, hogy egy objektum egy adott szervezethez vagy csatornához tartozik.

A tranzakció – a legtöbb esetben új adatok írása egy elosztott nyilvántartásba.
Vannak tranzakciók is csatornák vagy intelligens szerződések létrehozására. A tranzakciót a felhasználói alkalmazás kezdeményezi, és az elosztott főkönyvben lévő rekorddal zárul.

A csatorna egy zárt alhálózat, amely két vagy több blokklánc-hálózati résztvevőből áll, és amelyet arra terveztek, hogy bizalmas tranzakciókat bonyolítson le a résztvevők korlátozott, de ismert körében. A csatornát a résztvevők, az elosztott nyilvántartás, az intelligens szerződések, a Rendelési szolgáltatás, a WorldState határozzák meg. A csatorna minden résztvevőjének felhatalmazással kell rendelkeznie a csatornához való hozzáférésre, és jogosultsággal kell rendelkeznie különféle típusú tranzakciók végrehajtására. Az engedélyezés a Tagsági szolgáltatás segítségével történik.

Tipikus tranzakció-végrehajtási forgatókönyv

Ezután egy tipikus tranzakció-végrehajtási forgatókönyvről szeretnék beszélni a projektünk példáján keresztül.

Belső projektünk részeként létrehoztuk a Hyperledger Fabric hálózatot, amely az egyetemekre belépő hallgatók regisztrálására és elszámolására szolgál. Hálózatunk két szervezetből áll, amelyek az A és a B Egyetemhez tartoznak. Mindegyik szervezet tartalmaz egy kliens alkalmazást, valamint saját elkötelezett és támogató partnert. Használjuk a Rendelési szolgáltatás, a Tagsági szolgáltatás és a Hitelesítés-szolgáltató közös szolgáltatásokat is.

1) Tranzakció kezdeményezése

A Hyperledger Fabric SDK-t használó felhasználói alkalmazás tranzakciókérést kezdeményez, és elküldi a kérést az intelligens szerződésekkel rendelkező csomópontoknak. A kérés lehet egy elosztott nyilvántartásból (Ledger) történő módosítás vagy olvasás. Ha egy példát vesszük az egyetemi hallgatók könyvelésére szolgáló tesztrendszerünk konfigurációjára, az ügyfélalkalmazás tranzakciós kérelmet küld az A és B egyetem csomópontjainak, amelyek a megnevezett smart contract Endorsement szabályzatában szerepelnek. Az A csomópont az egyetemen található csomópont, amely a beérkező hallgatót regisztrálja, a B csomópont pedig egy másik egyetemen található csomópont. Ahhoz, hogy egy tranzakció egy elosztott nyilvántartásba kerüljön, szükséges, hogy minden csomópont, amelynek az üzleti logika szerint jóvá kell hagynia a tranzakciót, sikeresen végrehajtsa az intelligens szerződéseket ugyanazzal az eredménnyel. A csomópont Egy felhasználói alkalmazás a Hyperledger Fabric SDK-eszközöket használva beszerzi a jóváhagyási házirendet, és megtanulja, hogy mely csomópontoknak kell tranzakciókérést küldeni. Ez egy adott intelligens szerződés (lánckód funkció) meghívására irányuló kérés bizonyos adatok elosztott nyilvántartásba való olvasásához vagy írásához. Technikailag a kliens SDK a megfelelő függvényt használja, melynek API-ja egy bizonyos objektumnak ad át tranzakciós paramétereket, emellett kliens aláírást ad hozzá, és ezeket az adatokat protokollpufferen keresztül gRPC-n keresztül elküldi a megfelelő csomópontoknak (endorsing peer).

Hyperledger szövet bábuknak
2. kép Tranzakció kezdeményezése

2) Intelligens szerződés végrehajtása

A csomópontok (Endorsing Peers), miután megkapták a tranzakció lebonyolítására irányuló kérést, ellenőrzik az ügyfél aláírását, és ha minden rendben van, akkor vesznek egy objektumot a kérési adatokkal, és lefuttatják az intelligens szerződés végrehajtásának szimulációját (lánckód funkció) ezt az adatot. Az intelligens szerződés egy tranzakció üzleti logikája, egy bizonyos feltétel- és utasításkészlet (esetünkben diák igazolása, új hallgató-e, vagy már regisztrált, életkor ellenőrzése stb.). Az intelligens szerződés végrehajtásához a WorldState adataira is szükség lesz. Az intelligens szerződés szimulációja a jóváhagyó peer-en két adatkészletet kap – olvasási és írási halmazt. Read Set és Write Set az eredeti és az új WorldState értékek. (új – az okosszerződés szimulációja során kapott értelemben).

Hyperledger szövet bábuknak
3. kép Okos szerződés teljesítése

3) Adatok visszaküldése az ügyfélalkalmazásba

Az intelligens szerződés szimulációjának végrehajtása után az Endorsing Peers visszaküldi az eredeti adatokat és a szimuláció eredményét, valamint az RW Set-et a tanúsítványukkal aláírva az ügyfélalkalmazásnak. Ebben a szakaszban nem történik változás az elosztott beállításjegyzékben. Az ügyfélalkalmazás ellenőrzi az Endorsing Peer aláírást, és összehasonlítja az eredeti tranzakciós adatokat, amelyeket elküldtek a visszaküldött adatokkal (vagyis ellenőrzi, hogy az eredeti adat, amelyen a tranzakciót szimulálta, nem torzult-e). Ha a tranzakció csak a rendszerleíró adatbázisból való adatok beolvasására irányult, akkor az ügyfélalkalmazás ennek megfelelően megkapja a szükséges olvasási készletet, és ez általában sikeresen befejezi a tranzakciót az elosztott nyilvántartás módosítása nélkül. Egy olyan tranzakció esetén, amelynek módosítania kell a nyilvántartásban szereplő adatokat, az ügyfélalkalmazás ezenkívül ellenőrzi a Jóváhagyási szabályzat megvalósítását. Lehetséges, hogy egy ügyfélalkalmazás nem ellenőrzi a jóváhagyási házirend végrehajtásának eredményét, de a Hyperledger Fabric platform ebben az esetben lehetővé teszi a csomópontok (Committing Peers) házirendek ellenőrzését a tranzakció regisztrációs adatbázishoz való hozzáadásának szakaszában.

Hyperledger szövet bábuknak
4. kép Adatok visszaküldése a kliens alkalmazásba

4) RW készletek küldése Ordering Peers-nek

Az ügyfélalkalmazás a tranzakciót a hozzá tartozó adatokkal együtt elküldi a Megrendelő szolgáltatásnak. Ez magában foglalja az RW-készletet, a partnerek jóváhagyó aláírásait és a csatornaazonosítót.

Rendelési szolgáltatás – a név alapján ennek a szolgáltatásnak a fő funkciója a beérkező tranzakciók megfelelő sorrendben történő lebonyolítása. Valamint az elosztott registry új blokkjának kialakítása és az új generált blokkok garantált eljuttatása az összes Commiting csomóponthoz, így biztosítva az adatok konzisztenciáját az elosztott nyilvántartást tartalmazó összes csomóponton (Committing peer). Ugyanakkor maga a Rendelési szolgáltatás semmilyen módon nem módosítja a rendszerleíró adatbázist. A Rendelési szolgáltatás a rendszer létfontosságú eleme, tehát több csomópontból álló klaszter. A Rendelési szolgáltatás nem ellenőrzi a tranzakció érvényességét, egyszerűen elfogad egy adott csatornaazonosítóval rendelkező tranzakciót, a beérkező tranzakciókat meghatározott sorrendbe rendezi, és azokból az elosztott nyilvántartás új blokkjait képezi. Egy rendelési szolgáltatás egyszerre több csatornát is kiszolgálhat. A Rendelési szolgáltatás tartalmaz egy Kafka-fürtöt, amely a helyes (megváltoztathatatlan) tranzakciós sort tartja fenn (lásd 7. pont).

Hyperledger szövet bábuknak
5. kép RW készletek küldése Ordering Peers-nek

5) A generált blokkok elküldése a Committing Peer-nek

A Rendelési szolgáltatásban generált blokkok továbbításra (szórásra) kerülnek az összes hálózati csomóponthoz. Minden csomópont, miután kapott egy új blokkot, ellenőrzi, hogy az megfelel-e a jóváhagyási szabályzatnak, ellenőrzi, hogy az intelligens szerződés szimuláció eredményeként az összes jóváhagyó társ ugyanazt az eredményt (Write Set) kapta-e, és azt is ellenőrzi, hogy az eredeti értékek megvannak-e megváltozott (vagyis Read Set - az intelligens szerződés által a WorldState-től beolvasott adatok) a tranzakció kezdeményezésének pillanatától kezdve. Ha minden feltétel teljesül, a tranzakció érvényesnek lesz jelölve, ellenkező esetben a tranzakció érvénytelen státuszt kap.

Hyperledger szövet bábuknak
6. kép Létrehozott blokkok küldése Committing Peer-nek

6) Blokk hozzáadása a rendszerleíró adatbázishoz

Minden csomópont hozzáad egy tranzakciót az elosztott nyilvántartás helyi példányához, és ha a tranzakció érvényes, akkor a Write Set alkalmazásra kerül a WorldState-re (jelenlegi állapot), és ennek megfelelően az objektumok új értékei, amelyeket érintett a rendszer. tranzakciót írnak. Ha egy tranzakció érvénytelen tokent kapott (például két tranzakció történt ugyanazokkal az objektumokkal ugyanabban a blokkban, akkor az egyik tranzakció érvénytelennek bizonyul, mivel az eredeti értékeket egy másik megváltoztatta tranzakció). Ez a tranzakció is hozzáadódik az elosztott főkönyvhöz egy érvénytelen tokennel, de ennek a tranzakciónak a Write Setje nem kerül alkalmazásra az aktuális WorldState-ra, és ennek megfelelően nem módosítja a tranzakcióban résztvevő objektumokat. Ezt követően értesítést küld a felhasználói alkalmazásnak, hogy a tranzakció véglegesen felkerült az elosztott nyilvántartásba, valamint a tranzakció állapota, vagyis hogy érvényes-e vagy sem...

Hyperledger szövet bábuknak
7. kép Blokk hozzáadása a rendszerleíró adatbázishoz

SZOLGÁLTATÁS MEGRENDELÉSE

A Rendelési szolgáltatás egy Kafka klaszterből áll, a megfelelő ZooKeeper csomópontokkal és Rendelési szolgáltatás csomópontokkal (OSN), amelyek a Rendelési szolgáltatás kliensei és a Kafka Cluster között állnak. A Kafka-fürt egy elosztott, hibatűrő áramlás- (üzenet-) menedzsment platform. A Kafka minden csatornája (téma) egy megváltoztathatatlan rekordsorozat, amely csak új rekord hozzáadását támogatja (egy meglévő törlése nem lehetséges). Az alábbiakban a téma felépítésének illusztrációja látható. Kafkának ezt a tulajdonságát használják blokklánc platform felépítéséhez.

Hyperledger szövet bábuknak
átvéve a kafka.apache.org webhelyről

  • 8. kép Rendelési szolgáltatás Témaszerkezet*

Hasznos Linkek

Youtube – Blokklánc építése az üzleti élet számára a Hyperledger Project segítségével
Hyperledger Fabric Docs
Hyperledger szövet: elosztott operációs rendszer az engedélyezett blokkláncokhoz

Köszönetnyilvánítás

Mély köszönetemet szeretném kifejezni kollégáimnak a cikk elkészítésében nyújtott segítségükért:
Nikolay Marin
Igor Khapov
Dmitrij Gorbacsov
Alekszandr Zemcov
Ekaterina Guseva

Forrás: will.com

Hozzászólás