Акылдуу келишимдерге киришүү

Бул макалада биз акылдуу контракттар деген эмне экенин, алар эмне экенин карап чыгабыз, биз ар кандай акылдуу контракт платформалары, алардын өзгөчөлүктөрү менен таанышабыз, ошондой эле алар кантип иштешин жана алар кандай артыкчылыктарды алып келерин талкуулайбыз. Бул материал акылдуу келишимдер темасы менен жакшы тааныш эмес, бирок аны түшүнүүгө жакындагысы келген окурмандар үчүн абдан пайдалуу болот.

Кадимки келишим vs. акылдуу келишим

Биз майда-чүйдөсүнө чейин карап көрөлү, келгиле, кагаз жүзүндө көрсөтүлгөн кадимки келишим менен санарип түрүндө берилген акылдуу келишимдин ортосундагы айырмачылыктарды мисалга алалы.

Акылдуу келишимдерге киришүү

Бул акылдуу келишимдер пайда болгонго чейин кандай иштеген? Баалуулуктарды бөлүштүрүүнүн белгилүү бир эрежелерин жана шарттарын, ошондой эле бул бөлүштүрүүнү берилген эрежелерге жана шарттарга ылайык ишке ашырууга кепилдик берүүчү белгилүү бир механизмди орнотууну каалаган адамдардын тобун элестетиңиз. Андан кийин алар чогулуп, кагаз сызып, ага идентификациялык реквизиттерин, шарттарын, баалуулуктарын жазып, датасын коюп, кол коюшат. Бул келишим нотариус сыяктуу ишенимдүү тарап тарабынан да күбөлөндүрүлгөн. Андан ары, бул адамдар мындай келишимдин кагаз көчүрмөсү менен ар кайсы тарапка кетип, келишимдин өзүнө туура келбей турган кээ бир аракеттерди жасай башташты, башкача айтканда, алар бир нерсени жасашты, бирок кагаз жүзүндө бир нерсе кылышы керек деп тастыкталган. таптакыр башкача. Анан кантип бул абалдан чыгуу керек? Чындыгында, топтун мүчөлөрүнүн бири бул кагазды алып, кандайдыр бир далилдерди алып, сотко өткөрүп, келишим менен иш жүзүндөгү аракеттердин ортосундагы шайкештикке жетиши керек. Көбүнчө, бул келишимди адилеттүү ишке ашырууга жетишүү кыйын, бул жагымсыз кесепеттерге алып келет.

акылдуу келишимдер жөнүндө эмне айтууга болот? Алар келишимдин шарттарын жазуу мүмкүнчүлүгүн да, аларды так аткаруунун механизмин да айкалыштырат. Эгерде шарттар коюлуп, тиешелүү бүтүмгө же суроо-талапка кол коюлса, анда ал өтүнүч же бүтүм кабыл алынгандан кийин, мындан ары шарттарды өзгөртүү же алардын аткарылышына таасирин тийгизүү мүмкүн эмес.

Бир валидатор же бүтүндөй тармак, ошондой эле катуу хронологиялык тартипте аткарууга берилген бардык акылдуу келишимдерди сактаган маалымат базасы бар. Бул маалымат базасы акылдуу келишимди аткаруу үчүн бардык триггер шарттарын камтышы керек да маанилүү. Мындан тышкары, ал бөлүштүрүү келишимде сүрөттөлгөн абдан баалуулугун эске алуу керек. Бул кээ бир санариптик акча тиешелүү болсо, анда бул маалымат базасы аны эске алуу керек.

Башка сөз менен айтканда, акылдуу келишим валидаторлору акылдуу келишим иштеген бардык маалыматтарга кирүү мүмкүнчүлүгүнө ээ болушу керек. Мисалы, бирдиктүү маалымат базасы бир эле учурда санариптик валюталарды, колдонуучунун баланстарын, колдонуучунун транзакцияларын жана убакыт белгилерин эсепке алуу үчүн колдонулушу керек. Андан кийин, акылдуу келишимде, шарт белгилүү бир валютадагы колдонуучунун балансы, белгилүү бир убакыттын келиши же белгилүү бир бүтүмдүн аткарылышы болушу мүмкүн, бирок башка эч нерсе эмес.

Акылдуу келишимдин аныктамасы

Жалпысынан алганда, терминологиянын өзү изилдөөчү Ник Сабо тарабынан иштелип чыккан жана биринчи жолу 1994-жылы колдонулган жана 1997-жылы акылдуу келишимдердин идеясын сүрөттөгөн макалада документтештирилген.

Акылдуу келишимдер наркты бөлүштүрүүнүн кээ бир автоматташтырылганын билдирет, бул алдын ала белгиленген шарттарга гана көз каранды болот. Жөнөкөй түрдө, ал белгилүү бир тараптар тарабынан кол коюлган катуу аныкталган шарттары бар келишимге окшош.

