Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ඔබේ ඇස් බිය වන අතර ඔබේ දෑත් කැසීමයි!

පෙර ලිපිවලදී, අපි බ්ලොක්චේන් ගොඩනගා ඇති තාක්ෂණයන් සමඟ කටයුතු කළෙමු (අපි blockchain ගොඩනගා ගත යුත්තේ කුමක්ද?) සහ ඔවුන්ගේ උපකාරයෙන් ක්රියාත්මක කළ හැකි අවස්ථා (අපි නඩුවක් ගොඩනගා ගත යුත්තේ ඇයි?) ඔබේ දෑතින් වැඩ කිරීමට කාලයයි! නියමුවන් සහ PoC (සංකල්පයේ සාධනය) ක්‍රියාත්මක කිරීමට, මම වලාකුළු භාවිතා කිරීමට කැමැත්තෙමි, මන්ද... ලෝකයේ ඕනෑම තැනක සිට ඒවාට ප්‍රවේශ විය හැකි අතර, බොහෝ විට, වෙහෙසකර පරිසරය ස්ථාපනය කිරීම සඳහා කාලය නාස්ති කිරීමට අවශ්‍ය නොවේ, මන්ද පෙර සැකසූ සැකසුම් ඇත. ඉතින්, අපි සරල දෙයක් කරමු, උදාහරණයක් ලෙස, සහභාගිවන්නන් අතර කාසි මාරු කිරීම සඳහා ජාලයක් සහ එය නිහතමානීව Bitcoin ලෙස හඳුන්වමු. මේ සඳහා අපි IBM cloud සහ universal blockchain Hyperledger Fabric භාවිතා කරමු. පළමුව, Hyperledger Fabric විශ්වීය blockchain ලෙස හඳුන්වන්නේ මන්දැයි සොයා බලමු?

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

Hyperledger Fabric - විශ්වීය blockchain

පොදුවේ ගත් කල, විශ්වීය තොරතුරු පද්ධතියක් යනු:

  • සේවාදායක කට්ටලයක් සහ ව්‍යාපාර තර්කනය කරන මෘදුකාංග හරයක්;
  • පද්ධතිය සමඟ අන්තර්ක්රියා සඳහා අතුරු මුහුණත්;
  • උපාංග/පුද්ගලයින් ලියාපදිංචි කිරීම, සත්‍යාපනය කිරීම සහ බලය පැවරීම සඳහා මෙවලම්;
  • මෙහෙයුම් සහ සංරක්ෂිත දත්ත ගබඩා කරන දත්ත සමුදාය:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

Hyperledger Fabric යනු කුමක්ද යන්නෙහි නිල අනුවාදය කියවිය හැක වෙබ් අඩවිය, සහ කෙටියෙන් කිවහොත්, Hyperledger Fabric යනු ඔබට පුද්ගලික blockchains තැනීමට සහ JS සහ Go ක්‍රමලේඛන භාෂාවෙන් ලියා ඇති හිතුවක්කාර ස්මාර්ට් කොන්ත්‍රාත්තු ක්‍රියාත්මක කිරීමට ඉඩ සලසන විවෘත මූලාශ්‍ර වේදිකාවකි. Hyperledger Fabric හි ගෘහ නිර්මාණ ශිල්පය පිළිබඳව සවිස්තරාත්මකව බලමු මෙය දත්ත ගබඩා කිරීම සහ පටිගත කිරීම සඳහා පමණක් විශේෂතා ඇති විශ්වීය පද්ධතියක් බවට වග බලා ගන්න. විශේෂත්වය නම්, සියලුම බ්ලොක්චේන් වල මෙන්, දත්ත බ්ලොක්චේන් මත තබා ඇති බ්ලොක් වල ගබඩා කර ඇත්තේ සහභාගිවන්නන් එකඟතාවයකට පැමිණියහොත් පමණක් වන අතර දත්ත පටිගත කිරීමෙන් පසුව නිහඬව නිවැරදි කිරීමට හෝ මකා දැමිය නොහැක.

Hyperledger Fabric Architecture

