Գիրքը «Ստեղծելով Solidity Smart Contracts for the Ethereum Blockchain. Գործնական ուղեցույց»

Գիրքը «Ստեղծելով Solidity Smart Contracts for the Ethereum Blockchain. Գործնական ուղեցույց»
Ավելի քան մեկ տարի ես աշխատում եմ «Կառուցելով Solidity Smart Contracts for the Ethereum Blockchain» գրքի վրա: Գործնական ուղեցույց», և այժմ այս աշխատանքն ավարտված է, և գիրքը հրատարակված և հասանելի լիտրերով.

Հուսով եմ, որ իմ գիրքը կօգնի ձեզ արագ սկսել Solidity խելացի կոնտակտների ստեղծման և Ethereum բլոկչեյնի համար բաշխված DApps-ներ: Այն բաղկացած է 12 դասից՝ գործնական առաջադրանքներով։ Դրանք լրացնելուց հետո ընթերցողը կկարողանա ստեղծել իր սեփական տեղական Ethereum հանգույցները, հրապարակել խելացի պայմանագրեր և զանգահարել դրանց մեթոդները, փոխանակել տվյալներ իրական աշխարհի և խելացի պայմանագրերի միջև՝ օգտագործելով oracles, և աշխատել Rinkeby թեստային կարգաբերման ցանցի հետ:

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

Ստորև դուք կգտնեք բովանդակության աղյուսակը և գրքի առաջին գլուխը (նաև Լիտրեզ գրքի հատվածները հասանելի են): Հուսով եմ, որ կստանամ արձագանքներ, դիտողություններ և առաջարկություններ: Այս ամենը կփորձեմ հաշվի առնել գրքի հաջորդ հրատարակությունը պատրաստելիս։

Պահեստավորված նյութերՆերածությունՄեր գիրքը նախատեսված է նրանց համար, ովքեր ցանկանում են ոչ միայն հասկանալ Ethereum բլոկչեյնի սկզբունքները, այլ նաև ձեռք բերել գործնական հմտություններ այս ցանցի համար Solidity ծրագրավորման լեզվով բաշխված DApp-ներ ստեղծելու գործում:

Ավելի լավ է ոչ միայն կարդալ այս գիրքը, այլ աշխատել դրա հետ՝ կատարելով դասերում նկարագրված գործնական առաջադրանքները։ Աշխատելու համար ձեզ հարկավոր կլինի տեղական համակարգիչ, վիրտուալ կամ ամպային սերվեր, որտեղ տեղադրված է Debian կամ Ubuntu: Դուք կարող եք նաև օգտագործել Raspberry Pi-ը բազմաթիվ առաջադրանքներ կատարելու համար:

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

Նպատակ երկրորդ դաս - ստեղծել մասնավոր Ethereum բլոկչեյն հանգույց հետագա աշխատանքի համար այս դասընթացի շրջանակներում Ubuntu և Debian սերվերի վրա: Մենք կդիտարկենք հիմնական կոմունալ ծառայությունների տեղադրման առանձնահատկությունները, ինչպիսին է geth-ը, որն ապահովում է մեր բլոկչեյն հանգույցի աշխատանքը, ինչպես նաև երամի ապակենտրոնացված տվյալների պահպանման դեյմոնը:

Երրորդ դաս սովորեցնում է ձեզ, թե ինչպես փորձարկել Ethereum-ը ոչ թանկ Raspberry Pi միկրոհամակարգչի վրա: Դուք կտեղադրեք Rasberian օպերացիոն համակարգը (OS) Raspberry Pi-ի վրա, Geth կոմունալ ծրագիրը, որը սնուցում է բլոկչեյն հանգույցը և Swarm ապակենտրոնացված տվյալների պահեստի դեյմոնը:

չորրորդ դաս նվիրված է Ethereum ցանցի հաշիվներին և կրիպտոարժույթի միավորներին, ինչպես նաև Գեթի կոնսոլից մի հաշվից մյուսին գումար փոխանցելու եղանակներին: Դուք կսովորեք, թե ինչպես ստեղծել հաշիվներ, նախաձեռնել դրամական փոխանցումների գործարքներ, ստանալ գործարքի կարգավիճակ և անդորրագիր:

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

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

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

Դուք Node.js-ը կտեղադրեք Ubuntu-ում, Debian-ում և Rasberian OS-ում, կգրեք սկրիպտներ՝ Ethereum տեղական ցանցում խելացի պայմանագիր հրապարակելու և դրա գործառույթները կանչելու համար:

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

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

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

Իններորդ դասին դուք մեկ քայլ ավելի մոտ կլինեք հիմնական Ethereum ցանցի համար խելացի պայմանագրեր ստեղծելուն: Դուք կսովորեք, թե ինչպես կարելի է հրապարակել պայմանագրերը Truffle-ի միջոցով Geth մասնավոր ցանցում, ինչպես նաև Rinkeby թեստային ցանցում: Rinkeby ցանցում խելացի պայմանագրի վրիպազերծումը շատ օգտակար է նախքան այն հիմնական ցանցում հրապարակելը. այնտեղ գրեթե ամեն ինչ իրական է, բայց անվճար:

Որպես դասի մի մաս, դուք կստեղծեք Rinkeby թեստային ցանց, այն կլրացնեք միջոցներով և կհրապարակեք խելացի պայմանագիր:

Դաս 10 նվիրված Ethereum Swarm-ի բաշխված տվյալների պահեստներին: Օգտագործելով բաշխված պահեստը, դուք խնայում եք Ethereum բլոկչեյնում մեծ քանակությամբ տվյալների պահպանման վրա:

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

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

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

Դաս 1. Համառոտ բլոկչեյնի և Ethereum ցանցի մասինԴասի նպատակը. ծանոթանալ Ethereum բլոկչեյնի սկզբունքներին, դրա կիրառման ոլորտներին և հիմնական տերմինաբանությանը։
Գործնական առաջադրանքներ. ներառված չէ այս դասում:

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

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

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

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

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

Տվյալների այս բոլոր բլոկները ավտոմատ կերպով կրկնօրինակվում են բլոկչեյն ցանցի բազմաթիվ հանգույցների վրա: Սա ապահովում է բլոկչեյնի տվյալների ապակենտրոնացված պահպանում:
Դուք կարող եք պատկերացնել բլոկչեյն համակարգի մասին որպես մեծ թվով հանգույցներ (ֆիզիկական կամ վիրտուալ սերվերներ), որոնք միացված են ցանցին և կրկնում են տվյալների բլոկի շղթայի բոլոր փոփոխությունները: Այն նման է հսկա բազմասերվեր համակարգչի, և այդպիսի համակարգչի (սերվերների) հանգույցները կարող են ցրվել աշխարհով մեկ։ Եվ դուք նույնպես կարող եք ավելացնել ձեր համակարգիչը բլոկչեյն ցանցին:

Բաշխված տվյալների բազա

Բլոկչեյնը կարելի է դիտարկել որպես բաշխված տվյալների բազա, որը կրկնօրինակվում է բլոկչեյն ցանցի բոլոր հանգույցներին: Տեսականորեն, բլոկչեյնը կգործի այնքան ժամանակ, քանի դեռ աշխատում է առնվազն մեկ հանգույց՝ պահպանելով բլոկչեյնի բոլոր բլոկները:

Բաշխված տվյալների ռեեստր

Բլոկչեյնը կարելի է դիտարկել որպես տվյալների և գործառնությունների (գործարքների) բաշխված մատյան: Նման գրանցամատյանի մեկ այլ անուն մատյան է:

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

