Ethereum-ஐப் புரிந்துகொள்ள விரும்புகிறீர்களா?
இந்த வெள்ளையறிக்கை Ethereum தொடங்கப்படுவதற்கு முன்பு, 2014 இல் வெளியிடப்பட்டது. 10+ ஆண்டுகால மேம்பாடு, முக்கிய மேம்படுத்தல்கள் மற்றும் சுற்றுச்சூழல் வளர்ச்சிக்குப் பிறகு, அசல் வெள்ளையறிக்கை இன்றைய Ethereum-ஐப் பிரதிபலிக்கவில்லை.
2014 முதல் என்ன மாறியுள்ளது?
இது பல ஆண்டுகள் பழமையானதாக இருந்தாலும், Ethereum மற்றும் அதன் தொலைநோக்குப் பார்வையின் துல்லியமான பிரதிநிதித்துவமாகவும் பயனுள்ள குறிப்புதவியாகவும் தொடர்ந்து செயல்படுவதால், கீழே உள்ள அசல் அறிக்கையை நாங்கள் பராமரிக்கிறோம்.
Ethereum வெள்ளை அறிக்கை
அடுத்த தலைமுறை ஸ்மார்ட் ஒப்பந்தம் மற்றும் பரவலாக்கப்பட்ட பயன்பாட்டு தளம்
2009 இல் சடோஷி நகமோட்டோவால் உருவாக்கப்பட்ட Bitcoin, பணம் மற்றும் நாணயத் துறையில் ஒரு தீவிரமான வளர்ச்சியாகப் பாராட்டப்படுகிறது, ஏனெனில் இது எந்தவொரு ஆதரவோ அல்லது "உள்ளார்ந்த மதிப்போ (opens in a new tab)" இல்லாத, அதே நேரத்தில் மையப்படுத்தப்பட்ட வழங்குநரோ அல்லது கட்டுப்பாட்டாளரோ இல்லாத டிஜிட்டல் சொத்தின் முதல் உதாரணமாகும். இருப்பினும், Bitcoin பரிசோதனையின் மற்றொரு, விவாதிக்கக்கூடிய வகையில் மிகவும் முக்கியமான பகுதி, விநியோகிக்கப்பட்ட ஒருமித்த கருத்தின் (distributed consensus) கருவியாக இருக்கும் அடிப்படை பிளாக்செயின் தொழில்நுட்பமாகும், மேலும் Bitcoin-இன் இந்த மற்றொரு அம்சத்தின் மீது கவனம் வேகமாகத் திரும்பத் தொடங்கியுள்ளது. பிளாக்செயின் தொழில்நுட்பத்தின் பொதுவாகக் குறிப்பிடப்படும் மாற்றுப் பயன்பாடுகளில், தனிப்பயன் நாணயங்கள் மற்றும் நிதிக் கருவிகளைப் பிரதிநிதித்துவப்படுத்த பிளாக்செயினில் உள்ள டிஜிட்டல் சொத்துகளைப் பயன்படுத்துதல் ("வண்ண நாணயங்கள் (colored coins) (opens in a new tab)"), அடிப்படை பௌதீகச் சாதனத்தின் உரிமை ("ஸ்மார்ட் சொத்து (smart property) (opens in a new tab)"), டொமைன் பெயர்கள் போன்ற பூஞ்சையற்ற (non-fungible) சொத்துகள் ("Namecoin (opens in a new tab)"), அத்துடன் தன்னிச்சையான விதிகளைச் செயல்படுத்தும் குறியீட்டின் மூலம் டிஜிட்டல் சொத்துகளை நேரடியாகக் கட்டுப்படுத்தும் மிகவும் சிக்கலான பயன்பாடுகள் ("ஸ்மார்ட் ஒப்பந்தங்கள் (smart contracts) (opens in a new tab)") அல்லது பிளாக்செயின் அடிப்படையிலான "பரவலாக்கப்பட்ட தன்னாட்சி அமைப்புகள் (decentralized autonomous organizations) (opens in a new tab)" (DAOs) ஆகியவை அடங்கும். Ethereum வழங்க உத்தேசித்துள்ளது என்னவென்றால், முழுமையான டூரிங்-கம்ப்ளீட் (Turing-complete) நிரலாக்க மொழியைக் கொண்ட ஒரு பிளாக்செயினை உருவாக்குவதாகும், இது தன்னிச்சையான நிலை மாற்றச் செயல்பாடுகளை (state transition functions) குறியாக்கம் செய்யப் பயன்படும் "ஒப்பந்தங்களை" உருவாக்கப் பயன்படுகிறது, இதன் மூலம் பயனர்கள் மேலே விவரிக்கப்பட்ட எந்தவொரு அமைப்புகளையும், அத்துடன் நாம் இதுவரை கற்பனை செய்யாத பல அமைப்புகளையும், சில வரிக் குறியீடுகளில் தர்க்கத்தை எழுதுவதன் மூலம் எளிதாக உருவாக்க அனுமதிக்கிறது.
பிட்காயின் மற்றும் தற்போதுள்ள கருத்துகளுக்கான அறிமுகம்
வரலாறு
பரவலாக்கப்பட்ட டிஜிட்டல் நாணயம் மற்றும் சொத்து பதிவேடுகள் போன்ற மாற்று பயன்பாடுகளின் கருத்து பல தசாப்தங்களாக இருந்து வருகிறது. 1980கள் மற்றும் 1990களின் அநாமதேய இ-கேஷ் (e-cash) நெறிமுறைகள், பெரும்பாலும் Chaumian blinding எனப்படும் கிரிப்டோகிராஃபிக் அடிப்படையை நம்பியிருந்தன, இவை அதிக அளவிலான தனியுரிமையுடன் கூடிய நாணயத்தை வழங்கின, ஆனால் மையப்படுத்தப்பட்ட இடைத்தரகரை நம்பியிருந்ததால் இந்த நெறிமுறைகள் பெருமளவில் கவனத்தை ஈர்க்கத் தவறின. 1998 இல், Wei Dai-இன் b-money (opens in a new tab) கணக்கீட்டு புதிர்களைத் தீர்ப்பதன் மூலமும் பரவலாக்கப்பட்ட ஒருமித்த கருத்தின் மூலமும் பணத்தை உருவாக்கும் யோசனையை அறிமுகப்படுத்திய முதல் முன்மொழிவாக அமைந்தது, ஆனால் பரவலாக்கப்பட்ட ஒருமித்த கருத்தை உண்மையில் எவ்வாறு செயல்படுத்தலாம் என்பது குறித்த விவரங்கள் அந்த முன்மொழிவில் குறைவாகவே இருந்தன. 2005 இல், Hal Finney "reusable proofs of work (opens in a new tab)" என்ற கருத்தை அறிமுகப்படுத்தினார், இது b-money-இன் யோசனைகளுடன் Adam Back-இன் கணக்கீட்டு ரீதியாக கடினமான Hashcash புதிர்களையும் பயன்படுத்தி ஒரு கிரிப்டோகரன்சிக்கான கருத்தை உருவாக்கும் அமைப்பாகும், ஆனால் மீண்டும் இது நம்பகமான கம்ப்யூட்டிங்கை பின்தளமாக நம்பியிருந்ததால் இலட்சியத்தை அடையத் தவறியது. 2009 இல், Satoshi Nakamoto-ஆல் முதல் முறையாக ஒரு பரவலாக்கப்பட்ட நாணயம் நடைமுறையில் செயல்படுத்தப்பட்டது, இது பொது விசை கிரிப்டோகிராஃபி மூலம் உரிமையை நிர்வகிப்பதற்கான நிறுவப்பட்ட அடிப்படைகளை, நாணயங்களை யார் வைத்திருக்கிறார்கள் என்பதைக் கண்காணிப்பதற்கான "proof-of-work" எனப்படும் ஒருமித்த அல்காரிதத்துடன் இணைத்தது.
proof-of-work-க்குப் பின்னால் உள்ள வழிமுறை இந்தத் துறையில் ஒரு திருப்புமுனையாக அமைந்தது, ஏனெனில் இது ஒரே நேரத்தில் இரண்டு சிக்கல்களைத் தீர்த்தது. முதலாவதாக, இது எளிமையான மற்றும் மிதமான பயனுள்ள ஒருமித்த அல்காரிதத்தை வழங்கியது, இது நெட்வொர்க்கில் உள்ள நோடுகளை Bitcoin லெட்ஜரின் நிலைக்கு ஒரு நிலையான புதுப்பிப்புகளின் தொகுப்பை கூட்டாக ஏற்க அனுமதித்தது. இரண்டாவதாக, இது ஒருமித்த செயல்முறைக்குள் இலவச நுழைவை அனுமதிப்பதற்கான ஒரு வழிமுறையை வழங்கியது, ஒருமித்த கருத்தில் யார் செல்வாக்கு செலுத்த வேண்டும் என்பதை தீர்மானிக்கும் அரசியல் சிக்கலைத் தீர்த்தது, அதே நேரத்தில் சிபில் (sybil) தாக்குதல்களையும் தடுத்தது. ஒரு குறிப்பிட்ட பட்டியலில் தனித்துவமான நிறுவனமாக பதிவு செய்யப்பட வேண்டும் போன்ற பங்கேற்பதற்கான முறையான தடையை, பொருளாதாரத் தடையுடன் மாற்றுவதன் மூலம் இது இதைச் செய்கிறது - ஒருமித்த வாக்களிப்புச் செயல்பாட்டில் ஒரு ஒற்றை நோடின் எடை, அந்த நோடு கொண்டு வரும் கணினி சக்திக்கு நேர் விகிதாசாரமாக இருக்கும். அதன்பிறகு, proof-of-stake எனப்படும் மாற்று அணுகுமுறை முன்மொழியப்பட்டது, இது ஒரு நோடின் எடையை அதன் கணக்கீட்டு வளங்களுக்கு அல்லாமல், அதன் நாணய இருப்புகளுக்கு விகிதாசாரமாகக் கணக்கிடுகிறது; இந்த இரண்டு அணுகுமுறைகளின் ஒப்பீட்டுத் தகுதிகள் பற்றிய விவாதம் இந்தக் கட்டுரையின் வரம்பிற்கு அப்பாற்பட்டது, ஆனால் இரண்டு அணுகுமுறைகளையும் ஒரு கிரிப்டோகரன்சியின் முதுகெலும்பாகப் பயன்படுத்தலாம் என்பதைக் கவனத்தில் கொள்ள வேண்டும்.
ஒரு நிலை மாற்ற அமைப்பாக பிட்காயின்
தொழில்நுட்பக் கண்ணோட்டத்தில், Bitcoin போன்ற கிரிப்டோகரன்சியின் லெட்ஜரை ஒரு நிலை மாற்ற அமைப்பாகக் கருதலாம், இதில் தற்போதுள்ள அனைத்து பிட்காயின்களின் உரிமை நிலையைக் கொண்ட ஒரு "நிலை" (state) மற்றும் ஒரு நிலையையும் பரிவர்த்தனையையும் எடுத்துக்கொண்டு அதன் விளைவாக ஒரு புதிய நிலையை வெளியிடும் "நிலை மாற்றச் செயல்பாடு" (state transition function) ஆகியவை உள்ளன. எடுத்துக்காட்டாக, ஒரு நிலையான வங்கி அமைப்பில், நிலை என்பது இருப்புநிலைக் குறிப்பு, பரிவர்த்தனை என்பது A இலிருந்து B க்கு $X ஐ மாற்றுவதற்கான கோரிக்கை, மற்றும் நிலை மாற்றச் செயல்பாடு A இன் கணக்கில் உள்ள மதிப்பை $X குறைத்து, B இன் கணக்கில் உள்ள மதிப்பை $X அதிகரிக்கிறது. A இன் கணக்கில் ஆரம்பத்திலேயே $X க்கும் குறைவாக இருந்தால், நிலை மாற்றச் செயல்பாடு பிழையை வழங்கும். எனவே, ஒருவர் இதை முறையாக இவ்வாறு வரையறுக்கலாம்:
APPLY(S,TX) -> S' or ERROR
மேலே வரையறுக்கப்பட்ட வங்கி அமைப்பில்:
APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }
ஆனால்:
APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR
Bitcoin-இல் "நிலை" என்பது அச்சிடப்பட்டு இன்னும் செலவழிக்கப்படாத அனைத்து நாணயங்களின் தொகுப்பாகும் (தொழில்நுட்ப ரீதியாக, "செலவழிக்கப்படாத பரிவர்த்தனை வெளியீடுகள்" அல்லது UTXO), ஒவ்வொரு UTXO-வும் ஒரு மதிப்பையும் உரிமையாளரையும் கொண்டிருக்கும் (இது 20-பைட் முகவரியால் வரையறுக்கப்படுகிறது, இது அடிப்படையில் ஒரு கிரிப்டோகிராஃபிக் பொது விசைfn1). ஒரு பரிவர்த்தனை ஒன்று அல்லது அதற்கு மேற்பட்ட உள்ளீடுகளைக் கொண்டுள்ளது, ஒவ்வொரு உள்ளீடும் ஏற்கனவே உள்ள UTXO-க்கான குறிப்பு மற்றும் உரிமையாளரின் முகவரியுடன் தொடர்புடைய தனிப்பட்ட விசையால் உருவாக்கப்பட்ட கிரிப்டோகிராஃபிக் கையொப்பத்தைக் கொண்டிருக்கும், மேலும் ஒன்று அல்லது அதற்கு மேற்பட்ட வெளியீடுகளைக் கொண்டிருக்கும், ஒவ்வொரு வெளியீடும் நிலையில் சேர்க்கப்பட வேண்டிய புதிய UTXO-வைக் கொண்டிருக்கும்.
நிலை மாற்றச் செயல்பாடு APPLY(S,TX) -> S' என்பதை தோராயமாக பின்வருமாறு வரையறுக்கலாம்:
TX-இல் உள்ள ஒவ்வொரு உள்ளீட்டிற்கும்:- குறிப்பிடப்பட்ட UTXO
S-இல் இல்லை என்றால், பிழையை வழங்கவும். - வழங்கப்பட்ட கையொப்பம் UTXO-இன் உரிமையாளருடன் பொருந்தவில்லை என்றால், பிழையை வழங்கவும்.
- குறிப்பிடப்பட்ட UTXO
- அனைத்து உள்ளீட்டு UTXO-களின் மதிப்புகளின் கூட்டுத்தொகை அனைத்து வெளியீட்டு UTXO-களின் மதிப்புகளின் கூட்டுத்தொகையை விட குறைவாக இருந்தால், பிழையை வழங்கவும்.
- அனைத்து உள்ளீட்டு UTXO-களையும் அகற்றிவிட்டு, அனைத்து வெளியீட்டு UTXO-களையும் சேர்த்து
S-ஐ வழங்கவும்.
முதல் படியின் முதல் பாதி, பரிவர்த்தனை அனுப்புநர்கள் இல்லாத நாணயங்களைச் செலவிடுவதைத் தடுக்கிறது, முதல் படியின் இரண்டாம் பாதி, பரிவர்த்தனை அனுப்புநர்கள் மற்றவர்களின் நாணயங்களைச் செலவிடுவதைத் தடுக்கிறது, மேலும் இரண்டாவது படி மதிப்பின் பாதுகாப்பைச் செயல்படுத்துகிறது. பணம் செலுத்துவதற்கு இதைப் பயன்படுத்த, நெறிமுறை பின்வருமாறு. Alice, Bob-க்கு 11.7 BTC அனுப்ப விரும்புகிறார் என்று வைத்துக்கொள்வோம். முதலில், Alice தனக்குச் சொந்தமான, குறைந்தபட்சம் 11.7 BTC-ஐக் கொண்ட கிடைக்கக்கூடிய UTXO-களின் தொகுப்பைத் தேடுவார். யதார்த்தமாக, Alice-ஆல் சரியாக 11.7 BTC-ஐப் பெற முடியாது; அவர் பெறக்கூடிய மிகச்சிறிய அளவு 6+4+2=12 என்று வைத்துக்கொள்வோம். பின்னர் அவர் அந்த மூன்று உள்ளீடுகள் மற்றும் இரண்டு வெளியீடுகளுடன் ஒரு பரிவர்த்தனையை உருவாக்குகிறார். முதல் வெளியீடு Bob-இன் முகவரியை உரிமையாளராகக் கொண்ட 11.7 BTC ஆக இருக்கும், மேலும் இரண்டாவது வெளியீடு மீதமுள்ள 0.3 BTC "சில்லறையாக" இருக்கும், அதன் உரிமையாளர் Alice ஆக இருப்பார்.
மைனிங்
நம்பகமான மையப்படுத்தப்பட்ட சேவைக்கான அணுகல் நம்மிடம் இருந்தால், இந்த அமைப்பைச் செயல்படுத்துவது மிகவும் எளிதாக இருக்கும்; நிலையைத் தொடர்ந்து கண்காணிக்க மையப்படுத்தப்பட்ட சேவையகத்தின் வன்வட்டைப் பயன்படுத்தி, விவரிக்கப்பட்டுள்ளபடியே இதை எளிதாகக் குறியிடலாம். இருப்பினும், Bitcoin மூலம் நாம் ஒரு பரவலாக்கப்பட்ட நாணய அமைப்பை உருவாக்க முயற்சிக்கிறோம், எனவே பரிவர்த்தனைகளின் வரிசையை அனைவரும் ஏற்றுக்கொள்வதை உறுதிசெய்ய, நிலை பரிவர்த்தனை அமைப்பை ஒருமித்த அமைப்புடன் இணைக்க வேண்டும். Bitcoin-இன் பரவலாக்கப்பட்ட ஒருமித்த செயல்முறைக்கு, நெட்வொர்க்கில் உள்ள நோடுகள் "தொகுதிகள்" (blocks) எனப்படும் பரிவர்த்தனைகளின் தொகுப்புகளைத் தொடர்ந்து உருவாக்க முயற்சிக்க வேண்டும். நெட்வொர்க் தோராயமாக ஒவ்வொரு பத்து நிமிடங்களுக்கும் ஒரு தொகுதியை உருவாக்கும் வகையில் வடிவமைக்கப்பட்டுள்ளது, ஒவ்வொரு தொகுதியிலும் நேரமுத்திரை, நான்ஸ், முந்தைய தொகுதிக்கான குறிப்பு (அதாவது, ஹாஷ்) மற்றும் முந்தைய தொகுதிக்குப் பிறகு நடந்த அனைத்து பரிவர்த்தனைகளின் பட்டியல் ஆகியவை இருக்கும். காலப்போக்கில், இது Bitcoin லெட்ஜரின் சமீபத்திய நிலையைப் பிரதிநிதித்துவப்படுத்த தொடர்ந்து புதுப்பிக்கப்படும் ஒரு நிலையான, எப்போதும் வளரும் "பிளாக்செயினை" உருவாக்குகிறது.
ஒரு தொகுதி செல்லுபடியாகுமா என்பதைச் சரிபார்க்கும் அல்காரிதம், இந்த முன்னுதாரணத்தில் வெளிப்படுத்தப்பட்டுள்ளது, பின்வருமாறு:
- தொகுதியால் குறிப்பிடப்பட்ட முந்தைய தொகுதி உள்ளதா மற்றும் செல்லுபடியாகுமா என்பதைச் சரிபார்க்கவும்.
- தொகுதியின் நேரமுத்திரை முந்தைய தொகுதியை விட அதிகமாக உள்ளதாfn2 மற்றும் எதிர்காலத்தில் 2 மணிநேரத்திற்கும் குறைவாக உள்ளதா என்பதைச் சரிபார்க்கவும்.
- தொகுதியில் உள்ள proof-of-work செல்லுபடியாகுமா என்பதைச் சரிபார்க்கவும்.
- முந்தைய தொகுதியின் முடிவில் உள்ள நிலை
S[0]ஆக இருக்கட்டும். TXஎன்பதுnபரிவர்த்தனைகளைக் கொண்ட தொகுதியின் பரிவர்த்தனை பட்டியல் என்று வைத்துக்கொள்வோம்.0...n-1-இல் உள்ள அனைத்துi-க்கும்,S[i+1] = APPLY(S[i],TX[i])என அமைக்கவும். ஏதேனும் பயன்பாடு பிழையை வழங்கினால், வெளியேறி false-ஐ வழங்கவும்.- true-ஐ வழங்கி, இந்தத் தொகுதியின் முடிவில் உள்ள நிலையாக
S[n]-ஐப் பதிவு செய்யவும்.
அடிப்படையில், தொகுதியில் உள்ள ஒவ்வொரு பரிவர்த்தனையும், பரிவர்த்தனை செயல்படுத்தப்படுவதற்கு முன்பு இருந்த நிலையான நிலையிலிருந்து சில புதிய நிலைக்கு செல்லுபடியாகும் நிலை மாற்றத்தை வழங்க வேண்டும். நிலை எந்த வகையிலும் தொகுதியில் குறியாக்கம் செய்யப்படவில்லை என்பதை நினைவில் கொள்ளவும்; இது சரிபார்க்கும் நோடால் நினைவில் கொள்ளப்பட வேண்டிய ஒரு சுருக்கமாகும், மேலும் இது தொடக்க நிலையிலிருந்து தொடங்கி ஒவ்வொரு தொகுதியிலும் உள்ள ஒவ்வொரு பரிவர்த்தனையையும் வரிசையாகப் பயன்படுத்துவதன் மூலம் மட்டுமே எந்தவொரு தொகுதிக்கும் (பாதுகாப்பாக) கணக்கிடப்படும். கூடுதலாக, மைனர் பரிவர்த்தனைகளைத் தொகுதியில் சேர்க்கும் வரிசை முக்கியமானது என்பதைக் கவனத்தில் கொள்ளவும்; ஒரு தொகுதியில் A மற்றும் B ஆகிய இரண்டு பரிவர்த்தனைகள் இருந்து, A உருவாக்கிய UTXO-ஐ B செலவழித்தால், A ஆனது B-க்கு முன் வந்தால் தொகுதி செல்லுபடியாகும், இல்லையெனில் செல்லுபடியாகாது.
மற்ற அமைப்புகளில் காணப்படாத, மேலே உள்ள பட்டியலில் உள்ள ஒரு செல்லுபடியாகும் நிபந்தனை "proof-of-work" தேவை ஆகும். துல்லியமான நிபந்தனை என்னவென்றால், ஒவ்வொரு தொகுதியின் இரட்டை-SHA256 ஹாஷ், 256-பிட் எண்ணாகக் கருதப்பட்டு, மாறும் வகையில் சரிசெய்யப்பட்ட இலக்கை விடக் குறைவாக இருக்க வேண்டும், இது இதை எழுதும் நேரத்தில் தோராயமாக 2187 ஆக உள்ளது. இதன் நோக்கம் தொகுதி உருவாக்கத்தை கணக்கீட்டு ரீதியாக "கடினமானதாக" மாற்றுவதாகும், இதன் மூலம் சிபில் தாக்குதல்காரர்கள் முழு பிளாக்செயினையும் தங்களுக்குச் சாதகமாக மாற்றுவதைத் தடுக்கிறது. SHA256 முற்றிலும் கணிக்க முடியாத போலி-சீரற்ற செயல்பாடாக வடிவமைக்கப்பட்டுள்ளதால், செல்லுபடியாகும் தொகுதியை உருவாக்குவதற்கான ஒரே வழி சோதனை மற்றும் பிழை மட்டுமே, நான்ஸை மீண்டும் மீண்டும் அதிகரித்து புதிய ஹாஷ் பொருந்துகிறதா என்று பார்ப்பதுதான்.
~2187 என்ற தற்போதைய இலக்கில், செல்லுபடியாகும் தொகுதி கண்டறியப்படுவதற்கு முன்பு நெட்வொர்க் சராசரியாக ~269 முயற்சிகளை மேற்கொள்ள வேண்டும்; பொதுவாக, ஒவ்வொரு 2016 தொகுதிகளுக்கும் நெட்வொர்க்கால் இலக்கு மறுசீரமைக்கப்படுகிறது, இதனால் சராசரியாக ஒவ்வொரு பத்து நிமிடங்களுக்கும் நெட்வொர்க்கில் உள்ள சில நோடுகளால் புதிய தொகுதி உருவாக்கப்படும். இந்தக் கணக்கீட்டுப் பணிக்காக மைனர்களுக்கு இழப்பீடு வழங்க, ஒவ்வொரு தொகுதியின் மைனரும் தங்களுக்குத் தாங்களே 25 BTC-ஐ வழங்கும் பரிவர்த்தனையைச் சேர்க்க உரிமை உண்டு. கூடுதலாக, ஏதேனும் பரிவர்த்தனை அதன் வெளியீடுகளை விட அதன் உள்ளீடுகளில் அதிக மொத்த மதிப்பைக் கொண்டிருந்தால், அந்த வித்தியாசமும் "பரிவர்த்தனைக் கட்டணமாக" மைனருக்குச் செல்லும். தற்செயலாக, BTC வெளியிடப்படும் ஒரே வழிமுறையும் இதுதான்; தொடக்க நிலையில் எந்த நாணயங்களும் இல்லை.
மைனிங்கின் நோக்கத்தை நன்கு புரிந்துகொள்ள, தீங்கிழைக்கும் தாக்குதல்காரர் ஏற்பட்டால் என்ன நடக்கும் என்பதை ஆராய்வோம். Bitcoin-இன் அடிப்படை கிரிப்டோகிராஃபி பாதுகாப்பானது என்று அறியப்படுவதால், தாக்குதல்காரர் கிரிப்டோகிராஃபியால் நேரடியாகப் பாதுகாக்கப்படாத Bitcoin அமைப்பின் ஒரு பகுதியை குறிவைப்பார்: பரிவர்த்தனைகளின் வரிசை. தாக்குதல்காரரின் உத்தி எளிமையானது:
- சில தயாரிப்புகளுக்கு ஈடாக (முன்னுரிமையாக விரைவாக வழங்கப்படும் டிஜிட்டல் பொருள்) ஒரு வணிகருக்கு 100 BTC-ஐ அனுப்பவும்
- தயாரிப்பு வழங்கப்படும் வரை காத்திருக்கவும்
- அதே 100 BTC-ஐ தனக்கே அனுப்பும் மற்றொரு பரிவர்த்தனையை உருவாக்கவும்
- தனக்குத்தானே செய்த பரிவர்த்தனைதான் முதலில் வந்தது என்று நெட்வொர்க்கை நம்பவைக்க முயற்சிக்கவும்.
படி (1) நடந்தவுடன், சில நிமிடங்களுக்குப் பிறகு சில மைனர்கள் பரிவர்த்தனையை ஒரு தொகுதியில் சேர்ப்பார்கள், தொகுதி எண் 270000 என்று வைத்துக்கொள்வோம். சுமார் ஒரு மணி நேரத்திற்குப் பிறகு, அந்தத் தொகுதிக்குப் பிறகு மேலும் ஐந்து தொகுதிகள் சங்கிலியில் சேர்க்கப்பட்டிருக்கும், அந்தத் தொகுதிகள் ஒவ்வொன்றும் மறைமுகமாகப் பரிவர்த்தனையைக் குறிக்கும், இதனால் அது "உறுதிப்படுத்தப்படும்". இந்த கட்டத்தில், வணிகர் கட்டணத்தை இறுதி செய்யப்பட்டதாக ஏற்றுக்கொண்டு தயாரிப்பை வழங்குவார்; இது ஒரு டிஜிட்டல் பொருள் என்று நாம் கருதுவதால், விநியோகம் உடனடியாக நடக்கும். இப்போது, தாக்குதல்காரர் 100 BTC-ஐ தனக்கே அனுப்பும் மற்றொரு பரிவர்த்தனையை உருவாக்குகிறார். தாக்குதல்காரர் அதை வெறுமனே வெளியிட்டால், பரிவர்த்தனை செயலாக்கப்படாது; மைனர்கள் APPLY(S,TX)-ஐ இயக்க முயற்சிப்பார்கள், மேலும் TX ஆனது இனி நிலையில் இல்லாத UTXO-ஐப் பயன்படுத்துவதைக் கவனிப்பார்கள். எனவே அதற்குப் பதிலாக, தாக்குதல்காரர் பிளாக்செயினின் "ஃபோர்க்கை" உருவாக்குகிறார், அதே தொகுதி 269999-ஐப் பெற்றோர் தொகுதியாகக் குறிக்கும் தொகுதி 270000-இன் மற்றொரு பதிப்பை மைனிங் செய்வதன் மூலம் தொடங்குகிறார், ஆனால் பழைய பரிவர்த்தனைக்குப் பதிலாக புதிய பரிவர்த்தனையுடன். தொகுதித் தரவு வேறுபட்டிருப்பதால், இதற்கு proof-of-work-ஐ மீண்டும் செய்ய வேண்டும். மேலும், தாக்குதல்காரரின் தொகுதி 270000-இன் புதிய பதிப்பு வேறுபட்ட ஹாஷைக் கொண்டுள்ளது, எனவே அசல் தொகுதிகள் 270001 முதல் 270005 வரை அதைக் "குறிக்காது"; இதனால், அசல் சங்கிலியும் தாக்குதல்காரரின் புதிய சங்கிலியும் முற்றிலும் வேறுபட்டவை. விதி என்னவென்றால், ஒரு ஃபோர்க்கில் மிக நீளமான பிளாக்செயின் உண்மையாக எடுத்துக்கொள்ளப்படுகிறது, எனவே முறையான மைனர்கள் 270005 சங்கிலியில் வேலை செய்வார்கள், அதே நேரத்தில் தாக்குதல்காரர் மட்டும் 270000 சங்கிலியில் வேலை செய்வார். தாக்குதல்காரர் தனது பிளாக்செயினை மிக நீளமானதாக மாற்ற, அவர் மற்ற நெட்வொர்க்கை விட அதிக கணக்கீட்டு சக்தியைக் கொண்டிருக்க வேண்டும் (எனவே, "51% தாக்குதல்").
மெர்க்கல் மரங்கள் (Merkle Trees)
இடது: ஒரு கிளையின் செல்லுபடியாகும் தன்மையை நிரூபிக்க மெர்க்கல் மரத்தில் குறைந்த எண்ணிக்கையிலான நோடுகளை மட்டும் வழங்கினால் போதுமானது.
வலது: மெர்க்கல் மரத்தின் எந்தப் பகுதியையும் மாற்றுவதற்கான எந்தவொரு முயற்சியும் இறுதியில் சங்கிலியில் எங்காவது ஒரு முரண்பாட்டிற்கு வழிவகுக்கும்.
Bitcoin-இன் ஒரு முக்கியமான அளவிடுதல் அம்சம் என்னவென்றால், தொகுதி பல-நிலை தரவு கட்டமைப்பில் சேமிக்கப்படுகிறது. ஒரு தொகுதியின் "ஹாஷ்" என்பது உண்மையில் தொகுதி தலைப்பின் ஹாஷ் மட்டுமே, இது தோராயமாக 200-பைட் தரவுப் பகுதியாகும், இதில் நேரமுத்திரை, நான்ஸ், முந்தைய தொகுதி ஹாஷ் மற்றும் தொகுதியில் உள்ள அனைத்து பரிவர்த்தனைகளையும் சேமிக்கும் மெர்க்கல் மரம் எனப்படும் தரவு கட்டமைப்பின் ரூட் ஹாஷ் ஆகியவை அடங்கும். மெர்க்கல் மரம் என்பது ஒரு வகையான பைனரி மரமாகும், இது மரத்தின் அடிப்பகுதியில் அடிப்படைத் தரவைக் கொண்ட அதிக எண்ணிக்கையிலான இலை நோடுகளைக் கொண்ட நோடுகளின் தொகுப்பைக் கொண்டுள்ளது, ஒவ்வொரு நோடும் அதன் இரண்டு குழந்தைகளின் ஹாஷாக இருக்கும் இடைநிலை நோடுகளின் தொகுப்பு, இறுதியாக ஒரு ஒற்றை ரூட் நோடு, இதுவும் அதன் இரண்டு குழந்தைகளின் ஹாஷிலிருந்து உருவாக்கப்பட்டு, மரத்தின் "மேல்" பகுதியைக் குறிக்கிறது. மெர்க்கல் மரத்தின் நோக்கம், ஒரு தொகுதியில் உள்ள தரவைச் சிறுகச் சிறுக வழங்க அனுமதிப்பதாகும்: ஒரு நோடு ஒரு மூலத்திலிருந்து ஒரு தொகுதியின் தலைப்பை மட்டுமே பதிவிறக்கம் செய்யலாம், மற்றொரு மூலத்திலிருந்து அவர்களுக்குத் தொடர்புடைய மரத்தின் சிறிய பகுதியைப் பதிவிறக்கம் செய்யலாம், மேலும் அனைத்துத் தரவும் சரியானது என்பதை உறுதிப்படுத்திக் கொள்ளலாம். இது வேலை செய்வதற்கான காரணம் என்னவென்றால், ஹாஷ்கள் மேல்நோக்கிப் பரவுகின்றன: ஒரு தீங்கிழைக்கும் பயனர் மெர்க்கல் மரத்தின் அடிப்பகுதியில் ஒரு போலி பரிவர்த்தனையை மாற்ற முயற்சித்தால், இந்த மாற்றம் மேலே உள்ள நோடில் மாற்றத்தை ஏற்படுத்தும், பின்னர் அதற்கு மேலே உள்ள நோடில் மாற்றத்தை ஏற்படுத்தும், இறுதியாக மரத்தின் ரூட்டை மாற்றி, அதன் மூலம் தொகுதியின் ஹாஷை மாற்றும், இதனால் நெறிமுறை அதை முற்றிலும் வேறுபட்ட தொகுதியாகப் பதிவு செய்யும் (கிட்டத்தட்ட நிச்சயமாக செல்லாத proof-of-work உடன்).
மெர்க்கல் மர நெறிமுறை நீண்ட கால நிலைத்தன்மைக்கு அவசியமானது என்று வாதிடலாம். Bitcoin நெட்வொர்க்கில் உள்ள ஒரு "முழு நோடு", ஒவ்வொரு தொகுதியின் முழுமையையும் சேமித்துச் செயலாக்குகிறது, ஏப்ரல் 2014 நிலவரப்படி Bitcoin நெட்வொர்க்கில் சுமார் 15 GB வட்டு இடத்தைப் பிடித்துள்ளது, மேலும் மாதத்திற்கு ஒரு ஜிகாபைட்டிற்கும் மேலாக வளர்ந்து வருகிறது. தற்போது, இது சில டெஸ்க்டாப் கணினிகளுக்குச் சாத்தியமானது, தொலைபேசிகளுக்கு அல்ல, எதிர்காலத்தில் வணிகங்கள் மற்றும் பொழுதுபோக்காளர்கள் மட்டுமே பங்கேற்க முடியும். "எளிமைப்படுத்தப்பட்ட கட்டணச் சரிபார்ப்பு" (SPV) எனப்படும் நெறிமுறை, "லைட் நோடுகள்" எனப்படும் மற்றொரு வகை நோடுகள் இருக்க அனுமதிக்கிறது, இவை தொகுதி தலைப்புகளைப் பதிவிறக்கம் செய்து, தொகுதி தலைப்புகளில் உள்ள proof-of-work-ஐச் சரிபார்த்து, பின்னர் தங்களுக்குத் தொடர்புடைய பரிவர்த்தனைகளுடன் தொடர்புடைய "கிளைகளை" மட்டுமே பதிவிறக்கம் செய்கின்றன. முழு பிளாக்செயினின் மிகச் சிறிய பகுதியை மட்டுமே பதிவிறக்கம் செய்யும் போது, எந்தவொரு Bitcoin பரிவர்த்தனையின் நிலை மற்றும் அவற்றின் தற்போதைய இருப்பு என்ன என்பதை வலுவான பாதுகாப்பு உத்தரவாதத்துடன் தீர்மானிக்க இது லைட் நோடுகளை அனுமதிக்கிறது.
மாற்று பிளாக்செயின் பயன்பாடுகள்
அடிப்படை பிளாக்செயின் யோசனையை எடுத்து மற்ற கருத்துகளுக்குப் பயன்படுத்துவதற்கான யோசனையும் நீண்ட வரலாற்றைக் கொண்டுள்ளது. 2005 இல், Nick Szabo "secure property titles with owner authority (opens in a new tab)" என்ற கருத்தை வெளியிட்டார், இது "பிரதிபலித்த தரவுத்தள தொழில்நுட்பத்தில் புதிய முன்னேற்றங்கள்" எந்த நிலத்தை யார் வைத்திருக்கிறார்கள் என்பதற்கான பதிவேட்டைச் சேமிப்பதற்கான பிளாக்செயின் அடிப்படையிலான அமைப்பை எவ்வாறு அனுமதிக்கும் என்பதை விவரிக்கும் ஆவணமாகும், இது ஹோம்ஸ்டெடிங், பாதகமான உடைமை மற்றும் ஜார்ஜிய நில வரி போன்ற கருத்துகளை உள்ளடக்கிய ஒரு விரிவான கட்டமைப்பை உருவாக்குகிறது. இருப்பினும், துரதிர்ஷ்டவசமாக அந்த நேரத்தில் பயனுள்ள பிரதிபலித்த தரவுத்தள அமைப்பு எதுவும் கிடைக்கவில்லை, எனவே நெறிமுறை நடைமுறையில் செயல்படுத்தப்படவில்லை. இருப்பினும், 2009 க்குப் பிறகு, Bitcoin-இன் பரவலாக்கப்பட்ட ஒருமித்த கருத்து உருவாக்கப்பட்டவுடன் பல மாற்று பயன்பாடுகள் வேகமாக வெளிவரத் தொடங்கின.
- Namecoin - 2010 இல் உருவாக்கப்பட்டது, Namecoin (opens in a new tab) ஒரு பரவலாக்கப்பட்ட பெயர் பதிவு தரவுத்தளமாகச் சிறப்பாக விவரிக்கப்படுகிறது. Tor, Bitcoin மற்றும் BitMessage போன்ற பரவலாக்கப்பட்ட நெறிமுறைகளில், கணக்குகளை அடையாளம் காண சில வழிகள் இருக்க வேண்டும், இதனால் மற்றவர்கள் அவர்களுடன் தொடர்பு கொள்ள முடியும், ஆனால் தற்போதுள்ள அனைத்து தீர்வுகளிலும் கிடைக்கும் ஒரே வகையான அடையாளங்காட்டி
1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWyபோன்ற போலி-சீரற்ற ஹாஷ் மட்டுமே. வெறுமனே, ஒருவர் "george" போன்ற பெயருடன் ஒரு கணக்கை வைத்திருக்க விரும்புவார். இருப்பினும், சிக்கல் என்னவென்றால், ஒரு நபர் "george" என்ற பெயரில் ஒரு கணக்கை உருவாக்க முடிந்தால், வேறொருவரும் அதே செயல்முறையைப் பயன்படுத்தி தங்களுக்கு "george" என்று பதிவு செய்து அவர்களைப் போல ஆள்மாறாட்டம் செய்யலாம். இதற்கான ஒரே தீர்வு முதலில் தாக்கல் செய்யும் முன்னுதாரணமாகும், இதில் முதலில் பதிவு செய்பவர் வெற்றிபெறுகிறார் மற்றும் இரண்டாமவர் தோல்வியடைகிறார் - இது Bitcoin ஒருமித்த நெறிமுறைக்குச் சரியாகப் பொருந்தக்கூடிய ஒரு சிக்கலாகும். Namecoin என்பது அத்தகைய யோசனையைப் பயன்படுத்தும் பெயர் பதிவு அமைப்பின் பழமையான மற்றும் மிகவும் வெற்றிகரமான செயலாக்கமாகும். - Colored coins - colored coins (opens in a new tab)-இன் நோக்கம், மக்கள் தங்கள் சொந்த டிஜிட்டல் நாணயங்களை உருவாக்க அனுமதிக்கும் நெறிமுறையாகச் செயல்படுவதாகும் - அல்லது, ஒரு யூனிட்டைக் கொண்ட நாணயத்தின் முக்கியமான அற்பமான விஷயத்தில், Bitcoin பிளாக்செயினில் டிஜிட்டல் டோக்கன்களை உருவாக்குவதாகும். colored coins நெறிமுறையில், ஒரு குறிப்பிட்ட Bitcoin UTXO-க்கு பகிரங்கமாக ஒரு நிறத்தை ஒதுக்குவதன் மூலம் ஒருவர் புதிய நாணயத்தை "வெளியிடுகிறார்", மேலும் நெறிமுறையானது மற்ற UTXO-களின் நிறத்தை அவற்றை உருவாக்கிய பரிவர்த்தனை செலவழித்த உள்ளீடுகளின் நிறத்திற்குச் சமமாக இருக்கும்படி சுழல்நிலையாக வரையறுக்கிறது (கலப்பு-நிற உள்ளீடுகளின் விஷயத்தில் சில சிறப்பு விதிகள் பொருந்தும்). இது பயனர்கள் ஒரு குறிப்பிட்ட நிறத்தின் UTXO-ஐ மட்டுமே கொண்ட வாலெட்டுகளைப் பராமரிக்கவும், வழக்கமான பிட்காயின்களைப் போலவே அவற்றை அனுப்பவும் அனுமதிக்கிறது, அவர்கள் பெறும் எந்தவொரு UTXO-இன் நிறத்தையும் தீர்மானிக்க பிளாக்செயின் மூலம் பின்னோக்கிச் செல்கிறது.
- Metacoins - ஒரு metacoin-க்குப் பின்னால் உள்ள யோசனை என்னவென்றால், Bitcoin-இன் மேல் வாழும் ஒரு நெறிமுறையைக் கொண்டிருப்பது, metacoin பரிவர்த்தனைகளைச் சேமிக்க Bitcoin பரிவர்த்தனைகளைப் பயன்படுத்துவது, ஆனால் வேறுபட்ட நிலை மாற்றச் செயல்பாட்டைக் கொண்டிருப்பது,
APPLY'. செல்லாத metacoin பரிவர்த்தனைகள் Bitcoin பிளாக்செயினில் தோன்றுவதை metacoin நெறிமுறையால் தடுக்க முடியாது என்பதால்,APPLY'(S,TX)பிழையை வழங்கினால், நெறிமுறை இயல்புநிலையாகAPPLY'(S,TX) = Sஆக மாறும் என்ற விதி சேர்க்கப்பட்டுள்ளது. இது ஒரு தன்னிச்சையான கிரிப்டோகரன்சி நெறிமுறையை உருவாக்குவதற்கான எளிதான வழிமுறையை வழங்குகிறது, இது Bitcoin-க்குள் செயல்படுத்த முடியாத மேம்பட்ட அம்சங்களைக் கொண்டிருக்கலாம், ஆனால் மைனிங் மற்றும் நெட்வொர்க்கிங் சிக்கல்கள் ஏற்கனவே Bitcoin நெறிமுறையால் கையாளப்படுவதால் மிகக் குறைந்த மேம்பாட்டுச் செலவைக் கொண்டுள்ளது. சில வகையான நிதி ஒப்பந்தங்கள், பெயர் பதிவு மற்றும் பரவலாக்கப்பட்ட பரிமாற்றம் ஆகியவற்றைச் செயல்படுத்த Metacoins பயன்படுத்தப்பட்டுள்ளன.
எனவே, பொதுவாக, ஒருமித்த நெறிமுறையை உருவாக்குவதற்கு இரண்டு அணுகுமுறைகள் உள்ளன: ஒரு சுயாதீன நெட்வொர்க்கை உருவாக்குவது மற்றும் Bitcoin-இன் மேல் ஒரு நெறிமுறையை உருவாக்குவது. முந்தைய அணுகுமுறை, Namecoin போன்ற பயன்பாடுகளின் விஷயத்தில் நியாயமான வெற்றியைப் பெற்றாலும், செயல்படுத்துவது கடினம்; ஒவ்வொரு தனிப்பட்ட செயலாக்கமும் ஒரு சுயாதீன பிளாக்செயினை பூட்ஸ்ட்ராப் செய்ய வேண்டும், அத்துடன் தேவையான அனைத்து நிலை மாற்றம் மற்றும் நெட்வொர்க்கிங் குறியீட்டை உருவாக்கி சோதிக்க வேண்டும். கூடுதலாக, பரவலாக்கப்பட்ட ஒருமித்த தொழில்நுட்பத்திற்கான பயன்பாடுகளின் தொகுப்பு ஒரு சக்தி விதி விநியோகத்தைப் பின்பற்றும் என்று நாங்கள் கணிக்கிறோம், அங்கு பெரும்பாலான பயன்பாடுகள் அவற்றின் சொந்த பிளாக்செயினை நியாயப்படுத்த முடியாத அளவுக்குச் சிறியதாக இருக்கும், மேலும் பரவலாக்கப்பட்ட பயன்பாடுகளின் பெரிய வகுப்புகள் உள்ளன என்பதை நாங்கள் கவனிக்கிறோம், குறிப்பாக பரவலாக்கப்பட்ட தன்னாட்சி அமைப்புகள், அவை ஒன்றுக்கொன்று தொடர்பு கொள்ள வேண்டும்.
மறுபுறம், Bitcoin அடிப்படையிலான அணுகுமுறை, Bitcoin-இன் எளிமைப்படுத்தப்பட்ட கட்டணச் சரிபார்ப்பு அம்சங்களைப் பெறவில்லை என்ற குறைபாட்டைக் கொண்டுள்ளது. SPV Bitcoin-க்கு வேலை செய்கிறது, ஏனெனில் அது பிளாக்செயின் ஆழத்தை செல்லுபடியாகும் தன்மைக்கான ப்ராக்ஸியாகப் பயன்படுத்தலாம்; ஒரு கட்டத்தில், ஒரு பரிவர்த்தனையின் மூதாதையர்கள் போதுமான அளவு பின்னோக்கிச் சென்றவுடன், அவை சட்டபூர்வமாக நிலையின் ஒரு பகுதியாக இருந்தன என்று சொல்வது பாதுகாப்பானது. மறுபுறம், பிளாக்செயின் அடிப்படையிலான மெட்டா-நெறிமுறைகள், அவற்றின் சொந்த நெறிமுறைகளின் சூழலில் செல்லுபடியாகாத பரிவர்த்தனைகளைச் சேர்க்க வேண்டாம் என்று பிளாக்செயினைக் கட்டாயப்படுத்த முடியாது. எனவே, முழுமையாகப் பாதுகாப்பான SPV மெட்டா-நெறிமுறை செயலாக்கமானது, சில பரிவர்த்தனைகள் செல்லுபடியாகுமா இல்லையா என்பதைத் தீர்மானிக்க Bitcoin பிளாக்செயினின் தொடக்கம் வரை பின்னோக்கி ஸ்கேன் செய்ய வேண்டும். தற்போது, Bitcoin அடிப்படையிலான மெட்டா-நெறிமுறைகளின் அனைத்து "லைட்" செயலாக்கங்களும் தரவை வழங்க நம்பகமான சேவையகத்தை நம்பியுள்ளன, இது ஒரு கிரிப்டோகரன்சியின் முதன்மை நோக்கங்களில் ஒன்று நம்பிக்கையின் தேவையைக் குறைப்பதாக இருக்கும்போது, இது மிகவும் குறைவான உகந்த முடிவாகும்.
ஸ்கிரிப்டிங் (Scripting)
எந்த நீட்டிப்புகளும் இல்லாவிட்டாலும், Bitcoin நெறிமுறை உண்மையில் "ஸ்மார்ட் ஒப்பந்தங்கள்" என்ற கருத்தின் பலவீனமான பதிப்பை எளிதாக்குகிறது. Bitcoin-இல் உள்ள UTXO-ஐ ஒரு பொது விசையால் மட்டுமல்லாமல், எளிமையான ஸ்டாக் அடிப்படையிலான நிரலாக்க மொழியில் வெளிப்படுத்தப்பட்ட மிகவும் சிக்கலான ஸ்கிரிப்ட் மூலமாகவும் சொந்தமாகக் கொண்டிருக்க முடியும். இந்த முன்னுதாரணத்தில், அந்த UTXO-ஐச் செலவழிக்கும் பரிவர்த்தனை ஸ்கிரிப்டைத் திருப்திப்படுத்தும் தரவை வழங்க வேண்டும். உண்மையில், அடிப்படை பொது விசை உரிமை வழிமுறை கூட ஒரு ஸ்கிரிப்ட் வழியாகச் செயல்படுத்தப்படுகிறது: ஸ்கிரிப்ட் ஒரு நீள்வட்ட வளைவு கையொப்பத்தை உள்ளீடாக எடுத்துக்கொள்கிறது, பரிவர்த்தனை மற்றும் UTXO-ஐ வைத்திருக்கும் முகவரிக்கு எதிராக அதைச் சரிபார்க்கிறது, மேலும் சரிபார்ப்பு வெற்றிகரமாக இருந்தால் 1-ஐயும் இல்லையெனில் 0-ஐயும் வழங்குகிறது. பல்வேறு கூடுதல் பயன்பாட்டு நிகழ்வுகளுக்கு மற்ற, மிகவும் சிக்கலான ஸ்கிரிப்டுகள் உள்ளன. எடுத்துக்காட்டாக, சரிபார்க்க கொடுக்கப்பட்ட மூன்று தனிப்பட்ட விசைகளில் இரண்டிலிருந்து கையொப்பங்கள் தேவைப்படும் ஒரு ஸ்கிரிப்டை ஒருவர் உருவாக்கலாம் ("multisig"), இது கார்ப்பரேட் கணக்குகள், பாதுகாப்பான சேமிப்புக் கணக்குகள் மற்றும் சில வணிக எஸ்க்ரோ சூழ்நிலைகளுக்குப் பயனுள்ள அமைப்பாகும். கணக்கீட்டுச் சிக்கல்களுக்கான தீர்வுகளுக்கு வெகுமதிகளை வழங்கவும் ஸ்கிரிப்டுகளைப் பயன்படுத்தலாம், மேலும் "இந்த மதிப்பின் Dogecoin பரிவர்த்தனையை நீங்கள் எனக்கு அனுப்பினீர்கள் என்பதற்கான SPV ஆதாரத்தை உங்களால் வழங்க முடிந்தால் இந்த Bitcoin UTXO உங்களுடையது" என்று கூறும் ஸ்கிரிப்டைக் கூட ஒருவர் உருவாக்கலாம், இது அடிப்படையில் பரவலாக்கப்பட்ட குறுக்கு-கிரிப்டோகரன்சி பரிமாற்றத்தை அனுமதிக்கிறது.
இருப்பினும், Bitcoin-இல் செயல்படுத்தப்பட்டுள்ள ஸ்கிரிப்டிங் மொழி பல முக்கியமான வரம்புகளைக் கொண்டுள்ளது:
- டூரிங்-முழுமையின்மை (Lack of Turing-completeness) - அதாவது, Bitcoin ஸ்கிரிப்டிங் மொழி ஆதரிக்கும் கணக்கீட்டின் பெரிய துணைக்குழு இருந்தாலும், அது எல்லாவற்றையும் ஆதரிக்காது. விடுபட்ட முக்கிய வகை லூப்கள் (loops) ஆகும். பரிவர்த்தனை சரிபார்ப்பின் போது முடிவற்ற லூப்களைத் தவிர்ப்பதற்காக இது செய்யப்படுகிறது; கோட்பாட்டளவில் இது ஸ்கிரிப்ட் புரோகிராமர்களுக்கு ஒரு கடக்கக்கூடிய தடையாகும், ஏனெனில் எந்தவொரு லூப்பையும் if அறிக்கையுடன் அடிப்படைக் குறியீட்டை பல முறை மீண்டும் செய்வதன் மூலம் உருவகப்படுத்த முடியும், ஆனால் இது மிகவும் இட-திறனற்ற ஸ்கிரிப்டுகளுக்கு வழிவகுக்கிறது. எடுத்துக்காட்டாக, மாற்று நீள்வட்ட வளைவு கையொப்ப அல்காரிதத்தைச் செயல்படுத்துவதற்கு 256 தொடர்ச்சியான பெருக்கல் சுற்றுகள் தேவைப்படும், அவை அனைத்தும் தனித்தனியாகக் குறியீட்டில் சேர்க்கப்படும்.
- மதிப்பு-குருட்டுத்தன்மை (Value-blindness) - திரும்பப் பெறக்கூடிய தொகையின் மீது நுணுக்கமான கட்டுப்பாட்டை வழங்க UTXO ஸ்கிரிப்ட்டுக்கு எந்த வழியும் இல்லை. எடுத்துக்காட்டாக, ஒரு ஆரக்கிள் ஒப்பந்தத்தின் ஒரு சக்திவாய்ந்த பயன்பாட்டு நிகழ்வு ஒரு ஹெட்ஜிங் ஒப்பந்தமாக இருக்கும், இதில் A மற்றும் B ஆகியோர் $1000 மதிப்புள்ள BTC-ஐ வைக்கிறார்கள், மேலும் 30 நாட்களுக்குப் பிறகு ஸ்கிரிப்ட் $1000 மதிப்புள்ள BTC-ஐ A-க்கும் மீதமுள்ளதை B-க்கும் அனுப்புகிறது. இதற்கு USD-இல் 1 BTC-இன் மதிப்பைத் தீர்மானிக்க ஒரு ஆரக்கிள் தேவைப்படும், ஆனால் அப்போதும் கூட இது இப்போது கிடைக்கும் முழு மையப்படுத்தப்பட்ட தீர்வுகளை விட நம்பிக்கை மற்றும் உள்கட்டமைப்புத் தேவையின் அடிப்படையில் ஒரு பெரிய முன்னேற்றமாகும். இருப்பினும், UTXO-கள் அனைத்தும்-அல்லது-எதுவுமில்லை என்பதால், இதை அடைவதற்கான ஒரே வழி, மாறுபட்ட மதிப்புகளின் பல UTXO-களைக் கொண்டிருப்பதன் (எ.கா., 30 வரையிலான ஒவ்வொரு k-க்கும் 2k-இன் ஒரு UTXO) மிகவும் திறனற்ற ஹேக் மூலம், எந்த UTXO-ஐ A-க்கும் எதை B-க்கும் அனுப்ப வேண்டும் என்பதை ஆரக்கிள் தேர்வு செய்வதாகும்.
- நிலை இல்லாமை (Lack of state) - UTXO-ஐச் செலவழிக்கலாம் அல்லது செலவழிக்காமல் இருக்கலாம்; பல-கட்ட ஒப்பந்தங்கள் அல்லது அதற்கு அப்பால் வேறு எந்த உள் நிலையையும் வைத்திருக்கும் ஸ்கிரிப்டுகளுக்கு வாய்ப்பில்லை. இது பல-கட்ட விருப்ப ஒப்பந்தங்கள், பரவலாக்கப்பட்ட பரிமாற்ற சலுகைகள் அல்லது இரண்டு-கட்ட கிரிப்டோகிராஃபிக் அர்ப்பணிப்பு நெறிமுறைகளை (பாதுகாப்பான கணக்கீட்டு வெகுமதிகளுக்கு அவசியமானது) உருவாக்குவதை கடினமாக்குகிறது. UTXO-ஐ எளிமையான, ஒரு முறை ஒப்பந்தங்களை உருவாக்க மட்டுமே பயன்படுத்த முடியும் என்பதையும், பரவலாக்கப்பட்ட நிறுவனங்கள் போன்ற மிகவும் சிக்கலான "நிலைத்தன்மை கொண்ட" ஒப்பந்தங்களை உருவாக்க முடியாது என்பதையும் இது குறிக்கிறது, மேலும் மெட்டா-நெறிமுறைகளைச் செயல்படுத்துவதை கடினமாக்குகிறது. மதிப்பு-குருட்டுத்தன்மையுடன் இணைந்த பைனரி நிலை, மற்றொரு முக்கியமான பயன்பாடான திரும்பப் பெறும் வரம்புகள் சாத்தியமற்றது என்பதையும் குறிக்கிறது.
- பிளாக்செயின்-குருட்டுத்தன்மை (Blockchain-blindness) - நான்ஸ், நேரமுத்திரை மற்றும் முந்தைய தொகுதி ஹாஷ் போன்ற பிளாக்செயின் தரவுகளுக்கு UTXO-கள் குருடானவை. இது ஸ்கிரிப்டிங் மொழிக்கு சீரற்ற தன்மையின் மதிப்புமிக்க ஆதாரத்தை இழப்பதன் மூலம் சூதாட்டம் மற்றும் பல வகைகளில் பயன்பாடுகளைக் கடுமையாகக் கட்டுப்படுத்துகிறது.
எனவே, கிரிப்டோகரன்சியின் மேல் மேம்பட்ட பயன்பாடுகளை உருவாக்குவதற்கு மூன்று அணுகுமுறைகளை நாம் காண்கிறோம்: புதிய பிளாக்செயினை உருவாக்குவது, Bitcoin-இன் மேல் ஸ்கிரிப்டிங்கைப் பயன்படுத்துவது மற்றும் Bitcoin-இன் மேல் மெட்டா-நெறிமுறையை உருவாக்குவது. புதிய பிளாக்செயினை உருவாக்குவது அம்சத் தொகுப்பை உருவாக்குவதில் வரம்பற்ற சுதந்திரத்தை அனுமதிக்கிறது, ஆனால் மேம்பாட்டு நேரம், பூட்ஸ்ட்ராப்பிங் முயற்சி மற்றும் பாதுகாப்பு ஆகியவற்றின் விலையில். ஸ்கிரிப்டிங்கைப் பயன்படுத்துவது செயல்படுத்தவும் தரப்படுத்தவும் எளிதானது, ஆனால் அதன் திறன்களில் மிகவும் வரம்புக்குட்பட்டது, மேலும் மெட்டா-நெறிமுறைகள் எளிதானவை என்றாலும், அளவிடுதலில் உள்ள குறைபாடுகளால் பாதிக்கப்படுகின்றன. Ethereum மூலம், மேம்பாட்டின் எளிமையிலும், இன்னும் வலுவான லைட் கிளையன்ட் பண்புகளிலும் இன்னும் பெரிய லாபங்களை வழங்கும் மாற்று கட்டமைப்பை உருவாக்க நாங்கள் உத்தேசித்துள்ளோம், அதே நேரத்தில் பயன்பாடுகள் பொருளாதாரச் சூழலையும் பிளாக்செயின் பாதுகாப்பையும் பகிர்ந்து கொள்ள அனுமதிக்கிறோம்.
Ethereum
பரவலாக்கப்பட்ட பயன்பாடுகளை (decentralized applications) உருவாக்குவதற்கான மாற்று நெறிமுறையை உருவாக்குவதே Ethereum-இன் நோக்கமாகும். விரைவான மேம்பாட்டு நேரம், சிறிய மற்றும் அரிதாகப் பயன்படுத்தப்படும் பயன்பாடுகளுக்கான பாதுகாப்பு, மற்றும் வெவ்வேறு பயன்பாடுகள் மிகவும் திறமையாக தொடர்பு கொள்ளும் திறன் ஆகியவை முக்கியமானதாக இருக்கும் சூழ்நிலைகளுக்கு சிறப்பு முக்கியத்துவம் அளித்து, பரவலாக்கப்பட்ட பயன்பாடுகளின் பெரிய வகுப்பிற்கு மிகவும் பயனுள்ளதாக இருக்கும் என்று நாங்கள் நம்பும் வெவ்வேறு பரிமாற்றங்களை இது வழங்குகிறது. அடிப்படையில் ஒரு இறுதி சுருக்கமான அடிப்படை அடுக்கை உருவாக்குவதன் மூலம் Ethereum இதைச் செய்கிறது: உள்ளமைக்கப்பட்ட டூரிங்-முழுமையான (Turing-complete) நிரலாக்க மொழியைக் கொண்ட ஒரு பிளாக்செயின், இது எவரையும் ஸ்மார்ட் ஒப்பந்தங்கள் (smart contracts) மற்றும் பரவலாக்கப்பட்ட பயன்பாடுகளை எழுத அனுமதிக்கிறது, அங்கு அவர்கள் உரிமை, பரிவர்த்தனை வடிவங்கள் மற்றும் நிலை மாற்ற செயல்பாடுகளுக்கான (state transition functions) தங்களது சொந்த தன்னிச்சையான விதிகளை உருவாக்க முடியும். Namecoin-இன் அடிப்படை பதிப்பை இரண்டு வரி குறியீட்டில் எழுதலாம், மேலும் நாணயங்கள் மற்றும் நற்பெயர் அமைப்புகள் போன்ற பிற நெறிமுறைகளை இருபது வரிகளுக்குள் உருவாக்கலாம். ஸ்மார்ட் ஒப்பந்தங்கள், அதாவது மதிப்பை உள்ளடக்கிய மற்றும் குறிப்பிட்ட நிபந்தனைகள் பூர்த்தி செய்யப்பட்டால் மட்டுமே அதைத் திறக்கும் கிரிப்டோகிராஃபிக் "பெட்டிகள்", இந்த தளத்தின் மேல் கட்டமைக்கப்படலாம். டூரிங்-முழுமை, மதிப்பு-விழிப்புணர்வு, பிளாக்செயின்-விழிப்புணர்வு மற்றும் நிலை ஆகியவற்றின் கூடுதல் சக்திகள் காரணமாக Bitcoin ஸ்கிரிப்டிங் வழங்குவதை விட இது மிகவும் அதிக சக்தி வாய்ந்தது.
Ethereum கணக்குகள்
Ethereum-இல், நிலையானது (state) "கணக்குகள்" எனப்படும் பொருள்களால் ஆனது, ஒவ்வொரு கணக்கும் 20-பைட் முகவரியைக் கொண்டுள்ளது மற்றும் நிலை மாற்றங்கள் என்பவை கணக்குகளுக்கு இடையிலான மதிப்பு மற்றும் தகவல்களின் நேரடி பரிமாற்றங்களாகும். ஒரு Ethereum கணக்கு நான்கு புலங்களைக் கொண்டுள்ளது:
- nonce, ஒவ்வொரு பரிவர்த்தனையும் ஒரு முறை மட்டுமே செயல்படுத்தப்படுவதை உறுதிசெய்யப் பயன்படுத்தப்படும் ஒரு கவுண்டர்
- கணக்கின் தற்போதைய ether இருப்பு
- கணக்கின் ஒப்பந்தக் குறியீடு (contract code), இருந்தால்
- கணக்கின் சேமிப்பகம் (storage) (இயல்பாகவே காலியாக இருக்கும்)
"Ether" என்பது Ethereum-இன் முக்கிய உள் கிரிப்டோ-எரிபொருளாகும், மேலும் இது பரிவர்த்தனை கட்டணங்களைச் செலுத்தப் பயன்படுகிறது. பொதுவாக, இரண்டு வகையான கணக்குகள் உள்ளன: தனிப்பட்ட திறவுகோல்களால் (private keys) கட்டுப்படுத்தப்படும் வெளிப்புறமாக சொந்தமான கணக்குகள் (externally owned accounts), மற்றும் அவற்றின் ஒப்பந்தக் குறியீட்டால் கட்டுப்படுத்தப்படும் ஒப்பந்தக் கணக்குகள் (contract accounts). வெளிப்புறமாக சொந்தமான கணக்கில் எந்த குறியீடும் இல்லை, மேலும் ஒரு பரிவர்த்தனையை உருவாக்கி கையொப்பமிடுவதன் மூலம் வெளிப்புறமாக சொந்தமான கணக்கிலிருந்து செய்திகளை அனுப்பலாம்; ஒரு ஒப்பந்தக் கணக்கில், ஒவ்வொரு முறையும் ஒப்பந்தக் கணக்கு ஒரு செய்தியைப் பெறும்போது அதன் குறியீடு செயல்படுகிறது, இது உள் சேமிப்பகத்தைப் படிக்கவும் எழுதவும் மற்றும் பிற செய்திகளை அனுப்பவும் அல்லது ஒப்பந்தங்களை உருவாக்கவும் அனுமதிக்கிறது.
Ethereum-இல் உள்ள "ஒப்பந்தங்கள்" என்பவை "நிறைவேற்றப்பட வேண்டிய" அல்லது "இணங்க வேண்டிய" ஒன்றாகப் பார்க்கப்படக் கூடாது என்பதை நினைவில் கொள்க; மாறாக, அவை Ethereum செயலாக்க சூழலுக்குள் வாழும் "தன்னாட்சி முகவர்கள் (autonomous agents)" போன்றவை, ஒரு செய்தி அல்லது பரிவர்த்தனையால் "தூண்டப்படும்போது" எப்போதும் ஒரு குறிப்பிட்ட குறியீட்டை இயக்குகின்றன, மேலும் நிலையான மாறிகளைக் கண்காணிக்க அவற்றின் சொந்த ether இருப்பு மற்றும் அவற்றின் சொந்த விசை/மதிப்பு (key/value) சேமிப்பகத்தின் மீது நேரடி கட்டுப்பாட்டைக் கொண்டுள்ளன.
செய்திகள் மற்றும் பரிவர்த்தனைகள்
"பரிவர்த்தனை" என்ற சொல் Ethereum-இல் வெளிப்புறமாக சொந்தமான கணக்கிலிருந்து அனுப்பப்பட வேண்டிய செய்தியைச் சேமிக்கும் கையொப்பமிடப்பட்ட தரவுத் தொகுப்பைக் குறிக்கப் பயன்படுத்தப்படுகிறது. பரிவர்த்தனைகள் பின்வருவனவற்றைக் கொண்டுள்ளன:
- செய்தியைப் பெறுபவர்
- அனுப்புநரை அடையாளம் காணும் கையொப்பம்
- அனுப்புநரிடமிருந்து பெறுநருக்கு மாற்ற வேண்டிய ether-இன் அளவு
- ஒரு விருப்பத் தரவுப் புலம் (optional data field)
- பரிவர்த்தனை செயலாக்கம் எடுக்க அனுமதிக்கப்படும் அதிகபட்ச கணக்கீட்டு படிகளின் எண்ணிக்கையைக் குறிக்கும்
STARTGASமதிப்பு - ஒவ்வொரு கணக்கீட்டு படிக்கும் அனுப்புநர் செலுத்தும் கட்டணத்தைக் குறிக்கும்
GASPRICEமதிப்பு
முதல் மூன்றும் எந்தவொரு கிரிப்டோகரன்சியிலும் எதிர்பார்க்கப்படும் நிலையான புலங்கள். தரவுப் புலம் இயல்பாக எந்தச் செயல்பாட்டையும் கொண்டிருக்கவில்லை, ஆனால் மெய்நிகர் இயந்திரம் (virtual machine) ஒரு opcode-ஐக் கொண்டுள்ளது, இதைப் பயன்படுத்தி ஒரு ஒப்பந்தம் தரவை அணுக முடியும்; ஒரு எடுத்துக்காட்டு பயன்பாட்டு நிகழ்வாக, ஒரு ஒப்பந்தம் ஆன்-பிளாக்செயின் டொமைன் பதிவு சேவையாகச் செயல்பட்டால், அதற்கு அனுப்பப்படும் தரவை இரண்டு "புலங்களைக்" கொண்டிருப்பதாக அது விளக்க விரும்பலாம், முதல் புலம் பதிவு செய்ய வேண்டிய டொமைன் மற்றும் இரண்டாவது புலம் அதைப் பதிவு செய்ய வேண்டிய IP முகவரி. ஒப்பந்தம் இந்த மதிப்புகளை செய்தித் தரவிலிருந்து படித்து அவற்றைச் சேமிப்பகத்தில் பொருத்தமாக வைக்கும்.
Ethereum-இன் சேவை மறுப்பு எதிர்ப்பு (anti-denial of service) மாதிரிக்கு STARTGAS மற்றும் GASPRICE புலங்கள் முக்கியமானவை. குறியீட்டில் தற்செயலான அல்லது விரோதமான முடிவற்ற சுழல்கள் (infinite loops) அல்லது பிற கணக்கீட்டு விரயங்களைத் தடுக்க, ஒவ்வொரு பரிவர்த்தனையும் குறியீடு செயலாக்கத்தின் எத்தனை கணக்கீட்டு படிகளைப் பயன்படுத்தலாம் என்பதற்கு ஒரு வரம்பை அமைக்க வேண்டும். கணக்கீட்டின் அடிப்படை அலகு "gas" ஆகும்; வழக்கமாக, ஒரு கணக்கீட்டு படிக்கு 1 gas செலவாகும், ஆனால் சில செயல்பாடுகளுக்கு அதிக அளவு gas செலவாகும், ஏனெனில் அவை கணக்கீட்டு ரீதியாக அதிக செலவு கொண்டவை, அல்லது நிலையின் ஒரு பகுதியாக சேமிக்கப்பட வேண்டிய தரவின் அளவை அதிகரிக்கின்றன. பரிவர்த்தனை தரவில் உள்ள ஒவ்வொரு பைட்டிற்கும் 5 gas கட்டணமும் உள்ளது. கட்டண முறையின் நோக்கம், கணக்கீடு, அலைவரிசை மற்றும் சேமிப்பகம் உட்பட அவர்கள் பயன்படுத்தும் ஒவ்வொரு வளத்திற்கும் விகிதாசாரமாக பணம் செலுத்த தாக்குபவரை (attacker) கோருவதாகும்; எனவே, நெட்வொர்க் இந்த வளங்களில் ஏதேனும் ஒன்றை அதிக அளவில் பயன்படுத்த வழிவகுக்கும் எந்தவொரு பரிவர்த்தனையும் அதிகரிப்புக்கு தோராயமாக விகிதாசாரமாக ஒரு gas கட்டணத்தைக் கொண்டிருக்க வேண்டும்.
செய்திகள்
ஒப்பந்தங்கள் மற்ற ஒப்பந்தங்களுக்கு "செய்திகளை" அனுப்பும் திறனைக் கொண்டுள்ளன. செய்திகள் என்பவை மெய்நிகர் பொருள்கள், அவை ஒருபோதும் வரிசைப்படுத்தப்படுவதில்லை (serialized) மற்றும் Ethereum செயலாக்க சூழலில் மட்டுமே உள்ளன. ஒரு செய்தி பின்வருவனவற்றைக் கொண்டுள்ளது:
- செய்தியை அனுப்புபவர் (உள்ளார்ந்த)
- செய்தியைப் பெறுபவர்
- செய்தியுடன் மாற்ற வேண்டிய ether-இன் அளவு
- ஒரு விருப்பத் தரவுப் புலம்
- ஒரு
STARTGASமதிப்பு
அடிப்படையில், ஒரு செய்தி ஒரு பரிவர்த்தனை போன்றது, ஆனால் இது ஒரு வெளிப்புற நடிகரால் (external actor) அல்லாமல் ஒரு ஒப்பந்தத்தால் உருவாக்கப்படுகிறது. தற்போது குறியீட்டை இயக்கும் ஒரு ஒப்பந்தம் CALL opcode-ஐ இயக்கும்போது ஒரு செய்தி உருவாக்கப்படுகிறது, இது ஒரு செய்தியை உருவாக்கி இயக்குகிறது. ஒரு பரிவர்த்தனையைப் போலவே, ஒரு செய்தியும் பெறுநர் கணக்கு அதன் குறியீட்டை இயக்க வழிவகுக்கிறது. இதனால், வெளிப்புற நடிகர்கள் எவ்வாறு மற்ற ஒப்பந்தங்களுடன் உறவுகளைக் கொண்டிருக்க முடியுமோ அதே வழியில் ஒப்பந்தங்களும் உறவுகளைக் கொண்டிருக்க முடியும்.
ஒரு பரிவர்த்தனை அல்லது ஒப்பந்தத்தால் ஒதுக்கப்பட்ட gas கொடுப்பனவு அந்த பரிவர்த்தனை மற்றும் அனைத்து துணை செயலாக்கங்களாலும் பயன்படுத்தப்படும் மொத்த gas-க்கும் பொருந்தும் என்பதை நினைவில் கொள்க. எடுத்துக்காட்டாக, ஒரு வெளிப்புற நடிகர் A, 1000 gas-உடன் B-க்கு ஒரு பரிவர்த்தனையை அனுப்பினால், மற்றும் C-க்கு ஒரு செய்தியை அனுப்புவதற்கு முன்பு B 600 gas-ஐப் பயன்படுத்தினால், மற்றும் C-இன் உள் செயலாக்கம் திரும்புவதற்கு முன்பு 300 gas-ஐப் பயன்படுத்தினால், B-இன் gas தீர்ந்துபோவதற்கு முன்பு B மேலும் 100 gas-ஐச் செலவிடலாம்.
Ethereum நிலை மாற்றச் செயல்பாடு
Ethereum நிலை மாற்றச் செயல்பாடு, APPLY(S,TX) -> S' பின்வருமாறு வரையறுக்கப்படலாம்:
- பரிவர்த்தனை சரியாக உள்ளதா (அதாவது, சரியான எண்ணிக்கையிலான மதிப்புகளைக் கொண்டுள்ளது), கையொப்பம் செல்லுபடியாகுமா, மற்றும் nonce அனுப்புநரின் கணக்கில் உள்ள nonce-உடன் பொருந்துகிறதா என்பதைச் சரிபார்க்கவும். இல்லையெனில், பிழையை வழங்கவும்.
- பரிவர்த்தனை கட்டணத்தை
STARTGAS * GASPRICEஎனக் கணக்கிட்டு, கையொப்பத்திலிருந்து அனுப்பும் முகவரியைத் தீர்மானிக்கவும். அனுப்புநரின் கணக்கு இருப்பிலிருந்து கட்டணத்தைக் கழித்து, அனுப்புநரின் nonce-ஐ அதிகரிக்கவும். செலவழிக்க போதுமான இருப்பு இல்லையென்றால், பிழையை வழங்கவும். GAS = STARTGASஎன்பதைத் துவக்கி, பரிவர்த்தனையில் உள்ள பைட்டுகளுக்குச் பணம் செலுத்த ஒரு பைட்டுக்கு ஒரு குறிப்பிட்ட அளவு gas-ஐ எடுக்கவும்.- பரிவர்த்தனை மதிப்பை அனுப்புநரின் கணக்கிலிருந்து பெறும் கணக்கிற்கு மாற்றவும். பெறும் கணக்கு இன்னும் இல்லை என்றால், அதை உருவாக்கவும். பெறும் கணக்கு ஒரு ஒப்பந்தமாக இருந்தால், ஒப்பந்தத்தின் குறியீட்டை முழுமையாக அல்லது செயலாக்கத்திற்கு gas தீர்ந்துபோகும் வரை இயக்கவும்.
- அனுப்புநரிடம் போதுமான பணம் இல்லாததால் மதிப்பு பரிமாற்றம் தோல்வியுற்றால், அல்லது குறியீடு செயலாக்கத்திற்கு gas தீர்ந்துவிட்டால், கட்டணம் செலுத்துவதைத் தவிர அனைத்து நிலை மாற்றங்களையும் மாற்றியமைத்து (revert), கட்டணங்களை மைனரின் (miner) கணக்கில் சேர்க்கவும்.
- இல்லையெனில், மீதமுள்ள அனைத்து gas-க்கான கட்டணங்களையும் அனுப்புநருக்குத் திருப்பி அளித்து, பயன்படுத்தப்பட்ட gas-க்காக செலுத்தப்பட்ட கட்டணங்களை மைனருக்கு அனுப்பவும்.
எடுத்துக்காட்டாக, ஒப்பந்தத்தின் குறியீடு பின்வருமாறு என்று வைத்துக்கொள்வோம்:
if !self.storage[calldataload(0)]:
self.storage[calldataload(0)] = calldataload(32)
உண்மையில் ஒப்பந்தக் குறியீடு குறைந்த-நிலை EVM குறியீட்டில் எழுதப்பட்டுள்ளது என்பதை நினைவில் கொள்க; இந்த எடுத்துக்காட்டு தெளிவுக்காக எங்கள் உயர்-நிலை மொழிகளில் ஒன்றான Serpent-இல் எழுதப்பட்டுள்ளது, மேலும் இதை EVM குறியீட்டிற்குத் தொகுக்கலாம் (compiled). ஒப்பந்தத்தின் சேமிப்பகம் காலியாகத் தொடங்குகிறது என்று வைத்துக்கொள்வோம், மேலும் 10 ether மதிப்பு, 2000 gas, 0.001 ether gasprice, மற்றும் 64 பைட்டுகள் தரவுகளுடன் ஒரு பரிவர்த்தனை அனுப்பப்படுகிறது, இதில் 0-31 பைட்டுகள் 2 என்ற எண்ணையும் 32-63 பைட்டுகள் CHARLIE என்ற சரத்தையும் (string) குறிக்கின்றன. இந்த வழக்கில் நிலை மாற்றச் செயல்பாட்டிற்கான செயல்முறை பின்வருமாறு:
- பரிவர்த்தனை செல்லுபடியாகும் மற்றும் சரியாக உள்ளதா என்பதைச் சரிபார்க்கவும்.
- பரிவர்த்தனை அனுப்புநரிடம் குறைந்தது 2000 * 0.001 = 2 ether உள்ளதா என்பதைச் சரிபார்க்கவும். இருந்தால், அனுப்புநரின் கணக்கிலிருந்து 2 ether-ஐக் கழிக்கவும்.
- gas = 2000 என்பதைத் துவக்கவும்; பரிவர்த்தனை 170 பைட்டுகள் நீளமானது மற்றும் பைட்-கட்டணம் 5 என்று வைத்துக்கொண்டால், 850-ஐக் கழிக்கவும், இதனால் 1150 gas மீதமிருக்கும்.
- அனுப்புநரின் கணக்கிலிருந்து மேலும் 10 ether-ஐக் கழித்து, அதை ஒப்பந்தத்தின் கணக்கில் சேர்க்கவும்.
- குறியீட்டை இயக்கவும். இந்த வழக்கில், இது எளிமையானது: குறியீட்டு
2-இல் உள்ள ஒப்பந்தத்தின் சேமிப்பகம் பயன்படுத்தப்படுகிறதா என்பதை இது சரிபார்க்கிறது, அது இல்லை என்பதைக் கவனிக்கிறது, எனவே இது குறியீட்டு2-இல் உள்ள சேமிப்பகத்தைCHARLIEஎன்ற மதிப்பிற்கு அமைக்கிறது. இதற்கு 187 gas தேவைப்படுகிறது என்று வைத்துக்கொள்வோம், எனவே மீதமுள்ள gas அளவு 1150 - 187 = 963 ஆகும். - 963 * 0.001 = 0.963 ether-ஐ அனுப்புநரின் கணக்கில் மீண்டும் சேர்த்து, அதன் விளைவாக வரும் நிலையை வழங்கவும்.
பரிவர்த்தனையைப் பெறும் முனையில் எந்த ஒப்பந்தமும் இல்லை என்றால், மொத்த பரிவர்த்தனை கட்டணம் வழங்கப்பட்ட GASPRICE-ஐ பரிவர்த்தனையின் நீளத்தால் பைட்டுகளில் பெருக்கினால் கிடைக்கும் மதிப்பிற்குச் சமமாக இருக்கும், மேலும் பரிவர்த்தனையுடன் அனுப்பப்பட்ட தரவு பொருத்தமற்றதாக இருக்கும்.
மாற்றியமைத்தல் (reverts) அடிப்படையில் செய்திகள் பரிவர்த்தனைகளுக்குச் சமமாகச் செயல்படுகின்றன என்பதை நினைவில் கொள்க: ஒரு செய்தி செயலாக்கத்திற்கு gas தீர்ந்துவிட்டால், அந்த செய்தியின் செயலாக்கம் மற்றும் அந்த செயலாக்கத்தால் தூண்டப்பட்ட பிற அனைத்து செயலாக்கங்களும் மாற்றியமைக்கப்படும், ஆனால் பெற்றோர் செயலாக்கங்கள் (parent executions) மாற்றியமைக்கப்பட வேண்டியதில்லை. இதன் பொருள் ஒரு ஒப்பந்தம் மற்றொரு ஒப்பந்தத்தை அழைப்பது "பாதுகாப்பானது", அதாவது A ஆனது B-ஐ G gas-உடன் அழைத்தால், A-இன் செயலாக்கம் அதிகபட்சம் G gas-ஐ இழக்க உத்தரவாதம் அளிக்கப்படுகிறது. இறுதியாக, ஒரு ஒப்பந்தத்தை உருவாக்கும் CREATE என்ற opcode உள்ளது என்பதை நினைவில் கொள்க; அதன் செயலாக்க இயக்கவியல் பொதுவாக CALL-ஐப் போன்றது, ஆனால் செயலாக்கத்தின் வெளியீடு புதிதாக உருவாக்கப்பட்ட ஒப்பந்தத்தின் குறியீட்டைத் தீர்மானிக்கிறது என்பது மட்டுமே விதிவிலக்கு.
குறியீடு செயலாக்கம்
Ethereum ஒப்பந்தங்களில் உள்ள குறியீடு குறைந்த-நிலை, அடுக்கு-அடிப்படையிலான (stack-based) பைட்கோட் மொழியில் எழுதப்பட்டுள்ளது, இது "Ethereum மெய்நிகர் இயந்திரக் குறியீடு (Ethereum virtual machine code)" அல்லது "EVM குறியீடு" என்று குறிப்பிடப்படுகிறது. குறியீடு தொடர்ச்சியான பைட்டுகளைக் கொண்டுள்ளது, அங்கு ஒவ்வொரு பைட்டும் ஒரு செயல்பாட்டைக் குறிக்கிறது. பொதுவாக, குறியீடு செயலாக்கம் என்பது ஒரு முடிவற்ற சுழலாகும், இது தற்போதைய நிரல் கவுண்டரில் (இது பூஜ்ஜியத்தில் தொடங்குகிறது) செயல்பாட்டை மீண்டும் மீண்டும் மேற்கொள்வதையும், பின்னர் குறியீட்டின் முடிவை அடையும் வரை அல்லது பிழை அல்லது STOP அல்லது RETURN அறிவுறுத்தல் கண்டறியப்படும் வரை நிரல் கவுண்டரை ஒன்றால் அதிகரிப்பதையும் கொண்டுள்ளது. தரவைச் சேமிக்க செயல்பாடுகளுக்கு மூன்று வகையான இடங்களுக்கான அணுகல் உள்ளது:
- அடுக்கு (stack), மதிப்புகளைத் தள்ளவும் (pushed) எடுக்கவும் (popped) கூடிய கடைசியாக-உள்ளே-முதலில்-வெளியே (last-in-first-out) கொள்கலன்
- நினைவகம் (Memory), முடிவில்லாமல் விரிவாக்கக்கூடிய பைட் வரிசை
- ஒப்பந்தத்தின் நீண்ட கால சேமிப்பகம் (storage), ஒரு விசை/மதிப்பு (key/value) சேமிப்பகம். கணக்கீடு முடிந்ததும் மீட்டமைக்கப்படும் அடுக்கு மற்றும் நினைவகத்தைப் போலல்லாமல், சேமிப்பகம் நீண்ட காலத்திற்குத் தொடர்கிறது.
உள்வரும் செய்தியின் மதிப்பு, அனுப்புநர் மற்றும் தரவு, அத்துடன் பிளாக் தலைப்புத் தரவு (block header data) ஆகியவற்றையும் குறியீடு அணுக முடியும், மேலும் குறியீடு தரவின் பைட் வரிசையை வெளியீடாகவும் வழங்க முடியும்.
EVM குறியீட்டின் முறையான செயலாக்க மாதிரி ஆச்சரியப்படும் விதமாக எளிமையானது. Ethereum மெய்நிகர் இயந்திரம் இயங்கும்போது, அதன் முழு கணக்கீட்டு நிலையை (block_state, transaction, message, code, memory, stack, pc, gas) என்ற டியூப்பிள் (tuple) மூலம் வரையறுக்கலாம், இதில் block_state என்பது அனைத்து கணக்குகளையும் உள்ளடக்கிய உலகளாவிய நிலையாகும், மேலும் இது இருப்புகள் மற்றும் சேமிப்பகத்தை உள்ளடக்கியது. ஒவ்வொரு சுற்று செயலாக்கத்தின் தொடக்கத்திலும், code-இன் pc-ஆவது பைட்டை எடுப்பதன் மூலம் தற்போதைய அறிவுறுத்தல் கண்டறியப்படுகிறது (அல்லது pc >= len(code) ஆக இருந்தால் 0), மேலும் ஒவ்வொரு அறிவுறுத்தலும் டியூப்பிளை எவ்வாறு பாதிக்கிறது என்பதன் அடிப்படையில் அதன் சொந்த வரையறையைக் கொண்டுள்ளது. எடுத்துக்காட்டாக, ADD அடுக்கிலிருந்து இரண்டு உருப்படிகளை எடுத்து அவற்றின் கூட்டுத்தொகையைத் தள்ளுகிறது, gas-ஐ 1 குறைக்கிறது மற்றும் pc-ஐ 1 அதிகரிக்கிறது, மேலும் SSTORE அடுக்கிலிருந்து முதல் இரண்டு உருப்படிகளை எடுத்து இரண்டாவது உருப்படியை முதல் உருப்படியால் குறிப்பிடப்பட்ட குறியீட்டில் ஒப்பந்தத்தின் சேமிப்பகத்தில் செருகுகிறது. ஜஸ்ட்-இன்-டைம் (just-in-time) தொகுப்பு மூலம் Ethereum மெய்நிகர் இயந்திர செயலாக்கத்தை மேம்படுத்த பல வழிகள் இருந்தாலும், Ethereum-இன் அடிப்படைச் செயலாக்கத்தை சில நூறு வரி குறியீட்டில் செய்யலாம்.
பிளாக்செயின் மற்றும் மைனிங்
Ethereum பிளாக்செயின் பல வழிகளில் Bitcoin பிளாக்செயினைப் போன்றது, இருப்பினும் இது சில வேறுபாடுகளைக் கொண்டுள்ளது. பிளாக்செயின் கட்டமைப்பைப் பொறுத்தவரை Ethereum மற்றும் Bitcoin-க்கு இடையிலான முக்கிய வேறுபாடு என்னவென்றால், Bitcoin-ஐப் போலல்லாமல், Ethereum பிளாக்குகள் பரிவர்த்தனை பட்டியல் மற்றும் மிகச் சமீபத்திய நிலை இரண்டின் நகலையும் கொண்டுள்ளன. அது தவிர, பிளாக் எண் மற்றும் சிரமம் (difficulty) ஆகிய வேறு இரண்டு மதிப்புகளும் பிளாக்கில் சேமிக்கப்படுகின்றன. Ethereum-இல் அடிப்படை பிளாக் சரிபார்ப்பு அல்காரிதம் பின்வருமாறு:
- குறிப்பிடப்பட்ட முந்தைய பிளாக் உள்ளதா மற்றும் செல்லுபடியாகுமா என்பதைச் சரிபார்க்கவும்.
- பிளாக்கின் நேரமுத்திரை (timestamp) குறிப்பிடப்பட்ட முந்தைய பிளாக்கின் நேரமுத்திரையை விட அதிகமாக உள்ளதா மற்றும் எதிர்காலத்தில் 15 நிமிடங்களுக்குக் குறைவாக உள்ளதா என்பதைச் சரிபார்க்கவும்.
- பிளாக் எண், சிரமம், பரிவர்த்தனை ரூட் (transaction root), அங்கிள் ரூட் (uncle root) மற்றும் gas வரம்பு (பல்வேறு குறைந்த-நிலை Ethereum-குறிப்பிட்ட கருத்துகள்) ஆகியவை செல்லுபடியாகுமா என்பதைச் சரிபார்க்கவும்.
- பிளாக்கில் உள்ள வேலை-ஆதாரம் (proof-of-work) செல்லுபடியாகுமா என்பதைச் சரிபார்க்கவும்.
S[0]என்பது முந்தைய பிளாக்கின் முடிவில் உள்ள நிலையாக இருக்கட்டும்.TXஎன்பதுnபரிவர்த்தனைகளைக் கொண்ட பிளாக்கின் பரிவர்த்தனை பட்டியலாக இருக்கட்டும்.0...n-1-இல் உள்ள அனைத்துi-க்கும்,S[i+1] = APPLY(S[i],TX[i])என அமைக்கவும். ஏதேனும் பயன்பாடுகள் பிழையை வழங்கினால், அல்லது இதுவரையிலான பிளாக்கில் பயன்படுத்தப்பட்ட மொத்த gasGASLIMIT-ஐத் தாண்டினால், பிழையை வழங்கவும்.S_FINALஎன்பதுS[n]ஆக இருக்கட்டும், ஆனால் மைனருக்குச் செலுத்தப்பட்ட பிளாக் வெகுமதியைச் சேர்க்கவும்.S_FINALநிலையின் மெர்க்கல் ட்ரீ ரூட் (Merkle tree root) பிளாக் தலைப்பில் வழங்கப்பட்ட இறுதி நிலை ரூட்டிற்குச் சமமாக உள்ளதா என்பதைச் சரிபார்க்கவும். அது சமமாக இருந்தால், பிளாக் செல்லுபடியாகும்; இல்லையெனில், அது செல்லுபடியாகாது.
இந்த அணுகுமுறை முதல் பார்வையில் மிகவும் திறமையற்றதாகத் தோன்றலாம், ஏனெனில் இது ஒவ்வொரு பிளாக்குடனும் முழு நிலையையும் சேமிக்க வேண்டும், ஆனால் உண்மையில் செயல்திறன் Bitcoin-இன் செயல்திறனுடன் ஒப்பிடக்கூடியதாக இருக்க வேண்டும். காரணம், நிலை மர அமைப்பில் (tree structure) சேமிக்கப்படுகிறது, மேலும் ஒவ்வொரு பிளாக்கிற்கும் பிறகு மரத்தின் ஒரு சிறிய பகுதியை மட்டுமே மாற்ற வேண்டும். இதனால், பொதுவாக, இரண்டு அருகிலுள்ள பிளாக்குகளுக்கு இடையில் மரத்தின் பெரும்பகுதி ஒரே மாதிரியாக இருக்க வேண்டும், எனவே தரவை ஒரு முறை சேமித்து சுட்டிகளைப் (pointers) பயன்படுத்தி (அதாவது, துணை மரங்களின் ஹாஷ்கள்) இருமுறை குறிப்பிடலாம். இதைச் சாதிக்க "பாட்ரிசியா மரம் (Patricia tree)" எனப்படும் ஒரு சிறப்பு வகையான மரம் பயன்படுத்தப்படுகிறது, இதில் மெர்க்கல் ட்ரீ கருத்தாக்கத்தில் ஒரு மாற்றம் அடங்கும், இது முனைகளை (nodes) திறமையாகச் செருகவும் நீக்கவும் அனுமதிக்கிறது, மாற்றப்படுவது மட்டுமல்ல. கூடுதலாக, அனைத்து நிலைத் தகவல்களும் கடைசி பிளாக்கின் ஒரு பகுதியாக இருப்பதால், முழு பிளாக்செயின் வரலாற்றையும் சேமிக்க வேண்டிய அவசியமில்லை - இந்த உத்தியை Bitcoin-க்கு பயன்படுத்த முடிந்தால், விண்வெளியில் 5-20 மடங்கு சேமிப்பை வழங்கும் என்று கணக்கிடலாம்.
இயற்பியல் வன்பொருளின் அடிப்படையில் ஒப்பந்தக் குறியீடு "எங்கே" செயல்படுத்தப்படுகிறது என்பது பொதுவாகக் கேட்கப்படும் கேள்வியாகும். இதற்கு ஒரு எளிய பதில் உள்ளது: ஒப்பந்தக் குறியீட்டைச் செயல்படுத்தும் செயல்முறை நிலை மாற்றச் செயல்பாட்டின் வரையறையின் ஒரு பகுதியாகும், இது பிளாக் சரிபார்ப்பு அல்காரிதத்தின் ஒரு பகுதியாகும், எனவே ஒரு பரிவர்த்தனை பிளாக் B-இல் சேர்க்கப்பட்டால், அந்த பரிவர்த்தனையால் உருவாக்கப்பட்ட குறியீடு செயலாக்கம், பிளாக் B-ஐப் பதிவிறக்கம் செய்து சரிபார்க்கும் அனைத்து முனைகளாலும் (nodes), இப்போதும் எதிர்காலத்திலும் செயல்படுத்தப்படும்.
பயன்பாடுகள்
பொதுவாக, Ethereum-இன் மீது மூன்று வகையான பயன்பாடுகள் உள்ளன. முதல் வகை நிதிப் பயன்பாடுகள் (financial applications), இது பயனர்கள் தங்கள் பணத்தைப் பயன்படுத்தி ஒப்பந்தங்களை நிர்வகிக்கவும், அவற்றில் ஈடுபடவும் மிகவும் சக்திவாய்ந்த வழிகளை வழங்குகிறது. இதில் துணை நாணயங்கள் (sub-currencies), நிதி வழித்தோன்றல்கள் (financial derivatives), ஹெட்ஜிங் ஒப்பந்தங்கள் (hedging contracts), சேமிப்பு வாலெட்டுகள் (savings wallets), உயில்கள் (wills) மற்றும் இறுதியில் சில வகையான முழு அளவிலான வேலைவாய்ப்பு ஒப்பந்தங்கள் கூட அடங்கும். இரண்டாவது வகை அரை-நிதிப் பயன்பாடுகள் (semi-financial applications), இதில் பணம் சம்பந்தப்பட்டிருந்தாலும், செய்யப்படும் செயலில் பணமில்லாத பக்கமும் அதிக அளவில் இருக்கும்; கணக்கீட்டுச் சிக்கல்களுக்கான தீர்வுகளுக்குத் தானாகவே செயல்படுத்தப்படும் வெகுமதிகள் (self-enforcing bounties) இதற்கு ஒரு சிறந்த எடுத்துக்காட்டாகும். இறுதியாக, ஆன்லைன் வாக்குப்பதிவு மற்றும் பரவலாக்கப்பட்ட நிர்வாகம் (decentralized governance) போன்ற பயன்பாடுகள் உள்ளன, அவை முற்றிலும் நிதி சார்ந்தவை அல்ல.
டோக்கன் அமைப்புகள்
பிளாக்செயினில் உள்ள டோக்கன் அமைப்புகள், USD அல்லது தங்கம் போன்ற சொத்துகளைக் குறிக்கும் துணை நாணயங்கள் முதல் நிறுவனப் பங்குகள், ஸ்மார்ட் சொத்துகளைக் குறிக்கும் தனிப்பட்ட டோக்கன்கள், பாதுகாப்பான போலியாக்க முடியாத கூப்பன்கள் மற்றும் வழக்கமான மதிப்புடன் எந்தத் தொடர்பும் இல்லாத, ஊக்கமளிப்பதற்கான பாயிண்ட் அமைப்புகளாகப் பயன்படுத்தப்படும் டோக்கன் அமைப்புகள் வரை பல பயன்பாடுகளைக் கொண்டுள்ளன. Ethereum-இல் டோக்கன் அமைப்புகளைச் செயல்படுத்துவது வியக்கத்தக்க வகையில் எளிதானது. புரிந்துகொள்ள வேண்டிய முக்கிய அம்சம் என்னவென்றால், ஒரு நாணயம் அல்லது டோக்கன் அமைப்பு என்பது அடிப்படையில் ஒரு தரவுத்தளமாகும், இதில் ஒரே ஒரு செயல்பாடு மட்டுமே உள்ளது: A-யிலிருந்து X யூனிட்களைக் கழித்து, B-க்கு X யூனிட்களை வழங்குவது, இதற்கான நிபந்தனைகள் (i) பரிவர்த்தனைக்கு முன்பு A-யிடம் குறைந்தபட்சம் X யூனிட்கள் இருந்திருக்க வேண்டும் மற்றும் (2) பரிவர்த்தனை A-யால் அங்கீகரிக்கப்பட வேண்டும். ஒரு டோக்கன் அமைப்பைச் செயல்படுத்த, இந்த லாஜிக்கை ஒரு ஒப்பந்தத்தில் (contract) செயல்படுத்தினால் மட்டுமே போதுமானது.
Serpent-இல் ஒரு டோக்கன் அமைப்பைச் செயல்படுத்துவதற்கான அடிப்படை குறியீடு பின்வருமாறு இருக்கும்:
def send(to, value):
if self.storage[msg.sender] >= value:
self.storage[msg.sender] = self.storage[msg.sender] - value
self.storage[to] = self.storage[to] + value
இது அடிப்படையில் இந்த ஆவணத்தில் மேலே விவரிக்கப்பட்டுள்ள "வங்கி அமைப்பு" (banking system) நிலை மாற்றச் செயல்பாட்டின் (state transition function) நேரடிச் செயலாக்கமாகும். நாணய யூனிட்களை முதலில் விநியோகிப்பதற்கான ஆரம்பப் படி மற்றும் வேறு சில விளிம்பு நிலைகளை (edge cases) வழங்குவதற்குச் சில கூடுதல் குறியீட்டு வரிகளைச் சேர்க்க வேண்டும், மேலும் ஒரு முகவரியின் இருப்பை (balance) மற்ற ஒப்பந்தங்கள் வினவுவதற்கு (query) ஒரு செயல்பாடு சேர்க்கப்படுவது சிறந்தது. ஆனால் அவ்வளவுதான். கோட்பாட்டளவில், துணை நாணயங்களாகச் செயல்படும் Ethereum அடிப்படையிலான டோக்கன் அமைப்புகள், ஆன்செயின் Bitcoin அடிப்படையிலான மெட்டா-நாணயங்களில் இல்லாத மற்றொரு முக்கியமான அம்சத்தை உள்ளடக்கியிருக்கலாம்: பரிவர்த்தனைக் கட்டணங்களை நேரடியாக அந்த நாணயத்திலேயே செலுத்தும் திறன். இது எவ்வாறு செயல்படுத்தப்படும் என்றால், ஒப்பந்தம் ஒரு ether இருப்பைப் பராமரிக்கும், அதைக் கொண்டு அனுப்புநருக்குக் கட்டணம் செலுத்தப் பயன்படுத்தப்பட்ட ether-ஐத் திருப்பித் தரும், மேலும் கட்டணமாகப் பெறும் உள் நாணய யூனிட்களைச் சேகரித்து, தொடர்ந்து நடைபெறும் ஏலத்தில் அவற்றை மீண்டும் விற்பதன் மூலம் இந்த இருப்பை நிரப்பும். எனவே பயனர்கள் தங்கள் கணக்குகளை ether மூலம் "செயல்படுத்த" (activate) வேண்டும், ஆனால் ether அங்கு வந்தவுடன் அது மீண்டும் பயன்படுத்தக்கூடியதாக இருக்கும், ஏனெனில் ஒப்பந்தம் ஒவ்வொரு முறையும் அதைத் திருப்பித் தரும்.
நிதி வழித்தோன்றல்கள் மற்றும் நிலையான மதிப்புள்ள நாணயங்கள்
நிதி வழித்தோன்றல்கள் (Financial derivatives) "ஸ்மார்ட் ஒப்பந்தத்தின்" மிகவும் பொதுவான பயன்பாடாகும், மேலும் குறியீட்டில் செயல்படுத்துவதற்கு மிகவும் எளிமையானவற்றில் ஒன்றாகும். நிதி ஒப்பந்தங்களைச் செயல்படுத்துவதில் உள்ள முக்கிய சவால் என்னவென்றால், அவற்றில் பெரும்பாலானவை வெளிப்புற விலைக் குறியீட்டைக் (price ticker) குறிப்பிட வேண்டும்; எடுத்துக்காட்டாக, US டாலரைப் பொறுத்து ether-இன் (அல்லது மற்றொரு கிரிப்டோகரன்சியின்) ஏற்ற இறக்கத்திற்கு எதிராக ஹெட்ஜ் செய்யும் (hedges) ஒரு ஸ்மார்ட் ஒப்பந்தம் மிகவும் விரும்பத்தக்க பயன்பாடாகும், ஆனால் இதைச் செய்வதற்கு ஒப்பந்தத்திற்கு ETH/USD-இன் மதிப்பு என்னவென்று தெரிந்திருக்க வேண்டும். இதைச் செய்வதற்கான எளிமையான வழி, ஒரு குறிப்பிட்ட தரப்பினரால் (எ.கா., NASDAQ) பராமரிக்கப்படும் "தரவு ஊட்டம்" (data feed) ஒப்பந்தத்தின் மூலமாகும், அந்தத் தரப்பினர் தேவைக்கேற்ப ஒப்பந்தத்தைப் புதுப்பிக்கும் திறனைக் கொண்டிருக்கும் வகையில் வடிவமைக்கப்பட்டுள்ளது, மேலும் மற்ற ஒப்பந்தங்கள் அந்த ஒப்பந்தத்திற்கு ஒரு செய்தியை அனுப்பி, விலையை வழங்கும் பதிலைப் பெற அனுமதிக்கும் ஒரு இடைமுகத்தை (interface) வழங்குகிறது.
அந்த முக்கியமான கூறு கொடுக்கப்பட்டால், ஹெட்ஜிங் ஒப்பந்தம் பின்வருமாறு இருக்கும்:
- தரப்பு A 1000 ether-ஐ உள்ளிடும் வரை காத்திருக்கவும்.
- தரப்பு B 1000 ether-ஐ உள்ளிடும் வரை காத்திருக்கவும்.
- தரவு ஊட்ட ஒப்பந்தத்தை வினவுவதன் மூலம் கணக்கிடப்பட்ட 1000 ether-இன் USD மதிப்பைச் சேமிப்பகத்தில் பதிவு செய்யவும், இது $x என்று வைத்துக்கொள்வோம்.
- 30 நாட்களுக்குப் பிறகு, A-க்கு $x மதிப்புள்ள ether-ஐயும் (புதிய விலையைப் பெற தரவு ஊட்ட ஒப்பந்தத்தை மீண்டும் வினவுவதன் மூலம் கணக்கிடப்படுகிறது) மீதமுள்ளதை B-க்கும் அனுப்புவதற்காக ஒப்பந்தத்தை "மீண்டும் செயல்படுத்த" (reactivate) A அல்லது B-ஐ அனுமதிக்கவும்.
இத்தகைய ஒப்பந்தம் கிரிப்டோ-வர்த்தகத்தில் குறிப்பிடத்தக்க ஆற்றலைக் கொண்டிருக்கும். கிரிப்டோகரன்சி பற்றி மேற்கோள் காட்டப்படும் முக்கியப் பிரச்சனைகளில் ஒன்று, அது ஏற்ற இறக்கம் (volatile) கொண்டது என்பதே; பல பயனர்களும் வணிகர்களும் கிரிப்டோகிராஃபிக் சொத்துகளைக் கையாள்வதன் பாதுகாப்பையும் வசதியையும் விரும்பினாலும், ஒரே நாளில் தங்கள் நிதியின் மதிப்பில் 23%-ஐ இழக்கும் வாய்ப்பை எதிர்கொள்ள அவர்கள் விரும்பாமல் இருக்கலாம். இதுவரை, மிகவும் பொதுவாக முன்மொழியப்பட்ட தீர்வு வழங்குநரால் ஆதரிக்கப்படும் சொத்துகள் (issuer-backed assets) ஆகும்; இதன் யோசனை என்னவென்றால், ஒரு வழங்குநர் ஒரு துணை நாணயத்தை உருவாக்குகிறார், அதில் யூனிட்களை வழங்கவும் திரும்பப் பெறவும் அவர்களுக்கு உரிமை உள்ளது, மேலும் ஒரு குறிப்பிட்ட அடிப்படைச் சொத்தின் (எ.கா., தங்கம், USD) ஒரு யூனிட்டை (ஆஃப்லைனில்) அவர்களுக்கு வழங்கும் எவருக்கும் நாணயத்தின் ஒரு யூனிட்டை வழங்குகிறார்கள். கிரிப்டோ-சொத்தின் ஒரு யூனிட்டைத் திருப்பி அனுப்பும் எவருக்கும் அடிப்படைச் சொத்தின் ஒரு யூனிட்டை வழங்குவதாக வழங்குநர் உறுதியளிக்கிறார். வழங்குநரை நம்ப முடியும் என்ற நிபந்தனையின் பேரில், எந்தவொரு கிரிப்டோகிராஃபிக் அல்லாத சொத்தையும் கிரிப்டோகிராஃபிக் சொத்தாக "உயர்த்த" (uplifted) இந்த வழிமுறை அனுமதிக்கிறது.
இருப்பினும், நடைமுறையில், வழங்குநர்கள் எப்போதும் நம்பகமானவர்கள் அல்ல, மேலும் சில சந்தர்ப்பங்களில் இத்தகைய சேவைகள் இருப்பதற்கு வங்கி உள்கட்டமைப்பு மிகவும் பலவீனமாகவோ அல்லது மிகவும் விரோதமாகவோ உள்ளது. நிதி வழித்தோன்றல்கள் ஒரு மாற்று வழியை வழங்குகின்றன. இங்கே, ஒரு சொத்தை ஆதரிக்க ஒரு வழங்குநர் நிதியை வழங்குவதற்குப் பதிலாக, ஒரு கிரிப்டோகிராஃபிக் குறிப்புச் சொத்தின் (எ.கா., ETH) விலை உயரும் என்று பந்தயம் கட்டும் ஊக வணிகர்களின் (speculators) பரவலாக்கப்பட்ட சந்தை அந்தப் பாத்திரத்தை வகிக்கிறது. வழங்குநர்களைப் போலல்லாமல், ஊக வணிகர்கள் தங்கள் தரப்பு ஒப்பந்தத்தை மீறுவதற்கு எந்த விருப்பமும் இல்லை, ஏனெனில் ஹெட்ஜிங் ஒப்பந்தம் அவர்களின் நிதியை எஸ்க்ரோவில் (escrow) வைத்திருக்கிறது. விலைக் குறியீட்டை வழங்க நம்பகமான ஆதாரம் இன்னும் தேவைப்படுவதால், இந்த அணுகுமுறை முழுமையாகப் பரவலாக்கப்படவில்லை என்பதை நினைவில் கொள்ளவும், இருப்பினும் உள்கட்டமைப்புத் தேவைகளைக் குறைப்பதிலும் (ஒரு வழங்குநராக இருப்பதைப் போலல்லாமல், விலை ஊட்டத்தை வழங்குவதற்கு உரிமங்கள் எதுவும் தேவையில்லை மற்றும் இது பேச்சு சுதந்திரமாக வகைப்படுத்தப்படலாம்) மற்றும் மோசடிக்கான சாத்தியக்கூறுகளைக் குறைப்பதிலும் இது ஒரு பெரிய முன்னேற்றமாகும்.
அடையாளம் மற்றும் நற்பெயர் அமைப்புகள்
எல்லாவற்றிலும் ஆரம்பகால மாற்று கிரிப்டோகரன்சியான Namecoin (opens in a new tab), பெயர் பதிவு அமைப்பை வழங்க Bitcoin போன்ற பிளாக்செயினைப் பயன்படுத்த முயன்றது, இதில் பயனர்கள் தங்கள் பெயர்களை மற்ற தரவுகளுடன் பொதுத் தரவுத்தளத்தில் பதிவு செய்யலாம். "bitcoin.org" (அல்லது, Namecoin-இன் விஷயத்தில், "bitcoin.bit") போன்ற டொமைன் பெயர்களை IP முகவரிக்கு மேப் செய்யும் DNS (opens in a new tab) அமைப்பு இதற்கான முக்கியப் பயன்பாடாகக் குறிப்பிடப்படுகிறது. மின்னஞ்சல் அங்கீகாரம் மற்றும் மேம்பட்ட நற்பெயர் அமைப்புகள் (reputation systems) ஆகியவை பிற பயன்பாடுகளில் அடங்கும். Ethereum-இல் Namecoin போன்ற பெயர் பதிவு அமைப்பை வழங்குவதற்கான அடிப்படை ஒப்பந்தம் இங்கே:
def register(name, value):
if !self.storage[name]:
self.storage[name] = value
ஒப்பந்தம் மிகவும் எளிமையானது; இது Ethereum நெட்வொர்க்கிற்குள் உள்ள ஒரு தரவுத்தளமாகும், இதில் சேர்க்க முடியும், ஆனால் மாற்றவோ அல்லது அகற்றவோ முடியாது. யார் வேண்டுமானாலும் சில மதிப்புடன் ஒரு பெயரைப் பதிவு செய்யலாம், அந்தப் பதிவு பின்னர் என்றென்றும் நிலைத்திருக்கும். மிகவும் அதிநவீன பெயர் பதிவு ஒப்பந்தம், மற்ற ஒப்பந்தங்கள் அதை வினவ அனுமதிக்கும் "செயல்பாட்டு விதியையும்" (function clause), ஒரு பெயரின் "உரிமையாளர்" (அதாவது, முதல் பதிவாளர்) தரவை மாற்ற அல்லது உரிமையை மாற்றுவதற்கான வழிமுறையையும் கொண்டிருக்கும். இதன் மேல் நற்பெயர் மற்றும் வெப்-ஆஃப்-ட்ரஸ்ட் (web-of-trust) செயல்பாட்டைக் கூட ஒருவர் சேர்க்கலாம்.
பரவலாக்கப்பட்ட கோப்புச் சேமிப்பகம்
கடந்த சில ஆண்டுகளில், பல பிரபலமான ஆன்லைன் கோப்புச் சேமிப்பக ஸ்டார்ட்அப்கள் உருவாகியுள்ளன, அவற்றில் மிகவும் முக்கியமானது Dropbox ஆகும், இது பயனர்கள் தங்கள் ஹார்ட் டிரைவின் காப்புப்பிரதியைப் பதிவேற்றவும், மாதாந்திரக் கட்டணத்திற்குப் பதிலாகச் சேவையானது காப்புப்பிரதியைச் சேமித்து பயனரை அணுக அனுமதிக்கவும் முற்படுகிறது. இருப்பினும், இந்த நேரத்தில் கோப்புச் சேமிப்பகச் சந்தை சில நேரங்களில் ஒப்பீட்டளவில் திறனற்றதாக உள்ளது; தற்போதுள்ள பல்வேறு தீர்வுகளை மேலோட்டமாகப் பார்க்கும்போது, குறிப்பாக இலவச ஒதுக்கீடுகளோ அல்லது நிறுவன அளவிலான தள்ளுபடிகளோ கிடைக்காத "அன்கேனி வேலி" (uncanny valley) 20-200 GB அளவில், பிரதான கோப்புச் சேமிப்பகச் செலவுகளுக்கான மாதாந்திர விலைகள், ஒரே மாதத்தில் முழு ஹார்ட் டிரைவின் விலையை விட அதிகமாகச் செலுத்தும் வகையில் உள்ளன. Ethereum ஒப்பந்தங்கள் பரவலாக்கப்பட்ட கோப்புச் சேமிப்பகச் சூழலமைப்பை உருவாக்க அனுமதிக்கலாம், இதில் தனிப்பட்ட பயனர்கள் தங்கள் சொந்த ஹார்ட் டிரைவ்களை வாடகைக்கு விடுவதன் மூலம் சிறிய அளவிலான பணத்தைச் சம்பாதிக்கலாம் மற்றும் பயன்படுத்தப்படாத இடத்தைக் கோப்புச் சேமிப்பகத்தின் செலவுகளை மேலும் குறைக்கப் பயன்படுத்தலாம்.
அத்தகைய சாதனத்தின் முக்கிய அடிப்படைப் பகுதி, நாம் "பரவலாக்கப்பட்ட Dropbox ஒப்பந்தம்" என்று அழைப்பதாக இருக்கும். இந்த ஒப்பந்தம் பின்வருமாறு செயல்படுகிறது. முதலில், ஒருவர் விரும்பிய தரவை பிளாக்குகளாகப் பிரித்து, தனியுரிமைக்காக ஒவ்வொரு பிளாக்கையும் என்க்ரிப்ட் செய்து, அதிலிருந்து ஒரு Merkle ட்ரீயை (Merkle tree) உருவாக்குகிறார். பின்னர் ஒருவர் ஒரு ஒப்பந்தத்தை உருவாக்குகிறார், அதன்படி ஒவ்வொரு N பிளாக்குகளுக்கும், ஒப்பந்தம் Merkle ட்ரீயில் ஒரு சீரற்ற குறியீட்டைத் (random index) தேர்ந்தெடுக்கும் (ஒப்பந்தக் குறியீட்டிலிருந்து அணுகக்கூடிய முந்தைய பிளாக் ஹாஷை சீரற்ற தன்மைக்கான ஆதாரமாகப் பயன்படுத்தி), மேலும் ட்ரீயில் உள்ள அந்த குறிப்பிட்ட குறியீட்டில் பிளாக்கின் உரிமையைப் பற்றிய எளிமைப்படுத்தப்பட்ட கட்டணச் சரிபார்ப்பு போன்ற ஆதாரத்துடன் (simplified payment verification-like proof of ownership) ஒரு பரிவர்த்தனையை வழங்கும் முதல் நிறுவனத்திற்கு X ether-ஐ வழங்கும். ஒரு பயனர் தங்கள் கோப்பை மீண்டும் பதிவிறக்க விரும்பினால், கோப்பை மீட்டெடுக்க அவர்கள் மைக்ரோபேமென்ட் சேனல் நெறிமுறையைப் (micropayment channel protocol) பயன்படுத்தலாம் (எ.கா., 32 கிலோபைட்டுகளுக்கு 1 szabo செலுத்தவும்); பணம் செலுத்துபவர் பரிவர்த்தனையை இறுதி வரை வெளியிடாமல் இருப்பது மிகவும் கட்டணச் செயல்திறன் மிக்க அணுகுமுறையாகும், அதற்குப் பதிலாக ஒவ்வொரு 32 கிலோபைட்டுகளுக்குப் பிறகும் அதே நான்ஸுடன் (nonce) சற்று அதிக லாபகரமான பரிவர்த்தனையுடன் பரிவர்த்தனையை மாற்றலாம்.
நெறிமுறையின் ஒரு முக்கியமான அம்சம் என்னவென்றால், கோப்பை மறக்க முடிவு செய்யாத பல சீரற்ற நோடுகளை (random nodes) ஒருவர் நம்புவது போல் தோன்றினாலும், ரகசியப் பகிர்வு (secret sharing) மூலம் கோப்பைப் பல துண்டுகளாகப் பிரித்து, ஒவ்வொரு துண்டும் இன்னும் சில நோடுகளின் வசம் உள்ளதா என்பதைப் பார்க்க ஒப்பந்தங்களைக் கண்காணிப்பதன் மூலம் அந்த அபாயத்தை கிட்டத்தட்ட பூஜ்ஜியமாகக் குறைக்கலாம். ஒரு ஒப்பந்தம் இன்னும் பணத்தைச் செலுத்துகிறது என்றால், யாரோ ஒருவர் இன்னும் கோப்பைச் சேமித்து வைத்திருக்கிறார் என்பதற்கான கிரிப்டோகிராஃபிக் ஆதாரத்தை அது வழங்குகிறது.
பரவலாக்கப்பட்ட தன்னாட்சி அமைப்புகள்
"பரவலாக்கப்பட்ட தன்னாட்சி அமைப்பு" (decentralized autonomous organization) என்பதன் பொதுவான கருத்துரு, ஒரு குறிப்பிட்ட உறுப்பினர்கள் அல்லது பங்குதாரர்களைக் கொண்ட ஒரு மெய்நிகர் நிறுவனமாகும், இது 67% பெரும்பான்மையுடன், நிறுவனத்தின் நிதியைச் செலவழிக்கவும் அதன் குறியீட்டை மாற்றவும் உரிமை கொண்டுள்ளது. அமைப்பு தனது நிதியை எவ்வாறு ஒதுக்க வேண்டும் என்பதை உறுப்பினர்கள் கூட்டாக முடிவு செய்வார்கள். ஒரு DAO-இன் நிதியை ஒதுக்குவதற்கான முறைகள் வெகுமதிகள், சம்பளங்கள் முதல் வேலைக்கு வெகுமதி அளிக்க உள் நாணயம் போன்ற இன்னும் கவர்ச்சியான வழிமுறைகள் வரை இருக்கலாம். இது அடிப்படையில் ஒரு பாரம்பரிய நிறுவனம் அல்லது இலாப நோக்கற்ற நிறுவனத்தின் சட்டப்பூர்வமான அம்சங்களைப் பிரதிபலிக்கிறது, ஆனால் செயல்படுத்துவதற்கு கிரிப்டோகிராஃபிக் பிளாக்செயின் தொழில்நுட்பத்தை மட்டுமே பயன்படுத்துகிறது. இதுவரை DAO-களைச் சுற்றியுள்ள பெரும்பாலான பேச்சுகள் ஈவுத்தொகை பெறும் பங்குதாரர்கள் மற்றும் வர்த்தகம் செய்யக்கூடிய பங்குகளைக் கொண்ட "பரவலாக்கப்பட்ட தன்னாட்சிக் கழகத்தின்" (decentralized autonomous corporation - DAC) "முதலாளித்துவ" மாதிரியைச் சுற்றியே உள்ளன; ஒரு மாற்று, ஒருவேளை "பரவலாக்கப்பட்ட தன்னாட்சிச் சமூகம்" (decentralized autonomous community) என்று விவரிக்கப்படலாம், இதில் அனைத்து உறுப்பினர்களும் முடிவெடுப்பதில் சமமான பங்கைக் கொண்டிருப்பார்கள் மற்றும் ஒரு உறுப்பினரைச் சேர்க்க அல்லது நீக்க தற்போதுள்ள உறுப்பினர்களில் 67% பேர் ஒப்புக்கொள்ள வேண்டும். ஒரு நபருக்கு ஒரு உறுப்பினர் உரிமை மட்டுமே இருக்க முடியும் என்ற நிபந்தனை பின்னர் குழுவால் கூட்டாகச் செயல்படுத்தப்பட வேண்டும்.
ஒரு DAO-ஐ எவ்வாறு குறியீடு செய்வது என்பதற்கான பொதுவான রূপরেখা (outline) பின்வருமாறு. எளிமையான வடிவமைப்பு என்பது, மூன்றில் இரண்டு பங்கு உறுப்பினர்கள் ஒரு மாற்றத்திற்கு ஒப்புக்கொண்டால் மாறும் சுய-மாற்றியமைக்கும் குறியீட்டின் (self-modifying code) ஒரு பகுதியாகும். குறியீடு கோட்பாட்டளவில் மாறாதது என்றாலும், குறியீட்டின் பகுதிகளைத் தனித்தனி ஒப்பந்தங்களில் வைத்திருப்பதன் மூலமும், எந்த ஒப்பந்தங்களை அழைக்க வேண்டும் என்பதற்கான முகவரியை மாற்றக்கூடிய சேமிப்பகத்தில் சேமித்து வைப்பதன் மூலமும் ஒருவர் இதை எளிதாகத் தவிர்த்து, நடைமுறையில் மாறும் தன்மையைக் (de-facto mutability) கொண்டிருக்கலாம். அத்தகைய DAO ஒப்பந்தத்தின் எளிய செயலாக்கத்தில், பரிவர்த்தனையில் வழங்கப்பட்ட தரவுகளால் வேறுபடுத்தப்படும் மூன்று பரிவர்த்தனை வகைகள் இருக்கும்:
[0,i,K,V]சேமிப்பகக் குறியீடுK-இல் உள்ள முகவரியை மதிப்புV-க்கு மாற்றுவதற்கு குறியீடுi-உடன் ஒரு முன்மொழிவைப் பதிவு செய்ய[1,i]முன்மொழிவுi-க்கு ஆதரவாக ஒரு வாக்கைப் பதிவு செய்ய[2,i]போதுமான வாக்குகள் அளிக்கப்பட்டிருந்தால் முன்மொழிவுi-ஐ இறுதி செய்ய
ஒப்பந்தம் பின்னர் இவை ஒவ்வொன்றிற்கும் விதிகளைக் கொண்டிருக்கும். இது அனைத்து திறந்த சேமிப்பக மாற்றங்களின் பதிவையும், அவற்றுக்கு யார் வாக்களித்தார்கள் என்ற பட்டியலையும் பராமரிக்கும். இது அனைத்து உறுப்பினர்களின் பட்டியலையும் கொண்டிருக்கும். எந்தவொரு சேமிப்பக மாற்றத்திற்கும் மூன்றில் இரண்டு பங்கு உறுப்பினர்கள் வாக்களிக்கும்போது, ஒரு இறுதிப் பரிவர்த்தனை மாற்றத்தைச் செயல்படுத்த முடியும். மிகவும் அதிநவீனக் கட்டமைப்பானது, பரிவர்த்தனையை அனுப்புதல், உறுப்பினர்களைச் சேர்த்தல் மற்றும் உறுப்பினர்களை நீக்குதல் போன்ற அம்சங்களுக்கான உள்ளமைக்கப்பட்ட வாக்களிக்கும் திறனையும் கொண்டிருக்கும், மேலும் Liquid Democracy (opens in a new tab) பாணியிலான வாக்கு ஒப்படைப்பைக் (vote delegation) கூட வழங்கலாம் (அதாவது, யார் வேண்டுமானாலும் தங்களுக்கு வாக்களிக்க ஒருவரை நியமிக்கலாம், மேலும் நியமனம் மாறுநிலையானது (transitive), எனவே A, B-ஐ நியமித்து, B, C-ஐ நியமித்தால், C, A-இன் வாக்கை தீர்மானிக்கிறார்). இந்த வடிவமைப்பு DAO-ஐ ஒரு பரவலாக்கப்பட்ட சமூகமாக இயல்பாக வளர அனுமதிக்கும், யார் உறுப்பினர் என்பதை வடிகட்டும் பணியை மக்கள் இறுதியில் நிபுணர்களிடம் ஒப்படைக்க அனுமதிக்கும், இருப்பினும் "தற்போதைய அமைப்பைப்" போலல்லாமல், தனிப்பட்ட சமூக உறுப்பினர்கள் தங்கள் சீரமைப்புகளை (alignments) மாற்றும்போது நிபுணர்கள் காலப்போக்கில் எளிதாகத் தோன்றலாம் மற்றும் மறையலாம்.
ஒரு மாற்று மாதிரி பரவலாக்கப்பட்ட கழகத்திற்கானதாகும் (decentralized corporation), இதில் எந்தவொரு கணக்கும் பூஜ்ஜியம் அல்லது அதற்கு மேற்பட்ட பங்குகளைக் கொண்டிருக்கலாம், மேலும் முடிவெடுக்க மூன்றில் இரண்டு பங்கு பங்குகள் தேவை. ஒரு முழுமையான கட்டமைப்பானது சொத்து மேலாண்மைச் செயல்பாடு, பங்குகளை வாங்க அல்லது விற்க சலுகை வழங்கும் திறன் மற்றும் சலுகைகளை ஏற்கும் திறன் (முன்னுரிமையாக ஒப்பந்தத்திற்குள் ஆர்டர்-பொருந்தும் வழிமுறையுடன்) ஆகியவற்றை உள்ளடக்கியிருக்கும். "இயக்குநர்கள் குழு" (board of directors) என்ற கருத்தை பொதுமைப்படுத்தி, Liquid Democracy பாணியிலும் ஒப்படைப்பு (Delegation) இருக்கும்.
மேலும் பயன்பாடுகள்
1. சேமிப்பு வாலெட்டுகள் (Savings wallets). Alice தனது நிதியைப் பாதுகாப்பாக வைத்திருக்க விரும்புகிறார் என்று வைத்துக்கொள்வோம், ஆனால் அவர் தனது தனிப்பட்ட திறவுகோலை (private key) இழந்துவிடுவார் அல்லது யாராவது ஹேக் செய்துவிடுவார்கள் என்று கவலைப்படுகிறார். அவர் ஒரு வங்கியான Bob-உடன் பின்வருமாறு ஒரு ஒப்பந்தத்தில் ether-ஐ வைக்கிறார்:
- Alice மட்டுமே ஒரு நாளைக்கு அதிகபட்சமாக 1% நிதியை எடுக்க முடியும்.
- Bob மட்டுமே ஒரு நாளைக்கு அதிகபட்சமாக 1% நிதியை எடுக்க முடியும், ஆனால் Alice தனது திறவுகோலைக் கொண்டு ஒரு பரிவர்த்தனையைச் செய்து இந்தத் திறனை முடக்கும் திறனைக் கொண்டுள்ளார்.
- Alice மற்றும் Bob இருவரும் சேர்ந்து எதையும் எடுக்கலாம்.
பொதுவாக, Alice-க்கு ஒரு நாளைக்கு 1% போதுமானது, மேலும் Alice அதிகமாக எடுக்க விரும்பினால் அவர் உதவிக்கு Bob-ஐத் தொடர்புகொள்ளலாம். Alice-இன் திறவுகோல் ஹேக் செய்யப்பட்டால், நிதியைப் புதிய ஒப்பந்தத்திற்கு மாற்ற அவர் Bob-இடம் ஓடுகிறார். அவர் தனது திறவுகோலை இழந்தால், Bob இறுதியில் நிதியை வெளியே எடுப்பார். Bob தீங்கிழைப்பவராக மாறினால், அவர் எடுக்கும் திறனை Alice முடக்கலாம்.
2. பயிர் காப்பீடு (Crop insurance). எந்தவொரு விலைக் குறியீட்டிற்கும் பதிலாக வானிலையின் தரவு ஊட்டத்தைப் பயன்படுத்தி ஒருவர் எளிதாக நிதி வழித்தோன்றல்கள் ஒப்பந்தத்தை உருவாக்கலாம். அயோவாவில் உள்ள ஒரு விவசாயி, அயோவாவில் பெய்யும் மழையின் அடிப்படையில் நேர்மாறாகப் பணம் செலுத்தும் ஒரு வழித்தோன்றலை வாங்கினால், வறட்சி ஏற்பட்டால், விவசாயி தானாகவே பணத்தைப் பெறுவார், மேலும் போதுமான மழை பெய்தால் விவசாயி மகிழ்ச்சியடைவார், ஏனெனில் அவர்களின் பயிர்கள் நன்றாக வளரும். இதை பொதுவாக இயற்கை பேரிடர் காப்பீட்டிற்கும் விரிவுபடுத்தலாம்.
3. பரவலாக்கப்பட்ட தரவு ஊட்டம் (A decentralized data feed). வித்தியாசத்திற்கான நிதி ஒப்பந்தங்களுக்கு (financial contracts for difference), "SchellingCoin (opens in a new tab)" எனப்படும் நெறிமுறை மூலம் தரவு ஊட்டத்தைப் பரவலாக்குவது உண்மையில் சாத்தியமாகலாம். SchellingCoin அடிப்படையில் பின்வருமாறு செயல்படுகிறது: N தரப்பினர் அனைவரும் கொடுக்கப்பட்ட தரவின் மதிப்பை (எ.கா., ETH/USD விலை) அமைப்பில் உள்ளிடுகிறார்கள், மதிப்புகள் வரிசைப்படுத்தப்படுகின்றன, மேலும் 25-வது மற்றும் 75-வது சதவிகிதத்திற்கு இடையில் உள்ள அனைவருக்கும் ஒரு டோக்கன் வெகுமதியாகக் கிடைக்கும். மற்ற அனைவரும் வழங்கும் பதிலை வழங்க அனைவருக்கும் ஊக்கத்தொகை உள்ளது, மேலும் அதிக எண்ணிக்கையிலான வீரர்கள் யதார்த்தமாக ஒப்புக்கொள்ளக்கூடிய ஒரே மதிப்பு வெளிப்படையான இயல்புநிலை: உண்மை. இது கோட்பாட்டளவில் ETH/USD விலை, பெர்லினில் உள்ள வெப்பநிலை அல்லது ஒரு குறிப்பிட்ட கடினமான கணக்கீட்டின் முடிவு உட்பட எந்தவொரு மதிப்புகளையும் வழங்கக்கூடிய பரவலாக்கப்பட்ட நெறிமுறையை உருவாக்குகிறது.
4. ஸ்மார்ட் மல்டிசிக்னேச்சர் எஸ்க்ரோ (Smart multisignature escrow). Bitcoin மல்டிசிக்னேச்சர் பரிவர்த்தனை ஒப்பந்தங்களை அனுமதிக்கிறது, எடுத்துக்காட்டாக, கொடுக்கப்பட்ட ஐந்து திறவுகோல்களில் மூன்று நிதியைச் செலவழிக்க முடியும். Ethereum அதிக நுணுக்கத்தை (granularity) அனுமதிக்கிறது; எடுத்துக்காட்டாக, ஐந்தில் நான்கு பேர் அனைத்தையும் செலவழிக்கலாம், ஐந்தில் மூன்று பேர் ஒரு நாளைக்கு 10% வரை செலவழிக்கலாம், மற்றும் ஐந்தில் இரண்டு பேர் ஒரு நாளைக்கு 0.5% வரை செலவழிக்கலாம். கூடுதலாக, Ethereum மல்டிசிக் ஒத்திசைவற்றது (asynchronous) - இரண்டு தரப்பினர் வெவ்வேறு நேரங்களில் பிளாக்செயினில் தங்கள் கையொப்பங்களைப் பதிவு செய்யலாம் மற்றும் கடைசி கையொப்பம் தானாகவே பரிவர்த்தனையை அனுப்பும்.
5. கிளவுட் கம்ப்யூட்டிங் (Cloud computing). EVM தொழில்நுட்பத்தைப் பயன்படுத்திச் சரிபார்க்கக்கூடிய கம்ப்யூட்டிங் சூழலை உருவாக்கலாம், இது பயனர்கள் மற்றவர்களைக் கணக்கீடுகளைச் செய்யக் கேட்கவும், பின்னர் சீரற்ற முறையில் தேர்ந்தெடுக்கப்பட்ட சில சோதனைச் சாவடிகளில் (checkpoints) கணக்கீடுகள் சரியாகச் செய்யப்பட்டன என்பதற்கான ஆதாரங்களை விருப்பப்படி கேட்கவும் அனுமதிக்கிறது. இது எந்தவொரு பயனரும் தங்கள் டெஸ்க்டாப், லேப்டாப் அல்லது சிறப்புச் சேவையகத்துடன் பங்கேற்கக்கூடிய கிளவுட் கம்ப்யூட்டிங் சந்தையை உருவாக்க அனுமதிக்கிறது, மேலும் அமைப்பு நம்பகமானது என்பதை உறுதிப்படுத்தப் பாதுகாப்பு வைப்புத்தொகைகளுடன் (security deposits) ஸ்பாட்-செக்கிங் (spot-checking) பயன்படுத்தப்படலாம் (அதாவது, நோடுகள் லாபகரமாக ஏமாற்ற முடியாது). அத்தகைய அமைப்பு அனைத்துப் பணிகளுக்கும் ஏற்றதாக இருக்காது என்றாலும்; எடுத்துக்காட்டாக, அதிக அளவிலான செயல்முறைகளுக்கு இடையேயான தொடர்பு (inter-process communication) தேவைப்படும் பணிகளைப் பெரிய அளவிலான நோடுகளின் கிளவுடில் எளிதாகச் செய்ய முடியாது. இருப்பினும், பிற பணிகளை இணையாகச் செய்வது (parallelize) மிகவும் எளிதானது; SETI@home, folding@home மற்றும் மரபணு அல்காரிதம்கள் (genetic algorithms) போன்ற திட்டங்களை அத்தகைய தளத்தின் மேல் எளிதாகச் செயல்படுத்தலாம்.
6. பியர்-டு-பியர் சூதாட்டம் (Peer-to-peer gambling). Frank Stajano மற்றும் Richard Clayton-இன் Cyberdice (opens in a new tab) போன்ற எந்தவொரு பியர்-டு-பியர் சூதாட்ட நெறிமுறைகளையும் Ethereum பிளாக்செயினில் செயல்படுத்தலாம். எளிமையான சூதாட்ட நெறிமுறை என்பது உண்மையில் அடுத்த பிளாக் ஹாஷின் வித்தியாசத்திற்கான ஒப்பந்தமாகும், மேலும் அங்கிருந்து மிகவும் மேம்பட்ட நெறிமுறைகளை உருவாக்கலாம், ஏமாற்றும் திறன் இல்லாத கிட்டத்தட்ட பூஜ்ஜியக் கட்டணங்களுடன் சூதாட்டச் சேவைகளை உருவாக்கலாம்.
7. கணிப்புச் சந்தைகள் (Prediction markets). ஒரு ஆரக்கிள் (oracle) அல்லது SchellingCoin வழங்கப்பட்டால், கணிப்புச் சந்தைகளைச் செயல்படுத்துவதும் எளிதானது, மேலும் SchellingCoin-உடன் கணிப்புச் சந்தைகள் பரவலாக்கப்பட்ட அமைப்புகளுக்கான நிர்வாக நெறிமுறையாக futarchy (opens in a new tab)-இன் முதல் பிரதான பயன்பாடாக நிரூபிக்கப்படலாம்.
8. ஆன்செயின் பரவலாக்கப்பட்ட சந்தைகள் (Onchain decentralized marketplaces), அடையாளம் மற்றும் நற்பெயர் அமைப்பை அடிப்படையாகப் பயன்படுத்துகின்றன.
இதர விஷயங்கள் மற்றும் கவலைகள்
மாற்றியமைக்கப்பட்ட GHOST செயலாக்கம்
"Greedy Heaviest Observed Subtree" (GHOST) நெறிமுறை என்பது யோனதன் சோம்போலின்ஸ்கி (Yonatan Sompolinsky) மற்றும் அவிவ் ஜோஹர் (Aviv Zohar) ஆகியோரால் டிசம்பர் 2013 இல் (opens in a new tab) முதன்முதலில் அறிமுகப்படுத்தப்பட்ட ஒரு கண்டுபிடிப்பாகும். GHOST-க்கு பின்னணியில் உள்ள நோக்கம் என்னவென்றால், விரைவான உறுதிப்படுத்தல் நேரங்களைக் கொண்ட பிளாக்செயின்கள் தற்போது அதிக ஸ்டேல் (stale) விகிதத்தின் காரணமாக குறைந்த பாதுகாப்பால் பாதிக்கப்படுகின்றன - ஏனெனில் பிளாக்குகள் நெட்வொர்க் வழியாக பரவுவதற்கு ஒரு குறிப்பிட்ட நேரம் எடுக்கும், மைனர் A ஒரு பிளாக்கை மைன் செய்து, பின்னர் மைனர் A-இன் பிளாக் B-க்கு பரவுவதற்கு முன்பு மைனர் B மற்றொரு பிளாக்கை மைன் செய்தால், மைனர் B-இன் பிளாக் வீணாகிவிடும் மற்றும் நெட்வொர்க் பாதுகாப்பிற்கு பங்களிக்காது. மேலும், இதில் ஒரு மையமாக்கல் சிக்கல் உள்ளது: மைனர் A என்பது 30% ஹாஷ்பவரை (hashpower) கொண்ட ஒரு மைனிங் பூல் (mining pool) ஆகவும், B 10% ஹாஷ்பவரைக் கொண்டிருந்தால், A 70% நேரங்களில் ஒரு ஸ்டேல் பிளாக்கை உருவாக்கும் அபாயத்தைக் கொண்டிருக்கும் (ஏனெனில் மற்ற 30% நேரங்களில் A முந்தைய பிளாக்கை உருவாக்கியது, எனவே மைனிங் தரவை உடனடியாகப் பெறும்), அதேசமயம் B 90% நேரங்களில் ஒரு ஸ்டேல் பிளாக்கை உருவாக்கும் அபாயத்தைக் கொண்டிருக்கும். எனவே, ஸ்டேல் விகிதம் அதிகமாக இருக்கும் அளவுக்கு பிளாக் இடைவெளி குறுகியதாக இருந்தால், A அதன் அளவின் காரணமாகவே கணிசமாக அதிக திறனுடன் இருக்கும். இந்த இரண்டு விளைவுகளும் இணைந்து, பிளாக்குகளை விரைவாக உருவாக்கும் பிளாக்செயின்கள், மைனிங் செயல்முறையின் மீது நடைமுறை கட்டுப்பாட்டைக் கொண்டிருக்க நெட்வொர்க் ஹாஷ்பவரில் போதுமான அளவு பெரிய சதவீதத்தை ஒரு மைனிங் பூல் கொண்டிருப்பதற்கு வழிவகுக்கும்.
சோம்போலின்ஸ்கி மற்றும் ஜோஹர் விவரித்தபடி, எந்த செயின் "மிக நீளமானது" என்பதைக் கணக்கிடுவதில் ஸ்டேல் பிளாக்குகளைச் சேர்ப்பதன் மூலம் நெட்வொர்க் பாதுகாப்பு இழப்பு என்ற முதல் சிக்கலை GHOST தீர்க்கிறது; அதாவது, ஒரு பிளாக்கின் பெற்றோர் மற்றும் முந்தைய மூதாதையர்கள் மட்டுமல்லாமல், பிளாக்கின் மூதாதையரின் ஸ்டேல் சந்ததியினரும் (Ethereum மொழியில், "அங்கிள்கள்" (uncles)) எந்த பிளாக் மிகப்பெரிய மொத்த ப்ரூஃப்-ஆஃப்-வொர்க் (proof-of-work) ஆதரவைக் கொண்டுள்ளது என்பதைக் கணக்கிடுவதில் சேர்க்கப்படுகிறார்கள். மையமாக்கல் சார்பு என்ற இரண்டாவது சிக்கலைத் தீர்க்க, சோம்போலின்ஸ்கி மற்றும் ஜோஹர் விவரித்த நெறிமுறைக்கு அப்பால் சென்று, ஸ்டேல்களுக்கும் பிளாக் வெகுமதிகளை வழங்குகிறோம்: ஒரு ஸ்டேல் பிளாக் அதன் அடிப்படை வெகுமதியில் 87.5% ஐப் பெறுகிறது, மேலும் ஸ்டேல் பிளாக்கை உள்ளடக்கிய நெப்யூ (nephew) மீதமுள்ள 12.5% ஐப் பெறுகிறது. இருப்பினும், பரிவர்த்தனை கட்டணங்கள் அங்கிள்களுக்கு வழங்கப்படுவதில்லை.
Ethereum ஏழு நிலைகள் மட்டுமே கீழே செல்லும் GHOST-இன் எளிமைப்படுத்தப்பட்ட பதிப்பை செயல்படுத்துகிறது. குறிப்பாக, இது பின்வருமாறு வரையறுக்கப்படுகிறது:
- ஒரு பிளாக் ஒரு பெற்றோரை (parent) குறிப்பிட வேண்டும், மேலும் அது 0 அல்லது அதற்கு மேற்பட்ட அங்கிள்களைக் (uncles) குறிப்பிட வேண்டும்
- பிளாக் B-இல் சேர்க்கப்பட்டுள்ள ஒரு அங்கிள் பின்வரும் பண்புகளைக் கொண்டிருக்க வேண்டும்:
- இது B-இன் k-ஆவது தலைமுறை மூதாதையரின் நேரடி குழந்தையாக இருக்க வேண்டும், இங்கு
2 <= k <= 7. - இது B-இன் மூதாதையராக இருக்க முடியாது
- ஒரு அங்கிள் செல்லுபடியாகும் பிளாக் தலைப்பாக (block header) இருக்க வேண்டும், ஆனால் அது முன்பு சரிபார்க்கப்பட்ட அல்லது செல்லுபடியாகும் பிளாக்காக இருக்க வேண்டிய அவசியமில்லை
- முந்தைய பிளாக்குகளில் சேர்க்கப்பட்டுள்ள அனைத்து அங்கிள்களிலிருந்தும் மற்றும் அதே பிளாக்கில் சேர்க்கப்பட்டுள்ள மற்ற அனைத்து அங்கிள்களிலிருந்தும் ஒரு அங்கிள் வேறுபட்டிருக்க வேண்டும் (இரட்டை-சேர்க்கை அல்லாதது)
- இது B-இன் k-ஆவது தலைமுறை மூதாதையரின் நேரடி குழந்தையாக இருக்க வேண்டும், இங்கு
- பிளாக் B-இல் உள்ள ஒவ்வொரு அங்கிள் U-க்கும், B-இன் மைனர் அதன் காயின்பேஸ் (coinbase) வெகுமதியுடன் கூடுதலாக 3.125% ஐப் பெறுகிறார், மேலும் U-இன் மைனர் நிலையான காயின்பேஸ் வெகுமதியில் 93.75% ஐப் பெறுகிறார்.
7 தலைமுறைகள் வரை மட்டுமே அங்கிள்களைச் சேர்க்கக்கூடிய GHOST-இன் இந்த வரையறுக்கப்பட்ட பதிப்பு இரண்டு காரணங்களுக்காகப் பயன்படுத்தப்பட்டது. முதலாவதாக, வரம்பற்ற GHOST ஒரு குறிப்பிட்ட பிளாக்கிற்கு எந்த அங்கிள்கள் செல்லுபடியாகும் என்பதைக் கணக்கிடுவதில் பல சிக்கல்களை உள்ளடக்கும். இரண்டாவதாக, Ethereum-இல் பயன்படுத்தப்படுவது போன்ற இழப்பீட்டுடன் கூடிய வரம்பற்ற GHOST, ஒரு மைனர் பொது தாக்குபவரின் செயினில் அல்லாமல் பிரதான செயினில் மைன் செய்வதற்கான ஊக்கத்தை நீக்குகிறது.
கட்டணங்கள்
பிளாக்செயினில் வெளியிடப்படும் ஒவ்வொரு பரிவர்த்தனையும் அதை பதிவிறக்கம் செய்து சரிபார்க்க வேண்டிய செலவை நெட்வொர்க்கில் சுமத்துவதால், துஷ்பிரயோகத்தைத் தடுக்க பரிவர்த்தனை கட்டணங்களை உள்ளடக்கிய சில ஒழுங்குமுறை வழிமுறைகள் தேவைப்படுகின்றன. Bitcoin-இல் பயன்படுத்தப்படும் இயல்புநிலை அணுகுமுறை, முற்றிலும் தன்னார்வ கட்டணங்களைக் கொண்டிருப்பதாகும், இது மைனர்களை கேட் கீப்பர்களாக (gatekeepers) செயல்படவும் மாறும் குறைந்தபட்சங்களை அமைக்கவும் நம்பியுள்ளது. இந்த அணுகுமுறை Bitcoin சமூகத்தில் மிகவும் சாதகமாகப் பெறப்பட்டுள்ளது, குறிப்பாக இது "சந்தை அடிப்படையிலானது" என்பதால், மைனர்கள் மற்றும் பரிவர்த்தனை அனுப்புநர்களுக்கு இடையிலான வழங்கல் மற்றும் தேவை விலையை தீர்மானிக்க அனுமதிக்கிறது. இருப்பினும், இந்த பகுத்தறிவின் சிக்கல் என்னவென்றால், பரிவர்த்தனை செயலாக்கம் ஒரு சந்தை அல்ல; பரிவர்த்தனை செயலாக்கத்தை மைனர் அனுப்புநருக்கு வழங்கும் ஒரு சேவையாகக் கருதுவது உள்ளுணர்வாக ஈர்க்கக்கூடியதாக இருந்தாலும், உண்மையில் ஒரு மைனர் சேர்க்கும் ஒவ்வொரு பரிவர்த்தனையும் நெட்வொர்க்கில் உள்ள ஒவ்வொரு நோடாலும் (node) செயலாக்கப்பட வேண்டும், எனவே பரிவர்த்தனை செயலாக்கச் செலவின் பெரும்பகுதி மூன்றாம் தரப்பினரால் ஏற்கப்படுகிறது, அதைச் சேர்க்கலாமா வேண்டாமா என்று முடிவெடுக்கும் மைனரால் அல்ல. எனவே, பொதுச் சொத்துக்களின் துயரம் (tragedy-of-the-commons) போன்ற சிக்கல்கள் ஏற்பட வாய்ப்புள்ளது.
இருப்பினும், சந்தை அடிப்படையிலான பொறிமுறையில் உள்ள இந்த குறைபாடு, ஒரு குறிப்பிட்ட துல்லியமற்ற எளிமைப்படுத்தும் அனுமானம் வழங்கப்படும்போது, மாயாஜாலமாக தன்னைத்தானே ரத்து செய்கிறது. அதற்கான வாதம் பின்வருமாறு. பின்வருவனவற்றை வைத்துக்கொள்வோம்:
- ஒரு பரிவர்த்தனை
kசெயல்பாடுகளுக்கு வழிவகுக்கிறது, அதை உள்ளடக்கிய எந்தவொரு மைனருக்கும்kRவெகுமதியை வழங்குகிறது, இங்குRஅனுப்புநரால் அமைக்கப்படுகிறது மற்றும்kமற்றும்Rஆகியவை மைனருக்கு முன்கூட்டியே (தோராயமாக) தெரியும். - ஒரு செயல்பாடு எந்தவொரு நோடிற்கும்
Cசெயலாக்கச் செலவைக் கொண்டுள்ளது (அதாவது, அனைத்து நோடுகளும் சமமான திறனைக் கொண்டுள்ளன) Nமைனிங் நோடுகள் உள்ளன, ஒவ்வொன்றும் சரியாக சமமான செயலாக்க சக்தியைக் கொண்டுள்ளன (அதாவது, மொத்தத்தில்1/N)- மைனிங் அல்லாத முழு நோடுகள் (full nodes) எதுவும் இல்லை.
எதிர்பார்க்கப்படும் வெகுமதி செலவை விட அதிகமாக இருந்தால் ஒரு மைனர் பரிவர்த்தனையைச் செயலாக்கத் தயாராக இருப்பார். எனவே, எதிர்பார்க்கப்படும் வெகுமதி kR/N ஆகும், ஏனெனில் மைனருக்கு அடுத்த பிளாக்கைச் செயலாக்க 1/N வாய்ப்பு உள்ளது, மேலும் மைனருக்கான செயலாக்கச் செலவு வெறுமனே kC ஆகும். எனவே, மைனர்கள் kR/N > kC அல்லது R > NC ஆக இருக்கும் பரிவர்த்தனைகளைச் சேர்ப்பார்கள். R என்பது அனுப்புநரால் வழங்கப்படும் ஒரு செயல்பாட்டிற்கான கட்டணம் என்பதை நினைவில் கொள்க, எனவே இது பரிவர்த்தனையிலிருந்து அனுப்புநர் பெறும் நன்மையின் குறைந்த வரம்பாகும், மேலும் NC என்பது ஒரு செயல்பாட்டைச் செயலாக்குவதற்கு முழு நெட்வொர்க்கிற்கும் ஆகும் செலவாகும். எனவே, மொத்த பயன்பாட்டு நன்மை செலவை விட அதிகமாக இருக்கும் பரிவர்த்தனைகளை மட்டுமே சேர்ப்பதற்கான ஊக்கத்தை மைனர்கள் கொண்டுள்ளனர்.
இருப்பினும், உண்மையில் அந்த அனுமானங்களிலிருந்து பல முக்கியமான விலகல்கள் உள்ளன:
- மற்ற சரிபார்க்கும் நோடுகளை விட பரிவர்த்தனையைச் செயலாக்க மைனர் அதிக செலவைச் செலுத்துகிறார், ஏனெனில் கூடுதல் சரிபார்ப்பு நேரம் பிளாக் பரவுவதை தாமதப்படுத்துகிறது, இதனால் பிளாக் ஸ்டேல் ஆவதற்கான வாய்ப்பை அதிகரிக்கிறது.
- மைனிங் அல்லாத முழு நோடுகள் உள்ளன.
- மைனிங் சக்தி விநியோகம் நடைமுறையில் தீவிர சமத்துவமற்றதாக முடிவடையும்.
- நெட்வொர்க்கிற்கு தீங்கு விளைவிப்பதை உள்ளடக்கிய பயன்பாட்டு செயல்பாட்டைக் கொண்ட ஊக வணிகர்கள், அரசியல் எதிரிகள் மற்றும் பைத்தியக்காரர்கள் இருக்கிறார்கள், மேலும் அவர்கள் மற்ற சரிபார்க்கும் நோடுகள் செலுத்தும் செலவை விட தங்கள் செலவு மிகக் குறைவாக இருக்கும் ஒப்பந்தங்களை புத்திசாலித்தனமாக அமைக்க முடியும்.
(1) மைனர் குறைவான பரிவர்த்தனைகளைச் சேர்ப்பதற்கான போக்கை வழங்குகிறது, மேலும் (2) NC-ஐ அதிகரிக்கிறது; எனவே, இந்த இரண்டு விளைவுகளும் குறைந்தபட்சம் ஓரளவு ஒன்றையொன்று ரத்து செய்கின்றன.எப்படி? (opens in a new tab) (3) மற்றும் (4) ஆகியவை முக்கிய சிக்கலாகும்; அவற்றைத் தீர்க்க நாங்கள் வெறுமனே ஒரு மிதக்கும் வரம்பை (floating cap) நிறுவுகிறோம்: எந்தவொரு பிளாக்கும் நீண்ட கால அதிவேக நகரும் சராசரியை (exponential moving average) விட BLK_LIMIT_FACTOR மடங்குக்கு அதிகமான செயல்பாடுகளைக் கொண்டிருக்க முடியாது. குறிப்பாக:
blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) +
floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR)
BLK_LIMIT_FACTOR மற்றும் EMA_FACTOR ஆகியவை தற்போதைக்கு 65536 மற்றும் 1.5 ஆக அமைக்கப்படும் மாறிலிகள் ஆகும், ஆனால் மேலதிக பகுப்பாய்விற்குப் பிறகு அவை மாற்றப்பட வாய்ப்புள்ளது.
Bitcoin-இல் பெரிய பிளாக் அளவுகளை ஊக்கமிழக்கச் செய்யும் மற்றொரு காரணி உள்ளது: பெரிய பிளாக்குகள் பரவுவதற்கு அதிக நேரம் எடுக்கும், இதனால் அவை ஸ்டேல் ஆவதற்கான அதிக நிகழ்தகவு உள்ளது. Ethereum-இல், அதிக கேஸ் (gas) நுகரும் பிளாக்குகள் பரவுவதற்கும் அதிக நேரம் ஆகலாம், ஏனெனில் அவை உடல் ரீதியாக பெரியவை மற்றும் சரிபார்க்க பரிவர்த்தனை நிலை மாற்றங்களைச் செயலாக்க அதிக நேரம் எடுக்கும். இந்த தாமத ஊக்கமின்மை Bitcoin-இல் ஒரு குறிப்பிடத்தக்க கருத்தாகும், ஆனால் GHOST நெறிமுறையின் காரணமாக Ethereum-இல் இது குறைவு; எனவே, ஒழுங்குபடுத்தப்பட்ட பிளாக் வரம்புகளை நம்பியிருப்பது மிகவும் நிலையான அடிப்படையை வழங்குகிறது.
கணக்கீடு மற்றும் டூரிங்-முழுமை (Turing-Completeness)
ஒரு முக்கியமான குறிப்பு என்னவென்றால், Ethereum விர்ச்சுவல் மெஷின் (EVM) டூரிங்-முழுமையானது; அதாவது EVM குறியீடு முடிவிலி சுழல்கள் (infinite loops) உட்பட, கற்பனை செய்யக்கூடிய எந்தவொரு கணக்கீட்டையும் குறியாக்கம் செய்ய முடியும். EVM குறியீடு இரண்டு வழிகளில் லூப்பிங்கை (looping) அனுமதிக்கிறது. முதலாவதாக, குறியீட்டில் முந்தைய இடத்திற்குத் திரும்ப நிரலை அனுமதிக்கும் JUMP அறிவுறுத்தல் உள்ளது, மேலும் நிபந்தனைக்குட்பட்ட ஜம்பிங் செய்ய JUMPI அறிவுறுத்தல் உள்ளது, இது while x < 27: x = x * 2 போன்ற அறிக்கைகளை அனுமதிக்கிறது. இரண்டாவதாக, ஒப்பந்தங்கள் மற்ற ஒப்பந்தங்களை அழைக்கலாம், இது சுழல்நிலை (recursion) மூலம் லூப்பிங்கை அனுமதிக்கக்கூடும். இது இயற்கையாகவே ஒரு சிக்கலுக்கு வழிவகுக்கிறது: தீங்கிழைக்கும் பயனர்கள் மைனர்கள் மற்றும் முழு நோடுகளை முடிவிலி சுழலில் நுழைய கட்டாயப்படுத்துவதன் மூலம் அவற்றை அடிப்படையில் மூட முடியுமா? கணினி அறிவியலில் ஹால்டிங் சிக்கல் (halting problem) எனப்படும் ஒரு சிக்கலின் காரணமாக இந்த பிரச்சினை எழுகிறது: பொதுவான வழக்கில், கொடுக்கப்பட்ட நிரல் எப்போதாவது நிற்குமா இல்லையா என்பதைச் சொல்ல வழி இல்லை.
நிலை மாற்றப் பிரிவில் விவரிக்கப்பட்டுள்ளபடி, ஒரு பரிவர்த்தனை எடுக்க அனுமதிக்கப்படும் அதிகபட்ச கணக்கீட்டு படிகளை அமைக்கக் கோருவதன் மூலம் எங்கள் தீர்வு செயல்படுகிறது, மேலும் செயலாக்கம் அதிக நேரம் எடுத்தால் கணக்கீடு மாற்றியமைக்கப்படும் ஆனால் கட்டணங்கள் இன்னும் செலுத்தப்படும். செய்திகளும் இதே வழியில் செயல்படுகின்றன. எங்கள் தீர்வின் பின்னணியில் உள்ள நோக்கத்தைக் காட்ட, பின்வரும் எடுத்துக்காட்டுகளைக் கவனியுங்கள்:
- தாக்குபவர் ஒரு முடிவிலி சுழலை இயக்கும் ஒரு ஒப்பந்தத்தை உருவாக்குகிறார், பின்னர் அந்த சுழலைச் செயல்படுத்தும் பரிவர்த்தனையை மைனருக்கு அனுப்புகிறார். மைனர் பரிவர்த்தனையைச் செயலாக்குவார், முடிவிலி சுழலை இயக்குவார், மேலும் அது கேஸ் தீர்ந்துபோகும் வரை காத்திருப்பார். செயலாக்கம் கேஸ் தீர்ந்து பாதியிலேயே நின்றாலும், பரிவர்த்தனை இன்னும் செல்லுபடியாகும் மற்றும் ஒவ்வொரு கணக்கீட்டுப் படியிலும் தாக்குபவரிடமிருந்து மைனர் கட்டணத்தைக் கோருகிறார்.
- மைனரை மிக நீண்ட நேரம் கணக்கிட கட்டாயப்படுத்தும் நோக்கத்துடன் தாக்குபவர் மிக நீண்ட முடிவிலி சுழலை உருவாக்குகிறார், கணக்கீடு முடிவடையும் நேரத்தில் இன்னும் சில பிளாக்குகள் வெளிவந்திருக்கும், மேலும் கட்டணத்தைக் கோர மைனரால் பரிவர்த்தனையைச் சேர்க்க முடியாது. இருப்பினும், செயலாக்கம் எடுக்கக்கூடிய கணக்கீட்டு படிகளின் எண்ணிக்கையை கட்டுப்படுத்தும்
STARTGAS-க்கான மதிப்பை தாக்குபவர் சமர்ப்பிக்க வேண்டும், எனவே கணக்கீடு அதிக எண்ணிக்கையிலான படிகளை எடுக்கும் என்பதை மைனர் முன்கூட்டியே அறிந்துகொள்வார். - தாக்குபவர்
send(A,contract.storage[A]); contract.storage[A] = 0போன்ற சில வடிவங்களின் குறியீட்டைக் கொண்ட ஒரு ஒப்பந்தத்தைப் பார்க்கிறார், மேலும் முதல் படியை இயக்க போதுமான கேஸுடன் ஒரு பரிவர்த்தனையை அனுப்புகிறார், ஆனால் இரண்டாவது அல்ல (அதாவது, திரும்பப் பெறுதல் ஆனால் இருப்பு குறைய விடாமல்). ஒப்பந்த ஆசிரியர் இத்தகைய தாக்குதல்களிலிருந்து பாதுகாப்பதைப் பற்றி கவலைப்படத் தேவையில்லை, ஏனெனில் செயலாக்கம் பாதியிலேயே நின்றால் மாற்றங்கள் மாற்றியமைக்கப்படும். - ஆபத்தைக் குறைப்பதற்காக ஒன்பது தனியுரிம தரவு ஊட்டங்களின் (data feeds) இடைநிலையை (median) எடுத்து ஒரு நிதி ஒப்பந்தம் செயல்படுகிறது. DAO-கள் பற்றிய பிரிவில் விவரிக்கப்பட்டுள்ள மாறி-முகவரி-அழைப்பு (variable-address-call) பொறிமுறையின் மூலம் மாற்றியமைக்கக்கூடிய வகையில் வடிவமைக்கப்பட்டுள்ள தரவு ஊட்டங்களில் ஒன்றை தாக்குபவர் எடுத்துக்கொள்கிறார், மேலும் அதை முடிவிலி சுழலை இயக்க மாற்றுகிறார், இதன் மூலம் நிதி ஒப்பந்தத்திலிருந்து நிதியைக் கோரும் எந்தவொரு முயற்சியையும் கேஸ் தீர்ந்துபோகச் செய்ய முயற்சிக்கிறார். இருப்பினும், இந்த சிக்கலைத் தடுக்க நிதி ஒப்பந்தம் செய்தியில் கேஸ் வரம்பை அமைக்கலாம்.
டூரிங்-முழுமைக்கு மாற்றாக டூரிங்-முழுமையின்மை (Turing-incompleteness) உள்ளது, அங்கு JUMP மற்றும் JUMPI இல்லை மற்றும் எந்த நேரத்திலும் அழைப்பு அடுக்கில் (call stack) ஒவ்வொரு ஒப்பந்தத்தின் ஒரு நகல் மட்டுமே இருக்க அனுமதிக்கப்படுகிறது. இந்த அமைப்பின் மூலம், விவரிக்கப்பட்ட கட்டண முறை மற்றும் எங்கள் தீர்வின் செயல்திறனைச் சுற்றியுள்ள நிச்சயமற்ற தன்மைகள் அவசியமாக இருக்காது, ஏனெனில் ஒரு ஒப்பந்தத்தை செயல்படுத்துவதற்கான செலவு அதன் அளவால் மேலே கட்டுப்படுத்தப்படும். கூடுதலாக, டூரிங்-முழுமையின்மை அவ்வளவு பெரிய வரம்பு அல்ல; நாங்கள் உள்நாட்டில் கருத்தரித்த அனைத்து ஒப்பந்த எடுத்துக்காட்டுகளிலும், இதுவரை ஒன்றுக்கு மட்டுமே லூப் தேவைப்பட்டது, மேலும் ஒரு வரி குறியீட்டின் 26 மறுபடியும் செய்வதன் மூலம் அந்த லூப்பைக் கூட அகற்றலாம். டூரிங்-முழுமையின் தீவிர தாக்கங்கள் மற்றும் வரையறுக்கப்பட்ட நன்மைகளைக் கருத்தில் கொண்டு, ஏன் வெறுமனே டூரிங்-முழுமையற்ற மொழியைக் கொண்டிருக்கக்கூடாது? இருப்பினும், உண்மையில், டூரிங்-முழுமையின்மை என்பது சிக்கலுக்கு ஒரு நேர்த்தியான தீர்விலிருந்து வெகு தொலைவில் உள்ளது. ஏன் என்பதைப் பார்க்க, பின்வரும் ஒப்பந்தங்களைக் கவனியுங்கள்:
C0: call(C1); call(C1);
C1: call(C2); call(C2);
C2: call(C3); call(C3);
...
C49: call(C50); call(C50);
C50: (run one step of a program and record the change in storage)
இப்போது, A-க்கு ஒரு பரிவர்த்தனையை அனுப்பவும். இவ்வாறு, 51 பரிவர்த்தனைகளில், 250 கணக்கீட்டு படிகளை எடுக்கும் ஒரு ஒப்பந்தம் எங்களிடம் உள்ளது. ஒவ்வொரு ஒப்பந்தத்துடனும் அது எடுக்கக்கூடிய அதிகபட்ச கணக்கீட்டு படிகளைக் குறிப்பிடும் மதிப்பை பராமரிப்பதன் மூலமும், மற்ற ஒப்பந்தங்களை சுழல்நிலையாக அழைக்கும் ஒப்பந்தங்களுக்கு இதைக் கணக்கிடுவதன் மூலமும் மைனர்கள் இத்தகைய லாஜிக் பாம்களை (logic bombs) முன்கூட்டியே கண்டறிய முயற்சி செய்யலாம், ஆனால் அதற்கு மைனர்கள் மற்ற ஒப்பந்தங்களை உருவாக்கும் ஒப்பந்தங்களைத் தடை செய்ய வேண்டும் (ஏனெனில் மேலே உள்ள 26 ஒப்பந்தங்களின் உருவாக்கம் மற்றும் செயலாக்கத்தை எளிதாக ஒரே ஒப்பந்தமாக மாற்றலாம்). மற்றொரு சிக்கலான புள்ளி என்னவென்றால், ஒரு செய்தியின் முகவரி புலம் ஒரு மாறியாகும், எனவே பொதுவாக ஒரு குறிப்பிட்ட ஒப்பந்தம் எந்த மற்ற ஒப்பந்தங்களை முன்கூட்டியே அழைக்கும் என்று சொல்ல முடியாது. எனவே, ஒட்டுமொத்தமாக, எங்களிடம் ஒரு ஆச்சரியமான முடிவு உள்ளது: டூரிங்-முழுமையை நிர்வகிப்பது ஆச்சரியப்படும் விதமாக எளிதானது, மேலும் அதே கட்டுப்பாடுகள் நடைமுறையில் இல்லாவிட்டால் டூரிங்-முழுமையின்மை சமமாக நிர்வகிக்க கடினமாக இருக்கும் - ஆனால் அந்த விஷயத்தில் நெறிமுறையை டூரிங்-முழுமையாக இருக்க ஏன் அனுமதிக்கக்கூடாது?
நாணயம் மற்றும் வெளியீடு
Ethereum நெட்வொர்க் அதன் சொந்த உள்ளமைக்கப்பட்ட நாணயமான ஈதரை (ether) உள்ளடக்கியது, இது பல்வேறு வகையான டிஜிட்டல் சொத்துக்களுக்கு இடையே திறமையான பரிமாற்றத்தை அனுமதிக்க முதன்மை பணப்புழக்க அடுக்கை வழங்குவதற்கும், மிக முக்கியமாக, பரிவர்த்தனை கட்டணங்களை செலுத்துவதற்கான ஒரு பொறிமுறையை வழங்குவதற்கும் இரட்டை நோக்கத்திற்கு உதவுகிறது. வசதிக்காகவும் எதிர்கால வாதத்தைத் தவிர்க்கவும் (Bitcoin-இல் தற்போதைய mBTC/uBTC/satoshi விவாதத்தைப் பார்க்கவும்), மதிப்புகள் முன்கூட்டியே பெயரிடப்படும்:
- 1: wei
- 1012: szabo
- 1015: finney
- 1018: ether
இது "டாலர்கள்" மற்றும் "சென்ட்கள்" அல்லது "BTC" மற்றும் "சடோஷி" என்ற கருத்தின் விரிவாக்கப்பட்ட பதிப்பாக எடுத்துக்கொள்ளப்பட வேண்டும். எதிர்காலத்தில், சாதாரண பரிவர்த்தனைகளுக்கு "ஈதர்", நுண் பரிவர்த்தனைகளுக்கு (microtransactions) "ஃபின்னி" (finney) மற்றும் கட்டணங்கள் மற்றும் நெறிமுறை செயலாக்கம் பற்றிய தொழில்நுட்ப விவாதங்களுக்கு "சாபோ" (szabo) மற்றும் "வேய்" (wei) பயன்படுத்தப்படும் என்று எதிர்பார்க்கிறோம்; மீதமுள்ள மதிப்புகள் பின்னர் பயனுள்ளதாக இருக்கும் மற்றும் இந்த கட்டத்தில் கிளையண்ட்களில் சேர்க்கப்படக்கூடாது.
வெளியீட்டு மாதிரி பின்வருமாறு இருக்கும்:
- ஈதர் ஒரு BTC-க்கு 1000-2000 ஈதர் என்ற விலையில் நாணய விற்பனையில் வெளியிடப்படும், இது Ethereum நிறுவனத்திற்கு நிதியளிப்பதற்கும், Mastercoin மற்றும் NXT போன்ற பிற தளங்களால் வெற்றிகரமாகப் பயன்படுத்தப்பட்ட மேம்பாட்டிற்கு பணம் செலுத்துவதற்கும் நோக்கமாகக் கொண்ட ஒரு பொறிமுறையாகும். முந்தைய வாங்குபவர்கள் பெரிய தள்ளுபடிகளால் பயனடைவார்கள். விற்பனையிலிருந்து பெறப்பட்ட BTC முழுவதுமாக டெவலப்பர்களுக்கு சம்பளம் மற்றும் வெகுமதிகளை வழங்கப் பயன்படுத்தப்படும் மற்றும் Ethereum மற்றும் கிரிப்டோகரன்சி சுற்றுச்சூழல் அமைப்பில் பல்வேறு இலாப நோக்கற்ற மற்றும் இலாப நோக்கற்ற திட்டங்களில் முதலீடு செய்யப்படும்.
- விற்கப்பட்ட மொத்த தொகையில் 0.099x (60102216 ETH) ஆரம்பகால பங்களிப்பாளர்களுக்கு இழப்பீடு வழங்கவும், ஜெனிசிஸ் பிளாக்கிற்கு (genesis block) முன் ETH-மதிப்பிலான செலவுகளைச் செலுத்தவும் நிறுவனத்திற்கு ஒதுக்கப்படும்.
- விற்கப்பட்ட மொத்த தொகையில் 0.099x நீண்ட கால இருப்பாக பராமரிக்கப்படும்.
- விற்கப்பட்ட மொத்த தொகையில் 0.26x அந்தப் புள்ளிக்குப் பிறகு என்றென்றும் வருடத்திற்கு மைனர்களுக்கு ஒதுக்கப்படும்.
| குழு | தொடக்கத்தில் | 1 வருடத்திற்குப் பிறகு | 5 வருடங்களுக்குப் பிறகு |
|---|---|---|---|
| நாணய அலகுகள் | 1.198X | 1.458X | 2.498X |
| வாங்குபவர்கள் | 83.5% | 68.6% | 40.0% |
| விற்பனைக்கு முந்தைய இருப்பு செலவு | 8.26% | 6.79% | 3.96% |
| விற்பனைக்குப் பிந்தைய இருப்பு பயன்பாடு | 8.26% | 6.79% | 3.96% |
| மைனர்கள் | 0% | 17.8% | 52.0% |
நீண்ட கால விநியோக வளர்ச்சி விகிதம் (சதவீதம்)
நேரியல் நாணய வெளியீடு இருந்தபோதிலும், Bitcoin-ஐப் போலவே காலப்போக்கில் விநியோக வளர்ச்சி விகிதம் பூஜ்ஜியத்தை நோக்கிச் செல்கிறது.
மேற்கண்ட மாதிரியில் உள்ள இரண்டு முக்கிய தேர்வுகள் (1) ஒரு எண்டோவ்மென்ட் பூலின் (endowment pool) இருப்பு மற்றும் அளவு, மற்றும் (2) Bitcoin-இல் உள்ளதைப் போல வரம்பிடப்பட்ட விநியோகத்திற்கு மாறாக, நிரந்தரமாக வளரும் நேரியல் விநியோகத்தின் இருப்பு. எண்டோவ்மென்ட் பூலின் நியாயம் பின்வருமாறு. எண்டோவ்மென்ட் பூல் இல்லை என்றால், அதே பணவீக்க விகிதத்தை வழங்க நேரியல் வெளியீடு 0.217x ஆகக் குறைந்தால், ஈதரின் மொத்த அளவு 16.5% குறைவாக இருக்கும், எனவே ஒவ்வொரு அலகும் 19.8% அதிக மதிப்புடையதாக இருக்கும். எனவே, சமநிலையில் 19.8% அதிக ஈதர் விற்பனையில் வாங்கப்படும், எனவே ஒவ்வொரு அலகும் மீண்டும் முன்பு போலவே சரியாக மதிப்புமிக்கதாக இருக்கும். நிறுவனம் 1.198x அளவு BTC-ஐக் கொண்டிருக்கும், இது இரண்டு துண்டுகளாகப் பிரிக்கப்பட்டதாகக் கருதலாம்: அசல் BTC மற்றும் கூடுதல் 0.198x. எனவே, இந்த நிலைமை எண்டோவ்மென்ட்டிற்கு சரியாக சமமானதாகும், ஆனால் ஒரு முக்கியமான வித்தியாசத்துடன்: நிறுவனம் முற்றிலும் BTC-ஐ வைத்திருக்கிறது, எனவே ஈதர் அலகின் மதிப்பை ஆதரிக்க ஊக்கமளிக்கப்படவில்லை.
நிரந்தர நேரியல் விநியோக வளர்ச்சி மாதிரி Bitcoin-இல் அதிகப்படியான செல்வச் செறிவு என்று சிலர் கருதும் அபாயத்தைக் குறைக்கிறது, மேலும் நிகழ்கால மற்றும் எதிர்கால சகாப்தங்களில் வாழும் தனிநபர்களுக்கு நாணய அலகுகளைப் பெறுவதற்கான நியாயமான வாய்ப்பை வழங்குகிறது, அதே நேரத்தில் ஈதரைப் பெறுவதற்கும் வைத்திருப்பதற்கும் வலுவான ஊக்கத்தைத் தக்க வைத்துக் கொள்கிறது, ஏனெனில் "விநியோக வளர்ச்சி விகிதம்" ஒரு சதவீதமாக காலப்போக்கில் பூஜ்ஜியத்தை நோக்கிச் செல்கிறது. கவனக்குறைவு, இறப்பு போன்றவற்றால் காலப்போக்கில் நாணயங்கள் எப்போதும் இழக்கப்படுவதால், நாணய இழப்பை வருடத்திற்கு மொத்த விநியோகத்தின் சதவீதமாக மாதிரியாக்க முடியும் என்பதால், புழக்கத்தில் உள்ள மொத்த நாணய விநியோகம் உண்மையில் வருடாந்திர வெளியீட்டை இழப்பு விகிதத்தால் வகுக்கப்படும் மதிப்பிற்கு சமமான மதிப்பில் நிலைபெறும் என்று நாங்கள் கருதுகிறோம் (எ.கா., 1% இழப்பு விகிதத்தில், விநியோகம் 26X-ஐ அடைந்தவுடன் 0.26X மைன் செய்யப்படும் மற்றும் ஒவ்வொரு ஆண்டும் 0.26X இழக்கப்படும், இது ஒரு சமநிலையை உருவாக்குகிறது).
எதிர்காலத்தில், பாதுகாப்பிற்காக Ethereum ஒரு ப்ரூஃப்-ஆஃப்-ஸ்டேக் (proof-of-stake) மாதிரிக்கு மாற வாய்ப்புள்ளது என்பதை நினைவில் கொள்க, இது வெளியீட்டுத் தேவையை வருடத்திற்கு பூஜ்ஜியத்திற்கும் 0.05X-க்கும் இடையில் குறைக்கிறது. Ethereum நிறுவனம் நிதியை இழந்தால் அல்லது வேறு எந்த காரணத்திற்காகவும் மறைந்துவிட்டால், நாங்கள் ஒரு "சமூக ஒப்பந்தத்தை" (social contract) திறந்து விடுகிறோம்: எவரும் Ethereum-இன் எதிர்கால வேட்பாளர் பதிப்பை உருவாக்க உரிமை உண்டு, ஒரே நிபந்தனை என்னவென்றால், ஈதரின் அளவு அதிகபட்சமாக 60102216 * (1.198 + 0.26 * n)-க்கு சமமாக இருக்க வேண்டும், இங்கு n என்பது ஜெனிசிஸ் பிளாக்கிற்குப் பிந்தைய ஆண்டுகளின் எண்ணிக்கை. PoS-உந்துதல் விநியோக விரிவாக்கம் மற்றும் மேம்பாட்டிற்கு பணம் செலுத்துவதற்கான அதிகபட்ச அனுமதிக்கக்கூடிய விநியோக விரிவாக்கம் ஆகியவற்றுக்கு இடையேயான வித்தியாசத்தின் சில அல்லது அனைத்தையும் கிரவுட்-செல் (crowd-sell) செய்ய அல்லது ஒதுக்க படைப்பாளர்களுக்கு சுதந்திரம் உள்ளது. சமூக ஒப்பந்தத்திற்கு இணங்காத வேட்பாளர் மேம்படுத்தல்கள் நியாயமான முறையில் இணக்கமான பதிப்புகளாக ஃபோர்க் (fork) செய்யப்படலாம்.
மைனிங் மையமாக்கல்
Bitcoin மைனிங் அல்காரிதம், பிளாக் தலைப்பின் சற்று மாற்றியமைக்கப்பட்ட பதிப்புகளில் SHA256-ஐ மில்லியன் கணக்கான முறை மீண்டும் மீண்டும் கணக்கிடுவதன் மூலம் செயல்படுகிறது, இறுதியில் ஒரு நோடு இலக்கை விட குறைவான ஹாஷைக் கொண்ட ஒரு பதிப்பைக் கொண்டு வரும் வரை (தற்போது சுமார் 2192). இருப்பினும், இந்த மைனிங் அல்காரிதம் இரண்டு வகையான மையமாக்கலுக்கு ஆளாகிறது. முதலாவதாக, மைனிங் சுற்றுச்சூழல் அமைப்பு ASIC-களால் (பயன்பாடு சார்ந்த ஒருங்கிணைந்த சுற்றுகள்) ஆதிக்கம் செலுத்தப்படுகிறது, கணினி சில்லுகள் Bitcoin மைனிங்கின் குறிப்பிட்ட பணிக்காக வடிவமைக்கப்பட்டுள்ளன, எனவே ஆயிரக்கணக்கான மடங்கு அதிக திறன் கொண்டவை. இதன் பொருள் Bitcoin மைனிங் இனி மிகவும் பரவலாக்கப்பட்ட மற்றும் சமத்துவமான நாட்டம் அல்ல, திறம்பட பங்கேற்க மில்லியன் கணக்கான டாலர்கள் மூலதனம் தேவைப்படுகிறது. இரண்டாவதாக, பெரும்பாலான Bitcoin மைனர்கள் உண்மையில் பிளாக் சரிபார்ப்பை உள்நாட்டில் செய்வதில்லை; அதற்குப் பதிலாக, பிளாக் தலைப்புகளை வழங்க அவர்கள் மையப்படுத்தப்பட்ட மைனிங் பூலை நம்பியிருக்கிறார்கள். இந்த சிக்கல் விவாதிக்கக்கூடிய வகையில் மோசமானது: இதை எழுதும் நேரத்தில், முதல் மூன்று மைனிங் பூல்கள் Bitcoin நெட்வொர்க்கில் தோராயமாக 50% செயலாக்க சக்தியை மறைமுகமாகக் கட்டுப்படுத்துகின்றன, இருப்பினும் ஒரு பூல் அல்லது கூட்டணி 51% தாக்குதலுக்கு முயற்சித்தால் மைனர்கள் மற்ற மைனிங் பூல்களுக்கு மாறலாம் என்ற உண்மையால் இது தணிக்கப்படுகிறது.
Ethereum-இல் தற்போதைய நோக்கம் ஒரு மைனிங் அல்காரிதத்தைப் பயன்படுத்துவதாகும், அங்கு மைனர்கள் நிலையிலிருந்து சீரற்ற தரவைப் பெற வேண்டும், பிளாக்செயினில் உள்ள கடைசி N பிளாக்குகளிலிருந்து தோராயமாக தேர்ந்தெடுக்கப்பட்ட சில பரிவர்த்தனைகளைக் கணக்கிட வேண்டும் மற்றும் முடிவின் ஹாஷை வழங்க வேண்டும். இது இரண்டு முக்கியமான நன்மைகளைக் கொண்டுள்ளது. முதலாவதாக, Ethereum ஒப்பந்தங்கள் எந்த வகையான கணக்கீட்டையும் உள்ளடக்கலாம், எனவே ஒரு Ethereum ASIC அடிப்படையில் பொதுவான கணக்கீட்டிற்கான ASIC ஆக இருக்கும் - அதாவது, ஒரு சிறந்த CPU. இரண்டாவதாக, மைனிங்கிற்கு முழு பிளாக்செயினுக்கான அணுகல் தேவைப்படுகிறது, மைனர்கள் முழு பிளாக்செயினையும் சேமிக்க கட்டாயப்படுத்துகிறது மற்றும் குறைந்தபட்சம் ஒவ்வொரு பரிவர்த்தனையையும் சரிபார்க்கும் திறன் கொண்டதாக இருக்க வேண்டும். இது மையப்படுத்தப்பட்ட மைனிங் பூல்களின் தேவையை நீக்குகிறது; வெகுமதி விநியோகத்தின் சீரற்ற தன்மையை சமன் செய்யும் நியாயமான பங்கை மைனிங் பூல்கள் இன்னும் செய்ய முடியும் என்றாலும், இந்த செயல்பாட்டை மையக் கட்டுப்பாடு இல்லாத பியர்-டு-பியர் (peer-to-peer) பூல்களால் சமமாகச் சிறப்பாகச் செய்ய முடியும்.
இந்த மாதிரி சோதிக்கப்படவில்லை, மேலும் ஒப்பந்தச் செயலாக்கத்தை மைனிங் அல்காரிதமாகப் பயன்படுத்தும்போது சில புத்திசாலித்தனமான மேம்படுத்தல்களைத் தவிர்ப்பதில் வழியில் சிரமங்கள் இருக்கலாம். இருப்பினும், இந்த அல்காரிதத்தின் குறிப்பிடத்தக்க சுவாரஸ்யமான அம்சம் என்னவென்றால், சில ASIC-களைத் தடுப்பதற்காக பிரத்யேகமாக வடிவமைக்கப்பட்ட ஏராளமான ஒப்பந்தங்களை பிளாக்செயினில் அறிமுகப்படுத்துவதன் மூலம் எவரும் "கிணற்றில் விஷம் கலக்க" (poison the well) இது அனுமதிக்கிறது. ASIC உற்பத்தியாளர்கள் ஒருவரையொருவர் தாக்க இத்தகைய தந்திரத்தைப் பயன்படுத்த பொருளாதார ஊக்கத்தொகைகள் உள்ளன. எனவே, நாங்கள் உருவாக்கும் தீர்வு இறுதியில் முற்றிலும் தொழில்நுட்ப ரீதியான தீர்வாக இல்லாமல் ஒரு தகவமைப்பு பொருளாதார மனித தீர்வாகும்.
அளவிடுதல் (Scalability)
Ethereum பற்றிய ஒரு பொதுவான கவலை அளவிடுதல் (scalability) பிரச்சினை. Bitcoin-ஐப் போலவே, நெட்வொர்க்கில் உள்ள ஒவ்வொரு நோடாலும் ஒவ்வொரு பரிவர்த்தனையும் செயலாக்கப்பட வேண்டும் என்ற குறைபாட்டால் Ethereum பாதிக்கப்படுகிறது. Bitcoin-உடன், தற்போதைய பிளாக்செயினின் அளவு சுமார் 15 GB-இல் உள்ளது, இது மணிக்கு சுமார் 1 MB வளர்கிறது. Bitcoin நெட்வொர்க் விசா-வின் (Visa) வினாடிக்கு 2000 பரிவர்த்தனைகளைச் செயலாக்கினால், அது மூன்று வினாடிகளுக்கு 1 MB வளரும் (மணிக்கு 1 GB, வருடத்திற்கு 8 TB). Ethereum இதேபோன்ற வளர்ச்சி முறையால் பாதிக்கப்பட வாய்ப்புள்ளது, Bitcoin-ஐப் போல ஒரு நாணயத்திற்குப் பதிலாக Ethereum பிளாக்செயினின் மேல் பல பயன்பாடுகள் இருக்கும் என்ற உண்மையால் இது மோசமடைகிறது, ஆனால் Ethereum முழு நோடுகள் முழு பிளாக்செயின் வரலாற்றிற்குப் பதிலாக நிலையை மட்டுமே சேமிக்க வேண்டும் என்ற உண்மையால் இது மேம்படுத்தப்படுகிறது.
இவ்வளவு பெரிய பிளாக்செயின் அளவின் சிக்கல் மையமாக்கல் அபாயமாகும். பிளாக்செயின் அளவு, 100 TB ஆக அதிகரித்தால், மிகச் சிறிய எண்ணிக்கையிலான பெரிய வணிகங்கள் மட்டுமே முழு நோடுகளை இயக்கும், அனைத்து வழக்கமான பயனர்களும் லைட் SPV நோடுகளைப் பயன்படுத்துவார்கள். அத்தகைய சூழ்நிலையில், முழு நோடுகளும் ஒன்றிணைந்து லாபகரமான முறையில் ஏமாற்ற ஒப்புக்கொள்ளலாம் (எ.கா., பிளாக் வெகுமதியை மாற்றுவது, தங்களுக்கு BTC-ஐ வழங்குவது) என்ற சாத்தியமான கவலை எழுகிறது. லைட் நோடுகளுக்கு இதை உடனடியாகக் கண்டறிய வழி இருக்காது. நிச்சயமாக, குறைந்தபட்சம் ஒரு நேர்மையான முழு நோடு இருக்க வாய்ப்புள்ளது, மேலும் சில மணிநேரங்களுக்குப் பிறகு மோசடி பற்றிய தகவல்கள் Reddit போன்ற சேனல்கள் மூலம் வெளியேறும், ஆனால் அந்த நேரத்தில் அது மிகவும் தாமதமாகிவிடும்: கொடுக்கப்பட்ட பிளாக்குகளை தடுப்புப்பட்டியலில் (blacklist) சேர்க்க ஒரு முயற்சியை ஏற்பாடு செய்வது சாதாரண பயனர்களின் பொறுப்பாகும், இது வெற்றிகரமான 51% தாக்குதலை நடத்துவது போன்ற அதே அளவிலான ஒரு பெரிய மற்றும் சாத்தியமற்ற ஒருங்கிணைப்பு சிக்கலாகும். Bitcoin-இன் விஷயத்தில், இது தற்போது ஒரு சிக்கலாக உள்ளது, ஆனால் இந்த சிக்கலைத் தணிக்கும் பீட்டர் டோட் (Peter Todd) பரிந்துரைத்த (opens in a new tab) பிளாக்செயின் மாற்றம் உள்ளது.
எதிர்காலத்தில், இந்த சிக்கலைச் சமாளிக்க Ethereum இரண்டு கூடுதல் உத்திகளைப் பயன்படுத்தும். முதலாவதாக, பிளாக்செயின் அடிப்படையிலான மைனிங் அல்காரிதம்கள் காரணமாக, குறைந்தபட்சம் ஒவ்வொரு மைனரும் முழு நோடாக இருக்க வேண்டிய கட்டாயம் ஏற்படும், இது முழு நோடுகளின் எண்ணிக்கையில் குறைந்த வரம்பை உருவாக்குகிறது. இரண்டாவதாக மற்றும் மிக முக்கியமாக, ஒவ்வொரு பரிவர்த்தனையையும் செயலாக்கிய பிறகு பிளாக்செயினில் ஒரு இடைநிலை நிலை மர மூலத்தை (intermediate state tree root) சேர்ப்போம். பிளாக் சரிபார்ப்பு மையப்படுத்தப்பட்டிருந்தாலும், ஒரு நேர்மையான சரிபார்க்கும் நோடு இருக்கும் வரை, சரிபார்ப்பு நெறிமுறை மூலம் மையமாக்கல் சிக்கலைத் தவிர்க்கலாம். ஒரு மைனர் தவறான பிளாக்கை வெளியிட்டால், அந்த பிளாக் மோசமாக வடிவமைக்கப்பட்டிருக்க வேண்டும் அல்லது நிலை S[n] தவறாக இருக்க வேண்டும். S[0] சரியானது என்று அறியப்படுவதால், S[i-1] சரியாக இருக்கும் இடத்தில் தவறான சில முதல் நிலை S[i] இருக்க வேண்டும். சரிபார்க்கும் நோடு குறியீட்டு i-ஐ வழங்கும், அதோடு APPLY(S[i-1],TX[i]) -> S[i]-ஐச் செயலாக்கத் தேவையான பாட்ரிசியா (Patricia) மர நோடுகளின் துணைக்குழுவைக் கொண்ட "தவறானதற்கான சான்று" (proof of invalidity) வழங்கப்படும். நோடுகள் கணக்கீட்டின் அந்தப் பகுதியை இயக்க அந்த நோடுகளைப் பயன்படுத்த முடியும், மேலும் உருவாக்கப்பட்ட S[i] வழங்கப்பட்ட S[i]-உடன் பொருந்தவில்லை என்பதைக் காணலாம்.
மற்றொரு, மிகவும் அதிநவீன தாக்குதல், தீங்கிழைக்கும் மைனர்கள் முழுமையற்ற பிளாக்குகளை வெளியிடுவதை உள்ளடக்கும், எனவே பிளாக்குகள் செல்லுபடியாகும் என்பதைத் தீர்மானிக்க முழுத் தகவலும் இல்லை. இதற்கான தீர்வு ஒரு சவால்-பதில் (challenge-response) நெறிமுறையாகும்: சரிபார்ப்பு நோடுகள் இலக்கு பரிவர்த்தனை குறியீடுகளின் வடிவத்தில் "சவால்களை" வெளியிடுகின்றன, மேலும் ஒரு நோடைப் பெற்றவுடன், மைனர் அல்லது மற்றொரு சரிபார்ப்பவர், செல்லுபடியாகும் சான்றாக பாட்ரிசியா நோடுகளின் துணைக்குழுவை வழங்கும் வரை லைட் நோடு பிளாக்கை நம்பத்தகாததாகக் கருதுகிறது.
முடிவுரை
Ethereum நெறிமுறையானது முதலில் ஒரு கிரிப்டோகரன்சியின் மேம்படுத்தப்பட்ட பதிப்பாகவே கருதப்பட்டது. இது மிகவும் பொதுவான ஒரு நிரலாக்க மொழியின் மூலம், பிளாக்செயினில் உள்ள எஸ்க்ரோ, பணம் எடுப்பதற்கான வரம்புகள், நிதி ஒப்பந்தங்கள், சூதாட்ட சந்தைகள் மற்றும் இது போன்ற மேம்பட்ட அம்சங்களை வழங்குகிறது. Ethereum நெறிமுறை எந்தவொரு பயன்பாடுகளையும் நேரடியாக "ஆதரிக்காது", ஆனால் ஒரு டூரிங்-முழுமையான (Turing-complete) நிரலாக்க மொழியின் இருப்பு என்பது, எந்தவொரு பரிவர்த்தனை வகை அல்லது பயன்பாட்டிற்கும் கோட்பாட்டளவில் தன்னிச்சையான ஒப்பந்தங்களை உருவாக்க முடியும் என்பதாகும். இருப்பினும், Ethereum பற்றிய மிகவும் சுவாரஸ்யமான விஷயம் என்னவென்றால், Ethereum நெறிமுறையானது வெறும் நாணயம் என்பதைத் தாண்டி வெகுதூரம் நகர்கிறது. பரவலாக்கப்பட்ட கோப்பு சேமிப்பு, பரவலாக்கப்பட்ட கணக்கீடு மற்றும் பரவலாக்கப்பட்ட கணிப்பு சந்தைகள் போன்ற டஜன் கணக்கான பிற கருத்துகளைச் சுற்றியுள்ள நெறிமுறைகள், கணக்கீட்டுத் துறையின் செயல்திறனை கணிசமாக அதிகரிக்கும் திறனைக் கொண்டுள்ளன. மேலும், முதல் முறையாக ஒரு பொருளாதார அடுக்கைச் சேர்ப்பதன் மூலம் பிற பியர்-டு-பியர் (peer-to-peer) நெறிமுறைகளுக்கு ஒரு பெரிய ஊக்கத்தை வழங்குகின்றன. இறுதியாக, பணத்துடன் எந்த தொடர்பும் இல்லாத கணிசமான அளவிலான பயன்பாடுகளும் இதில் உள்ளன.
Ethereum நெறிமுறையால் செயல்படுத்தப்படும் தன்னிச்சையான நிலை மாற்றச் செயல்பாட்டின் கருத்தாக்கமானது, தனித்துவமான திறனைக் கொண்ட ஒரு தளத்தை வழங்குகிறது; தரவு சேமிப்பு, சூதாட்டம் அல்லது நிதி ஆகியவற்றில் உள்ள ஒரு குறிப்பிட்ட பயன்பாடுகளுக்காக வடிவமைக்கப்பட்ட மூடிய, ஒற்றை-நோக்க நெறிமுறையாக இருப்பதற்குப் பதிலாக, Ethereum வடிவமைப்பிலேயே திறந்த-முடிவுடையதாக உள்ளது. மேலும், வரவிருக்கும் ஆண்டுகளில் நிதி மற்றும் நிதி அல்லாத ஏராளமான நெறிமுறைகளுக்கு ஒரு அடிப்படை அடுக்காகச் செயல்படுவதற்கு இது மிகவும் பொருத்தமானது என்று நாங்கள் நம்புகிறோம்.
குறிப்புகள் மற்றும் மேலும் படிக்க
குறிப்புகள்
- ஒரு Bitcoin முகவரி என்பது நீள்வட்ட வளைவு பொது திறவுகோலின் (elliptic curve public key) ஹாஷ் (hash) ஆகும், அது பொது திறவுகோல் அல்ல என்பதை ஒரு நுட்பமான வாசகர் கவனிக்கலாம். இருப்பினும், pubkey ஹாஷை ஒரு பொது திறவுகோல் என்று குறிப்பிடுவது முற்றிலும் சரியான கிரிப்டோகிராஃபிக் (cryptographic) சொற்களாகும். ஏனெனில் Bitcoin-இன் கிரிப்டோகிராஃபியை ஒரு தனிப்பயன் டிஜிட்டல் கையொப்ப அல்காரிதமாகக் கருதலாம், இதில் பொது திறவுகோல் ECC pubkey-இன் ஹாஷைக் கொண்டுள்ளது, கையொப்பம் ECC கையொப்பத்துடன் இணைக்கப்பட்ட ECC pubkey-ஐக் கொண்டுள்ளது, மேலும் சரிபார்ப்பு அல்காரிதம் கையொப்பத்தில் உள்ள ECC pubkey-ஐ பொது திறவுகோலாக வழங்கப்பட்ட ECC pubkey ஹாஷுடன் சரிபார்த்து, பின்னர் ECC pubkey-க்கு எதிராக ECC கையொப்பத்தை சரிபார்க்கிறது.
- தொழில்நுட்ப ரீதியாக, முந்தைய 11 பிளாக்குகளின் (blocks) இடைநிலை (median).
- உள்நாட்டில், 2 மற்றும் "CHARLIE" ஆகிய இரண்டும் எண்களாகும்fn3, பிந்தையது பிக்-எண்டியன் பேஸ் 256 (big-endian base 256) பிரதிநிதித்துவத்தில் உள்ளது. எண்கள் குறைந்தபட்சம் 0 ஆகவும் அதிகபட்சம் 2256-1 ஆகவும் இருக்கலாம்.
மேலும் படிக்க
- உள்ளார்ந்த மதிப்பு (Intrinsic value) (opens in a new tab)
- ஸ்மார்ட் சொத்து (Smart property) (opens in a new tab)
- ஸ்மார்ட் ஒப்பந்தங்கள் (Smart contracts) (opens in a new tab)
- B-money (opens in a new tab)
- மறுபயன்பாட்டு வேலைக்கான சான்றுகள் (Reusable proofs of work) (opens in a new tab)
- உரிமையாளர் அதிகாரத்துடன் பாதுகாப்பான சொத்து தலைப்புகள் (Secure property titles with owner authority) (opens in a new tab)
- Bitcoin வெள்ளை அறிக்கை (Bitcoin whitepaper) (opens in a new tab)
- Namecoin (opens in a new tab)
- Zooko-வின் முக்கோணம் (Zooko's triangle) (opens in a new tab)
- வண்ண நாணயங்கள் வெள்ளை அறிக்கை (Colored coins whitepaper) (opens in a new tab)
- Mastercoin வெள்ளை அறிக்கை (Mastercoin whitepaper) (opens in a new tab)
- பரவலாக்கப்பட்ட தன்னாட்சி நிறுவனங்கள் (Decentralized autonomous corporations), Bitcoin Magazine (opens in a new tab)
- எளிமைப்படுத்தப்பட்ட கட்டண சரிபார்ப்பு (Simplified payment verification) (opens in a new tab)
- Merkle மரங்கள் (Merkle trees) (opens in a new tab)
- Patricia மரங்கள் (Patricia trees) (opens in a new tab)
- GHOST (opens in a new tab)
- StorJ மற்றும் தன்னாட்சி முகவர்கள் (Autonomous Agents), Jeff Garzik (opens in a new tab)
- Turing திருவிழாவில் ஸ்மார்ட் சொத்து குறித்து Mike Hearn (opens in a new tab)
- Ethereum RLP
- Ethereum Merkle Patricia மரங்கள்
- Merkle தொகை மரங்கள் (Merkle sum trees) குறித்து Peter Todd (opens in a new tab)
வெள்ளை அறிக்கையின் வரலாற்றுக்கு, இந்த விக்கியைப் பார்க்கவும் (opens in a new tab).
Ethereum, பல சமூகம் சார்ந்த, ஓப்பன் சோர்ஸ் மென்பொருள் திட்டங்களைப் போலவே, அதன் தொடக்கத்திலிருந்தே பரிணாம வளர்ச்சியடைந்துள்ளது. Ethereum-இன் சமீபத்திய முன்னேற்றங்கள் மற்றும் நெறிமுறையில் (protocol) மாற்றங்கள் எவ்வாறு செய்யப்படுகின்றன என்பதைப் பற்றி அறிய, இந்த வழிகாட்டியைப் பரிந்துரைக்கிறோம்.