රූප සටහනේ දැක්වෙන්නේ Hyperledger Fabric ගෘහ නිර්මාණ ශිල්පය:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ආයතන - සංවිධානවල සම වයසේ මිතුරන් අඩංගු වේ, i.e. සංවිධානවල සහයෝගය නිසා blockchain පවතී. විවිධ සංවිධාන එකම නාලිකාවක කොටසක් විය හැකිය.

නාලිකාව - සම වයසේ මිතුරන් කණ්ඩායම් වලට ඒකාබද්ධ කරන තාර්කික ව්‍යුහයක්, i.e. blockchain නිශ්චිතව දක්වා ඇත. Hyperledger Fabric හට විවිධ ව්‍යාපාර තර්කනය සමඟ එකවර බහු වාරණ සැකසීමට හැකිය.

සාමාජික සේවා සපයන්නා (MSP) අනන්‍යතාවය නිකුත් කිරීම සහ භූමිකාවන් පැවරීම සඳහා CA (සහතික අධිකාරිය) වේ. නෝඩයක් නිර්මාණය කිරීම සඳහා, ඔබ MSP සමඟ අන්තර් ක්රියා කළ යුතුය.

සම වයසේ නෝඩ් - ගනුදෙනු සත්‍යාපනය කරන්න, බ්ලොක්චේන් ගබඩා කරන්න, ස්මාර්ට් කොන්ත්‍රාත්තු ක්‍රියාත්මක කරන්න සහ යෙදුම් සමඟ අන්තර් ක්‍රියා කරන්න. සම වයසේ මිතුරන්ට අනන්‍යතාවයක් (ඩිජිටල් සහතිකය) ඇත, එය MSP විසින් නිකුත් කරනු ලැබේ. සියලුම නෝඩ් වලට සමාන අයිතිවාසිකම් ඇති Bitcoin හෝ Etherium ජාලය මෙන් නොව, Hyperledger Fabric nodes විවිධ භූමිකාවන් ඉටු කරයි:

  • සමහර විට සම වයසේ බලන්න සම වයසේ මිතුරන් අනුමත කිරීම (EP) සහ ස්මාර්ට් කොන්ත්‍රාත්තු ක්‍රියාත්මක කරන්න.
  • සම වයසේ මිතුරන් කැප කිරීම (CP) - බ්ලොක්චේන් හි දත්ත පමණක් සුරකින්න සහ "ලෝක තත්වය" යාවත්කාලීන කරන්න.
  • ඇන්කර් පීර් (AP) - සංවිධාන කිහිපයක් blockchain සඳහා සහභාගී වන්නේ නම්, ඔවුන් අතර සන්නිවේදනය සඳහා නැංගුරම් සම වයසේ මිතුරන් භාවිතා කරනු ලැබේ. සෑම ආයතනයකටම නැංගුරම් කරුවන් එකක් හෝ වැඩි ගණනක් සිටිය යුතුය. AP භාවිතා කරමින්, සංවිධානයක ඕනෑම සම වයසේ මිතුරෙකුට වෙනත් ආයතනවල සිටින සියලුම මිතුරන් පිළිබඳ තොරතුරු ලබා ගත හැකිය. AP අතර තොරතුරු සමමුහුර්ත කිරීමට භාවිතා කරයි gossip protocol.
  • නායක පීර් - සංවිධානයකට සම වයසේ මිතුරන් කිහිප දෙනෙකු සිටී නම්, සම වයසේ නායකයාට පමණක් ඇණවුම් කිරීමේ සේවාවෙන් බ්ලොක් ලැබෙන අතර ඒවා සෙසු මිතුරන්ට ලබා දේ. සංවිධානයේ සම වයසේ මිතුරන් විසින් නායකයා ස්ථිතිකව හෝ ගතිකව තෝරා ගත හැකිය. නායකයින් පිළිබඳ තොරතුරු සමමුහුර්ත කිරීම සඳහා gossip protocol ද භාවිතා වේ.

