Hyrje në kontratat inteligjente

Në këtë artikull, ne do të shikojmë se çfarë janë kontratat inteligjente, cilat janë ato, do të njihemi me platforma të ndryshme të kontratave inteligjente, veçoritë e tyre dhe gjithashtu do të diskutojmë se si funksionojnë ato dhe çfarë avantazhesh mund të sjellin. Ky material do të jetë shumë i dobishëm për lexuesit që nuk e njohin mirë temën e kontratave inteligjente, por duan të afrohen me kuptimin e saj.

Kontrata e rregullt vs. kontratë inteligjente

Përpara se të thellohemi në detaje, le të marrim një shembull të dallimeve midis një kontrate të rregullt, e cila specifikohet në letër, dhe një kontrate inteligjente, e cila përfaqësohet në mënyrë dixhitale.

Hyrje në kontratat inteligjente

Si funksiononte kjo përpara ardhjes së kontratave inteligjente? Imagjinoni një grup njerëzish që duan të vendosin disa rregulla dhe kushte për shpërndarjen e vlerave, si dhe një mekanizëm të caktuar për të garantuar zbatimin e kësaj shpërndarjeje sipas rregullave dhe kushteve të dhëna. Më pas ata mblidheshin, hartonin një letër në të cilën shkruanin të dhënat e tyre të identifikimit, termat, vlerat e përfshira, datën e tyre dhe firmosnin. Kjo kontratë është vërtetuar edhe nga një palë e besuar, siç është noteri. Më tej, këta persona shkuan në drejtime të ndryshme me kopjen e tyre në letër të një kontrate të tillë dhe filluan të kryejnë disa veprime që mund të mos korrespondonin me vetë kontratën, domethënë ata bënin një gjë, por në letër vërtetohej se duhej të bënin diçka. krejtësisht të ndryshme. Dhe si të dilni nga kjo situatë? Në fakt, një nga anëtarët e grupit duhet të marrë këtë dokument, të marrë disa prova, ta çojë atë në gjykatë dhe të arrijë përputhjen midis kontratës dhe veprimeve aktuale. Shumë shpesh, është e vështirë të arrihet zbatimi i drejtë i kësaj kontrate, gjë që çon në pasoja të pakëndshme.

Çfarë mund të thuhet për kontratat inteligjente? Ato kombinojnë si mundësinë e shkrimit të kushteve të kontratës ashtu edhe mekanizmin e zbatimit të rreptë të tyre. Nëse kushtet janë vendosur dhe transaksioni ose kërkesa përkatëse është nënshkruar, atëherë pasi ajo kërkesë ose transaksion të jetë pranuar, nuk është më e mundur të ndryshohen kushtet ose të ndikohet në zbatimin e tyre.

Ekziston një vërtetues ose një rrjet i tërë, si dhe një bazë të dhënash që ruan të gjitha kontratat inteligjente që janë dorëzuar për ekzekutim në rend të rreptë kronologjik. Është gjithashtu e rëndësishme që kjo bazë të dhënash të përmbajë të gjitha kushtet e nxitjes për ekzekutimin e kontratës inteligjente. Përveç kësaj, duhet të marrë parasysh vetë vlerën, shpërndarja e së cilës përshkruhet në kontratë. Nëse kjo vlen për ndonjë monedhë dixhitale, atëherë kjo bazë të dhënash duhet ta marrë parasysh.

Me fjalë të tjera, vërtetuesit e kontratave inteligjente duhet të kenë akses në të gjitha të dhënat mbi të cilat funksionon kontrata e zgjuar. Për shembull, një bazë të dhënash e vetme duhet të përdoret për të llogaritur njëkohësisht monedhat dixhitale, bilancet e përdoruesve, transaksionet e përdoruesve dhe vulat kohore. Më pas, në një kontratë smart, kushti mund të jetë balanca e përdoruesit në një monedhë të caktuar, ardhja e një kohe të caktuar ose fakti që një transaksion i caktuar është kryer, por asgjë më shumë.

Përkufizimi i një kontrate të zgjuar

Në përgjithësi, vetë terminologjia u krijua nga studiuesi Nick Szabo dhe u përdor për herë të parë në 1994, dhe u dokumentua në vitin 1997 në një artikull që përshkruan vetë idenë e kontratave inteligjente.

Kontratat inteligjente nënkuptojnë se kryhet njëfarë automatizimi i shpërndarjes së vlerës, i cili mund të varet vetëm nga ato kushte që janë të paracaktuara paraprakisht. Në formën e saj më të thjeshtë, duket si një kontratë me kushte të përcaktuara rreptësisht, e cila nënshkruhet nga palë të caktuara.

Kontratat inteligjente janë krijuar për të minimizuar besimin tek palët e treta. Ndonjëherë qendra e vendimmarrjes nga e cila varet gjithçka përjashtohet plotësisht. Përveç kësaj, kontrata të tilla janë më të lehta për t'u audituar. Kjo është pasojë e disa veçorive të projektimit të një sistemi të tillë, por më shpesh ne kuptojmë me një kontratë inteligjente një mjedis të decentralizuar dhe praninë e funksioneve që lejojnë këdo të analizojë bazën e të dhënave dhe të kryejë një auditim të plotë të ekzekutimit të kontratave. Kjo siguron mbrojtje kundër ndryshimeve prapavepruese të të dhënave që do të sillnin ndryshime në zbatimin e vetë kontratës. Dixhitalizimi i shumicës së proceseve gjatë krijimit dhe lëshimit të një kontrate inteligjente shpesh thjeshton teknologjinë dhe koston e zbatimit të tyre.

Një shembull i thjeshtë - Shërbimi i ruajtjes

Le të shohim një shembull shumë të thjeshtë. Kjo do t'ju ndihmojë të arrini më afër të kuptoni funksionalitetin e kontratave inteligjente, si dhe të kuptoni më mirë në cilat raste ato duhet të përdoren.

Hyrje në kontratat inteligjente

