Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื”ืขื™ื ื™ื™ื ืฉืœืš ืžืคื—ื“ื•ืช ื•ื”ื™ื“ื™ื™ื ืฉืœืš ืžื’ืจื“ื•ืช!

ื‘ืžืืžืจื™ื ืงื•ื“ืžื™ื ืขืกืงื ื• ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืฉืขืœื™ื”ืŸ ื‘ื ื•ื™ื™ื ื‘ืœื•ืงืฆ'ื™ื™ืŸ (ืžื” ืขืœื™ื ื• ืœื‘ื ื•ืช ื‘ืœื•ืงืฆ'ื™ื™ืŸ?) ื•ืžืงืจื™ื ืฉื ื™ืชืŸ ืœื™ื™ืฉื ื‘ืขื–ืจืชื (ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื‘ื ื•ืช ืชื™ืง?). ื–ื” ื”ื–ืžืŸ ืœืขื‘ื•ื“ ืขื ื”ื™ื“ื™ื™ื! ื›ื“ื™ ืœื™ื™ืฉื ืคื™ื™ืœื•ื˜ื™ื ื•-PoC (Proof of Concept), ืื ื™ ืžืขื“ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ืขื ื ื™ื, ื›ื™... ื ื™ืชืŸ ืœื’ืฉืช ืืœื™ื”ื ืžื›ืœ ืžืงื•ื ื‘ืขื•ืœื, ื•ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ืื™ืŸ ืฆื•ืจืš ืœื‘ื–ื‘ื– ื–ืžืŸ ืขืœ ื”ืชืงื ื” ืžื™ื™ื’ืขืช ืฉืœ ื”ืกื‘ื™ื‘ื”, ืžื›ื™ื•ื•ืŸ ื™ืฉื ืŸ ืชืฆื•ืจื•ืช ืžื•ื’ื“ืจื•ืช ืžืจืืฉ. ืื– ื‘ื•ืื• ื ืขืฉื” ืžืฉื”ื• ืคืฉื•ื˜, ืœืžืฉืœ, ืจืฉืช ืœื”ืขื‘ืจืช ืžื˜ื‘ืขื•ืช ื‘ื™ืŸ ืžืฉืชืชืคื™ื ื•ื‘ื•ืื• ื ืงืจื ืœื–ื” ื‘ืฆื ื™ืขื•ืช ื‘ื™ื˜ืงื•ื™ืŸ. ืœืฉื ื›ืš ื ืฉืชืžืฉ ื‘ืขื ืŸ IBM ื•ื‘-Blockchain ื”ืื•ื ื™ื‘ืจืกืœื™ Hyperledger Fabric. ืจืืฉื™ืช, ื‘ื•ืื• ื ื‘ื™ืŸ ืžื“ื•ืข Hyperledger Fabric ื ืงืจื ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืื•ื ื™ื‘ืจืกืœื™?

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

Hyperledger Fabric - ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืื•ื ื™ื‘ืจืกืœื™

ื‘ืื•ืคืŸ ื›ืœืœื™, ืžืขืจื›ืช ืžื™ื“ืข ืื•ื ื™ื‘ืจืกืœื™ืช ื”ื™ื:

  • ืงื‘ื•ืฆื” ืฉืœ ืฉืจืชื™ื ื•ืœื™ื‘ื” ืชื•ื›ื ื” ื”ืžื‘ืฆืขืช ืœื•ื’ื™ืงื” ืขืกืงื™ืช;
  • ืžืžืฉืงื™ื ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืžืขืจื›ืช;
  • ื›ืœื™ื ืœืจื™ืฉื•ื, ืื™ืžื•ืช ื•ื”ืจืฉืื” ืฉืœ ืžื›ืฉื™ืจื™ื/ืื ืฉื™ื;
  • ืžืกื“ ื ืชื•ื ื™ื ื”ืžืื—ืกืŸ ื ืชื•ื ื™ื ืชืคืขื•ืœื™ื™ื ื•ืืจื›ื™ื•ื ื™ื™ื:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื ื™ืชืŸ ืœืงืจื•ื ืืช ื”ื’ืจืกื” ื”ืจืฉืžื™ืช ืฉืœ ืžื” ื–ื” Hyperledger Fabric ื‘ ืžืงื•ื•ืŸ, ื•ื‘ืงื™ืฆื•ืจ, Hyperledger Fabric ื”ื™ื ืคืœื˜ืคื•ืจืžืช ืงื•ื“ ืคืชื•ื— ื”ืžืืคืฉืจืช ืœื‘ื ื•ืช ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืคืจื˜ื™ื™ื ื•ืœื‘ืฆืข ื—ื•ื–ื™ื ื—ื›ืžื™ื ืฉืจื™ืจื•ืชื™ื™ื ืฉื ื›ืชื‘ื• ื‘ืฉืคื•ืช ื”ืชื›ื ื•ืช JS ื•-Go. ื‘ื•ืื• ื ืกืชื›ืœ ื‘ืคื™ืจื•ื˜ ืขืœ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ Hyperledger Fabric ื•ื ื•ื•ื“ื ืฉื–ื• ืžืขืจื›ืช ืื•ื ื™ื‘ืจืกืœื™ืช ืฉื™ืฉ ืœื” ืจืง ืคืจื˜ื™ื ืกืคืฆื™ืคื™ื™ื ืœืื—ืกื•ืŸ ื•ื”ืงืœื˜ืช ื ืชื•ื ื™ื. ื”ืกืคืฆื™ืคื™ื•ืช ื”ื™ื ืฉื”ื ืชื•ื ื™ื, ื›ืžื• ื‘ื›ืœ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ืžืื•ื—ืกื ื™ื ื‘ื‘ืœื•ืงื™ื ืฉืžืžื•ืงืžื™ื ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืจืง ืื ื”ืžืฉืชืชืคื™ื ืžื’ื™ืขื™ื ืœื”ืกื›ืžื” ื•ืœืื—ืจ ื”ืงืœื˜ืช ื”ื ืชื•ื ื™ื ืœื ื ื™ืชืŸ ืœืชืงืŸ ืื• ืœืžื—ื•ืง ื‘ืฉืงื˜.