වත්කම් - වටිනාකමක් ඇති සහ blockchain මත ගබඩා කර ඇති ආයතන. වඩාත් නිශ්චිතව, මෙය JSON ආකෘතියේ ප්‍රධාන අගය දත්ත වේ. Blockchain හි සටහන් කර ඇත්තේ මෙම දත්තය. ඔවුන්ට ඉතිහාසයක් ඇත, එය බ්ලොක්චේන් හි ගබඩා කර ඇති අතර, "ලෝක රාජ්‍ය" දත්ත ගබඩාවේ ගබඩා කර ඇති වත්මන් තත්වයකි. ව්‍යාපාරික කාර්යයන් මත පදනම්ව දත්ත ව්‍යුහයන් අත්තනෝමතික ලෙස පුරවා ඇත. අවශ්‍ය ක්ෂේත්‍ර නොමැත, එකම නිර්දේශය වන්නේ වත්කම් හිමිකරුවෙකු සිටිය යුතු අතර වටිනා විය යුතුය.

ලේජර - වත්මන් වත්කම් ගබඩා කරන Blockchain සහ Word රාජ්ය දත්ත ගබඩාව සමන්විත වේ. ලෝක රාජ්‍යය LevelDB හෝ CouchDB භාවිතා කරයි.

ස්මාර්ට් කොන්ත්රාත් - ස්මාර්ට් කොන්ත්රාත් භාවිතා කරමින්, පද්ධතියේ ව්යාපාරික තර්කනය ක්රියාත්මක වේ. Hyperledger Fabric හි, ස්මාර්ට් කොන්ත්‍රාත්තු chaincode ලෙස හැඳින්වේ. දාම කේතය භාවිතා කරමින්, වත්කම් සහ ඒවා හරහා ගනුදෙනු නියම කර ඇත. තාක්ෂණික වශයෙන්, ස්මාර්ට් කොන්ත්‍රාත්තු යනු JS හෝ Go ක්‍රමලේඛන භාෂාවෙන් ක්‍රියාත්මක කරන ලද මෘදුකාංග මොඩියුල වේ.

අනුමත කිරීමේ ප්රතිපත්තිය - එක් එක් දාම කේතය සඳහා, ඔබට ගනුදෙනුවක් සඳහා කොපමණ තහවුරු කිරීම් අපේක්ෂා කළ යුතුද සහ කාගෙන්ද යන්න පිළිබඳ ප්‍රතිපත්තියක් සැකසිය හැක. ප්‍රතිපත්තිය සකසා නොමැති නම්, පෙරනිමිය වන්නේ: "නාලිකාවේ ඕනෑම සංවිධානයක ඕනෑම සාමාජිකයෙකු විසින් ගනුදෙනුව තහවුරු කළ යුතුය." ප්රතිපත්ති උදාහරණ:

  • සංවිධානයේ ඕනෑම පරිපාලකයෙකු විසින් ගනුදෙනුව අනුමත කළ යුතුය;
  • සංවිධානයේ ඕනෑම සාමාජිකයෙකු හෝ සේවාදායකයෙකු විසින් තහවුරු කළ යුතුය;
  • ඕනෑම සම වයසේ සංවිධානයක් විසින් තහවුරු කළ යුතුය.

ඇණවුම් කිරීමේ සේවාව - ගණුදෙණු කොටස් වලට අසුරා ඒවා නාලිකාවේ මිතුරන් වෙත යවයි. ජාලයේ සිටින සියලුම මිතුරන් වෙත පණිවිඩ බෙදා හැරීම සහතික කරයි. කාර්මික පද්ධති සඳහා භාවිතා වේ කෆ්කා පණිවිඩ තැරැව්කරු, සංවර්ධනය සහ පරීක්ෂණ සඳහා ඒකල.

