பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

உங்கள் கண்கள் பயப்படுகின்றன, உங்கள் கைகள் அரிப்பு!

முந்தைய கட்டுரைகளில், பிளாக்செயின்கள் கட்டமைக்கப்பட்ட தொழில்நுட்பங்களைப் பற்றி நாங்கள் கையாண்டோம் (நாம் என்ன ஒரு பிளாக்செயினை உருவாக்க வேண்டும்?) மற்றும் அவர்களின் உதவியுடன் செயல்படுத்தக்கூடிய வழக்குகள் (நாம் ஏன் ஒரு வழக்கு கட்ட வேண்டும்?) உங்கள் கைகளால் வேலை செய்ய வேண்டிய நேரம் இது! விமானிகள் மற்றும் PoC (கருத்துக்கான ஆதாரம்) செயல்படுத்த, நான் மேகங்களைப் பயன்படுத்த விரும்புகிறேன், ஏனெனில்... உலகில் எங்கிருந்தும் அவற்றை அணுகலாம் மற்றும் பெரும்பாலும், சுற்றுச்சூழலின் கடினமான நிறுவலில் நேரத்தை வீணடிக்க வேண்டிய அவசியமில்லை. முன்னமைக்கப்பட்ட கட்டமைப்புகள் உள்ளன. எனவே, எளிமையான ஒன்றைச் செய்வோம், எடுத்துக்காட்டாக, பங்கேற்பாளர்களிடையே நாணயங்களை மாற்றுவதற்கான நெட்வொர்க் மற்றும் அதை பிட்காயின் என்று அழைக்கலாம். இதற்கு ஐபிஎம் கிளவுட் மற்றும் யுனிவர்சல் பிளாக்செயின் ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் ஆகியவற்றைப் பயன்படுத்துவோம். முதலில், ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் ஏன் உலகளாவிய பிளாக்செயின் என்று அழைக்கப்படுகிறது என்பதைக் கண்டுபிடிப்போம்?

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

ஹைப்பர்லெட்ஜர் துணி - ஒரு உலகளாவிய பிளாக்செயின்

பொதுவாக, உலகளாவிய தகவல் அமைப்பு:

  • சேவையகங்களின் தொகுப்பு மற்றும் வணிக தர்க்கத்தை செயல்படுத்தும் மென்பொருள் கோர்;
  • அமைப்புடன் தொடர்பு கொள்வதற்கான இடைமுகங்கள்;
  • சாதனங்கள்/மக்கள் பதிவு, அங்கீகாரம் மற்றும் அங்கீகாரத்திற்கான கருவிகள்;
  • செயல்பாட்டு மற்றும் காப்பகத் தரவைச் சேமிக்கும் தரவுத்தளம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

Hyperledger Fabric என்பதன் அதிகாரப்பூர்வ பதிப்பை இங்கு படிக்கலாம் வலைத்தளத்தில், மற்றும் சுருக்கமாக, ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் என்பது ஒரு ஓப்பன்சோர்ஸ் தளமாகும், இது தனியார் பிளாக்செயின்களை உருவாக்க மற்றும் JS மற்றும் Go நிரலாக்க மொழிகளில் எழுதப்பட்ட தன்னிச்சையான ஸ்மார்ட் ஒப்பந்தங்களை செயல்படுத்த அனுமதிக்கிறது. ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் கட்டமைப்பைப் பற்றி விரிவாகப் பார்ப்போம், மேலும் இது ஒரு உலகளாவிய அமைப்பாகும், இது தரவைச் சேமிப்பதற்கும் பதிவு செய்வதற்கும் மட்டுமே பிரத்தியேகங்களைக் கொண்டுள்ளது. விவரக்குறிப்பு என்னவென்றால், எல்லா பிளாக்செயின்களிலும் உள்ளதைப் போலவே, பங்கேற்பாளர்கள் ஒருமித்த கருத்தை அடைந்தால் மட்டுமே பிளாக்செயினில் வைக்கப்படும் தொகுதிகளில் தரவு சேமிக்கப்படும் மற்றும் பதிவுசெய்த பிறகு தரவை அமைதியாக திருத்தவோ அல்லது நீக்கவோ முடியாது.

ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் கட்டிடக்கலை

வரைபடம் ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் கட்டமைப்பைக் காட்டுகிறது:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

நிறுவனங்கள் — நிறுவனங்களில் சகாக்கள் உள்ளனர், அதாவது. நிறுவனங்களின் ஆதரவின் காரணமாக பிளாக்செயின் உள்ளது. வெவ்வேறு நிறுவனங்கள் ஒரே சேனலின் பகுதியாக இருக்கலாம்.