Hyperledger Fabric Architecture

ื”ืชืจืฉื™ื ืžืฆื™ื’ ืืช ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”-Hyperledger Fabric:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืืจื’ื•ื ื™ื - ืืจื’ื•ื ื™ื ืžื›ื™ืœื™ื ืขืžื™ืชื™ื, ื›ืœื•ืžืจ. blockchain ืงื™ื™ื ืขืงื‘ ืชืžื™ื›ื” ืฉืœ ืืจื’ื•ื ื™ื. ืืจื’ื•ื ื™ื ืฉื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื—ืœืง ืžืื•ืชื• ืขืจื•ืฅ.

ืขืจื•ืฅ - ืžื‘ื ื” ืœื•ื’ื™ ื”ืžืื—ื“ ืขืžื™ืชื™ื ืœืงื‘ื•ืฆื•ืช, ื›ืœื•ืžืจ. ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืžืฆื•ื™ืŸ. Hyperledger Fabric ื™ื›ื•ืœ ืœืขื‘ื“ ื‘ื• ื–ืžื ื™ืช ืžืกืคืจ ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืขื ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืฉื•ื ื”.

ืกืคืง ืฉื™ืจื•ืชื™ ื—ื‘ืจื•ืช (MSP) ื”ื•ื CA (ืจืฉื•ืช ืื™ืฉื•ืจื™ื) ืœื”ื ืคืงืช ื–ื”ื•ืช ื•ื”ืงืฆืืช ืชืคืงื™ื“ื™ื. ื›ื“ื™ ืœื™ืฆื•ืจ ืฆื•ืžืช, ืขืœื™ืš ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”-MSP.

ืฆืžืชื™ื ืขืžื™ืชื™ื - ืื™ืžื•ืช ืขืกืงืื•ืช, ืื—ืกืŸ ืืช ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ื‘ืฆืข ื—ื•ื–ื™ื ื—ื›ืžื™ื ื•ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื™ื™ืฉื•ืžื™ื. ืœืขืžื™ืชื™ื ื™ืฉ ื–ื”ื•ืช (ืชืขื•ื“ื” ื“ื™ื’ื™ื˜ืœื™ืช), ื”ืžื•ื ืคืงืช ืขืœ ื™ื“ื™ ื”-MSP. ื‘ื ื™ื’ื•ื“ ืœืจืฉืช ื”ื‘ื™ื˜ืงื•ื™ืŸ ืื• ื”ืืชืจื™ื•ื, ืฉื‘ื” ืœื›ืœ ื”ืฆืžืชื™ื ื™ืฉ ื–ื›ื•ื™ื•ืช ืฉื•ื•ืช, ื‘-Hyperledger Fabric ืฆืžืชื™ื ืžืžืœืื™ื ืชืคืงื™ื“ื™ื ืฉื•ื ื™ื:

  • ืขืžื™ืช ืื•ืœื™ ืžื—ื–ืง ืขืžื™ืช (EP) ื•ืœื‘ืฆืข ื—ื•ื–ื™ื ื—ื›ืžื™ื.
  • ืขืžื™ืช ืžืชื—ื™ื™ื‘ (CP) - ืฉืžื•ืจ ื ืชื•ื ื™ื ืจืง ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื•ืขื“ื›ืŸ ืืช "ืžืฆื‘ ื”ืขื•ืœื".
  • ืขื•ื’ืŸ ืคืืจ (AP) - ืื ืžืกืคืจ ืืจื’ื•ื ื™ื ืžืฉืชืชืคื™ื ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ืื–ื™ ืžืฉืชืžืฉื™ื ื‘-Anchor ืขืžื™ืชื™ื ืœืชืงืฉื•ืจืช ื‘ื™ื ื™ื”ื. ืœื›ืœ ืืจื’ื•ืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืขืžื™ืช ืขื•ื’ืŸ ืื—ื“ ืื• ื™ื•ืชืจ. ื‘ืืžืฆืขื•ืช AP, ื›ืœ ืขืžื™ืช ื‘ืืจื’ื•ืŸ ื™ื›ื•ืœ ืœืงื‘ืœ ืžื™ื“ืข ืขืœ ื›ืœ ืขืžื™ืชื™ื ื‘ืืจื’ื•ื ื™ื ืื—ืจื™ื. ืžืฉืžืฉ ืœืกื ื›ืจื•ืŸ ืžื™ื“ืข ื‘ื™ืŸ ื ืงื•ื“ื•ืช ื’ื™ืฉื” ืคืจื•ื˜ื•ืงื•ืœ ืจื›ื™ืœื•ืช.
  • ืžื ื”ื™ื’ ืคืืจ - ืื ืœืืจื’ื•ืŸ ื™ืฉ ื›ืžื” ืขืžื™ืชื™ื, ืื– ืจืง ืžื ื”ื™ื’ ื”ืขืžื™ืช ื™ืงื‘ืœ ื‘ืœื•ืงื™ื ืžืฉื™ืจื•ืช ื”ื”ื–ืžื ื” ื•ื™ืžืกื•ืจ ืื•ืชื ืœืฉืืจ ื”ืขืžื™ืชื™ื. ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืืช ื”ืžื ื”ื™ื’ ื‘ืื•ืคืŸ ืกื˜ื˜ื™ ืื• ืœื‘ื—ื•ืจ ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ืขืœ ื™ื“ื™ ืขืžื™ืชื™ื ื‘ืืจื’ื•ืŸ. ืคืจื•ื˜ื•ืงื•ืœ ื”ืจื›ื™ืœื•ืช ืžืฉืžืฉ ื’ื ืœืกื ื›ืจื•ืŸ ืžื™ื“ืข ืขืœ ืžื ื”ื™ื’ื™ื.