CallFlow

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

  • යෙදුම Go, Node.js හෝ Java SDK භාවිතයෙන් Hyperledger Fabric සමඟ සන්නිවේදනය කරයි;
  • සේවාලාභියා tx ගනුදෙනුවක් නිර්මාණය කර එය අනුමත කරන මිතුරන් වෙත යවයි;
  • සම වයසේ මිතුරා සේවාදායකයාගේ අත්සන සත්‍යාපනය කරයි, ගනුදෙනුව සම්පූර්ණ කරයි, සහ අනුමත අත්සන සේවාදායකයා වෙත යවයි. Chaincode ක්‍රියාත්මක කරනු ලබන්නේ අනුමත කරන සම වයසේ මිතුරන් මත පමණක් වන අතර, එය ක්‍රියාත්මක කිරීමේ ප්‍රතිඵලය සියලුම මිතුරන් වෙත යවනු ලැබේ. මෙම වැඩ ඇල්ගොරිතම PBFT (ප්‍රායෝගික බයිසැන්තියානු දෝෂ ඉවසීමේ) සම්මුතිය ලෙස හැඳින්වේ. වලින් වෙනස් වේ සම්භාව්ය BFT පණිවිඩය යවා තහවුරු කිරීම අපේක්ෂා කරන්නේ සියලුම සහභාගිවන්නන්ගෙන් නොව, යම් කට්ටලයකින් පමණි;
  • අනුමත කිරීමේ ප්‍රතිපත්තියට අනුරූප ප්‍රතිචාර ගණන සේවාදායකයාට ලැබුණු පසු, ඔහු ගනුදෙනුව ඇණවුම් කිරීමේ සේවාවට යවයි;
  • ඇණවුම් කිරීමේ සේවාව බ්ලොක් එකක් ජනනය කර එය සියළුම කැපවූ මිතුරන් වෙත යවයි. ඇණවුම් කිරීමේ සේවාව බ්ලොක් අනුක්‍රමික පටිගත කිරීම සහතික කරයි, එය ඊනියා ලෙජර් ෆෝක් ඉවත් කරයි ("ගෑරුප්පු" කොටස බලන්න);
  • සම වයසේ මිතුරන්ට බ්ලොක් එකක් ලැබේ, අනුමත කිරීමේ ප්‍රතිපත්තිය නැවත පරීක්ෂා කරන්න, බ්ලොක්චේන් එකට බ්ලොක් එක ලියන්න සහ "ලෝක රාජ්‍ය" DB හි තත්වය වෙනස් කරන්න.

එම. මෙහි ප්රතිඵලයක් වශයෙන් නෝඩ් අතර භූමිකාවන් බෙදීම සිදු වේ. මෙය බ්ලොක්චේන් පරිමාණය කළ හැකි සහ ආරක්ෂිත බව සහතික කරයි:

  • ස්මාර්ට් ගිවිසුම් (දාම කේතය) සම වයසේ මිතුරන් අනුමත කරයි. මෙය ස්මාර්ට් කොන්ත්‍රාත්තු වල රහස්‍යභාවය සහතික කරයි, මන්ද එය සියලුම සහභාගිවන්නන් විසින් ගබඩා නොකෙරේ, නමුත් සම වයසේ මිතුරන් අනුමත කිරීමෙන් පමණි.
  • ඇණවුම ඉක්මනින් වැඩ කළ යුතුය. ඇනවුම් කිරීම පමණක් බ්ලොක් එකක් සාදන අතර එය ස්ථාවර නායක සම වයසේ මිතුරන් වෙත යැවීමෙන් මෙය සහතික කෙරේ.
  • කැපවීමෙන් සම වයසේ මිතුරන් පමණක් blockchain ගබඩා කරයි - ඒවායින් බොහොමයක් තිබිය හැකි අතර ඔවුන්ට විශාල බලයක් සහ ක්ෂණික ක්රියාකාරිත්වයක් අවශ්ය නොවේ.

Hyperledger Fabric හි වාස්තුවිද්‍යාත්මක විසඳුම් පිළිබඳ වැඩි විස්තර සහ එය මේ ආකාරයෙන් ක්‍රියා කරන්නේ ඇයි සහ වෙනත් ආකාරයකින් නොවේද යන්න මෙහි සොයාගත හැකිය: ගෘහ නිර්මාණ ශිල්පයේ මූලාරම්භය හෝ මෙහි: Hyperledger Fabric: අවසර ලත් Blockchains සඳහා බෙදා හරින ලද මෙහෙයුම් පද්ධතියකි.

එබැවින්, Hyperledger Fabric යනු ඔබට කළ හැකි සැබෑ විශ්වීය පද්ධතියකි:

  • ස්මාර්ට් කොන්ත්‍රාත් යාන්ත්‍රණය භාවිතයෙන් අත්තනෝමතික ව්‍යාපාරික තර්කනය ක්‍රියාත්මක කිරීම;
  • JSON ආකෘතියෙන් බ්ලොක්චේන් දත්ත ගබඩාවෙන් දත්ත පටිගත කර ලබා ගන්න;
  • සහතික අධිකාරිය භාවිතයෙන් API ප්‍රවේශය ලබා දීම සහ තහවුරු කිරීම.