சேனல் - சகாக்களை குழுக்களாக இணைக்கும் ஒரு தர்க்கரீதியான அமைப்பு, அதாவது. பிளாக்செயின் குறிப்பிடப்பட்டுள்ளது. ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் ஒரே நேரத்தில் பல பிளாக்செயின்களை வெவ்வேறு வணிக தர்க்கத்துடன் செயலாக்க முடியும்.

உறுப்பினர் சேவைகள் வழங்குநர் (MSP) அடையாளத்தை வழங்குவதற்கும் பாத்திரங்களை வழங்குவதற்கும் CA (சான்றிதழ் ஆணையம்) ஆகும். ஒரு முனையை உருவாக்க, நீங்கள் MSP உடன் தொடர்பு கொள்ள வேண்டும்.

சக முனைகள் - பரிவர்த்தனைகளைச் சரிபார்க்கவும், பிளாக்செயினைச் சேமிக்கவும், ஸ்மார்ட் ஒப்பந்தங்களைச் செயல்படுத்தவும் மற்றும் பயன்பாடுகளுடன் தொடர்பு கொள்ளவும். சகாக்களுக்கு ஒரு அடையாளம் (டிஜிட்டல் சான்றிதழ்) உள்ளது, இது MSP ஆல் வழங்கப்படுகிறது. Bitcoin அல்லது Etherium நெட்வொர்க்கைப் போலல்லாமல், எல்லா முனைகளும் சம உரிமைகளைக் கொண்டிருக்கின்றன, Hyperledger Fabric முனைகளில் வெவ்வேறு பாத்திரங்களை வகிக்கின்றன:

  • இணையலாம் சக நண்பர்களை அங்கீகரிக்கிறது (EP) மற்றும் ஸ்மார்ட் ஒப்பந்தங்களைச் செயல்படுத்தவும்.
  • ஒப்பனை செய்தல் (CP) - பிளாக்செயினில் தரவை மட்டும் சேமித்து "உலக நிலையை" புதுப்பிக்கவும்.
  • ஆங்கர் பீர் (ஏபி) - பல நிறுவனங்கள் பிளாக்செயினில் பங்கேற்றால், அவர்களுக்கிடையேயான தொடர்புக்கு ஆங்கர் பியர்ஸ் பயன்படுத்தப்படும். ஒவ்வொரு நிறுவனத்திலும் ஒன்று அல்லது அதற்கு மேற்பட்ட நங்கூரர்கள் இருக்க வேண்டும். AP ஐப் பயன்படுத்தி, ஒரு நிறுவனத்தில் உள்ள எந்தவொரு சக நிறுவனமும் மற்ற நிறுவனங்களில் உள்ள அனைத்து தோழர்களைப் பற்றிய தகவலைப் பெறலாம். AP களுக்கு இடையில் தகவலை ஒத்திசைக்கப் பயன்படுகிறது வதந்தி நெறிமுறை.
  • தலைவர் பீர் - ஒரு நிறுவனத்தில் பல சகாக்கள் இருந்தால், சக தலைவர் மட்டுமே ஆர்டர் செய்யும் சேவையிலிருந்து தொகுதிகளைப் பெற்று மற்ற சகாக்களுக்கு வழங்குவார். தலைவர் நிலையாக குறிப்பிடப்படலாம் அல்லது நிறுவனத்தில் உள்ள சகாக்களால் மாறும் வகையில் தேர்ந்தெடுக்கப்படலாம். வதந்திகள் நெறிமுறை தலைவர்களைப் பற்றிய தகவல்களை ஒத்திசைக்கவும் பயன்படுத்தப்படுகிறது.

சொத்துக்கள் - மதிப்புள்ள மற்றும் பிளாக்செயினில் சேமிக்கப்படும் நிறுவனங்கள். மேலும் குறிப்பாக, இது JSON வடிவத்தில் உள்ள முக்கிய மதிப்பு தரவு. இந்தத் தரவுதான் பிளாக்செயினில் பதிவு செய்யப்பட்டுள்ளது. அவை பிளாக்செயினில் சேமிக்கப்பட்ட ஒரு வரலாறு மற்றும் "உலக நிலை" தரவுத்தளத்தில் சேமிக்கப்படும் தற்போதைய நிலை ஆகியவற்றைக் கொண்டுள்ளன. வணிகப் பணிகளைப் பொறுத்து தரவு கட்டமைப்புகள் தன்னிச்சையாக நிரப்பப்படுகின்றன. தேவையான புலங்கள் எதுவும் இல்லை, சொத்துக்கள் உரிமையாளர் மற்றும் மதிப்புமிக்கதாக இருக்க வேண்டும் என்பதே ஒரே பரிந்துரை.