ื ื›ืกื™ื - ื™ืฉื•ื™ื•ืช ืฉื™ืฉ ืœื”ืŸ ืขืจืš ื•ืžืื•ื—ืกื ื•ืช ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ืœื™ืชืจ ื“ื™ื•ืง, ืžื“ื•ื‘ืจ ื‘ื ืชื•ื ื™ ืžืคืชื—-ืขืจืš ื‘ืคื•ืจืžื˜ JSON. ื”ื ืชื•ื ื™ื ื”ืืœื” ืžืชื•ืขื“ื™ื ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ื™ืฉ ืœื”ื ื”ื™ืกื˜ื•ืจื™ื”, ืืฉืจ ืžืื•ื—ืกื ืช ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ื•ืžืฆื‘ ื ื•ื›ื—ื™, ืืฉืจ ืžืื•ื—ืกืŸ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื "ืžืฆื‘ ืขื•ืœืžื™". ืžื‘ื ื™ ื ืชื•ื ื™ื ืžืชืžืœืื™ื ื‘ืื•ืคืŸ ืฉืจื™ืจื•ืชื™ ื‘ื”ืชืื ืœืžืฉื™ืžื•ืช ื”ืขืกืงื™ื•ืช. ืื™ืŸ ืฉื“ื•ืช ื—ื•ื‘ื”, ื”ื”ืžืœืฆื” ื”ื™ื—ื™ื“ื” ื”ื™ื ืฉื ื›ืกื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื‘ืขืœื™ ืขืจืš ื•ื‘ืขืœื™ ืขืจืš.

ืคื ืงืก - ืžื•ืจื›ื‘ ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืฉืœ Blockchain ื•ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ Word, ื”ืžืื—ืกืŸ ืืช ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ื ื›ืกื™ื. ื”ืžื“ื™ื ื” ื”ืขื•ืœืžื™ืช ืžืฉืชืžืฉืช ื‘-LevelDB ืื• ื‘-CouchDB.

ื—ื•ื–ื” ื—ื›ื - ื‘ืืžืฆืขื•ืช ื—ื•ื–ื™ื ื—ื›ืžื™ื, ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืฉืœ ื”ืžืขืจื›ืช ืžื™ื•ืฉื. ื‘-Hyperledger Fabric, ื—ื•ื–ื™ื ื—ื›ืžื™ื ื ืงืจืื™ื chaincode. ื‘ืืžืฆืขื•ืช ืงื•ื“ ืฉืจืฉืจืช, ืžืฆื•ื™ื ื™ื ื ื›ืกื™ื ื•ืขืกืงืื•ืช ืžืขืœื™ื”ื. ื‘ืžื•ื ื—ื™ื ื˜ื›ื ื™ื™ื, ื—ื•ื–ื™ื ื—ื›ืžื™ื ื”ื ืžื•ื“ื•ืœื™ ืชื•ื›ื ื” ื”ืžื™ื•ืฉืžื™ื ื‘ืฉืคื•ืช ื”ืชื›ื ื•ืช JS ืื• Go.

ืžื“ื™ื ื™ื•ืช ืื™ืฉื•ืจื™ื - ืขื‘ื•ืจ ื›ืœ ืงื•ื“ ืฉืจืฉืจืช, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืžื“ื™ื ื™ื•ืช ืœื’ื‘ื™ ื›ืžื” ืื™ืฉื•ืจื™ื ืœืขืกืงื” ื™ืฉ ืœืฆืคื•ืช ื•ืžืžื™. ืื ื”ืžื“ื™ื ื™ื•ืช ืœื ืžื•ื’ื“ืจืช, ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื: "ื”ืขืกืงื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืžืื•ืฉืจืช ืขืœ ื™ื“ื™ ื›ืœ ื—ื‘ืจ ื‘ืืจื’ื•ืŸ ื›ืœืฉื”ื• ื‘ืขืจื•ืฅ." ื“ื•ื’ืžืื•ืช ืœืคื•ืœื™ืกื•ืช:

  • ื”ืขืกืงื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืžืื•ืฉืจืช ืขืœ ื™ื“ื™ ื›ืœ ืžื ื”ืœ ื‘ืืจื’ื•ืŸ;
  • ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืื•ืฉืจ ืขืœ ื™ื“ื™ ื›ืœ ื—ื‘ืจ ืื• ืœืงื•ื— ื‘ืืจื’ื•ืŸ;
  • ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืื•ืฉืจ ืขืœ ื™ื“ื™ ื›ืœ ืืจื’ื•ืŸ ืขืžื™ืชื™ื.

ืฉื™ืจื•ืช ื”ื–ืžื ื” - ืื•ืจื– ืขืกืงืื•ืช ืœื‘ืœื•ืงื™ื ื•ืฉื•ืœื— ืื•ืชืŸ ืœืขืžื™ืชื™ื ื‘ืขืจื•ืฅ. ืžื‘ื˜ื™ื— ืžืฉืœื•ื— ื”ื•ื“ืขื•ืช ืœื›ืœ ื”ืขืžื™ืชื™ื ื‘ืจืฉืช. ืžืฉืžืฉ ืœืžืขืจื›ื•ืช ืชืขืฉื™ื™ืชื™ื•ืช ืžืชื•ื•ืš ื”ื•ื“ืขื•ืช ืงืคืงื, ืœืคื™ืชื•ื— ื•ื‘ื“ื™ืงื” ืกื•ืœื•.

