Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π“Π»Π°Π·Π° боятся, Π° Ρ€ΡƒΠΊΠΈ Ρ‡Π΅ΡˆΡƒΡ‚ΡΡ!

Π’ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с тСхнологиями, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строятся Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Ρ‹ (Π§Ρ‚ΠΎ Π½Π°ΠΌ стоит Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?) ΠΈ кСйсами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Π§Ρ‚ΠΎ Π½Π°ΠΌ стоит кСйс ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?). Настало врСмя ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ! Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΈΠ»ΠΎΡ‚ΠΎΠ² ΠΈ PoC (Proof of Concept) я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΠΊΠ°, Ρ‚.ΠΊ. ΠΊ Π½ΠΈΠΌ Π΅ΡΡ‚ΡŒ доступ ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΈΡ€Π° ΠΈ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, Π½Π΅ Π½Π°Π΄ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Π½ΡƒΠ΄Π½ΡƒΡŽ установку окруТСния, Ρ‚.ΠΊ. Π΅ΡΡ‚ΡŒ прСдустановлСнныС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ простоС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ΅Ρ‚ΡŒ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΌΠΎΠ½Π΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ участниками ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ скромно Π‘itcoin. Для этого Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΠΊΠΎ IBM ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Hyperledger Fabric. Для Π½Π°Ρ‡Π°Π»Π° разбСрСмся, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Hyperledger Fabric Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ?

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Hyperledger Fabric β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ‚ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ информационная систСма это:

  • Набор сСрвСров ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ядро, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ;
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ для взаимодСйствия с систСмой;
  • БрСдства для рСгистрации, Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ устройств /людСй;
  • Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, хранящая ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈ Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Hyperledger Fabric ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° сайтС, Π° Ссли ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Ρ‚ΠΎ Hyperledger Fabric β€” это opensource ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹, написанныС Π½Π° языках программирования JS ΠΈ Go. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Hyperledger Fabric ΠΈ ΡƒΠ±Π΅Π΄ΠΈΠΌcя, Ρ‡Ρ‚ΠΎ это ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ систСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅ΡΡ‚ΡŒ спСцифика ΠΏΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΈ Π²ΠΎ всСх Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°Ρ…, хранятся Π² Π±Π»ΠΎΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ссли участники ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ консСнсусу ΠΈ послС записи Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

АрхитСктура Hyperledger Fabric

На схСмС прСдставлСна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Hyperledger Fabric:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Organizations β€” ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ содСрТат peer-Ρ‹, Ρ‚.ΠΎ. Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ сущСствуСт Π·Π° счСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ организациями. Π Π°Π·Π½Ρ‹Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ channel.

Channel β€” логичСская структура, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ peer-Ρ‹ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹, Ρ‚.ΠΎ. задаСтся Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½. Hyperledger Fabric ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠ² с Ρ€Π°Π·Π½ΠΎΠΉ бизнСс Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ.

Membership Services Provider (MSP) β€” это CA (Certificate Authority) для Π²Ρ‹Π΄Π°Ρ‡ΠΈ identity ΠΈ назначСния Ρ€ΠΎΠ»Π΅ΠΉ. Для создания Π½ΠΎΠ΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с MSP.

Peer nodes β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, хранят Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с прилоТСниями. Π£ peer-ΠΎΠ² Π΅ΡΡ‚ΡŒ identity (Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ сСртификат), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π΄Π°Π΅Ρ‚ MSP. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ сСти Bitcoin ΠΈΠ»ΠΈ Etherium, Π³Π΄Π΅ всС Π½ΠΎΠ΄Ρ‹ Ρ€Π°Π²Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹, Π² Hyperledger Fabric Π½ΠΎΠ΄Ρ‹ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ:

  • Peer ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ endorsing peer (EP) ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹.
  • Committing peer (CP) β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Β«World stateΒ».
  • Anchor Peer (AP) β€” Ссли Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ, Ρ‚ΠΎ Π°Π½ΠΊΠΎΡ€ peer-Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. КаТдая организация Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π°Π½ΠΊΠΎΡ€ peer. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AP любой peer Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ всСх peer-Π°Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… организациях. Для синхронизации ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ AP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ gossip ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».
  • Leader Peer β€” Ссли организация ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько peer-ΠΎΠ², Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈΠ΄Π΅Ρ€ peer Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈ ΠΈΠ· Ordering service ΠΈ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ peer-Π°ΠΌ. Π›ΠΈΠ΄Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ статичСски, Ρ‚Π°ΠΊ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ динамичСски peer-Π°ΠΌΠΈ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Для синхронизации ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ gossip ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».

