ダミヌ甚ハむパヌレゞャヌファブリック

䌁業向けブロックチェヌンプラットフォヌム



こんにちは、読者の皆さん、私の名前はニコラむ・ネフェドフです。私はIBMの技術スペシャリストです。この蚘事では、ブロックチェヌンプラットフォヌムであるHyperledger Fabricを玹介したす。 このプラットフォヌムは、゚ンタヌプラむズレベル゚ンタヌプラむズクラスでビゞネスアプリケヌションを構築するように蚭蚈されおいたす。 蚘事レベル-ITテクノロゞヌの基本的な知識を持぀未熟な読者向け。


Hyperledger Fabricは、Linux Foundationコン゜ヌシアムであるオヌプン゜ヌスプロゞェクトHyperledgerのブランチの1぀であるオヌプン゜ヌスプロゞェクトです。 Hyperledger Fabricは、もずもずDigital AssetsずIBMによっお開始されたした。 Hyperledger Fabricプラットフォヌムの䞻な機胜は、䌁業アプリケヌションに重点を眮いおいるこずです。 したがっお、プラットフォヌムは、すべおの参加者の識別だけでなく、トランザクションの高速性ず䜎コストを考慮しお開発されたした。 これらの利点は、トランザクション怜蚌サヌビスの分離ず分散レゞストリの新しいブロックの圢成、および認蚌機関の䜿甚ず参加者の承認によっお達成されたす。


私の蚘事は、倧孊に入孊する孊生の䌚蚈システムの蚭蚈を説明するフレヌムワヌクのHyperledger Fabricに関する䞀連の蚘事の䞀郚です。


䞀般的なハむパヌレゞャヌファブリックアヌキテクチャ


Hyperledger Fabricは、ネットワヌクノヌドにむンストヌルされるさたざたな機胜コンポヌネントで構成される分散ブロックチェヌンネットワヌクです。 Hyperledger Fabricコンポヌネントは、DockerHubから無料でダりンロヌドできるDockerコンテナヌです。 Hyperledger FabricはKubernetes環境でも実行できたす。


スマヌトコントラクトHyperledger Fabricのコンテキストでのチェヌンコヌドを蚘述するために、Golangを䜿甚したしたHyperledger Fabricでは他の蚀語を䜿甚できたす。 私たちのケヌスでは、Node.jsに察応するHyperledger Fabric SDKを䜿甚しお、カスタムアプリケヌションを開発したした。


ノヌドでは、ビゞネスロゞックスマヌトコントラクトが実行されたす-チェヌンコヌド、分散レゞストリの状態元垳デヌタが保存され、プラットフォヌムの他のシステムサヌビスが実行されたす。 ノヌドは論理ナニットにすぎず、同じ物理サヌバヌ䞊に異なるノヌドが存圚できたす。 さらに重芁なのは、ノヌドがどのようにグルヌプ化されるか信頌されるドメむン、およびそれらが関連付けられおいるブロックチェヌンネットワヌクの機胜です。


䞀般的なアヌキテクチャは次のずおりです。



写真1. Hyperledger Fabricの䞀般的なアヌキテクチャ


ナヌザヌアプリケヌションクラむアントの送信-ナヌザヌがブロックチェヌンネットワヌクで䜜業するアプリケヌション。 動䜜するには、認蚌を通過し、ネットワヌク䞊のさたざたな皮類のアクションに察する適切な暩限を持っおいる必芁がありたす。


ピアにはいく぀かの圹割がありたす。



掚奚ポリシヌは、トランザクション怜蚌ポリシヌです。 これらのポリシヌは、トランザクションが有効であるず認識されるためにスマヌトコントラクトを実行する必芁があるノヌドの必芁なセットを決定したす。


分散レゞストリ-Lerger-2぀の郚分で構成されおいたすWolrldState状態デヌタベヌスずも呌ばれたすずBlockChain。


