Ақылды келісім-шарттарға кіріспе

Бұл мақалада біз смарт келісім-шарттар дегеніміз не, олар не екенін қарастырамыз, біз әртүрлі смарт келісімшарт платформаларымен, олардың ерекшеліктерімен танысамыз, сондай-ақ олардың қалай жұмыс істейтінін және қандай артықшылықтар әкелетінін талқылаймыз. Бұл материал смарт келісімшарттар тақырыбымен жақсы таныс емес, бірақ оны түсінуге жақындағысы келетін оқырмандар үшін өте пайдалы болады.

Тұрақты келісімшартқа қарсы ақылды келісімшарт

Егжей-тегжейлерді қарастырмас бұрын, қағазда көрсетілген кәдімгі келісімшарт пен цифрлық түрде ұсынылған смарт келісімшарт арасындағы айырмашылықтарды мысалға алайық.

Ақылды келісім-шарттарға кіріспе

Смарт келісімшарттар пайда болғанға дейін бұл қалай жұмыс істеді? Құндылықтарды бөлудің белгілі бір ережелері мен шарттарын, сондай-ақ берілген ережелер мен шарттарға сәйкес осы бөлуді жүзеге асыруға кепілдік беретін белгілі бір механизмді орнатуды қалайтын адамдар тобын елестетіп көріңіз. Содан кейін олар жиналып, жеке басын куәландыратын мәліметтерді, шарттарды, қатысты құндылықтарды жазып, күнін белгілеп, оларға қол қоятын қағаз жасайды. Бұл келісім-шартты да нотариус сияқты сенімді тарап куәландырған. Әрі қарай, бұл адамдар осындай келісім-шарттың қағаз көшірмесімен әртүрлі бағыттарға барды және шарттың өзіне сәйкес келмейтін кейбір әрекеттерді жасай бастады, яғни олар бір нәрсені жасады, бірақ қағазда бірдеңе жасау керектігі расталды. мүлде басқа. Және бұл жағдайдан қалай шығуға болады? Шын мәнінде, топ мүшелерінің бірі осы қағазды алып, кейбір дәлелдемелерді алып, оны сотқа беріп, келісім мен нақты әрекеттердің сәйкестігіне қол жеткізуі керек. Көбінесе бұл келісім-шарттың әділ орындалуына қол жеткізу қиын, бұл жағымсыз салдарға әкеледі.

Ақылды келісімшарттар туралы не айтуға болады? Олар келісім-шарт талаптарын жазу мүмкіндігін де, оларды мүлтіксіз орындау механизмін де біріктіреді. Егер шарттар қойылса және сәйкес мәміле немесе сұранысқа қол қойылса, онда бұл сұрау немесе мәміле қабылданғаннан кейін шарттарды өзгерту немесе олардың орындалуына әсер ету бұдан былай мүмкін болмайды.

Бір валидатор немесе бүкіл желі, сондай-ақ қатаң хронологиялық тәртіпте орындауға жіберілген барлық смарт келісімшарттарды сақтайтын дерекқор бар. Сондай-ақ, бұл дерекқорда смарт келісімшартты орындауға арналған барлық іске қосу шарттарын қамтуы маңызды. Сонымен қатар, ол бөлу шартта сипатталған құндылықты ескеруі керек. Егер бұл кейбір цифрлық валютаға қатысты болса, онда бұл дерекқор оны ескеруі керек.

Басқаша айтқанда, смарт келісімшарт валидаторлары смарт келісімшарт жұмыс істейтін барлық деректерге қол жеткізуі керек. Мысалы, цифрлық валюталарды, пайдаланушы баланстарын, пайдаланушы транзакцияларын және уақыт белгілерін бір уақытта есепке алу үшін бірыңғай дерекқорды пайдалану керек. Содан кейін, ақылды келісім-шартта пайдаланушының белгілі бір валютадағы балансы, белгілі бір уақыттың келуі немесе белгілі бір транзакцияның орындалуы фактісі болуы мүмкін, бірақ басқа ештеңе емес.

Смарт келісімшарттың анықтамасы

Жалпы алғанда, терминологияның өзін зерттеуші Ник Сабо ойлап тапқан және алғаш рет 1994 жылы қолданылған және 1997 жылы смарт келісімшарттар идеясын сипаттайтын мақалада құжатталған.

Ақылды келісім-шарттар алдын ала анықталған шарттарға ғана байланысты болуы мүмкін құнды бөлудің кейбір автоматтандырылуын білдіреді. Қарапайым түрде ол белгілі бір тараптар қол қоятын қатаң белгіленген шарттары бар келісім-шартқа ұқсайды.

Ақылды келісім-шарттар үшінші тараптарға сенімді азайту үшін жасалған. Кейде бәрі тәуелді болатын шешім қабылдау орталығы толығымен алынып тасталады. Сонымен қатар, мұндай келісім-шарттарды тексеру оңайырақ. Бұл осындай жүйенің кейбір дизайн ерекшеліктерінің салдары, бірақ көбінесе біз ақылды келісім-шарт деп орталықтандырылмаған ортаны және кез келген адамға дерекқорды талдауға және келісімшарттардың орындалуына толық аудит жүргізуге мүмкіндік беретін функциялардың болуын түсінеміз. Бұл келісім-шарттың орындалуына өзгерістер әкелетін ретроактивті деректер өзгерістерінен қорғауды қамтамасыз етеді. Смарт келісім-шартты жасау және іске қосу кезінде көптеген процестерді цифрландыру көбінесе технология мен оларды жүзеге асыру құнын жеңілдетеді.

Қарапайым мысал - Эскроу қызметі

Өте қарапайым мысалды қарастырайық. Бұл смарт келісімшарттардың функционалдығын түсінуге жақындауға, сондай-ақ оларды қандай жағдайларда пайдалану керектігін жақсырақ түсінуге көмектеседі.

Ақылды келісім-шарттарға кіріспе