Assets β€” сущности, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅. Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ β€” это key-value Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. ИмСнно эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Β«BlockchainΒ». Π£ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ история, которая хранится Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ хранится Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Β«World stateΒ». Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π² зависимости ΠΎΡ‚ бизнСс Π·Π°Π΄Π°Ρ‡. НСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, СдинствСнная рСкомСндация β€” asset-Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

Ledger β€” состоит ΠΈΠ· Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Β«BlockchainΒ» ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Β«Word stateΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС asset-ΠΎΠ². World state ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ LevelDB ΠΈΠ»ΠΈ CouchDB.

Smart contract β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² рСализуСтся бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° систСмы. Π’ Hyperledger Fabric смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ chaincode. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ chaincode Π·Π°Π΄Π°ΡŽΡ‚ΡΡ asset-Ρ‹ ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π°Π΄ Π½ΠΈΠΌΠΈ. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ тСхничСским языком, Ρ‚ΠΎ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° языках программирования JS ΠΈΠ»ΠΈ Go.

Endorsement policy β€” для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ chaincode ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ сколько ΠΈ ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ для Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Если ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π½Π΅ Π·Π°Π΄Π°Π½Π°, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ: β€œΡ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ любой Ρ‡Π»Π΅Π½ (member) любой ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² channel”. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ:

  • Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ любой администратор ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ;
  • Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ любой Ρ‡Π»Π΅Π½ (member) ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ;
  • Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ любой peer ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Ordering service β€” ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π±Π»ΠΎΠΊΠΈ ΠΈ отправляСт peer-Π°ΠΌ Π² channel. Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ доставку сообщСний всСм peer-Π°ΠΌ Π² сСти. Для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… систСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний Kafka, для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования Solo.

CallFlow

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ взаимодСйствуСт с Hyperledger Fabric, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Go, Node.js ΠΈΠ»ΠΈ Java SDK;
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ создаСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ tx ΠΈ посылаСт Π΅Π΅ Π½Π° endorsing peer-Ρ‹;
  • Peer провСряСт подпись ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, выполняСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΈ посылаСт endorsement signature ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Chaincode Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° endorsing peer, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ выполнСния рассылаСтся Π½Π° всС peer-Ρ‹. Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ называСтся β€” PBFT (Practical Byzantine Fault Tolerant) консСнсус. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡ‚ классичСского BFT Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сообщСниС рассылаСтся ΠΈ оТидаСтся ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡ‚ всСх участников, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°;
  • ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» число ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ endorsement policy, ΠΎΠ½ посылаСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½Π° Ordering service;
  • Ordering service Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊ ΠΈ посылаСт Π΅Π³ΠΎ Π½Π° всС committing peer-Ρ‹. Ordering service обСспСчиваСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ запись Π±Π»ΠΎΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ, ledger fork (см. Ρ€Π°Π·Π΄Π΅Π» Β«Π€ΠΎΡ€ΠΊΠΈΒ»);
  • Peer-Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π±Π»ΠΎΠΊ, Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ endorsement policy, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π±Π»ΠΎΠΊ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ состояниС Π² Β«World stateΒ» DB.