Բլոկներ ավելացնելիս և գործողություններ (գործարքներ) կատարելիս օգտագործվում են մասնավոր և հանրային բանալիներ: Նրանք սահմանափակում են բլոկչեյն օգտագործողներին՝ թույլ տալով նրանց մուտք գործել միայն իրենց սեփական տվյալների բլոկները:

Գործարքի

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

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

Ethereum բլոկչեյնը պարունակում է այսպես կոչված համակարգի վիճակներ: Գործարքների առաջընթացի ընթացքում վիճակը սկզբնականից փոխվում է ընթացիկ: Գործարքները գրանցվում են բլոկներով:

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

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

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

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

Մի խոսքով, բլոկչեյնը թույլ է տալիս ապահով կերպով իրականացնել գործարքներ (գործարքներ) միմյանց չվստահող անձանց կամ ընկերությունների միջև։ Բլոկչեյնում գրանցված տվյալները (գործարքներ, անձնական տվյալներ, փաստաթղթեր, վկայագրեր, պայմանագրեր, հաշիվ-ապրանքագրեր և այլն) չեն կարող կեղծվել կամ փոխարինվել գրանցումից հետո։ Հետևաբար, բլոկչեյնի հիման վրա հնարավոր է ստեղծել, օրինակ, տարբեր տեսակի փաստաթղթերի վստահելի բաշխված ռեգիստրներ։

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

Չնայած կրիպտոարժույթային համակարգերում գործարքները կարող են անանուն լինել, կրիպտոարժույթը հանելը և այն փոխանակելը ֆիատ փողի հետ սովորաբար բացահայտում է կրիպտոարժույթի ակտիվի սեփականատիրոջ ինքնությունը:

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

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

  • փաստաթղթերի նոտարական վավերացման այլընտրանք.
  • անշարժ գույքի օբյեկտների գրանցամատյանի վարում և տեղեկատվություն անշարժ գույքի օբյեկտների հետ գործարքների վերաբերյալ.
  • մտավոր սեփականության համար հեղինակային իրավունքի մասին տեղեկատվության պահպանում (գրքեր, պատկերներ, երաժշտական ​​ստեղծագործություններ և այլն);
  • անկախ քվեարկության համակարգերի ստեղծում;
  • ֆինանսներ և բանկային գործեր;
  • լոգիստիկա միջազգային մասշտաբով, հետևելով ապրանքների շարժին.
  • անձնական տվյալների պահպանում՝ որպես ինքնության քարտի համակարգի անալոգային;
  • անվտանգ գործարքներ առևտրային տարածքում;
  • բժշկական զննումների արդյունքների, ինչպես նաև սահմանված ընթացակարգերի պատմության պահպանում

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

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

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

Կրկին, եթե մենք խոսում ենք ոչ թե հանրային բլոկչեյնի մասին, որի հանգույցները ցրված են աշխարհով մեկ, այլ մասնավոր բլոկչեյնի մասին, որը պատկանում է անձին կամ կազմակերպությանը, ապա վստահության մակարդակն այստեղ ավելի բարձր չի լինի, քան վստահության մակարդակը այս անձի նկատմամբ։ կամ կազմակերպություն։

Պետք է հաշվի առնել նաև, որ բլոկչեյնում գրանցված տվյալները հասանելի են դառնում բոլորին։ Այս առումով բլոկչեյնը (հատկապես հանրային) հարմար չէ գաղտնի տեղեկատվության պահպանման համար։ Այնուամենայնիվ, այն փաստը, որ բլոկչեյնի մասին տեղեկատվությունը չի կարող փոխվել, կարող է օգնել կանխել կամ հետաքննել տարբեր տեսակի խարդախ գործողությունները:

Ethereum ապակենտրոնացված հավելվածները հարմար կլինեն, եթե դրանց օգտագործման համար վճարեք կրիպտոարժույթով։ Որքան շատ մարդիկ ունենան կամ պատրաստ լինեն գնել կրիպտոարժույթներ, այնքան ավելի հայտնի կդառնան DApp-ներն ու խելացի պայմանագրերը:

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

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

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

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

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

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