Оны Bitcoin көмегімен де жүзеге асыруға болады, дегенмен қазір Bitcoin әлі де смарт келісімшарттар үшін толыққанды платформа деп атауға болмайды. Сонымен, бізде сатып алушы бар және бізде интернет-дүкен бар. Тұтынушы осы дүкеннен монитор сатып алғысы келеді. Ең қарапайым жағдайда сатып алушы төлемді аяқтап, жібереді, ал интернет-дүкен оны қабылдайды, растайды, содан кейін тауарды жөнелтеді. Дегенмен, бұл жағдайда үлкен сенім қажет - сатып алушы монитордың бүкіл құнына интернет-дүкенге сенуі керек. Интернет-дүкеннің сатып алушының алдында беделі төмен болуы мүмкін болғандықтан, төлемді қабылдағаннан кейін қандай да бір себептермен дүкен қызмет көрсетуден бас тартып, тауарды сатып алушыға жібермей қалу қаупі бар. Сондықтан сатып алушы сұрақ қояды (және, тиісінше, интернет-дүкен осы сұрақты қояды), мұндай тәуекелдерді азайту және мұндай транзакцияларды сенімдірек ету үшін бұл жағдайда не қолдануға болады.

Биткоин жағдайында сатып алушы мен сатушыға медиаторды өз бетінше таңдауға мүмкіндік беруге болады. Даулы мәселелерді шешуге атсалысқандар аз емес. Ал біздің қатысушылар медиаторлардың жалпы тізімінен өздері сенетінін таңдай алады. Олар бірге 2 көп қолтаңбаның 3 мекенжайын жасайды, онда үш кілт бар және сол мекенжайдан тиындарды жұмсау үшін кез келген екі кілті бар екі қолтаңба қажет. Бір кілт сатып алушыға, екіншісі интернет-дүкенге, үшіншісі делдалға тиесілі болады. Мұндай көп қолтаңбалы мекенжайға сатып алушы монитор үшін төлеуге қажетті соманы жібереді. Енді сатушы өзіне байланысты көп қолтаңбалы мекенжайда ақшаның біраз уақытқа бұғатталғанын көргенде, ол мониторды пошта арқылы қауіпсіз жібере алады.

Содан кейін сатып алушы сәлемдемені алады, тауарды тексереді және соңғы сатып алу туралы шешім қабылдайды. Ол көрсетілген қызметпен толығымен келісе алады және өзінің кілтімен мәмілеге қол қоя алады, мұнда ол көп қолтаңбалы мекенжайдан сатушыға тиындарды аударады немесе бір нәрсеге көңілі толмауы мүмкін. Екінші жағдайда, ол монеталарды басқаша тарататын балама транзакцияны құрастыру үшін делдалмен байланысады.

Монитор сәл сызылып келді делік және жинақта компьютерге қосылуға арналған кабель жоқ, дегенмен интернет-дүкеннің веб-сайтында кабельді жинаққа қосу керек деп жазылған. Содан кейін сатып алушы делдалға бұл жағдайда алданып қалғанын дәлелдеу үшін қажетті дәлелдерді жинайды: ол сайттың скриншоттарын түсіреді, пошта түбіртегін суретке түсіреді, монитордағы сызаттарды суретке түсіреді және мөрдің болғанын көрсетеді. сынған және кабель суырылған. Интернет-дүкен өз кезегінде оның дәлелдерін жинап, медиаторға береді.

Медиатор бір уақытта сатып алушының наразылығын да, интернет-дүкеннің мүдделерін де қанағаттандыруға мүдделі (неге екені кейінірек белгілі болады). Бұл көп қолтаңбалы мекенжайдағы монеталар сатып алушы, интернет-дүкен және делдал арасында белгілі бір пропорцияда жұмсалатын транзакцияны құрайды, өйткені ол өз жұмысы үшін сыйлық ретінде бір бөлігін өзі үшін алады. Жалпы соманың 90% сатушыға, 5% делдалға және 5% өтемақы сатып алушыға кетті делік. Медиатор бұл транзакцияға өз кілтімен қол қояды, бірақ оны әлі қолдану мүмкін емес, өйткені ол екі қол қоюды талап етеді, бірақ тек біреуі ғана оған тұрарлық. Ол мұндай транзакцияны сатып алушыға да, сатушыға да жібереді. Егер олардың кем дегенде біреуі тиындарды қайта бөлудің осы опциясына қанағаттанса, онда транзакцияға алдын ала қол қойылады және желіге таратылады. Оны растау үшін мәміле тараптарының бірі медиатордың нұсқасымен келісуі жеткілікті.

Бастапқыда медиаторды таңдау маңызды, сонда екі қатысушы да оған сенеді. Бұл жағдайда ол біреудің мүдделерінен тәуелсіз әрекет етеді және жағдайды объективті бағалайды. Егер медиатор кем дегенде бір қатысушыны қанағаттандыратын монеталарды тарату опциясын ұсынбаса, онда сатып алушы да, интернет-дүкен де келісіп, екі қолтаңбасын қою арқылы монеталарды жаңа көп қолтаңбалы мекенжайға жібере алады. Көп қолтаңбаның жаңа мекенжайы басқа медиатормен құрастырылады, ол мәселеде құзыретті және жақсырақ нұсқаны ұсынуы мүмкін.

Мысал жатақхана мен тоңазытқыш

Смарт келісім-шарттың мүмкіндіктерін айқынырақ көрсететін күрделі мысалды қарастырайық.

Ақылды келісім-шарттарға кіріспе

Жақында бір жатақханаға көшіп келген үш жігіт бар делік. Үшеуі өз бөлмесіне бірге пайдалануға болатын тоңазытқыш сатып алуға мүдделі. Олардың бірі тоңазытқыш сатып алу үшін қажетті соманы жинап, сатушымен келіссөздер жүргізуге ерікті. Алайда олар жақында ғана кездесіп, араларында сенім жоқ. Екеуі үшіншісіне ақша беріп тәуекелге барғаны анық. Сонымен қатар, олар сатушыны таңдауда келісімге келу керек.