Π’.Π΅. получаСтся Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ»Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ΄Π°ΠΌΠΈ. Π­Ρ‚ΠΎ обСспСчиваСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°:

  • Π‘ΠΌΠ°Ρ€Ρ‚-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ (chaincode) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ endorsing peer-Ρ‹. Π­Ρ‚ΠΎ обСспСчиваСт ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ², Ρ‚.ΠΊ. ΠΎΠ½ хранится Π½Π΅ Ρƒ всСх участников, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° endorsing peer-Π°Ρ….
  • Ordering Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстро. Π­Ρ‚ΠΎ обСспСчиваСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ordering Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊ ΠΈ отправляСт Π΅Π³ΠΎ Π½Π° фиксированный Π½Π°Π±ΠΎΡ€ leader peer-ΠΎΠ².
  • Committing peers Ρ‚ΠΎΠ»ΡŒΠΊΠΎ хранят Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ β€” ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большой мощности ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Hyperledger Fabric ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Π° Π½Π΅ ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚: Architecture Origins ΠΈΠ»ΠΈ Ρ‚ΡƒΡ‚: Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains.

Π˜Ρ‚Π°ΠΊ, Hyperledger Fabric β€” это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ систСма, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ:

  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²;
  • Π—Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON;
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ доступ ΠΊ API, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Certificate Authority.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ со спСцификой Hyperledger Fabric, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°ΠΊΠΎΠ½Π΅Ρ† сдСлаСм Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅!

Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π—Π°Π΄Π°Ρ‡Π° β€” Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ‚ΡŒ Citcoin со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ функциями: ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ account, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ баланс, ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ счСт, пСрСвСсти ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ счСта Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НарисуСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄Π°Π»Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π² смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π΅. Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π±ΡƒΠ΄ΡƒΡ‚ account-Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ (name) ΠΈ содСрТат баланс (balance), ΠΈ список account-ΠΎΠ². Account-Ρ‹ ΠΈ список account-ΠΎΠ² β€” это Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Hyperledger Fabric asset-Ρ‹. БоотвСтствСнно, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ история ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ это наглядно Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π’Π΅Ρ€Ρ…Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ β€” это Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ хранится Π² Π±Π°Π·Π΅ Β«World stateΒ». Под Π½ΠΈΠΌΠΈ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, которая хранится Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅. Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС asset-ΠΎΠ² измСняСтся транзакциями. Asset измСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, поэтому Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ asset-Π° ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.

Облако IBM

Π—Π°Π²ΠΎΠ΄ΠΈΠΌ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись Π² ΠΎΠ±Π»Π°ΠΊΠ΅ IBM. Для использования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π΅Π΅ Π½Π°Π΄ΠΎ Π°ΠΏΠ³Ρ€Π΅ΠΉΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ Pay-As-You-Go. Π­Ρ‚ΠΎΡ‚ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ быстрым, Ρ‚.ΠΊ. IBM Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ провСряСт Π΅Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Из ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ IBM Π½Π΅ΠΏΠ»ΠΎΡ…ΠΈΠ΅ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Hyperledger Fabric Π² ΠΈΡ… ΠΎΠ±Π»Π°ΠΊΠ΅. МнС понравился ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» статСй ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ Blockchain ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ IBM. Π­Ρ‚ΠΎ Π½Π΅ инструкция ΠΏΠΎ созданию Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°, Π° просто дСмонстрация объСма Π·Π°Π΄Π°Ρ‡ΠΈ. Π˜Ρ‚Π°ΠΊ, для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠ΄Π½Ρƒ Organization:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π’ Π½Π΅ΠΉ создаСм Π½ΠΎΠ΄Ρ‹: Orderer CA, Org1 CA, Orderer Peer:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π—Π°Π²ΠΎΠ΄ΠΈΠΌ ΡŽΠ·Π΅Ρ€ΠΎΠ²:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Channel ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ citcoin:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

По сути Channel β€” это Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½, поэтому ΠΎΠ½ начинаСтся с Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (Genesis block):

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

