Գիրք «Սոլիդիտինով սմարթ-կոնտրակտների ստեղծում Ethereum բլոկչեինի համար: Պրակտիկ ուղեցույց»

Գիրք «Սոլիդիտինով սմարթ-կոնտրակտների ստեղծում Ethereum բլոկչեինի համար: Պրակտիկ ուղեցույց»
Ամիսներ առաջ ես աշխատել եմ «Սոլիդիտինով սմարթ-կոնտրակտների ստեղծումը Ethereum բլոկչեինի համար: Պրակտիկ ուղեցույց» գիրքի վրա, և այժմ այս աշխատանքը ավարտված է, իսկ գիրքը հրապարակվել է և հասանելի է LitRes-ում.

Հույս ունեմ, որ իմ գիրքը կօգնի արագ սկսել սմարթ-կոնտրակտների և DApp բաշխված հավելվածների ստեղծումն Ethereum բլոկչեինի համար: Այն բաղկացած է 12 դասից վիրահատական ակնարկներով: Որպեսզի դրանք կատարեք, ընթերցողը կարող է ստեղծել իր սեփական տեղական Ethereum узлы, հրապարակել սմարթ-կոնտրակտներ և կանչել դրանց մեթոդները, փոխանակել տվյալներ իրական աշխարհի և սմարթ-կոնտրակտների միջև հրավառ միջոցների միջոցով, աշխատել Rinkeby փորձարարական հսկիչ ցանցում:

Գիրքը նախատեսված է բոլոր նրանց համար, ովքեր հետաքրքրված են առաջադեմ տեխնոլոգիաներով բլոկչեյնում և ցանկանում են արագ ստանալ գիտելիքներ, որոնք թույլ կտան զբաղվել հետաքրքիր և խոստումնալից աշխատանքով:

Քաղաքացիական կանոնակարգում դուք կգտնեք գրքի բովանդակությունը և առաջին գլուխը (նույնպես на LitRes-ում կան գրքի կտորներ): Հուսով եմ получить обратную связь, замечания и предложения. Все это я постараюсь учесть при подготовке следующей редакции книги.

ԲովանդակությունՆերածությունՄեր գիրքը նախատեսված է նրանց համար, ովքեր ցանկանում են ոչ միայն հասկանալ Ethereum բլոկչեյնի աշխատանքում գտնվող սկզբունքները, այլ նաև ձեռք բերել պրակտիկ միջոցներ DApp բաշխված հավելելպանստին ստեղծելու для этой сети.

Այս գրքի ցուցումները ավելի լավ է պարզապես իրականացնել վրայից, կատարելով պրակտիկ աշխատանքներ, որոնք նկարագրված են դասերում: Ձեզ անհրաժեշտ է տեղական համակարգիչ, վիրտուալ կամ հանքային սերվեր, որտեղ տեղադրված է Debian կամ Ubuntu օպերացիոն համակարգը: Հնարավոր է օգտագործել Raspberry Pi շատ առաջադրանքներ կատարելու համար:

Առաջին դասում օգտագործելու ենք Ethereum բլոկչեյնի աշխատանքում գործող սկզբունքները, հիմնական տերմինաբանությունը և այն, որտեղ կարելի է օգտագործել այս բլոկչեյնն:

Միասնական նպատակը երկրորդ դասը կզբնացնել Ethereum բլոկչեյնի узлы կառուցել այս դասընթացի ընթացքում Ubuntu և Debian սերվերում: Մենք կդիտարկենք հիմնական միջոցների տեղադրման առանձնահատկությունները, ինչպիսիք են geth-ը, որը ապահովում է մեր բլոկչեյնի узлы-ի աշխատանքը, ինչպես նաև decentralized data storage swarm-ը:

Երրորդ դասը կսովորեցնի ձեզ փորձեր կատարել Ethereum-ում ինտենսիվ Raspberry Pi միկրոպիտքիչով: Դուք կտեղադրեք Raspberry Pi-ի ներկառուցված օպերացիոն համակարգը (OS) Raspberry Pi, Geth-ը, որը ապահովում է բլոկչեյնի узлы-ի աշխատանքը, ինչպես նաև decentralized data storage swarm-ը:

Չորրորդ դասը նշանակված է հաշիվներին և Ethereum ցանցի վարկային միավորներին, ինչպես նաև միջոցների փոխանցման եղանակներին, որոնցով հնարավոր է փոխել Ակкаунտ սահմանափակում Geth հրահանգի միջոցով: Դուք կսովորեք ստեղծել հաշիվներ, նախաձեռնող փոխանցումների գործընթացը, ստանալ հաղորդագրություններ փոխարինման մասին:

Հինգերորդ դասում Դուք կծանոթանաք Ethereum ցանցի սմարթ պայմաններին, կհասկանաք դրանց գործարկումը Ethereum վիրտուալ մեքենայի կողմից։

Դուք կստեղծեք և հրապարակեք ձեր առաջին սմարթ պայմանը Ethereum-ի մասնավոր ցանցում և կընդունեք դրա ֆունկցիաները կանչելու։ Այս նպատակով դուք կօգտագործեք Remix Solidity IDE մշակման միջավայր։ Բացի այդ, դուք կսովորեք դնել և օգտագործել solc նվագարկիչը։
Մենք նաև պատմելու ենք Application Binary Interface (ABI) կոչվող բինարային ինտերֆեյսի մասին և սովորեցնելու ենք այն օգտագործել։

Վեցերոդ դասը վիրված է JavaScript սկրիպտների ստեղծմանը, որոնք աշխատում են Node.js-ի ներքո և կատարում են գործողություններ Solidity սմարթ պայմանների հետ։