பேரேடு — பிளாக்செயின் மற்றும் வேர்ட் ஸ்டேட் டேட்டாபேஸ் ஆகியவற்றைக் கொண்டுள்ளது, இது சொத்துக்களின் தற்போதைய நிலையைச் சேமிக்கிறது. உலக அரசு LevelDB அல்லது CouchDB ஐப் பயன்படுத்துகிறது.

ஸ்மார்ட் ஒப்பந்தம் - ஸ்மார்ட் ஒப்பந்தங்களைப் பயன்படுத்தி, அமைப்பின் வணிக தர்க்கம் செயல்படுத்தப்படுகிறது. Hyperledger Fabric இல், ஸ்மார்ட் ஒப்பந்தங்கள் செயின்கோடு என்று அழைக்கப்படுகின்றன. சங்கிலிக் குறியீட்டைப் பயன்படுத்தி, சொத்துக்கள் மற்றும் அவற்றின் மீதான பரிவர்த்தனைகள் குறிப்பிடப்படுகின்றன. தொழில்நுட்ப அடிப்படையில், ஸ்மார்ட் ஒப்பந்தங்கள் என்பது JS அல்லது Go நிரலாக்க மொழிகளில் செயல்படுத்தப்படும் மென்பொருள் தொகுதிகள் ஆகும்.

ஒப்புதல் கொள்கை - ஒவ்வொரு செயின்கோடுக்கும், ஒரு பரிவர்த்தனைக்கு எத்தனை உறுதிப்படுத்தல்களை எதிர்பார்க்க வேண்டும் மற்றும் யாரிடமிருந்து நீங்கள் கொள்கையை அமைக்கலாம். கொள்கை அமைக்கப்படவில்லை என்றால், இயல்புநிலை: "சேனலில் உள்ள எந்த நிறுவனத்தைச் சேர்ந்த உறுப்பினராலும் பரிவர்த்தனை உறுதிப்படுத்தப்பட வேண்டும்." கொள்கைகளின் எடுத்துக்காட்டுகள்:

  • பரிவர்த்தனை நிறுவனத்தின் எந்த நிர்வாகியாலும் அங்கீகரிக்கப்பட வேண்டும்;
  • நிறுவனத்தின் உறுப்பினர் அல்லது வாடிக்கையாளரால் உறுதிப்படுத்தப்பட வேண்டும்;
  • எந்தவொரு சக நிறுவனத்தாலும் உறுதிப்படுத்தப்பட வேண்டும்.

ஆர்டர் சேவை - பரிவர்த்தனைகளைத் தொகுதிகளாகப் பொதி செய்து, சேனலில் உள்ள சகாக்களுக்கு அனுப்புகிறது. நெட்வொர்க்கில் உள்ள அனைத்து சகாக்களுக்கும் செய்திகளை வழங்குவதற்கு உத்தரவாதம் அளிக்கிறது. தொழில்துறை அமைப்புகளுக்கு பயன்படுத்தப்படுகிறது காஃப்கா செய்தி தரகர், வளர்ச்சி மற்றும் சோதனைக்காக சோலோ.