CallFlow

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

  • ื”ื™ื™ืฉื•ื ืžืชืงืฉืจ ืขื Hyperledger Fabric ื‘ืืžืฆืขื•ืช Go, Node.js ืื• Java SDK;
  • ื”ืœืงื•ื— ื™ื•ืฆืจ ืขืกืงืช TX ื•ืฉื•ืœื— ืื•ืชื” ืœืขืžื™ืชื™ื ืชื•ืžื›ื™ื;
  • ืขืžื™ืช ืžืืžืช ืืช ื—ืชื™ืžืช ื”ืœืงื•ื—, ืžืฉืœื™ื ืืช ื”ืขืกืงื” ื•ืฉื•ืœื— ืืช ื—ืชื™ืžืช ื”ืื™ืฉื•ืจ ื‘ื—ื–ืจื” ืœืœืงื•ื—. Chaincode ืžื‘ื•ืฆืข ืจืง ืขืœ ืขืžื™ืช ื”ืžืืฉืจ, ื•ื”ืชื•ืฆืื” ืฉืœ ื‘ื™ืฆื•ืขื• ื ืฉืœื—ืช ืœื›ืœ ื”ืขืžื™ืชื™ื. ืืœื’ื•ืจื™ืชื ืขื‘ื•ื“ื” ื–ื” ื ืงืจื ืงื•ื ืฆื ื–ื•ืก PBFT (Practical Byzantine Fault Tolerant). ืฉื•ื ื” ืž BFT ืงืœืืกื™ ื”ืขื•ื‘ื“ื” ืฉื”ื”ื•ื“ืขื” ื ืฉืœื—ืช ื•ืื™ืฉื•ืจ ืฆืคื•ื™ ืœื ืžื›ืœ ื”ืžืฉืชืชืคื™ื, ืืœื ืจืง ืžืกื˜ ืžืกื•ื™ื;
  • ืœืื—ืจ ืฉื”ืœืงื•ื— ืงื™ื‘ืœ ืืช ืžืกืคืจ ื”ืชื’ื•ื‘ื•ืช ื”ืชื•ืืžื•ืช ืืช ืžื“ื™ื ื™ื•ืช ื”ืื™ืฉื•ืจื™ื, ื”ื•ื ืฉื•ืœื— ืืช ื”ืขืกืงื” ืœืฉื™ืจื•ืช ื”ื”ื–ืžื ื”;
  • ืฉื™ืจื•ืช ื”ื”ื–ืžื ื” ื™ื•ืฆืจ ื‘ืœื•ืง ื•ืฉื•ืœื— ืื•ืชื• ืœื›ืœ ื”ืขืžื™ืชื™ื ื”ืžืชื—ื™ื™ื‘ื™ื. ืฉื™ืจื•ืช ื”ื”ื–ืžื ื” ืžื‘ื˜ื™ื— ืจื™ืฉื•ื ืจืฆื™ืฃ ืฉืœ ื‘ืœื•ืงื™ื, ืžื” ืฉืžื‘ื˜ืœ ืืช ืžื” ืฉื ืงืจื ืžื–ืœื’ ื—ืฉื‘ื•ื ื•ืช ื—ืฉื‘ื•ื ื•ืช (ืจืื” ืกืขื™ืฃ "ืžื–ืœื’ื•ืช");
  • ืขืžื™ืชื™ื ืžืงื‘ืœื™ื ื—ืกื™ืžื”, ื‘ื•ื“ืงื™ื ืฉื•ื‘ ืืช ืžื“ื™ื ื™ื•ืช ื”ืื™ืฉื•ืจื™ื, ื›ื•ืชื‘ื™ื ืืช ื”ื‘ืœื•ืง ืœื‘ืœื•ืงืฆ'ื™ื™ืŸ ื•ืžืฉื ื™ื ืืช ื”ืžืฆื‘ ื‘-DB "ืžืฆื‘ ืขื•ืœืžื™".

ื”ึธื”ึตืŸ. ื–ื” ืžื‘ื™ื ืœื—ืœื•ืงืช ืชืคืงื™ื“ื™ื ื‘ื™ืŸ ื”ืฆืžืชื™ื. ื–ื” ืžื‘ื˜ื™ื— ืฉื”-blockchain ื ื™ืชืŸ ืœื”ืจื—ื‘ื” ื•ืžืื•ื‘ื˜ื—:

  • ื—ื•ื–ื™ื ื—ื›ืžื™ื (chaincode) ืžื‘ืฆืขื™ื ืื™ืฉื•ืจ ืขืžื™ืชื™ื. ื–ื” ืžื‘ื˜ื™ื— ืืช ื”ืกื•ื“ื™ื•ืช ืฉืœ ื—ื•ื–ื™ื ื—ื›ืžื™ื, ื›ื™ ื–ื” ืœื ืžืื•ื—ืกืŸ ืขืœ ื™ื“ื™ ื›ืœ ื”ืžืฉืชืชืคื™ื, ืืœื ืจืง ืขืœ ื™ื“ื™ ืื™ืฉื•ืจ ืขืžื™ืชื™ื.
  • ื”ื”ื–ืžื ื” ืืžื•ืจื” ืœืขื‘ื•ื“ ื‘ืžื”ื™ืจื•ืช. ื–ื” ืžื•ื‘ื˜ื— ืขืœ ื™ื“ื™ ื”ืขื•ื‘ื“ื” ืฉืกื“ืจ ื™ื•ืฆืจ ืจืง ื‘ืœื•ืง ื•ืฉื•ืœื— ืื•ืชื• ืœืงื‘ื•ืฆื” ืงื‘ื•ืขื” ืฉืœ ืขืžื™ืชื™ื ืžื•ื‘ื™ืœื™ื.
  • ืขืžื™ืชื™ื ืžืชื—ื™ื™ื‘ื™ื ืžืื—ืกื ื™ื ืจืง ืืช ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ - ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืจื‘ื™ื ืžื”ื ื•ื”ื ืœื ื“ื•ืจืฉื™ื ื”ืจื‘ื” ื›ื•ื— ื•ืชืคืขื•ืœ ืžื™ื™ื“ื™.

ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ื”ืคืชืจื•ื ื•ืช ื”ืืจื›ื™ื˜ืงื˜ื•ื ื™ื™ื ืฉืœ Hyperledger Fabric ื•ืžื“ื•ืข ื”ื•ื ืขื•ื‘ื“ ื›ืš ื•ืœื ืื—ืจืช ื ื™ืชืŸ ืœืžืฆื•ื ื›ืืŸ: ืžืงื•ืจื•ืช ืื“ืจื™ื›ืœื•ืช ืื• ืคื”: Hyperledger Fabric: ืžืขืจื›ืช ื”ืคืขืœื” ืžื‘ื•ื–ืจืช ืœื‘ืœื•ืงืฆ'ื™ื™ืŸ ืžื•ืจืฉื™ื.