Գիրքը «Ստեղծելով Solidity Smart Contracts for the Ethereum Blockchain. Գործնական ուղեցույց»
Բրինձ. 1.1. Պարզ բլոկների հաջորդականություն

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

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

Գիրքը «Ստեղծելով Solidity Smart Contracts for the Ethereum Blockchain. Գործնական ուղեցույց»
Բրինձ. 1.2. Բլոկի տվյալների համար ստուգիչ գումարի պաշտպանություն ավելացնելը

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

Չեկային գումարը հաշվարկելու համար կարող եք օգտագործել հեշ գործառույթներից մեկը, ինչպիսիք են MD-5, SHA-1, SHA-256 և այլն: Հեշ ֆունկցիաները հաշվարկում են որոշակի արժեք (օրինակ՝ հաստատուն երկարությամբ տեքստային տողի տեսքով) տվյալների բլոկի վրա անշրջելի գործողություններ կատարելու արդյունքում։ Գործողությունները կախված են հեշ ֆունկցիայի տեսակից:

Նույնիսկ եթե տվյալների բլոկի բովանդակությունը փոքր-ինչ փոխվի, հեշի արժեքը նույնպես կփոխվի: Վերլուծելով հեշ ֆունկցիայի արժեքը՝ անհնար է վերականգնել տվյալների բլոկը, որի համար այն հաշվարկվել է:

Արդյո՞ք նման պաշտպանությունը բավարար կլինի: Ցավոք, ոչ.

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

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

Գիրքը «Ստեղծելով Solidity Smart Contracts for the Ethereum Blockchain. Գործնական ուղեցույց»
Բրինձ. 1.3. Տվյալների բլոկին ավելացրեք նախորդ բլոկի հեշը

Այս սխեմայում ցանկացած բլոկ փոխելու համար անհրաժեշտ է վերահաշվարկել բոլոր հետագա բլոկների հեշ ֆունկցիաները: Թվում է՝ ո՞րն է խնդիրը։

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

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

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

Blockchain Ethereum

Ethereum բլոկչեյնը հարթակ է, որի վրա կարող եք կառուցել բաշխված DApp-ներ: Ի տարբերություն այլ հարթակների, Ethereum-ը թույլ է տալիս օգտագործել այսպես կոչված խելացի պայմանագրեր (խելացի պայմանագրեր, խելացի պայմանագրեր), որոնք գրված են Solidity ծրագրավորման լեզվով։

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

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

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

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

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

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

Դասի ամփոփում

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

Բլոկչեյնը կարող է օգտագործվել գործարքների արդյունքները պահելու համար։ Դրա հիմնական նպատակն է կազմակերպել կողմերի (անձանց և կազմակերպությունների) միջև գործարքների անվտանգ կատարումը, որոնց միջև վստահություն չկա: Դուք սովորել եք, թե բիզնեսի կոնկրետ որ ոլորտներում և որ ոլորտներում կարող եք օգտագործել Ethereum բլոկչեյնի և Solidity խելացի պայմանագրերը: Սա բանկային ոլորտն է, սեփականության իրավունքի գրանցումը, փաստաթղթերը և այլն։

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

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

Դաս 2. Desktop միջավայրի պատրաստում Ubuntu-ում և Debian-ումՕպերացիոն համակարգի ընտրություն
Անհրաժեշտ կոմունալ հարմարությունների տեղադրում
Geth և Swarm-ի տեղադրում Ubuntu-ում
Geth-ի և Swarm-ի տեղադրում Debian-ում
Նախնական նախապատրաստում
Go բաշխման ներբեռնում
Շրջակա միջավայրի փոփոխականների կարգավորում
Ստուգվում է Go տարբերակը
Geth-ի և Swarm-ի տեղադրում
Մենք ստեղծում ենք մասնավոր բլոկչեյն
Genesis.json ֆայլի պատրաստում
Ստեղծեք աշխատանքային գրացուցակ
Ստեղծել հաշիվ
Գործարկել հանգույցի սկզբնավորումը
Հանգույցի գործարկման ընտրանքներ
Միացում մեր կայքին
Հանքարդյունաբերության կառավարում և մնացորդի ստուգում
Geth վահանակի անջատում
Դասի ամփոփում

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

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