கால்ஃப்ளோ

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

  • பயன்பாடு Go, Node.js அல்லது Java SDK ஐப் பயன்படுத்தி Hyperledger Fabric உடன் தொடர்பு கொள்கிறது;
  • கிளையன்ட் ஒரு tx பரிவர்த்தனையை உருவாக்கி, அதை சக நண்பர்களுக்கு அனுப்புகிறார்;
  • பியர் வாடிக்கையாளரின் கையொப்பத்தைச் சரிபார்த்து, பரிவர்த்தனையை முடித்து, ஒப்புதல் கையொப்பத்தை வாடிக்கையாளருக்கு திருப்பி அனுப்புகிறார். செயின்கோட் அங்கீகரிக்கும் பியர் மீது மட்டுமே செயல்படுத்தப்படுகிறது, மேலும் அதன் செயல்பாட்டின் முடிவு அனைத்து சகாக்களுக்கும் அனுப்பப்படும். வேலையின் இந்த வழிமுறையானது PBFT (நடைமுறை பைசண்டைன் தவறு சகிப்புத்தன்மை) ஒருமித்த கருத்து என்று அழைக்கப்படுகிறது. வேறுபடுகிறது கிளாசிக் BFT செய்தி அனுப்பப்பட்டது மற்றும் உறுதிப்படுத்தல் அனைத்து பங்கேற்பாளர்களிடமிருந்தும் எதிர்பார்க்கப்படுகிறது, ஆனால் ஒரு குறிப்பிட்ட தொகுப்பிலிருந்து மட்டுமே;
  • வாடிக்கையாளர் ஒப்புதல் கொள்கையுடன் தொடர்புடைய பதில்களின் எண்ணிக்கையைப் பெற்ற பிறகு, அவர் பரிவர்த்தனையை ஆர்டர் செய்யும் சேவைக்கு அனுப்புகிறார்;
  • ஆர்டர் செய்யும் சேவை ஒரு தொகுதியை உருவாக்கி, அதைச் செய்யும் அனைத்து சகாக்களுக்கும் அனுப்புகிறது. ஆர்டர் செய்யும் சேவை தொகுதிகளின் தொடர் பதிவை உறுதி செய்கிறது, இது லெட்ஜர் ஃபோர்க் என்று அழைக்கப்படுவதை நீக்குகிறது ("முட்கரண்டி" பகுதியைப் பார்க்கவும்);
  • சகாக்கள் ஒரு தொகுதியைப் பெறுகிறார்கள், ஒப்புதல் கொள்கையை மீண்டும் சரிபார்த்து, தொகுதியை பிளாக்செயினுக்கு எழுதி, "உலக நிலை" DB இல் நிலையை மாற்றவும்.

அந்த. இது முனைகளுக்கு இடையில் பாத்திரங்களின் பிரிவை ஏற்படுத்துகிறது. பிளாக்செயின் அளவிடக்கூடியது மற்றும் பாதுகாப்பானது என்பதை இது உறுதி செய்கிறது:

  • ஸ்மார்ட் கான்ட்ராக்ட்கள் (செயின்கோடு) சகாக்களை அங்கீகரிக்கின்றன. இது ஸ்மார்ட் ஒப்பந்தங்களின் இரகசியத்தன்மையை உறுதி செய்கிறது, ஏனெனில் இது அனைத்து பங்கேற்பாளர்களாலும் சேமிக்கப்படுவதில்லை, ஆனால் சகாக்களை ஆதரிப்பதன் மூலம் மட்டுமே.
  • ஆர்டர் விரைவாக வேலை செய்ய வேண்டும். ஆர்டர் செய்வது ஒரு தொகுதியை மட்டுமே உருவாக்குகிறது மற்றும் அதை ஒரு நிலையான தலைவர் சகாக்களுக்கு அனுப்புகிறது என்பதன் மூலம் இது உறுதி செய்யப்படுகிறது.
  • கமிட்டிங் சகாக்கள் பிளாக்செயினை மட்டுமே சேமிக்கிறார்கள் - அவற்றில் பல இருக்கலாம் மற்றும் அவர்களுக்கு அதிக சக்தி மற்றும் உடனடி செயல்பாடு தேவையில்லை.

Hyperledger Fabric இன் கட்டடக்கலை தீர்வுகள் மற்றும் அது ஏன் இப்படி வேலை செய்கிறது மற்றும் இல்லையெனில் இல்லை என்பது பற்றிய கூடுதல் விவரங்களை இங்கே காணலாம்: கட்டிடக்கலை தோற்றம் அல்லது இங்கே: ஹைப்பர்லெட்ஜர் துணி: அனுமதிக்கப்பட்ட பிளாக்செயின்களுக்கான விநியோகிக்கப்பட்ட இயக்க முறைமை.

எனவே, ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் என்பது உண்மையிலேயே உலகளாவிய அமைப்பாகும், இதன் மூலம் உங்களால் முடியும்:

  • ஸ்மார்ட் ஒப்பந்த பொறிமுறையைப் பயன்படுத்தி தன்னிச்சையான வணிக தர்க்கத்தை செயல்படுத்தவும்;
  • JSON வடிவத்தில் பிளாக்செயின் தரவுத்தளத்திலிருந்து தரவைப் பதிவுசெய்து பெறவும்;
  • சான்றிதழ் அதிகாரத்தைப் பயன்படுத்தி API அணுகலை வழங்கவும் மற்றும் சரிபார்க்கவும்.

Hyperledger Fabric இன் பிரத்தியேகங்களைப் பற்றி இப்போது நாம் கொஞ்சம் புரிந்துகொண்டோம், இறுதியாக பயனுள்ள ஒன்றைச் செய்வோம்!

பிளாக்செயினை வரிசைப்படுத்துகிறது

பிரச்சனை அறிக்கை