Акылдуу келишимдер үчүнчү жактарга болгон ишенимди азайтуу үчүн иштелип чыккан. Кээде бардыгы көз каранды болгон чечимдерди кабыл алуу борбору толугу менен жокко чыгарылат. Мындан тышкары, мындай контракттарды текшерүү оңой. Бул мындай системанын кээ бир дизайн өзгөчөлүктөрүнүн кесепети, бирок көбүнчө биз акылдуу келишим менен борбордон ажыратылган чөйрөнү жана ар бир адамга маалымат базасын талдоо жана келишимдердин аткарылышын толук текшерүүнү жүргүзүүгө мүмкүндүк берүүчү функциялардын болушун түшүнөбүз. Бул контракттын аткарылышынын өзгөрүшүнө алып келүүчү ретроактивдүү маалыматтардын өзгөрүшүнөн коргоону камсыздайт. Акылдуу келишимди түзүү жана ишке киргизүүдө көпчүлүк процесстерди санариптештирүү көбүнчө технологияны жана аларды ишке ашыруунун баасын жеңилдетет.

Жөнөкөй мисал - Эскроу кызматы

Келгиле, абдан жөнөкөй бир мисал карап көрөлү. Бул сизге акылдуу контракттардын функционалдуулугун түшүнүүгө, ошондой эле кайсы учурларда колдонулушу керектигин жакшыраак түшүнүүгө жардам берет.

Акылдуу келишимдерге киришүү

Ал ошондой эле Биткойн аркылуу ишке ашырылышы мүмкүн, бирок азыр Bitcoin дагы эле акылдуу келишимдер үчүн толук кандуу платформа деп атоого болбойт. Ошентип, биздин сатып алуучубуз бар жана бизде онлайн дүкөн бар. Кардар бул дүкөндөн монитор сатып алууну каалайт. Эң жөнөкөй учурда, сатып алуучу төлөмдү бүтүрүп, жөнөтөт, ал эми интернет-дүкөн аны кабыл алып, ырастап, анан товарды жөнөтөт. Бирок, бул жагдайда чоң ишенимге муктаждык бар - сатып алуучу монитордун бардык наркы үчүн онлайн дүкөнгө ишениши керек. Интернет-дүкөндүн сатып алуучунун алдында кадыр-баркы төмөн болушу мүмкүн болгондуктан, кандайдыр бир себептерден улам төлөмдү кабыл алгандан кийин дүкөн тейлөөдөн баш тартып, товарды сатып алуучуга жөнөтпөй калуу коркунучу бар. Ошондуктан, сатып алуучу суроо берет (жана, тиешелүүлүгүнө жараша, интернет дүкөнү бул суроону берет), бул учурда мындай тобокелдиктерди азайтуу жана мындай бүтүмдөрдү ишенимдүүрөөк кылуу үчүн колдонулушу мүмкүн.

Биткойн учурда, сатып алуучуга жана сатуучуга медиаторду өз алдынча тандоого уруксат берүү мүмкүн. Талаштуу маселелерди чечүүгө катышкандар көп. Ал эми биздин катышуучулар медиаторлордун жалпы тизмесинен өздөрү ишене турганды тандай алышат. Алар чогуу үч ачкыч бар 2 multisignature дарегин түзөт жана каалаган эки ачкыч менен эки кол ошол даректен тыйын сарптоо талап кылынат. Бир ачкыч сатып алуучуга, экинчиси интернет дүкөнгө, үчүнчүсү ортомчуга таандык болот. Жана мындай көп кол тамгага сатып алуучу монитор үчүн төлөөгө керектүү сумманы жөнөтөт. Эми, сатуучу акча өзүнө көз каранды болгон multisignature дареги боюнча бир нече убакытка бөгөттөлүп турганын көргөндө, ал мониторду почта аркылуу коопсуз жөнөтө алат.

Андан кийин сатып алуучу посылканы алат, товарды текшерет жана акыркы сатып алуу жөнүндө чечим кабыл алат. Ал көрсөтүлгөн кызматка толугу менен макул болуп, өзүнүн ачкычы менен бүтүмгө кол коюшу мүмкүн, мында көп кол тамга дарегинен сатуучуга тыйын которот, же бир нерсеге нааразы болушу мүмкүн. Экинчи учурда, ал монеталарды башкача бөлүштүрө турган альтернативалуу бүтүм түзүү үчүн ортомчу менен байланышат.

Монитор бир аз чийилип келди дейли, комплектте компьютерге туташуу үчүн кабель жок, бирок интернет-дүкөндүн сайтында кабель комплектке киргизилиши керек деп жазылган. Андан кийин сатып алуучу ортомчуга бул кырдаалда алданып калганын далилдөө үчүн зарыл болгон далилдерди чогултат: ал сайттын скриншотторун тартат, почта дүмүрчөгүн сүрөткө тартат, монитордогу чийиктерди сүрөткө тартат жана мөөр басылганын көрсөтөт. үзүлүп, кабели сууруп кеткен. Интернет-дүкөн өз кезегинде анын далилин чогултуп, аны ортомчуга өткөрүп берет.

Медиатор бир эле учурда сатып алуучунун нааразычылыгын жана интернет-дүкөндүн кызыкчылыктарын канааттандырууга кызыкдар (эмне үчүн кийинчерээк айкын болот). Бул көп кол тамга дарегинен алынган тыйындар сатып алуучу, интернет-дүкөн жана ортомчунун ортосунда кандайдыр бир пропорцияда жумшала турган транзакцияны түзөт, анткени ал өз эмгеги үчүн сыйлык катары бир бөлүгүн өзүнө алат. Айталы, жалпы сумманын 90% сатуучуга, 5% ортомчуга жана 5% компенсация сатып алуучуга кетет. Ортомчу бул транзакцияга өзүнүн ачкычы менен кол коет, бирок аны азырынча колдонуу мүмкүн эмес, анткени ал эки кол коюуну талап кылат, бирок ага бир гана кол коюлган. Ал мындай бүтүмдү сатып алуучуга да, сатуучуга да жөнөтөт. Алардын жок дегенде бири монеталарды кайра бөлүштүрүү үчүн бул параметр менен ыраазы болсо, анда бүтүм алдын ала кол коюлат жана тармакка бөлүштүрүлөт. Аны тастыктоо үчүн бүтүмдүн тараптарынын бири медиатордун варианты менен макул болгону жетиштүү.

Эки катышуучу тең ага ишениши үчүн алгач ортомчуну тандоо маанилүү. Бул учурда ал тигил же бул кызыкчылыктан көз карандысыз аракеттенет жана кырдаалга объективдүү баа берет. Эгерде ортомчу жок дегенде бир катышуучуну канааттандыра турган монеталарды таратуу мүмкүнчүлүгүн бербесе, анда чогуу макулдашып, сатып алуучу да, интернет-дүкөн да эки кол тамгасын коюу менен монеталарды жаңы multisignature дарекке жөнөтө алышат. Жаңы көп кол тамга дареги башка ортомчу менен түзүлөт, ал бул маселеде көбүрөөк компетенттүү жана жакшыраак вариантты сунуштай алат.

Жатакана жана муздаткыч менен мисал

Келгиле, акылдуу келишимдин мүмкүнчүлүктөрүн ачык-айкын көрсөткөн татаалыраак мисалды карап көрөлү.

Акылдуу келишимдерге киришүү

Жакында бир жатаканага көчүп келген үч жигит бар дейли. Үчөө бөлмөсүнө чогуу колдоно турган муздаткыч сатып алууга кызыгышат. Алардын бири өз ыктыяры менен керектүү сумманы чогултуп, муздаткыч сатып алып, сатуучу менен сүйлөшүүлөрдү жүргүзгөн. Бирок жакында эле таанышып, ортодо ишеним жок. Алардын экөөсү үчүнчүсүнө акча берип тобокелге салып жатканы анык. Мындан тышкары, алар сатуучуну тандоодо келишимге жетиши керек.

Алар эскроу кызматын колдоно алышат, башкача айтканда, бүтүмдүн аткарылышын көзөмөлдөп, талаштуу маселелерди чече турган ортомчуну тандай алышат. Анан макулдашып, акылдуу келишим түзүшөт жана анда белгилүү бир шарттарды жазышат.

Биринчи шарт - белгилүү бир убакытка чейин, айталы, бир жуманын ичинде, тиешелүү смарт контракт эсеби белгилүү бир даректерден белгилүү бир сумма үчүн үч төлөмдөрдү кабыл алышы керек. Эгер андай болбосо, акылдуу келишим аткарылышын токтотуп, бардык катышуучуларга тыйындарды кайтарып берет. Эгерде шарт аткарылса, анда сатуучунун жана медиатордун идентификаторлорунун маанилери коюлат жана бардык катышуучулар сатуучунун жана ортомчунун тандоосуна макул экендиги текшерилет. Бардык шарттар аткарылгандан кийин каражаттар көрсөтүлгөн даректерге которулат. Бул ыкма катышуучуларды каалаган тараптан алдамчылыктан коргой алат жана жалпысынан ишенүү зарылдыгын жок кылат.

Ар бир шартты аткаруу үчүн параметрлерди этап-этабы менен коюу мүмкүнчүлүгү ар кандай татаалдыктагы системаларды жана уяланган деңгээлдердин тереңдигин түзүүгө мүмкүндүк бере турган принципти бул мисалдан көрүп жатабыз. Кошумчалай кетсек, сиз адегенде акылдуу келишимде биринчи шартты аныктай аласыз жана ал аткарылгандан кийин гана кийинки шарт үчүн параметрлерди орното аласыз. Башкача айтканда, шарт формалдуу түрдө жазылган жана ал үчүн параметрлер анын иштөө учурунда коюлушу мүмкүн.

Акылдуу келишимдердин классификациясы