ืื–, Hyperledger Fabric ื”ื™ื ืžืขืจื›ืช ืื•ื ื™ื‘ืจืกืœื™ืช ื‘ืืžืช ืฉืื™ืชื” ืืชื” ื™ื›ื•ืœ:

  • ื”ื˜ืžืขืช ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืฉืจื™ืจื•ืชื™ ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื;
  • ื”ืงืœื˜ ื•ืงื‘ืœ ื ืชื•ื ื™ื ืžืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ blockchain ื‘ืคื•ืจืžื˜ JSON;
  • ื”ืขื ืง ื•ืืžืช ื’ื™ืฉืช API ื‘ืืžืฆืขื•ืช ืจืฉื•ืช ื”ืื™ืฉื•ืจื™ื.

ืขื›ืฉื™ื•, ื›ืฉื”ื‘ื ื• ืงืฆืช ืขืœ ื”ืคืจื˜ื™ื ืฉืœ Hyperledger Fabric, ื‘ื•ืื• ืกื•ืฃ ืกื•ืฃ ื ืขืฉื” ืžืฉื”ื• ืฉื™ืžื•ืฉื™!

ืคืจื™ืกืช ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ื”ืฆื”ืจืช ื”ื‘ืขื™ื”

ื”ืžืฉื™ืžื” ื”ื™ื ืœื™ื™ืฉื ืืช ืจืฉืช Citcoin ืขื ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช: ื™ืฆื™ืจืช ื—ืฉื‘ื•ืŸ, ืงื‘ืœืช ื™ืชืจื”, ื”ื˜ืขื™ื ื” ื‘ื—ืฉื‘ื•ืŸ, ื”ืขื‘ืจืช ืžื˜ื‘ืขื•ืช ืžื—ืฉื‘ื•ืŸ ืื—ื“ ืœืื—ืจ. ื ืฆื™ื™ืจ ืžื•ื“ืœ ืื•ื‘ื™ื™ืงื˜, ืื•ืชื• ื ืžืฉื™ืš ืœื™ื™ืฉื ื‘ื—ื•ื–ื” ื—ื›ื. ืื– ื™ื”ื™ื• ืœื ื• ื—ืฉื‘ื•ื ื•ืช ืฉืžื–ื•ื”ื™ื ื‘ืฉืžื•ืช ื•ืžื›ื™ืœื™ื ื™ืชืจื” ื•ืจืฉื™ืžืช ื—ืฉื‘ื•ื ื•ืช. ื—ืฉื‘ื•ื ื•ืช ื•ืจืฉื™ืžืช ื—ืฉื‘ื•ื ื•ืช ื”ื, ื‘ืžื•ื ื—ื™ื ืฉืœ ื ื›ืกื™ Hyperledger Fabric. ื‘ื”ืชืื, ื™ืฉ ืœื”ื ื”ื™ืกื˜ื•ืจื™ื” ื•ืžืฆื‘ ื ื•ื›ื—ื™. ืื ื™ ืื ืกื” ืœืฆื™ื™ืจ ืืช ื–ื” ื‘ืฆื•ืจื” ื‘ืจื•ืจื”:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื”ื ืชื•ื ื™ื ื”ืขืœื™ื•ื ื™ื ื”ื ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™, ื”ืžืื•ื—ืกืŸ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื "ืžืฆื‘ ืขื•ืœืžื™". ืžืชื—ืชื™ื”ืŸ ืžื•ืคื™ืขื•ืช ื“ืžื•ื™ื•ืช ื”ืžืฆื™ื’ื•ืช ืืช ื”ื”ื™ืกื˜ื•ืจื™ื” ื”ืžืื•ื—ืกื ืช ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ื ื›ืกื™ื ืžืฉืชื ื” ืขืœ ื™ื“ื™ ืขืกืงืื•ืช. ื”ื ื›ืก ืžืฉืชื ื” ืจืง ื›ืžื›ืœื•ืœ, ื›ืš ืฉื›ืชื•ืฆืื” ืžื”ืขืกืงื”, ื ื•ืฆืจ ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ, ื•ื”ืขืจืš ื”ื ื•ื›ื—ื™ ืฉืœ ื”ื ื›ืก ื ื›ื ืก ืœื”ื™ืกื˜ื•ืจื™ื”.

ืขื ืŸ IBM

ืื ื• ื™ื•ืฆืจื™ื ื—ืฉื‘ื•ืŸ ื‘ ืขื ืŸ IBM. ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืคืœื˜ืคื•ืจืžืช ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ื™ืฉ ืœืฉื“ืจื’ ืื•ืชื” ืœ-Pay-As-You-Go. ืชื”ืœื™ืš ื–ื” ืขืฉื•ื™ ืœื”ื™ื•ืช ืœื ืžื”ื™ืจ, ื›ื™... IBM ืžื‘ืงืฉืช ืžื™ื“ืข ื ื•ืกืฃ ื•ืžืืžืชืช ืื•ืชื• ื‘ืื•ืคืŸ ื™ื“ื ื™. ื‘ื ื™ืžื” ื—ื™ื•ื‘ื™ืช, ืื ื™ ื™ื›ื•ืœ ืœื•ืžืจ ืฉืœ-IBM ื™ืฉ ื—ื•ืžืจื™ ื”ื“ืจื›ื” ื˜ื•ื‘ื™ื ื”ืžืืคืฉืจื™ื ืœืš ืœืคืจื•ืก ืืช Hyperledger Fabric ื‘ืขื ืŸ ืฉืœื”ื. ืื”ื‘ืชื™ ืืช ืกื“ืจืช ื”ืžืืžืจื™ื ื•ื”ื“ื•ื’ืžืื•ืช ื”ื‘ืื•ืช:

ืœื”ืœืŸ ืฆื™ืœื•ืžื™ ืžืกืš ืฉืœ ืคืœื˜ืคื•ืจืžืช IBM Blockchain. ื–ื• ืœื ื”ื•ืจืื” ื›ื™ืฆื“ ืœื™ืฆื•ืจ ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ืืœื ืคืฉื•ื˜ ื”ื“ื’ืžื” ืฉืœ ื”ื™ืงืฃ ื”ืžืฉื™ืžื”. ืื–, ืœืžื˜ืจื•ืชื™ื ื•, ืื ื• ื™ื•ืฆืจื™ื ืืจื’ื•ืŸ ืื—ื“:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืื ื• ื™ื•ืฆืจื™ื ื‘ื• ืฆืžืชื™ื: ืžืกื“ืจ CA, Org1 CA, ืขืžื™ืช ืžื–ืžื™ืŸ:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืื ื• ื™ื•ืฆืจื™ื ืžืฉืชืžืฉื™ื:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืฆื•ืจ ืขืจื•ืฅ ื•ืงืจื ืœื• citcoin:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื‘ืขืฆื ืขืจื•ืฅ ื”ื•ื ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ืื– ื”ื•ื ืžืชื—ื™ืœ ื‘ื‘ืœื•ืง ืืคืก (ื‘ืœื•ืง ื‘ืจืืฉื™ืช):

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื›ืชื™ื‘ืช ื—ื•ื–ื” ื—ื›ื