பின்வரும் செயல்பாடுகளுடன் Citcoin நெட்வொர்க்கை செயல்படுத்துவதே பணி: ஒரு கணக்கை உருவாக்கவும், சமநிலையைப் பெறவும், உங்கள் கணக்கை நிரப்பவும், ஒரு கணக்கிலிருந்து மற்றொரு கணக்கிற்கு நாணயங்களை மாற்றவும். ஒரு பொருள் மாதிரியை வரைவோம், அதை மேலும் ஸ்மார்ட் ஒப்பந்தத்தில் செயல்படுத்துவோம். எனவே, எங்களிடம் பெயர்களால் அடையாளம் காணப்பட்ட கணக்குகள் மற்றும் இருப்பு மற்றும் கணக்குகளின் பட்டியல் இருக்கும். கணக்குகள் மற்றும் கணக்குகளின் பட்டியல், ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் சொத்துகளின் அடிப்படையில். அதன்படி, அவர்களுக்கு ஒரு வரலாறு மற்றும் தற்போதைய நிலை உள்ளது. நான் இதை தெளிவாக வரைய முயற்சிக்கிறேன்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

"உலக நிலை" தரவுத்தளத்தில் சேமிக்கப்பட்டுள்ள தற்போதைய நிலையே முதன்மையான புள்ளிவிவரங்கள். அவற்றின் கீழே பிளாக்செயினில் சேமிக்கப்பட்ட வரலாற்றைக் காட்டும் புள்ளிவிவரங்கள் உள்ளன. சொத்துக்களின் தற்போதைய நிலை பரிவர்த்தனைகளால் மாற்றப்படுகிறது. சொத்து முழுவதுமாக மட்டுமே மாறுகிறது, எனவே பரிவர்த்தனையின் விளைவாக, ஒரு புதிய பொருள் உருவாக்கப்படுகிறது, மேலும் சொத்தின் தற்போதைய மதிப்பு வரலாற்றில் செல்கிறது.

ஐபிஎம் கிளவுட்

நாங்கள் ஒரு கணக்கை உருவாக்குகிறோம் ஐபிஎம் கிளவுட். பிளாக்செயின் இயங்குதளத்தைப் பயன்படுத்த, அதை Pay-As-You-Go என மேம்படுத்த வேண்டும். இந்த செயல்முறை விரைவாக இருக்காது, ஏனென்றால்... IBM கூடுதல் தகவல்களைக் கோருகிறது மற்றும் அதை கைமுறையாக சரிபார்க்கிறது. ஒரு நேர்மறையான குறிப்பில், ஐபிஎம்மில் ஹைப்பர்லெட்ஜர் ஃபேப்ரிக்கை தங்கள் கிளவுட்டில் பயன்படுத்த அனுமதிக்கும் நல்ல பயிற்சி பொருட்கள் உள்ளன என்று என்னால் கூற முடியும். பின்வரும் தொடர் கட்டுரைகள் மற்றும் எடுத்துக்காட்டுகள் எனக்கு பிடித்திருந்தது:

பின்வருபவை IBM Blockchain இயங்குதளத்தின் திரைக்காட்சிகள். இது ஒரு பிளாக்செயினை எவ்வாறு உருவாக்குவது என்பதற்கான அறிவுறுத்தல் அல்ல, ஆனால் பணியின் நோக்கத்தின் ஒரு ஆர்ப்பாட்டம். எனவே, எங்கள் நோக்கங்களுக்காக, நாங்கள் ஒரு அமைப்பை உருவாக்குகிறோம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

நாங்கள் அதில் முனைகளை உருவாக்குகிறோம்: ஆர்டர் CA, Org1 CA, Orderer Peer:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

நாங்கள் பயனர்களை உருவாக்குகிறோம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

ஒரு சேனலை உருவாக்கி அதை citcoin என்று அழைக்கவும்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

அடிப்படையில் சேனல் ஒரு பிளாக்செயின், எனவே இது பிளாக் பூஜ்ஜியத்துடன் தொடங்குகிறது (ஆதியாகமம் தொகுதி):

பிளாக்செயின்: நாம் என்ன 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;