ПишСм 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;

Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ Ρ‚ΡƒΡ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ всС понятно:

  • Π•ΡΡ‚ΡŒ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Hyperledger Fabric API.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ SendFrom ΠΈ RefillBalance Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ события (Event), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.
  • Ѐункция instantiate β€” вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ инстанциировании смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. На самом Π΄Π΅Π»Π΅, ΠΎΠ½Π° вызываСтся Π½Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ вСрсии смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ инициализация списка пустым массивом β€” это плохая идСя, Ρ‚.ΠΊ. Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ смСнС вСрсии смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ список. Но Π½ΠΈΡ‡Π΅Π³ΠΎ, я ΠΆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ‡ΡƒΡΡŒ).
  • Account-Ρ‹ ΠΈ список account-ΠΎΠ² (accounts) β€” это JSON структуры Π΄Π°Π½Π½Ρ‹Ρ…. Для манипуляций с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JS.
  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ asset-Π° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getState, Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ putState.
  • ΠŸΡ€ΠΈ создании Account вызываСтся функция AddAccount, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ производится сравнСниС Π½Π° максимальноС число account-Π² Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ (maxAccounts = 5). И Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ косяк (Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ?), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ бСсконСчному росту числа account-ΠΎΠ². Π’Π°ΠΊΠΈΡ… ошибок Π½Π°Π΄ΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ)

Π”Π°Π»Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π² Channel ΠΈ инстанциируСм Π΅Π³ΠΎ:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½Π° установку Smart Contract:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ подробности ΠΎ нашСм Channel:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ сСти Π² ΠΎΠ±Π»Π°ΠΊΠ΅ IBM. Π’Π°ΠΊΠΆΠ΅ Π½Π° схСмС присутствуСт Π΄Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, запущСнная Π² ΠΎΠ±Π»Π°ΠΊΠ΅ Amazon Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ сСрвСрС (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎ Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅):

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ GUI для Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Hyperledger Fabric API

Π£ Hyperledger Fabric Π΅ΡΡ‚ΡŒ API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для:

  • Боздания channel;
  • ПодсоСдинСния peer ΠΊ channel;
  • Установка ΠΈ инстанциированиС смарт-ΠΊΠΎΠ½ΠΊΡ€Π°ΠΊΡ‚ΠΎΠ² Π² channel;
  • Π’Ρ‹Π·ΠΎΠ² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ;
  • Запрос ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прилоТСния

Π’ нашСй Π΄Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ запроса ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚.ΠΊ. ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ шаги ΠΌΡ‹ ΡƒΠΆΠ΅ сдСлали, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ IBM. ПишСм GUI, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартный стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ: Express.js + Vue.js + Node.js. О Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ соврСмСнныС Π²Π΅Π±-прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ. Π—Π΄Π΅ΡΡŒ ΠΎΡΡ‚Π°Π²Π»ΡŽ ссылку Π½Π° ΡΠ΅Ρ€ΠΈΡŽ Π»Π΅ΠΊΡ†ΠΈΠΉ, которая ΠΌΠ½Π΅ большС всСго ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ: Full Stack Web App using Vue.js & Express.js. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ графичСским интСрфСйсом Π² стилС Material Design ΠΎΡ‚ Google. REST API ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²:

  • HyperledgerDemo/v1/init β€” ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½;
  • HyperledgerDemo/v1/accounts/list β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх account-ΠΎΠ²;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Bob account;
  • HyperledgerDemo/v1/info?account=Bob β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Bob account;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 β€” пСрСвСсти Π΄Π²Π΅ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ ΠΎΡ‚ Bob ΠΊ Alice;
  • HyperledgerDemo/v1/disconnect β€” Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС с Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ.

ОписаниС API c ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» Π½Π° сайт Β«PostmanΒ» β€” ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для тСстирования HTTP API.