Ai gjithashtu mund të zbatohet duke përdorur Bitcoin, megjithëse për momentin Bitcoin ende vështirë se mund të quhet një platformë e plotë për kontratat inteligjente. Pra, ne kemi disa blerës dhe kemi një dyqan online. Një klient dëshiron të blejë një monitor nga ky dyqan. Në rastin më të thjeshtë, blerësi plotëson dhe dërgon një pagesë, dhe dyqani online e pranon atë, e konfirmon dhe më pas i dërgon mallrat. Sidoqoftë, në këtë situatë ekziston nevoja për besim të madh - blerësi duhet t'i besojë dyqanit në internet për të gjithë koston e monitorit. Meqenëse një dyqan online mund të ketë një reputacion të ulët në sytë e blerësit, ekziston rreziku që për ndonjë arsye, pas pranimit të pagesës, dyqani të refuzojë shërbimin dhe të mos i dërgojë mallrat blerësit. Prandaj, blerësi shtron pyetjen (dhe, në përputhje me rrethanat, dyqani online e bën këtë pyetje) çfarë mund të zbatohet në këtë rast për të minimizuar rreziqe të tilla dhe për t'i bërë transaksione të tilla më të besueshme.

Në rastin e Bitcoin, është e mundur që blerësi dhe shitësi të zgjedhin në mënyrë të pavarur një ndërmjetës. Ka shumë njerëz që janë të përfshirë në zgjidhjen e çështjeve të diskutueshme. Dhe pjesëmarrësit tanë mund të zgjedhin nga një listë e përgjithshme ndërmjetësuesish atë që do t'i besojnë. Së bashku ata krijojnë një adresë 2 nga 3 me shumë nënshkrime ku ka tre çelësa dhe kërkohen dy nënshkrime me çdo dy çelësa për të shpenzuar monedha nga ajo adresë. Një çelës do t'i përkasë blerësit, i dyti dyqanit online dhe i treti ndërmjetësit. Dhe në një adresë të tillë me shumë nënshkrime, blerësi do të dërgojë shumën e nevojshme për të paguar për monitorin. Tani, kur shitësi sheh që paratë janë bllokuar për ca kohë në një adresë me shumë nënshkrime që varet prej tij, ai mund ta dërgojë me siguri monitorin me postë.

Më pas, blerësi merr parcelën, inspekton mallrat dhe merr një vendim për blerjen përfundimtare. Ai mund të jetë plotësisht dakord me shërbimin e ofruar dhe të nënshkruajë transaksionin me çelësin e tij, ku transferon monedha nga adresa me shumë nënshkrime te shitësi, ose mund të jetë i pakënaqur me diçka. Në rastin e dytë, ai kontakton një ndërmjetës për të bashkuar një transaksion alternativ që do t'i shpërndajë ato monedha ndryshe.

Le të themi se monitori erdhi pak i gërvishtur dhe kompleti nuk kishte një kabllo për t'u lidhur me kompjuterin, megjithëse në faqen e internetit të dyqanit online thuhej se kablloja duhet të përfshihej në komplet. Më pas blerësi mbledh provat e nevojshme për t'i vërtetuar ndërmjetësit se ai ishte mashtruar në këtë situatë: ai merr pamje nga ekrani i faqes, merr një foto të faturës së postës, merr një foto të gërvishtjeve në monitor dhe tregon se vula ishte u prish dhe kablloja u tërhoq. Dyqani online, nga ana tjetër, mbledh provat e tij dhe ia transferon ato ndërmjetësit.

Ndërmjetësi është i interesuar të kënaqë njëkohësisht indinjatën e blerësit dhe interesat e dyqanit në internet (do të bëhet e qartë pse më vonë). Ai përbën një transaksion në të cilin monedhat nga një adresë me shumë nënshkrime do të shpenzohen në një farë proporcioni midis blerësit, dyqanit online dhe ndërmjetësit, pasi ai merr një pjesë për vete si shpërblim për punën e tij. Le të themi se 90% e shumës totale i shkon shitësit, 5% ndërmjetësit dhe 5% kompensim blerësit. Ndërmjetësi e nënshkruan këtë transaksion me çelësin e tij, por ende nuk mund të zbatohet, sepse kërkon dy nënshkrime, por vetëm një ia vlen. Ai i dërgon një transaksion të tillë si blerësit ashtu edhe shitësit. Nëse të paktën njëri prej tyre është i kënaqur me këtë opsion për rishpërndarjen e monedhave, atëherë transaksioni do të nënshkruhet paraprakisht dhe do të shpërndahet në rrjet. Për ta vërtetuar atë, mjafton që njëra nga palët në transaksion të pajtohet me opsionin e ndërmjetësit.

Është e rëndësishme që fillimisht të zgjidhni një ndërmjetës në mënyrë që të dy pjesëmarrësit t'i besojnë atij. Në këtë rast, ai do të veprojë në mënyrë të pavarur nga interesat e njërit ose tjetrit dhe do të vlerësojë në mënyrë objektive situatën. Nëse ndërmjetësi nuk ofron një mundësi për shpërndarjen e monedhave që do të kënaqin të paktën një pjesëmarrës, atëherë, pasi të kenë rënë dakord së bashku, si blerësi ashtu edhe dyqani online mund t'i dërgojnë monedhat në një adresë të re me shumë nënshkrime duke vendosur dy nënshkrimet e tyre. Adresa e re me shumë nënshkrime do të përpilohet me një ndërmjetës tjetër, i cili mund të jetë më kompetent në këtë çështje dhe të ofrojë një mundësi më të mirë.

Shembull me një konvikt dhe një frigorifer

Le të shohim një shembull më kompleks që tregon aftësitë e një kontrate inteligjente në mënyrë më të qartë.

Hyrje në kontratat inteligjente

Le të themi se janë tre djem që kohët e fundit u transferuan në të njëjtën dhomë konvikti. Të tre janë të interesuar të blejnë një frigorifer për dhomën e tyre që mund ta përdorin së bashku. Njëri prej tyre doli vullnetar për të mbledhur shumën e nevojshme për të blerë një frigorifer dhe për të negociuar me shitësin. Mirëpo, ata vetëm së fundmi janë takuar me njëri-tjetrin dhe nuk ka besim të mjaftueshëm mes tyre. Natyrisht, dy prej tyre po rrezikojnë duke i dhënë para të tretit. Përveç kësaj, ata duhet të arrijnë një marrëveshje në zgjedhjen e një shitësi.