உள்ளுணர்வாக, இங்கே எல்லாம் தெளிவாக இருக்க வேண்டும்:

  • ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் API ஐப் பயன்படுத்தி டெமோ நிரல் அழைக்கும் பல செயல்பாடுகள் (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) உள்ளன.
  • SendFrom மற்றும் RefillBalance செயல்பாடுகள் டெமோ நிரல் பெறும் நிகழ்வுகளை உருவாக்குகின்றன.
  • ஒரு ஸ்மார்ட் ஒப்பந்தம் உடனடியாக செயல்படுத்தப்படும் போது உடனடி செயல்பாடு ஒருமுறை அழைக்கப்படுகிறது. உண்மையில், இது ஒரு முறை அல்ல, ஆனால் ஒவ்வொரு முறையும் ஸ்மார்ட் ஒப்பந்த பதிப்பு மாறுகிறது. எனவே, ஒரு பட்டியலை வெற்று வரிசையுடன் துவக்குவது ஒரு மோசமான யோசனை, ஏனெனில் இப்போது, ​​ஸ்மார்ட் ஒப்பந்தத்தின் பதிப்பை மாற்றும்போது, ​​தற்போதைய பட்டியலை இழப்போம். ஆனால் பரவாயில்லை, நான் கற்றுக் கொண்டிருக்கிறேன்).
  • கணக்குகள் மற்றும் கணக்குகளின் பட்டியல் JSON தரவு கட்டமைப்புகள். தரவு கையாளுதலுக்கு JS பயன்படுத்தப்படுகிறது.
  • நீங்கள் getState செயல்பாட்டு அழைப்பைப் பயன்படுத்தி ஒரு சொத்தின் தற்போதைய மதிப்பைப் பெறலாம் மற்றும் புட்ஸ்டேட்டைப் பயன்படுத்தி அதைப் புதுப்பிக்கலாம்.
  • ஒரு கணக்கை உருவாக்கும் போது, ​​AddAccount செயல்பாடு அழைக்கப்படுகிறது, இதில் பிளாக்செயினில் (maxAccounts = 5) அதிகபட்ச கணக்குகளின் ஒப்பீடு செய்யப்படுகிறது. இங்கே ஒரு நெரிசல் உள்ளது (நீங்கள் கவனித்தீர்களா?), இது கணக்குகளின் எண்ணிக்கையில் முடிவில்லாத அதிகரிப்புக்கு வழிவகுக்கிறது. இதுபோன்ற தவறுகள் தவிர்க்கப்பட வேண்டும்)

அடுத்து, ஸ்மார்ட் ஒப்பந்தத்தை சேனலில் ஏற்றி, அதை உடனடியாகச் செய்கிறோம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

ஸ்மார்ட் ஒப்பந்தத்தை நிறுவுவதற்கான பரிவர்த்தனையைப் பார்ப்போம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

நமது சேனலைப் பற்றிய விவரங்களைப் பார்ப்போம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

இதன் விளைவாக, ஐபிஎம் கிளவுட்டில் பிளாக்செயின் நெட்வொர்க்கின் பின்வரும் வரைபடத்தைப் பெறுகிறோம். ஒரு மெய்நிகர் சேவையகத்தில் அமேசான் கிளவுட்டில் இயங்கும் டெமோ நிரலையும் வரைபடம் காட்டுகிறது (அடுத்த பகுதியில் அதைப் பற்றி மேலும்):

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் API அழைப்புகளுக்கு GUI ஐ உருவாக்குதல்

ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் API ஐக் கொண்டுள்ளது, இதைப் பயன்படுத்தலாம்:

  • சேனலை உருவாக்கவும்;
  • சேனலுக்கு இணையான இணைப்புகள்;
  • சேனலில் ஸ்மார்ட் ஒப்பந்தங்களை நிறுவுதல் மற்றும் உடனடிப்படுத்துதல்;
  • அழைப்பு பரிவர்த்தனைகள்;
  • பிளாக்செயின் பற்றிய தகவலைக் கோரவும்.

பயன்பாட்டு வளர்ச்சி