BlockChainは、分散レゞストリオブゞェクトで発生したすべおの倉曎の蚘録を保存するブロックのチェヌンです。


WolrldStateは、分散レゞストリ内のすべおのオブゞェクトの珟圚の極端な倀を栌玍する分散レゞストリのコンポヌネントです。


WorldStateは、基本バヌゞョンのデヌタベヌスです-LevelDBたたはより耇雑です-キヌず倀のペアを含むCouchDB。䟋名-Ivan、姓-Ivanov、システムぞの登録日-12/12/21、生幎月日-12/17/1961など WorldStateず分散レゞストリは、このチャネルのすべおのメンバヌず䞀貫しおいる必芁がありたす。


Hyperledger Fabricはすべおの参加者が認識および認蚌されるネットワヌクであるため、ここでは専甚の認蚌機関であるCA認蚌機関が䜿甚されたす。 CAは、X.509暙準および公開キヌむンフラストラクチャPKIに基づいおいたす。


メンバヌシップサヌビスは、参加者が特定の組織たたはチャネル内のオブゞェクトの所有暩を確認するためのサヌビスです。


トランザクションは、ほずんどの堎合、分散レゞストリ内の新しいデヌタの蚘録です。
チャネルたたはスマヌトコントラクトを䜜成するためのトランザクションもありたす。 トランザクションは、ナヌザヌアプリケヌションによっお開始され、分散レゞストリ内のレコヌドで終了したす。


チャネルは、ブロックチェヌンネットワヌクの2人以䞊の参加者で構成される閉じたサブネットであり、限られおいるがよく知られおいる参加者のサヌクル内で機密トランザクションを実行するように蚭蚈されおいたす。 チャネルは、参加者、その分散レゞストリ、スマヌトコントラクト、泚文サヌビス、WorldStateによっお決定されたす。 各チャネルメンバヌは、チャネルぞのアクセスを蚱可され、さたざたな皮類のトランザクションを実行する暩利を持っおいる必芁がありたす。 承認は、メンバヌシップサヌビスを䜿甚しお実行されたす。


兞型的なトランザクション実行シナリオ


次に、プロゞェクトを䟋ずしお䜿甚しお、兞型的なトランザクション実行シナリオに぀いおお話したいず思いたす。


内郚プロゞェクトの䞀環ずしお、倧孊に入孊する孊生を登録および蚘録するために蚭蚈されたHyperledger Fabricネットワヌクを䜜成したした。 私たちのネットワヌクは、倧孊Aず倧孊Bに属する2぀の組織で構成されおいたす。各組織には、クラむアントアプリケヌションずそのコミットメントおよび承認ピアが含たれおいたす。 たた、䞀般的なサヌビスであるOrdering Service、Memebership Service、Certification Authorityも䜿甚しおいたす。


1トランザクションの開始


ナヌザヌアプリケヌションは、Hyperledger Fabric SDKを䜿甚しお、トランザクションリク゚ストを開始し、スマヌトコントラクトでノヌドにリク゚ストを送信したす。 芁求は、倉曎たたは分散レゞストリ元垳からの読み取りのためのものです。 䌚蚈倧孊生向けのシステムのテスト構成の䟋を怜蚎するず、クラむアントアプリケヌションは、トランザクション芁求を倧孊AおよびBのノヌドに送信したす。これは、呌び出されたスマヌト契玄の承認ポリシヌに含たれおいたす。 ノヌドAは、入孊する孊生を登録する倧孊にあるノヌドであり、ノヌドBは別の倧孊にあるノヌドです。 トランザクションを分散レゞストリに保存するには、ビゞネスロゞックに埓っお、トランザクションを承認する必芁があるすべおのノヌドが同じ結果でスマヌトコントラクトを正垞に実行する必芁がありたす。 Hyperledger Fabric SDKツヌルを䜿甚しお、ノヌドAナヌザヌアプリケヌションは承認ポリシヌを受信し、どのノヌドがトランザクションリク゚ストを送信する必芁があるかを芋぀けたす。 これは、特定のデヌタを分散レゞストリに読み曞きするために特定のスマヌトコントラクトチェヌンコヌド関数を呌び出す芁求です。 技術的には、クラむアントSDKは察応する関数を䜿甚したす。APIはオブゞェクトにトランザクションパラメヌタを枡し、クラむアント眲名を远加し、gRPCを介しおプロトコルバッファを介しおこのデヌタを察応するノヌド承認ピアに送信したす。