Олар эскроу қызметін пайдалана алады, яғни транзакцияның орындалуын бақылайтын және туындаған жағдайда даулы мәселелерді шешетін медиаторды таңдай алады. Содан кейін олар келісіп, ақылды келісімшарт жасайды және оған белгілі бір шарттарды белгілейді.

Бірінші шарт - белгілі бір уақытқа дейін, айталық, бір апта ішінде, сәйкес смарт-келісімшарт шотына белгілі бір мекенжайлардан белгілі бір сомаға үш төлем түсуі керек. Егер бұл орындалмаса, смарт келісімшарт орындалуын тоқтатады және монеталарды барлық қатысушыларға қайтарады. Шарт орындалса, сатушы мен делдал идентификаторларының мәндері белгіленеді және барлық қатысушылардың сатушы мен медиатордың таңдауымен келісетіндігі тексеріледі. Барлық шарттар орындалса, қаражат көрсетілген мекенжайларға аударылады. Бұл тәсіл қатысушыларды кез келген жағынан алаяқтықтан қорғай алады және жалпы сенімге деген қажеттілікті жояды.

Бұл мысалда әрбір шартты орындау үшін параметрлерді кезең-кезеңімен орнату мүмкіндігі кірістірілген деңгейлердің кез келген күрделілігі мен тереңдігінің жүйелерін құруға мүмкіндік беретін принципті көреміз. Сонымен қатар, сіз алдымен смарт келісім-шартта бірінші шартты анықтай аласыз және оны орындағаннан кейін ғана келесі шарт үшін параметрлерді орнатуға болады. Басқаша айтқанда, шарт формальды түрде жазылған және оның параметрлерін оның жұмысы кезінде орнатуға болады.

Смарт келісімшарттардың классификациясы

Жіктеу үшін критерийлердің әртүрлі топтарын орнатуға болады. Дегенмен, технологияның даму кезеңінде олардың төртеуі өзекті болып табылады.

Ақылды келісім-шарттарды орталықтандырылған немесе орталықтандырылмаған орындалу ортасымен ажыратуға болады. Орталықсыздандыру жағдайында біз ақылды келісімшарттарды орындау кезінде әлдеқайда үлкен тәуелсіздік пен қателерге төзімділікке ие боламыз.

Оларды шарттарды орнату және орындау процесі бойынша да ажыратуға болады: олар еркін бағдарламаланатын, шектеулі немесе алдын ала анықталған, яғни қатаң түрде терілген болуы мүмкін. Смарт келісімшарт платформасында тек 4 арнайы смарт келісімшарт болған кезде, олар үшін параметрлерді кез келген жолмен орнатуға болады. Тиісінше, оларды орнату әлдеқайда қарапайым: біз тізімнен келісімшартты таңдап, параметрлерді береміз.

Бастау әдісіне сәйкес, автоматтандырылған смарт келісім-шарттар бар, яғни белгілі бір шарттар туындаған кезде олар өздігінен орындалады және шарттар көрсетілген шарттар бар, бірақ платформа олардың орындалуын автоматты түрде тексермейді; бұл үшін олар бөлек бастау қажет.

Сонымен қатар, смарт келісім-шарттар құпиялылық деңгейінде әр түрлі болады. Олар толығымен ашық, ішінара немесе толық құпия болуы мүмкін. Соңғысы үшінші тарап бақылаушылары смарт келісімшарттардың шарттарын көрмейтінін білдіреді. Дегенмен, құпиялылық тақырыбы өте кең және оны қазіргі мақаладан бөлек қарастырған дұрыс.

Төменде біз ағымдағы тақырыпты түсінуге көбірек түсінік беру үшін алғашқы үш критерийді егжей-тегжейлі қарастырамыз.

Орындалу уақыты бойынша ақылды келісімшарттар

Ақылды келісім-шарттарға кіріспе

Орындау ортасының негізінде орталықтандырылған және орталықтандырылмаған смарт келісімшарт платформалары арасында айырмашылық жасалады. Орталықтандырылған цифрлық келісім-шарттар жағдайында бір ғана валидатор бар және сақтық көшірме жасау және қалпына келтіру қызметі болуы мүмкін бір қызмет пайдаланылады, ол да орталықтан басқарылады. Смарт келісім шарттарын орнату және дәл осы қызмет дерекқорында ескерілетін мәнді тарату үшін барлық қажетті ақпаратты сақтайтын бір дерекқор бар. Мұндай орталықтандырылған қызметте белгілі бір сұраныстармен шарттарды белгілейтін және осындай келісімшарттарды пайдаланатын клиент бар. Платформаның орталықтандырылған сипатына байланысты аутентификация механизмдері криптовалюталарға қарағанда қауіпсіз емес болуы мүмкін.

Мысал ретінде ұялы байланыс провайдерлерін (әртүрлі ұялы байланыс операторларын) алуға болады. Айталық, белгілі бір оператор өзінің серверлеріндегі трафиктің орталықтандырылған есебін жүргізеді, оны әртүрлі форматта жіберуге болады, мысалы: дауыстық қоңыраулар, SMS жіберу, мобильді интернет-трафик түрінде және әртүрлі стандарттар бойынша, сондай-ақ есепке алуды жүргізеді. пайдаланушы баланстарындағы қаражат. Тиісінше, ұялы байланыс провайдері көрсетілген қызметтерді есепке алу және оларды төлеу үшін әртүрлі шарттармен шарттар жасай алады. Бұл жағдайда «осындай нөмірге осындай кодпен SMS жіберіңіз, сіз трафикті таратудың осындай шарттарын аласыз» сияқты шарттарды орнату оңай.

Тағы бір мысал келтіруге болады: Интернет-банкингтің кеңейтілген функционалдығы бар дәстүрлі банктер және өте қарапайым шарттар, мысалы, тұрақты төлемдер, кіріс төлемдерін автоматты түрде айырбастау, белгіленген шотқа пайыздарды автоматты түрде шегеру және т.б.