எங்கள் டெமோ திட்டத்தில், பரிவர்த்தனைகளை அழைப்பதற்கும் தகவல்களைக் கோருவதற்கும் மட்டுமே API ஐப் பயன்படுத்துவோம், ஏனெனில் ஐபிஎம் பிளாக்செயின் தளத்தைப் பயன்படுத்தி மீதமுள்ள படிகளை நாங்கள் ஏற்கனவே முடித்துள்ளோம். நிலையான தொழில்நுட்ப அடுக்கைப் பயன்படுத்தி GUI ஐ எழுதுகிறோம்: Express.js + Vue.js + Node.js. நவீன வலை பயன்பாடுகளை எவ்வாறு உருவாக்குவது என்பது பற்றி நீங்கள் ஒரு தனி கட்டுரை எழுதலாம். நான் மிகவும் விரும்பிய தொடர் விரிவுரைகளுக்கான இணைப்பை இங்கே தருகிறேன்: Vue.js & Express.js ஐப் பயன்படுத்தி முழு அடுக்கு வலை பயன்பாடு. இதன் விளைவாக, கூகுளின் மெட்டீரியல் டிசைன் பாணியில் நன்கு அறியப்பட்ட வரைகலை இடைமுகத்துடன் கூடிய கிளையன்ட்-சர்வர் பயன்பாடு ஆகும். கிளையன்ட் மற்றும் சர்வர் இடையேயான REST API பல அழைப்புகளைக் கொண்டுள்ளது:

  • HyperledgerDemo/v1/init - பிளாக்செயினை துவக்கவும்;
  • HyperledgerDemo/v1/accounts/list — அனைத்து கணக்குகளின் பட்டியலையும் பெறவும்;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — Bob கணக்கை உருவாக்கவும்;
  • HyperledgerDemo/v1/info?account=Bob — பாப் கணக்கைப் பற்றிய தகவலைப் பெறுங்கள்;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 — இரண்டு நாணயங்களை பாபிலிருந்து ஆலிஸுக்கு மாற்றவும்;
  • HyperledgerDemo/v1/disconnect - பிளாக்செயினுக்கான இணைப்பை மூடு.

எடுத்துக்காட்டுகளுடன் API இன் விளக்கம் சேர்க்கப்பட்டுள்ளது போஸ்ட்மேன் இணையதளம் - HTTP API சோதனை செய்வதற்கான நன்கு அறியப்பட்ட நிரல்.

அமேசான் கிளவுட்டில் டெமோ பயன்பாடு

நான் பயன்பாட்டை அமேசானில் பதிவேற்றினேன், ஏனெனில்... IBM ஆல் இன்னும் எனது கணக்கை மேம்படுத்த முடியவில்லை மற்றும் மெய்நிகர் சேவையகங்களை உருவாக்க என்னை அனுமதிக்கவில்லை. டொமைனில் செர்ரியை எவ்வாறு சேர்ப்பது: www.citcoin.info. நான் சேவையகத்தை சிறிது நேரம் ஆன் செய்வேன், பின்னர் அதை அணைக்கிறேன், ஏனென்றால்... வாடகைக்கு சென்ட்கள் குறைந்து வருகின்றன, மேலும் சிட்காயின் நாணயங்கள் இன்னும் பங்குச் சந்தையில் பட்டியலிடப்படவில்லை) கட்டுரையில் டெமோவின் ஸ்கிரீன் ஷாட்களைச் சேர்த்துள்ளேன், இதனால் வேலையின் தர்க்கம் தெளிவாக உள்ளது. டெமோ பயன்பாடு முடியும்:

  • பிளாக்செயினை துவக்கவும்;
  • ஒரு கணக்கை உருவாக்கவும் (ஆனால் இப்போது நீங்கள் ஒரு புதிய கணக்கை உருவாக்க முடியாது, ஏனெனில் ஸ்மார்ட் ஒப்பந்தத்தில் குறிப்பிடப்பட்ட அதிகபட்ச கணக்குகள் பிளாக்செயினில் எட்டப்பட்டுள்ளன);
  • கணக்குகளின் பட்டியலைப் பெறுங்கள்;
  • ஆலிஸ், பாப் மற்றும் அலெக்ஸ் இடையே சிட்காயின் நாணயங்களை மாற்றவும்;
  • நிகழ்வுகளைப் பெறுக (ஆனால் இப்போது நிகழ்வுகளைக் காட்ட வழி இல்லை, எனவே எளிமைக்காக, நிகழ்வுகள் ஆதரிக்கப்படவில்லை என்று இடைமுகம் கூறுகிறது);
  • பதிவு நடவடிக்கைகள்.

முதலில் நாம் பிளாக்செயினை துவக்குகிறோம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

அடுத்து, நாங்கள் எங்கள் கணக்கை உருவாக்குகிறோம், இருப்புடன் நேரத்தை வீணாக்காதீர்கள்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

கிடைக்கக்கூடிய அனைத்து கணக்குகளின் பட்டியலையும் நாங்கள் பெறுகிறோம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

அனுப்புநரையும் பெறுநரையும் தேர்ந்தெடுத்து, அவர்களின் நிலுவைகளைப் பெறுவோம். அனுப்புநரும் பெறுநரும் ஒரே மாதிரியாக இருந்தால், அவருடைய கணக்கு நிரப்பப்படும்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

பதிவில் பரிவர்த்தனைகளின் செயல்பாட்டை நாங்கள் கண்காணிக்கிறோம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

உண்மையில், டெமோ நிரலுடன் அவ்வளவுதான். பிளாக்செயினில் எங்கள் பரிவர்த்தனையை நீங்கள் கீழே காணலாம்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