Классификациялоо үчүн сиз критерийлердин ар кандай топторун орното аласыз. Бирок, технологияны өнүктүрүү учурда, алардын төртөө актуалдуу болуп саналат.

Акылдуу келишимдер борборлоштурулган же борборлоштурулган эмес, алардын аткаруу чөйрөсү менен айырмаланышы мүмкүн. Децентрализация болгон учурда, биз акылдуу контракттарды аткарууда алда канча чоң көз карандысыздыкка жана каталарга чыдамкайлыкка ээбиз.

Аларды шарттарды түзүү жана аткаруу процесси менен да айырмалоого болот: алар эркин программалануучу, чектелген же алдын ала аныкталган, б.а. катуу терилген болушу мүмкүн. Акылдуу контракт платформасында 4 гана спецификалык акылдуу келишим болгондо, алар үчүн параметрлерди каалаган жол менен орнотсо болот. Демек, аларды орнотуу алда канча жөнөкөй: биз тизмеден келишимди тандап, параметрлерин өткөрүп.

Демилге ыкмасына ылайык, автоматташтырылган акылдуу келишимдер бар, башкача айтканда, белгилүү бир шарттар пайда болгондо, алар өз алдынча аткарылат жана шарттар көрсөтүлгөн келишимдер бар, бирок платформа алардын аткарылышын автоматтык түрдө текшербейт; бул үчүн алар өзүнчө баштоо керек.

Мындан тышкары, акылдуу келишимдер купуялуулуктун деңгээлинде айырмаланат. Алар толугу менен ачык, жарым-жартылай же толугу менен жашыруун болушу мүмкүн. Акыркысы үчүнчү тараптын байкоочулары акылдуу келишимдердин шарттарын көрүшпөйт дегенди билдирет. Бирок, купуялуулук темасы абдан кенен жана аны азыркы макаладан өзүнчө кароо жакшы.

Төмөндө биз учурдагы теманы түшүнүүгө көбүрөөк айкындуулукту алып келүү үчүн биринчи үч критерийди кылдат карап чыгабыз.

Иштөө убактысы боюнча акылдуу келишимдер

Акылдуу келишимдерге киришүү

Аткаруу чөйрөсүнүн негизинде борборлоштурулган жана борборлоштурулган акылдуу контракт платформаларынын ортосунда айырмалоо жүргүзүлөт. Борборлоштурулган санариптик контракттарда бирдиктүү кызмат колдонулат, мында бир гана валидатор бар жана резервдик көчүрүү жана калыбына келтирүү кызматы болушу мүмкүн, ал да борбордон башкарылат. Акылдуу келишимдин шарттарын белгилөө жана ушул кызмат базасында эске алынган бааны бөлүштүрүү үчүн бардык керектүү маалыматты сактаган бир маалымат базасы бар. Мындай борборлоштурулган кызмат белгилүү бир суроо-талаптар менен шарттарды коюп, мындай келишимдерди колдонгон кардар бар. Платформанын борборлоштурулган мүнөзүнө байланыштуу аутентификация механизмдери криптовалюталарга караганда азыраак коопсуз болушу мүмкүн.

Мисал катары уюлдук байланыш провайдерлерин (ар кандай мобилдик операторлорду) алсак болот. Айталы, белгилүү бир оператор өзүнүн серверлеринде трафиктин борборлоштурулган эсебин жүргүзөт, ал ар кандай форматтарда берилиши мүмкүн, мисалы: үн чалуулар, SMS жөнөтүү, мобилдик интернет-трафик түрүндө жана ар кандай стандарттарга ылайык, ошондой эле эсептерди жүргүзөт. колдонуучунун балансындагы каражаттардын. Ушуга ылайык, уюлдук байланыш провайдери ар кандай шарттарда көрсөтүлгөн кызматтарды эсепке алуу жана аларды төлөө боюнча келишимдерди түзө алат. Андайда “баланча номерге баланча код менен SMS жөнөт, трафикти бөлүштүрүү үчүн тигил же бул шарттарды аласың” деген сыяктуу шарттарды коюу оңой.

Дагы бир мисал келтирүүгө болот: Интернет-банкингдин кеңейтилген функционалдуулугу менен салттуу банктар жана үзгүлтүксүз төлөмдөр, түшкөн төлөмдөрдү автоматтык түрдө конвертациялоо, көрсөтүлгөн эсепке пайыздарды автоматтык түрдө чегерүү ж.б.

Эгерде биз борбордон ажыратылган аткаруу чөйрөсү менен акылдуу келишимдер жөнүндө сөз кыла турган болсок, анда бизде валидаторлордун тобу бар. Идеалында, ар бир адам валидатор боло алат. Берилиштер базасын синхрондоштуруу протоколуна жана консенсуска жетишүүгө байланыштуу бизде кээ бир жалпы маалымат базасы бар, алар азыр бардык транзакцияларды катуу сыпатталган келишимдер менен сактай турган, кээ бир шарттуу суроо-талаптар эмес, форматтары көп өзгөрүп турат жана ачык спецификациясы жок. Бул жерде транзакциялар келишимди катуу спецификацияга ылайык аткаруу боюнча көрсөтмөлөрдү камтыйт. Бул спецификация ачык, ошондуктан платформа колдонуучулары акылдуу келишимдерди текшерип, текшере алышат. Бул жерде биз борборлоштурулган аянтчалардын көз карандысыздыгы жана каталарга чыдамкайлыгы жагынан борборлоштурулган платформалардан жогору экенин көрөбүз, бирок алардын дизайны жана тейлөөсү бир топ татаал.