Դուք կտեղադրեք Node.js Ubuntu, Debian և Rasberian ОС-ում, կգրեք սկրիպտներ ոլորտի սմարթ պայմանը տեղադրելու և նրա ֆունկցիաները կանչելու համար։

Բացի այդ, դուք կսովորեք սցենարների միջոցով միջոցները թարգմանել սովորական հաշիվների միջև, ինչպես նաև տեղափոխել դրանք սմարթ պայմանների հաշիվներին։

Յոթերորդ դասը դուք կսովորեք տեղադրել և օգտագործել սմարթ պայմանների մշակողների համար հայտնի Truffle ինտեգրված միջավայր։ Դուք կսովորեք գրել JavaScript սկրիպտներ, որոնք կանչում են պայմանների ֆունկցիաները truffle-contract մոդուլի միջոցով, ինչպես նաև կկատարեք ձեր սմարթ պայմանների թեստավորման Truffle-ի միջոցներով։

Ութերորդ դասը վիրված է Solidity տվյալների տիպերին։ Դուք կգրեք սմարթ պայմաններ, որոնք աշխատում են նշանավոր և աննշան ամբողջ հաշիվների, նշանքով թվերի, տողերի, հասցեների, բարդ տեսակների փոփոխականների, զանգվածների, Enum-ների, կառուցվածքների և բառարանների հետ։

Վաթսուներորդ դասը դու կսովորեք մեկ քայլ ավելի մոտ լինել Ethereum հիմնական ցանցի համար սմարթ պայմանների ստեղծմանը։ Դուք կսովորեք ամրագրել պայմանները Truffle-ի միջոցով Geth մասնավոր ցանցում, ինչպես նաև Rinkeby փորձնական ցանցում։ Smart պայմանների Debugging-ն Rinkeby ցանցում շատ օգտակար է իրենց հրապարակմանը նախորդող սեմերին։

Դասի ընթացքում դուք կստեղծեք Rinkeby փորձնական ցանցի հանգույց, կհանգստացնեք դրա միջոցները և կհրապարակեք սմարթ պայմանը։

Դաս 10 վիրված է Ethereum Swarm-ի բաշխված տվյալների պահոցներին։ Բաշխված պահոցների օգտագործմամբ դուք խնայելու եք մեծ ծավալների տվյալները Ethereum բլոկչեյնում պահելու համար։

Այս դասի ընթացքում դուք կստեղծեք տեղական Swarm պահոց, կկատարեք ֆայլերի գրառման և ընթերցման գործողություններ, ինչպես նաև ֆայլերի կատալոգներ։ Որսի ընթացքում դուք կսովորեք աշխատել հանրային Swarm անցքներով, գրել սկրիպտներ Node.js-ից Swarm-ի հետ խոսելու համար, ինչպես նաև Perl Net::Ethereum::Swarm մոդուլի միջոցով։

Դասի 11 նպատակն է — սովորեք աշխատել Solidity սմարթ-կոնտրակտների հետ, օգտագործելով հանրահայտ Python ծրագրավորման լեզուն և Web3.py շրջանակը: Դուք կտեղադրեք այս շրջանակը, կգրեք սկրիպտեր սմարթ-կոնտրակտի կոմպիլացիայի և հրապարակման համար, ինչպես նաև նրա գործառույթների հրավիրուից: Այսպիսով, Web3.py կկիրառվի ինչպես ինքնուրույն, այնպես էլ ինտեգրված Truffle զարգացումային միջավայրի հետ միասին.

12-րդ դասում դուք կսովորեք, թե ինչպես փոխանցել տվյալները սմարթ-կոնտրակտներից իրական աշխարհին օրակուլների միջոցով: Սա օգտակար կլինի ձեզ համար՝ տվյալներ ստանալու համար ինտերնետային կայքերից, IoT սարքերից, տարբեր սարքերից և սենսորներից, ինչպես նաև սմարթ-կոնտրակտներից այս սարքերին տվյալներ փոխանցելու համար: Դասի պրակտիկ հատվածում դուք կստեղծեք օրակուլ և սմարթ-կոնտրակտ, որը կստանաք ընթացիկ փոխարժեքը USD-ի և ռուբլու միջև ՌԴ կենտրոնական բանկի կայքից.

Դաս 1. Շատ կարճ բլոքչեյնից և Ethereum ցանցիցԴասի նպատակը: ծանոթանալ Ethereum բլոքչեյնի աշխատանքի սկզբունքներին, նրա կիրառման ոլորտներին և հիմնական տերմինաբանությանը.
Պրակտիկ պարտականություններ: այս դասում նախատեսված չեն.

Այսօր հազիվ թե լինի այն ծրագրավորողը, որը չԷ լսել բլոքչեյն (Blockchain) տեխնոլոգիայի, կրիպտոկոմային (Cryptocurrency կամ Crypto Currency), բիթքոին (Bitcoin), սկզբնական մետաղադրամների թողարկման (ICO, Initial coin offering), սմարթ-կոնտրակտների (Smart Contract) և մյուս բլոքչեյնի հետ կապված հասկացությունների ու տերմինների մասին:

Բլոքչեյն տեխնոլոգիան նոր рынки բացում է և աշխատատեղեր ստեղծում ծրագրավորողների համար: Եթե դուք տիրապետեք կրիպտոարժույթների և սմարթ-կոնտրակտների տեխնոլոգիաների բոլոր նրբություններին, ապա դուք տեղի կունենաք խնդիրներից `այն իմացությունները կիրառելու հարցում:

Պետք է ասել, որ կրիպտոարժույթների և բլոքչեյնների շուրջ շատ մասնագիտություններ են առաջանում: Մենք հեռու կպահենք կրիպտոարժույթների փոխարժեքների փոփոխությունների, փուլերի ստեղծման, կրիպտոարժույթի օրենքների նրբությունների և այլն քննարկումները: Մեր ուսումնական ծրագրում մենք կենտրոնանալու ենք հիմնականում Ethereum բլոքչեյնի սմարթ-կոնտրակտների տեխնիկական կողմերի վրա (Ethereum, Ether) և միանգամային դիմումների (Distributed Application, DApp) մշակման:

Ինչ է բլոքչեյնը

Բլոքչեյնը (Blockchain, Block Chain) ներկայացնում է տվյալների բլոկների շղթա, որոնք կապվում են միմյանց հետ որոշակի ձևով: Շղթայի սկզբում գտնվում է առաջին բլոկը, որը կոչվում է սկզբնական բլոկ (genesis block) կամ ծագման բլոկ:

Այս բոլոր տվյալների բլոկները ավտոմատ կերպով կրկնվում են բլոքչեյն ցանցի բազմաթիվ узлах: Այսպիսով, ապահովվում է բլոքչեյնի տվյալների դեցենտրալիզացված պահպանում:
Դուք կարող եք պատկերացնել բլոկչեյն համակարգը որպես բազմաթիվ узлов (ֆիզիկական կամ վիրտուալ սերվերներ), որոնք միանալ են զանցեն և կրկնում են տվյալների բլոկների շղթայում իրականացված բոլոր փոփոխությունները։ Սա կարծես լուրջ բազմա սերվերային համակարգ է, որտեղ այդ համակարգի узлы (սերվերները) կարող են լինել աշխարհով մեկ։ Դուք նույնպես կարող եք ավելացնել ձեր համակարգչումը բլոկչեյն ցանցում։

Տարածված տվյալների բազա

Բլոկչեյն կարելի է պատկերացնել որպես տարածված տվյալների բազա, որը կրկնվում է բլոկչեյն ցանցի բոլոր узловերում։ Теоретически бլոկչեյն будет աշխատում այնքան ժամանակ, մինչև աշխատում է գոնե մեկ узел, который хранит все блоки бլոկչեյնի։

Տարածված գրանցման տվյալներ

Բլոկչեյն կարելի է պատկերավորել որպես այս տարածված գրանցումների տվյալներն ու գործողությունները (թրանդաքցիաները)։ Այլ անվանումն այդ գրանցման՝ գրեմուզը։

Տարածված գրանցման մեջ կարելի է ավելացնել տվյալներ, բայց անհնար է դրանք փոխել կամ հեռացնել։ Այս անհնարինությունը հասնում է մասնավորապես կրիպտոգրաֆիական ալգորիթմների կիրառման շնորհիվ, հատուկ բլոկների ավելացման ալգորիթմների և տվյալների դեցենտրալացված պահպանման միջոցով։

Բլոկներ ավելացնելիս և գործողություններ կատարելիս օգտագործվում են մասնավոր և հանրային բանալիներ։ Դրանք սահմանափակում են բլոկչեյն օգտվողներին, տրամադրելով նրանց միայն իրենց տվյալների բլոկների հասանելիություն։

Գործարքներ

Բլոկչեյն պահում է գործողությունների (թրանդաքցիաների) մասին տեղեկությունները բլոկներում։ При этом старые, уже выполненные транзакции невозможно откатить или изменить. Новые транзакции хранятся в новых, добавленных блоках.

Այսպիսով, բլոկչեյնում կարող է արձանագրվել անփոխված կերպով բոլոր թրանդաքցիաների պատմությունը։ Ուրեմն, բլոկչեյն կարող է օգտագործվել, օրինակ, բանկային операций ընթերցման համար, հեղինակային իրավունքի տվյալները, недвижимости սեփականությունների պատմությունները և այլն։

Ethereum բլոկչեյնում կան՝ կոչվում են համակարգի վիճակներ։ Թրանդաքցիաների կատարումով վիճակը փոփոխվում է սկզբնականից մինչև ընթացիկ։ Թրանդաքցիաներն արձանագրվում են բլոկներում։

Հանրային և մասնավոր բլոկչեյններ

Երկու դեպքում պետք է նշել, որ ասել է ճիշտ միայն կոչվող հանրային բլոկչեյն ցանցերի համար, որոնք չեն կարող վերահսկվել որևէ անհատական կամ իրավաբանական անձանց, պետական մարմինների կամ կառավարությունների կողմից։
Այսպես կոչված մասնավոր բլոկչեյն ցանցերը լիակատար վերահսկողության տակ են իրենց ստեղծողների կողմից, և այնտեղ հնարավոր է ամեն բան, օրինակ, բոլոր բլոկների ամբողջ շղթայի լրիվ փոխարինում։

Բլոկչեյնի գործնական կիրառություններ

Ինչի համար կարող է օգտակար լինել բլոկչեյնը?

Ապահովել միաժամանակյա գործարքների իրականացման հնարավորությունը այն մարդկանց կամ կազմակերպությունների միջև, որոնք չեն վստահում միմյանց, բլոկչեյն-ը թույլ է տալիս: Բլոկչեյնում գրանցված տվյալները (գործարքներ, անձնական տվյալներ, փաստաթղթեր, վկայագրեր, պայմանագրեր, բեռնաթափումներ և այլն) չեն կարելի կեղծել կամ փոխարինել գրանցելուց հետո: Այս պատճառով, բլոկչեյնի հիման վրա կարող են ստեղծվել, օրինակ, վստահելի բաշխված ռեեստրեր տարբեր տեսակի փաստաթղթերի համար.

Իհարկե, դուք գիտեք, որ բլոկչեյների հիման վրա ստեղծվում են կրիպտոարժույթային համակարգեր, որոնք նախատեսված են փոխարինելու սովորական թղթային գումարը: Թղթային գումարը նաև կոչվում է ֆիատային (Fiat Money-ից).
Բլոկչեյնը ապահովում է գործարքների պահպանակում և փոխարենությունները, որ գրանցվել են բլոկներում, ուստի այն կարող է օգտագործվել կրպտոարժույթային համակարգերի ստեղծման համար: Այն պարունակում է բոլոր պատմությունները կրիպտո-մ միջոցների փոխանցման տարբեր օգտվողների (հաշվեհամարների) միջև, բացի այդ, ցանկացած գործարք կարող է հետևվում լինել.

Այն դեպքում, երբ կրիպտոարժույթային համակարգերում գործողությունները կարող են լինել անանուն, կրիպտոարժույթի դուրսբերումը և դրա փոխանակումը ֆիատային գումարների դեպքում սովորաբար հանգեցնում է կրիպտոարժութային ակտիվի владельцаի անձի բացահայտման:

Այլ կերպ ասած, սմարթ-կոնտրակտները, որոնք ներկայացնում են ծրագրային ապահովում, աշխատում են Ethereum ցանցում, թույլ են տալիս ավտոմատացնել գործարքների կնքման գործընթացն ու նրանց կատարումն վերահսկելը: Սա հատկապես արդյունավետ է, եթե գործարքի վճարը կատարվում է Ether (էթեր) կրիպտոարժույթով.

Ethereum բլոկչեյնը և Ethereum սմարթ-կոնտրակտները, որոնք գրանցված են Solidity ծրագրավորման լեզվով, կարող են օգտագործվել, օրինակ, հետևյալ մարզերում.

  • ընտրության վավերացման գործընթացի այլընտրանք;
  • недвижիմості օբյեկտների գրանցման պահպանակում և տվյալների պահպանակում անասելի օբյեկտների մասին;
  • մտավոր սեփականության օբյեկտների (գիրքեր, պատկերներ, երաժշտական գործեր և այլն) հեղինակային իրավունքների տեղեկությունները պահպանակում;
  • չքնաղ քվեարկության համակարգերի ստեղծում;
  • ֆինանսների և բանկային գործունեության տարածքը;
  • միջազգային հսկողություն, բեռների շարժումն հետևելու համար;
  • անձնական տվյալների պահպանակում որպես անձնական անմիջականության համակարգ;
  • ապահով գործարքներ առևտրային ոլորտում;
  • Medicine հետազոտությունների արդյունքների պահպանակում, ինչպես նաև նշանակված ընթացակարգերի պատմություն.

Բլոկչեյնի հետ կապված խնդիրները.

Բայց, իհարկե, ամեն ինչ այնքան պարզ չէ, որքան կարող էր թվալ!

Կան խնդիրներ բլոկչեյնում տվյալների վավերացման (օրինակ, արդյո՞ք նրանք կեղծ են?), համակարգային և կիրառական ծրագրային ապահովման անվտանգության խնդիրներ, որոնք օգտագործվում են բլոկչեյնով աշխատելու համար, սոցիալական ինժեներիայի մեթոդների օգտագործման հնարավորության խնդիրներ՝ կրիպտոարժույթի դրամապանակներին մուտք ունենալու համար:

Երկար խոսելու դեպքում, եթե խոսքը վերաբերում է մասնավոր բլոկչեյնին, որի հանգույցներն աշխարհում մի քանի տեղերում են, այն պատկանում է անձի կամ կազմակերպության, ապա վստահության մակարդակը չի լինի ավելի բարձր, քան այդ անձի կամ organization's վստահության մակարդակը.

Հ perlu մենք պետք է հաշվի առնենք, որ բլոկչեյնում գրանցված տվյալները մատչելի են բոլորի համար: Այս իմաստով բլոկչեյնը (особенно публичный) չի համապատասխանում գաղտնի տեղեկատվություն պահելու համար: Սակայն բլոկչեյնում տեղեկատվությունը փոփոխելու անկարողությունը կարող է օգնել կանխելու կամ հետաքննելու տարբեր տեսակի խաբեություններ.

Ethereum-ի դեցենտրալիզացված կիրառումները կլինեն մատչելի, եթե դրանք վճարվեն կրիպտոարժույթով: Ինչքան շատ մարդիկ ունեն կրիպտոարժույթ կամ պատրաստ են գնել, այնքան ավելի մեծ են DApp-ների և Սմարթ-կանոնների ժողովրդականությունը.

Բլոկչեյնի ընդհանուր խնդիրներից մեկը, որն խանգարում է դրա գործնական կիրառմանը, սահմանափակ արագությամբ նոր բլոկների ավելացումը և հարաբերական բարձր գործարքներից ծախսեր: Բայց այս ոլորտում տեխնologien-ն ակտիվորեն զարգանում է և կա հույս, որ տեխնիկական խնդիրները ժամանակի ընթացքում կլուծվեն.

Այն ևս մեկ խնդիր է, որ Ethereum բլոկչեյնի սմարթ-կանոնները գործում են զրոյական վիրտուալ մեքենաների համակարգում և չեն կարող կապվել իրական աշխարհի տվյալների հետ: Հատկապես, սմարթ-կանոնի ծրագիրը չի կարող իրենք կարդալ տվյալներ կայքերից կամ ցանկացած ֆիզիկական սարքերից (զգարկաներ, կոնտակտներ և այլն) և չի կարող տվյալներ դուրս հանել որևէ արտաքին սարքի: Այս խնդիրը և դրա լուծումները կներկայացնենք դասարանում, որը վերաբերում է հայտնի օրակուլներին՝ սմարթ-կանոնների տեղեկատվական միջնորդներին.

Այս ոլորտում կան նաև օրենսդրական սահմանափակումներ: Որոշ երկրներում, օրինակ, արգելվում է օգտագործել կրիպտոարժույթ որպես վճարման միջոց, բայց հնարավոր է այն ունենալ որպես ինչ-որ թվային ակտիվ, նման թղթադրամների: Այդ ակտիվները կարելի է գնել և վաճառել բորսայում: Ինչ-որ դեպքում, երբ դուք ստեղծում եք նախագիծ, որը աշխատում է կրիպտոարժույթների հետ, անհրաժեշտ է ծանոթանալ այն երկրի օրենսդրությանը, որի իրավահավասսն անհանգստացնում է ձեր նախագիծը.

Ինչպե՞ս է ձևավորվում բլոկչեյնի շղթան

Ինչպես արդեն նշեցինք, բլոկչեյնն ինքն է պարզ տվյալների բլոկների շղթա: Նախ ձևավորվում է այդ շղթայի առաջին բլոկը, ապա երկրորդը ավելանում է և այլն: Առաջարկվում է, որ գործարքների տվյալները պահվում են բլոկներում և ավելացվում վերջին բլոկում.

Զրագրում 1.1 մենք ցույց ենք տվել բլոկների հերթական հաճախականությունը, որտեղ առաջին բլոկը հղում է դեպի հաջորդը.

Գիրք «Սոլիդիտինով սմարթ-կոնտրակտների ստեղծում Ethereum բլոկչեինի համար: Պրակտիկ ուղեցույց»
Զրագրում 1.1. Պարզ բլոկների հաջորդականություն

Այս տարբերակում, սակայն, շատ հեշտ է կեղծել ցանկացած բլոկի պարունակությունը, քանի որ բլոկները չեն պարունակում տեղեկատվություն փոփոխությունների պաշտպանելու համար: Հաշվի առնելով, որ բլոկչեյնը նախատեսված է մարդկանց և կազմակերպությունների համար, որոնց միջև վստահություն չկա, կարելի է եզրակացնել, որ այս տվյալների պահեստավորման միջոցը բլոկչեյնի համար անբավարար է:

Երկրորդենք բլոկների պաշտպանությունը կեղծ լինելուց: Առաջին փուլում մենք փորձելու ենք պաշտպանել յուրաքանչյուր բլոկի վերահսկողության գումարով (նկ. 1.2):

Գիրք «Սոլիդիտինով սմարթ-կոնտրակտների ստեղծում Ethereum բլոկչեինի համար: Պրակտիկ ուղեցույց»
Նկ. 1.2. Բլոկների տվյալների պաշտպանության հավելում վերահսկողության գումարով

Հիմա մեղավոր անձը չի կարող միայն այնպես փոխել բլոկը, քանի որ այնտեղ է գտնվում բլոկի տվյալների վերահսկողության գումարը: Վերահսկողության գումարի ստուգումը ցույց կտա, որ տվյալները փոփոխվել են:

Վերահսկողության գումարի հաշվարկելու համար կարելի է օգտագործել իրենցից մեկ հեշավորման ֆունկցիան, כגון MD-5, SHA-1, SHA-256 և այլն: Հեշ ֆունկցիաները որոշակի արժեք են հաշվում (օրինակ, մշտական երկարության տեքստային տող), որ ստացվում է տվյալների բլոկի նկատմամբ անվերադարձ գործողություններ կատարելու արդյունքում: Գործողություններն կախված են հեշ ֆունկցիայի տեսակից:

Ա même փոքր փոփոխությամբ բլոկի տվյալների պարունակության մեջ հեշ ֆունկցիայի արժեքը նույնպես կփոխվի: Հեշ ֆունկցիայի արժեքը վերլուծելով հնարավոր չէ վերականգնել այն տվյալների բլոկը, որի համար այն հաշվարկվել է:

Թույլ կպա՞նի արդյոք այդ պաշտպանությունը: Ցավոք, չէ:

Այս սխեմայում վերահսկողության գումարը (հեշ ֆունկցիա) պաշտպանում է միայն առանձին բլոկներ, բայց ոչ ամբողջ բլոկների շղթան: Գ sachant հեշ ֆունկցիայի հաշվարկման ալգորիթմը, մեղավորը կարող է հեշտությամբ փոխել բլոկի պարունակությունը: Իսկ ոչինչ չի խանգարում նրան հեռացնել բլոկներ շղթայից կամ ավելացնել նորերը:

Ինչպես պաշտպանել ամբողջ շղթան ընդհանուր առմամբ, կարելի է յուրաքանչյուր բլոկի հետ տվյալների հետ պահել նաև նախորդ բլոկի հեշը (նկ. 1.3):

Գիրք «Սոլիդիտինով սմարթ-կոնտրակտների ստեղծում Ethereum բլոկչեինի համար: Պրակտիկ ուղեցույց»
Նկ. 1.3. Բլոկի տվյալներին ավելացնել նախորդ բլոկի հեշը

Այս սխեմայում որեւէ բլոկը փոփոխելու համար պետք է վերահաշվարկել բոլոր հաջորդ բլոկների հեշ ֆունկցիաները: Ժամանակն է ուրեմն, որ ի՞նչ խնդիր կա:

Օգտագործվող աստիճանային բլոկչեյններում լրացուցիչ արհեստական դժվարություններ են ստեղծված նոր բլոկների ավելացման համար՝ օգտագործվում են ալգորիթմներ, որոնք պահանջում են շատ հաշվարկային ռեսուրսներ: Հաշվի առնելով, որ բլոկում փոփոխություններ կատարելու համար պետք է վերահաշվարկել ոչ միայն այդ մի բլոկը, այլ նաև ամբողջ հաջորդները, դա չափազանց դժվար կլինի:

Հիշենք, որ բլոկչեյնի տվյալները պահվում (դուբլացվում) են ցանցի բազմաթիվ узлыներում, այսինքն, օգտագործվում է դեցենտրալիզացված պահեստավորում: Եվ դա բազմապատկում է բլոկի կեղծիքը, քանի որ փոփոխություններ պետք է կատարվեն բոլոր ցանցի узлыներում:

Քանի որ բլոկները պահում են նախորդ բլոկի տեղեկատվությունը, ապա կարելի է ստուգել կարգի բոլոր բլոկների պարունակությունը:

Ethereum բլոկչեյն

Ethereum բլոկչեյնը մի հարթակ է, որի վրա հնարավոր է ստեղծել օրվա բաշխված դիմումների DApp: Բազմաթիվ այլ հարթակներից տարբերություն է, որ Ethereum-ը թույլ է տալիս օգտագործել բացիկները՝ սմարտ-կոնtractներ (smart contracts), որոնք գրված են Solidity ծրագրավորման լեզվով:

Այս հարթակը ստեղծվել է 2013 թվականին Վիթալիք Բուտերինի կողմից, ով նաև Bitcoin Magazine ամսագրի հիմնադիրն է, և գործարկվել է 2015 թվականին: Այն ամենը, ինչ մենք կսովորենք կամ անենք մեր դասընթացում, կապված է հենց Ethereum բլոկչեյնի և Solidity սմարտ-կոնtractների հետ:

Մայինգ կամ ինչպես ստեղծվում են բլոկները

Մայինգը (mining) բավականին բարդ և ռեսուրսահոգ գործընթաց է, որը վերաբերում է նոր բլոկների ավելացմանը բլոկչեյնի աչքում, այլ ոչ թե «կրիպտոարժույթների հանքացվածքում»: Մայինգը ապահովում է բլոկչեյնի գործունեությունը, քանի որ հենց այս գործընթացը պատասխանատու է Ethereum բլոկչեյնում մատյանվող փաստաթղթերի ավելացման համար:

Մարդկանց և կազմակերպությունները, որոնք զբաղվում են բլոկների ավելացմամբ, կոչվում են մայներներ (miner):
Մայներների հանգույցներում աշխատող ծրագրային ապահովումը (ПО) փորձում է գտնել վերջին բլոկի անհատականացման պարամետր՝ Nonce, որպեսզի ձեռք բերվի մեծ հեշ գործառույթի այնպիսի արժեք, որը կսահմանվի ցանցի կողմից: Ethereum-ում օգտագործվող Ethash հեշացման ալգորիթմը թույլ է տալիս ստանալ Nonce-ի արժեքը միայն հաջորդաբար փնտրելով:

Եթե մայներային հանգույցը գտել է ճիշտ Nonce արժեք, ապա դա հանդիսանում է sogenannten աշխատանքի ապացույց (PoW, Proof-of-work): Այս դեպքում, եթե բլոկը ավելացվի Ethereum ցանցում, մայները ստանում է որոշակի պարգևատրում ցանցի արժույթով՝ Ether: Մեր գրքի պատրաստման պահին պարգևատրման չափը 5 Ether է, սակայն ժամանակի ընթացքում այն կրճատվի:

Այսպիսով, Ethereum-ի մայներները ապահովում են ցանցի գործունեությունը, ավելացնելով բլոկներ, և դրա դիմաց ստանում են կրիպտոարժույթ: Ինտերնետում դուք կգտնեք բազմաթիվ տեղեկություններ մայների և մայնինգի մասին, սակայն մենք կենտրոնանալու ենք Solidity կոնtractների ստեղծման և Ethereum ցանցում DApp-ների մշակման վրա:

Դասի արդյունքներ

Ա Headfirst դասարանում դուք ծանոթացել եք բլոկչեյնին և իմացել, որ դա հատուկ ձևով կազմված բլոկների հաջորդականություն է: Հին գրանցված բլոկների բովանդակությունը փոփոխել չեք կարող, քանի որ դրա համար հարկավոր է վերաբացել բոլոր հաջորդ բլոկները շատ հանգույցներում, ինչը գրեթե անհնար է միկրոսակայնի և ժամանակի վրա պահանջում է շատ ռեսուրս:

Բլոկչեյնը կարող է կիրառվել գործարքներից արդյունքների պահելու համար: Նրա գլխավոր նպատակն է ապահովել անվտանգ գործարքների իրականացում մասնակիցների՝ մարդկանց և կազմակերպությունների միջև, ովքեր չեն վստահում միմյանց: Դուք գիտեք, որ կոնկրետ ոլորտներում բիզնեսում և բազմաթիվ ոլորտներում կարող է օգտագործվել Ethereum բլոկչեյնը և Solidity-ի սմարտ-կոնtractները: Այդ թվում են բանկային ոլորտը, սեփականության իրավունքների, փաստաթղթերի և այլն գրանցումը:

Դուք նաև տեղեկացել եք, որ բլոկչեյն օգտագործելու ժամանակ կարող են առաջանալ տարբեր խնդիրներ: Այս խնդիրներն են տեղեկատվության վավերացման հետ կապված, բլոկչեյնի արագությունը, գործարքների արժեքը, տվյալների փոխանակման խնդիրները սմարտ պայմանագրերի և իրական աշխարհի միջև, ինչպես նաև հնարավոր հարձակումները, որոնք ուղղված են օգտվողների հաշիվներից կրիպտոարժույթի գողությանը:

Մենք նաև կարճ պատմեցինք մայնինգի մասին, ինչպես նոր բլոքների բլոկչեյն ավելացման պրոցես: Մայնինգը անհրաժեշտ է գործարքների իրականացման համար: Մայնինգով զբաղվողները ապահովում են բլոկչեյնի աշխատանքը և դրա համար ստանում են պարգևատրում կրիպտոարժաթով:

Դաս 2. Աշխատանքային միջավայրի պատրաստում Ubuntu և Debian ОС-ումԳործող համակարգի ընտրություն
Զարգացնելու անհրաժեշտ_UTILITAS
Ubuntu-ում Geth և Swarm տեղադրում
Debian-ում Geth և Swarm տեղադրում
Ապահովագրական նախապատրաստում
Go ամենավերջին տարբերակի բաշխման ներբեռնում
Վերահսկող միջավայրի փոփոխականների սահմանում
Go տարբերակի ստուգում
Geth և Swarm տեղադրում
Սովորեցնենք սեփական բլոկչեյն ստեղծել
Готовим файл genesis.json
Ստեղծում ենք աշխատանքային կատալոգ
Ստեղծում ենք հաշիվ
Բացահայտում ենք узը
Ուղարկման պարամետրերը узի
Միանում ենք մեր узին
Մայնինգի կառավարում և հաշվի հավասարության ստուգում
Geth կոնսոլի աշխատանքը ավարտելուց հետո
Դասի արդյունքներ

Դաս 3. Աշխատանքային միջավայրի պատրաստում Raspberry Pi 3-ումRaspberry Pi 3-ի պատրաստում աշխատանքային
Rasberian տեղադրում
Թարմացումների տեղադրում
SSH մուտքի ակտիվացում
Ստատիկ IP հասցեի տեղադրում
Զարգացնելու անհրաժեշտ_UTILITAS
Go տեղադրում
Go ամենավերջին տարբերակի բաշխման ներբեռնում
Վերահսկող միջավայրի փոփոխականների սահմանում
Go տարբերակի ստուգում
Geth և Swarm տեղադրում
Սովորեցնենք սեփական բլոկչեյն ստեղծել
Հաշիվն ու հավասարությունը ստուգել
Դասի արդյունքներ

Դաս 4. Հաշվեհամարներ և միջոցներ հաշվեհամարների միջև փոխանցումներՀաշվեհամարների դիտարկում և ավելացում
Հաշվեհամարների ցանկի դիտարկում
Հաշվեհամար ավելացում
geth account հրամանների պարամետրերը
Հաշվի գաղտնաբառեր
Կրիպտոարժույթ Ethereum-ում
Ethereum դրամական միավորներ
Ստուգում ենք մեր հաշվեհամարների գործող հավասարությունը
Փոխանցում միջոցների մեկ հաշիվից մյուսը
eth.sendTransaction մեթոդը
Գործարքի վիճակի դիտարկում
Գործարքային վկայական
Դասի արդյունքներ

Դաս 5. Մեր առաջին պայմանագրի հրապարակումըՍմարթ պայման Contracts Ethereum-ում
Սմարթ պայմանագրի իրականագործում
Ethereum-ի վիրտուալ մեքենա
Remix Solidity IDE ինտեգրված մշակման միջավայր
Հրապարակման սկիզբ
Պայմանագրի ֆունկցիաների կանչում
Պայմանագրի հրապարակում մասնավոր ցանցում
ABI և պայմանագրի երկնային կոդի դիմումը
Պայմանագրի հրապարակում
Պայմանագրի հրապարակման գործարքի վիճակի ստուգումը
Պայմանագրի ֆունկցիաների կանչում
solc խմբակային կոմպայլեր
Ubuntu-ում solc տեղադրում
Debian-ում solc տեղադրում
HelloSol պայմանագրի կոմպայլում
Պայմանագրի հրապարակում
Rasberian-ում solc տեղադրում
Դասի արդյունքներ

Урок 6. Смарт-контракты и Node.jsУстановка Node.js
Ubuntu-ում տեղադրում
Debian-ում տեղադրում
Ganache-cli տեղադրում և գործարկում
Web3 տեղադրում
solc տեղադրում
Rasberian-ում Node.js տեղադրում
Հաշվեհամարների ցուցակի ստանալու սցենար կոնսոլի մեջ
Սցենար սմարթ պայմանագրի հրապարակման համար
Սկսում ենք և ստանում պարամետրերը
Սկսման պարամետրերի ստացում
Պայմանագրի կոմպայլում
Հաշվի ապակողպում
ABI և պայմանագրի երկնային կոդի ներբեռնում
Պահանջվող գազի գնահատում
Օբյեկտ ստեղծում և պայմանագրի հրապարակման սկիզբ
Կոնտրակտի հրապարակման սկրիպտի մեկնարկ
Խելացի կոնտրակտի ֆունկցիաների կանչ
Հնարավո՞ր է արդյոք թարմացնել հրապարակված խելացի կոնտրակտը
Աշխատանք Web3 տարբերակ 1.0.x-ից
Գրանցումների ցուցակի ստացում
Պայմանագրի հրապարակում
Պայմանագրի ֆունկցիաների կանչում
Փոխանցում միջոցների մեկ հաշիվից մյուսը
Համարներ գանձել կոնտրակտի հաշվին
Թարմացնում ենք HelloSol խելացի կոնտրակտը
Հաշվի բալանսը դիտելու սկրիպտի ստեղծում
Добавляем вызов функции getBalance в скрипт call_contract_get_promise.js
Խելացի կոնտրակտի հաշիվը համալրել
Դասի արդյունքներ

Դաս 7. Truffle-ին ծանոթացումTruffle-ի տեղադրում
Ստեղծում ենք HelloSol նախագծը
Վիճակի և ֆայլերի ստեղծում նախագծի համար
Կոնտրակտների կատալող
Միգրացիաների կատալող
Թեստերի կատալող
Файл truffle-config.js
HelloSol պայմանագրի կոմպայլում
Կոնտրակտի հրապարակման մեկնարկ
HelloSol կոնտրակտի ֆունկցիաների կանչ Truffle հրավերով
Вызов функций контракта HelloSol из скрипта JavaScript под управлением Node.js
truffle-contract մոդուլի տեղադրում
getValue և getString կոնտրակտի ֆունկցիաների կանչ
setValue և setString կոնտրակտի ֆունկցիաների կանչ
Կոնտրակտի փոփոխություն և նորից հրապարակում
Աշխատանք Web3 տարբերակ 1.0.x-ից
Փոփոխություններ կատարում ենք HelloSol խելացի կոնտրակտում
Կոնտրակտի մեթոդների կանչի սկրիպտեր
Թեստավորում Truffle-ում
Solidity թեստ
JavaScript թեստ
Դասի արդյունքներ

Դաս 8. Solidity տվյալների տեսակըՏվյալների տեսակները ուսումնասիրելու համար կոնտրակտ
Լոգիկական տվյալների տեսակներ
Անվիճակ թվեր և ստորոգված թվեր
Պատրաստի կետերով թվեր
Հասցե
Նրբագոգի տեսակի փոփոխականներ
Պահած չափի թվարկուներ
Դինամիկ թվարկուներ
Հերներ
Ֆորմաներ
Միավորներ mapping
Դասի արդյունքներ

Դաս 9. Կոնտրակտների միգրացիա մասնավոր ցանցում և Rinkeby ցանցումTruffle-ի միջոցով կոնտրակտի հրապարակում մասնավոր Geth ցանցում
Մասնավոր ցանցի հանգույցի պատրաստում
Կոնտրակտի պատրաստման աղյուսակ
Կոնտրակտի կոմպիլացիա և միգրացիա Truffle ցանցում
Geth տեղական ցանցում միգրացիայի մեկնարկ
Truffle-ի արհեստները գաղտնի կերպով
Truffle-ի միջոցով կոնտրակտի հրապարակում Rinkeby փորձարկման ցանցում
Rinkeby-ի հետ աշխատելու համար Geth հանգույցի պատրաստում
Հանգուցայինի համաժամեցում
Հաշիվների ավելացում
Rinkeby-ի հաշիվը эфիրով համալրել
Կոնտրակտի միգրացիայի մեկնարկ Rinkeby ցանցում
Rinkeby ցանցում կոնտրակտի մասին տեղեկությունները դիտել
Rinkeby ցանցի Truffle-ի կոնսոլ
Կոնտրակտի ֆունկցիաների կանչելու ավելի պարզ միջոց
Вызов методов контракта при помощи Node.js
Rinkby-ի համար Truffle-ի կոնսոլում հաշիվների միջեւ միջոցներ փոխանցել
Դասի արդյունքներ

Դաս 10. Ethereum Swarm-ի զետեղված տվյալների սպասարկումԻնչպես աշխատում է Ethereum Swarm-ը
Swarm-ի տեղադրում և մեկնարկ
Ֆայլերի և կատալոգների հետ գործադրվող գործողություններ
Ֆայլի կենդանի Grace-heyl-է Ethereum Swarm-ում
Ֆայլի կարդալ Ethereum Swarm-ից
Կարդալով բեռնելու ֆայլի մանիֆեստը
Կատալոգների բեռնում ենթակատալոգներով
Կարդալով բեռված կատալոգի ֆայլը
Պետական բարձավանդակ սովորական է Swarm-ից
Обращение к Swarm из скриптов Node.js
Perl Net::Ethereum::Swarm մոդուլ
Net::Ethereum::Swarm մոդուլի տեղադրում
Տվյալների գրառում և կարդալու միջոցներ
Դասի արդյունքներ

Դաս 11. Web3.py շրջանակը Ethereum-ում Python-ովWeb3.py տեղադրում
Պետքավոր փաթեթների թարմացում և տեղադրում
easysolc մոդուլի տեղադրում
Web3.py միջոցով կոնտրակտի հրապարակում
Պայմանագրի կոմպայլում
Մատակարարին միացում
Կոնտրակտի հրապարակումը կատարելու միջոցով
Կոնտրակտի հասցեն և abi ֆայլում պահպանել
Կոնտրակտի հրապարակման սկրիպտի մեկնարկ
Կոնտրակտի մեթոդների կանչ
JSON ֆայլից կոնտրակտի հասցեն և abi կարդալ
Մատակարարին միացում
Կոնտրակտի օբյեկտ ստեղծում
Կոնտրակտի մեթոդների կանչ
Truffle և Web3.py
Դասի արդյունքներ

Դաս 12. ՕրակուլներԿարգավորել կարող է խելացի կոնտրակտը վստահել արտաքին աշխարհի տվյալներին
Օրակուլներ, որպես բլոկչեյնի տեղեկատվական միջնորդներ
Տվյալների աղբյուր
Կոդ՝ տվյալների ներկայացման համար աղբյուրից
Օրակուլ՝ փոխարժեքը բլոկչեյնում գրանցելու համար
USDRateOracle պայմանագիր
Փոխարժեքի թարմացում սմարթ-պայմանագրում
Web Socket մատակարարի օգտագործում
RateUpdate իրադարձության սպասում
RateUpdate իրադարձության մշակումը
Տվյալների թարմացման սկսում սմարթ-պայմանագրում
Դասի արդյունքներ

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster