Tessuto Hyperledger per manichini

Una piattaforma Blockchain per l'impresa

Tessuto Hyperledger per manichini

Bonu dopu meziornu, cari lettori, mi chjamu Nikolay Nefedov, sò un specialistu tecnicu in IBM, in questu articulu vogliu presentà a piattaforma di blockchain - Hyperledger Fabric. A piattaforma hè pensata per custruisce applicazioni cummerciale di classe impresa. U livellu di l'articulu hè per i lettori impreparati cun cunniscenze basi di e tecnulugia IT.

Hyperledger Fabric hè un prughjettu open-source, unu di i rami di u prughjettu open source Hyperledger, un cunsorziu di a Fundazione Linux. Hyperledger Fabric hè stata inizialmente iniziata da Digital Assets è IBM. A funzione principale di a piattaforma Hyperledger Fabric hè u so focus in l'usu di l'impresa. Per quessa, a piattaforma hè stata sviluppata in cunsiderà l'alta veloce di e transazzione è u so low cost, è ancu l'identificazione di tutti i participanti. Questi vantaghji sò ottenuti per a separazione di u serviziu di verificazione di transazzione è a furmazione di novi blocchi di u registru distribuitu, è ancu l'usu di un centru di certificazione è l'autorizazione di i participanti.

U mo articulu face parte di una seria di articuli nantu à Hyperledger Fabric, in quale avemu descrittu un prughjettu di sistema per a registrazione di i studienti chì entranu in una università.

Architettura generale di Hyperledger Fabric

Hyperledger Fabric hè una reta di blockchain distribuita cumpostu di diversi cumpunenti funziunali chì sò stallati nantu à i nodi di a rete. I cumpunenti di Hyperledger Fabric sò cuntenituri Docker chì ponu esse scaricati liberamente da DockerHub. Hyperledger Fabric pò ancu esse eseguitu in un ambiente Kubernetes.

Per scrive cuntratti intelligenti (chaincode in u cuntestu di Hyperledger Fabric), avemu usatu Golang (ancu se Hyperledger Fabric permette l'usu di altre lingue). Per sviluppà una applicazione persunalizata, in u nostru casu, avemu usatu Node.js cù u currispundente Hyperledger Fabric SDK.

I nodi esecutà a logica cummerciale (cuntrattu intelligente) - chaincode, almacenanu u statu di u registru distribuitu (data di ledger) è eseguisce altri servizii di sistema di a piattaforma. Un node hè solu una unità logica; diversi nodi ponu esiste in u stessu servitore fisicu. Moltu più impurtante hè cumu i nodi sò raggruppati (Domain Trusted) è chì funzioni di a reta di blockchain sò assuciati.

L'architettura generale s'assumiglia cusì:

Tessuto Hyperledger per manichini

Picture 1. Architettura generale di Hyperledger Fabric

L'applicazione di l'utilizatori (Submitting Client) hè una applicazione cù quale l'utilizatori travaglianu cù a reta di blockchain. Per travaglià, deve esse autorizatu è avè i diritti apprupriati per diversi tipi d'azzioni in a reta.

I pari venenu in parechji ruoli:

  • Endorsing Peer hè un node chì simula l'esekzione di una transazzione (eseguisce u codice di u cuntrattu intelligente). Dopu a verificazione è l'esekzione di u cuntrattu intelligente, u node torna i risultati di l'esekzione à l'applicazione cliente cù a so firma.
  • U serviziu di Ordine hè un serviziu distribuitu nantu à parechji nodi, utilizatu per generà novi blocchi di u registru distribuitu è ​​creà una fila per l'esekzione di transacciones. U serviziu di Ordine ùn aghjunghje micca novi blocchi à u registru (Questa funzione hè stata spustata in Committing Peers per migliurà u rendiment).
  • Committing Peer hè un node chì cuntene un registru distribuitu è ​​aghjunghje novi blocchi à u registru (chì sò stati generati da u Serviziu di Ordine). Tutti i Peers Committing cuntenenu una copia lucale di u ledger distribuitu. Committing Peer verifica tutte e transazzione in u bloccu per a validità prima di aghjunghje un novu bloccu in u locu.

A Politica di Endorsement hè a pulitica per verificà a validità di una transazzione. Queste pulitiche definiscenu u settore necessariu di nodi nantu à quale u cuntrattu intelligente deve esse eseguitu per chì a transazzione sia ricunnisciuta cum'è valida.

U registru distribuitu - Lerger - hè custituitu di dui parti: WolrldState (chjamatu ancu State DataBase) è BlockChain.

BlockChain hè una catena di blocchi chì guarda i registri di tutti i cambiamenti chì sò accaduti à l'oggetti di registru distribuiti.

WolrldState hè un cumpunente di ledger distribuitu chì guarda i valori attuali (taglienti) di tutti l'uggetti di ledger distribuiti.

WorldState hè una basa di dati, in a versione basica - LevelDB o una più cumplessa - CouchDB, chì cuntene coppie chjave-valore, per esempiu: Nome - Ivan, Cognome - Ivanov, data di registrazione in u sistema - 12.12.21/17.12.1961/XNUMX , data di nascita - XNUMX/XNUMX/XNUMX, etc. WorldState è u registru distribuitu deve esse coherente trà tutti i participanti in un canale determinatu.

Siccomu Hyperledger Fabric hè una reta in quale tutti i participanti sò cunnisciuti è autenticati, usa una autorità di certificazione dedicata - CA (Autorità di Certificazione). CA opera basatu annantu à u standard X.509 è l'infrastruttura di chjave publica - PKI.

U Serviziu di Membership hè un serviziu per mezu di quale i membri verificanu chì un ughjettu appartene à una urganizazione o canale particulari.

Una transazzione - in a maiò parte di i casi, scrive novi dati à un registru distribuitu.
Ci sò ancu transazzione per a creazione di canali o cuntratti intelligenti. A transazzione hè iniziata da l'applicazione di l'utilizatori è finisce cù un registru in u ledger distribuitu.

Un Canale hè una subnetwork chjusa composta di dui o più participanti di a rete di blocchi, pensati per fà transazzione cunfidenziale in un cercolu limitatu ma cunnisciutu di participanti. U canali hè determinatu da i participanti, u so registru distribuitu, i cuntratti intelligenti, u serviziu di ordini, u WorldState. Ogni participante di u canali deve esse autorizatu à accede à u canali è avè u dirittu di fà diversi tipi di transazzione. L'autorizazione hè realizata utilizendu u Serviziu di i membri.

Scenariu tipicu di esecuzione di transazzione

In seguitu, vogliu parlà di un scenariu tipicu di esecuzione di transazzione utilizendu u nostru prughjettu cum'è un esempiu.

Comu parte di u nostru prughjettu internu, avemu creatu a reta Hyperledger Fabric, chì hè pensata per registrà è cuntà i studienti chì entranu in l'università. A nostra reta hè custituita da duie urganisazioni chì appartenenu à l'Università A è l'Università B. Ogni urganizazione cuntene una applicazione cliente, è ancu a so propria Cummissione è Endorsing Peer. Avemu ancu aduprà i servizii cumuni Serviziu d'Ordine, Serviziu di Membri è Autorità di Certificazione.

1) Iniziazione di a transazzione

Una applicazione d'utilizatore, utilizendu l'Hyperledger Fabric SDK, inizia una dumanda di transazzione è manda a dumanda à i nodi cù cuntratti intelligenti. A dumanda pò esse di cambià o leghje da un registru distribuitu (Ledger). Se avemu cunsideratu un esempiu di a nostra cunfigurazione di u sistema di teste per a cuntabilità per i studienti università, l'applicazione cliente manda una dumanda di transazzione à i nodi di l'università A è B, chì sò inclusi in a pulitica di Endorsement di u cuntrattu intelligente chjamatu. Node A hè un node chì si trova in l'università chì registra u studiente entrante, è u node B hè un node chì si trova in una altra università. Per esse salvatu una transazzione in un registru distribuitu, hè necessariu chì tutti i nodi chì, secondu a logica di l'affari, devenu appruvà a transazzione, eseguisce cun successu cuntratti intelligenti cù u stessu risultatu. U nodu Una applicazione d'utilizatore, utilizendu l'uttine Hyperledger Fabric SDK, ottene a pulitica di Endorsement è ampara à quale nodi mandà una dumanda di transazzione. Questa hè una dumanda per invucà un cuntrattu intelligente specificu (funzione di chaincode) per leghje o scrive certe dati à un registru distribuitu. Tecnicamente, u SDK di u cliente usa a funzione currispundenti, l'API di quale hè passatu un certu ughjettu cù i paràmetri di transazzione, è aghjunghje ancu una firma di u cliente è manda sta dati via buffer di protokollu nantu à gRPC à i nodi appropritati (peers endorsing).

Tessuto Hyperledger per manichini
Picture 2. Inizià una transazzione

2) Esecuzione di cuntrattu intelligenti

Nodes (Endorsing Peers), avè ricivutu una dumanda per fà una transazzione, verificate a firma di u cliente è se tuttu hè in ordine, piglianu un ughjettu cù i dati di dumanda è eseguite una simulazione di l'esekzione di un cuntrattu intelligente (funzione di chaincode) cù sta dati. Un cuntrattu intelligente hè a logica cummerciale di una transazzione, un certu settore di cundizioni è struzzioni (in u nostru casu, questu hè verificazione di un studiente, hè questu un novu studiente, o hè digià registratu, verificazione di età, etc.). Per eseguisce u cuntrattu intelligente, avete ancu bisognu di dati da WorldState. In u risultatu di simulazione di un cuntrattu intelligenti nantu à u peer Endorsing, sò ottenuti dui gruppi di dati - Read Set and Write Set. Read Set è Write Set sò i valori originali è novi WorldState. (novu - in u sensu ottenutu durante a simulazione di un cuntrattu intelligente).

Tessuto Hyperledger per manichini
Picture 3. Esecuzione di un cuntrattu intelligente

3) Riturnà i dati à l'applicazione cliente

Dopu avè realizatu una simulazione di u cuntrattu intelligente, Endorsing Peers torna i dati originali è u risultatu di a simulazione, è ancu u RW Set, firmatu da u so certificatu à l'applicazione cliente. In questa fase, ùn ci sò micca cambiamenti in u registru distribuitu. L'applicazione cliente cuntrolla a firma Endorsing Peer, è ancu paragunate i dati di transazzione originale chì sò stati mandati è i dati chì sò stati restituiti (vale à dì, verifica se i dati originali nantu à quale a transazzione hè stata simulata hè stata distorta). Se a transazzione hè stata solu per leghje e dati da u registru, allora l'applicazione di u cliente riceve per quessa u set di lettura necessariu è questu generalmente compie a transazzione cù successu senza cambià u registru distribuitu. In u casu di una transazzione chì deve cambià e dati in u registru, l'applicazione cliente verifica in più l'implementazione di a pulitica di Endorsing. Hè pussibule chì una applicazione di u cliente ùn cuntrolla micca u risultatu di eseguisce a Politica di Endorsement, ma a piattaforma Hyperledger Fabric in questu casu furnisce a verificazione di e pulitiche nantu à i nodi (Committing Peers) in u stadiu di aghjunghje una transazzione à u registru.

Tessuto Hyperledger per manichini
Picture 4. Riturnà i dati à l'applicazione cliente

4) Mandatu RW sets à Ordering Peers

L'applicazione cliente manda a transazzione cù e dati accumpagnati à u serviziu di Ordine. Questu include u RW Set, Endorsing peers signatures, è u Channel ID.

U serviziu d'ordine - basatu annantu à u nome, a funzione principale di stu serviziu hè di urganizà e transacciones entranti in l'ordine currettu. In quantu à a furmazione di un novu bloccu di u registru distribuitu è ​​a consegna garantita di novi blocchi generati à tutti i nodi di Committing, assicurendu cusì a coherenza di dati in tutti i nodi chì cuntenenu u registru distribuitu (Committing peers). À u listessu tempu, u serviziu di Ordine stessu ùn cambia micca u registru in ogni modu. U serviziu di Ordine hè un cumpunente vitale di u sistema, per quessa hè un cluster di parechji nodi. U serviziu di Ordine ùn cuntrolla micca a transazzione per a validità, solu accetta una transazzione cù un certu identificatore di canali, organiza transazzione entrante in un certu ordine è forma novi blocchi di u registru distribuitu da elli. Un serviziu di Ordine pò serve parechji canali simultaneamente. U serviziu di Ordine include un cluster Kafka, chì mantene a fila di transazzione curretta (immutable) (vede Puntu 7).