Դաս 5Խելացի պայմանագրեր Ethereum-ում
Խելացի պայմանագրի կատարում
Ethereum վիրտուալ մեքենա
Ինտեգրված զարգացման միջավայր Remix Solidity IDE
Կազմման սկիզբ
Զանգահարելու պայմանագրային գործառույթներ
Պայմանագրի հրապարակում մասնավոր ցանցում
Ստացեք ABI սահմանումը և պայմանագրային երկուական տարբերակը
Պայմանագրի հրապարակում
Պայմանագրի հրապարակման գործարքի կարգավիճակի ստուգում
Զանգահարելու պայմանագրային գործառույթներ
solc խմբաքանակի կազմող
Solc-ի տեղադրում Ubuntu-ում
solc-ի տեղադրում Debian-ում
HelloSol պայմանագրի կազմում
Պայմանագրի հրապարակում
solc-ի տեղադրում Rasberian-ի վրա
Դասի ամփոփում

Դաս 6. Խելացի պայմանագրեր և Node.jsNode.js-ի տեղադրում
Տեղադրում Ubuntu-ում
Տեղադրում Debian-ում
Ganache-cli-ի տեղադրում և գործարկում
Web3-ի տեղադրում
Solc տեղադրում
Node.js-ի տեղադրում Rasberian-ում
Սկրիպտ՝ վահանակում հաշիվների ցուցակ ստանալու համար
Սցենար՝ խելացի պայմանագիր հրապարակելու համար
Վազում և պարամետրեր ստանալը
Գործարկման տարբերակների ստացում
Պայմանագրի կազմում
Հաշվի ապակողպում
Ներբեռնեք ABI և պայմանագրային երկուական կոդը
Գազի պահանջվող քանակի գնահատում
Ստեղծեք օբյեկտ և սկսեք հրապարակել պայմանագիր
Պայմանագրի հրատարակման սցենարի վարում
Զանգահարել խելացի պայմանագրային գործառույթները
Հնարավո՞ր է թարմացնել հրապարակված խելացի պայմանագիրը
Աշխատում է Web3 տարբերակի 1.0.x-ի հետ
Ստացեք հաշիվների ցուցակ
Պայմանագրի հրապարակում
Զանգահարելու պայմանագրային գործառույթներ
Գումարների փոխանցում մի հաշվից մյուսը
Դրամական միջոցների փոխանցում պայմանագրային հաշվին
HelloSol խելացի պայմանագրի թարմացում
Ստեղծեք սցենար՝ հաշվի մնացորդը դիտելու համար
Ավելացնել getBalance ֆունկցիայի զանգ call_contract_get_promise.js սկրիպտին
Խելացի պայմանագրի հաշվի համալրում
Դասի ամփոփում

Դաս 7. Ներածություն տրյուֆելինTruffle-ի տեղադրում
Ստեղծեք HelloSol նախագիծ
Ծրագրի գրացուցակի և ֆայլերի ստեղծում
պայմանագրերի գրացուցակ
Գրացուցակի միգրացիաներ
թեստային գրացուցակ
truffle-config.js ֆայլ
HelloSol պայմանագրի կազմում
Սկսեք հրապարակել պայմանագիր
HelloSol-ի պայմանագրով զանգահարելը գործում է Truffle-ի հուշումով
Կանչել HelloSol պայմանագրային գործառույթները JavaScript սկրիպտից, որն աշխատում է Node.js-ում
Truffle-contract մոդուլի տեղադրում
Պայմանագրի գործառույթներն անվանել getValue և getString
Պայմանագրի գործառույթների կանչում setValue և setString
Պայմանագրի փոփոխություն և վերահրատարակում
Աշխատում է Web3 տարբերակի 1.0.x-ի հետ
Փոփոխություններ կատարել HelloSol խելացի պայմանագրում
Պայմանագրի մեթոդներ կանչելու սցենարներ
Փորձարկում տրյուֆելում
Պինդության թեստ
JavaScript թեստ
Դասի ամփոփում