Егер біз орталықтандырылмаған орындау ортасы бар смарт келісімшарттар туралы айтатын болсақ, онда бізде валидаторлар тобы бар. Ең дұрысы, кез келген адам валидатор бола алады. Дерекқорды синхрондау хаттамасына және консенсусқа қол жеткізуге байланысты бізде пішімдері жиі өзгеретін және ашық спецификациясы жоқ кейбір шартты сұрауларды емес, барлық транзакцияларды қатаң сипатталған келісім-шарттармен сақтайтын кейбір жалпы дерекқор бар. Мұнда транзакцияларда қатаң спецификацияға сәйкес келісім-шартты орындау нұсқаулары болады. Бұл спецификация ашық, сондықтан платформа пайдаланушылары смарт келісімшарттарды тексеріп, тексере алады. Мұнда біз орталықтандырылмаған платформалардың тәуелсіздік және ақауларға төзімділік тұрғысынан орталықтандырылған платформалардан жоғары екенін көреміз, бірақ олардың дизайны мен техникалық қызмет көрсетуі әлдеқайда күрделі.

Шарттарды орнату және орындау әдісі бойынша ақылды келісімшарттар

Енді ақылды келісім-шарттардың шарттарды орнату және орындау тәсілі бойынша қалай ерекшеленетінін егжей-тегжейлі қарастырайық. Мұнда біз кездейсоқ бағдарламаланатын және Тюринг аяқталған смарт келісімшарттарға назар аударамыз. Turing-complete смарт келісім шартты орындау шарттары ретінде кез келген дерлік алгоритмдерді орнатуға мүмкіндік береді: жазу циклдері, ықтималдықтарды есептеудің кейбір функциялары және т.б. – өзіңіздің электрондық қолтаңба алгоритмдеріңізге дейін. Бұл жағдайда біз логиканың шын мәнінде ерікті түрде жазылуын айтамыз.

Сондай-ақ ерікті смарт келісімшарттар бар, бірақ Тьюрингтің толық келісім-шарттары емес. Бұған өз сценарийі бар Bitcoin және Litecoin кіреді. Бұл кез келген ретпен белгілі бір операцияларды ғана қолдануға болатынын білдіреді, бірақ енді циклдар мен өзіңіздің алгоритмдеріңізді жаза алмайсыз.

Бұған қоса, алдын ала анықталған смарт келісімшарттарды жүзеге асыратын смарт келісімшарт платформалары бар. Оларға Bitshares және Steemit кіреді. Bitshares-те саудаға, есептік жазбаны басқаруға, платформаның өзін және оның параметрлерін басқаруға арналған ақылды келісім-шарттар жиынтығы бар. Steemit - ұқсас платформа, бірақ ол енді Bitshares сияқты токендерді шығаруға және саудаға емес, блог жүргізуге бағытталған, яғни ол мазмұнды орталықтандырылмаған түрде сақтайды және өңдейді.

Тьюрингтің ерікті келісім-шарттарына Ethereum платформасы және әлі де әзірлену үстіндегі RootStock кіреді. Сондықтан, төменде біз Ethereum ақылды келісімшарт платформасы туралы толығырақ тоқталамыз.

Бастау әдісі бойынша ақылды келісімшарттар

Бастау әдісіне сүйене отырып, ақылды келісімшарттарды кем дегенде екі топқа бөлуге болады: автоматтандырылған және қолмен (автоматтандырылған емес). Автоматтандырылғандар барлық белгілі параметрлер мен шарттарды ескере отырып, смарт-келісімшарт толығымен автоматты түрде орындалатындығымен сипатталады, яғни ол кез келген қосымша транзакцияларды жіберуді және әрбір келесі орындау үшін қосымша комиссияны жұмсауды қажет етпейді. Платформаның өзінде смарт келісімшарттың қалай аяқталатынын есептеу үшін барлық деректер бар. Бұл жерде логика ерікті емес, алдын ала анықталған және мұның барлығын болжауға болады. Яғни, сіз ақылды келісімшартты орындаудың күрделілігін алдын ала бағалай аласыз, ол үшін тұрақты комиссияның қандай да бір түрін пайдалана аласыз және оны жүзеге асырудың барлық процестері тиімдірек.

Еркін бағдарламаланған смарт келісімшарттар үшін орындау автоматтандырылмаған. Мұндай смарт келісімшартты бастау үшін іс жүзінде әрбір қадамда келесі орындау кезеңін немесе келесі смарт келісімшарт әдісін шақыратын жаңа транзакция жасау керек, тиісті комиссияны төлеп, транзакцияның расталуын күту керек. Орындау сәтті аяқталуы немесе аяқталмауы мүмкін, себебі смарт келісімшарт коды ерікті және кейбір күтпеген сәттер пайда болуы мүмкін, мысалы, мәңгілік цикл, кейбір параметрлер мен аргументтердің болмауы, өңделмеген ерекшеліктер және т.б.

Ethereum тіркелгілері

Ethereum тіркелгісінің түрлері

Ethereum платформасында шоттардың қандай түрлері болуы мүмкін екенін қарастырайық. Мұнда тек екі шот түрі бар және басқа опциялар жоқ. Бірінші түрі пайдаланушы тіркелгісі деп аталады, екіншісі келісімшарт тіркелгісі. Олардың қалай ерекшеленетінін анықтайық.

Пайдаланушы тіркелгісін тек электрондық қолтаңбаның жеке кілті басқарады. Тіркелгі иесі ECDSA (Elliptic Curve Digital Signature Algorithm) алгоритмі арқылы электрондық қолтаңба үшін өзінің кілт жұбын жасайды. Осы кілтпен қол қойылған транзакциялар ғана осы есептік жазбаның күйін өзгерте алады.