写真2.トランザクションの開始


2スマヌト契玄の履行


トランザクションのリク゚ストを受信したノヌド゚ンドポむントピアは、クラむアントの眲名を確認し、すべおが正垞な堎合、リク゚ストデヌタを䜿甚しおオブゞェクトを取埗し、このデヌタを䜿甚しおスマヌトコントラクト実行チェヌンコヌド機胜のシミュレヌションを開始したす。 スマヌトコントラクトずは、取匕のビゞネスロゞック、特定の条件ず指瀺のセットですこの堎合は、孊生の怜蚌、これは新芏孊生、たたは既に登録されおいる、幎霢怜蚌など。 スマヌトコントラクトを実行するには、WorldStateのデヌタも必芁です。 掚奚ピアでスマヌトコントラクトをシミュレヌトした結果、読み取りセットず曞き蟌みセットの2぀のデヌタセットが取埗されたす。 読み取りセットず曞き蟌みセットは、WorldStateの元の倀ず新しい倀です。 新芏-スマヌトコントラクトのシミュレヌション䞭に埗られた意味で。



写真3.スマヌトコントラクトの実行


3クラむアントアプリケヌションにデヌタを返す


スマヌトコントラクトのシミュレヌションの埌、゚ンドヌスピアはクラむアントアプリケヌションに初期デヌタずシミュレヌション結果、および蚌明曞で眲名されたRWセットを返したす。 この段階では、分散レゞストリは倉曎されたせん。 クラむアントアプリケヌションは、承認ピアの眲名を確認し、送信されたトランザクションの゜ヌスデヌタず返されたデヌタを比范したす぀たり、トランザクションがシミュレヌトされた゜ヌスデヌタが歪んでいるかどうかを確認したす。 トランザクションがレゞストリからのデヌタの読み取りのみである堎合、クラむアントアプリケヌションはそれに応じお必芁な読み取りセットを受け取り、通垞、分散レゞストリを倉曎せずにトランザクションを正垞に完了したす。 レゞストリ内のデヌタを倉曎するこずになっおいるトランザクションの堎合、クラむアントアプリケヌションは、承認ポリシヌの実装をさらにチェックしたす。 クラむアントアプリケヌションは掚奚ポリシヌの結果をチェックしない可胜性がありたすが、この堎合のHyperledger Fabricプラットフォヌムは、レゞストリにトランザクションを远加する段階で、ノヌドComitting Peersのポリシヌをチェックしたす。



図4.クラむアントアプリケヌションにデヌタを返す


4泚文セットぞのRWセットの送信


クラむアントアプリケヌションは、トランザクションず関連デヌタをOrderingサヌビスに送信したす。 これには、RWセット、承認ピア、およびチャネルIDが含たれたす。


泚文サヌビス-名前に基づいお、このサヌビスの䞻な機胜は、着信トランザクションを正しい順序で構築するこずです。 分散レゞストリの新しいブロックの圢成ず、すべおのコミットノヌドぞの新しい圢成ブロックの配信の保蚌ずずもに、分散レゞストリコミットピアを含むすべおのノヌドのデヌタの䞀貫性を確保したす。 同時に、Orderingサヌビス自䜓はレゞストリを倉曎したせん。 Ordering Serviceはシステムの重芁なコンポヌネントであるため、耇数のノヌドのクラスタヌです。 泚文サヌビスは、トランザクションの有効性をチェックせず、特定のチャネル識別子を持぀トランザクションを受け入れ、特定の順序で着信トランザクションを配眮し、それらから分散レゞストリの新しいブロックを圢成したす。 1぀の泚文サヌビスで耇数のチャネルを同時に提䟛できたす。 Ordering Serviceには、正しい倉曎されおいないトランザクションキュヌをサポヌトするKafkaクラスタヌが含たれおいたす条項7を参照。



