ืื ืืืืื ืืืื ืืืจื ืืื ืื ืืขื ื ืงืจืืฆื!
ืืื ืคืจืืขืจืืืงืข ืึทืจืืืงืืขื, ืืืจ ืืึธืื ืืขืื ืืื ืื ืืขืงื ืึทืืึทืืืฉืื ืืืืฃ ืืืึธืก ืืืึทืงืืืืึทื ื ืืขื ืขื ืืขืืืื (
ืืืคึผืขืจืืขืืืฉืขืจ ืฉืืึธืฃ - ืึท ืื ืืืืขืจืกืึทื ืืืึธืงืืฉืืื
ืืื ืึทืืืขืืืื, ืึท ืื ืืืืขืจืกืึทื ืืื ืคึฟืึธืจืืึทืฆืืข ืกืืกืืขื ืืื:
- ื ืกืืื ืคืื ืกืขืจืืืขืจืก ืืื ืึท ืืืืืืืืืจื ืืึทืจืฅ ืืืึธืก ืคึผืขืจืคืึธืจืื ืืขืฉืขืคื ืืึธืืืง;
- ืื ืืขืจืคืืืกืื ืคึฟืึทืจ ืื ืืขืจืึทืงืฉืึทื ืืื ืื ืกืืกืืขื;
- ืืืฉืืจืื ืคึฟืึทืจ ืจืขืืืกืืจืึทืฆืืข, ืึธืืขื ืืึทืงืืืฉืึทื ืืื ืืขืจืืืืืขื ืืฉ ืคืื ืืขืืืืกืขืก / ืืขื ืืฉื;
- ืืึทืืึทืืึทืกืข ืกืืึธืจืื ื ืึทืคึผืขืจืืืฉืึทื ืึทื ืืื ืึทืจืงืืืื ืืึทืื:
ืืขืจ ืืึทืึทืืืขืจ ืืืขืจืกืืข ืคืื โโืืืึธืก Hyperledger Fabric ืืื ืงืขื ืขื ืืืื ืืืืขื ืขื ืืื
ืืืคึผืขืจืืขืืืฉืขืจ ืคืึทืืจืืง ืึทืจืืฉืืืขืงืืืจืข
ืื ืืืึทืืจืึทืืข ืืืืืื ืื Hyperledger Fabric ืึทืจืงืึทืืขืงืืฉืขืจ:
ืึธืจืืึทื ืืืึทืืืึธื ืก โ ืืจืืื ืืืืฆื ืข ืื ืืืืื ื ืืืืืก , ืืดื . ืืืึธืงืืฉืืื ืืืืืกืฅ ืจืขืื ืฆื ืืขืจ ืฉืืืฆื ืคืื ืึธืจืืึทื ืึทืืืืฉืึทื ื. ืคืึทืจืฉืืืขื ืข ืึธืจืืึทื ืึทืืืืฉืึทื ื ืงืขื ืขื ืืืื ืืืื ืคืื ืืขืจ ืืขืืืืงืขืจ ืงืึทื ืึทื.
ืงืึทื ืึทื โ ืึท ืืึทืืืฉืืงืึทื ืกืืจืืงืืืจ ืืืึธืก ืืื ืืืฅ ืคึผืืจื ืืื ืืจืืคึผืขืก, ื.ื. ืื ืืืึธืงืืฉืืื ืืื ืกืคึผืขืกืืคืืขื. Hyperledger Fabric ืงืขื ืขื ืกืืืืึทืืืืื ืืึทืกืื ืคึผืจืึธืฆืขืก ืงืืืคื ืืืึทืงืฉืึทืื ืก ืืื ืคืึทืจืฉืืืขื ืข ืืขืฉืขืคื ืืึธืืืง.
ืืืืืืืืขืจืฉืึทืคึฟื ืืึทืืื ืื ืืก ืคึผืจืึทืืืืืืขืจ (MSP) ืืื ืึท CA (ืกืขืจืืืคืืงืึทื ืืืืืึธืจืืืขื) ืคึฟืึทืจ ืึทืจืืืกืืขืื ืืืืขื ืืืืขื ืืื ืึทืกืืื ืื ื ืจืึธืืขืก. ืฆื ืฉืึทืคึฟื ืึท ื ืึธืืข, ืืืจ ืืึทืจืคึฟื ืฆื ืื ืืขืจืึทืงื ืืื ืื MSP.
ืคึผืืืจ ื ืึธืืื - ืืึทืฉืืขืืืงื ืืจืึทื ืืึทืงืฉืึทื ื, ืงืจืึธื ืื ืืืึทืงืืืืืืึทื, ืืืกืคืืจื ืงืืื ืงืึทื ืืจืึทืงืฅ ืืื ืื ืืขืจืึทืงื ืืื ืึทืคึผืืึทืงืืืฉืึทื ื. ืคึผืืจื ืืึธืื ืึทื ืืืืขื ืืืืขื (ืืืืืืึทื ืืึทืืืืึทืื), ืืืึธืก ืืื ืืจืืืก ืืืจื ืื MSP. ื ืื ืขื ืืขื ืื ืืืืงืึธืื ืึธืืขืจ ืขืืืขืจืืื ื ืขืฅ, ืืื ืึทืืข ื ืึธืืื ืืึธืื ืืืืึทื ืจืขืื, ืืื ืืืคึผืขืจืืขืืืฉืขืจ ืคืึทืืจืืง ื ืึธืืื ืฉืคึผืืื ืคืึทืจืฉืืืขื ืข ืจืึธืืขืก:
- ืคึผืืจื ืืคึฟืฉืจ ืขื ืืึธืจืกืื ื ืืึทื ืงืืงื (EP) ืืื ืืืกืคืืจื ืงืืื ืงืึทื ืืจืึทืงืฅ.
- ืงืึทืืืืื ื ืืึทื ืงืืงื (ืงืคึผ) - ืืืืื ืฉืคึผืึธืจื ืืึทืื ืืื ืื ืืืึธืงืืฉืืื ืืื ืืขืจืืืึทื ืืืงื ืื "ืืืขืื ืฉืืึทื".
- ืึทื ืงืขืจ ืคึผืืขืจ (ืึทืคึผ) - ืืืื ืขืืืขืืข ืึธืจืืึทื ืึทืืืืฉืึทื ื ืึธื ืืืื ื ืขืืขื ืืื ืื ืืืึทืงืืืืืืึทื, ืึทื ืงืขืจ ืคึผืืจื ืืขื ืขื ืืขื ืืฆื ืคึฟืึทืจ ืงืึธืืื ืืงืึทืฆืืข ืฆืืืืฉื ืืื. ืืขืืขืจ ืึธืจืืึทื ืืืึทืฆืืข ืืืื ืืึธืื ืืืื ืึธืืขืจ ืืขืจ ืึทื ืงืขืจ ืคึผืืจื. ื ืืฆื ืึทืคึผ, ืืขืืขืจ ืืึทื ืงืืงื ืืื ืึทื ืึธืจืืึทื ืืืึทืฆืืข ืงืขื ืขื ืืึทืงืืืขื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืึทืืข ืคึผืืจื ืืื ืื ืืขืจืข ืึธืจืืึทื ืืืึทืฆืืขืก. ืืขื ืืฆื ืฆื ืกืื ืืงืจืึทื ืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืฆืืืืฉื ืึทืคึผืคึผืก
ืืขื ืืข ืคึผืจืึธืืึธืงืึธื . - ืคืืจืขืจ ืคึผืืืจ - ืืืื ืึทื ืึธืจืืึทื ืืืึทืฆืืข ืืื ืขืืืขืืข ืคึผืืจื, ืืืืื ืืขืจ ืคืืจืขืจ ืคืื ืื ืคึผืืจื ืืืขื ืืึทืงืืืขื ืืืึทืงืก ืคืื ืื ืึธืจืืขืจืื ื ืืื ืกื ืืื ืืขืื ืืื ืฆื ืื ืจืขืฉื ืคืื ืื ืคึผืืจื. ืืขืจ ืคืืจืขืจ ืงืขื ืขื ืืืื ืกืคึผืขืกืืคืืขื ืกืืึทืืืงืื ืึธืืขืจ ืืื ืึทืืืงืึทืืื ืืืืกืืขืงืืืื ืืืจื ืคึผืืจื ืืื ืืขืจ ืึธืจืืึทื ืืืึทืฆืืข. ืื ืืขื ืืข ืคึผืจืึธืืึธืงืึธื ืืื ืืืื ืืขื ืืฆื ืฆื ืกืื ืืงืจืึทื ืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืคืืจืขืจ.
ืึทืกืขืฅ - ืขื ืืืืื ืืืึธืก ืืึธืื ืืืขืจื ืืื ืืขื ืขื ืกืืึธืจื ืืืืฃ ืื ืืืึธืงืืฉืืื. ืืขืจ ืกืคึผืึทืกืืคืืงืื, ืืึธืก ืืื ืฉืืืกื-ืืืขืจื ืืึทืื ืืื JSON ืคึฟืึธืจืืึทื. ืืึธืก ืืื ืื ืืึทืื ืืืึธืก ืืื ืจืขืงืึธืจืืขื ืืื ืื ืืืึธืงืืฉืืื. ืืื ืืึธืื ืึท ืืขืฉืืืืข, ืืืึธืก ืืื ืกืืึธืจื ืืื ืื ืืืึทืงืืืืืืึทื, ืืื ืึท ืงืจืึทื ื ืฉืืึทื, ืืืึธืก ืืื ืกืืึธืจื ืืื ืื "ืืืขืื ืฉืืึทื" ืืึทืืึทืืืืก. ืืึทืืึท ืกืืจืึทืงืืฉืขืจื ืืขื ืขื ืึธื ืืขืคืืื ืึทืจืืืืจืขืจืึทืื ืืืคึผืขื ืืื ื ืืืืฃ ืืขืฉืขืคื ืืึทืกืงืก. ืขืก ืืขื ืขื ืงืืื ืคืืจืืื ืื ืคืขืืืขืจ, ืืขืจ ืืืืื ืจืขืงืึธืืขื ืืึทืฆืืข ืืื ืึทื ืึทืกืขืฅ ืืืื ืืึธืื ืึท ืืึทืืืฆืขืจ ืืื ืืืื ืืืขืจืืคืื.
ืืขืืืฉืขืจ - ืืืฉืืืื ืคืื ืื ืืืึธืงืืฉืืื ืืื ืื ืืืึธืจื ืฉืืึทื ืืึทืืึทืืืืก, ืืืึธืก ืกืืึธืจื ืื ืงืจืึทื ื ืฉืืึทื ืคืื ืึทืกืขืฅ. ืืืขืื ืฉืืึทื ื ืืฆื LevelDB ืึธืืขืจ CouchDB.
ืงืืื ืงืึธื ืืจืึทืงื - ืืื ืงืืื ืงืึทื ืืจืึทืงืฅ, ืื ืืขืฉืขืคื ืืึธืืืง ืคืื ืื ืกืืกืืขื ืืื ืืืคึผืืึทืืขื ืึทื. ืืื Hyperledger Fabric, ืงืืื ืงืึทื ืืจืึทืงืฅ ืืขื ืขื ืืขืจืืคึฟื ืืฉืึทืื ืงืึธืืข. ื ืืฆื ืืฉืึทืื ืงืึธืืข, ืึทืกืขืฅ ืืื ืืจืึทื ืืึทืงืฉืึทื ื ืืืืขืจ ืืื ืืขื ืขื ืกืคึผืขืกืืคืืขื. ืืื ืืขืื ืืฉ ืืขืจืืื ืขื, ืงืืื ืงืึทื ืืจืึทืงืฅ ืืขื ืขื ืืืืืืืืืจื ืืึทืืืฉืืื ืืืคึผืืึทืืขื ืึทื ืืื ืื JS ืึธืืขืจ Go ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทืื.
ืขื ืืึธืจืกืืึทื ื ืคึผืึธืืืืืง - ืคึฟืึทืจ ืืขืืขืจ ืงืืืืงืึธืืข, ืืืจ ืงืขื ืขื ืฉืืขืื ืึท ืคึผืึธืืืืืง ืืืืฃ ืืื ืคืืืข ืงืึทื ืคืขืจืืืืฉืึทื ื ืคึฟืึทืจ ืึท ืืจืึทื ืกืึทืงืืืึธื ืืึธื ืืืื ืืขืจืืืึทืจื ืืื ืคืื ืืืขืืขื. ืืืื ืื ืคึผืึธืืืืืง ืืื ื ืืฉื ืืึทืฉืืืื, ืื ืคืขืืืงืืึทื ืืื: "ืื ืืจืึทื ืกืึทืงืืืึธื ืืืื ืืืื ืืืฉืืขืืืงื ืืืจื ืงืืื ืืืืืืื ืคืื ืงืืื ืึธืจืืึทื ืืืึทืฆืืข ืืื ืืขื ืงืึทื ืึทื." ืืืืฉืคืืื ืคืื ืคึผืึทืืึทืกืื:
- ืื ืืจืึทื ืกืึทืงืืืึธื ืืืื ืืืื ืืืืืืืืงื ืืืจื ืงืืื ืึทืืืื ืืกืืจืึทืืึธืจ ืคืื ืืขืจ ืึธืจืืึทื ืืืึทืฆืืข;
- ืืืื ืืืื ืืืฉืืขืืืงื ืืืจื ืงืืื ืืืืืืื ืึธืืขืจ ืงืืืขื ื ืคืื ืืขืจ ืึธืจืืึทื ืืืึทืฆืืข;
- ืืืื ืืืื ืืืฉืืขืืืงื ืืืจื ืงืืื ืืึทื ืงืืงื ืึธืจืืึทื ืืืึทืฆืืข.
ืึธืจืืขืจืื ื ืืื ืกื - ืคึผืึทืงื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืืืึทืงืก ืืื ืกืขื ืื ืืื ืฆื ืคึผืืจื ืืื ืืขื ืงืึทื ืึทื. ืืขืจืึทื ืืื ืขืงืกืคึผืจืขืก ืคืื ืึทืจืืืงืืขื ืฆื ืึทืืข ืคึผืืจื ืืืืฃ ืื ื ืขืฅ. ืืขื ืืฆื ืคึฟืึทืจ ืื ืืึทืกืืจืืึทื ืกืืกืืขืืขื
CallFlow
- ืื ืึทืคึผืืึทืงืืืฉืึทื ืงืึทืืืื ืืงืืืฅ ืืื Hyperledger Fabric ื ืืฆื Go, Node.js ืึธืืขืจ Java SDK;
- ืืขืจ ืงืืืขื ื ืงืจืืืืฅ ืึท ืืงืก ืืจืึทื ืกืึทืงืืืึธื ืืื ืกืขื ืื ืขืก ืฆื ืขื ืืึธืจืกืื ื ืคึผืืจื;
- ืืขืจ ืืึทื ืงืืงื ืืืขืจืึทืคืืื ืื ืืกืืืข ืคืื โโืืขื ืงืืืขื ื, ืงืึทืืคึผืืืฅ ืื ืืจืึทื ืกืึทืงืืืึธื, ืืื ืกืขื ืื ืื ืขื ืืึธืจืกืืึทื ื ืืกืืืข ืฆืืจืืง ืฆื ืืขื ืงืืืขื ื. ืืฉืึทืื ืงืึธืืข ืืื ืขืงืกืึทืงืืืืึทื ืืืืื ืืืืฃ ืื ืขื ืืึธืจืกืื ื ืืึทื ืงืืงื , ืืื ืืขืจ ืจืขืืืืืึทื ืคืื ืืืึทื ืืืจืืคืืจืื ื ืืื ืืขืฉืืงื ืฆื ืึทืืข ืคึผืืจื. ืืขืจ ืึทืืืขืจืืืึทื ืคืื ืึทืจืืขื ืืื ืืขืจืืคึฟื PBFT (Practical Byzantine Fault Tolerant) ืงืึธื ืกืขื ืกืืก. ืึทื ืืขืจืฉ ืคืื
ืงืืึทืกืืฉ BFT ืืขืจ ืคืึทืงื ืึทื ืืขืจ ืึธื ืืึธื ืืื ืืขืฉืืงื ืืื ืืึทืฉืืขืืืงืื ื ืืื ืืขืจืืืึทืจื ื ืื ืคืื ืึทืืข ืคึผืึทืจืืืกืึทืคึผืึทื ืฅ, ืึธืืขืจ ืืืืื ืคืื ืึท ืืืืขืจ ืืึทื ื; - ื ืึธื ืืขืจ ืงืืืขื ื ืืื ืืืงืืืขื ืื ื ืืืขืจ ืคืื ืจืขืกืคึผืึธื ืกืขืก ืงืึธืจืึทืกืคึผืึทื ืืื ื ืฆื ืื ืขื ืืึธืจืกืืึทื ื ืคึผืึธืืืืืง, ืขืจ ืกืขื ืื ืื ืืจืึทื ืกืึทืงืืืึธื ืฆื ืื ืึธืจืืขืจืื ื ืืื ืกื;
- ืื ืึธืจืืขืจืื ื ืืื ืกื ืืืฉืขื ืขืจืืืฅ ืึท ืืืึธืง ืืื ืกืขื ืื ืขืก ืฆื ืึทืืข ืงืึทืืืืื ื ืคึผืืจื. ืึธืจืืขืจืื ื ืืื ืกื ืื ืฉืืจื ืกืึทืงืืืขื ืืฉืึทื ืจืขืงืึธืจืืื ื ืคืื ืืืึทืงืก, ืืืึธืก ืืืืืึทื ืืืฅ ืื ืึทืืื ืืขืจืืคืขื ืข ืืขืืืฉืขืจ ืืึธืคึผื (
ืืขื ืึธืคึผืืืืืื ื "ืคืึธืจืงืก" ); - ืคึผืืจื ืืึทืงืืืขื ืึท ืืืึธืง, ืงืึธื ืืจืึธืืืจื ืื ืขื ืืึธืจืกืืึทื ื ืคึผืึธืืืืืง ืืืืืขืจ, ืฉืจืืึทืื ืืขื ืืืึธืง ืฆื ืื ืืืึธืงืืฉืืื ืืื ืืืืฉื ืื ืฉืืึทื ืืื ืื "ืืืขืื ืฉืืึทื" ืื.
ืืขื ืข. ืืขื ืจืขืืืืืืื ืืื ืึท ืืืื ืคืื ืจืึธืืขืก ืฆืืืืฉื ืื ื ืึธืืื. ืืึธืก ืื ืฉืืจื ืึทื ืื ืืืึธืงืืฉืืื ืืื ืกืงืึทืืึทืืืข ืืื ืืืืขืจ:
- ืกืืึทืจื ืงืึทื ืืจืึทืงืฅ (ืืฉืืืืงืึธืืข) ืืืจืืคืืจื ืขื ืืึธืจืกืื ื ืคึผืืจื. ืืขื ืื ืฉืืจื ืื ืงืึทื ืคืึทืืขื ืฉืืึทืืึทืื ืคืื ืงืืื ืงืึทื ืืจืึทืงืฅ, ืืืืึทื ืขืก ืืื ื ืืฉื ืกืืึธืจื ืืืจื ืึทืืข ืคึผืึทืจืืืกืึทืคึผืึทื ืฅ, ืึธืืขืจ ืืืืื ืืืจื ืขื ืืึธืจืกืื ื ืคึผืืจื.
- ืึธืจืืขืจืื ื ืืึธื ืึทืจืืขืื ืืขืฉืืืื ื. ืืขื ืืื ืื ืฉืืจื ืืืจื ืื ืคืึทืงื ืึทื ืึธืจืืขืจืื ื ืืืืื ืคืืจืืขื ืึท ืืืึธืง ืืื ืกืขื ืื ืขืก ืฆื ืึท ืคืึทืจืคืขืกืืืงื ืืึทื ื ืคืื ืคืืจืขืจ ืคึผืืจื.
- ืงืึทืืืืื ื ืคึผืืจื ื ืึธืจ ืงืจืึธื ืื ืืืึทืงืืืืืืึทื - ืขืก ืงืขื ืขื ืืืื ืคืืืข ืคืื โโืืื ืืื ืืื ืืึธื ื ืื ืืึทืจืคื ืึท ืคึผืืึทืฅ ืคืื ืืึทืื ืืื ืจืขืืข ืึธืคึผืขืจืึทืฆืืข.
ืืขืจ ืืขืืึทืืืก ืืืขืื ืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืกืึทืืืฉืึทื ื ืคืื Hyperledger Fabric ืืื ืืืึธืก ืขืก ืึทืจืืขื ืึทืืื ืืื ื ืื ืึทื ืืขืจืฉ ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืึธ:
ืึทืืื, Hyperledger Fabric ืืื ืึท ืืืืช ืื ืืืืขืจืกืึทื ืกืืกืืขื ืืื ืืืึธืก ืืืจ ืงืขื ืขื:
- ืื ืกืืจืืืขื ื ืึทืจืืืืจืึทืจืืฉ ืืขืฉืขืคื ืืึธืืืง ืืื ืื ืงืืื ืงืึธื ืืจืึทืงื ืืขืงืึทื ืืืึทื;
- ืจืขืงืึธืจืืืจื ืืื ืืึทืงืืืขื ืืึทืื ืคืื ืื ืืืึทืงืืืืืืึทื ืืึทืืึทืืืืก ืืื JSON ืคึฟืึธืจืืึทื;
- ืฉืขื ืงืขื ืืื ืืึทืฉืืขืืืงื ืึทืคึผื ืึทืงืกืขืก ื ืืฆื ืกืขืจืืืคืืงืึทื ืืืืืึธืจืืืขื.
ืืืฆื ืึทื ืืืจ ืคึฟืึทืจืฉืืืื ืึท ืืืกื ืืืขืื ืื ืกืคึผืืกืืคืืงืก ืคืื Hyperledger Fabric, ืืึธืื ืืื ืื ืืขืกืึธืฃ ืืึธื ืขืคึผืขืก ื ืืฆืืง!
ืืืคึผืืืืื ื ืืืึธืงืืฉืืื
ืืืกืืึธืืื ื ืคืื ืื ืคึผืจืึธืืืขื
ืื ืึทืจืืขื ืืื ืฆื ืื ืกืืจืืืขื ื ืื Citcoin ื ืขืฅ ืืื ืื ืคืืืืขื ืืข ืคืึทื ืืงืฉืึทื ื: ืฉืึทืคึฟื ืึท ืืฉืืื, ืืึทืงืืืขื ืึท ืืืึธื, ืคืึทืจืืจืขืกืขืจื ืืืื ืืฉืืื, ืึทืจืืืขืจืคืืจื ืงืึธืื ืก ืคืื ืืืื ืืฉืืื ืฆื ืื ืืขืจื. ืืื ืก ืฆืืขื ืึท ืืืืคืขืฅ ืืึธืืขื, ืืืึธืก ืืืจ ืืืขืื ืืืืึทืืขืจ ืื ืกืืจืืืขื ื ืืื ืึท ืงืืื ืงืึธื ืืจืึทืงื. ืึทืืื, ืืืจ ืืืขืื ืืึธืื ืึทืงืึทืื ืฅ ืืืึธืก ืืขื ืขื ืืืืขื ืึทืคืืื ืืืจื ื ืขืืขื ืืื ืึทื ืืืึทืืื ืึท ืืืึธื ืืื ืึท ืจืฉืืื ืคืื ืึทืงืึทืื ืฅ. ืึทืงืึทืื ืฅ ืืื ืึท ืจืฉืืื ืคืื ืึทืงืึทืื ืฅ ืืขื ืขื, ืืื ืืขืจืืื ืขื ืคืื ืืืคึผืขืจืืขืืืฉืขืจ ืคืึทืืจืืง ืึทืกืขืฅ. ืึทืงืงืึธืจืืื ืืื, ืืื ืืึธืื ืึท ืืขืฉืืืืข ืืื ืึท ืงืจืึทื ื ืฉืืึทื. ืืื ืืืขื ืคืจืืืืจื ืฆื ืฆืืืืขื ืขื ืืืก ืงืืืจ:
ืื ืฉืคึผืืฅ ืคืืืืขืจื ืืขื ืขื ืื ืงืจืึทื ื ืฉืืึทื, ืืืึธืก ืืื ืกืืึธืจื ืืื ืื "ืืืขืื ืฉืืึทื" ืืึทืืึทืืืืก. ืื ืืขืจ ืืื ืืขื ืขื ืคืืืืขืจื ืืืึธืก ืืืืึทืื ืื ืืขืฉืืืืข ืืืึธืก ืืื ืกืืึธืจื ืืื ืื ืืืึธืงืืฉืืื. ืื ืงืจืึทื ื ืฉืืึทื ืคืื ืึทืกืขืฅ ืืื ืคืืจืขื ืืขืจื ืืืจื ืืจืึทื ืืึทืงืฉืึทื ื. ืื ืึทืกืขื ืขื ืืขืจืื ืืขื ืืืืื ืืื ืึท ืืึทื ืฅ, ืึทืืื ืืื ืึท ืจืขืืืืืึทื ืคืื ืื ืืจืึทื ืกืึทืงืืืึธื, ืึท ื ืืึท ืืืืคืขืฅ ืืื ืืืฉืืคื, ืืื ืื ืงืจืึทื ื ืืืขืจื ืคืื ืื ืึทืกืขื ืืืื ืืื ืืขืฉืืืืข.
ืืื ืงืืึธืื
ืืืจ ืืึทืื ืึท ืืฉืืื ืืื
ืฉืึทืคึฟื ืึท ืืงืขืจืืืง ืืืึธืงืืฉืืื ื ืขืฅ ื ืืฆื ืื ืืืึธืงืืฉืืื ืคึผืืึทืืคืึธืจื ืฉืึทืคึฟื ืืื ืืืกืคืืจื ืึท ืืืึทืงืืืืืืึทื ืงืืื ืงืึธื ืืจืึทืงื ืึทืจืืืกืืึธืื ืืขืฉืขืขื ืืฉื ืคึฟืื ืืืึธืงืืฉืืื ืคึผืืึทืืคืึธืจื
ืื ืคืืืืขื ืืข ืืขื ืขื ืกืงืจืขืขื ืฉืึธืฅ ืคืื ืื IBM Blockchain ืคึผืืึทืืคืึธืจืืข. ืืึธืก ืืื ื ืืฉื ืึทื ืื ืกืืจืืงืืืึธื ืืืืฃ ืืื ืฆื ืฉืึทืคึฟื ืึท ืืืึทืงืืืืืืึทื, ืึธืืขืจ ืคืฉืื ืึท ืืขืืึทื ืกืืจืืืฉืึทื ืคืื ืื ืคืึทืจื ืขื ืคืื ืื ืึทืจืืขื. ืึทืืื, ืคึฟืึทืจ ืืื ืืืขืจ ืฆืืืขืงื, ืืืจ ืืึทืื ืืืื ืึธืจืืึทื ืืืึทืฆืืข:
ืืืจ ืืึทืื ื ืึธืืื ืืื ืขืก: ืึธืจืืขืจ CA, Org1 CA, Orderer Peer:
ืืืจ ืืึทืื ื ืืฆืขืจืก:
ืฉืึทืคึฟื ืึท ืงืึทื ืึทื ืืื ืจืืคื ืขืก ืกืืืงืึธืื:
ืขืกืกืขื ืืืึทืืื ืงืึทื ืึทื ืืื ืึท ืืืึธืงืืฉืืื, ืึทืืื ืขืก ืกืืึทืจืฅ ืืื ืืืึธืง ื ืื (ืืขื ืขืกืืก ืืืึธืง):
ืฉืจืืืื ืึท ืงืืื ืงืึธื ืืจืึทืงื
/*
* 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 ืคืึทื ืืงืฉืึทื ื ืืืฉืขื ืขืจืืื ืืขืฉืขืขื ืืฉื ืืืึธืก ืื ืืขืืึธ ืคึผืจืึธืืจืึทื ืืืขื ืืึทืงืืืขื.
- ืื ืื ืกืืึทื ืืืืื ืคึฟืื ืงืฆืืข ืืื ืืขืจืืคื ืึทืืึธื ืืืขื ืึท ืงืืื ืงืึธื ืืจืึทืงื ืืื ืื ืกืืึทื ืืืืืืื. ืืื ืคืึทืงื, ืขืก ืืื ืืขืจืืคื ื ืื ื ืึธืจ ืึทืืึธื, ืึธืืขืจ ืืขืืขืจ ืืึธื ืื ืงืืื ืงืึธื ืืจืึทืงื ืืืขืจืกืืข ืขื ืืขืจืื ืืขื. ืืขืจืืืขืจ, ืื ืืฉืึทืืืืื ื ืึท ืจืฉืืื ืืื ืึท ืืืืืืง ืืขื ืืข ืืื ืึท ืฉืืขืื ืืขืืึทื ืง, ืืืืึทื ืืืฆื, ืืืขื ืืืจ ืืืืฉื ืื ืืืขืจืกืืข ืคืื โโืื ืงืืื ืงืึธื ืืจืึทืงื, ืืืจ ืืืขืื ืคืึทืจืืืจื ืื ืงืจืึทื ื ืจืฉืืื. ืืืขืจ ืขืก ืืื ืึธืืงืื, ืืื ืืื ื ืึธืจ ืืขืจื ืขื).
- ืึทืงืึทืื ืฅ ืืื ืึท ืจืฉืืื ืคืื ืึทืงืึทืื ืฅ ืืขื ืขื JSON ืืึทืื ืกืืจืึทืงืืฉืขืจื. JS ืืื ืืขื ืืฆื ืคึฟืึทืจ ืืึทืื ืืึทื ืืคึผืืึทืืืืฉืึทื.
- ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืื ืงืจืึทื ื ืืืขืจื ืคืื ืึท ืึทืกืขื ื ืืฆื ืื getState ืคืื ืงืฆืืข ืจืืคื, ืืื ืืขืจืืืึทื ืืืงื ืขืก ืืื putState.
- ืืืขื ืงืจืืืืืื ื ืึท ืึทืงืึทืื ื, ืื AddAccount ืคืื ืงืฆืืข ืืื ืืขืจืืคึฟื, ืืื ืืืึธืก ืึท ืคืึทืจืืืืึทื ืืื ืืขืืืื ืคึฟืึทืจ ืื ืืึทืงืกืืืื ื ืืืขืจ ืคืื ืึทืงืึทืื ืฅ ืืื ืื ืืืึธืงืืฉืืื (ืืึทืงืกืึทืงืึธืื ืฅ = 5). ืืื ืืึธ ืืื ืึท ืืืฉืึทืื (ืืึธืื ืืืจ ืืืืขืจืงื?), ืืืึธืก ืคืืจื ืฆื ืึท ืกืึธืฃ ืคืึทืจืืจืขืกืขืจื ืืื ืื ื ืืืขืจ ืคืื ืึทืงืึทืื ืฅ. ืืืขืืืข ืืจืืืื ืืื ืืขื ืืืืกืืืืื)
ืืขืจื ืึธื, ืืืจ ืืึธืื ืื ืงืืื ืงืึธื ืืจืึทืงื ืืื ืื ืงืึทื ืึทื ืืื ืื ืกืืึทื ืืืื ืขืก:
ืืื ืก ืงืืง ืืื ืื ืืจืึทื ืกืึทืงืืืึธื ืคึฟืึทืจ ืื ืกืืึธืืื ื ืกืืึทืจื ืงืึธื ืืจืึทืงื:
ืืึธืืืจ ืืขื ืื ืืขืืึทืืืก ืืืขืื ืืื ืืืขืจ ืงืึทื ืึทื:
ืืื ืึท ืจืขืืืืืึทื, ืืืจ ืืึทืงืืืขื ืื ืคืืืืขื ืืข ืืืึทืืจืึทืืข ืคืื โโืึท ืืืึธืงืืฉืืื ื ืขืฅ ืืื ืื ืืื ืืืึธืืงื. ืื ืืืึทืืจืึทืืข ืืืื ืืืืืื ืึท ืืขืืึธ ืคึผืจืึธืืจืึทื ืคืืืกื ืืืง ืืื ืืขืจ ืึทืืึทืืึธื ืืืึธืืงื ืืืืฃ ืึท ืืืืจืืืึทื ืกืขืจืืืขืจ (ืืขืจ ืืืขืื ืืื ืืื ืืขืจ ืืืืึทืืขืจ ืึธืคึผืืืืืื ื):
ืฉืึทืคึฟื ืึท GUI ืคึฟืึทืจ Hyperledger Fabric API ืจืืคื
Hyperledger Fabric ืืื ืึทื ืึทืคึผื ืืืึธืก ืงืขื ืขื ืืืื ืืขืืืืื ื ืฆื:
- ืฉืึทืคึฟื ืงืึทื ืึทื;
- ืงืึทื ืขืงืฉืึทื ื ืืึทื ืงืืงื ืืื ืฆื ืงืึทื ืึทื;
- ืืึทื ืืึธื ืืืจืื ื ืืื ืื ืกืืึทื ืืืืฉืึทื ืคืื ืงืืื ืงืึทื ืืจืึทืงืฅ ืืื ืืขื ืงืึทื ืึทื;
- ืจืืคื ืืจืึทื ืืึทืงืฉืึทื ื;
- ืืขืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืืฃ ืื ืืืึธืงืืฉืืื.
ืึทืคึผืคึผืืืงืึทืืืึธื ืึทื ืืืืืงืืื ื
ืืื ืืื ืืืขืจ ืืขืืึธ ืคึผืจืึธืืจืึทื ืืืจ ืืืขืื ื ืืฆื ืื API ืืืืื ืฆื ืจืืคื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืืขืื ืืื ืคึฟืึธืจืืึทืฆืืข, ืืืืึทื ืืืจ ืืึธืื ืฉืืื ืืขืขื ืืืงื ืื ืจืืขื ืกืืขืคึผืก ื ืืฆื ืื ืืื ืืืึทืงืืืื ืคึผืืึทืืคืึธืจืืข. ืืืจ ืฉืจืืึทืื ืึท GUI ื ืืฆื ืึท ื ืึธืจืืึทื ืืขืื ืึธืืึธืืืข ืึธื ืืืืื: Express.js + Vue.js + Node.js. ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืึท ืืึทืืื ืืขืจ ืึทืจืืืงื ืืื ืฆื ืึธื ืืืืื ืงืจืืืืืื ื ืืึธืืขืจื ืืืขื ืึทืคึผืืึทืงืืืฉืึทื ื. ืืึธ ืืื ืืืขื ืืึธืื ืึท ืืื ืง ืฆื ืื ืกืขืจืืข ืคืื โโืจืขืคึฟืขืจืึทืื ืืืึธืก ืืื ืืืืงื ืืขืจืกื:
- HyperledgerDemo/v1/init - ืื ืืฉืึทืืืื ืื ืืืึธืงืืฉืืื;
- HyperledgerDemo/v1/accounts/list - ืืึทืงืืืขื ืึท ืจืฉืืื ืคืื ืึทืืข ืึทืงืึทืื ืฅ;
- HyperledgerDemo/v1/account?name=Bob&balance=100 โ ืฉืึทืคึฟื ืืึธื ืืงืืื ื;
- HyperledgerDemo/v1/info?account=Bob โ ืืึทืงืืืขื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืึธื ืืฉืืื;
- HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 โ ืึทืจืืืขืจืคืืจื ืฆืืืื ืงืึธืื ืก ืคืื ืืึธื ืฆื ืึทืืืก;
- HyperledgerDemo/v1/disconnect - ื ืึธืขื ื ืื ืงืฉืจ ืฆื ืื ืืืึธืงืืฉืืื.
ืืึทืฉืจืืึทืืื ื ืคืื ืื API ืืื ืืืืฉืคืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื
ืืขืืึธ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึทืืึทืืึธื ืืืึธืืงื
ืืื ืืคึผืืึธืึทืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืึทืืึทืืึธื ืืืืึทื ... ืืื ืืื ื ืึธื ื ืืฉื ืืืืืืช ืฆื ืึทืคึผืืจืืื ืืืื ืืฉืืื ืืื ืืึธืื ืืืจ ืฆื ืฉืึทืคึฟื ืืืืจืืืึทื ืกืขืจืืืขืจืก. ืืื ืฆื ืืืืื ืึท ืงืึทืจืฉ ืฆื ืื ืคืขืื:
- ืื ืืฉืึทืืืืข ืื ืืืึธืงืืฉืืื;
- ืฉืึทืคึฟื ืึท ืึทืงืึทืื ื (ืึธืืขืจ ืืืฆื ืืืจ ืงืขื ืขื ื ืืฉื ืฉืึทืคึฟื ืึท ื ืืึทืข ืึทืงืึทืื ื, ืืืืึทื ืื ืืึทืงืกืืืื ื ืืืขืจ ืคืื ืึทืงืึทืื ืฅ ืกืคึผืขืกืืคืืขื ืืื ืื ืงืืื ืงืึธื ืืจืึทืงื ืืื ืจืืืฉื ืืื ืื ืืืึธืงืืฉืืื);
- ืืึทืงืืืขื ืึท ืจืฉืืื ืคืื ืึทืงืึทืื ืฅ;
- ืึทืจืืืขืจืคืืจื ืกืืืงืึธืื ืงืึธืื ืก ืฆืืืืฉื ืึทืืืก, ืืึธื ืืื ืึทืืขืงืก;
- ืืึทืงืืืขื ืืขืฉืขืขื ืืฉื (ืึธืืขืจ ืืืฆื ืขืก ืืื ืงืืื ืืืขื ืฆื ืืืืึทืื ืืขืฉืขืขื ืืฉื, ืึทืืื ืคึฟืึทืจ ืคึผืึทืฉืืขืก, ืื ืฆืืืื ื ืืืื ืึทื ืืขืฉืขืขื ืืฉื ืืขื ืขื ื ืืฉื ืืขืฉืืืฆื);
- ืงืืึธืฅ ืึทืงืฉืึทื ื.
ืขืจืฉืืขืจ ืืืจ ืื ืืฉืึทืืืื ืื ืืืึธืงืืฉืืื:
ืืืืึทืืขืจ, ืืืจ ืืึทืื ืืื ืืืขืจ ืืฉืืื, ืืึธื ื ืื ืืืืกื ืฆืืื ืืื ืื ืืืึธื:
ืืืจ ืืึทืงืืืขื ืึท ืจืฉืืื ืคืื ืึทืืข ืื ืืืฆื ืึทืงืึทืื ืฅ:
ืืืจ ืืืืกืงืืืึทืื ืื ืึธืคึผืฉืืงืขืจ ืืื ืืึทืงืืืขืจ, ืืื ืืึทืงืืืขื ืืืืขืจ ืืึทืืึทื ืกืขืก. ืืืื ืืขืจ ืึธืคึผืฉืืงืขืจ ืืื ืืึทืงืืืขืจ ืืขื ืขื ืื ืืขืืืข, ืืืื ืืฉืืื ืืืขื ืืืื ืจืืคึผืืขื ืืฉื:
ืืื ืื ืงืืึธืฅ ืืืจ ืืึธื ืืืึธืจ ืื ืืืจืืคืืจืื ื ืคืื ืืจืึทื ืืึทืงืฉืึทื ื:
ืึทืงืืืึทืืื, ืืึธืก ืืื ืึทืืข ืืื ืื ืืขืืึธ ืคึผืจืึธืืจืึทื. ืื ืืขืจ ืืืจ ืงืขื ืขื ืืขื ืืื ืืืขืจ ืืจืึทื ืกืึทืงืืืึธื ืืื ืื ืืืึธืงืืฉืืื:
ืืื ืื ืึทืืืขืืืื ืข ืจืฉืืื ืคืื ืืจืึทื ืืึทืงืฉืึทื ื:
ืืื ืืขื, ืืืจ ืืึธืื ืืฆืืื ืืขืขื ืืืงื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื PoC ืฆื ืฉืึทืคึฟื ืื Citcoin ื ืขืฅ. ืืืึธืก ืึทื ืืขืจืฉ ืืึทืจืฃ ืืืื ืืขืืื ืคึฟืึทืจ Citcoin ืฆื ืืืขืจื ืึท ืคืื-ืคืืขืืืฉื ื ืขืฅ ืคึฟืึทืจ ืืจืึทื ืกืคืขืจืื ื ืงืึธืื ืก? ืืืืขืจ ืงืืืื:
- ืืื ืืขืจ ืืื ืข ืคืื โโืื ืฉืึทืคืื ื ืคืื ืืฉืืื, ืื ืกืืจืืืขื ื ืื ืืืจ ืคืื ืึท ืคึผืจืืืืึทื / ืขืคื ืืืขื ืฉืืืกื. ืืขืจ ืคึผืจืืืืึทื ืฉืืืกื ืืืื ืืืื ืกืืึธืจื ืืื ืื ืืฉืืื ืืึทื ืืฆืขืจ, ืืขืจ ืฆืืืืจ ืฉืืืกื ืืืื ืืืื ืกืืึธืจื ืืื ืื ืืืึธืงืืฉืืื.
- ืืึทืื ืึท ืืึทืืืืืข ืึทืจืืืขืจืคืืจื ืืื ืืืึธืก ืึท ืฆืืืืจ ืฉืืืกื, ืืื ืืื ืึท ื ืึธืืขื, ืืื ืืขื ืืฆื ืฆื ืืืขื ืืืคืืฆืืจื ืื ืืึทื ืืฆืขืจ.
- ืขื ืงืจืืคึผื ืืจืึทื ืืึทืงืฉืึทื ื ืคืื ืืขืจ ืืึทื ืืฆืขืจ ืฆื ืื ืกืขืจืืืขืจ ืืื ืืืื ืคึผืจืืืืึทื ืฉืืืกื.
ืกืึธืฃ
ืืืจ ืืึธืื ืืืคึผืืึทืืขื ืึทื ืื Citcoin ื ืขืฅ ืืื ืื ืคืืืืขื ืืข ืคืึทื ืืงืฉืึทื ื: ืืืืื ืึท ืืฉืืื, ืืึทืงืืืขื ืึท ืืืึธื, ืคืึทืจืืจืขืกืขืจื ืืืื ืืฉืืื, ืึทืจืืืขืจืคืืจื ืงืึธืื ืก ืคืื ืืืื ืืฉืืื ืฆื ืื ืืขืจื. ืึทืืื, ืืืึธืก ืืื ืขืก ืงืึธืกืื ืืื ืื ืฆื ืืืืขื ืึท PoC?
- ืืืจ ืืึทืจืคึฟื ืฆื ืืขืจื ืขื ืืืึธืงืืฉืืื ืืื ืึทืืืขืืืื ืืื ืืืคึผืขืจืืขืืืฉืขืจ ืฉืืึธืฃ ืืื ืืึทืืื ืืขืจ;
- ืืขืจื ืฆื ื ืืฆื ืืื ืึธืืขืจ ืึทืืึทืืึธื ืืืืืงื ืก;
- ืืขืจื ืื JS ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืื ืขืืืขืืข ืืืขื ืคืจืืืืืืขืจืง;
- ืืืื ืขืืืขืืข ืืึทืื ืืึทืจืฃ ืืืื ืกืืึธืจื ื ืืฉื ืืื ืื ืืืึทืงืืืืืืึทื, ืึธืืขืจ ืืื ืึท ืืึทืืื ืืขืจ ืืึทืืึทืืืืก, ืืขืจื ืขื ืฆื ืืืกืฉืืืืขื, ืืืฉื, ืืื PostgreSQL;
- ืืื ืืขืฆืืข ืึธืืขืจ ื ืื ืงืืขื ืกืืขืจ - ืืืจ ืงืขื ืขื ื ืืฉื ืืขืื ืืื ืื ืืึธืืขืจื ืืืขืื ืึธื ืืืืกื ืคืื ืืื ืืงืก!)
ืคืื ืงืืจืก, ืืึธืก ืืื ื ืืฉื ืจืึทืงืขื ืืืืกื ืฉืึทืคึฟื, ืึธืืขืจ ืืืจ ืืืขื ืืึธืื ืฆื ืึทืจืืขืื ืฉืืืขืจ!
ืืงืืจืื ืืืืฃ GitHub
ืืงืืจืื ืฉืืขืื ืืืืฃ
ืงืึทืืึทืืึธื ยซืฉืืืยป โ Node.js ืกืขืจืืืขืจ
ืงืึทืืึทืืึธื ยซืงืืืขื ืยป โ Node.js ืงืืืขื ื
ืงืึทืืึทืืึธื ยซืืืึธืงืงืืฉืึทืื"(ืคึผืึทืจืึทืืขืืขืจ ืืืึทืืืขืก ืืื ืฉืืืกืืขื, ืคืื ืงืืจืก, ืืขื ืขื ื ืื-ืืจืืขืื ืืื ืืขื ืขื ืืขืืขืื ืืืืื ืืื ืึท ืืืึทืฉืคึผืื):
- ืงืึธื ืืจืึทืงื - ืงืืื ืงืึธื ืืจืึทืงื ืืงืืจ ืงืึธื
- ืืืึทืื - ืืึทื ืืฆืขืจ ืฉืืืกืืขื ืคึฟืึทืจ ื ืืฆื ืื Hyperledger Fabric API.
- *.ืงืืก - ืฆืื ืืืคืืขืฉืืขืื ืืืขืจืกืืขืก ืคืื ืงืืื ืงืึทื ืืจืึทืงืฅ
- *.ืืืฉืกืึธื ืืขืงืขืก - ืืืืฉืคืืื ืคืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืขืงืขืก ืคึฟืึทืจ ื ืืฆื ืื Hyperledger Fabric API
ืขืก ืก ื ืึธืจ ืืขืจ ืึธื ืืืื!
ืืงืืจ: www.habr.com