දැන් අපි Hyperledger Fabric හි විශේෂතා ගැන ටිකක් තේරුම් ගනිමු, අවසානයේ අපි ප්රයෝජනවත් දෙයක් කරමු!

බ්ලොක්චේන් යෙදවීම

ගැටලුව ප්රකාශ කිරීම

කර්තව්යය වන්නේ Citcoin ජාලය පහත සඳහන් කාර්යයන් සමඟ ක්රියාත්මක කිරීමයි: ගිණුමක් සාදන්න, ශේෂයක් ලබා ගන්න, ඔබේ ගිණුම ඉහළට, එක් ගිණුමකින් තවත් කාසි මාරු කරන්න. අපි වස්තු ආකෘතියක් අඳින්නෙමු, එය අපි තවදුරටත් ස්මාර්ට් කොන්ත්රාත්තුවක් තුළ ක්රියාත්මක කරනු ඇත. එබැවින්, අපට නම් වලින් හඳුනාගෙන ශේෂයක් සහ ගිණුම් ලැයිස්තුවක් අඩංගු ගිණුම් තිබේ. ගිණුම් සහ ගිණුම් ලැයිස්තුවක්, Hyperledger Fabric වත්කම් අනුව වේ. ඒ අනුව ඔවුන්ට ඉතිහාසයක් සහ වත්මන් රාජ්‍යයක් ඇත. මම මෙය පැහැදිලිව ඇඳීමට උත්සාහ කරමි:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ඉහළම සංඛ්‍යා වන්නේ "ලෝක රාජ්‍ය" දත්ත ගබඩාවේ ගබඩා කර ඇති වත්මන් තත්වයයි. ඒවාට පහළින් බ්ලොක්චේන් හි ගබඩා කර ඇති ඉතිහාසය පෙන්වන සංඛ්යා ඇත. වත්මන් වත්කම් තත්ත්වය ගනුදෙනු මගින් වෙනස් වේ. වත්කම වෙනස් වන්නේ සමස්තයක් ලෙස පමණි, එබැවින් ගනුදෙනුවේ ප්‍රති result ලයක් ලෙස නව වස්තුවක් නිර්මාණය වන අතර වත්කමේ වත්මන් වටිනාකම ඉතිහාසයට යයි.

IBM Cloud

අපි ගිණුමක් සාදන්නෙමු IBM වලාකුළු. බ්ලොක්චේන් වේදිකාව භාවිතා කිරීමට, එය Pay-As-You-Go වෙත යාවත්කාලීන කළ යුතුය. මෙම ක්‍රියාවලිය ඉක්මන් නොවිය හැක, මන්ද... IBM අමතර තොරතුරු ඉල්ලා එය අතින් සත්‍යාපනය කරයි. ධනාත්මක සටහනක් මත, IBM හි Hyperledger Fabric ඔවුන්ගේ වලාකුළෙහි යෙදවීමට ඔබට ඉඩ සලසන හොඳ පුහුණු ද්රව්ය ඇති බව මට පැවසිය හැකිය. මම පහත ලිපි මාලාවට සහ උදාහරණ වලට කැමතියි:

පහත දැක්වෙන්නේ IBM Blockchain වේදිකාවේ තිරපිටපත් වේ. මෙය blockchain නිර්මාණය කරන්නේ කෙසේද යන්න පිළිබඳ උපදෙස් නොව, කාර්යයේ විෂය පථය නිරූපණය කිරීමකි. එබැවින්, අපගේ අරමුණු සඳහා, අපි එක් සංවිධානයක් සාදන්නෙමු:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

අපි එහි නෝඩ් සාදන්නෙමු: Orderer CA, Org1 CA, Orderer Peer:

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;

