áá¯ááºáááºážá¡ááœáẠBlockchain ááááºáá±á¬ááºáž
áááºá¹ááá¬ááŸááá±á¬áá±á·áááºáááºážáá« áá»á áºááŸá áœá¬áá±á¬á á¬áááºáá°áá»á¬ážá áá»áœááºá¯ááºáá¡áááºááŸá¬ Nikolai Nefedov ááŒá áºáá«áááºá áá»áœááºá¯ááºááẠIBM áááºážááá¬ááá¯ááºáá¬áá»áœááºážáá»ááºáá°ááŒá áºáááºá á€áá±á¬ááºážáá«ážááœáẠááá·áºá¡á¬áž blockchain platform - Hyperledger Fabric ááŸáá·áºááááºáááºáá±ážááá¯áá«áááºá ááááºáá±á¬ááºážááẠáá¯ááºáááºážá¡ááá·áº áá¯ááºáááºážáá¯á¶áž á¡áá¯á¶ážáá»áááá¯ááááºáá»á¬áž (áá¯ááºáááºážá¡ááá·áº) áááºáá±á¬ááºáááºá¡ááœáẠáááºááœááºáá«áááºá áá±á¬ááºážáá«ážáá¡ááá·áºááẠá¡áá¯ááºáá®áááºážááá¬áá»á¬ážááᯠá¡ááŒá±áá¶ááá¯áá¯áááŸááá±á¬ áááŒááºáááºááá±ážáá±á¬ á á¬áááºáá°áá»á¬ážá¡ááœááºááŒá áºáááºá
Hyperledger Fabric ááẠLinux Foundation á áá¯ááºáááºážá á¯ááŒá áºáá±á¬ Hyperledger open source ááá±á¬áá»ááºá á¡ááá¯ááºážá¡áááºáá»á¬ážáá²á០áá áºáá¯ááŒá áºáááºá Hyperledger Fabric ááᯠDigital Assets ááŸáá·áº IBM ááá¯á·á០á áááºáá¯ááºáá¯ááºáá²á·áááºá Hyperledger Fabric ááááºáá±á¬ááºážá á¡áááá¡ááºá¹áá«áááºááŸá¬ áá±á¬áºááá¯ááááºá¡ááá®áá±ážááŸááºážáá»á¬ážá¡áá±á«áº á¡á¬áá¯á¶á á°ážá áá¯ááºááŸá¯ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡áá±á¬ááºážá¡áááºáá»á¬ážá á¡ááŸáááºá¡áá¯ááºááŒáá·áºááŸá¯ááŸáá·áº áááºážááá¯á·á áá¯ááºáá»á ááááºáááºáá¬ááŒááºážá¡ááŒáẠáá«áááºáá°á¡á¬ážáá¯á¶ážááᯠáá±á¬áºáá¯ááºááŒááºážááá¯á·ááᯠááá·áºááœááºážá ááºážá á¬ážá ááááºáá±á¬ááºážááᯠáá®ááœááºáá²á·áááºá á¡áá±á¬ááºážá¡áááºá¡áááºááŒá¯ááŒááºážáááºáá±á¬ááºááŸá¯ááᯠááá¯ááºážááŒá¬ážááŒá®áž ááŒáá·áºáá±áá¬ážáá±á¬ ááŸááºáá¯á¶áááºááŒááºážá áá¯ááºááœááºá¡áá áºáá»á¬ážááœá²á·á ááºážááŒááºážá¡ááŒáẠáááºááŸááºá¡á¬áá¬ááá¯ááºááŸáá·áº áá«áááºáá°áá»á¬ážááᯠá¡ááœáá·áºá¡á¬áá¬á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº á€á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááᯠáááŸááá«áááºá
áá»áœááºá¯ááºá áá±á¬ááºážáá«ážááẠááá¹áááá¯ááºáá áºáá¯ááá¯á· áá»á±á¬ááºážáá¬ážáá»á¬ážá¡á¬áž á á¬áááºážááœááºážááŒááºážá áá áºá ááá±á¬áá»ááºááᯠáá±á¬áºááŒááá·áº Hyperledger Fabric á¡ááŒá±á¬ááºáž áá±á¬ááºážáá«ážááœá²áá»á¬ážá áá áºá áááºáá áºááá¯ááºážááŒá áºáááºá
Hyperledger Fabric á á¡ááœá±ááœá±áááá¯áá¬
Hyperledger Fabric ááẠnetwork node áá»á¬ážáá±á«áºááœáẠáááºáááºáá¬ážáá±á¬ á¡áá»áá¯ážáá»áá¯ážáá±á¬ functional á¡á áááºá¡ááá¯ááºážáá»á¬ážáá«áááºáá±á¬ ááŒáá·áºáá±áá¬ážáá±á¬ blockchain ááœááºáááºáá áºáá¯ááŒá áºáááºá Hyperledger Fabric á¡á áááºá¡ááá¯ááºážáá»á¬ážááẠDockerHub á០ááœááºáááºá áœá¬ áá±á«ááºážáá¯ááºáá¯ááºááá¯ááºáá±á¬ Docker ááœááºááááºáá¬áá»á¬ážááŒá áºáááºá Hyperledger Fabric ááá¯áááºáž Kubernetes áááºáááºážáá»ááºááœáẠáá¯ááºáá±á¬ááºááá¯ááºáááºá
á áááºá á¬áá»á¯ááºáá»á¬áž (Hyperledger Fabric áá¡ááŒá±á¬ááºážá¡áá¬ááœáẠááœááºážáááºáá¯ááºáá»á¬ážáá±ážáááº)á áá»áœááºá¯ááºááá¯á·ááẠGolang (Hyperledger Fabric á០á¡ááŒá¬ážáá¬áá¬á áá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážáá±á¬áºáááºáž) ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá á áááºááŒáá¯ááºá¡ááá®áá±ážááŸááºážáá áºáá¯áááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá Node.js ááᯠáááºááá¯ááºáᬠHyperledger Fabric SDK ááŒáá·áº á¡áá¯á¶ážááŒá¯áá²á·áááºá
node áá»á¬ážááẠáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±á (á áááºá á¬áá»á¯ááº) ááᯠáá¯ááºáá±á¬ááºááẠ- ááœááºážáááºáá¯ááºá ááŒáá·áºáá±áá¬ážáá±á¬ ááŸááºáá¯á¶áááºááŒááºáž (áááºáá»á¬áá±áá¬) á¡ááŒá±á¡áá±ááᯠááááºážáááºážááŒá®áž á¡ááŒá¬ážáá±á¬ ááááºáá±á¬ááºážá áá Ạáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«áááºá node ááẠáá¯áá¹áááá°áá áºáá áºáá¯áá¬ááŒá áºááŒá®áž ááá°áá®áá±á¬ node áá»á¬ážááẠáá°áá®áá±á¬áá¯ááºááá¯ááºážááá¯ááºáá¬áá¬áá¬áá±á«áºááœááºáááºááŸáááá¯ááºáááºá ááá¯á¡áá±ážááŒá®ážáááºááŸá¬ node áá»á¬ážááá¯áááºáá²á·ááá¯á·á¡á¯ááºá á¯ááœá²á·áá¬ážááẠ(áá¯á¶ááŒááºá áááºáá»ááá±á¬ááá¯ááááºáž) ááŸáá·áºáááºážááá¯á·ááŸáá·áºáááºá ááºáá±áá±á¬ blockchain ááœááºáááºááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒá áºáááºá
áá±áá°áá»á¡á¬ážááŒáá·áº áááá¯áá¬ááá¬ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
áá¯á¶ 1. Hyperledger Fabric á á¡ááœá±ááœá±áááá¯áá¬
á¡áá¯á¶ážááŒá¯áá°á¡ááá®áá±ážááŸááºáž (Submitting Client) ááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬áž blockchain ááœááºáááºááŸáá·áº á¡áá¯ááºáá¯ááºááá·áº á¡ááºááºáá áºáá¯ááŒá áºáááºá á¡áá¯ááºáá¯ááºáááºá¡ááœáẠáááºááẠááœáá·áºááŒá¯áá»ááºááá°ááŒá®áž ááœááºáááºáá±á«áºááŸá áá¯ááºáá±á¬ááºááŸá¯á¡áá»áá¯ážáá»áá¯ážá¡ááœáẠááá·áºáá»á±á¬áºáá±á¬á¡ááœáá·áºá¡áá±ážáá»á¬ážááŸááááºá
áááºáá°ááœááºáá°áá»á¬áž (Nodes) ááẠá¡áááºážááá¹ááá»á¬ážá áœá¬ áá«áááºáááº-
- Endorsing Peer ááẠááœá±áá±ážááœá±áá°áá áºáá¯á áá¯ááºáá±á¬ááºááŸá¯ááᯠá¡áá¯áá°ááŒá®áž (á áááºá á¬áá»á¯ááºáá¯ááºááᯠáá¯ááºáá±á¬ááºáááº)á á áááºá á¬áá»á¯ááºááᯠáááºáá±ááŒááŒá®áž á¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážáá±á¬ááºá node ááẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááááºáá»á¬ážááᯠáááºážááááºááŸááºááŸáá·áºá¡áá° áá¯á¶ážá áœá²áá°á¡ááá®áá±ážááŸááºážáᶠááŒááºáá±ážáááºá
- Ordering Service ááẠnode á¡áá»á¬ážá¡ááŒá¬ážááœáẠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááŒá áºááŒá®ážá áááºážááᯠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬á áá¯á¶ážá¡áá áºáá»á¬ážááœá²á·á ááºážáááºááŸáá·áº á¡áá±á¬ááºážá¡áááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠsequence áá áºáá¯áááºáá®ážááẠá¡áá¯á¶ážááŒá¯áá«áááºá ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááẠááŸááºáá¯á¶áááºááŒááºážááœáẠááááºááá¯á·á¡áá áºáá»á¬áž áááá·áºáá« (ááá¯ááá¯áá±á¬ááºážááœááºáá±á¬á áœááºážáá±á¬ááºáááºá¡ááœáẠáááºááœá²áá±á¬áºáá»á¬ážáᶠááœáŸá±á·áá¬ážáááº)á
- Committing Peer - ááŒáá·áºáá±áá¬ážáá±á¬ ááŸááºáá¯á¶áááºáá áºáᯠáá«áááºááŒá®áž ááŸááºáá¯á¶áááºááŒááºážááá¯á· ááááºááá¯á·á¡áá áºáá»á¬áž áá±á«ááºážááá·áºááŒááºáž (á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááŒáá·áº ááœá²á·á ááºážáá¬ážáá±á¬)á áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬áž á¡á¬ážáá¯á¶ážááœáẠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬á áá±áááœááºáž áááá¹áá° áá«ááŸááááºá Committing Peer ááẠá ááºááœááºážáá¯ááºááœááºá¡áá áºáá áºáá¯áááá·áºáá®á ááá¬ážáááºááŸá¯ááŸááááŸáá¡ááœáẠááá±á¬ááºá¡ááœááºážááŸá ááœá±áá±ážááœá±áá°á¡á¬ážáá¯á¶ážááᯠá á áºáá±ážáá«áááºá
áá±á¬ááºáá¶ááŸá¯áá°áá«áááẠááá¬ážáááºááŸá¯á¡ááœáẠááœá±áá±ážááœá±áá°á á áºáá±ážááŒááºážááá¯ááºáᬠáá°áá«áááŒá áºáááºá á€áá°áá«ááá»á¬ážááẠá¡áá±á¬ááºážá¡áááºááá¬ážáááºá¡ááŒá Ạá¡ááá¡ááŸááºááŒá¯áá¶áá á±áááºá¡ááœáẠá áááºá á¬áá»á¯ááºááᯠáá¯ááºáá±á¬ááºáááá·áº ááá¯á¡ááºáá±á¬ node á¡á á¯á¶ááᯠáááºááŸááºáá±á¬áºááŒáá«áááºá
ááŒáá·áºáá±áá¬ážáá±á¬ ááŸááºáá¯á¶áááºááŒááºáž - Lerger - WolrldState (State DataBase áá¯áá±á«áºáááº) ááŸáá·áº BlockChain áá°á á¡ááá¯ááºážááŸá áºááá¯ááºážáá«áááºáááºá
BlockChain ááẠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬á¡áá¬ááá¹áá¯áá»á¬ážá¡ááœáẠááŒá áºáá±á«áºáá²á·ááá·áº ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŸááºáááºážáááºááááºážáááºážáá¬ážááá·áº ááœááºážáááºáá áºáá¯ááŒá áºáááºá
WolrldState ááẠááŒáá·áºáá±áá¬ážáá±á¬ registry objects áá»á¬ážá¡á¬ážáá¯á¶ážá áááºááŸá (á¡ááœááºá¡áááºáž) áááºááá¯ážáá»á¬ážááᯠááááºážáááºážáá±ážááá·áº ááŒáá·áºáá±áá¬ážáá±á¬ registry á¡á áááºá¡ááá¯ááºážáá áºáá¯ááŒá áºáááºá
WorldState ááẠá¡ááŒá±áá¶áá¬ážááŸááºáž - LevelDB ááá¯á·ááá¯áẠááá¯ááŸá¯ááºááœá±ážáá±á¬ áá±áá¬áá±á·á áºáá áºáᯠ- CouchDBá á¥ááá¬- áááá¡ááẠ- á¡áá¯ááºáááºá áá»áá¯ážááá¯ážá¡ááẠ- Ivanová á áá áºááœáẠááŸááºáá¯á¶áááºáááºá áœá² - 12.12.21/17.12.1961/XNUMXá áá±á·áááºá ááœá±ážááá¹ááá¬áẠ- XNUMX/XNUMX/XNUMX á áááºááŒáá·áº WorldState ááŸáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ á á¬áááºážááá¬ážááẠáá±ážáá¬ážááá·áºáá»ááºáááºáá áºáá¯á á¡ááœá²á·áááºá¡á¬ážáá¯á¶ážááœáẠáá áºááááºáááºážááŒá áºááá«áááºá
Hyperledger Fabric ááẠáá«áááºáá°á¡á¬ážáá¯á¶ážááᯠááááŒá®áž á á áºááŸááºááŒá±á¬ááºáž áááºáá±ááŒááá¯ááºááá·áº ááœááºáááºáá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áºá áá®ážááŒá¬ážá¡ááá¡ááŸááºááŒá¯áááºááŸááºá¡á¬áá¬ááᯠá€áá±áá¬ááœáẠá¡áá¯á¶ážááŒá¯ááẠ- CA (á¡ááá¡ááŸááºááŒá¯ á¡á¬áá¬ááá¯ááº)á CA ááẠX.509 á á¶ááŸá¯ááºážááŸáá·áº á¡áá»á¬ážáá°ááŸá¬áá±á¬á·á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠ - PKI áá¡ááŒá±áá¶áá±á«áºááœáẠáá¯ááºáá±á¬ááºáááºá
á¡ááœá²á·áááºááŒááºážáááºáá±á¬ááºááŸá¯ááẠáá®ážááŒá¬ážá¡ááœá²á·á¡á ááºáž ááá¯á·ááá¯áẠáá»ááºáááºáá áºáá¯á០á¡áá¬ááá¹áá¯áá áºáá¯ááŒá áºááŒá±á¬ááºáž á¡ááœá²á·áááºáá»á¬ážá á¡áááºááŒá¯áá±ážáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááŒá áºáááºá
ááœá±áá±ážááœá±áá°ááá¯áááºááŸá¬ ááá
á¹á
á¡áá»á¬ážá
á¯ááœáẠááŒáá·áºáá±áá¬ážáá±á¬ á
á¬áááºážááá¬ážáá
áºáá¯ááŸá áá±áá¬á¡áá
áºá ááŸááºáááºážáá
áºáá¯ááŒá
áºáááºá
áá»ááºáááºáá»á¬áž áááºáá®ážááŒááºáž ááá¯á·ááá¯áẠá
áááºáá»áá±á¬ á
á¬áá»á¯ááºáá»á¬ážá¡ááœáẠááœáŸá²ááŒá±á¬ááºážááŸá¯áá»á¬ážáááºáž ááŸááá«áááºá ááœá±áá±ážááœá±áá°ááᯠá¡áá¯á¶ážááŒá¯áá° á¡ááá®áá±ážááŸááºážá០á
áááºááŒá®áž ááŒáá·áºáá±áá¬ážáá±á¬ á
á¬áááºážááá¬ážááá¯á· á
á¬áá±ážááŒááºážááŒáá·áº á¡áá¯á¶ážáááºáá«áááºá
áá»ááºááẠ(Channel) ááẠblockchain ááœááºáááºááœáẠáá«áááºáá° ááŸá áºáŠáž ááá¯á·ááá¯áẠááá¯á·áááºááá¯áá±á¬ áá«áááºáá°áá»á¬áž áá«áááºáá±á¬ ááááºáá¬ážáá±á¬áºáááºáž áá«áááºáá°áá»á¬ážá ááá·áºáááºáá¬ážáá±á¬ á¡ááá¯ááºá¡áááºážá¡ááœááºáž áá»áŸáá¯á·ááŸááºááœá±áá±ážáá»á±ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá áá»ááºáááºááᯠáá«áááºáá°áá»á¬ážá áááºážá ááŒáá·áºáá±áá¬ážáá±á¬ á á¬áááºážááá¬ážáá»á¬ážá á áááºá á¬áá»á¯ááºáá»á¬ážá ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯á WorldState á០áá¯á¶ážááŒááºáááºá áá»ááºáááºá¡ááœá²á·áááºáá áºáŠážá á®ááẠáá»ááºáááºááá¯á·áááºáá±á¬ááºááẠá¡ááœáá·áºá¡á¬áá¬ááŸáááááºááŒá áºááŒá®áž ááœá±áá±ážááœá±áá°á¡áá»áá¯ážá¡á á¬ážá¡áá»áá¯ážáá»áá¯ážááᯠáá¯ááºáá±á¬ááºááá¯ááºááœáá·áºááŸááááºá á¡ááœá²á·áááºááŒááºážáááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á ááœáá·áºááŒá¯áá»ááºááᯠáá¯ááºáá±á¬ááºáá«áááºá
áá¯á¶ááŸáẠááœá±áá±ážááœá±áá° á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ á¡ááŒá±á¡áá±
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºáááá°áá¬ááá¯á¡áá¯á¶ážááŒá¯á ááœá±áá±ážááœá±áá°áá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠáá¯á¶ááŸááºá¡ááŒá±á¡áá±áá áºáá¯á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒááá¯áá«áááºá
áá»áœááºá¯ááºááá¯á·áá¡ááœááºážááá¯ááºážááá±á¬áá»ááºááá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááá¹áááá¯ááºáá»á¬ážááá¯á·áááºáá±á¬ááºáá±á¬áá»á±á¬ááºážáá¬ážáá»á¬ážá¡á¬áž á á¬áááºážááœááºážáááºááŸáá·áº ááŸááºáááºážáááºáááºá¡ááœáẠáá®ááá¯ááºážáá¯ááºáá¬ážááá·áº Hyperledger Fabric ááœááºáááºááᯠáááºáá®ážáá¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·áááœááºáááºááœáẠááá¹áááá¯áẠA ááŸáá·áº ááá¹áááá¯áẠB á ááá¯ááºááá¯ááºááá·áº á¡ááœá²á·á¡á ááºážááŸá áºáᯠáá«áááºáááºá á¡ááœá²á·á¡á ááºážáá áºáá¯á á®ááœáẠáá¯á¶ážá áœá²áá°áá»áŸá±á¬ááºááœáŸá¬á¡ááŒáẠáááºážáááá¯ááºááá¯áẠáááááŒá¯ááŒááºážááŸáá·áº áá±á¬ááºáá¶ááŒááºážáá»áá¯ážáá°áá»á¬ážáá«ááŸááááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯á á¡ááœá²á·áááºáááºáá±á¬ááºááŸá¯ááŸáá·áº á¡ááá¡ááŸááºááŒá¯ á¡á¬áá¬ááá¯ááºáááºáá±á¬ááºááŸá¯áá»á¬ážááá¯áááºáž á¡áá¯á¶ážááŒá¯áá«áááºá
1) ááœá±ááœáŸá²áá¯ááºáááºáž á áááºááŒááºážá
Hyperledger Fabric SDK ááᯠá¡áá¯á¶ážááŒá¯á á¡áá¯á¶ážááŒá¯áá° á¡ááá®áá±ážááŸááºážááẠááœá±áá±ážááœá±áá° áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááᯠá áááºááŒá®áž á áááºáá»áá±á¬ á á¬áá»á¯ááºáá»á¬ážáá«ááŸááá±á¬ áá¯á¶ááŸááºáá»á¬ážááá¯á· áá±á¬ááºážááá¯áá»áẠáá±ážááá¯á·áááºá áá±á¬ááºážááá¯áá»ááºááẠááŒáá·áºáá±áá¬ážáá±á¬ á á¬áááºážááá¬áž (Ledger) á០ááŒá±á¬ááºážáá²ááẠááá¯á·ááá¯áẠáááºááá¯ááºáááºá ááá¹áááá¯ááºáá»á±á¬ááºážáá¬ážáá»á¬ážá¡ááœáẠá á¬áááºážá¡ááºážá áá áºá áá»áœááºá¯ááºááá¯á·áá ááºážáááºááŸá¯á áá áºá ááá°áá¬áá¯á¶á á¶ááᯠáá¯á¶ážáááºáá«áá áá±á¬ááºáááºá¡ááºááá®áá±ážááŸááºážááẠá áááºá á¬áá»á¯ááºá áá±á¬ááºáá¶áá»ááºáá°áá«áááœááºáá«áááºáá±á¬ ááá¹áááá¯áẠA ááŸáá·áº B ááá¯á¶ááŸááºáá»á¬ážááá¯á· ááœá±áá±ážááœá±áá°áá±á¬ááºážááá¯ááŸá¯ááᯠáá±ážááá¯á·áá«áááºá Node A ááẠáááºááœáá·áºáá»á±á¬ááºážáá¬ážáá áºáŠážááᯠá á¬áááºážááœááºážááá·áº ááá¹áááá¯ááºááœáẠáááºááŸáááŒá®áž node B ááẠá¡ááŒá¬ážááá¹áááá¯ááºáá áºáá¯ááœáẠáááºááŸááá±á¬ node áá áºáá¯ááŒá áºáááºá á¡áá±á¬ááºážá¡áááºáá áºáá¯á¡á¬áž ááŒáá·áºáá±áá¬ážáá±á¬ á á¬áááºážááá¬ážááœáẠááááºážáááºážááá¯ááºáááºá áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áá¡áá ááœá±áá±ážááœá±áá°ááᯠá¡áááºááŒá¯ááááºááŒá áºááŒá®ážá áá°áá®áá±á¬ááááºááŒáá·áº á áááºá á¬áá»á¯ááºáá»á¬ážááᯠá¡á±á¬ááºááŒááºá áœá¬áá¯ááºáá±á¬ááºááá·áº node áá»á¬ážá¡á¬ážáá¯á¶ážááẠááá¯á¡ááºáá«áááºá Hyperledger Fabric SDK áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á node A áá¡áá¯á¶ážááŒá¯áá°á¡ááá®áá±ážááŸááºážááẠáá±á¬ááºáá¶áá»ááºáá°áá«á (á¡áááºááŒá¯áá»ááºáá°áá«á) ááᯠáááºáá¶áááŸáááŒá®áž áááºááá·áº node áá»á¬ážááá¯á· ááœá±áá±ážááœá±áá°áá±á¬ááºážááá¯ááŸá¯áá áºáá¯áá±ážááá¯á·ááááºááᯠááŸá¬ááœá±áááºá áááºážááẠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬ááá¯á· áá±áá¬á¡áá»áá¯á·ááᯠáááºááẠááá¯á·ááá¯áẠáá±ážáááºá¡ááœáẠá¡áá»áá¯á·áá±á¬ á áááºá á¬áá»á¯áẠ(ááœááºážáááºáá¯ááºáá¯ááºáá±á¬ááºáá»ááº) ááᯠáá±á«áºááá¯ááẠáá±á¬ááºážááá¯áá»ááºááŒá áºáááºá áááºážááá¬á¡áá client SDK ááẠáááºááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯áááºá áááºáž API ááẠááœá±áá±ážááœá±áá° ááá·áºáááºáá±á¬ááºáá»á¬ážáá«ááá·áº á¡áá¬áá áºáá¯ááᯠáá»á±á¬áºááŒááºáᬠáá±á¬ááºáááºáááºááŸááºááᯠáá±á«ááºážááá·áºáᬠá€áá±áá¬ááᯠáááá¯ááá¯áá±á¬ ááŒá¬ážáá¶ááŸáááá·áº gRPC á០ááá·áºáá»á±á¬áºáá±á¬ node (áá±á¬ááºáá¶áá»ááºáá±ážáá±á¬ áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬áž) ááá¯á· áá±ážááá¯á·áá«áááºá
áá¯ááºáá¯á¶ 2. ááœá±ááœáŸá²ááŒááºáž á
áááºááŒááºážá
á) á áááºáá»áá±á¬ á á¬áá»á¯ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
Nodes (Endorsing Peers) ááẠááœá±áá±ážááœá±áá°ááŒá¯áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠáááºáá¶áááŸáááŒá®ážáá±á¬ááºá áá±á¬ááºáááºá áááºááŸááºááᯠá á áºáá±ážááŒá®áž á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±áá«á áá±á¬ááºážááá¯áá»ááºáá±áá¬ááŸáá·áºá¡áá° á¡áá¬ááá¹áá¯áá áºáá¯ááᯠáá°áᬠá áááºá á¬áá»á¯áẠ(chaincode áá¯ááºáá±á¬ááºáá»ááº) á ááá¯ááºáá±á¬áºááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá á€áá±áá¬ááŸáá·áºá¡áá°á á áááºáááºáááá¯ááºááá¯áááºááŸá¬ á¡áá±á¬ááºážá¡áááºáá áºáá¯á á á®ážááœá¬ážáá±ážááá¯ááºáᬠáá¯áá¹ááá á¡áá»áá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááŸáá·áº ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (áá»áœááºá¯ááºááá¯á·á á¡ááŒá±á¡áá±ááœááºá á€á¡áá¬ááẠáá»á±á¬ááºážáá¬ážá á áºáá±ážááŸá¯á áá»á±á¬ááºážáá¬ážá¡áá áºááŒá áºááá±á¬ ááá¯á·ááá¯áẠááŸááºáá¯á¶áááºáá¬ážááŒá®ážá á¡áááºá á áºáá±ážááŒááºážá áááºááŒáá·áº)á á áááºáá»áá±á¬ á á¬áá»á¯ááºáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá áááºááẠWorldState á០áá±áá¬áááºáž ááá¯á¡ááºáááºááŒá áºáááºá áá±á¬ááºáá¶ááŒááºážáá»áá¯ážáá°á¡áá±á«áº á áááºáá»áá±á¬ á á¬áá»á¯ááºá¡áá¯á¡áá±á¬áẠááááºá¡áá±ááŒáá·áºá áá±áá¬á¡ááœá²ááŸá áºáá¯ááᯠáááŸáááẠ- Read Set ááŸáá·áº Write Set á Read Set ááŸáá·áº Write Set ááá¯á·ááẠáá°áááºážááŸáá·áº WorldState áááºááá¯ážáá»á¬ážááŒá áºáááºá (á¡áá áº- á áááºá á¬áá»á¯ááºááᯠá¡áá¯áá°ááŒááºážááŒáá·áº áááŸááá±á¬ á¡áááá¹áá¬ááº)á
áá¯ááºáá¯á¶ áá á
áááºáá»áá±á¬ á
á¬áá»á¯ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
3) áá±áá¬ááᯠclient á¡ááá®áá±ážááŸááºážááá¯á·ááŒááºááá¯á·ááŒááºážá
á áááºáááºáááá¯ááºááᯠááá¯ááºáá±á¬áºááŒá®ážáá±á¬ááºá á¡ááá¡ááŸááºááŒá¯ááœááºáá°áá»á¬ážááẠáááá¯ááºážááá·áºá¡ááá®áá±ážááŸááºážááá¯á· áááŠážáá±áá¬ááŸáá·áº ááá¯ááºááŒááŒááºážáááááºá¡ááŒáẠáááºážááá¯á·ááááºááŸááºááŒáá·áº áá±ážááá¯ážáá¬ážáá±á¬ RW Set ááᯠááŒááºááœá¬ážáá«á á€á¡ááá·áºááœááºá ááŒáá·áºáá±áá¬ážáá±á¬á á¬áááºážááá¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áááŸááá«á client application ááẠEndorsing Peer á áááºááŸááºááᯠá á áºáá±ážááŒá®áž áá±ážááá¯á·áá²á·ááá·áº áá°áááºážááœá±áá±ážááœá±áá°áá±áá¬ááŸáá·áº ááŒááºáá¬áá±á¬ áá±áá¬ááá¯á·ááá¯áááºáž ááŸáá¯ááºážááŸááºáá±ážááẠ(ááá¯ááá¯áááºááŸá¬á ááœá±áá±ážááœá±áá°ááŒá¯áá¯ááºáá¬ážááá·áº áá°áááºážáá±áá¬ááᯠáá±á¬ááºááŒááºááŒááºážááŸááááŸá á á áºáá±ážáá±ážáááº)á á¡áááºá ááœá±áá±ážááœá±áá°ááẠregistry ááŸáá±áá¬ááá¯áááºáááºá¡ááœááºáá¬ááŒá áºáá«áá ááá¯á·áá±á¬áẠclient application ááẠááá¯á¡ááºáá±á¬ Read Set ááá¯áááºáá¶áááŸáááŒá®áž áááºážááœáẠááŒáá·áºáá±áá¬ážáá±á¬ registry ááá¯áááŒá±á¬ááºážáá²áá² á¡á±á¬ááºááŒááºá áœá¬ááŒá®ážáá¯á¶ážááœá¬ážáá«áááºá ááŸááºáá¯á¶áááºááŒááºážááœáẠáá±áá¬ááᯠááŒá±á¬ááºážáá²ááá·áºááá·áº ááœá±áá±ážááœá±áá°ááá á¹á ááœááºá áááá¯ááºážááá·áºá¡ááá®áá±ážááŸááºážááẠáá±á¬ááºáá¶ááŸá¯áá°áá«áááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŸááááŸá áááºáá¶á á áºáá±ážáá«áááºá áááá¯ááºážááá·áºá¡ááá®áá±ážááŸááºážááẠáá±á¬ááºáá¶áá»ááºáá°áá«á á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áááááºááᯠá á áºáá±ážááŒááºážáááŒá¯ááá¯ááºáá±á¬áºáááºáž á€á¡ááŒá±á¡áá±ááœáẠHyperledger Fabric ááááºáá±á¬ááºážááẠááŸááºáá¯á¶áááºááŒááºážááá¯á· ááœá±áá±ážááœá±áá°ááá·áºááá·áºá¡ááá·áºááœáẠnode (Comitting Peers) áá±á«áºááŸááá°áá«ááá»á¬ážááᯠá á áºáá±ážáááºá¡ááœáẠáá±á¬ááºáá¶á·áá±ážáááºá
áá¯ááºáá¯á¶ 4. áá±áá¬ááᯠáá¯á¶ážá
áœá²áá° á¡ááá®áá±ážááŸááºážááá¯á· ááŒááºááá¯á·ááŒááºážá
4) RW sets áá»á¬ážááᯠOrdering Peers ááá¯á·áá±ážááá¯á·ááŒááºážá
áááá¯ááºážááá·áºá¡ááºááá®áá±ážááŸááºážááẠá¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááá¯á· áááºá ááºáá±áá¬áá»á¬ážááŸáá·áºá¡áá° ááœá±áá±ážááœá±áá°ááᯠáá±ážááá¯á·áááºá áááºážááœáẠRW áááºááŸááºááŸá¯á áá±á¬ááºáá¶á¡á¬ážáá±ážááá·áºááœááºáá°áá»á¬ážá áááºááŸááºáá»á¬ážááŸáá·áº áá»ááºááẠID ááá¯á·áá«áááºáááºá
á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ - á¡áááºáá±á«áºá¡ááŒá±áá¶á á€áááºáá±á¬ááºááŸá¯áá¡ááááá¯ááºáá±á¬ááºáá»ááºááŸá¬ ááŸááºáááºáá±á¬á¡á á®á¡á ááºááŒáá·áº á¡áááºááœá±ááœáŸá²ááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºáááºááŒá áºáááºá ááŒáá·áºáá±áá¬ážáá±á¬ ááŸááºáá¯á¶áááºááŒááºážá ááá±á¬ááºá¡áá áºáá áºáá¯ááœá²á·á ááºážááŒááºážááŸáá·áº Commiting node áá»á¬ážá¡á¬ážáá¯á¶ážááá¯á· áá¯ááºáá±ážáá±á¬áá¯ááºááœááºá¡áá áºáá»á¬ážááᯠá¡á¬ááá¶áá»ááºáá±ážáá±ááŒááºážááŒáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ááŸááºáá¯á¶áááºááŒááºáž (Committing peers) áá«ááŸááá±á¬ node á¡á¬ážáá¯á¶ážááœáẠáá±áá¬áá®ááœááºááŸá¯ááᯠáá±áá»á¬á á±áá«áááºá áá áºáá»áááºáááºážááŸá¬áááºá á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááá¯ááºááá¯ááºá ááŸááºáá¯á¶áááºááŒááºážááᯠáááºááá·áºáááºážááŒáá·áºáá»áŸ áááŒá±á¬ááºážáá²áá«á ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááẠá áá áºáá¡áá±ážááŒá®ážáá±á¬á¡á áááºá¡ááá¯ááºážáá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááẠnode á¡áá»á¬ážá¡ááŒá¬ážáá¡á á¯á¡áá±ážáá áºáá¯ááŒá áºáááºá á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááẠá¡áá±á¬ááºážá¡áááºááá¬ážáááºááŸá¯á¡ááœáẠá á áºáá±ážááŒááºážáááŸááá«á áááºážááẠáááá»áá±á¬áá»ááºááẠID áá áºáá¯ááŒáá·áº ááœá±áá±ážááœá±áá°ááᯠáááºáá¶áááºá áááá»áá±á¬á¡ááŸá¬á á¬ááŒáá·áº á¡áááºááœá±áá±ážáá»á±ááŸá¯áá»á¬ážááᯠá á®á ááºáá±ážááŒá®áž áááºážááá¯á·áá¶á០ááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬á ááá±á¬ááºá¡áá áºáá»á¬ážááᯠáááºáá®ážáá«áááºá á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯áá áºáá¯ááẠááá¯ááºážáá»á¬ážá áœá¬ááᯠáá áºáá»áááºáááºážááœáẠáááºáá±á¬ááºááŸá¯áá±ážááá¯ááºáá«áááºá ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááœáẠááœá±áá±ážááœá±áá°áááŸááºáááºáá±á¬ (áááŒá±á¬ááºážáá²áá±á¬) áááºážá á®ááŒááºážááᯠááááºážááááºážáá¬ážááá·áº Kafka á¡á á¯á¡áá±ážáá áºáá¯áá«áááºááẠ(á¡áá»áẠ7 ááá¯ááŒáá·áºáá«)á
áá¯á¶ 5. RW sets áá»á¬ážááᯠOrdering Peers ááá¯á·áá±ážááá¯á·ááŒááºážá
5) áá¯ááºáá±ážáá¬ážáá±á¬áá¯ááºááœááºáá»á¬ážááᯠCommitting Peer ááá¯á·áá±ážááá¯á·ááŒááºážá
Ordering Service ááœááºááœá²á·á ááºážáá¬ážáá±á¬ ááááºááá¯á·ááŸá¯áá»á¬ážááᯠááœááºááẠnode áá»á¬ážá¡á¬ážáá¯á¶ážááá¯á· áá¯ááºááœáŸáá·áºáááºá ááááºááá¯á·ááŒááºážá¡áá áºáá áºáá¯áááŸáááŒá®ážáááºááŸáá·áº Node áá áºáá¯á á®ááá¯ááºážááẠáááºážá¡á¬áž áá±á¬ááºáá¶ááŸá¯áá°áá«áááŸáá·áº ááá¯ááºáá»á±á¬áá®ááœá±ááŸáááẠá á áºáá±ážááŒá®ážá á áááºáá»áá±á¬ á á¬áá»á¯ááºá¡áá¯ááŒá¯áá¯ááºááŒááºážá ááááºá¡ááŒá Ạáá°áá®áá±á¬áááẠ(Write Set) ááᯠá á áºáá±ážááŒá®áž áá°áááºážáááºááá¯ážáá»á¬áž ááŸááááŸáááá¯áááºáž á á áºáá±ážáá«áááºá á¡áá±á¬ááºážá¡áááºá áááºáá»áááºááŸá á (ááá¯ááá¯áááºááŸá¬ - Read Set - WorldState á០smart á á¬áá»á¯ááºááŸáááºááŸá¯áá±á¬áá±áá¬) ááá¯ááŒá±á¬ááºážáá²áá²á·áááºá á¡ááŒá±á¡áá±áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒáá·áºáá®áá«áá ááœá±áá±ážááœá±áá°ááᯠááá¬ážáááºá¡ááŒá Ạá¡ááŸááºá¡áá¬ážááŒá¯áááºá ááá¯á·ááá¯ááºáá«áá ááœá±áá±ážááœá±áá°ááẠá¡áá»á¯á¶ážááááºááá·áº á¡áá±á¡áá¬ážááᯠáááŸááááºá
áá¯ááºáá¯á¶ 6. áá¯ááºáá±ážáá¬ážáá±á¬ áá¯ááºááœááºáá»á¬ážááᯠCommitting Peer ááá¯á· áá±ážááá¯á·ááŒááºážá
6) registry ááœáẠblock áá áºáá¯ááá·áºáá«á
node áá áºáá¯á á®ááẠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬á áá±áááá¯ááºáᬠáááá¹áá°ááá¯á· ááœá±áá±ážááœá±áá°áá áºáá¯ááᯠáá±á«ááºážááá·áºáᬠááœá±áá±ážááœá±áá° ááŸááºáááºáá«á Write Set ááᯠWorldState (áááºááŸáá¡ááŒá±á¡áá±) ááœáẠá¡áá®ážáá®áž áááºáá±á¬ááºáááºááŒá áºááŒá®ážá ááœá±áá±ážááœá±áá°ááŒá±á¬áá·áº ááááá¯ááºááœá¬ážáá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážá áááºááá¯ážá¡áá áºáá»á¬ážááᯠáá±ážááŸááºáá¬ážáááºá . á¡áááºá ááœá±áá±ážááœá±áá°áá áºáá¯ááẠááŸááºáááºááŸá¯áááŸááá±á¬ ááá¯áááºáá áºáá¯ááᯠáááºáá¶áááŸááá«á (á¥ááá¬á áá°áá®áá±á¬ááá±á¬ááºáá áºáá¯á¡ááœááºáž áá°áá®áá±á¬á¡áá¬áá»á¬ážááŸáá·áº á¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŸá¯ ááŸá áºáá¯ááŸááá²á·áá«áá áá°áááºážáááºááá¯ážáá»á¬ážááᯠá¡ááŒá¬ážááœá±áá±ážááœá±áá°ááŒáá·áº ááŒá±á¬ááºážáá²áá¬ážááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº ááœáŸá²ááŒá±á¬ááºážááŸá¯áá»á¬ážáá²á០áá áºáá¯ááẠááá¬ážáááºáááºááá¯ááºáá«á ) áááŸááºáááºáá±á¬ á¡ááŸááºá¡áá¬ážááŒáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬ááœáẠá€ááœá±áá±ážááœá±áá°ááá¯áááºáž ááá·áºááœááºážáá¬ážáá±á¬áºáááºážá á€ááœá±áá±ážááœá±áá°á Write Set ááẠWorldState á áááºááŸáá¡ááŒá±á¡áá±ááŸáá·áº áááºááá¯ááºááŒááºážáááŸááá±á¬ááŒá±á¬áá·áº á¡áá±á¬ááºážá¡áááºááœáẠáá«áááºááá·áº á¡áá¬áá»á¬ážááᯠáááŒá±á¬ááºážáá²áá«á ááá¯á·áá±á¬ááºááœááºá ááœá±áá±ážááœá±áá°ááᯠááŒáá·áºáá±áá¬ážáá±á¬ á á¬áááºážááá¬ážááœáẠáá¬áá ááºááá·áºááœááºážáá¬ážááŒá®ážá ááá¬ážáááºáááºááŒá áºá á± áááŒá¯áááºááŒá áºá á± á¡áá±á¬ááºážá¡áááºá¡ááŒá±á¡áá±á á¡ááŒá±á¬ááºážááŒá¬ážá á¬áá±ážááá¯á·ááŒá®ážáá±á¬ááºá
áá¯ááºáá¯á¶ á
ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯
ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááœáẠá¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯áááá¯ááºážááá·áºáá»á¬ážááŸáá·áº Kafka á¡á á¯á¡áá±ážááŒá¬ážááœááºááŸááá±á¬ áááºááá¯ááºáᬠZooKeeper nodes ááŸáá·áº Ordering Service Nodes (OSN) ááá¯á·áá«ááŸááá±á¬ Kafka á¡á á¯á¡áá±ážáá áºáᯠáá«áááºáá«áááºá Kafka á¡á á¯á¡áá±ážááẠááŒáá·áºáá±áá¬ážáá±á¬á á¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáá±á¬ á á®ážáááºážááŸá¯ (áááºáá±á·áá»áº) á á®áá¶ááá·áºááœá²ááŸá¯ááááºáá±á¬ááºážáá áºáá¯ááŒá áºáááºá Kafka ááŸá áá»ááºáááºáá áºáá¯á á® (á¡ááŒá±á¬ááºážá¡áá¬) ááẠááŸááºáááºážá¡áá áºáá áºáá¯ááᯠáá±á«ááºážááá·áºáá¯á¶áᬠáá¶á·ááá¯ážáá±ážááá·áº áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááŸááºáááºážáá»á¬ážááŒá áºááẠ(ááŸáááŒá®ážáá¬ážáá áºáá¯ááᯠáá»ááºááẠáááŒá áºááá¯ááºáá«)á áá±á«ááºážá ááºááœá²á·á ááºážáá¯á¶ááᯠá¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáááºá áááºážááẠblockchain ááááºáá±á¬ááºážááá¯áááºáá±á¬ááºáááºá¡áá¯á¶ážááŒá¯áá±á¬ Kafka áááá¯ááºááá¯ááºááŸá¯ááŒá áºáááºá
kafka.apache.org á០áá°áááºá
- áá¯ááºáá¯á¶ áá ááŸá¬áá°ááŒááºáž áááºáá±á¬ááºááŸá¯ áá±á«ááºážá áẠááœá²á·á ááºážáá¯á¶*
á¡áá¯á¶ážáááºáá±á¬ááá·áºááºáá»á¬áž
áá»á±ážáá°ážáááºááœáŸá¬
áá±á¬ááºážáá«ážááŒááºáááºáá¬ááœáẠáááºážááá¯á·áá¡áá°á¡áá®á¡ááœáẠáá»áœááºá¯ááºááá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážá¡á¬áž áá»á±ážáá°ážáááºááŒá±á¬ááºáž áá±á¬áºááŒáá«áááºá
Nikolai Marina
Igor Khapov
Dmitry Gorbachev
Alexander Zemtsov
Ekaterina Guseva
source: www.habr.com