Шарттарды коюу жана аткаруу ыкмасы менен акылдуу келишимдер

Келгиле, акылдуу келишимдер шарттарды коюуда жана аткарууда кандайча айырмаланарын кененирээк карап чыгалы. Бул жерде биз кокустан программалануучу жана Тьюринг аяктаган акылдуу контракттарга көңүл бурабыз. Тюринг-толук акылдуу контракт келишимди аткаруунун шарттары катары дээрлик бардык алгоритмдерди коюуга мүмкүндүк берет: жазуу циклдери, ыктымалдыктарды эсептөө үчүн кээ бир функциялар жана ушуга окшогондор - өзүңүздүн электрондук кол коюу алгоритмдериңизге чейин. Бул учурда, биз логиканы чындап эле ээнбаш жазууну билдирет.

Тьюрингдин толук эмес келишимдери да бар. Бул өз скрипт менен Bitcoin жана Litecoin камтыйт. Бул сиз каалаган тартипте белгилүү бир операцияларды гана колдоно аласыз, бирок мындан ары циклдерди жана өзүңүздүн алгоритмдериңизди жаза албайсыз дегенди билдирет.

Мындан тышкары, алдын ала аныкталган акылдуу келишимдерди ишке ашыруу акылдуу келишим платформалар бар. Бул Bitshares жана Steemit кирет. Bitshares соода, эсеп башкаруу, платформанын өзүн жана анын параметрлерин башкаруу үчүн акылдуу келишимдердин бир катар бар. Steemit окшош платформа, бирок ал Bitshares сыяктуу токендерди чыгарууга жана соодалоого багытталган эмес, бирок блогдошуу, башкача айтканда, борбордон ажыратылган түрдө мазмунду сактайт жана иштетет.

Өзүм билемдик менен түзүлгөн Тьюринг-толук келишимдер Ethereum платформасын жана дагы эле иштелип жаткан RootStockди камтыйт. Ошондуктан, төмөндө биз Ethereum акылдуу келишим платформасында бир аз майда-чүйдөсүнө чейин токтолобуз.

баштоо ыкмасы менен акылдуу келишимдер

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

Эркин программаланган акылдуу келишимдер үчүн аткаруу автоматташтырылган эмес. Мындай акылдуу келишимди баштоо үчүн, иш жүзүндө ар бир кадамда сиз жаңы транзакцияны түзүшүңүз керек, ал кийинки аткаруу баскычын же кийинки акылдуу контракт ыкмасын чакырып, тиешелүү комиссияны төлөп, транзакциянын ырасталышын күтөт. Аткаруу ийгиликтүү же бүтпөй калышы мүмкүн, анткени акылдуу контракт коду өзүм билемдик жана күтүлбөгөн учурлар пайда болушу мүмкүн, мисалы, түбөлүк цикл, кээ бир параметрлердин жана аргументтердин жоктугу, иштетилбеген өзгөчөлүктөр ж.б.

Ethereum эсептери

Ethereum эсеп түрлөрү

Келгиле, Ethereum платформасында эсептердин кандай түрлөрү болушу мүмкүн экенин карап көрөлү. Бул жерде эсептердин эки гана түрү бар жана башка варианттар жок. Биринчи түрү колдонуучу аккаунту деп аталат, экинчиси келишим эсеби. Келгиле, алар кандайча айырмаланарын аныктап көрөлү.

Колдонуучунун эсеби электрондук кол тамганын жеке ачкычы менен гана башкарылат. Эсептин ээси ECDSA (Elliptic Curve Digital Signature Algorithm) алгоритмин колдонуу менен электрондук кол коюу үчүн өзүнүн ачкыч жуптарын түзөт. Бул ачкыч менен кол коюлган транзакциялар гана бул эсептин абалын өзгөртө алат.

Акылдуу келишим эсеби үчүн өзүнчө логика каралган. Аны алдын ала аныкталган программалык код менен гана көзөмөлдөсө болот, ал акылдуу келишимдин жүрүм-турумун толугу менен аныктайт: ал өзүнүн монеталарын белгилүү бир шарттарда кантип башкарат, кайсы колдонуучунун демилгеси жана бул монеталар кандай кошумча шарттарда бөлүштүрүлөт. Эгерде кээ бир пункттар программалык коддо иштеп чыгуучулар тарабынан каралбаса, көйгөйлөр пайда болушу мүмкүн. Мисалы, акылдуу келишим белгилүү бир абалды кабыл алышы мүмкүн, анда ал колдонуучулардын эч киминен андан ары аткаруу демилгесин кабыл албайт. Бул учурда, монеталар чындыгында тоңуп калат, анткени акылдуу келишимде бул абалдан чыгуу каралган эмес.