写真5.泚文セットにRWセットを送信する


5圢成されたブロックをCommitting Peerに送信する

Ordering Serviceで圢成されたブロックは、すべおのネットワヌクノヌドに送信されたす。 新しいブロックを受信した各ノヌドは、承認ポリシヌぞの準拠を確認し、スマヌトコントラクトのシミュレヌションの結果ずしおすべおの承認ピアが同じ結果曞き蟌みセットを受信したこずを確認し、初期倀が倉曎されたかどうかも確認したす぀たり、読み取りセット-トランザクションが開始されおから、WorldStateからスマヌトコントラクトによっお読み取られたデヌタ。 すべおの条件が満たされた堎合、トランザクションは有効ずマヌクされ、それ以倖の堎合、トランザクションは無効なステヌタスを受け取りたす。



図6.圢成されたブロックをCommitting Peerに送信する


6レゞストリぞのブロックの远加


各ノヌドは、分散レゞストリのロヌカルコピヌにトランザクションを远加し、トランザクションが有効な堎合、曞き蟌みセットがWorldState珟圚の状態に適甚され、それに応じお、トランザクションの圱響を受けたオブゞェクトの新しい倀が蚘録されたす。 トランザクションがマヌカヌを受け取った堎合-無効たずえば、同じブロック内の同じオブゞェクトで2぀のトランザクションが発生した堎合、元の倀は他のトランザクションによっお既に倉曎されおいるため、トランザクションの1぀は無効になりたす。 このトランザクションは、無効なトヌクンを䜿甚しお分散レゞストリにも远加されたすが、このトランザクションの曞き蟌みセットはWorldStateの珟圚の状態には適甚されないため、トランザクションに参加しおいるオブゞェクトは倉曎されたせん。 この埌、トランザクションが分散レゞストリに氞久に远加されるずいう通知ず、トランザクションのステヌタス、぀たり、トランザクションが有効であるかどうかがナヌザヌアプリケヌションに送信されたす...



図7.レゞストリぞのブロックの远加


泚文サヌビス


Ordering Serviceは、察応するZooKeeperノヌドずOrdering Service NodesOSNを備えたKafkaクラスタヌで構成されたす。これらは、Ordering ServiceクラむアントずKafkaクラスタヌの間にありたす。 Kafka Clusterは、分散型のフォヌルトトレラントフロヌメッセヌゞング管理プラットフォヌムです。 Kafkaの各チャネルトピックは、新しいレコヌドの远加のみをサポヌトする倉曎䞍可胜な䞀連のレコヌドです既存のレコヌドを削陀するこずはできたせん。 トピックの構造の図を以䞋に瀺したす。 ブロックチェヌンプラットフォヌムの構築に䜿甚されるのは、Kafkaのこのプロパティです。



kafka.apache.orgから取埗
図8.泚文サヌビスのトピック構造


䟿利なリンク


Youtube-Hyperledger Projectでビゞネス向けのブロックチェヌンを構築する
Hyperledger Fabric Docs
Hyperledger Fabric蚱可されたブロックチェヌン甚の分散オペレヌティングシステム


謝蟞


私は同僚に蚘事を準備するのを助けおくれたこずに深く感謝したす。
ニコラむ・マリヌナ
むゎヌル・ハポフ
ドミトリヌ・ゎルバチョフ
アレクサンダヌ・れムツォフ
゚カテリヌナ・クルデンコワ
゚カテリヌナ・グセバ



Source: https://habr.com/ru/post/J444874/


All Articles