மற்றும் பரிவர்த்தனைகளின் பொதுவான பட்டியல்:

பிளாக்செயின்: நாம் என்ன PoC உருவாக்க வேண்டும்?

இதன் மூலம், சிட்காயின் நெட்வொர்க்கை உருவாக்குவதற்கான PoC-ஐ செயல்படுத்துவதை வெற்றிகரமாக முடித்துள்ளோம். சிட்காயின் நாணயங்களை மாற்றுவதற்கான முழு அளவிலான நெட்வொர்க்காக மாற வேறு என்ன செய்ய வேண்டும்? மிகக் குறைவு:

  • கணக்கு உருவாக்கும் கட்டத்தில், தனிப்பட்ட / பொது விசையை உருவாக்குவதை செயல்படுத்தவும். தனிப்பட்ட விசையானது கணக்குப் பயனரிடம் சேமிக்கப்பட வேண்டும், பொது விசை பிளாக்செயினில் சேமிக்கப்பட வேண்டும்.
  • பயனரை அடையாளம் காண ஒரு பெயரைக் காட்டிலும் ஒரு பொது விசை பயன்படுத்தப்படும் நாணய பரிமாற்றத்தை உருவாக்கவும்.
  • பயனரிடமிருந்து சர்வருக்குச் செல்லும் பரிவர்த்தனைகளை அவரது தனிப்பட்ட விசை மூலம் குறியாக்கம் செய்யவும்.

முடிவுக்கு

பின்வரும் செயல்பாடுகளுடன் Citcoin நெட்வொர்க்கை நாங்கள் செயல்படுத்தியுள்ளோம்: கணக்கைச் சேர்க்கவும், இருப்பைப் பெறவும், உங்கள் கணக்கை நிரப்பவும், ஒரு கணக்கிலிருந்து மற்றொரு கணக்கிற்கு நாணயங்களை மாற்றவும். எனவே, ஒரு PoC உருவாக்க எங்களுக்கு என்ன செலவானது?

  • நீங்கள் பொதுவாக பிளாக்செயின் மற்றும் குறிப்பாக ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் படிக்க வேண்டும்;
  • ஐபிஎம் அல்லது அமேசான் மேகங்களைப் பயன்படுத்த கற்றுக்கொள்ளுங்கள்;
  • JS நிரலாக்க மொழி மற்றும் சில வலை கட்டமைப்பைக் கற்றுக்கொள்ளுங்கள்;
  • சில தரவுகளை பிளாக்செயினில் சேமிக்காமல், ஒரு தனி தரவுத்தளத்தில் சேமிக்க வேண்டும் என்றால், பின் ஒருங்கிணைக்க கற்றுக்கொள்ளுங்கள், எடுத்துக்காட்டாக, PostgreSQL உடன்;
  • கடைசியாக ஆனால் குறைந்தது அல்ல - லினக்ஸ் பற்றிய அறிவு இல்லாமல் நீங்கள் நவீன உலகில் வாழ முடியாது!)

நிச்சயமாக, இது ராக்கெட் அறிவியல் அல்ல, ஆனால் நீங்கள் கடினமாக உழைக்க வேண்டும்!

GitHub இல் உள்ள ஆதாரங்கள்

ஆதாரங்கள் வைக்கப்பட்டுள்ளன மகிழ்ச்சியா. களஞ்சியத்தின் சுருக்கமான விளக்கம்:
அட்டவணை "சர்வர்» — Node.js சர்வர்
அட்டவணை "வாடிக்கையாளர்» — Node.js கிளையன்ட்
அட்டவணை "Blockchain"(அளவுரு மதிப்புகள் மற்றும் விசைகள், நிச்சயமாக, வேலை செய்யாதவை மற்றும் ஒரு உதாரணத்திற்கு மட்டுமே கொடுக்கப்பட்டுள்ளன):

  • ஒப்பந்தம் - ஸ்மார்ட் ஒப்பந்த மூலக் குறியீடு
  • wallet — Hyperledger Fabric API ஐப் பயன்படுத்துவதற்கான பயனர் விசைகள்.
  • *.cds - ஸ்மார்ட் ஒப்பந்தங்களின் தொகுக்கப்பட்ட பதிப்புகள்
  • *.json கோப்புகள் - ஹைப்பர்லெட்ஜர் ஃபேப்ரிக் API ஐப் பயன்படுத்துவதற்கான உள்ளமைவு கோப்புகளின் எடுத்துக்காட்டுகள்

இது ஆரம்பம் மட்டுமே!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்