Ethereumда эсептер кантип түзүлөт

Колдонуучунун каттоо эсебинин ээси ECDSA аркылуу өз алдынча ачкыч жупту жаратат. Бул Ethereum Биткойн сыяктуу электрондук кол үчүн так эле алгоритм жана так эле эллиптикалык ийри колдонот, бирок дареги бир аз башкачараак жол менен эсептелген экенин белгилей кетүү маанилүү. Бул жерде Биткойндогудай кош хэширлөөнүн натыйжасы мындан ары колдонулбайт, бирок 256 бит узундуктагы Keccak функциясы менен жалгыз хэширлөө каралган. Натыйжадагы мааниден эң аз маанилүү бит, тактап айтканда, чыгуу хэш маанисинин эң аз маанилүү 160 битинен ажыратылат. Натыйжада, биз Ethereum дарегин алуу. Чынында, ал 20 байт алат.

Сураныч, Ethereumдагы эсептин идентификатору биткоин жана башка көптөгөн системалардан айырмаланып, контролдук сумманы колдонбостон алтылыкта коддолгонуна көңүл буруңуз, мында дарек контролдук сумманы кошуу менен 58 базалык сан системасында коддолгон. Бул Ethereumда эсептин идентификаторлору менен иштөөдө этият болушуңуз керек дегенди билдирет: идентификатордогу бир ката да монеталарды жоготууга кепилдик берет.

Маанилүү өзгөчөлүк бар жана ал биринчи түшкөн төлөмдү кабыл алган учурда жалпы маалымат базасынын деңгээлинде колдонуучу эсеби түзүлөт.

Акылдуу келишим эсебин түзүү такыр башка мамилени талап кылат. Башында колдонуучулардын бири акылдуу келишимдин баштапкы кодун жазат, андан кийин код Ethereum платформасы үчүн атайын компилятор аркылуу өтүп, өзүнүн Ethereum виртуалдык машинасы үчүн байт кодду алат. Алынган байт код транзакциянын атайын талаасына жайгаштырылат. Бул демилгечинин эсебинин атынан күбөлөндүрүлөт. Андан кийин, бул транзакция тармак боюнча жайылтылат жана акылдуу келишим кодун жайгаштырышат. Демилгечинин эсебиндеги баланстан бүтүм үчүн жана ага жараша келишимди аткаруу үчүн комиссия алынат.

Ар бир акылдуу келишим сөзсүз түрдө өзүнүн конструкторун камтыйт (бул келишимдин). Ал бош болушу мүмкүн же мазмуну болушу мүмкүн. Конструктор аткарылгандан кийин, акылдуу контракт эсебинин идентификатору түзүлөт, анын жардамы менен сиз тыйындарды жөнөтө аласыз, акылдуу контракттын белгилүү ыкмаларын ж.б.

Ethereum транзакция түзүмү

Аны айкыныраак кылуу үчүн, биз Ethereum бүтүм түзүмүн жана мисал акылдуу келишим кодун карап баштайбыз.

Акылдуу келишимдерге киришүү

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

Кийинки сыяктуу талаа келет газдын баасы. Бул Ethereum базалык валютасынын газга айландырылган баасын көрсөтөт, ал акылдуу келишимди аткаруу жана виртуалдык машина ресурсун бөлүштүрүү үчүн төлөө үчүн колдонулат. Бул эмнени билдирет?

Биткойндо жыйымдар түздөн-түз базалык валюта — Биткойндун өзү тарабынан төлөнөт. Бул аларды эсептөөнүн жөнөкөй механизминин аркасында мүмкүн болот: биз транзакцияда камтылган маалыматтардын көлөмү үчүн катуу төлөйбүз. 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 Script Биткойндо аткарылгандай эле, виртуалдык машинанын байт коду бул жерде аткарылат.

Эгерде андагы бардык код аткарылса, белгилүү бир эсептин жаңы абалы түзүлсө жана бул транзакция колдонулган же колдонулбаганы айкын болгонго чейин транзакция текшерилген деп эсептелет. Эгерде транзакция колдонулса, анда бул абал бир гана аяктаган эмес, ошондой эле учурдагы болуп саналат. Ар бир тармак түйүнү үчүн ар бир эсептин абалын сактаган маалымат базасы бар. Бардык эсептөөлөр бирдей болуп жаткандыктан жана блокчейндин абалы бирдей болгондуктан, бардык эсептердин абалын камтыган маалымат базасы да ар бир түйүн үчүн бирдей болот.

Акылдуу келишимдердин мифтери жана чектөөлөрү