Смарт келісімшарт тіркелгісі үшін бөлек логика қарастырылған. Оны тек смарт келісімшарттың әрекетін толығымен анықтайтын алдын ала анықталған бағдарламалық кодпен басқаруға болады: ол белгілі бір жағдайларда өз монеталарын қалай басқарады, қай пайдаланушының бастамасы бойынша және қандай қосымша жағдайларда бұл монеталар таратылады. Бағдарлама кодында әзірлеушілер кейбір тармақтарды қарастырмаса, проблемалар туындауы мүмкін. Мысалы, смарт келісімшарт пайдаланушылардың ешқайсысынан әрі қарай орындауды бастауды қабылдамайтын белгілі бір күйді алуы мүмкін. Бұл жағдайда монеталар іс жүзінде қатып қалады, өйткені смарт келісім-шарт бұл күйден шығуды қарастырмайды.

Ethereum-да тіркелгілер қалай жасалады

Пайдаланушы тіркелгісі жағдайында иесі ECDSA көмегімен кілттер жұбын дербес жасайды. Айта кету керек, Ethereum Bitcoin сияқты электронды қолтаңбалар үшін дәл сол алгоритмді және дәл сол эллиптикалық қисық сызығын пайдаланады, бірақ мекенжай сәл басқаша есептеледі. Мұнда Bitcoin-дегідей қос хэштеу нәтижесі енді қолданылмайды, бірақ бір хэштеу 256 бит ұзындықтағы Keccak функциясымен қамтамасыз етілген. Ең аз маңызды бит нәтижелік мәннен, атап айтқанда шығыс хэш мәнінің ең аз маңызды 160 битінен кесіледі. Нәтижесінде біз Ethereum мекенжайын аламыз. Іс жүзінде ол 20 байт алады.

Ethereum шотының идентификаторы Bitcoin және басқа да көптеген жүйелерден айырмашылығы бақылау сомасын қолданбай, он алтылықпен кодталғанын ескеріңіз, мұнда мекенжай бақылау сомасын қосу арқылы 58 базалық санау жүйесінде кодталған. Бұл Ethereum-де тіркелгі идентификаторларымен жұмыс істеу кезінде абай болу керек екенін білдіреді: идентификатордағы бір қатенің өзі монеталардың жоғалуына әкелетініне кепілдік беріледі.

Маңызды ерекшелігі бар және ол бірінші кіріс төлемді қабылдаған кезде жалпы дерекқор деңгейіндегі пайдаланушы тіркелгісі жасалады.

Смарт келісімшарт тіркелгісін жасау мүлдем басқа тәсілді қажет етеді. Бастапқыда пайдаланушылардың бірі смарт келісім-шарттың бастапқы кодын жазады, содан кейін код Ethereum платформасы үшін арнайы компилятор арқылы өтеді, өзінің Ethereum виртуалды машинасы үшін байт кодты алады. Алынған байт код транзакцияның арнайы өрісіне орналастырылады. Ол бастамашының шотының атынан куәландырылады. Әрі қарай, бұл транзакция бүкіл желіде таралады және смарт келісімшарт кодын орналастырады. Мәміле үшін және тиісінше шартты орындау үшін комиссия бастамашының шотындағы теңгерімнен алынады.

Әрбір смарт келісімшарт міндетті түрде өзінің конструкторын (осы келісім-шарттың) қамтиды. Ол бос болуы мүмкін немесе мазмұны болуы мүмкін. Конструктор орындалғаннан кейін смарт келісімшарт тіркелгісінің идентификаторы жасалады, оның көмегімен монеталарды жіберуге, белгілі бір смарт келісімшарт әдістеріне қоңырау шалуға және т.б.

Ethereum транзакция құрылымы

Түсінікті болу үшін біз Ethereum транзакциясының құрылымын және смарт келісімшарт кодын мысалға ала бастаймыз.

Ақылды келісім-шарттарға кіріспе

Ethereum транзакциясы бірнеше өрістерден тұрады. Олардың біріншісі, бір рет емес, оны тарататын және оның авторы болып табылатын шоттың өзіне қатысты транзакцияның белгілі бір реттік нөмірі болып табылады. Бұл қосарланған операцияларды ажырату үшін қажет, яғни бір мәміле екі рет қабылданған жағдайды алып тастау. Идентификаторды пайдалану арқылы әрбір транзакцияның бірегей хэш мәні болады.

Келесі сияқты өріс келеді газ бағасы. Бұл Ethereum базалық валютасы смарт келісімшартты орындау және виртуалды машина ресурсын бөлу үшін төлеу үшін пайдаланылатын газға айырбасталатын бағаны көрсетеді. Бұл нені білдіреді?

Биткоинде комиссиялар тікелей негізгі валютамен төленеді - Bitcoin өзі. Бұл оларды есептеудің қарапайым механизмінің арқасында мүмкін болды: біз транзакцияда қамтылған деректер сомасы үшін қатаң түрде төлейміз. Ethereum-да жағдай күрделірек, өйткені транзакция деректерінің көлеміне сену өте қиын. Мұнда транзакцияда виртуалды машинада орындалатын бағдарлама коды да болуы мүмкін және виртуалды машинаның әрбір операциясы әртүрлі күрделілікте болуы мүмкін. Айнымалылар үшін жадты бөлетін операциялар да бар. Олардың өзіндік күрделілігі болады, соған байланысты әрбір операция үшін төлем тәуелді болады.

Газ эквивалентіндегі әрбір операцияның құны тұрақты болады. Ол әрбір операцияның тұрақты құнын анықтау мақсатында арнайы енгізілген. Желідегі жүктемеге байланысты газ бағасы өзгереді, яғни комиссияны төлеу үшін базалық валюта осы қосалқы бірлікке айырбасталатын коэффициент.

Ethereum-тегі транзакцияның тағы бір ерекшелігі бар: виртуалды машинада орындауға арналған байт-код қандай да бір нәтижемен (сәттілік немесе сәтсіздік) аяқталғанша немесе комиссияны төлеу үшін бөлінген монеталардың белгілі бір мөлшері біткенше орындалады. . Бұл қандай да бір қателік туындаған жағдайда жіберушінің шотындағы барлық монеталар комиссияға жұмсалған жағдайды болдырмау үшін (мысалы, виртуалды машинада мәңгілік циклдің қандай да бір түрі басталды), келесі өріс бар - газды бастау (көбінесе газ шегі деп аталады) - ол жіберуші белгілі бір транзакцияны аяқтау үшін жұмсауға дайын монеталардың максималды мөлшерін анықтайды.

Келесі өріс шақырылады тағайындалған мекен-жай. Бұл монеталарды алушының мекенжайын немесе әдістері шақырылатын белгілі бір смарт келісімшарттың мекенжайын қамтиды. Одан кейін дала келеді құн, мұнда тағайындалған мекенжайға жіберілетін монеталардың сомасы енгізіледі.

Келесі деп аталатын қызықты өріс мәліметтер, онда бүкіл құрылым сәйкес келеді. Бұл жеке өріс емес, виртуалды машинаның коды анықталған тұтас құрылым. Мұнда ерікті деректерді орналастыруға болады - бұл үшін бөлек ережелер бар.

Ал соңғы өріс деп аталады қол. Ол бір уақытта осы транзакция авторының электрондық қолтаңбасын және осы қолтаңба тексерілетін ашық кілтті қамтиды. Ашық кілттен сіз осы транзакцияны жіберушінің тіркелгі идентификаторын ала аласыз, яғни жүйенің өзінде жіберушінің тіркелгісін бірегей түрде анықтауға болады. Біз транзакцияның құрылымы туралы басты нәрсені білдік.

Solidity үшін смарт келісімшарт коды мысалы

Енді мысалды пайдалана отырып, ең қарапайым смарт келісімшартты толығырақ қарастырайық.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Жоғарыда пайдаланушылардың монеталарын сақтай алатын және оларды сұраныс бойынша қайтара алатын жеңілдетілген бастапқы код бар.

Сонымен, келесі функцияларды орындайтын Банк смарт келісімшарты бар: ол өз теңгерімінде монеталарды жинақтайды, яғни транзакция расталғанда және осындай смарт-келісімшарт орналастырылған кезде оның теңгерімінде монеталар болуы мүмкін жаңа шот жасалады; ол пайдаланушыларды және олардың арасындағы монеталардың таралуын есте сақтайды; теңгерімді басқарудың бірнеше әдістері бар, яғни пайдаланушының балансын толтыруға, алуға және тексеруге болады.

Бастапқы кодтың әрбір жолын қарастырайық. Бұл келісімшарттың тұрақты өрістері бар. Олардың біреуі мекенжай типімен иеленуші деп аталады. Мұнда келісім-шарт осы ақылды келісім-шартты жасаған пайдаланушының мекенжайын есте сақтайды. Әрі қарай, пайдаланушы мекенжайлары мен баланстар арасындағы сәйкестікті сақтайтын динамикалық құрылым бар.

Одан кейін Банктік әдіс – шарттың атымен бірдей. Тиісінше, бұл оның конструкторы. Мұнда иелік айнымалыға осы смарт келісімшартты желіге орналастырған адамның мекенжайы тағайындалады. Бұл конструкторда болатын жалғыз нәрсе. Яғни, бұл жағдайда msg дәл осы келісім-шарттың бүкіл кодын қамтитын транзакциямен бірге виртуалды машинаға жіберілген деректер болып табылады. Сәйкесінше, msg.sender осы кодты орналастыратын осы транзакцияның авторы болып табылады. Ол смарт келісімшарттың иесі болады.

Депозиттік әдіс транзакция арқылы келісім-шарт шотына монеталардың белгілі бір санын аударуға мүмкіндік береді. Бұл жағдайда смарт-келісімшарт осы монеталарды ала отырып, оларды өз балансында қалдырады, бірақ олардың кімге тиесілі екенін білу үшін осы монеталарды нақты кім жіберуші болғанын теңгерім құрылымында жазады.

Келесі әдіс алып тастау деп аталады және ол бір параметрді алады - біреу осы банктен шығарғысы келетін монеталардың сомасы. Бұл оларды жіберу үшін осы әдісті шақыратын пайдаланушының теңгерімінде жеткілікті монеталар бар-жоғын тексереді. Егер олардың саны жеткілікті болса, смарт келісімшарттың өзі қоңырау шалушыға тиындардың сол санын қайтарады.

Содан кейін пайдаланушының ағымдағы балансын тексеру әдісі келеді. Бұл әдісті кім шақырса, смарт келісімшартта осы балансты алу үшін пайдаланылады. Бұл әдістің модификаторы көрініс екенін атап өткен жөн. Бұл әдістің өзі өз класының айнымалы мәндерін ешбір жолмен өзгертпейтінін және бұл шын мәнінде тек оқу әдісі екенін білдіреді. Бұл әдісті шақыру үшін жеке транзакция жасалмайды, комиссия төленбейді және барлық есептеулер жергілікті орындалады, содан кейін пайдаланушы нәтижені алады.

Өлту әдісі смарт келісімшарттың күйін жою үшін қажет. Және бұл жерде осы әдісті шақырушы осы келісімшарттың иесі болып табыла ма, жоқ па, қосымша тексеру бар. Егер солай болса, онда келісімшарт өздігінен жойылады, ал жою функциясы бір параметрді қабылдайды - келісімшарт оның балансында қалған барлық монеталарды жіберетін шот идентификаторы. Бұл жағдайда қалған монеталар автоматты түрде келісім-шарт иесінің мекенжайына түседі.

Ethereum желісіндегі толық түйін қалай жұмыс істейді?

Ethereum платформасында осындай смарт келісімшарттардың қалай орындалатынын және толық желі түйіні қалай жұмыс істейтінін схемалық түрде қарастырайық.

Ақылды келісім-шарттарға кіріспе

Ethereum желісіндегі толық түйінде кемінде төрт модуль болуы керек.
Біріншісі, кез келген орталықтандырылмаған хаттамаға қатысты сияқты, P2P желілік модулі - желіге қосылу және басқа түйіндермен жұмыс істеу модулі, мұнда блоктар, транзакциялар және басқа түйіндер туралы ақпарат алмасылады. Бұл барлық орталықтандырылмаған криптовалюталар үшін дәстүрлі компонент.

Әрі қарай, бізде блокчейн деректерін сақтауға, өңдеуге, басым тармақты таңдауға, блоктарды қосуға, блоктарды жоюға, осы блоктарды тексеруге және т.б. арналған модуль бар.

Үшінші модуль EVM (Ethereum виртуалды машинасы) деп аталады - бұл Ethereum транзакцияларынан байт кодты алатын виртуалды машина. Бұл модуль белгілі бір есептік жазбаның ағымдағы күйін қабылдайды және алынған байт код негізінде оның күйіне өзгерістер енгізеді. Әрбір желі түйініндегі виртуалды машина нұсқасы бірдей болуы керек. Әрбір Ethereum түйінінде орын алатын есептеулер дәл солай, бірақ олар асинхронды түрде жүреді: біреу бұл транзакцияны бұрын тексереді және қабылдайды, яғни ондағы барлық кодты орындайды, ал біреу кейінірек. Сәйкесінше, транзакция жасалғанда, ол желіге таратылады, түйіндер оны қабылдайды және верификация кезінде Bitcoin-де Bitcoin Script орындалатындай, виртуалды машинаның байт коды осы жерде орындалады.

Транзакция тексерілген болып саналады, егер ондағы барлық код орындалса, белгілі бір шоттың жаңа күйі жасалса және осы транзакцияның қолданылғаны немесе қолданылмағаны анық болғанша сақталса. Егер транзакция қолданылса, онда бұл күй тек аяқталған емес, сонымен қатар ағымдағы болып саналады. Әрбір желі түйіні үшін әрбір тіркелгі күйін сақтайтын дерекқор бар. Барлық есептеулер бірдей орындалатындықтан және блокчейннің күйі бірдей болғандықтан, барлық тіркелгілердің күйлерін қамтитын дерекқор да әрбір түйін үшін бірдей болады.

Ақылды келісімшарттардың мифтері мен шектеулері

Ethereum-ға ұқсас смарт келісімшарт платформалары үшін бар шектеулерге келетін болсақ, келесілерді келтіруге болады:

  • кодты орындау;
  • жадты бөлу;
  • блокчейн деректері;
  • төлемдерді жіберу;
  • жаңа келісім-шарт жасау;
  • басқа келісімшарттарға қоңырау шалыңыз.

Виртуалды машинаға қойылған шектеулерді қарастырайық және сәйкесінше, смарт келісімшарттар туралы кейбір мифтерді жоямыз. Ethereum-де ғана емес, сонымен қатар ұқсас платформаларда болуы мүмкін виртуалды машинада сіз шынымен еркін логикалық операцияларды жасай аласыз, яғни кодты жазу және ол сол жерде орындалады, сіз қосымша жадты бөле аласыз. Дегенмен, төлем әрбір операция үшін және бөлінген жадтың әрбір қосымша бірлігі үшін бөлек төленеді.

Әрі қарай, виртуалды машина осы деректерді сол немесе басқа смарт келісімшарт логикасын орындау үшін триггер ретінде пайдалану үшін блокчейн дерекқорынан деректерді оқи алады. Виртуалды машина транзакцияларды жасай және жібере алады, ол жаңа келісім-шарттарды жасай алады және желіде жарияланған басқа смарт келісім-шарттарды шақыра алады: бар, қол жетімді және т.б.

Ең көп таралған миф - Ethereum смарт келісімшарттары кез келген интернет-ресурстағы ақпаратты өз шарттарында пайдалана алады. Шындық мынада, виртуалды машина Интернеттегі кейбір сыртқы ақпараттық ресурсқа желілік сұрау жібере алмайды, яғни пайдаланушылар арасында мәнді тарататын смарт келісім-шартты жазу мүмкін емес, мысалы, сырттағы ауа-райы, немесе қандай да бір чемпионатты кім жеңіп алды немесе сыртқы әлемде болған басқа оқиғаға негізделген, өйткені бұл оқиғалар туралы ақпарат платформаның дерекқорында жоқ. Яғни, блокчейнде бұл туралы ештеңе жоқ. Егер ол жерде пайда болмаса, виртуалды машина бұл деректерді триггерлер ретінде пайдалана алмайды.

Ethereum кемшіліктері

Негізгілерін тізіп көрейік. Бірінші кемшілік - Ethereum-да смарт-келісімшарттарды жобалау, әзірлеу және сынау кезінде кейбір қиындықтар бар (Ethereum смарт келісімшарттарды жазу үшін Solidity тілін пайдаланады). Шынында да, тәжірибе көрсеткендей, барлық қателердің өте үлкен пайызы адам факторына жатады. Бұл шын мәнінде орташа немесе одан жоғары күрделілігі бар бұрыннан жазылған Ethereum смарт келісімшарттарына қатысты. Қарапайым смарт келісім-шарттар үшін қате ықтималдығы аз болса, күрделі смарт келісім-шарттарда ақшаның ұрлануына, олардың қатып қалуына, смарт-келісімшарттардың күтпеген жолмен жойылуына және т.б. әкелетін қателер жиі кездеседі. Мұндай жағдайлардың көпшілігі қазірдің өзінде бар. белгілі.

Екінші кемшілігі - виртуалды машинаның өзі мінсіз емес, өйткені оны адамдар да жазады. Ол ерікті пәрмендерді орындай алады және осалдық осында жатыр: бірқатар пәрмендерді алдын ала күтпеген салдарға әкелетін белгілі бір жолмен конфигурациялауға болады. Бұл өте күрделі аймақ, бірақ бұл осалдықтар Ethereum желісінің ағымдағы нұсқасында бар екенін және олар көптеген смарт келісімшарттардың сәтсіздігіне әкелуі мүмкін екенін көрсететін бірнеше зерттеулер бар.

