áááºážáá»ááºáá¯á¶ážááœá±ááŒá±á¬ááºááŒá®áž áááºááœá±áá¬ážáá¶áááºá
ááááºáá±á¬ááºážáá«ážáá»á¬ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠblockchains áááºáá±á¬ááºááá·áºáááºážááá¬áá»á¬ážááŸáá·áºáááºáá¶áá²á·ááẠ(
Hyperledger Fabric - universal blockchain áá áºáá¯
áá±áá°áá»á¡á¬ážááŒáá·áºááŒá±á¬ááá»áŸáẠuniversal information system áááº-
- áá¯ááºáááºážáá¯áá¹ááááᯠáá¯ááºáá±á¬ááºáá±ážááá·áº áá¬áá¬áá»á¬ážááŸáá·áº áá±á¬á·ááºáá² core áá áºáá¯á
- á áá áºááŸáá·áºá¡ááŒááºá¡ááŸááºáááºááœááºááŸá¯áá»á¬ážá¡ááœáẠinterfaces;
- á ááºáá á¹á ááºáž/áá°áá»á¬ážá ááŸááºáá¯á¶áááºááŒááºážá á á áºááŸááºááŒá±á¬ááºážááŸáá·áº ááœáá·áºááŒá¯áá»ááºá¡ááœáẠáááááá¬áá»á¬áž
- áá±áá¬áá±á·á áºááẠáá¯ááºáááºážáááºáááºááŸá¯ááŸáá·áº ááŸááºáááºážá¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážááŒááºáž-
Hyperledger Fabric áááá¬ážáááºáá¬ážááŸááºážááᯠááœááºáááºááŸá¯ááá¯ááºáá«áááºá
Hyperledger Fabric Architecture
áá¯á¶ááŒááºážááẠHyperledger Fabric áááá¯áá¬ááá¯ááŒááááº-
á¡ááœá²á·á¡á
ááºážáá»á¬áž - á¡ááœá²á·á¡á
ááºážáá»á¬ážááœáẠáááºáá°ááœááºáá°áá»á¬áž áá«áááºááẠá á¡ááœá²á·á¡á
ááºážáá»á¬ážááá¶á·ááá¯ážááŸá¯ááŒá±á¬áá·áº blockchain áááºááŸááááºá ááá°áá®áá±á¬ á¡ááœá²á·á¡á
ááºážáá»á¬ážááẠáá°áá®áá±á¬ áá»ááºáááºá á¡á
áááºá¡ááá¯ááºážááŒá
áºááá¯ááºáááºá
channel â ááœááºáá°áá»ááºážáá»á¬ážááᯠá¡á¯ááºá á¯áá»á¬ážá¡ááŒá Ạáá±á«ááºážá ááºážááá·áº áá¯áá¹áááá±áááœá²á·á ááºážáá¯á¶á ááá¯ááá¯áááºááŸá¬á blockchain ááá¯áááºááŸááºáá¬ážáááºá Hyperledger Fabric ááẠááá°áá®áá±á¬ á á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááŒáá·áº blockchains á¡áá»á¬ážá¡ááŒá¬ážááᯠáááŒáá¯ááºáááºáááºáž áá¯ááºáá±á¬ááºááá¯ááºáááºá
á¡ááœá²á·áááºáááºáá±á¬ááºááŸá¯áá±ážáá° (MSP) á¡áá±á¬ááºá¡áá¬ážáá¯ááºáá±ážááŒááºážááŸáá·áº áá¬áá°ážáá¬áááºáá±ážá¡ááºááŒááºážá¡ááœáẠCA (áááºááŸááºá¡á¬áá¬ááá¯ááº) ááŒá áºáááºá node áá áºáá¯áááºáá®ážáááºá áááºááẠMSP ááŸáá·áº á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááẠááá¯á¡ááºáááºá
áá»áá¯ážáá°áá¯á¶ááŸááºáá»á¬áž - á¡áá±á¬ááºážá¡ á ááºáá»á¬ážááá¯á á áºáá±ážáá«á blockchain ááá¯ááááºážáááºážáá«á á áááºá á¬áá»á¯ááºáá»á¬ážááá¯áá¯ááºáá±á¬ááºááŒá®ážá¡ááá®áá±ážááŸááºážáá»á¬ážááŸáá·áºá¡ááŒááºá¡ááŸááºáááºááœááºáá«á MSP ááŸáá¯ááºáá±ážáá±á¬ ááœááºáá°áá»á¬ážááẠá¡áá±á¬ááºá¡áá¬áž (áá áºáá»á áºáááºáááºááŸááº) ááŸááááºá node á¡á¬ážáá¯á¶ážáááºážáá°á¡ááœáá·áºá¡áá±ážááŸáááá·áº Bitcoin ááá¯á·ááá¯áẠEtherium ááœááºáááºááŸáá·áºááá°áá² Hyperledger Fabric node áá»á¬ážááœáẠááá°áá®áá±á¬á¡áááºážááá¹ááá»á¬ážáá«áááºáááº-
- ááœááºáá°áá»ááºážáááºáž ááŒá áºááá¯ááºáááºá ááœááºáá°áá»ááºáž áá±á¬ááºáá¶áááºá (EP) ááŸáá·áº á áááºá á¬áá»á¯ááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«á
- áááºáá°ááœááºáá° áá»á°ážááœááºááŒááºážá (CP) - blockchain ááœááºáá±áá¬ááá¯áá¬ááááºážáááºážááŒá®áž "ááá¹áá¬á·á¡ááŒá±á¡áá±" ááá¯ááœááºážáá¶áá«á
- Anchor Peer (AP) - á¡ááœá²á·á¡á
ááºážáá»á¬ážá
áœá¬ááẠblockchain ááœááºáá«áááºáá«áá áááºážááá¯á·á¡ááŒá¬ážáááºááœááºááŸá¯á¡ááœáẠanchor peers ááá¯á¡áá¯á¶ážááŒá¯áááºá á¡ááœá²á·á¡á
ááºážáá
áºáá¯á
á®ááœáẠáá
áºáŠáž ááá¯á·ááá¯áẠáá
áºáá¯áááºááá¯áá±á¬ áá»áá¯ážáá°á
á¯áá»á¬áž ááŸáááááºá AP ááᯠââá¡áá¯á¶ážááŒá¯á á¡ááœá²á·á¡á
ááºážáá
áºáá¯ááŸá ááœááºáá°áá»ááºážáááᯠá¡ááŒá¬ážá¡ááœá²á·á¡á
ááºážááŸá áááºáá°ááœááºáá°áá»á¬ážá¡á¬ážáá¯á¶ážá á¡áá»ááºá¡áááºáá»á¬ážááᯠááá°ááá¯ááºáá«áááºá AP áá»á¬ážá¡ááŒá¬áž á¡áá»ááºá¡áááºáá»á¬ážááᯠáá
áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááẠá¡áá¯á¶ážááŒá¯áááºá
á¡áááºážá¡áá»ááºážáááá¯ááá¯áá±á¬ . - áá±á«ááºážáá±á¬ááºáá»áá¯ážáá°á - á¡ááœá²á·á¡á ááºážáá áºáá¯ááœáẠáááºáá°ááœááºáá°áá»á¬ážá áœá¬ááŸááá»áŸáẠááœááºáá°ááá±á«ááºážáá±á¬ááºááᬠá¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯á០ááááºááá¯á·ááŸá¯áá»á¬ážááᯠáááºáá¶áááŸáááŒá®áž áá»ááºáá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážáᶠáá±ážá¡ááºáááºááŒá áºáááºá áá±á«ááºážáá±á¬ááºááᯠá¡ááœá²á·á¡á ááºážá¡ááœááºážááŸá áááºáá°ááœááºáá°áá»á¬ážá áááºááŒáááºá áœá¬áááºááŸááºááá¯ááºááẠááá¯á·ááá¯áẠááá¯ááºážááá áºááŒáá·áº ááœá±ážáá»ááºááá¯ááºáááºá á¡áááºážá¡áá»ááºážáááá¯ááá¯áá±á¬ááᯠáá±á«ááºážáá±á¬ááºáá»á¬ážááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºáá°ááŒá¯áááºáááºáž á¡áá¯á¶ážááŒá¯áá«áááºá
ááá¯ááºááá¯ááºááŸá¯áá»á¬áž - áááºááá¯ážááŸáááŒá®áž blockchain ááœááºááááºážáááºážáá¬ážááá·áºá¡áá¬áá»á¬ážá á¡áá°ážáááŒáá·áºá á€áááºááŸá¬ JSON áá±á¬áºáááºááŸá áá±á¬á·áááºááá¯ážáá±áá¬ááŒá áºáááºá áááºážááẠBlockchain ááœááºááŸááºáááºážáááºáá¬ážáá±á¬á€áá±áá¬ááŒá áºáááºá áááºážááá¯á·ááœáẠblockchain ááœááºááááºážáááºážáá¬ážááá·áºáááá¯ááºážáá áºáá¯ááŸáá·áº "World state" database ááœááºááááºážáááºážáá¬ážááá·áºáááºááŸáá¡ááŒá±á¡áá±áá áºáá¯ááŸááááºá áá¯ááºáááºážáá¬áááºáá»á¬ážá¡áá±á«áº áá°áááºá áá±áá¬ááœá²á·á ááºážáá¯á¶áá»á¬ážááᯠááá¯ááºáááºá á®ážáááºáž ááŒáá·áºáá±ážáá«áááºá áááá¯á¡ááºáá±á¬ á¡ááœááºáá»á¬ážáááŸááá«á áá áºáá¯áááºážáá±á¬ á¡ááŒá¶ááŒá¯áá»ááºááŸá¬ ááá¯ááºááá¯ááºááŸá¯ááẠááá¯ááºááŸááºááŸáááááºááŒá áºááŒá®áž áááºááá¯ážááŸááááẠááŒá áºáááºá
áááºáá»á¬ - áááºááŸáááá¯ááºááá¯ááºááŸá¯á¡ááŒá±á¡áá±ááá¯ááááºážáááºážáá¬ážááá·áº Blockchain ááŸáá·áº Word state database ááá¯á·áá«áááºáááºá ááá¹áá¬á·ááá¯ááºáá¶áá±á¬áºááẠLevelDB ááá¯á·ááá¯áẠCouchDB ááá¯á¡áá¯á¶ážááŒá¯áááºá
á áááºá á¬áá»á¯áẠ- á áááºáá»áá±á¬ á á¬áá»á¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á áá áºá á á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá Hyperledger Fabric ááœááºá á áááºáá»áá±á¬ á á¬áá»á¯ááºáá»á¬ážááᯠchaincode áá¯áá±á«áºáááºá áááºážááá¯á·á¡áá±á«áºááœáẠááœááºážáááºáá¯ááºá ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááŸáá·áº ááœá±áá±ážááœá±áá°áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá¡á¬áž áááºááŸááºáá¬ážáááºá áááºážááá¬ááá¯ááºážááá¯ááºáá¬á¡áá á áááºá á¬áá»á¯ááºáá»á¬ážááẠJS ááá¯á·ááá¯áẠGo áááá¯ááááºážáááºážáá¬áá¬á áá¬ážáá»á¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº áá±á¬á·ááºáá²áá±á¬áºáá»á°ážáá»á¬ážááŒá áºáááºá
áá±á¬ááºáá¶ááŸá¯áá°áá«á â ááœááºážáááºáá¯ááºáá áºáá¯á á®á¡ááœááºá ááœá±áá±ážááœá±áá°áá áºáá¯á¡ááœáẠá¡áááºááŒá¯áá»ááºáááºáá»áŸáá»áŸá±á¬áºááá·áºáá¬ážááá·áºááŒá®áž áááºáá°áá¶á០áá°áá«áááᯠáááºáááºááŸááºááá¯ááºáááºá áá°áá«áááᯠááááºááŸááºáá¬ážáá«áá áá¯á¶áá±ááŸá¬- "áá»ááºáááºááŸá áááºááá·áºá¡ááœá²á·á¡á ááºážáá¡ááœá²á·áááºáááá¯á០ááœá±áá±ážááœá±áá°ááᯠá¡áááºááŒá¯ááá«áááºá" áá°áá«ááá»á¬áž á¥ááá¬áá»á¬áž-
- ááœá±áá±ážááœá±áá°ááᯠá¡ááœá²á·á¡á ááºážá áááºááá·áºá á®áá¶ááá·áºááœá²áá°á០á¡áááºááŒá¯ááá«áááºá
- á¡ááœá²á·á¡á ááºážáá¡ááœá²á·ááẠááá¯á·ááá¯áẠáá±á¬ááºáááºá á¡áááºááŒá¯ááá«áááºá
- áááºáá°ááœááºáá°á¡ááœá²á·á¡á ááºážáá áºáá¯áá¯á០á¡áááºááŒá¯ááááºá
á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ â á¡áá±á¬ááºážá¡áááºáá»á¬ážááᯠááá±á¬ááºáá»á¬ážá¡ááŒá
Ạáá¯ááºááá¯ážááŒá®áž áá»ááºáááºááŸá ááœááºáá°áá»á¬ážáᶠáá±ážááá¯á·áá«á ááœááºáááºáá±á«áºááŸá áááºáá°ááœááºáá°áá»á¬ážá¡á¬ážáá¯á¶ážáᶠáááºáá±á·áá»áºáá»á¬ážáá±ážááá¯á·ááẠá¡á¬ááá¶áá«áááºá á
ááºááŸá¯áá¯ááºáááºážá
áá
áºáá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯
CallFlow
- á¡ááá®áá±ážááŸááºážááẠGoá Node.js ááá¯á·ááá¯áẠJava SDK ááᯠá¡áá¯á¶ážááŒá¯á Hyperledger Fabric ááŸáá·áº áááºááœááºáááºá
- client ááẠtx á¡áá±á¬ááºážá¡ á ááºáá áºáá¯ááá¯áááºáá®ážááŒá®ážáááºáá°ááœááºáá°áá»á¬ážááá¯áá±á¬ááºáá¶á¡á¬ážáá±ážáááºáá±ážááá¯á·áááºá
- Peer ááẠáá±á¬ááºáááºá áááºááŸááºááᯠá¡áááºááŒá¯ááŒá®ážá ááœá±áá±ážááœá±áá°ááᯠá¡ááŒá®ážáááºááŒá®áž áá±á¬ááºáá¶áá»ááºáááºááŸááºááᯠáá¯á¶ážá
áœá²áá°áᶠááŒááºáááºáá±ážááá¯á·áá«áááºá Chaincode ááᯠáá±á¬ááºáá¶ááá·áºááœááºáá°áá»á¬ážáá±á«áºááœááºáᬠáá¯ááºáá±á¬ááºááŒá®áž áááºážááá¯ááºáá±á¬ááºááŸá¯ááááºááᯠáááºáá°ááœááºáá°áá»á¬ážá¡á¬ážáá¯á¶ážáᶠáá±ážááá¯á·áá«áááºá á€á¡áá¯ááºá á¡ááºáááá¯áá®áááºááᯠPBFT (Practical Byzantine Fault Tolerant) ááá±á¬áá°áá®áá»ááºáá¯áá±á«áºáááºá ááá°áá«á
ááá¹áááẠBFT áááºáá±á·áá»áºááá¯á·ááŒá®áž á¡áááºááŒá¯áá»ááºááẠáá«áááºáá°á¡á¬ážáá¯á¶ážáá¶ááŸááá¯ááºáá² áá áºá á¯á¶áá áºáá¯ááŸáá¬áá»áŸáẠáá»áŸá±á¬áºááá·áºáá«áááºá - áá±á¬ááºáááºááẠáá±á¬ááºáá¶ááŸá¯áá°áá«áááŸáá·áº áááºááá¯ááºááá·áº áá¯á¶á·ááŒááºááŸá¯á¡áá±á¡ááœááºááᯠáááºáá¶áááŸáááŒá®ážáá±á¬ááºá áá°ááẠááœá±áá±ážááœá±áá°ááᯠá¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááá¯á· áá±ážááá¯á·áááºá
- á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááẠááá±á¬ááºáá
áºáá¯áá¯ááºáá±ážááŒá®áž áááºážááᯠáá»á°ážááœááºáá±á¬ááœááºáá°áá»á¬ážá¡á¬ážáá¯á¶ážáᶠáá±ážááá¯á·áááºá á¡á±á¬áºáá«ááŸá¬áá°ááŒááºážáááºáá±á¬ááºááŸá¯ááẠááá±á¬ááºáá»á¬ážááᯠáááºááá¯ááºááŸááºáááºážáááºááŒááºážá¡á¬áž áá±áá»á¬á
á±ááŒá®ážá áááºáá»á¬áááºáááºážááᯠáááºááŸá¬ážáá±ážááẠ(
á¡ááá¯ááºáž "Forks" ááá¯ááŒáá·áºáá« ); - ááœááºáá°áá»á¬ážááẠááá±á¬ááºáá áºáá¯ááᯠáááºáá¶áááŸááááºá áá±á¬ááºáá¶ááŸá¯áá°áá«áááᯠáááºáá¶á á áºáá±ážáá«á blockchain ááá¯á· block ááá¯áá±ážááŒá®áž "World state" DB ááœáẠá¡ááŒá±á¡áá±ááᯠááŒá±á¬ááºážáá²áá«á
á¡á²áá«ááœá±á áááºážááẠnode áá»á¬ážááŒá¬ážááœáẠá¡áááºážááá¹ááá»á¬ážááœá²áá±ááŒááºážááᯠááŒá áºáá±á«áºá á±áááºá áááºážááẠblockchain ááᯠá¡ááá¯ááºážá¡áá¬ááŸáá·áº áá¯á¶ááŒá¯á¶ááŸá¯ááŸáá á±ááẠáá±áá»á¬á á±áááº-
- á áááºáá»áá±á¬ á á¬áá»á¯ááºáá»á¬áž (chaincode) ááẠáááºáá°ááœááºáá°áá»á¬ážááᯠáá±á¬ááºáá¶á¡á¬ážáá±ážááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá áááºážááẠá áááºá á¬áá»á¯ááºáá»á¬ážá áá»áŸáá¯á·ááŸááºáá»ááºááᯠáá±áá»á¬á á±áá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá áá«áááºáá°á¡á¬ážáá¯á¶ážá០ááááºážáááºážáá¬ážááŒááºáž ááá¯ááºáá² áááºáá°ááœááºáá°áá»á¬ážááᯠáá±á¬ááºáá¶ááŒááºážááŒáá·áºáᬠááááºážáááºážáá¬ážááŒááºáž ááŒá áºáááºá
- á¡á±á¬áºáá«ááŸá¬áᬠááŒááºááááºá Ordering ááẠblock áá áºáá¯áá¬ááœá²á·á ááºážááŒá®áž áááºááŸááºáá¬ážáá±á¬ áá±á«ááºážáá±á¬ááºááœááºáá°áá»á¬ážáᶠáá±ážááá¯á·áááºáá°áá±á¬á¡áá»ááºááŒá±á¬áá·áº áááºážááá¯áá±áá»á¬á á±áá«áááºá
- áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážá blockchain ááá¯áá¬ááááºážáááºážááẠ- áááºážááá¯á·á¡áá»á¬ážá¡ááŒá¬ážááŸáááá¯ááºááŒá®ážáá°ááá¯á·áááºáá«áá«ááŸáá·áºáá»ááºáá»ááºážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá áœá¬áááá¯á¡ááºáá«á
Hyperledger Fabric ááááá¯áá¬ááá¯ááºáá¬ááŒá±ááŸááºážáá»ááºáá»á¬ážááŸáá·áºáááºáááºááŒá®áž áá±á¬ááºáááºá¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠá€áááºážááŒáá·áºáá¯ááºáá±á¬ááºááŒá®áž á¡ááŒá¬ážááá¯ááºáá«á á€áá±áá¬ááœáẠááŸá¬ááœá±á·ááá¯ááºáá«áááº-
ááá¯á·ááŒá±á¬áá·áºá Hyperledger Fabric ááẠáááºáá¯ááºááá¯ááºááá·áº á¡ááŸááºáááẠuniversal system áá áºáá¯ááŒá áºáááºá
- á áááºáááºáááá¯ááºááá¹ááá¬ážááᯠá¡áá¯á¶ážááŒá¯á áááá¬ážáá±á¬ á á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«á
- JSON áá±á¬áºáááºááŒáá·áº blockchain áá±áá¬áá±á·á áºá០áá±áá¬áá»á¬ážááᯠááŸááºáááºážáááºááŒá®áž áááºáá¶ááá°áá«á
- áááºááŸááºá¡á¬áá¬ááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á API á¡áá¯á¶ážááŒá¯ááœáá·áºááᯠááœáá·áºááŒá¯ááŒá®áž á¡áááºááŒá¯áá«á
ááᯠHyperledger Fabric áá¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááá¯áá»áœááºá¯ááºááá¯á·á¡áááºážáááºáá¬ážáááºáá¬áá±á¬á¡áá«á áá±á¬ááºáá¯á¶ážááœááºá¡áá¯á¶ážáááºáá±á¬á¡áá¬áá áºáá¯ááá¯áá¯ááºááŒáá«á áá¯á·á
blockchain ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
ááŒá¿áá¬ááá¯áá¯á¶áá±á¬áºááŒááºáž
á¡áá¯ááºááŸá¬ á¡á±á¬ááºáá«áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áº Citcoin ááœááºáááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºááŒá áºáááº- á¡áá±á¬áá·áºáá áºáá¯áááºáá®ážáááºá áááºáá»ááºáá áºáá¯ááá°áááºá ááá·áºá¡áá±á¬áá·áºááᯠááœá±ááŒáá·áºááœááºážáááºá á¡áá±á¬áá·áºáá áºáá¯á០á¡ááŒá¬ážáááºá¹áá«ážáá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážáá±ážáááºááŒá áºáááºá á áááºá á¬áá»á¯ááºáá áºáá¯ááœáẠáá»áœááºá¯ááºááá¯á· áá±á¬ááºáááºá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº á¡áá¬ááá¹áá¯áá¯á¶á á¶áá áºáá¯ááᯠáá±ážááœá²ááŒáá«á áá¯á·á ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡áááºáá»á¬ážáááºááŸááºááŒá®áž áááºáá»ááºá á¬áááºážááŸáá·áº á¡áá±á¬áá·áºá á¬áááºážáá»á¬ážáá«ááŸááááºá á¡áá±á¬áá·áºáá»á¬ážááŸáá·áº á¡áá±á¬áá·áºáá»á¬ážá á¬áááºážááẠHyperledger Fabric ááá¯ááºááá¯ááºááŸá¯á á ááºážáááºážáá»ááºáá»á¬ážááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº áá°ááá¯á·ááœáẠáááá¯ááºážááŸáá·áº áááºááŸáá¡ááŒá±á¡áá±ááŸááááºá áá«ááᯠááŸááºážááŸááºážáááºážáááºáž áá±ážááá¯ááºá¡á±á¬áẠááŒáá¯ážá á¬ážáá«á·áááºá
ááááºáááºážááááºážááááºážáá»á¬ážááẠâááá¹áá¬á·á¡ááŒá±á¡áá±â áá±áá¬áá±á·á
áºááœáẠááááºážáááºážáá¬ážááá·áº áááºááŸáá¡ááŒá±á¡áá±ááŒá
áºáááºá áááºážááá¯á·á¡á±á¬ááºááœáẠblockchain ááœááºááááºážáááºážáá¬ážáá±á¬áááá¯ááºážááá¯ááŒááá±á¬ááááºážááááºážáá»á¬ážááŒá
áºáááºá á¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŒááºážááŒáá·áº áááºááŸáááá¯ááºááá¯ááºááŸá¯á¡ááŒá±á¡áá±á¡á¬áž ááŒá±á¬ááºážáá²áá«áááºá ááá¯ááºááá¯ááºááŸá¯ááẠáá
áºáá¯áá¯á¶ážá¡ááŒá
áºáᬠááŒá±á¬ááºážáá²ááœá¬ážáá±á¬ááŒá±á¬áá·áº á¡áá±á¬ááºážá¡áááºá ááááºá¡áá±ááŒáá·áº á¡áá¬ááá¹áá¯á¡áá
áºáá
áºáá¯ááᯠáááºáá®ážááŒá®áž ááá¯ááºááá¯ááºááŸá¯á áááºááŸááááºááá¯ážááẠááŸááºáááºážá¡ááŒá
áºááá¯á· áá±á¬ááºááŸáááœá¬ážáá«áááºá
IBM Cloud
á¡áá±á¬áá·áºáá
áºáá¯áááºáá®ážáá«á
Blockchain Platform ááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒá±áᶠblockchain ááœááºáááºááᯠáááºáá®ážáá«á blockchain á áááºá á¬áá»á¯ááºááᯠáááºáá®ážááŒá®áž áá¯ááºáá±á¬ááºáá«á Blockchain Platform á០á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠáá¯ááºááœáŸááºáá«á
á¡á±á¬ááºáá«ááá¯á·ááẠIBM Blockchain ááááºáá±á¬ááºážá áááºáá¬ážááŒááºáá¬ááºáá¯á¶áá»á¬ážááŒá áºáááºá áááºážááẠblockchain áá áºáá¯ááá¯áááºáá®ážáááºážá¡ááœáẠááœáŸááºááŒá¬ážáá»ááºááá¯ááºáá±á¬áºáááºáž á¡áá¯ááºááááºáááºááᯠááá¯ááºááŒááŒááºážáá¬ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááááºááœááºáá»ááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœá²á·á¡á ááºážáá áºáá¯ááŒá¯áá¯ááºáááº-
áá»áœááºá¯ááºááá¯á·ááẠáááºážááœáẠnode áá»á¬ážááá¯áááºáá®ážáááº- Orderer CA, Org1 CA, Orderer Peer-
áá»áœááºá¯ááºááá¯á·ááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááᯠáááºáá®ážáááº-
áá»ááºáááºáá
áºáá¯áááºáá®ážááŒá®áž citcoin áá¯áá±á«áºáááº-
á¡ááŒá±áá¶á¡á¬ážááŒáá·áº Channel ááẠblockchain áá
áºáá¯ááŒá
áºáá±á¬ááŒá±á¬áá·áºáááºážááẠblock zero (ááá¹áá¬áŠážááá±á¬ááº) ááŒáá·áºá
áááºáááº-
Smart Contract áá±ážááŒááºážá
/*
* Citcoin smart-contract v1.5 for Hyperledger Fabric
* (c) Alexey Sushkov, 2019
*/
'use strict';
const { Contract } = require('fabric-contract-api');
const maxAccounts = 5;
class CitcoinEvents extends Contract {
async instantiate(ctx) {
console.info('instantiate');
let emptyList = [];
await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(emptyList)));
}
// Get all accounts
async GetAccounts(ctx) {
// Get account list:
let accounts = '{}'
let accountsData = await ctx.stub.getState('accounts');
if (accountsData) {
accounts = JSON.parse(accountsData.toString());
} else {
throw new Error('accounts not found');
}
return accountsData.toString()
}
// add a account object to the blockchain state identifited by their name
async AddAccount(ctx, name, balance) {
// this is account data:
let account = {
name: name,
balance: Number(balance),
type: 'account',
};
// create account:
await ctx.stub.putState(name, Buffer.from(JSON.stringify(account)));
// Add account to list:
let accountsData = await ctx.stub.getState('accounts');
if (accountsData) {
let accounts = JSON.parse(accountsData.toString());
if (accounts.length < maxAccounts)
{
accounts.push(name);
await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(accounts)));
} else {
throw new Error('Max accounts number reached');
}
} else {
throw new Error('accounts not found');
}
// return object
return JSON.stringify(account);
}
// Sends money from Account to Account
async SendFrom(ctx, fromAccount, toAccount, value) {
// get Account from
let fromData = await ctx.stub.getState(fromAccount);
let from;
if (fromData) {
from = JSON.parse(fromData.toString());
if (from.type !== 'account') {
throw new Error('wrong from type');
}
} else {
throw new Error('Accout from not found');
}
// get Account to
let toData = await ctx.stub.getState(toAccount);
let to;
if (toData) {
to = JSON.parse(toData.toString());
if (to.type !== 'account') {
throw new Error('wrong to type');
}
} else {
throw new Error('Accout to not found');
}
// update the balances
if ((from.balance - Number(value)) >= 0 ) {
from.balance -= Number(value);
to.balance += Number(value);
} else {
throw new Error('From Account: not enought balance');
}
await ctx.stub.putState(from.name, Buffer.from(JSON.stringify(from)));
await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
// define and set Event
let Event = {
type: "SendFrom",
from: from.name,
to: to.name,
balanceFrom: from.balance,
balanceTo: to.balance,
value: value
};
await ctx.stub.setEvent('SendFrom', Buffer.from(JSON.stringify(Event)));
// return to object
return JSON.stringify(from);
}
// get the state from key
async GetState(ctx, key) {
let data = await ctx.stub.getState(key);
let jsonData = JSON.parse(data.toString());
return JSON.stringify(jsonData);
}
// GetBalance
async GetBalance(ctx, accountName) {
let data = await ctx.stub.getState(accountName);
let jsonData = JSON.parse(data.toString());
return JSON.stringify(jsonData);
}
// Refill own balance
async RefillBalance(ctx, toAccount, value) {
// get Account to
let toData = await ctx.stub.getState(toAccount);
let to;
if (toData) {
to = JSON.parse(toData.toString());
if (to.type !== 'account') {
throw new Error('wrong to type');
}
} else {
throw new Error('Accout to not found');
}
// update the balance
to.balance += Number(value);
await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
// define and set Event
let Event = {
type: "RefillBalance",
to: to.name,
balanceTo: to.balance,
value: value
};
await ctx.stub.setEvent('RefillBalance', Buffer.from(JSON.stringify(Event)));
// return to object
return JSON.stringify(from);
}
}
module.exports = CitcoinEvents;
áááºááá¯ááºá¡á¬ážááŒáá·áºá á€áá±áá¬ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááŸááºážáááºážááá·áºáááº-
- ááá¯ááºááŒáááá¯ááááºááẠHyperledger Fabric API ááá¯á¡áá¯á¶ážááŒá¯á ááá¯ááºááŒáááá¯ááááºááá¯áá±á«áºááá¯ááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ (AddAccountá GetAccountsá SendFromá GetBalanceá RefillBalance) ááŸááá«áááºá
- SendFrom ááŸáá·áº RefillBalance áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠááá¯ááºááŒáááá¯ááááºá០áááºáá¶áááŸáááá·áº Events áá»á¬ážááᯠáá¯ááºáá±ážáá«áááºá
- á áááºáá»ááá·áºá á¬áá»á¯ááºááᯠáá»ááºáá»ááºážáá¯ááºáá±á¬ááºááá·áºá¡áá« áá»ááºáá»ááºážáá¯ááºáá±á¬ááºááá·áºáá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºáááºá á¡ááŸááºáá±á¬á·á áááºážááᯠáá áºááŒáááºáááºážáᬠáá±á«áºááá¯ááŒááºážááá¯ááºáá² á áááºá á¬áá»á¯ááºáá¬ážááŸááºážááᯠááŒá±á¬ááºážáá²ááá·áºá¡áá«ááá¯ááºážáᯠáá±á«áºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡áá»ááºážááŸá®ážáá±á¬ array ááŒáá·áº á á¬áááºážáá áºáá¯ááᯠá¡á ááŒá¯ááŒááºážááẠááá±á¬ááºážáá±á¬ á¡ááŒá¶áá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠá áááºá á¬áá»á¯ááºááá¬ážááŸááºážááᯠááŒá±á¬ááºážáá²áá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠáááºááŸáá á¬áááºážááᯠáá¯á¶ážááŸá¯á¶ážááœá¬ážáá«áááºá áá«âáá±ááá·áºâ á¡áááºââááŒá±áá«áááºâ áá»áœááºââáá±á¬áºâ âáá±á·áá¬âáá±áá«áááºâá)
- á¡áá±á¬áá·áºáá»á¬ážááŸáá·áº á¡áá±á¬áá·áºáá»á¬ážá á¬áááºážáá»á¬ážááẠJSON áá±áá¬ááœá²á·á ááºážáá¯á¶áá»á¬ážááŒá áºáááºá JS ááᯠdata manipulation á¡ááœáẠáá¯á¶ážáá«áááºá
- getState áá¯ááºáá±á¬ááºáá»ááºáá±á«áºááá¯ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºááá¯ááºááŸá¯áá áºáá¯á áááºááŸááááºááá¯ážááᯠáááºáááŸáááá¯ááºááŒá®áž áááºážááᯠputState ááᯠá¡áá¯á¶ážááŒá¯á á¡ááºááááºáá¯ááºááá¯ááºáááºá
- á¡áá±á¬áá·áºáá áºáá¯áááºáá®ážáá±á¬á¡áá«á Blockchain ááŸá á¡áá»á¬ážáá¯á¶ážá¡áá±á¬áá·áºáá»á¬áž (maxAccounts = 5) á¡ááœáẠááŸáá¯ááºážááŸááºááŸá¯ááᯠááŒá¯áá¯ááºáá¬ážááá·áº AddAccount áá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºáááºá ááŒá®ážáá±á¬á· áá®ááŸá¬ á¡áá±á¬áá·áº á¡áá±á¡ááœáẠá¡áá¯á¶ážáááŸá ááá¯ážáᬠáá¬ááᯠáááááŒá¯áá ááááá¬ážá áá®ááᯠá¡ááŸá¬ážááœá±ááᯠááŸá±á¬ááºááŸá¬ážááá·áºáá«áááº)
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºáá»ááá·áºá á¬áá»á¯ááºááᯠChannel ááœááºáááºááŒá®áž áá»ááºáá»ááºážáá¯ááºáá±á¬ááºáá«-
Smart Contract ááá·áºááœááºážááŒááºážá¡ááœáẠááœá±áá±ážááœá±áá°ááᯠááŒáá·áºááŒáá«á
áá¯á·á
áá»áœááºá¯ááºááá¯á·á Channel ááŸáá·áºáááºáááºáá±á¬á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááŒáá·áºááŒáá«á
áá¯á·á
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠIBM cloud ááŸá blockchain ááœááºáááºá á¡á±á¬ááºáá«áá¯á¶ááŒááºážááᯠáááŸááááºá áá¯á¶ááŒááºážááẠAmazon cloud ááœáẠvirtual server áá
áºáá¯áá±á«áºááœááºáááºáááºáá±áá±á¬ááá¯ááºááŒáááá¯ááááºááá¯áááºážááŒáááẠ(áá±á¬ááºá¡ááá¯ááºážááœááºáááºážáá¡ááŒá±á¬ááºážááá¯ááá¯ááá¯áá±á·áá¬áá«)á
Hyperledger Fabric API áá±á«áºááá¯ááŸá¯á¡ááœáẠGUI áááºáá®ážááŒááºážá
Hyperledger Fabric ááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ API áá áºáᯠááŸááááº-
- áá»ááºáááºáááºáá®ážáá«á
- áá»ááºáááºááá¯á· áá»áááºáááºááŸá¯áá»á¬ážá
- áá»ááºáááºááœáẠá áááºáá»áá±á¬ á á¬áá»á¯ááºáá»á¬ážááᯠáááºáááºááŒááºážááŸáá·áº áá»ááºáá»ááºážáá¯ááºáá±á¬ááºááŒááºážá
- áá±á«áºááá¯ááŸá¯áá»á¬ážá
- blockchain ááœááºá¡áá»ááºá¡áááºáá±á¬ááºážááá¯áá«á
áá»áŸá±á¬ááºááœáŸá¬ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯
áá»áœááºá¯ááºááá¯á·áááá¯ááºááŒáááá¯ááááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠááœá±áá±ážááœá±áá°áá»á¬ážááá¯áá±á«áºááá¯áááºááŸáá·áº á¡áá»ááºá¡áááºáá±á¬ááºážáá¶áááºá¡ááœáẠAPI ááá¯áᬠá¡áá¯á¶ážááŒá¯áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠIBM blockchain ááááºáá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯á áá»ááºá¡ááá·áºáá»á¬ážááᯠááŒá®ážááŒá±á¬ááºááŒá®ážááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá
á¶áááºážááá¬á¡á
á¯á¡áá±ážááᯠá¡áá¯á¶ážááŒá¯á GUI áá
áºáá¯ááᯠáá±ážáá¬ážáááº- Express.js + Vue.js + Node.js á áá±ááºáá®áááºá¡ááºááá®áá±ážááŸááºážáá»á¬áž á
áááºáááºáá®ážáááºážá¡ááœáẠáá®ážááŒá¬ážáá±á¬ááºážáá«ážáá
áºáá¯áẠáá±ážáá¬ážááá¯ááºáááºá á€áá±áá¬ááœáẠáá»áœááºá¯ááºá¡ááŸá
áºáááºáá¯á¶áž ááá¯á·áá»áá»ááºá
á®ážáá®ážá ááá·áºááºááᯠáá»ááºáá¬ážáá²á·áá«áááºá
- HyperledgerDemo/v1/init - blockchain ááᯠá áááºáá«á
- HyperledgerDemo/v1/accounts/list â á¡áá±á¬áá·áºá¡á¬ážáá¯á¶ážáá á¬áááºážááᯠááá°áá«á
- HyperledgerDemo/v1/account?name=Bob&balance=100 â Bob á¡áá±á¬áá·áº áááºáá®ážáá«á
- HyperledgerDemo/v1/info?account=Bob â Bob á¡áá±á¬áá·áºá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááá°áá«á
- HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - Bob á០Alice ááá¯á· áááºá¹áá«ážááŒá¬ážááŸá áºááŒá¬áž ááœáŸá²ááŒá±á¬ááºážáá«á
- HyperledgerDemo/v1/disconnect - blockchain ááá¯á·áá»áááºáááºááŸá¯ááá¯ááááºáá«á
ááœááºáá«ááŸááá±á¬ á¥ááá¬áá»á¬ážááŒáá·áº API á ááŸááºážáááºážáá»ááº
Amazon cloud ááŸá ááá¯ááºáጠá¡ááºááº
á¡ááá®áá±ážááŸááºážááᯠAmazon ááŸá¬ áááºáá¬ážáá¬ááŒá±á¬áá·áº... IBM ááẠáá»áœááºá¯ááºá á¡áá±á¬áá·áºááᯠá¡ááá·áºááŒáŸáá·áºááŒá®áž virtual áá¬áá¬áá»á¬ážááᯠáááºáá®ážááœáá·áºáááŒá¯ááá¯ááºáá±ážáá«á ááá¯ááááºážááá¯á· áá»ááºáá®áá®ážááá·áºáááºáž
- blockchain ááá¯á áááºáá«á
- á¡áá±á¬áá·áºáá áºáá¯áááºáá®ážáá« (ááá¯á·áá±á¬áº ááá¯ááœáẠáááºááẠá¡áá±á¬áá·áºá¡áá áºáá áºáᯠáááºáá®ážááááá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á áááºá á¬áá»á¯ááºááœáẠáááºááŸááºáá¬ážááá·áº á¡áá±á¬áá·áºá¡áá±á¡ááœáẠá¡áá»á¬ážáá¯á¶ážááẠblockchain ááœáẠáá±á¬ááºááŸáááœá¬ážáá±á¬ááŒá±á¬áá·áºááŒá áºáááº)á
- á¡áá±á¬áá·áºáá»á¬ážá á¬áááºážááá¯áááºáá¶ááá°áá«á
- Aliceá Bob ááŸáá·áº Alex ááá¯á·ááŒá¬áž citcoin á¡ááŒáœá±á á±á·áá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážáá«á
- ááŒá áºáááºáá»á¬ážááá¯áááºáá¶áá« (ááá¯á·áá±á¬áºááá¯ááŒá áºáááºáá»á¬ážááá¯ááŒááááºáááºážáááºážáááŸááá±á¬á·áá«á ááá¯á·ááŒá±á¬áá·áºááá¯ážááŸááºážá á±áááºá¡ááœááºá ááŒá áºáááºáá»á¬ážááá¯ááá¶á·ááá¯ážáá«áᯠinterface ááŸááŒá±á¬áááº)
- ááŸááºáááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá
ááááŠážá áœá¬áá»áœááºá¯ááºááá¯á·ááẠblockchain ááá¯á áááºáááºá
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡áá±á¬áá·áºááá¯áááºáá®ážááŒá®áž áááºáá»ááºááœá±ááŒáá·áº á¡áá»áááºáááŒá¯ááºážáá«ááŸáá·áºá
áááŸáááá¯ááºáá±á¬á¡áá±á¬áá·áºáá»á¬ážá¡á¬ážáá¯á¶ážáá
á¬áááºážááᯠáá»áœááºá¯ááºááá¯á·áááŸááá«áááº-
áá»áœááºá¯ááºááá¯á·ááẠáá±ážááá¯á·áá°ááŸáá·áº áááºáá¶áá°ááᯠááœá±ážáá»ááºááŒá®áž áááºážááá¯á·á áááºáá»ááºáá»á¬ážááᯠááá°áá«áááºá áá±ážááá¯á·áá°ááŸáá·áº áááºáá¶áá°ááẠáá°áá®áá«áá áááºážáá¡áá±á¬áá·áºááᯠáááºáá¶ááŒáá·áºááœááºážáááºááŒá
áºáá«áááºá
ááŸááºáááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠááœá±áá±ážááœá±áá°áá¯ááºáá±á¬ááºááŸá¯ááᯠá
á±á¬áá·áºááŒáá·áºáááº-
ááááºáá±á¬á· áá®ááá¯á¡á
á®á¡á
ááºáá²á· áá«áá«áá²á á¡á±á¬ááºáá« blockchain ááœááºáá»áœááºá¯ááºááá¯á·áááœá±áá±ážááœá±áá°ááá¯áááºááœá±á·ááá¯ááºáááº-
ááŸáá·áº á¡áá±á¬ááºážá¡áááºáá»á¬ážá á¡ááœá±ááœá±á
á¬áááºáž-
áááºážááŸáá·áºá¡áá°á áá»áœááºá¯ááºááá¯á·ááẠCitcoin ááœááºáááºááá¯áááºáá®ážááẠPoC áá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠá¡á±á¬ááºááŒááºá
áœá¬ááŒá®ážááŒá±á¬ááºáá²á·áááºá Citcoin ááẠáááºá¹áá«ážááŒá¬ážáá»á¬áž ááœáŸá²ááŒá±á¬ááºážááŒááºážá¡ááœáẠááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ ááœááºáááºáá
áºáá¯ááŒá
áºáá¬ááẠáá±á¬ááºáááºáá¬áá»á¬ážáá¯ááºáá±á¬ááºááááºáááºážá á¡ááœááºáááºážáááº-
- á¡áá±á¬áá·áºáááºáá®ážááŒááºážá¡ááá·áºááœááºá áá®ážááá·áº/á¡áá»á¬ážááŒááºáá°áá±á¬á·ááá»áá¯ážáááºááᯠá¡áá±á¬ááºá¡áááºáá±á«áºáá«á áá®ážááá·áºáá±á¬á·ááᯠá¡áá±á¬áá·áºá¡áá¯á¶ážááŒá¯áá°ááŸáá·áºá¡áá° ááááºážáááºážáá¬ážááááºááŒá áºááŒá®áž á¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠblockchain ááœáẠááááºážáááºážáá¬ážááááºááŒá áºáááºá
- á¡áá¯á¶ážááŒá¯áá°ááᯠááœá²ááŒá¬ážáááºááŸááºáááºá¡ááœáẠá¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠá¡áááºáá áºáá¯ááá¯ááºáá² á¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠá¡áá¯á¶ážááŒá¯ááá·áº á¡ááŒáœá±á á±á·ááœáŸá²ááŒá±á¬ááºážááŸá¯áá áºáᯠááŒá¯áá¯ááºáá«á
- á¡áá¯á¶ážááŒá¯áá°á០áá¬áá¬ááá¯á·ááœá¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá»á¬ážááᯠáá°áááá¯ááºááá¯ááºáá±á¬á·ááŒáá·áº á á¬ááŸááºáá«á
áá±á¬ááºáá»ááº
áá»áœááºá¯ááºááá¯á·ááẠCitcoin ááœááºáááºááᯠá¡á±á¬ááºáá«áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááº- á¡áá±á¬áá·áºáá áºáá¯ááá·áºáá«á áááºáá»ááºáá áºáá¯ááá°áá«á ááá·áºá¡áá±á¬áá·áºááᯠááœá±ááŒáá·áºáá«á á¡áá±á¬áá·áºáá áºáá¯á០á¡ááŒá¬ážáááºá¹áá«ážáá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážáá«á áá«ááᯠPoC áá±á¬ááºááá¯á· áá«ááá¯á·á áááºáá±á¬ááºáá¯ááºáá»áá²á
- áá±áá¯áá»á¡á¬ážááŒáá·áº blockchain ááŸáá·áº Hyperledger Fabric ááá¯á¡áá°ážáááŒáá·áºáááºáá±á·áá¬áááºááá¯á¡ááºáááºá
- IBM ááá¯á·ááá¯áẠAmazon clouds ááᯠá¡áá¯á¶ážááŒá¯ááẠáá±á·áá¬áá«á
- JS áááá¯ááááºážáááºážáá¬áá¬á áá¬ážááŸáá·áº áááºáá±á¬ááºá¡áá»áá¯á·ááᯠáá±á·áá¬áá«á
- á¡áááºá á¡áá»áá¯á·áá±á¬áá±áá¬áá»á¬ážááᯠblockchain ááœááºáááááºážáááºážáá¬ážáááºááá¯á¡ááºáá«áá áá®ážááŒá¬ážáá±áá¬áá±á·á áºáá áºáá¯ááœááºá á¥ááá¬á¡á¬ážááŒáá·áº PostgreSQL ááŸáá·áºáá±á«ááºážá ááºážáááºáá±á·áá¬áá«á
- áá±á¬ááºáá¯á¶ážá¡áá±áá²á· á¡áááºážáá¯á¶ážáá±á¬á· - Linux ááᯠááááá² áá±ááºáá áºááá¹áá¬ááŸá¬ áááºáá±ááá¯á·áááá«áá°ážá)
áá¯ááºáá«áááºá á¡á²áá«á áá¯á¶ážáá»á¶áááá¹áá¶ááá¯ááºáá±ááá·áº áááºááŒáá¯ážá á¬ážááá«áááá·áºáááºá
GitHub ááŸáá¡áááºážá¡ááŒá áºáá»á¬áž
ááááºážáááºážááŒá
áºáá»á¬ážá áá±á¬áºááŒáááºá
áááºááá±á¬áẠ«áá¬áá¬á» â Node.js áá¬áá¬
áááºááá±á¬áẠ«áá±á¬ááºáááºÂ» â Node.js áá¯á¶ážá
áœá²áá°
áááºááá±á¬áẠ«blockchain"(áá«áá¬áá®áá¬áááºááá¯ážáá»á¬ážááŸáá·áº áá±á¬á·áá»á¬ážááẠá¡áá¯ááºááá¯ááºáá±á¬á·áá² ááá°áá¬á¡ááŒá
áºáᬠáá±ážáááº)á
- á á¬áá»á¯áẠ- á áááºá á¬áá»á¯ááºá¡áááºážá¡ááŒá áºáá¯ááº
- ááá¯ááºáá¶á¡ááẠâ Hyperledger Fabric API ááá¯á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá°áá±á¬á·áá»á¬ážá
- *.cds - á áááºá á¬áá»á¯ááºáá»á¬áž á á¯á ááºážáá¬ážáá±á¬ áá¬ážááŸááºážáá»á¬áž
- *.json ááá¯ááºáá»á¬áž - Hyperledger Fabric API ááá¯á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠáá¯á¶á á¶áá°ááá¯ááºáá»á¬áž á¥ááá¬
áá«áá¬á¡á
áá²ááŸááá«áá±ážáááºá
source: www.habr.com