Ethereum сыяктуу акылдуу контракт платформалары үчүн болгон чектөөлөргө келсек, төмөнкүлөрдү келтирүүгө болот:

  • коддун аткарылышы;
  • эс бөлүү;
  • blockchain маалыматтары;
  • төлөмдөрдү жөнөтүү;
  • жаңы келишим түзүү;
  • башка келишимдерди чакыруу.

Келгиле, виртуалдык машинага коюлган чектөөлөрдү карап көрөлү, жана, ошого жараша, акылдуу келишимдер жөнүндө кээ бир мифтерди жокко чыгарат. Ethereumда гана эмес, ошондой эле окшош платформаларда да боло турган виртуалдык машинада сиз чындап эле ыктыярдуу логикалык операцияларды аткара аласыз, башкача айтканда, кодду жазыңыз жана ал ошол жерде аткарылат, сиз кошумча эстутумду бөлсөңүз болот. Бирок алым ар бир операция жана бөлүнгөн эс тутумдун ар бир кошумча бирдиги үчүн өзүнчө төлөнөт.

Андан кийин, виртуалдык машина бул маалыматтарды тигил же бул акылдуу келишим логикасын ишке ашыруу үчүн триггер катары колдонуу үчүн блокчейн базасынан маалыматтарды окуй алат. Виртуалдык машина транзакцияларды түзүп, жөнөтө алат, ал жаңы келишимдерди түзө алат жана тармакта буга чейин жарыяланган башка акылдуу келишимдердин чалуу ыкмаларын жасай алат: бар, жеткиликтүү, ж.б.

Эң кеңири таралган миф Ethereum акылдуу келишимдер өз шарттарында каалаган интернет-ресурсундагы маалыматты колдоно алат. Чындыгында, виртуалдык машина Интернеттеги кандайдыр бир тышкы маалымат ресурсуна тармактык суроо-талапты жөнөтө албайт, башкача айтканда, сыртта аба ырайы кандай болгонуна жараша колдонуучулардын ортосунда баалуулуктарды бөлүштүрө турган акылдуу келишимди жазуу мүмкүн эмес. же ким кандайдыр бир чемпиондукту утуп алды, же тышкы дүйнөдө болгон башка окуянын негизинде, анткени бул окуялар жөнүндө маалымат платформанын маалымат базасында жок. Башкача айтканда, блокчейнде бул тууралуу эч нерсе жок. Эгер ал жерде көрүнбөсө, виртуалдык машина бул маалыматты триггерлер катары колдоно албайт.

Ethereum кемчиликтери

Алардын негизгилерин санап көрөлү. Биринчи кемчилиги - Ethereumда акылдуу контракттарды иштеп чыгууда, иштеп чыгууда жана сыноодо кээ бир кыйынчылыктар бар (Ethereum акылдуу келишимдерди жазуу үчүн Solidity тилин колдонот). Чынында эле, практика көрсөткөндөй, бардык каталардын абдан чоң пайызы адам факторуна таандык. Бул орточо же андан жогору татаалдыгы бар буга чейин жазылган Ethereum акылдуу келишимдер үчүн чындыгында чындык. Эгерде жөнөкөй акылдуу контракттар үчүн ката ыктымалдыгы аз болсо, анда татаал акылдуу контракттарда акча каражаттарынын уурдалышына, алардын тоңушуна, акылдуу контракттарды күтүүсүз түрдө жок кылууга жана башкаларга алып келген каталар көп кездешет. Мындай учурлар көп кездешет. белгилүү.

Экинчи кемчилиги - виртуалдык машинанын өзү идеалдуу эмес, анткени аны адамдар да жазган. Ал ыктыярдуу буйруктарды аткара алат жана ушунда аялуу бар: бир катар буйруктарды белгилүү бир жол менен конфигурациялоого болот, бул алдын ала күтүлбөгөн кесепеттерге алып келет. Бул абдан татаал аймак болуп саналат, бирок буга чейин бул аялуу Ethereum тармагынын учурдагы нускасында бар экенин көрсөткөн бир нече изилдөөлөр бар жана алар көптөгөн акылдуу келишимдердин ишке ашпай калышына алып келиши мүмкүн.

Дагы бир чоң кыйынчылык, бул кемчилик деп эсептесе болот. Бул практикалык же техникалык жактан сиз виртуалдык машинада аткарыла турган келишимдин байт кодун түзсөңүз, анда кандайдыр бир операциялардын белгилүү бир тартибин аныктай аласыз деген тыянакка келе аласыз. Бирге аткарылганда, бул операциялар виртуалдык машинаны абдан жүктөйт жана аны бул операцияларды аткаруу үчүн төлөнгөн акыга пропорционалдуу түрдө жайлатат.