Ata mund të përdorin shërbimin e ruajtjes, domethënë të zgjedhin një ndërmjetës që do të monitorojë ekzekutimin e transaksionit dhe do të zgjidhë çështje të diskutueshme nëse lindin ndonjë. Pastaj, pasi ranë dakord, ata hartojnë një kontratë të zgjuar dhe përshkruajnë kushte të caktuara në të.

Kushti i parë është që para një kohe të caktuar, le të themi brenda një jave, llogaria përkatëse e kontratës inteligjente duhet të marrë tre pagesa nga adresa të caktuara për një shumë të caktuar. Nëse kjo nuk ndodh, kontrata inteligjente ndalon së ekzekutuari dhe ua kthen monedhat të gjithë pjesëmarrësve. Nëse kushti plotësohet, atëherë vendosen vlerat e identifikuesve të shitësit dhe ndërmjetësit dhe kontrollohet kushti që të gjithë pjesëmarrësit të pajtohen me zgjedhjen e shitësit dhe ndërmjetësit. Kur të plotësohen të gjitha kushtet, atëherë fondet do të transferohen në adresat e specifikuara. Kjo qasje mund t'i mbrojë pjesëmarrësit nga mashtrimet nga çdo anë dhe në përgjithësi eliminon nevojën për besim.

Ne shohim në këtë shembull vetë parimin që kjo aftësi për të vendosur parametra hap pas hapi për përmbushjen e çdo kushti ju lejon të krijoni sisteme të çdo kompleksiteti dhe thellësie të niveleve të mbivendosur. Përveç kësaj, fillimisht mund të përcaktoni kushtin e parë në kontratën inteligjente dhe vetëm pas përmbushjes së saj mund të vendosni parametra për kushtin tjetër. Me fjalë të tjera, kushti është shkruar zyrtarisht, dhe parametrat për të mund të vendosen tashmë gjatë funksionimit të tij.

Klasifikimi i kontratave inteligjente

Për klasifikim, mund të vendosni grupe të ndryshme kriteresh. Sidoqoftë, në momentin e zhvillimit të teknologjisë, katër prej tyre janë relevante.

Kontratat inteligjente mund të dallohen nga mjedisi i tyre i ekzekutimit, i cili mund të jetë ose i centralizuar ose i decentralizuar. Në rastin e decentralizimit, ne kemi një pavarësi shumë më të madhe dhe tolerancë ndaj gabimeve gjatë ekzekutimit të kontratave inteligjente.

Ato mund të dallohen edhe nga procesi i vendosjes dhe përmbushjes së kushteve: ato mund të jenë të programueshme lirisht, të kufizuara ose të paracaktuara, pra të shtypura rreptësisht. Kur ka vetëm 4 kontrata specifike inteligjente në platformën e kontratave inteligjente, parametrat për to mund të vendosen në çdo mënyrë. Prandaj, vendosja e tyre është shumë më e thjeshtë: ne zgjedhim një kontratë nga lista dhe kalojmë parametrat.

Sipas metodës së inicimit, ekzistojnë kontrata inteligjente të automatizuara, domethënë kur ndodhin kushte të caktuara, ato ekzekutohen vetë, dhe ka kontrata në të cilat specifikohen kushtet, por platforma nuk kontrollon automatikisht përmbushjen e tyre; për këtë ata duhet të inicohen veçmas.

Përveç kësaj, kontratat inteligjente ndryshojnë në nivelin e tyre të privatësisë. Ato mund të jenë plotësisht të hapura, pjesërisht ose plotësisht konfidenciale. Kjo e fundit do të thotë që vëzhguesit e palëve të treta nuk i shohin kushtet e kontratave inteligjente. Sidoqoftë, tema e privatësisë është shumë e gjerë dhe është më mirë ta konsideroni atë veçmas nga artikulli aktual.

Më poshtë do të hedhim një vështrim më të afërt në tre kriteret e para për të sjellë më shumë qartësi në kuptimin e temës aktuale.

Kontratat inteligjente sipas kohës së funksionimit

Hyrje në kontratat inteligjente

Bazuar në mjedisin e ekzekutimit, bëhet një dallim midis platformave të centralizuara dhe të decentralizuara të kontratave inteligjente. Në rastin e kontratave dixhitale të centralizuara, përdoret një shërbim i vetëm, ku ka vetëm një verifikues dhe mund të ketë një shërbim rezervë dhe rikuperimi, i cili gjithashtu menaxhohet nga qendra. Ekziston një bazë e të dhënave që ruan të gjithë informacionin e nevojshëm për të vendosur kushtet e kontratës inteligjente dhe për të shpërndarë vlerën që merret parasysh në këtë bazë të dhënash shërbimi. Një shërbim i tillë i centralizuar ka një klient që vendos kushte me kërkesa të caktuara dhe përdor kontrata të tilla. Për shkak të natyrës së centralizuar të platformës, mekanizmat e vërtetimit mund të jenë më pak të sigurt se në kriptovalutat.

Si shembull, mund të marrim ofruesit e komunikimit celular (operatorë të ndryshëm celularë). Le të themi se një operator i caktuar mban një regjistrim të centralizuar të trafikut në serverët e tij, i cili mund të transmetohet në formate të ndryshme, për shembull: në formën e thirrjeve zanore, transmetimit SMS, trafikut të internetit në celular dhe sipas standardeve të ndryshme, dhe gjithashtu mban shënime. të fondeve në bilancet e përdoruesve. Prandaj, ofruesi i komunikimeve celulare mund të hartojë kontrata për llogaritjen e shërbimeve të ofruara dhe pagesën e tyre me kushte të ndryshme. Në këtë rast, është e lehtë të vendosni kushte si "dërgoni një SMS me një kod të tillë në një numër të tillë dhe do të merrni kushtet e tilla për shpërndarjen e trafikut".