බුද්ධිමය වශයෙන්, මෙහි සියල්ල පැහැදිලි විය යුතුය:

  • Hyperledger Fabric API භාවිතයෙන් demo වැඩසටහන විසින් හඳුන්වනු ලබන කාර්යයන් කිහිපයක් (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) ඇත.
  • SendFrom සහ RefillBalance ශ්‍රිතයන් demo වැඩසටහනට ලැබෙන සිදුවීම් ජනනය කරයි.
  • ස්මාර්ට් කොන්ත්‍රාත්තුවක් ක්ෂණිකව ක්‍රියාත්මක වූ විට ක්ෂණික ශ්‍රිතය වරක් හැඳින්වේ. ඇත්ත වශයෙන්ම, එය එක් වරක් පමණක් නොව, ස්මාර්ට් කොන්ත්රාත්තුවේ අනුවාදය වෙනස් වන සෑම අවස්ථාවකදීම හැඳින්වේ. එබැවින්, හිස් අරාවක් සමඟ ලැයිස්තුවක් ආරම්භ කිරීම නරක අදහසකි, මන්ද දැන්, අපි ස්මාර්ට් කොන්ත්රාත්තුවේ අනුවාදය වෙනස් කරන විට, අපට වත්මන් ලැයිස්තුව අහිමි වනු ඇත. නමුත් කමක් නැහැ, මම ඉගෙන ගන්නවා.)
  • ගිණුම් සහ ගිණුම් ලැයිස්තුවක් JSON දත්ත ව්‍යුහයන් වේ. JS දත්ත හැසිරවීම සඳහා භාවිතා වේ.
  • ඔබට getState ශ්‍රිත ඇමතුම භාවිතයෙන් වත්කමක වත්මන් අගය ලබා ගත හැකි අතර, එය putState භාවිතයෙන් යාවත්කාලීන කළ හැක.
  • ගිණුමක් නිර්මාණය කිරීමේදී, AddAccount ශ්‍රිතය ලෙස හඳුන්වනු ලබන අතර, බ්ලොක්චේන් හි උපරිම ගිණුම් සංඛ්‍යාව (maxAccounts = 5) සඳහා සැසඳීමක් සිදු කෙරේ. තවද මෙහි තදබදයක් ඇත (ඔබ දැක තිබේද?), එය ගිණුම් සංඛ්‍යාවේ නිමක් නැති වැඩි වීමක් ඇති කරයි. එවැනි වැරදි වළක්වා ගත යුතුය)

මීලඟට, අපි ස්මාර්ට් කොන්ත්‍රාත්තුව නාලිකාවට පූරණය කර එය ඉක්මන් කරන්නෙමු:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ස්මාර්ට් කොන්ත්රාත්තුව ස්ථාපනය කිරීමේ ගනුදෙනුව දෙස බලමු:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

අපි බලමු අපේ Channel එක ගැන විස්තර:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

එහි ප්රතිඵලයක් වශයෙන්, IBM වලාකුළෙහි ඇති blockchain ජාලයක පහත රූප සටහන අපට ලැබේ. රූප සටහනෙහි ඇමේසන් වලාකුළෙහි අථත්‍ය සේවාදායකයක ක්‍රියාත්මක වන ආදර්ශන වැඩසටහනක් ද පෙන්වයි (ඊළඟ කොටසේ ඒ ගැන වැඩි විස්තර):

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

Hyperledger Fabric API ඇමතුම් සඳහා GUI නිර්මාණය කිරීම

Hyperledger Fabric හට භාවිතා කළ හැකි API එකක් ඇත:

  • නාලිකාව සාදන්න;
  • නාලිකාවට සම්බන්ධතා;
  • නාලිකාවේ ස්මාර්ට් කොන්ත්රාත්තු ස්ථාපනය කිරීම සහ ක්ෂණිකව ස්ථාපනය කිරීම;
  • ඇමතුම් ගනුදෙනු;
  • බ්ලොක්චේන් පිළිබඳ තොරතුරු ඉල්ලන්න.

යෙදුම් සංවර්ධනය