Тағы бір үлкен қиындық, оны кемшілік деп санауға болады. Бұл виртуалды машинада орындалатын келісім-шарттың байт кодын құрастырсаңыз, сіз белгілі бір әрекеттер тәртібін анықтай аласыз деген қорытындыға практикалық немесе техникалық түрде келуге болады. Бірге орындаған кезде, бұл әрекеттер виртуалды машинаны айтарлықтай жүктейді және оны осы операцияларды орындау үшін төленген ақыға пропорционалды түрде баяулатады.

Бұрын Ethereum-ның даму кезеңі болды, виртуалды машинаның жұмысын егжей-тегжейлі түсінетін көптеген жігіттер мұндай осалдықтарды тапты. Іс жүзінде транзакциялар өте аз комиссия төледі, бірақ іс жүзінде бүкіл желіні баяулатады. Бұл мәселелерді шешу өте қиын, өйткені біріншіден, оларды анықтау, екіншіден, осы операцияларды орындау бағасын реттеу және үшіншіден, барлық желі түйіндерін жаңа нұсқаға жаңартуды білдіретін қатты шанышқыны орындау қажет. бағдарламалық құралды, содан кейін осы өзгерістерді бір уақытта іске қосу.

Ethereum-ға келетін болсақ, көптеген зерттеулер жүргізілді, көптеген практикалық тәжірибе жинақталды: оң және теріс, бірақ соған қарамастан әлі де қандай да бір жолмен шешуге тура келетін қиындықтар мен осалдықтар бар.

Сонымен, мақаланың тақырыптық бөлігі аяқталды, жиі туындайтын сұрақтарға көшейік.

Жиі қойылатын сұрақтар

— Қолданыстағы смарт келісім-шарттың барлық тараптары шарттарды өзгерткісі келсе, олар multisig көмегімен осы смарт келісім-шарттан бас тартып, оны орындаудың жаңартылған шарттары бар жаңа смарт келісімшарт жасай алады ма?

Мұнда жауап екі жақты болады. Неліктен? Өйткені, бір жағынан, смарт келісімшарт бір рет анықталады және ол енді ешқандай өзгерістерді білдірмейді, ал екінші жағынан, кейбір шарттарды толық немесе ішінара өзгертуді қамтамасыз ететін алдын ала жазылған логикаға ие болуы мүмкін. Яғни, смарт келісім-шартыңызда бір нәрсені өзгерткіңіз келсе, онда сіз осы шарттарды жаңартуға болатын шарттарды белгілеуіңіз керек. Тиісінше, осындай сақтықпен ғана келісім-шартты жаңартуды ұйымдастыруға болады. Бірақ мұнда да сіз қиындыққа тап болуыңыз мүмкін: қателесіп, сәйкес осалдықты алыңыз. Сондықтан мұндай нәрселер өте егжей-тегжейлі және мұқият жобаланып, сынақтан өтуі керек.

— Егер медиатор қатысушы тараптардың бірімен: эскроу немесе смарт-келісімшарт жасаса ше? Смарт келісімшартта медиатор қажет пе?

Смарт келісімшартта медиатор қажет емес. Ол болмауы мүмкін. Егер эскроу жағдайында медиатор тараптардың бірімен сөз байласу жасаса, онда иә, бұл схема кейіннен өзінің барлық құндылығын күрт жоғалтады. Сондықтан медиаторлар бір уақытта осы процеске қатысатын барлық тараптардың сеніміне ие болатындай етіп таңдалады. Тиісінше, сіз монеталарды өзіңізге сенбейтін медиатормен көп қолтаңбалы мекенжайға жібермейсіз.

— Бір Ethereum транзакциясы арқылы сіздің мекен-жайыңыздан әртүрлі мақсатты мекенжайларға, мысалы, осы токендер сатылатын айырбастау мекенжайларына көптеген әртүрлі токендерді тасымалдау мүмкін бе?

Бұл жақсы сұрақ және ол Ethereum транзакция үлгісіне және оның Bitcoin үлгісінен айырмашылығына қатысты. Және айырмашылық түбегейлі. Егер Ethereum транзакция үлгісінде сіз жай ғана монеталарды аударсаңыз, онда олар тек бір мекенжайдан екіншісіне ауыстырылады, өзгеріссіз, тек сіз көрсеткен нақты сома. Басқаша айтқанда, бұл жұмсалмаған шығыстардың (UTXO) үлгісі емес, шоттардың және сәйкес қалдықтардың үлгісі. Егер сіз айлакер ақылды келісім-шарт жазсаңыз, бір транзакцияда бірден бірнеше түрлі таңбалауыштарды жіберуге теориялық тұрғыдан мүмкін, бірақ әлі де көптеген транзакциялар жасауға, келісім-шарт жасауға, содан кейін оған жетондар мен монеталарды аударуға, содан кейін тиісті әдісті шақыруға тура келеді. . Бұл күш пен уақытты қажет етеді, сондықтан іс жүзінде олай жұмыс істемейді және Ethereum-дағы барлық төлемдер бөлек транзакцияларда жүзеге асырылады.

— Ethereum платформасы туралы мифтердің бірі сыртқы интернет-ресурс деректеріне тәуелді болатын жағдайларды сипаттау мүмкін емес, сонда не істеу керек?

Шешім мынада: смарт келісім-шарттың өзі сыртқы әлемдегі заттардың жай-күйі туралы деректерді жинайтын және оны арнайы әдістер арқылы смарт келісімшарттарға жіберетін бір немесе бірнеше сенімді оракулдарды қамтамасыз ете алады. Келісімшарттың өзі сенімді тұлғалардан алған мәліметтерді шындық деп санайды. Үлкен сенімділік үшін оракулдардың үлкен тобын таңдап, олардың сөз байласу қаупін азайтыңыз. Келісім-шарттың өзі көпшілікке қайшы келетін оракулдардан алынған деректерді ескермеуі мүмкін.

Blockchain онлайн курсының дәрістерінің бірі осы тақырыпқа арналған - «Ақылды келісім-шарттарға кіріспе«.

Ақпарат көзі: www.habr.com

пікір қалдыру