Mund të jepet edhe një shembull: bankat tradicionale me funksionalitet të zgjeruar të bankingut në internet dhe kontrata shumë të thjeshta si pagesat e rregullta, konvertimi automatik i pagesave në hyrje, zbritja automatike e interesit në një llogari të caktuar, etj.

Nëse po flasim për kontrata inteligjente me një mjedis ekzekutimi të decentralizuar, atëherë kemi një grup validatorësh. Në mënyrë ideale, çdokush mund të bëhet një vërtetues. Për shkak të protokollit të sinkronizimit të bazës së të dhënave dhe arritjes së konsensusit, ne kemi një bazë të dhënash të përbashkët që tani do të ruajë të gjitha transaksionet me kontrata të përshkruara rreptësisht, dhe jo disa pyetje të kushtëzuara, formatet e të cilave shpesh ndryshojnë dhe nuk ka specifikim të hapur. Këtu, transaksionet do të përmbajnë udhëzime për të ekzekutuar kontratën sipas një specifikimi të rreptë. Ky specifikim është i hapur dhe, për rrjedhojë, vetë përdoruesit e platformës mund të auditojnë dhe vërtetojnë kontratat inteligjente. Këtu shohim se platformat e decentralizuara janë superiore ndaj atyre të centralizuara për sa i përket pavarësisë dhe tolerancës së gabimeve, por dizajni dhe mirëmbajtja e tyre janë shumë më komplekse.

Kontratat inteligjente sipas metodës së vendosjes dhe përmbushjes së kushteve

Tani le të hedhim një vështrim më të afërt se si mund të ndryshojnë kontratat inteligjente në mënyrën se si vendosin dhe përmbushin kushtet. Këtu ne e drejtojmë vëmendjen tonë te kontratat inteligjente që janë të programueshme rastësisht dhe Turing të plotësuara. Një kontratë inteligjente e kompletuar me Turing ju lejon të vendosni pothuajse çdo algoritëm si kushte për ekzekutimin e kontratës: shkruani cikle, disa funksione për llogaritjen e probabiliteteve dhe të ngjashme - deri në algoritmet tuaja të nënshkrimit elektronik. Në këtë rast nënkuptojmë një shkrim vërtet arbitrar të logjikës.

Ka edhe kontrata të zgjuara arbitrare, por jo të plota Turing. Kjo përfshin Bitcoin dhe Litecoin me skenarin e tyre. Kjo do të thotë që ju mund të përdorni vetëm disa operacione në çdo mënyrë, por nuk mund të shkruani më sythe dhe algoritmet tuaja.

Përveç kësaj, ekzistojnë platforma të kontratave inteligjente që zbatojnë kontrata inteligjente të paracaktuara. Këto përfshijnë Bitshares dhe Steemit. Bitshares ka një sërë kontratash inteligjente për tregtimin, menaxhimin e llogarisë, menaxhimin e vetë platformës dhe parametrave të saj. Steemit është një platformë e ngjashme, por nuk është më e përqendruar në lëshimin e argumenteve dhe tregtimin, si Bitshares, por në blogging, d.m.th. ruan dhe përpunon përmbajtjen në një mënyrë të decentralizuar.

Kontratat arbitrare të kompletuara me Turing përfshijnë platformën Ethereum dhe RootStock, i cili është ende në zhvillim e sipër. Prandaj, më poshtë do të ndalemi pak më në detaje në platformën e kontratës inteligjente Ethereum.

Kontratat inteligjente sipas metodës së inicimit

Në bazë të metodës së inicimit, kontratat inteligjente gjithashtu mund të ndahen në të paktën dy grupe: të automatizuara dhe manuale (jo të automatizuara). Ato të automatizuara karakterizohen nga fakti se, duke pasur parasysh të gjithë parametrat dhe kushtet e njohura, kontrata inteligjente ekzekutohet plotësisht automatikisht, domethënë nuk kërkon dërgimin e ndonjë transaksioni shtesë dhe shpenzimin e një komisioni shtesë për çdo ekzekutim pasues. Vetë platforma ka të gjitha të dhënat për të llogaritur se si do të përfundojë kontrata inteligjente. Logjika atje nuk është arbitrare, por e paracaktuar dhe e gjithë kjo është e parashikueshme. Kjo do të thotë, ju mund të vlerësoni paraprakisht kompleksitetin e ekzekutimit të një kontrate të zgjuar, të përdorni një lloj komisioni të vazhdueshëm për të dhe të gjitha proceset për zbatimin e saj janë më efikase.

Për kontratat inteligjente që programohen lirisht, ekzekutimi nuk është i automatizuar. Për të nisur një kontratë të tillë inteligjente, praktikisht në çdo hap duhet të krijoni një transaksion të ri, i cili do të thërrasë fazën e ardhshme të ekzekutimit ose metodën tjetër të kontratës inteligjente, do të paguani komisionin e duhur dhe do të prisni që transaksioni të konfirmohet. Ekzekutimi mund të përfundojë me sukses ose jo, sepse kodi i kontratës inteligjente është arbitrar dhe mund të shfaqen disa momente të paparashikueshme, si një lak i përjetshëm, mungesa e disa parametrave dhe argumenteve, përjashtime të patrajtuara, etj.

Llogaritë Ethereum

Llojet e llogarisë Ethereum

Le të shohim se çfarë lloje llogarish mund të ketë në platformën Ethereum. Këtu ka vetëm dy lloje llogarish dhe nuk ka mundësi të tjera. Lloji i parë quhet një llogari përdoruesi, e dyta është një llogari kontratë. Le të kuptojmë se si ndryshojnë ato.

Llogaria e përdoruesit kontrollohet vetëm nga çelësi personal i nënshkrimit elektronik. Pronari i llogarisë gjeneron çiftin e tij të çelësave për nënshkrim elektronik duke përdorur algoritmin ECDSA (Elliptic Curve Digital Signature Algorithm). Vetëm transaksionet e nënshkruara me këtë çelës mund të ndryshojnë gjendjen e kësaj llogarie.

Një logjikë e veçantë ofrohet për llogarinë e kontratës inteligjente. Mund të kontrollohet vetëm nga kodi i paracaktuar i softuerit që përcakton plotësisht sjelljen e kontratës inteligjente: si do të menaxhojë monedhat e saj në rrethana të caktuara, me iniciativën e cilit përdorues dhe në çfarë kushtesh shtesë do të shpërndahen këto monedha. Nëse disa pika nuk parashikohen nga zhvilluesit në kodin e programit, mund të shfaqen probleme. Për shembull, një kontratë inteligjente mund të marrë një gjendje të caktuar në të cilën nuk pranon fillimin e ekzekutimit të mëtejshëm nga ndonjë prej përdoruesve. Në këtë rast, monedhat në të vërtetë do të ngrihen, sepse kontrata e zgjuar nuk parashikon daljen nga kjo gjendje.

Si krijohen llogaritë në Ethereum

Në rastin e një llogarie përdoruesi, pronari gjeneron në mënyrë të pavarur një çift çelësash duke përdorur ECDSA. Është e rëndësishme të theksohet se Ethereum përdor saktësisht të njëjtin algoritëm dhe saktësisht të njëjtën kurbë eliptike për nënshkrimet elektronike si Bitcoin, por adresa llogaritet në një mënyrë paksa të ndryshme. Këtu, rezultati i hashimit të dyfishtë nuk përdoret më, si në Bitcoin, por hashimi i vetëm ofrohet me funksionin Keccak në një gjatësi prej 256 bit. Bitët më pak të rëndësishëm janë shkëputur nga vlera që rezulton, përkatësisht 160 bitët më pak të rëndësishëm të vlerës hash të daljes. Si rezultat, ne marrim një adresë në Ethereum. Në fakt, ajo merr 20 bajt.

Ju lutemi vini re se identifikuesi i llogarisë në Ethereum është i koduar në hex pa aplikuar një shumë kontrolli, ndryshe nga Bitcoin dhe shumë sisteme të tjera, ku adresa është e koduar në një sistem numrash bazë 58 me shtimin e një kontrolli. Kjo do të thotë që duhet të jeni të kujdesshëm kur punoni me identifikuesit e llogarisë në Ethereum: edhe një gabim në identifikues është i garantuar të çojë në humbjen e monedhave.

Ekziston një veçori e rëndësishme dhe është që një llogari përdoruesi në nivelin e përgjithshëm të bazës së të dhënave krijohet në momentin kur ai pranon pagesën e parë hyrëse.

Krijimi i një llogarie të kontratës inteligjente kërkon një qasje krejtësisht të ndryshme. Fillimisht, një nga përdoruesit shkruan kodin burimor të kontratës inteligjente, pas së cilës kodi kalon përmes një përpiluesi të veçantë për platformën Ethereum, duke marrë bytekodin për makinën e tij virtuale Ethereum. Bajtkodi që rezulton vendoset në një fushë të veçantë të transaksionit. Është vërtetuar në emër të llogarisë së iniciatorit. Më pas, ky transaksion përhapet në të gjithë rrjetin dhe vendos kodin e kontratës inteligjente. Komisioni për transaksionin dhe, në përputhje me rrethanat, për ekzekutimin e kontratës tërhiqet nga gjendja e llogarisë së iniciatorit.

Çdo kontratë inteligjente përmban domosdoshmërisht konstruktorin e saj (të kësaj kontrate). Mund të jetë bosh ose mund të ketë përmbajtje. Pasi të ekzekutohet konstruktori, krijohet një identifikues i llogarisë së kontratës inteligjente, duke përdorur të cilin mund të dërgoni monedha, të telefononi disa metoda të caktuara të kontratës inteligjente, etj.

Struktura e transaksionit Ethereum

Për ta bërë më të qartë, ne do të fillojmë të shikojmë strukturën e një transaksioni Ethereum dhe një shembull kodi të kontratës inteligjente.

Hyrje në kontratat inteligjente

Një transaksion Ethereum përbëhet nga disa fusha. E para prej tyre, nonce, është një numër i caktuar serial i transaksionit në lidhje me vetë llogarinë që e shpërndan dhe është autori i tij. Kjo është e nevojshme për të dalluar transaksionet e dyfishta, domethënë për të përjashtuar rastin kur i njëjti transaksion pranohet dy herë. Duke përdorur një identifikues, çdo transaksion ka një vlerë unike hash.

Më pas vjen një fushë si çmimi i gazit. Kjo tregon çmimin me të cilin monedha bazë Ethereum konvertohet në gaz, i cili përdoret për të paguar për ekzekutimin e kontratës inteligjente dhe shpërndarjen e burimit të makinës virtuale. Çfarë do të thotë?

Në Bitcoin, tarifat paguhen drejtpërdrejt nga monedha bazë - vetë Bitcoin. Kjo është e mundur falë një mekanizmi të thjeshtë për llogaritjen e tyre: ne paguajmë në mënyrë rigoroze për sasinë e të dhënave që përmban transaksioni. Në Ethereum situata është më e ndërlikuar, sepse është shumë e vështirë të mbështetesh në vëllimin e të dhënave të transaksionit. Këtu, transaksioni mund të përmbajë gjithashtu kodin e programit që do të ekzekutohet në makinën virtuale dhe çdo operacion i makinës virtuale mund të ketë një kompleksitet të ndryshëm. Ekzistojnë gjithashtu operacione që shpërndajnë memorie për variablat. Ata do të kenë kompleksitetin e tyre, nga i cili do të varet pagesa për çdo operacion.

Kostoja e çdo operacioni në ekuivalentin e gazit do të jetë konstante. Është prezantuar posaçërisht për të përcaktuar koston konstante të çdo operacioni. Në varësi të ngarkesës në rrjet, çmimi i gazit do të ndryshojë, pra koeficienti sipas të cilit monedha bazë do të konvertohet në këtë njësi ndihmëse për të paguar komisionin.

Ekziston edhe një veçori tjetër e një transaksioni në Ethereum: bytekodi që ai përmban për ekzekutim në një makinë virtuale do të ekzekutohet derisa të përfundojë me ndonjë rezultat (sukses ose dështim) ose derisa një sasi e caktuar monedhash të alokuara të mbarojë për të paguar komisionin. . Është për të shmangur një situatë ku, në rast të ndonjë gabimi, të gjitha monedhat nga llogaria e dërguesit janë shpenzuar me komision (për shembull, një lloj cikli i përjetshëm i filluar në një makinë virtuale), ekziston fusha e mëposhtme - ndez gazin (shpesh quhet limit i gazit) - përcakton sasinë maksimale të monedhave që dërguesi është i gatshëm të shpenzojë për të përfunduar një transaksion të caktuar.

Fusha tjetër quhet adresa e destinacionit. Kjo përfshin adresën e marrësit të monedhave ose adresën e një kontrate specifike inteligjente, metodat e së cilës do të thirren. Pasi vjen fusha vlerë, ku shënohet sasia e monedhave që dërgohen në adresën e destinacionit.

Tjetra është një fushë interesante e quajtur të dhëna, ku përshtatet e gjithë struktura. Kjo nuk është një fushë e veçantë, por një strukturë e tërë në të cilën përcaktohet kodi për makinën virtuale. Këtu mund të vendosni të dhëna arbitrare - ka rregulla të veçanta për këtë.

Dhe fusha e fundit quhet nënshkrim. Ai përmban njëkohësisht nënshkrimin elektronik të autorit të këtij transaksioni dhe çelësin publik me të cilin do të verifikohet ky nënshkrim. Nga çelësi publik mund të merrni identifikuesin e llogarisë së dërguesit të këtij transaksioni, domethënë të identifikoni në mënyrë unike llogarinë e dërguesit në vetë sistem. Ne zbuluam gjënë kryesore në lidhje me strukturën e transaksionit.

Shembull kodi i kontratës inteligjente për Solidity

Le të hedhim një vështrim më të afërt në kontratën më të thjeshtë inteligjente duke përdorur një shembull.

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);
    }
}

Më sipër është një kod burim i thjeshtuar që mund të mbajë monedhat e përdoruesve dhe t'i kthejë ato sipas kërkesës.

Pra, ekziston një kontratë inteligjente e Bankës që kryen këto funksione: grumbullon monedha në bilancin e saj, domethënë kur një transaksion konfirmohet dhe vendoset një kontratë e tillë smart, krijohet një llogari e re që mund të përmbajë monedha në bilancin e saj; kujton përdoruesit dhe shpërndarjen e monedhave ndërmjet tyre; ka disa metoda për menaxhimin e bilanceve, domethënë është e mundur të rimbushni, tërhiqni dhe kontrolloni bilancin e përdoruesit.

Le të kalojmë nëpër secilën rresht të kodit burimor. Kjo kontratë ka fusha të vazhdueshme. Njëri prej tyre, me lloj adrese, quhet pronar. Këtu kontrata kujton adresën e përdoruesit që krijoi këtë kontratë inteligjente. Më tej, ekziston një strukturë dinamike që ruan korrespondencën midis adresave të përdoruesve dhe balancave.

Kjo ndiqet nga metoda e Bankës - ka të njëjtin emër si kontrata. Prandaj, ky është konstruktori i tij. Këtu variablit pronar i caktohet adresa e personit që vendosi këtë kontratë inteligjente në rrjet. Kjo është e vetmja gjë që ndodh në këtë konstruktor. Domethënë, msg në këtë rast janë pikërisht të dhënat që janë transferuar në makinën virtuale së bashku me transaksionin që përmban të gjithë kodin e kësaj kontrate. Prandaj, msg.sender është autori i këtij transaksioni që pret këtë kod. Ai do të jetë pronari i kontratës inteligjente.

Metoda e depozitimit ju lejon të transferoni një numër të caktuar monedhash në llogarinë e kontratës me transaksion. Në këtë rast, kontrata smart, duke marrë këto monedha, i lë në bilanc, por regjistron në strukturën e bilanceve se kush ka qenë saktësisht dërguesi i këtyre monedhave për të ditur se kujt i përkasin.

Metoda tjetër quhet tërheqje dhe kërkon një parametër - sasinë e monedhave që dikush dëshiron të tërheqë nga kjo bankë. Kjo kontrollon nëse ka monedha të mjaftueshme në bilancin e përdoruesit që thërret këtë metodë për t'i dërguar ato. Nëse ka mjaft prej tyre, atëherë vetë kontrata inteligjente ia kthen telefonuesit atë numër monedhash.

Më pas vjen metoda për kontrollimin e bilancit aktual të përdoruesit. Kushdo që e quan këtë metodë do të përdoret për të tërhequr këtë bilanc në kontratën inteligjente. Vlen të theksohet se modifikuesi i kësaj metode është pamja. Kjo do të thotë që vetë metoda nuk i ndryshon në asnjë mënyrë variablat e klasës së saj dhe në fakt është vetëm një metodë e lexuar. Asnjë transaksion i veçantë nuk krijohet për të thirrur këtë metodë, nuk paguhet asnjë tarifë dhe të gjitha llogaritjet kryhen në nivel lokal, pas së cilës përdoruesi merr rezultatin.

Metoda e vrasjes është e nevojshme për të shkatërruar gjendjen e kontratës inteligjente. Dhe këtu ka një kontroll shtesë nëse thirrësi i kësaj metode është pronari i kësaj kontrate. Nëse po, atëherë kontrata vetëshkatërrohet dhe funksioni i shkatërrimit merr një parametër - identifikuesin e llogarisë në të cilin kontrata do të dërgojë të gjitha monedhat e mbetura në bilancin e saj. Në këtë rast, monedhat e mbetura do të shkojnë automatikisht në adresën e pronarit të kontratës.

Si funksionon një nyje e plotë në rrjetin Ethereum?

Le të shohim në mënyrë skematike se si ekzekutohen kontrata të tilla inteligjente në platformën Ethereum dhe si funksionon një nyje e plotë e rrjetit.

Hyrje në kontratat inteligjente

Një nyje e plotë në rrjetin Ethereum duhet të ketë të paktën katër module.
I pari, si për çdo protokoll të decentralizuar, është moduli i rrjetit P2P - një modul për lidhjen në rrjet dhe punën me nyje të tjera, ku shkëmbehen blloqe, transaksione dhe informacione rreth nyjeve të tjera. Ky është një komponent tradicional për të gjitha kriptovalutat e decentralizuara.

Më pas, ne kemi një modul për ruajtjen e të dhënave të blockchain, përpunimin, zgjedhjen e një dege prioritare, shtimin e blloqeve, shkëputjen e blloqeve, vërtetimin e këtyre blloqeve, etj.

Moduli i tretë quhet EVM (makina virtuale Ethereum) - kjo është një makinë virtuale që merr kode bajt nga transaksionet Ethereum. Ky modul merr gjendjen aktuale të një llogarie të caktuar dhe bën ndryshime në gjendjen e saj bazuar në bajtkodin e marrë. Versioni i makinës virtuale në secilën nyje të rrjetit duhet të jetë i njëjtë. Llogaritjet që bëhen në secilën nyje Ethereum janë saktësisht të njëjta, por ato ndodhin në mënyrë asinkrone: dikush e kontrollon dhe e pranon këtë transaksion më herët, domethënë ekzekuton të gjithë kodin që përmbahet në të, dhe dikush më vonë. Prandaj, kur krijohet një transaksion, ai shpërndahet në rrjet, nyjet e pranojnë atë dhe në momentin e verifikimit, në të njëjtën mënyrë që ekzekutohet Bitcoin Script në Bitcoin, këtu ekzekutohet bajtkodi i makinës virtuale.

Një transaksion konsiderohet i verifikuar nëse i gjithë kodi që përmbahet në të është ekzekutuar, një gjendje e re e një llogarie të caktuar është krijuar dhe ruajtur derisa të bëhet e qartë nëse ky transaksion është zbatuar apo jo. Nëse transaksioni zbatohet, atëherë kjo gjendje konsiderohet jo vetëm e përfunduar, por edhe aktuale. Ekziston një bazë të dhënash që ruan gjendjen e secilës llogari për secilën nyje të rrjetit. Për shkak të faktit se të gjitha llogaritjet ndodhin në të njëjtën mënyrë dhe gjendja e blockchain është e njëjtë, baza e të dhënave që përmban gjendjet e të gjitha llogarive do të jetë gjithashtu e njëjtë për secilën nyje.

Mitet dhe kufizimet e kontratave inteligjente

Sa i përket kufizimeve që ekzistojnë për platformat e kontratave inteligjente të ngjashme me Ethereum, mund të citohen sa vijon:

  • ekzekutimi i kodit;
  • alokimi i memories;
  • të dhënat e blockchain;
  • dërgoni pagesa;
  • të krijojë kontratë të re;
  • thirrni kontrata të tjera.

Le të shohim kufizimet që vendosen në një makinë virtuale dhe, në përputhje me rrethanat, të shpërndajmë disa mite rreth kontratave inteligjente. Në një makinë virtuale, e cila mund të jetë jo vetëm në Ethereum, por edhe në platforma të ngjashme, mund të kryeni operacione vërtet arbitrare logjike, domethënë të shkruani kodin dhe ai do të ekzekutohet atje, mund të ndani gjithashtu memorie. Megjithatë, tarifa paguhet veçmas për çdo operacion dhe për çdo njësi shtesë të memories së alokuar.

Më pas, makina virtuale mund të lexojë të dhëna nga baza e të dhënave blockchain në mënyrë që t'i përdorë këto të dhëna si një shkas për të ekzekutuar një ose një tjetër logjikë të kontratës inteligjente. Makina virtuale mund të krijojë dhe dërgojë transaksione, mund të krijojë kontrata të reja dhe metoda të thirrjeve të kontratave të tjera inteligjente që tashmë janë publikuar në rrjet: ekzistuese, të disponueshme, etj.

Miti më i zakonshëm është se kontratat inteligjente Ethereum mund të përdorin informacione nga çdo burim Interneti sipas kushteve të tyre. E vërteta është se një makinë virtuale nuk mund të dërgojë një kërkesë rrjeti në një burim informacioni të jashtëm në internet, domethënë është e pamundur të shkruhet një kontratë inteligjente që do të shpërndajë vlerën midis përdoruesve në varësi, të themi, se si është moti jashtë, ose kush fitoi ndonjë kampionat, ose bazuar në çfarë incidenti tjetër ka ndodhur në botën e jashtme, sepse informacioni për këto incidente thjesht nuk gjendet në bazën e të dhënave të vetë platformës. Kjo do të thotë, nuk ka asgjë në blockchain për këtë. Nëse nuk shfaqet atje, atëherë makina virtuale nuk mund t'i përdorë këto të dhëna si nxitës.

Disavantazhet e Ethereum

Le të rendisim ato kryesore. Disavantazhi i parë është se ka disa vështirësi në hartimin, zhvillimin dhe testimin e kontratave inteligjente në Ethereum (Ethereum përdor gjuhën Solidity për të shkruar kontrata inteligjente). Në të vërtetë, praktika tregon se një përqindje shumë e madhe e të gjitha gabimeve i përkasin faktorit njerëzor. Kjo është në të vërtetë e vërtetë për kontratat inteligjente të shkruara tashmë të Ethereum që kanë kompleksitet mesatar ose më të lartë. Nëse për kontratat e thjeshta inteligjente probabiliteti i një gabimi është i vogël, atëherë në kontratat inteligjente komplekse ka shumë shpesh gabime që çojnë në vjedhjen e fondeve, ngrirjen e tyre, shkatërrimin e kontratave inteligjente në mënyrë të papritur etj. Shumë raste të tilla tashmë janë i njohur.

Disavantazhi i dytë është se vetë makina virtuale nuk është e përsosur, pasi është shkruar edhe nga njerëzit. Ai mund të ekzekutojë komanda arbitrare, dhe këtu qëndron cenueshmëria: një numër komandash mund të konfigurohen në një mënyrë të caktuar që do të çojë në pasoja të paparashikuara paraprakisht. Kjo është një fushë shumë komplekse, por tashmë ka disa studime që tregojnë se këto dobësi ekzistojnë në versionin aktual të rrjetit Ethereum dhe ato mund të çojnë në dështimin e shumë kontratave inteligjente.

Një tjetër vështirësi e madhe, mund të konsiderohet si një disavantazh. Ai qëndron në faktin se praktikisht ose teknikisht mund të arrini në përfundimin se nëse përpiloni bytekodin e një kontrate që do të ekzekutohet në një makinë virtuale, mund të përcaktoni një rend specifik të operacioneve. Kur kryhen së bashku, këto operacione do të ngarkojnë shumë makinën virtuale dhe do ta ngadalësojnë atë në mënyrë disproporcionale me tarifën që është paguar për kryerjen e këtyre operacioneve.

Në të kaluarën, kishte tashmë një periudhë në zhvillimin e Ethereum, kur shumë djem që kuptuan në detaje funksionimin e një makine virtuale gjetën dobësi të tilla. Në fakt, transaksionet paguanin një tarifë shumë të vogël, por praktikisht ngadalësuan të gjithë rrjetin. Këto probleme janë shumë të vështira për t'u zgjidhur, pasi është e nevojshme, së pari, të përcaktohen ato, së dyti, të rregullohet çmimi për kryerjen e këtyre operacioneve dhe, së treti, të kryhet një fork i fortë, që nënkupton përditësimin e të gjitha nyjeve të rrjetit në një version të ri. të softuerit, dhe më pas aktivizimi i njëkohshëm i këtyre ndryshimeve.

Sa i përket Ethereum, janë kryer shumë kërkime, është fituar shumë përvojë praktike: pozitive dhe negative, por megjithatë mbeten vështirësi dhe dobësi që ende duhet të trajtohen disi.

Pra, pjesa tematike e artikullit ka përfunduar, le të kalojmë në pyetjet që lindin mjaft shpesh.

FAQ

— Nëse të gjitha palët në një kontratë ekzistuese inteligjente duan të ndryshojnë kushtet, a mund ta anulojnë këtë kontratë inteligjente duke përdorur multisig dhe më pas të krijojnë një kontratë të re inteligjente me kushte të përditësuara të ekzekutimit të saj?

Përgjigja këtu do të jetë e dyfishtë. Pse? Sepse nga njëra anë, një kontratë inteligjente përcaktohet një herë dhe nuk nënkupton më asnjë ndryshim, dhe nga ana tjetër mund të ketë logjikë të parashkruar që parashikon ndryshimin e plotë ose të pjesshëm të disa kushteve. Kjo do të thotë, nëse doni të ndryshoni diçka në kontratën tuaj inteligjente, atëherë duhet të përshkruani kushtet në të cilat mund t'i përditësoni këto kushte. Prandaj, vetëm në një mënyrë kaq të kujdesshme mund të organizohet rinovimi i kontratës. Por edhe këtu mund të hasni në telashe: bëni ndonjë gabim dhe merrni një cenueshmëri përkatëse. Prandaj, gjëra të tilla duhet të jenë shumë të detajuara dhe të dizajnuara dhe të testuara me kujdes.

— Po sikur ndërmjetësi të hyjë në një marrëveshje me një nga palët pjesëmarrëse: kontratë ruajtjeje ose smart? A kërkohet një ndërmjetës në një kontratë inteligjente?

Një ndërmjetës nuk kërkohet në një kontratë inteligjente. Mund të mos ekzistojë. Nëse, në rastin e ruajtjes, ndërmjetësi hyn në një komplot me njërën nga palët, atëherë po, atëherë kjo skemë humbet ndjeshëm të gjithë vlerën e saj. Prandaj, ndërmjetësuesit përzgjidhen në atë mënyrë që të kenë besim nga të gjitha palët e përfshira në këtë proces në të njëjtën kohë. Prandaj, thjesht nuk do të transferoni monedha në një adresë me shumë nënshkrime me një ndërmjetës që nuk i besoni.

— A është e mundur me një transaksion Ethereum të transferoni shumë argumente të ndryshëm nga adresa juaj në adresa të ndryshme të synuara, për shembull, të shkëmbeni adresa ku tregtohen këto tokena?

Kjo është një pyetje e mirë dhe ka të bëjë me modelin e transaksionit Ethereum dhe se si ai ndryshon nga modeli Bitcoin. Dhe ndryshimi është radikal. Nëse në modelin e transaksionit Ethereum thjesht transferoni monedha, atëherë ato transferohen vetëm nga një adresë në tjetrën, pa ndryshim, vetëm shuma specifike që keni specifikuar. Me fjalë të tjera, ky nuk është një model i rezultateve të pashpenzuara (UTXO), por një model i llogarive dhe bilanceve përkatëse. Teorikisht është e mundur të dërgoni disa shenja të ndryshme në një transaksion në të njëjtën kohë nëse shkruani një kontratë dinak të zgjuar, por do t'ju duhet të bëni shumë transaksione, të krijoni një kontratë, pastaj të transferoni argumente dhe monedha në të dhe më pas të telefononi metodën e duhur . Kjo kërkon përpjekje dhe kohë, kështu që në praktikë nuk funksionon kështu dhe të gjitha pagesat në Ethereum bëhen në transaksione të veçanta.

— Një nga mitet për platformën Ethereum është se është e pamundur të përshkruhen kushtet që do të varen nga të dhënat e një burimi të jashtëm të internetit, kështu që çfarë të bëjmë atëherë?

Zgjidhja është se vetë kontrata inteligjente mund të sigurojë një ose më shumë të ashtuquajtur orakuj të besuar, të cilët mbledhin të dhëna për gjendjen e gjërave në botën e jashtme dhe ia transmetojnë ato kontratave inteligjente përmes metodave speciale. Vetë kontrata i konsideron të vërteta të dhënat që ajo ka marrë nga palët e besuara. Për besueshmëri më të madhe, thjesht zgjidhni një grup të madh orakujsh dhe minimizoni rrezikun e marrëveshjes së tyre të fshehtë. Vetë kontrata mund të mos marrë parasysh të dhënat nga orakujt që kundërshtojnë shumicën.

Një nga leksionet e kursit në internet për Blockchain i kushtohet kësaj teme - "Hyrje në kontratat inteligjente".

Burimi: www.habr.com

Shto një koment