අපගේ demo වැඩසටහනේදී අපි API භාවිතා කරන්නේ ගනුදෙනු ඇමතීමට සහ තොරතුරු ඉල්ලීමට පමණි අපි දැනටමත් IBM blockchain වේදිකාව භාවිතයෙන් ඉතිරි පියවර සම්පූර්ණ කර ඇත. අපි සම්මත තාක්‍ෂණ තොගයක් භාවිතයෙන් GUI එකක් ලියන්නෙමු: Express.js + Vue.js + Node.js. නවීන වෙබ් යෙදුම් නිර්මාණය කිරීම ආරම්භ කරන්නේ කෙසේද යන්න පිළිබඳව ඔබට වෙනම ලිපියක් ලිවිය හැකිය. මම වඩාත්ම කැමති දේශන මාලාවට සබැඳියක් මෙන්න: Vue.js සහ Express.js භාවිතයෙන් සම්පූර්ණ ස්ටැක් වෙබ් යෙදුම. එහි ප්‍රතිඵලය වන්නේ Google හි ද්‍රව්‍ය නිර්මාණ ශෛලියේ හුරුපුරුදු චිත්‍රක අතුරු මුහුණතක් සහිත සේවාදායක-සේවාදායක යෙදුමකි. සේවාදායකයා සහ සේවාදායකය අතර REST API ඇමතුම් කිහිපයකින් සමන්විත වේ:

  • 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 විස්තරය තැපැල්කරු වෙබ් අඩවිය - HTTP API පරීක්ෂා කිරීම සඳහා සුප්‍රසිද්ධ වැඩසටහනකි.

ඇමේසන් වලාකුළෙහි ආදර්ශන යෙදුම

මම යෙදුම ඇමේසන් වෙත උඩුගත කළ නිසා ... IBM හට තවමත් මගේ ගිණුම උත්ශ්‍රේණි කිරීමට සහ මට අතථ්‍ය සේවාදායකයන් නිර්මාණය කිරීමට ඉඩ ලබා දීමට නොහැකි වී ඇත. වසම වෙත චෙරි එකතු කරන්නේ කෙසේද: www.citcoin.info. මම සර්වර් එක ටික වෙලාවක් ඔන් කරලා තියන්නම්, ඒක ඕෆ් කරන්න, මොකද... කුලියට සත ගලා යන අතර, citcoin කාසි තවමත් කොටස් හුවමාරුවේ ලැයිස්තුගත කර නොමැත) මම ලිපියේ demo හි තිරපිටපත් ඇතුළත් කරමි, එවිට කාර්යයේ තර්කනය පැහැදිලි වේ. ආදර්ශන යෙදුමට හැක්කේ:

  • අවහිර කිරීම ආරම්භ කරන්න;
  • ගිණුමක් සාදන්න (නමුත් දැන් ඔබට නව ගිණුමක් සෑදිය නොහැක, මන්ද ස්මාර්ට් කොන්ත්රාත්තුවේ දක්වා ඇති උපරිම ගිණුම් සංඛ්යාව බ්ලොක්චේන් වෙත ළඟා වී ඇත);
  • ගිණුම් ලැයිස්තුවක් ලබා ගන්න;
  • ඇලිස්, බොබ් සහ ඇලෙක්ස් අතර citcoin කාසි මාරු කරන්න;
  • සිදුවීම් ලබා ගන්න (නමුත් දැන් සිදුවීම් පෙන්වීමට ක්රමයක් නොමැත, එබැවින් සරල බව සඳහා, අතුරු මුහුණත පවසන්නේ සිදුවීම් සඳහා සහය නොදක්වන බවයි);
  • ලොග් ක්රියා.

මුලින්ම අපි blockchain ආරම්භ කරමු:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ඊළඟට, අපි අපේ ගිණුම සාදන්නෙමු, ඉතිරි මුදල සමඟ කාලය නාස්ති නොකරන්න:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

පවතින සියලුම ගිණුම් ලැයිස්තුවක් අපට ලැබේ:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

අපි යවන්නා සහ ලබන්නා තෝරා, ඔවුන්ගේ ශේෂයන් ලබා ගනිමු. යවන්නා සහ ලබන්නා සමාන නම්, ඔහුගේ ගිණුම නැවත පුරවනු ලැබේ:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ලොගයේ අපි ගනුදෙනු ක්‍රියාත්මක කිරීම නිරීක්ෂණය කරමු:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

ඇත්තටම demo program එකත් එක්ක එච්චරයි. බ්ලොක්චේන් හි අපගේ ගනුදෙනුව ඔබට පහතින් දැක ගත හැක.

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