Tessuto Hyperledger per manichini
Picture 5. Sending RW sets to Ordering Peers

5) Invià blocchi generati à Committing Peer

I blocchi generati in u serviziu di Ordine sò trasmessi (broadcast) à tutti i nodi di a rete. Ogni nodu, dopu avè ricevutu un novu bloccu, verifica u rispettu di a Politica di Endorsing, verifica chì tutti i Peers Endorsing anu ricevutu u stessu risultatu (Write Set) in u risultatu di a simulazione di cuntrattu intelligenti, è verifica ancu se i valori originali anu avutu. cambiatu (vale à dì, Read Set - dati letti da u cuntrattu intelligente da WorldState) da u mumentu chì a transazzione hè stata iniziata. Se tutte e cundizioni sò scontri, a transazzione hè marcata cum'è valida, altrimente, a transazzione riceve u statutu invalidu.

Tessuto Hyperledger per manichini
Picture 6. Mandate i blocchi generati à Committing Peer

6) Aghjunghjendu un bloccu à u registru

Ogni nodu aghjunghjenu una transazzione à a so copia lucale di u registru distribuitu, è se a transazzione hè valida, allora u Set di Scrittura hè appiicatu à u WorldState (statu attuale), è per quessa, novi valori di l'uggetti chì sò stati affettati da transazzione sò scritti. Se una transazzione hà ricivutu un token chì ùn hè micca validu (per esempiu, duie transazzione sò accadute cù i stessi oggetti in u stessu bloccu, allora una di e transazzione serà invalida, postu chì i valori originali sò digià cambiati da un altru. transazzione). Questa transazzione hè ancu aghjuntu à u libru distribuitu cù un token invalidu, ma u Set di Scrittura di sta transazzione ùn hè micca appiicata à u WorldState attuale è, per quessa, ùn cambia micca l'uggetti chì participanu à a transazzione. Dopu questu, una notificazione hè mandata à l'applicazione di l'utilizatori chì a transazzione hè stata aghjunta in permanenza à u registru distribuitu, è ancu u statutu di a transazzione, vale à dì s'ellu hè validu o micca ...

Tessuto Hyperledger per manichini
Picture 7. Aghjunghjendu un bloccu à u registru

SERVICE DI ORDINE

U Serviziu di Ordine hè custituitu da un cluster Kafka cù i nodi ZooKeeper currispondenti è i Nodi di u serviziu di Ordine (OSN), chì si trovanu trà i clienti di u serviziu di Ordine è u Cluster Kafka. U cluster Kafka hè una piattaforma di gestione di flussu (messaghju) distribuita è tolerante à i difetti. Ogni canale (tema) in Kafka hè una sequenza immutable di registri chì sustene solu l'aghjunghje un novu record (sguassà un esistente ùn hè micca pussibule). Una illustrazione di a struttura di u tema hè mostrata quì sottu. Hè sta pruprietà di Kafka chì hè utilizata per custruisce una piattaforma di blockchain.

Tessuto Hyperledger per manichini
presa da kafka.apache.org

  • Picture 8. Struttura di u tema di u serviziu di ordini *

Ligami utili

Youtube - Custruì una blockchain per l'affari cù u Prughjettu Hyperledger
Hyperledger Fabric Docs
Hyperledger fabric: un sistema operatore distribuitu per blockchains permessi

Ringraziamenti

Vogliu sprime a mo profonda gratitudine à i mo culleghi per u so aiutu in a preparazione di stu articulu:
Nikolay Marin
Igor Khapov
Dmitri Gorbachev
Alexander Zemtsov
Ekaterina Guseva

Source: www.habr.com

Add a comment