Бүгінгі күні blockchain технологиясы туралы көп әңгіме жүргізілуде.Бірақ цифрлық валютаны енгізу негізі тұрғысынан емес, ақпаратты көптеген салаларда орталықтандырылмаған сақтау мәселесін шешуге қолданылатын технология ретінде. Блокчейн — бұл блоктар тізбегі. Бірақ әр тізбекте ең алғашқы блок болуы керек. Бұл мақалада автор блокчейндегі блоктардың құрылымын егжей-тегжейлі зерттеп, оны қарапайым етіп көрсетеді, бірақ сонымен бірге күрделі криптографиялық есептеулерге сүйене отырып, тізбектегі нөлдік блокқа ерекше назар аударады. Блокчейннің жұмыс принципін қарастыра отырып, автор блоктарды қалыптастыру үшін қолданылатын криптографиялық алгоритмдер мен функцияларды, олардың нөлдік блокта қолданылуын сипаттайды және қазіргі заманғы таратылған жүйелер технологиялары үшін бұл технологияның тартымдылығын талқылайды.
Түйінді сөздер: криптовалюта, генезис блок, транзакция, майнинг, блокчейн.
В статье рассматривается концепция технологии блокчейн, в частности анализируется важность генезис-блока. Приводится основные криптографические алгоритмы и функции.
Ключевые слова: криптовалюта, генезис-блок, транзакция, майнинг, блокчейн.
Криптовалютаның пайда болуы криптографияның дамуымен тығыз байланысты. 1980 жылдардың соңында криптография кеңінен қол жетімді және түсінікті бола бастаған кезде, көптеген жасаушылар цифрлық валюталарды құру үшін криптографияны қолдануға тырысты.
Сіз Blockchain сөзін естігенде, бірінші кезекте Bitcoin-ды еске түсіресіз.
Биткоин 2008 жылы ойлап табылып, Сатоши Накамото лақап атымен автордың «Bitcoin: a peer-to-peer electronic cash system» атты мақала жарияланғаннан кейін белгілі болды. Әлемдік «сайлау» деп аталатын 10 минут сайын таратылған есептеу жүйесінде (жұмыс алгоритмінің дәлелі деп аталатын) жүретін орталықтандырылмаған желіде жүргізілетін есептеулер арқылы транзакциялар консенсус жағдайында қалуына мүмкіндік берді. Бұл бір ақша бірлігін екі рет жұмсауға болатын кезде екі есе шығындар туралы мәселені шешті.
Blockchain бағдарламалық жасақтамасы барлық транзакцияларды шифрлейді. Жіберуші мен алушы нөмірлер жолымен ғана анықталады, бірақ әрбір транзакция туралы жазбалар желі бойынша жарияланады. Сатып алушылар мен сатушылар аты-жөнін атамайды, бірақ барлығы монетаның А-дан В-ге ауысқанын көре алады. Накамото жазған код А пайдаланушысына тиынды екінші рет жұмсауына кедергі келтіреді.
Кейіннен код бірнеше рет қайта қаралды және қайта жазылды. Бүгінгі таңда Blockchain технологиясы қарқынды дамып келеді және көптеген IT салаларында қолданылады.
Blockchain деректер құрылымы — бұл хакерлікке қарсы блоктар деп аталатын жазбалардың үнемі өсіп келе жатқан тізімін жүргізетін таратылған мәліметтер базасы. Блоктар кері тәртіпте қосылады, мұнда тізбектегі әр блок алдыңғы блокқа сілтенеді.
Сатоши Накомото мақаласына сәйкес, Blockchain жүйесі келесі принцип бойынша жұмыс істейді:
− барлық түйіндерге жаңа транзакциялар жіберіледі;
− әр түйін блоктағы кіріс операцияларын біріктіреді;
− әр түйін ағымдағы күрделілігіне жауап беретін блок-хэш табуға тырысады;
− осындай хэш табылғаннан кейін бұл блок желіге жіберіледі;
− түйіндер барлық транзакциялар дұрыс болған және жұмсалған қаражатты пайдаланбаған жағдайда ғана блокты қабылдайды;
− Түйіндер жаңа мәліметтермен келіседі, келесі блокта жұмыс басталып, алдыңғы блоктың хэшін жаңа бастапқы деректер ретінде қолданады.
Сонымен блок — Blockchain компоненті. Онда уақыт белгісі, яғни жасалған сәт, алдыңғы блоктың хэші, меншікті хэш және транзакциялар тізімі бар.
Мысалы, деректерді байланыстырылған тізімдерге енгізу үшін жаңа түйін жасау керек, оған кейбір деректерді салып, оны тізімге қосу керек. Блокчейнде де дәл солай болады, айырмашылығы — сіз жаңа блокты жасай алмайсыз, жасалған блок күрделі криптографиялық есептеудің нәтижесі екеніне көз жеткізуіңіз керек. Бұл процесс блоктың жұмысының дәлелі болып табылады және оны майнинг деп атайды. Майнинг өндірісі көмегімен жаңа таңбалауыштар Blockchain хаттамасының қолданыстағы айналымына енгізіледі. Майнинг Blockchain желісін қорғау үшін де қолданылады.
Blockchain-дегі әрбір блок блок тақырыбына қолданылатын белгілі бір криптографиялық алгоритм көмегімен жасалынатын хэшпен анықталады. Әр блок сонымен бірге тақырыптың «алдыңғы блоктың хэші» өрісі арқылы ата-ана блогы деп аталатын алдыңғыға сілтеме жасайды, бұл блок ішіндегі деректердің өзгермеуін қамтамасыз етеді. Блокчейн құрылымы 1-суретте көрсетілген.
Сурет-1. Blockchain құрылымы
Бүкіл blockchain жүйесі анонимді қатысушылардың таратылған желісімен қамтамасыз етілген. Blockchain-ге блокты қосу үшін майнер (майнинг процесіне қатысушы) блоктың тақырыбынан мәліметтерді кіріс ретінде алады, содан кейін SHA-256 криптографиялық хэш алгоритмі арқылы қайта іске қосады.
SHA-256 — криптографиялық хэш функциясы, кездейсоқ өлшемді енгізуді қабылдайды және белгіленген өлшемді нәтиже шығарады. Хэш функциялары бір жақты, сондықтан күшті криптографиялық құрал болып саналады. Кірісті орнатқан кезде нәтижені алу үшін кез келген пайдаланушы хэш функциясын қолдана алады; алайда көрсетілген кірісті қалпына келтіру үшін хэш функциясының нәтижесін пайдалану мүмкін емес. SHA-256 хэш функциясының бұл қасиеті Blockchain желісінде қолдануға өте ыңғайлы.
SHA-256 хэш функциясы Blockchain желісінде екі негізгі жолмен қолданылады:
− майнинг — жаңа желілік блоктардың пайда болуы;
− blockchain мекен-жайларын құру.
Майнерлер тақырып блогының хэші желі орнатқан хэш бақылау мәнінен кем немесе оған тең болатын хэш мәнін шығармайынша, кірістің кішігірім вариацияларын тұдырады. Мәліметтерді іздеу процесінде осындай хэш мәнін табу goldennonce деп аталады.
Blockchain-ге жаңа блокты қосу айтарлықтай жұмысты қажет етеді. Бұл дегеніміз, бұрынғы блоктарды өзгерткісі келетін қатер төндірушілер алдыңғы блоктарды өзгерту үшін одан да көп жұмыс істеуге тура келеді. Алдыңғы блокқа кіретін транзакцияларды өзгерту үшін, қатер төндірушілер желіде орналасқан барлық алдыңғы блоктарды өзгертуі керек. Осылайша, алдыңғы блокты өзгерту құны Blockchain-ге қосылатын әрбір жаңа блокпен бірге растау процесінің әсерін арттырады.
Бір ерекшелік — генезис блогы деп аталатын тізбектің бірінші блогы. Жаңа Blockchain жасалған сайын, генезис блогы да жасалуы керек. Генезді блок нөлдік блок деп те атайды. Нөлдік блоктың үстіне қосылатын екінші блок № 1 блок деп аталады. Блоктардың ретін білдіретін сан блоктың биіктігі нөмірі деп аталады. Блок биіктігі нөмірі әрдайым оң бүтін сан болып табылады.
Желінің әр блогында coinbase деп аталатын транзакция бар. Монета базасы транзакциясы — бұл майнер өзі салған блокқа орналастырған және желіге жіберілетін блокты сәтті құрғаны үшін майнерді марапаттайтын алғашқы мәміле.
Сатоши Накамото генезис блогын салғанда, оған 50 биткоин үшін сыйақы тағайындады; осы 50 биткоиндер 1a1zp1ep5qgefi 2dmptl5slmv7divfna мекен-жайына жіберілді. Оны Накамото өзі басқарады деген пікір бар. 2-суретте биткоиннің мекен-жайы көрсетілген.
Сурет-2. Bitcoin мекен-жайы
Мекенжайлар — қатысушылар арасындағы транзакцияларды жүргізу үшін қолданылатын сәйкестендіргіштер. Мекенжай — ECDSA ашық/жеке кілтінің көпшілік бөлігінің 160 биттік хэші. Ашық кілттің криптографиясын қолдана отырып, деректерге жеке кілтпен қол қоюға болады, ал тиісті ашық кілтті білетін кез келген адам қолдың жарамдылығын тексере алады.
Әр қабылдаушы мекенжай үшін кілттердің жаңа жұбы жасалады. Ашық кілт және онымен байланысты жеке кілттер әмиянның деректер файлында сақталады.
Blockchain-де мекен-жайларды құру процесін қарастырыңыз:
− бірінші шарт ECDSA жеке кілтінің болуы;
− тиісті ECDA ашық кілтінде SHA-256 хэштегін орындау;
− SHA-256 нәтижесі бойынша RIPEMD-160 хэштерін орындау;
− ripemd-160 хештің алдында байт нұсқасын қосу (негізгі желі үшін 0x00);
− кеңейтілген RIPEMD-160 нәтижесіне SHA-256 хэштегін орындау;
− Алдыңғы SHA-256 хэштегі негізінде SHA-256 хэштеуін орындау;
− екінші SHA-256 хэштің алғашқы 4 байттары тексеру ретінде қабылданады және RIPEMD-160 хешінің соңында қосылады. Нәтижесінде 25 байтты екілік адрес пайда болады.
Пайдаланылған кодтауға байланысты нақты мекен-жай пішімін алуға болады.
Coinbase транзакциясының деректерінде Сатоши келесі хабарламаны қалдырды: «The Times 03/Jan/2009 Chan celloron brink of second bail out for banks», бұл қазак тілінде: «2009 жылдың 3 қаңтары, Канцлер банктерді екінші рет құтқару шегінде».
Бұл мәтінді Сатоши 2009 жылдың 3 қаңтарында генезис блогының пайда болғандығының дәлелі ретінде енгізді деп болжанады.
Генез блогындағы кейбір мәліметтер:
− транзакциялар саны: 1
− транзакция үшін ақы: $ 0.00
− блоктың биіктігі: 0
− уақыт белгісі: 03/02/3009, 18: 15
− Nonce: 208393
− күрделілік блогы: 1
Бүгін осы блоктарды көру үшін blockchain әртүрлі құралдарды қолданады. Ең танымал бірі — blockchain зерттеушісі. 3-суретте биткоиннің нөлдік блогының құрылымы көрсетілген.
Сурет-3. Биткоиннің нөлдік блогының құрылымы
Транзакциялар саны. Әдетте, блоктағы бірінші транзакция ерекше болып табылады, ол блокты жасаушыға тиесілі жаңа монета жасайды. Мұндай схема адал қатысушыларды желіні қолдауға итермелейді, сонымен қатар орталық эмитент болмаған кезде ақша ұсынысын бастапқы бөлу мәселесін шешеді.
Генезис блогында coinbase деп аталатын бір ғана операция бар.
Транзакция ақысы — әдетте, Blockchain-де пайдаланушылар майнерлерге транзакцияларды желі арқылы растайтындай етіп төлем жасайды; Операцияның орташа бағасы қазіргі уақытта $ 0,17 құрайды. Генез блогында мұндай комиссия транзакциялардың болмауына байланысты болмайды.
Егер кіріс төлемінің сомасы шығарылғаннан көп болса, онда айырмашылық аударым үшін комиссия болып табылады және бірінші транзакция кезінде комиссияның базалық құнына қосылады. Ақша ұсынысының жалпы көлемі алдын-ала белгіленген максимумға жеткен кезде, блоктарда жұмыс істеуге ынталандырудың жалғыз көзі инфляциядан босатылған кезде комиссиялық болып қала береді. Ынталандырудың бұл түрі алаяқтықты азайтуға да көмектеседі. Егер қауіп төндіруші барлық адал қатысушыларға қарағанда көбірек есептеу қуатын бөле алса, ол сатушыларды мәмілелерден бас тарту және ақшаны қайтару арқылы алдай алады немесе ресурстарын жаңа блоктар мен монеталар шығаруға бағыттай алады. Ол үшін «ережелер арқылы ойнау» опциясы тиімдірек, ол «жүйені диверсиялау» және өз капиталын тұрақты деңгейде ұстап қалудан гөрі барлық жаңа ақшаның жартысынан көбін қамтамасыз етеді.
Блоктың биіктігі — Blockchain блоктар санын немесе желідегі блоктың сериялық нөмірін анықтайды. Алайда блоктың биіктігінің үлкен мәні оның сенімділігін білдірмейді. Blockchain қауіпсіздігін растау үшін жұмысқа қабілетті алгоритм қолданылады, яғни Blockchain қаншалықты қауіпсіз екенін анықтау үшін индикатор ретінде жеке адамдар блоктарды өндіруге жұмсаған ресурстардың мөлшері пайдаланылады.
Blockchain-дегі блоктың биіктігі және оның қауіпсіздігі туралы айтатын болсақ, растау деп аталатын заттар туралы да айту керек. Растау — бұл пайдаланушы транзакциясы бар блок сәтті қосылғаннан кейін Blockchain-ке қосылған блоктар саны. Мысалы, пайдаланушының транзакциясы биіктігі № 10 болатын блокқа қосылды. Оның үстіне № 11 биіктіктегі басқа блок қосылған кезде, бұл бір растау болып саналады. Келесіде сіз биіктігі 12 болатын блокты қосқан кезде, ол № 10 биіктіктегі блоктағы мәміленің екінші растауы және т. с.с. қарастырылады.Трейдерлер мен биржалар, әдетте, қос шығындалу мүмкіндігін болдырмау үшін криптовалюта төлемдерін қабылдағанға дейін растаудың белгілі бір санын күтеді.
Blockchain-дегі нөлдік блок әрқашан нөлдік биіктікке ие болады және оған қосымша блоктар қосылатын негізі қаланады.
Уақыт белгісі — майнер блок тақырыбын хэштеуді бастау уақыты.
Nonce — Blockchain-ге блок қосу құқығын алу үшін майнер үнемі өзгеріп отыратын кездейсоқ өзгергіш айнымалы. Нөлдік блокта ол да бар. Бұл айнымалы блок-тақырыпта 4-байттық өріс түрінде көрсетіледі, оны майнерлер блок-хэш желі арқылы басқарылатын басқарудың хэш мәнінен аз немесе оған тең болатындай етіп реттейді.
Блок тақырыптары 80 байттық форматқа өзгертіледі, содан кейін жұмыс алгоритмін дәлелдеудің бөлігі ретінде толтырылады, бұл Blockchain-де тақырып пішімін консенсус ережелерінің бір бөлігі етеді. Блок тақырыбының форматы мысал ретінде 1-ші кестеде келтірілген.
Кесте-1
Блок тақырыбының құрама бөліктері
байт |
Атауы |
Сипаттама |
4 |
нұсқасы |
саны пайдаланылатын консенсус ережелерін орнату блогын көрсетеді. |
32 |
алдыңғы блок тақырып хэші |
қосу алдыңғы блоктың тақырып хэші алдыңғы блок тақырыптарының өзгеруінсіз өзгермелі болуын қамтамасыз етеді. |
32 |
Merkle хэш түбірі |
Merkle хэш түбірі бүкіл осы блоктың транзациялар хэштерінің туындысы болып табылады. Бұл сол транзациялардың біреуі де тақырыптың өзгеруінсіз өзгеруге ұшырамайтындығына кепілдік береді. |
4 |
Блок уақыты |
Майнер тақырыптарды хэштеуді бастау уақыты. Бұл уақыт алдындағы блоктардың орташа уақытынан көп болу керек. |
4 |
nBits |
Бақылау шегінің кодтық нұсқасы. Хэш-тақырып жүйемен еңгізілген бақылау хэш мәнінен аз немесе тең болуы қажет. |
4 |
Nonce айнымалы |
Майнерлер тақырыптың хэшін өзгерту үшін және желіде орнатылған хэш бақылау мәнінен кем немесе оған тең болатын хэш құру үшін өзгертетін еркін сан. |
Алдыңғы блок-хэш параметрін жасау үшін майнер алдыңғы блоктың тақырыбына SHA-256 алгоритмін екі рет қолдануы керек. Бұл процесс қосарлы SHA-256 ретінде де белгілі:
Алдыңғы блок хэш = SHA-256 (SHA-256 (блок тақырыбы))
Алгоритм SHA-256 алгоритмі merkle түбірін құру үшін қолданылады, ол кейін блоктың тақырыбына енгізіледі.
Тізбектегі соңғы транзакция жеткілікті түрде «ескі» блок ішінде болған кезде, дискідегі орынды тазарту үшін тізбектегі оның алдындағы барлық транзакцияларды жоюға болады. Блок-хэш өзгеріссіз қалуы үшін блоктағы барлық транзакциялар merkle хэш ағашы ретінде сақталады және тек оның түбірі блок-хэшке кіреді. Бұл ағаштың қажетсіз бұтақтарын алып тастау арқылы ескі блоктардың көлемін азайтуға болады, ал аралық қалдықтарды сақтау міндетті емес.
Осылайша, Blockchain-дегі блоктар өте қарапайым құрылым, бірақ маңызды криптографиялық есептеулерге негізделген. Түйіндер расталмаған транзакцияларды, сондай-ақ Blockchain желісіндегі жақында өндірілген блоктарды тексеруге жауап береді. Алайда, түйін тексеруді бастамас бұрын, ол № 1 блоктан бастап, қазіргі Blockchain биіктігіне дейінгі барлық блоктарды жүктеп, тексеруі керек. Бұл процесс блокты жүктеу деп аталады. Нөлдік блокқа мұндай жүктеме қажет емес. Блокчейннің күрделілігі — майнер үшін блокты өзгертуге мүмкіндік беретін, nonce айнымалы мәнді табу қаншалықты қиын екенін өлшейді. Blockchain құру кезеңінде, нөлдік блокты құрғаннан соң, желінің күрделілігі әрқашан «1» мәнін алады және желідегі блоктар санының өсуімен артады.
Әдебиет:
- www.en.bitcoin.it. Биткоин нұсқаларының мекен-жайларының техникалық базасы
- Mastering Bitcoin, 2nd Edition. Programming the Open Blockchain. Andreas M. Antonopoulos. 2017
- www.mycryptopedia.com. Генезис блогының сипаттамасы. 2018
- www.blockchain.com Генезис блок