සහ සාමාන්ය ගනුදෙනු ලැයිස්තුව:

Blockchain: අප ගොඩනගා ගත යුතු PoC මොනවාද?

මේ සමඟ, අපි Citcoin ජාලය නිර්මාණය කිරීම සඳහා PoC ක්රියාත්මක කිරීම සාර්ථකව අවසන් කර ඇත. Citcoin සඳහා කාසි මාරු කිරීම සඳහා සම්පූර්ණ ජාලයක් වීමට තවත් කුමක් කළ යුතුද? ඉතා කුඩා:

  • ගිණුම් නිර්මාණය කිරීමේ අදියරේදී, පුද්ගලික / පොදු යතුරක් උත්පාදනය කිරීම ක්රියාත්මක කරන්න. පුද්ගලික යතුර ගිණුම් පරිශීලකයා සමඟ ගබඩා කළ යුතුය, පොදු යතුර බ්ලොක්චේන් තුළ ගබඩා කළ යුතුය.
  • පරිශීලකයා හඳුනා ගැනීමට නමකට වඩා පොදු යතුරක් භාවිතා කරන කාසි හුවමාරුවක් කරන්න.
  • පරිශීලකයාගේ සිට සේවාදායකයට යන ගනුදෙනු ඔහුගේ පුද්ගලික යතුර සමඟ සංකේතනය කරන්න.

නිගමනය

අපි Citcoin ජාලය පහත සඳහන් කාර්යයන් සමඟ ක්‍රියාත්මක කර ඇත: ගිණුමක් එක් කරන්න, ශේෂයක් ලබා ගන්න, ඔබේ ගිණුම ඉහළට ගන්න, එක් ගිණුමකින් තවත් ගිණුමකට කාසි මාරු කරන්න. ඉතින්, PoC එකක් සෑදීමට අපට කොපමණ මුදලක් වැය වේද?

  • ඔබ පොදුවේ blockchain සහ විශේෂයෙන් Hyperledger Fabric අධ්‍යයනය කළ යුතුය;
  • IBM හෝ Amazon clouds භාවිතා කිරීමට ඉගෙන ගන්න;
  • JS ක්‍රමලේඛන භාෂාව සහ සමහර වෙබ් රාමු ඉගෙන ගන්න;
  • සමහර දත්ත ගබඩා කිරීමට අවශ්‍ය වන්නේ blockchain තුළ නොව, වෙනම දත්ත සමුදායක් තුළ නම්, උදාහරණයක් ලෙස, PostgreSQL සමඟ ඒකාබද්ධ කිරීමට ඉගෙන ගන්න;
  • අවසාන වශයෙන් නොව අවම වශයෙන් - ඔබට ලිනක්ස් පිළිබඳ දැනුමක් නොමැතිව නවීන ලෝකයේ ජීවත් විය නොහැක!)

ඇත්ත වශයෙන්ම, එය රොකට් විද්යාව නොවේ, නමුත් ඔබ වෙහෙස මහන්සි වී වැඩ කිරීමට සිදු වනු ඇත!

GitHub හි මූලාශ්‍ර

මූලාශ්‍ර දමා ඇත GitHub. ගබඩාව පිළිබඳ කෙටි විස්තරයක්:
නාමාවලිය «සේවාදායකය» — Node.js සේවාදායකය
නාමාවලිය «සේවාදායකයා» — Node.js සේවාදායකයා
නාමාවලිය «blockchain"(පරාමිති අගයන් සහ යතුරු, ඇත්ත වශයෙන්ම, ක්‍රියා නොකරන අතර ඒවා ලබා දී ඇත්තේ උදාහරණයක් ලෙස පමණි):

  • ගිවිසුම - ස්මාර්ට් කොන්ත්රාත්තුවේ මූලාශ්ර කේතය
  • wallet — Hyperledger Fabric API භාවිතා කිරීම සඳහා පරිශීලක යතුරු.
  • *.cds - ස්මාර්ට් කොන්ත්‍රාත්තු වල සම්පාදනය කරන ලද අනුවාද
  • *.json ගොනු - Hyperledger Fabric API භාවිතා කිරීම සඳහා වින්‍යාස ගොනු සඳහා උදාහරණ

එය ආරම්භය පමණි!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න