Мурда Ethereumдун өнүгүшүнүн бир мезгили болгон, анда виртуалдык машинанын иштешин майда-чүйдөсүнө чейин түшүнгөн көптөгөн балдар ушундай алсыздыктарды табышкан. Чынында, транзакциялар өтө аз төлөмдү төлөгөн, бирок иш жүзүндө бүт тармакты жайлады. Бул көйгөйлөрдү чечүү өтө кыйын, анткени, биринчиден, аларды аныктоо, экинчиден, бул операцияларды аткаруу үчүн бааны тууралоо жана үчүнчүдөн, бардык тармак түйүндөрүн жаңы версияга жаңыртуу дегенди билдирет. программалык камсыздоону, андан кийин бул өзгөртүүлөрдү бир эле учурда активдештирүү.

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

Ошентип, макаланын тематикалык бөлүгү аяктады, келгиле, көп пайда болгон суроолорго өтөбүз.

Көп бериле турган суроолор

— Эгерде учурдагы акылдуу келишимдин бардык тараптары шарттарды өзгөртүүнү кааласа, алар multisig аркылуу бул акылдуу келишимди жокко чыгарып, андан кийин аны аткаруунун жаңыланган шарттары менен жаңы акылдуу келишим түзө алабы?

Бул жерде жооп эки тараптуу болот. Неге? Анткени, бир жагынан, акылдуу келишим бир жолу аныкталат жана ал мындан ары эч кандай өзгөртүүлөрдү билдирбейт, ал эми экинчи жагынан, кээ бир шарттарды толук же жарым-жартылай өзгөртүүнү караган алдын ала жазылган логикага ээ болушу мүмкүн. Башкача айтканда, эгер сиз акылдуу келишимиңизде бир нерсени өзгөрткүңүз келсе, анда сиз бул шарттарды жаңырта турган шарттарды жазып беришиңиз керек. Ошого жараша келишимди кайра жа-зууну мына ушундай кылдаттык менен гана уюштурууга болот. Бирок бул жерде да сиз кыйынчылыкка дуушар болушуңуз мүмкүн: кандайдыр бир ката кетирип, тиешелүү алсыздыкты аласыз. Ошондуктан, мындай нерселерди абдан кылдаттык менен долбоорлоо жана сыноо керек.

— Эгерде медиатор катышуучу тараптардын бири менен келишим түзсөчы: эскроубу же смарт-контрактпы? Акылдуу келишимде медиатор керекпи?

Акылдуу келишимде ортомчу талап кылынбайт. Ал жок болушу мүмкүн. Эгерде эскроу болгон учурда, медиатор тараптардын бири менен бүтүм түзсө, анда ооба, бул схема андан кийин кескин түрдө өзүнүн бардык баалуулугун жоготот. Ошондуктан медиаторлор бир эле учурда бул процесске катышкан бардык тараптардын ишенимине ээ боло тургандай кылып тандалып алынат. Демек, сиз ишенбеген ортомчу менен көп кол тамга дарекке тыйын которбойсуз.

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

Бул жакшы суроо жана ал Ethereum транзакция моделине тиешелүү жана ал Bitcoin моделинен кандайча айырмаланат. Жана айырма радикалдуу. Ethereum транзакция моделинде сиз жөн гана тыйындарды которсоңуз, анда алар бир даректен экинчи дарекке гана которулат, эч кандай өзгөрүү жок, жөн гана сиз көрсөткөн конкреттүү сумма. Башкача айтканда, бул сарпталбаган продукциянын (UTXO) модели эмес, эсептердин жана тиешелүү калдыктардын үлгүсү. Эгер сиз айлакер акылдуу келишимди жазсаңыз, бир транзакцияда бир эле учурда бир нече ар кандай токендерди жөнөтүү теориялык жактан мүмкүн, бирок сиз дагы эле көптөгөн транзакцияларды жасап, келишим түзүп, андан кийин ага токендерди жана монеталарды өткөрүп, анан тиешелүү ыкманы чакырышыңыз керек. . Бул күч жана убакытты талап кылат, ошондуктан иш жүзүндө андай иштебейт жана Ethereumдагы бардык төлөмдөр өзүнчө транзакцияларда жүргүзүлөт.

— Ethereum платформасы жөнүндө уламыштардын бири - бул тышкы интернет-ресурстун маалыматтарына көз каранды боло турган шарттарды сүрөттөп берүү мүмкүн эмес, анда эмне кылуу керек?

Чечим акылдуу келишимдин өзү тышкы дүйнөдөгү нерселердин абалы жөнүндө маалыматтарды чогултуп, атайын ыкмалар аркылуу акылдуу контракттарга өткөрүп берген бир же бир нече ишенимдүү оракулдарды камсыздай алат. Келишимдин өзү ишенимдүү тараптардан алынган маалыматтарды чындык деп эсептейт. Көбүрөөк ишенимдүүлүк үчүн, жөн гана оракулдардын чоң тобун тандап, алардын тил табышуу коркунучун азайтыңыз. Келишимдин өзү көпчүлүккө карама-каршы келген Oracles маалыматтарын эске албашы мүмкүн.

Blockchain боюнча онлайн курстун лекцияларынын бири ушул темага арналган - "Акылдуу келишимдерге киришүү«.

Source: www.habr.com

Комментарий кошуу