/*
 * 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, ืฉื‘ื” ืžืชื‘ืฆืขืช ื”ืฉื•ื•ืื” ืœืžืกืคืจ ื”ืžืงืกื™ืžืœื™ ืฉืœ ื—ืฉื‘ื•ื ื•ืช ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ (maxAccounts = 5). ื•ื”ื ื” ื™ืฉ ืžืฉืงื•ืฃ (ืฉืžืชื ืœื‘?), ืฉืžื‘ื™ื ืœืขืœื™ื™ื” ืื™ื ืกื•ืคื™ืช ื‘ืžืกืคืจ ื”ื—ืฉื‘ื•ื ื•ืช. ื™ืฉ ืœื”ื™ืžื ืข ืžื˜ืขื•ื™ื•ืช ื›ืืœื”)

ืœืื—ืจ ืžื›ืŸ, ืื ื• ื˜ื•ืขื ื™ื ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ืœืขืจื•ืฅ ื•ืžืฆื™ื’ื™ื ืื•ืชื•:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืขืกืงื” ืœื”ืชืงื ืช ื—ื•ื–ื” ื—ื›ื:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืคืจื˜ื™ื ืขืœ ื”ืขืจื•ืฅ ืฉืœื ื•:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ื“ื™ืื’ืจืžื” ื”ื‘ืื” ืฉืœ ืจืฉืช ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื‘ืขื ืŸ IBM. ื”ืชืจืฉื™ื ืžืฆื™ื’ ื’ื ืชื•ื›ื ื™ืช ื”ื“ื’ืžื” ื”ืคื•ืขืœืช ื‘ืขื ืŸ ืืžื–ื•ืŸ ืขืœ ืฉืจืช ื•ื™ืจื˜ื•ืืœื™ (ืขื•ื“ ืขืœ ื›ืš ื‘ืกืขื™ืฃ ื”ื‘ื):

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื™ืฆื™ืจืช GUI ืขื‘ื•ืจ ืงืจื™ืื•ืช Hyperledger Fabric API

ืœ-Hyperledger Fabric ื™ืฉ API ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™:

  • ืฆื•ืจ ืขืจื•ืฅ;
  • ื—ื™ื‘ื•ืจื™ื ืžืฉื•ื•ื™ื ืœืขืจื•ืฅ;
  • ื”ืชืงื ื” ื•ืžื•ืคืข ืฉืœ ื—ื•ื–ื™ื ื—ื›ืžื™ื ื‘ืขืจื•ืฅ;
  • ืขืกืงืื•ืช ืฉื™ื—ื•ืช;
  • ื‘ืงืฉ ืžื™ื“ืข ืขืœ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ.

ืคื™ืชื•ื— ืืคืœื™ืงืฆื™ื•ืช

ื‘ืชื•ื›ื ื™ืช ื”ื”ื“ื’ืžื” ืฉืœื ื• ื ืฉืชืžืฉ ื‘-API ืจืง ื›ื“ื™ ืœื”ืชืงืฉืจ ืœืขืกืงืื•ืช ื•ืœื‘ืงืฉ ืžื™ื“ืข, ืžื›ื™ื•ื•ืŸ ืืช ืฉืืจ ื”ืฉืœื‘ื™ื ื›ื‘ืจ ื”ืฉืœืžื ื• ื‘ืืžืฆืขื•ืช ืคืœื˜ืคื•ืจืžืช ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืฉืœ IBM. ืื ื• ื›ื•ืชื‘ื™ื GUI ื‘ืืžืฆืขื•ืช ืžื—ืกื ื™ืช ื˜ื›ื ื•ืœื•ื’ื™ื” ืกื˜ื ื“ืจื˜ื™ืช: Express.js + Vue.js + Node.js. ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืžืืžืจ ื ืคืจื“ ืขืœ ืื™ืš ืœื”ืชื—ื™ืœ ืœื™ืฆื•ืจ ื™ื™ืฉื•ืžื™ ืื™ื ื˜ืจื ื˜ ืžื•ื“ืจื ื™ื™ื. ื›ืืŸ ืืฉืื™ืจ ืงื™ืฉื•ืจ ืœืกื“ืจืช ื”ื”ืจืฆืื•ืช ืฉื”ื›ื™ ืื”ื‘ืชื™: Full Stack Web App ื‘ืืžืฆืขื•ืช Vue.js & Express.js. ื”ืชื•ืฆืื” ื”ื™ื ืืคืœื™ืงืฆื™ื™ืช ืฉืจืช-ืœืงื•ื— ืขื ืžืžืฉืง ื’ืจืคื™ ืžื•ื›ืจ ื‘ืกื’ื ื•ืŸ Material Design ืฉืœ ื’ื•ื’ืœ. REST API ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช ืžื•ืจื›ื‘ ืžืžืกืคืจ ืงืจื™ืื•ืช:

  • HyperledgerDemo/v1/init - ืืชื—ื•ืœ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ;
  • 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 โ€” ื”ืขื‘ืจ ืฉื ื™ ืžื˜ื‘ืขื•ืช ืžื‘ื•ื‘ ืœืืœื™ืก;
  • HyperledgerDemo/v1/disconnect - ืกื’ื•ืจ ืืช ื”ื—ื™ื‘ื•ืจ ืœื‘ืœื•ืงืฆ'ื™ื™ืŸ.

ืชื™ืื•ืจ ืฉืœ ื”-API ืขื ื“ื•ื’ืžืื•ืช ื”ื›ืœื•ืœื•ืช ื‘ ืืชืจ Postman - ืชื•ื›ื ื™ืช ื™ื“ื•ืขื” ืœื‘ื“ื™ืงืช HTTP API.

ืืคืœื™ืงืฆื™ื™ืช ื”ื“ื’ืžื” ื‘ืขื ืŸ ืืžื–ื•ืŸ

ื”ืขืœื™ืชื™ ืืช ื”ืืคืœื™ืงืฆื™ื” ืœืืžื–ื•ืŸ ื›ื™... IBM ืขื“ื™ื™ืŸ ืœื ื”ืฆืœื™ื—ื” ืœืฉื“ืจื’ ืืช ื”ื—ืฉื‘ื•ืŸ ืฉืœื™ ื•ืœืืคืฉืจ ืœื™ ืœื™ืฆื•ืจ ืฉืจืชื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื. ื›ื™ืฆื“ ืœื”ื•ืกื™ืฃ ื“ื•ื‘ื“ื‘ืŸ ืœื“ื•ืžื™ื™ืŸ: www.citcoin.info. ืื ื™ ืืฉืื™ืจ ืืช ื”ืฉืจืช ื“ื•ืœืง ืœื–ืžืŸ ืžื”, ื•ืื– ื›ื‘ื” ืื•ืชื•, ื›ื™... ืกื ื˜ื™ื ืœื”ืฉื›ืจื” ื ื•ื˜ืคื™ื, ื•ืžื˜ื‘ืขื•ืช citcoin ืขื“ื™ื™ืŸ ืœื ืจืฉื•ืžื™ื ื‘ื‘ื•ืจืกื”) ืื ื™ ื›ื•ืœืœ ืฆื™ืœื•ืžื™ ืžืกืš ืฉืœ ื”ื”ื“ื’ืžื” ื‘ื›ืชื‘ื” ื›ื“ื™ ืฉื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ืขื‘ื•ื“ื” ื™ื”ื™ื” ื‘ืจื•ืจ. ืืคืœื™ืงืฆื™ื™ืช ื”ื”ื“ื’ืžื” ื™ื›ื•ืœื”:

  • ืืชื—ื•ืœ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ;
  • ืฆื•ืจ ื—ืฉื‘ื•ืŸ (ืืš ื›ืขืช ืื™ื ืš ื™ื›ื•ืœ ืœื™ืฆื•ืจ ื—ืฉื‘ื•ืŸ ื—ื“ืฉ, ืžื›ื™ื•ื•ืŸ ืฉื”ืžืกืคืจ ื”ืžืจื‘ื™ ืฉืœ ื—ืฉื‘ื•ื ื•ืช ืฉืฆื•ื™ืŸ ื‘ื—ื•ื–ื” ื”ื—ื›ื ื”ื•ืฉื’ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ);
  • ืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ื—ืฉื‘ื•ื ื•ืช;
  • ื”ืขื‘ืจ ืžื˜ื‘ืขื•ืช citcoin ื‘ื™ืŸ ืืœื™ืก, ื‘ื•ื‘ ื•ืืœื›ืก;
  • ืงื‘ืœ ืื™ืจื•ืขื™ื (ืื‘ืœ ืขื›ืฉื™ื• ืื™ืŸ ื“ืจืš ืœื”ืฆื™ื’ ืื™ืจื•ืขื™ื, ืื– ืœืฉื ื”ืคืฉื˜ื•ืช ื”ืžืžืฉืง ืื•ืžืจ ืฉืื™ืจื•ืขื™ื ืื™ื ื ื ืชืžื›ื™ื);
  • ื™ื•ืžืŸ ืคืขื•ืœื•ืช.

ืจืืฉื™ืช ืื ื• ืžืืชื—ืœื™ื ืืช ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืœืื—ืจ ืžื›ืŸ, ืื ื• ื™ื•ืฆืจื™ื ืืช ื”ื—ืฉื‘ื•ืŸ ืฉืœื ื•, ืืœ ืชื‘ื–ื‘ื– ื–ืžืŸ ืขื ื”ื™ืชืจื”:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืื ื• ืžืงื‘ืœื™ื ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ื—ืฉื‘ื•ื ื•ืช ื”ื–ืžื™ื ื™ื:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืื ื• ื‘ื•ื—ืจื™ื ืืช ื”ืฉื•ืœื— ื•ื”ื ืžืขืŸ, ื•ืžืงื‘ืœื™ื ืืช ื”ื™ืชืจื•ืช ืฉืœื”ื. ืื ื”ืฉื•ืœื— ื•ื”ื ืžืขืŸ ื–ื”ื™ื, ื”ื—ืฉื‘ื•ืŸ ืฉืœื• ื™ืชื—ื“ืฉ:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื‘ื™ื•ืžืŸ ืื ื• ืขื•ืงื‘ื™ื ืื—ืจ ื‘ื™ืฆื•ืข ื”ืขืกืงืื•ืช:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืœืžืขืฉื”, ื–ื” ื”ื›ืœ ืขื ืชื•ื›ื ื™ืช ื”ื”ื“ื’ืžื”. ืœื”ืœืŸ ืชื•ื›ืœื• ืœืจืื•ืช ืืช ื”ืขืกืงื” ืฉืœื ื• ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ื•ื”ืจืฉื™ืžื” ื”ื›ืœืœื™ืช ืฉืœ ื”ืขืกืงืื•ืช:

Blockchain: ืื™ื–ื” PoC ืขืœื™ื ื• ืœื‘ื ื•ืช?

ืขื ื–ื”, ื”ืฉืœืžื ื• ื‘ื”ืฆืœื—ื” ืืช ื”ื™ื™ืฉื•ื ืฉืœ PoC ืœื™ืฆื™ืจืช ืจืฉืช Citcoin. ืžื” ืขื•ื“ ืฆืจื™ืš ืœืขืฉื•ืช ื›ื“ื™ ืฉ-Citcoin ืชื”ืคื•ืš ืœืจืฉืช ืžืœืื” ืœื”ืขื‘ืจืช ืžื˜ื‘ืขื•ืช? ืžืขื˜ ืžืื•ื“:

  • ื‘ืฉืœื‘ ื™ืฆื™ืจืช ื”ื—ืฉื‘ื•ืŸ ื™ืฉ ืœื™ื™ืฉื ื™ืฆื™ืจืช ืžืคืชื— ืคืจื˜ื™/ืฆื™ื‘ื•ืจื™. ื”ืžืคืชื— ื”ืคืจื˜ื™ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืื•ื—ืกืŸ ืืฆืœ ืžืฉืชืžืฉ ื”ื—ืฉื‘ื•ืŸ, ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืื•ื—ืกืŸ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ.
  • ื‘ืฆืข ื”ืขื‘ืจืช ืžื˜ื‘ืข ืฉื‘ื” ืžืคืชื— ืฆื™ื‘ื•ืจื™, ื•ืœื ืฉื, ืžืฉืžืฉ ืœื–ื™ื”ื•ื™ ื”ืžืฉืชืžืฉ.
  • ื”ืฆืคื™ืŸ ืขืกืงืื•ืช ื”ืขื•ื‘ืจื•ืช ืžื”ืžืฉืชืžืฉ ืœืฉืจืช ื‘ืืžืฆืขื•ืช ื”ืžืคืชื— ื”ืคืจื˜ื™ ืฉืœื•.

ืžืกืงื ื”

ื”ื˜ืžืขื ื• ืืช ืจืฉืช Citcoin ืขื ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช: ื”ื•ืกืคืช ื—ืฉื‘ื•ืŸ, ืงื‘ืœืช ื™ืชืจื”, ื”ื˜ืขื™ื ื” ื‘ื—ืฉื‘ื•ืŸ, ื”ืขื‘ืจืช ืžื˜ื‘ืขื•ืช ืžื—ืฉื‘ื•ืŸ ืื—ื“ ืœืžืฉื ื”ื•. ืื– ืžื” ืขืœื” ืœื ื• ืœื‘ื ื•ืช PoC?

  • ืืชื” ืฆืจื™ืš ืœืœืžื•ื“ ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื‘ื›ืœืœ ื•-Hyperledger Fabric ื‘ืคืจื˜;
  • ืœืžื“ ืœื”ืฉืชืžืฉ ื‘ืขื ื ื™ื ืฉืœ IBM ืื• ืืžื–ื•ืŸ;
  • ืœืžื“ ืืช ืฉืคืช ื”ืชื›ื ื•ืช JS ื•ืžืกื’ืจืช ืื™ื ื˜ืจื ื˜ ื›ืœืฉื”ื™;
  • ืื ื ืชื•ื ื™ื ืžืกื•ื™ืžื™ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžืื•ื—ืกื ื™ื ืœื ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ืืœื ื‘ืžืกื“ ื ืชื•ื ื™ื ื ืคืจื“, ืื– ืœืžื“ ืœืฉืœื‘, ืœืžืฉืœ, ืขื PostgreSQL;
  • ื•ืื—ืจื•ืŸ ื—ื‘ื™ื‘ - ืืชื” ืœื ื™ื›ื•ืœ ืœื—ื™ื•ืช ื‘ืขื•ืœื ื”ืžื•ื“ืจื ื™ ื‘ืœื™ ื™ื“ืข ื‘ืœื™ื ื•ืงืก!)

ื›ืžื•ื‘ืŸ, ื–ื” ืœื ืžื“ืข ื˜ื™ืœื™ื, ืื‘ืœ ืชืฆื˜ืจืš ืœืขื‘ื•ื“ ืงืฉื”!

ืžืงื•ืจื•ืช ื‘-GitHub

ืžืงื•ืจื•ืช ืฉืžื• ืขืœ GitHub. ืชื™ืื•ืจ ืงืฆืจ ืฉืœ ื”ืžืื’ืจ:
ืงื˜ืœื•ื’ ยซืฉืจืชยป โ€” ืฉืจืช Node.js
ืงื˜ืœื•ื’ ยซืœืงื•ื—ื•ืชยป โ€” ืœืงื•ื— Node.js
ืงื˜ืœื•ื’ ยซblockchain"(ืขืจื›ื™ ืคืจืžื˜ืจื™ื ื•ืžืคืชื—ื•ืช, ื›ืžื•ื‘ืŸ, ืื™ื ื ืคื•ืขืœื™ื ื•ื ื™ืชื ื™ื ืจืง ื›ื“ื•ื’ืžื”):

  • ื—ื•ื–ื” - ืงื•ื“ ืžืงื•ืจ ื—ื•ื–ื” ื—ื›ื
  • ืืจื ืง - ืžืคืชื—ื•ืช ืžืฉืชืžืฉ ืœืฉื™ืžื•ืฉ ื‘- Hyperledger Fabric API.
  • *.cds - ื’ืจืกืื•ืช ื”ื™ื“ื•ืจ ืฉืœ ื—ื•ื–ื™ื ื—ื›ืžื™ื
  • ืงื‘ืฆื™ *.json - ื“ื•ื’ืžืื•ืช ืœืงื•ื‘ืฆื™ ืชืฆื•ืจื” ืœืฉื™ืžื•ืฉ ื‘- Hyperledger Fabric API

ื–ื• ืจืง ื”ื”ืชื—ืœื”!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”