Π”Π΅ΠΌΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ Amazon

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π»ΠΈΠ» Π½Π° Amazon, Ρ‚.ΠΊ. IBM со сих ΠΏΠΎΡ€ Π½Π΅ смог Π°ΠΏΠ³Ρ€Π΅ΠΉΠ΄ΠΈΡ‚ΡŒ мою ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ сСрвСра. Как Π²ΠΈΡˆΠ΅Π½ΠΊΡƒ ΠΏΡ€ΠΈΠ΄Π΅Π»Π°Π» Π΄ΠΎΠΌΠ΅Π½: www.citcoin.info. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΡƒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ сСрвСр Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Ρƒ, Ρ‚.ΠΊ. Ρ†Π΅Π½Ρ‚Ρ‹ Π·Π° Π°Ρ€Π΅Π½Π΄Ρƒ ΠΊΠ°ΠΏΠ°ΡŽΡ‚, Π° ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ citcoin Π½Π° Π±ΠΈΡ€ΠΆΠ΅ Π΅Ρ‰Π΅ Π½Π΅ ΠΊΠΎΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ) Π’ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ Π΄Π΅ΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° понятна Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π”Π΅ΠΌΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚:

  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½;
  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Account (Π½ΠΎ сСйчас Π½ΠΎΠ²Ρ‹ΠΉ Account Π½Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Ρ‚.ΠΊ. Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ достигнуто максимальноС число account-ΠΎΠ², прописанноС Π² смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π΅);
  • ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ список Account-ΠΎΠ²;
  • ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ citcoin ΠΌΠ΅ΠΆΠ΄Ρƒ Alice, Bob ΠΈ Alex;
  • ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ события (Π½ΠΎ сСйчас события Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, поэтому Π² интСрфСйсС для простоты написано, Ρ‡Ρ‚ΠΎ события Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ);
  • Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дСйствия.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π”Π°Π»Π΅Π΅ Π·Π°Π²ΠΎΠ΄ΠΈΠΌ свой account, Π½Π΅ мСлочимся с балансом:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список всСх доступных account-ΠΎΠ²:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ отправитСля ΠΈ получатСля, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡ… балансы. Если ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ счСта:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

Π’ Π»ΠΎΠ³Π΅ слСдим Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

БобствСнно c Π΄Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° этом всС. Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°ΡˆΡƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

И ΠΎΠ±Ρ‰ΠΈΠΉ список Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ:

Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½: Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

На этом ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ PoC ΠΏΠΎ созданию сСти Citcoin. Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Citcoin стал ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ ΡΠ΅Ρ‚ΡŒΡŽ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΌΠΎΠ½Π΅Ρ‚? БовсСм Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ:

  • На этапС создания account-Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ / ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ хранится Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ account-Π°, ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅.
  • Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠΎΠ½Π΅Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ имя, Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡.
  • Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° сСрвСр Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ΅Ρ‚ΡŒ Citcoin с функциями: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ account, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ баланс, ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свой счСт, пСрСвСсти ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ счСта Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоило PoC ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

  • Надо ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ Hyperledger Fabric Π² частности;
  • ΠΠ°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Π»Π°ΠΊΠ°ΠΌΠΈ IBM ΠΈΠ»ΠΈ Amazon;
  • Π’Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ язык программирования JS ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ web framework;
  • Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅, Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π°Π·Π΅, Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с PostgreSQL;
  • И послСднСС ΠΏΠΎ списку, Π½ΠΎ Π½Π΅ ΠΏΠΎ ваТности β€” Π±Π΅Π· знания Linux Π² соврСмСнном ΠΌΠΈΡ€Π΅ Π½ΠΈΠΊΡƒΠ΄Π°!)

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ rocket science, Π½ΠΎ ΠΏΠΎΠΏΠΎΡ‚Π΅Ρ‚ΡŒ придСтся!

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ Π½Π° GitHub

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» Π½Π° GitHub. ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС рСпозитория:
ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ «server» β€” Node.js сСрвСр
ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ «client» β€” Node.js ΠΊΠ»ΠΈΠ΅Π½Ρ‚
ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ «blockchain» (значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ, разумССтся, Π½Π΅Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°):

  • contract β€” исходник смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°
  • wallet β€” ΠΊΠ»ΡŽΡ‡ΠΈ ΡŽΠ·Π΅Ρ€Π° для использования Hyperledger Fabric API.
  • *.cds β€” скомпилированныС вСрсии смартконтрактов
  • *.json Ρ„Π°ΠΉΠ»Ρ‹ β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для использования Hyperledger Fabric API

It’s only the beginning!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com