Դաս 8Տվյալների տեսակների ուսուցման պայմանագիր
Բուլյան տվյալների տեսակները
Աննշան և ստորագրված ամբողջ թվեր
Հաստատուն կետերի համարներ
Հասցե
Բարդ տեսակների փոփոխականներ
Ֆիքսված զանգվածներ
Դինամիկ զանգվածներ
Թվարկում
Կառուցվածքներ
բառարաններ
Դասի ամփոփում

Դաս 9Պայմանագրի հրապարակում Truffle-ից դեպի Գեթ մասնավոր ցանց
Մասնավոր ցանցի հոսթի պատրաստում
Աշխատանքի համար պայմանագրի նախապատրաստում
Պայմանագրի կազմում և տեղափոխում Truffle ցանց
Գործում է Geth LAN միգրացիա
Ստանալով արտեֆակտներ Truffle
Պայմանագրի հրապարակում Truffle-ից մինչև Rinkeby թեստային ցանց
Գեթ հանգույցի պատրաստում Rinkeby-ի համար
Հանգույցի համաժամացում
Հաշիվների ավելացում
Ձեր Rinkeby հաշիվը լիցքավորեք Ether-ով
Սկսվում է պայմանագրային միգրացիան դեպի Rinkeby ցանց
Դիտեք պայմանագրի տեղեկատվությունը Rinkeby ցանցում
Truffle կոնսոլ Rinkeby ցանցի համար
Պայմանագրային գործառույթներ կանչելու ավելի հեշտ եղանակ
Node.js-ի հետ պայմանագրային մեթոդների կանչ
Գումար փոխանցեք Rinkby-ի Truffle վահանակի հաշիվների միջև
Դասի ամփոփում

Դաս 10Ինչպես է աշխատում Ethereum Swarm-ը
Swarm-ի տեղադրում և գործարկում
Գործողություններ ֆայլերի և գրացուցակների վրա
Ֆայլի վերբեռնում Ethereum Swarm-ում
Ֆայլի ընթերցում Ethereum Swarm-ից
Վերբեռնված ֆայլի մանիֆեստի դիտում
Գրացուցակների բեռնում ենթագրքերով
Ֆայլի ընթերցում բեռնված գրացուցակից
Օգտագործելով Swarm Public Gateway-ը
Swarm-ի կանչ Node.js սկրիպտներից
Perl Net::Ethereum::Swarm մոդուլ
Net::Ethereum::Swarm մոդուլի տեղադրում
Գրել և կարդալ տվյալները
Դասի ամփոփում

Դաս 11Web3.py-ի տեղադրում
Թարմացրեք և տեղադրեք անհրաժեշտ փաթեթները
Easysolc մոդուլի տեղադրում
Պայմանագրի հրապարակում Web3.py-ի հետ
Պայմանագրի կազմում
Միացում մատակարարին
Կատարել պայմանագրային հրատարակություն
Պայմանագրի հասցեն և abi-ն պահվում է ֆայլում
Պայմանագրի հրատարակման սցենարի վարում
Զանգահարելու պայմանագրի մեթոդներ
Հասցեի և պայմանագրի abi-ի ընթերցում JSON ֆայլից
Միացում մատակարարին
Ստեղծեք պայմանագրի օբյեկտ
Զանգահարելու պայմանագրի մեթոդներ
Truffle և Web3.py
Դասի ամփոփում

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

Source: www.habr.com

Добавить комментарий