Smart Contracts-en sarrera

Artikulu honetan, kontratu adimendunak zer diren, zer diren aztertuko dugu, kontratu adimendunen plataforma desberdinak ezagutuko ditugu, haien ezaugarriak, eta nola funtzionatzen duten eta zer abantaila ekar ditzaketen ere eztabaidatuko dugu. Material hau oso erabilgarria izango da kontratu adimendunen gaia ondo ezagutzen ez duten baina ulertzera hurbildu nahi duten irakurleentzat.

Ohiko kontratua vs. kontratu adimenduna

Xehetasunetan sakondu baino lehen, har ditzagun adibide bat paperean zehazten den kontratu arrunt baten eta digitalki irudikatzen den kontratu adimendunaren arteko desberdintasunen artean.

Smart Contracts-en sarrera

Nola funtzionatu zuen kontratu adimentsuak iritsi aurretik? Imajinatu pertsona talde bat balioak banatzeko arau eta baldintza batzuk ezarri nahi dituena, baita emandako arau eta baldintzen arabera banaketa hori gauzatzea bermatzeko mekanismo jakin bat ere. Ondoren, elkartzen ziren, paper bat egiten zuten, non euren identifikazio-datuak, baldintzak, inplikatutako balioak idatzi, datatu eta sinatzen zituzten. Kontratu hori konfiantzazko alderdi batek ere egiaztatu zuen, hala nola notario batek. Gainera, pertsona hauek norabide ezberdinetan joan ziren halako kontratu baten paperezko kopiarekin eta kontratuarekin bat ez zezaketen ekintza batzuk egiten hasi ziren, hau da, gauza bat egin zuten, baina paperean zerbait egin behar zutela ziurtatu zuten. guztiz ezberdina. Eta nola atera egoera honetatik? Izan ere, taldeko kide batek paper hori hartu, froga batzuk hartu, epaitegietara eraman eta kontratuaren eta benetako ekintzen arteko betetzea lortu behar du. Askotan, zaila da kontratu hau bidezko gauzatzea, eta horrek ondorio desatseginak ekartzen ditu.

Zer esan daiteke kontratu adimendunen inguruan? Kontratuaren baldintzak idazteko aukera eta haien ezarpen zorrotzerako mekanismoa uztartzen dituzte. Baldintzak ezarri eta dagokion transakzio edo eskaera sinatu bada, eskaera edo transakzio hori onartu ondoren, ezin izango da baldintzak aldatu edo horien ezarpenean eragin.

Balidatzaile bat edo sare oso bat dago, baita exekuziorako aurkeztu ziren kontratu adimentsu guztiak ordena kronologiko zorrotzean gordetzen dituen datu-base bat ere. Garrantzitsua da datu-base honek kontratu adimenduna gauzatzeko abiarazle-baldintza guztiak eduki behar izatea. Horrez gain, kontuan hartu behar da zeinen banaketa kontratuan azaltzen den balioa bera. Hau moneta digital bati aplikatzen bazaio, datu-base honek kontuan hartu beharko luke.

Beste era batera esanda, kontratu adimendunen baliozkotzaileek kontratu adimendunak funtzionatzen duten datu guztietarako sarbidea izan behar dute. Adibidez, datu-base bakarra erabili behar da moneta digitalak, erabiltzaileen saldoak, erabiltzaileen transakzioak eta denbora-zigiluak aldi berean kontabilizatzeko. Orduan, kontratu adimendun batean, baldintza izan daiteke erabiltzailearen saldoa moneta jakin batean, denbora jakin baten etorrera edo transakzio jakin bat egin izana, baina ezer gehiago.

Kontratu adimendunaren definizioa

Oro har, terminologia bera Nick Szabo ikertzaileak asmatu zuen eta 1994an erabili zen lehen aldiz, eta 1997an dokumentatu zen kontratu adimendunen ideia bera deskribatzen duen artikulu batean.

Kontratu adimendunek balioaren banaketaren nolabaiteko automatizazioa egiten dela adierazten dute, eta hori aldez aurretik zehaztutako baldintzen araberakoa izan daiteke. Bere formarik sinpleenean, zorrozki zehaztutako baldintzak dituen kontratu bat dirudi, zeina alderdi batzuek sinatzen dutena.

Kontratu adimentsuak hirugarrenengan konfiantza murrizteko diseinatuta daude. Batzuetan dena menpe dagoen erabaki-zentroa guztiz baztertuta geratzen da. Gainera, horrelako kontratuak errazagoak dira ikuskatzeko. Sistema horren diseinu-ezaugarri batzuen ondorioa da, baina gehienetan kontratu adimendun baten bidez ulertzen dugu ingurune deszentralizatua eta edonork datu-basea aztertzeko eta kontratuen exekuzioaren auditoria osoa egiteko aukera ematen duten funtzioen presentzia. Horrek, kontratuaren betearazpenean aldaketak ekarriko lituzkeen datu-aldaketen aurkako babesa bermatzen du. Kontratu adimendun bat sortu eta abiarazteko prozesu gehienen digitalizazioak askotan sinplifikatzen ditu haien ezarpenaren teknologia eta kostua.

Adibide sinple bat - Fidantza zerbitzua

Ikus dezagun oso adibide sinple bat. Kontratu adimendunen funtzionaltasuna ulertzera hurbiltzen lagunduko dizu, baita zein kasutan erabili behar diren hobeto ulertzen ere.

Smart Contracts-en sarrera

Bitcoin erabiliz ere inplementa daiteke, nahiz eta oraintxe bertan Bitcoin oraindik ere nekez deitu daitekeen kontratu adimentsuetarako plataforma osorik. Beraz, erosle batzuk ditugu eta lineako denda bat dugu. Bezero batek denda honetako monitore bat erosi nahi du. Kasurik errazenean, erosleak ordainketa bat osatu eta bidaltzen du, eta lineako dendak onartzen du, baieztatzen du eta, ondoren, salgaiak bidaltzen ditu. Hala ere, egoera honetan konfiantza handia behar da - erosleak lineako denda fidatu behar du monitorearen kostu osoa. Lineako denda batek eroslearen aurrean ospe txikia izan dezakeenez, arrazoiren batengatik, ordainketa onartu ondoren, dendak zerbitzuari uko egingo dion eta ondasunak erosleari ez bidaltzeko arriskua dago. Hori dela eta, erosleak galdera egiten dio (eta, horren arabera, lineako dendak galdera hau) zer aplikatu daitekeen kasu honetan, arrisku horiek gutxitzeko eta transakzio horiek fidagarriagoak izan daitezen.

Bitcoin-en kasuan, posible da erosleari eta saltzaileari bitartekari bat aukeratzeko aukera ematea. Asko dira gai eztabaidagarriak konpontzen parte hartzen dutenak. Eta gure parte-hartzaileek bitartekarien zerrenda orokor batetik aukeratu ahal izango dute konfiantza izango dutena. Elkarrekin sinadura anitzeko 2tik 3ko helbidea sortzen dute, non hiru gako dauden eta bi edozein gako dituzten bi sinadura behar diren helbide horretatik txanponak gastatzeko. Gako bat eroslearena izango da, bigarrena online dendarena eta hirugarrena bitartekariarena. Eta sinadura anitzeko helbide honetara erosleak monitorea ordaintzeko beharrezkoa den zenbatekoa bidaliko du. Orain, saltzaileak bere menpeko sinadura anitzeko helbide batean dirua denbora batez blokeatuta dagoela ikusten duenean, segurtasunez bidali dezake monitorea postaz.

Ondoren, erosleak paketea jasotzen du, salgaiak ikuskatzen ditu eta azken erosketa erabakitzen du. Ematen den zerbitzuarekin guztiz ados egon daiteke eta transakzioa bere giltzarekin sinatuko du, non sinadura anitzeko helbidetik txanponak saltzaileari transferitzen dizkion, edo baliteke zerbaitekin konforme ez egotea. Bigarren kasuan, bitartekari batekin harremanetan jartzen da txanpon horiek modu ezberdinean banatuko dituen transakzio alternatibo bat osatzeko.

Demagun monitorea apur bat marraztuta iritsi dela eta kitak ez zuen ordenagailura konektatzeko kablerik barne, nahiz eta online dendaren webguneak kablea kitan sartu behar zela esan. Ondoren, erosleak behar diren frogak biltzen ditu bitartekariari egoera horretan engainatuta zegoela frogatzeko: gunearen pantaila-argazkiak hartzen ditu, posta-ordainagiriaren argazkia ateratzen du, monitorearen marradurak ateratzen ditu eta zigilua zela erakusten du. hautsi eta kablea atera zuten. Online dendak, berriz, bere frogak bildu eta bitartekariari lagatzen dizkio.

Bitartekariari interesatzen zaio eroslearen haserrea eta lineako dendaren interesak aldi berean asetzea (gero argituko da zergatik). Sinadura anitzeko helbide bateko txanponak eroslearen, lineako dendaren eta bitartekariaren artean proportzio batean gastatuko diren transakzio bat da, zati bat beretzat hartzen baitu bere lanaren sari gisa. Demagun zenbateko osoaren %90a saltzaileari doala, %5a bitartekariari eta %5eko kalte-ordaina erosleari. Bitartekariak transakzio hau bere giltzarekin sinatzen du, baina oraindik ezin da aplikatu, bi sinadura behar dituelako, baina bakarrak merezi du. Halako transakzio bat bidaltzen die erosleari zein saltzaileari. Horietako bat gutxienez txanponak birbanatzeko aukera honekin pozik badago, transakzioa aurrez sinatuko da eta sarera banatuko da. Baliozkotzeko, nahikoa da transakzioaren aldeetako bat bitartekariaren aukerarekin ados egotea.

Garrantzitsua da hasieran bitartekari bat aukeratzea, bi parte-hartzaileek harengan konfiantza izan dezaten. Kasu horretan, baten edo bestearen interesen arabera jokatuko du eta objektiboki baloratuko du egoera. Bitartekariak ez badu aukerarik ematen gutxienez parte-hartzaile bat asetuko duten txanponak banatzeko, orduan, elkarrekin adostu ondoren, bai erosleak eta bai online dendak txanponak sinadura anitzeko helbide berri batera bidal ditzakete euren bi sinadura jarriz. Sinadura anitzeko helbide berria beste bitartekari batekin osatuko da, gaian eskumen handiagoa izan eta aukera hobea eman dezakeena.

Adibidea logela eta hozkailu batekin

Ikus dezagun kontratu adimendun baten gaitasunak modu esplizituagoan erakusten dituen adibide konplexuago bat.

Smart Contracts-en sarrera

Demagun hiru mutil daudela duela gutxi gela berean bizitzera. Hirurek euren gelako hozkailu bat erosteko interesa dute, elkarrekin erabil dezaketen. Horietako bat boluntario aurkeztu zen hozkailu bat erosteko eta saltzailearekin negoziatzeko behar den zenbatekoa jasotzeko. Hala ere, duela gutxi ezagutu zuten elkar eta ez dago haien artean konfiantza nahikorik. Bistan denez, horietako bi arriskua hartzen ari dira hirugarrenari dirua emanez. Horrez gain, saltzailea aukeratzeko akordioa lortu behar dute.

Fidantza-zerbitzua erabil dezakete, hau da, transakzioaren exekuzioaren jarraipena egingo duen bitartekari bat aukeratu eta gai eztabaidagarriak sortuz gero ebatziko ditu. Gero, adostuta, kontratu adimenduna egiten dute eta baldintza batzuk ezartzen dituzte bertan.

Lehenengo baldintza da epe jakin bat baino lehen, esate baterako, astebeteko epean, dagokion kontratu adimendunaren kontuak helbide jakin batzuetatik hiru ordainketa jaso behar dituela kopuru jakin baten truke. Hori gertatzen ez bada, kontratu adimendunak exekuzioari uzten dio eta txanponak itzultzen dizkie parte-hartzaile guztiei. Baldintza betetzen bada, saltzailearen eta bitartekariaren identifikatzaileen balioak ezartzen dira, eta baldintza egiaztatzen da parte-hartzaile guztiak ados daudela saltzailearen eta bitartekariaren aukeraketarekin. Baldintza guztiak betetzen direnean, funtsak zehaztutako helbideetara transferituko dira. Ikuspegi honek parte-hartzaileak edozein aldetatik iruzurretik babes ditzake eta, oro har, konfiantza izateko beharra kentzen du.

Adibide honetan ikusten dugu baldintza bakoitza betetzeko parametroak pausoz pauso ezartzeko gaitasun honek edozein konplexutasun eta sakontasuneko sistemak sortzeko aukera ematen duela habiaratutako mailetan. Horrez gain, lehenengo baldintza kontratu adimendunean defini dezakezu, eta hura bete ondoren bakarrik ezarri ahal izango dituzu hurrengo baldintzarako parametroak. Beste era batera esanda, baldintza formalki idatzita dago, eta haren parametroak jada ezar daitezke bere funtzionamenduan zehar.

Kontratu adimendunen sailkapena

Sailkapenerako, irizpide talde desberdinak ezar ditzakezu. Hala ere, teknologiaren garapenaren momentuan, horietako lau garrantzitsuak dira.

Kontratu adimendunak beren exekuzio ingurunearen arabera bereiz daitezke, zentralizatua edo deszentralizatua izan daitekeena. Deszentralizazioaren kasuan, askoz ere independentzia eta akatsen tolerantzia handiagoa dugu kontratu adimendunak gauzatzean.

Baldintzak ezartzeko eta betetzeko prozesuaren arabera ere bereiz daitezke: libreki programagarriak, mugatuak edo aurrez definituak izan daitezke, hau da, zorrozki idatziak. Smart Contract plataforman 4 kontratu adimendun zehatz soilik daudenean, horien parametroak edozein modutan ezar daitezke. Horren arabera, horiek ezartzea askoz errazagoa da: zerrendatik kontratu bat hautatzen dugu eta parametroak pasatzen ditugu.

Hasierako metodoaren arabera, kontratu adimentsu automatizatuak daude, hau da, baldintza batzuk gertatzen direnean, autoexekutatzen dira, eta badira baldintzak zehazten diren kontratuak, baina plataformak ez du automatikoki betetzen diren egiaztatzen; horretarako bereizita hasi behar dira.

Gainera, kontratu adimendunak pribatutasun mailan aldatzen dira. Erabat irekiak, partzialki edo guztiz isilpekoak izan daitezke. Azken horrek esan nahi du hirugarrenen behatzaileek ez dituztela kontratu adimendunen baldintzak ikusten. Dena den, pribatutasunaren gaia oso zabala da eta hobe da oraingo artikulutik bereizita kontuan hartzea.

Jarraian, lehen hiru irizpideak sakonago aztertuko ditugu egungo gaiaren ulermenari argitasun handiagoa emateko.

Kontratu adimendunak exekuzio-denboraren arabera

Smart Contracts-en sarrera

Exekuzio ingurunean oinarrituta, kontratu adimendunen plataforma zentralizatuak eta deszentralizatuak bereizten dira. Kontratu digital zentralizatuen kasuan, zerbitzu bakarra erabiltzen da, non baliozkotzaile bakarra dagoen eta segurtasun-kopia eta berreskuratze-zerbitzu bat egon daitekeen, zentralki kudeatzen dena ere. Kontratu adimendunaren baldintzak ezartzeko eta zerbitzu datu-base honetan kontuan hartzen den balioa banatzeko beharrezko informazio guztia gordetzen duen datu-base bat dago. Horrelako zerbitzu zentralizatu batek eskaera batzuekin baldintzak ezartzen dituen eta halako kontratuak erabiltzen dituen bezero bat du. Plataformaren izaera zentralizatua dela eta, autentifikazio-mekanismoak kripto-monetan baino seguruagoak izan daitezke.

Adibide gisa, komunikazio mugikorren hornitzaileak har ditzakegu (operadore mugikor desberdinak). Demagun operadore jakin batek bere zerbitzarietan trafikoaren erregistro zentralizatua gordetzen duela, formatu ezberdinetan transmititu daitekeena, adibidez: ahots-deien moduan, SMS-en transmisioan, Interneteko mugikorrentzako trafikoa, eta estandar ezberdinen arabera, eta erregistroak ere gordetzen ditu. erabiltzailearen saldoetan funtsak. Horren arabera, komunikazio mugikorreko hornitzaileak kontratuak egin ditzake emandako zerbitzuak kontabilizatzeko eta horien ordainketa baldintza ezberdinekin. Kasu honetan, erraza da baldintzak ezartzea: "SMS bat bidali halako eta halako kode batekin halako eta halako zenbaki batera eta halako eta halako baldintzak jasoko dituzu trafikoa banatzeko".

Adibide bat gehiago jar daiteke: Interneteko bankuaren funtzionaltasun hedatua duten banku tradizionalak eta kontratu oso sinpleak, hala nola ohiko ordainketak, sarrerako ordainketak automatikoki bihurtzea, interesak kontu zehatz batean kenkari automatikoa, etab.

Exekuzio ingurune deszentralizatua duten kontratu adimendunez ari bagara, baliozkotzaile talde bat dugu. Egokiena, edonor bihur daiteke baliozkotzaile. Datu-baseak sinkronizatzeko protokoloa dela eta, adostasuna lortzea dela eta, datu-base komun batzuk ditugu orain zorrozki deskribatutako kontratuekin transakzio guztiak gordeko dituena, eta ez baldintzapeko kontsulta batzuk, formatuak askotan aldatzen baitira eta ez dago zehaztapen irekirik. Hemen, transakzioek kontratua zehaztapen zorrotz baten arabera gauzatzeko argibideak izango dituzte. Zehaztapen hau irekia da eta, beraz, plataformako erabiltzaileek beraiek kontratu adimendunak ikuskatu eta balioztatu ditzakete. Hemen ikusten dugu plataforma deszentralizatuak zentralizatuak baino handiagoak direla independentziari eta akatsen tolerantziari dagokionez, baina haien diseinua eta mantentzea askoz konplexuagoak dira.

Kontratu adimentsuak baldintzak ezarri eta betetzeko metodoaren arabera

Orain ikus dezagun gertuagotik nola kontratu adimendunak desberdinak izan daitezkeen baldintzak ezarri eta betetzeko moduan. Hemen ausaz programagarriak diren eta Turing osoa duten kontratu adimendunei erreparatzen diegu. Turing-eko kontratu adimendunak ia edozein algoritmo ezar ditzakezu kontratua gauzatzeko baldintza gisa: idazteko zikloak, probabilitateak kalkulatzeko funtzio batzuk eta antzekoak, zure sinadura elektronikoko algoritmoetaraino. Kasu honetan, logikaren idazketa benetan arbitrarioa esan nahi dugu.

Kontratu adimentsu arbitrarioak ere badaude, baina ez Turing osoak. Horrek Bitcoin eta Litecoin barne hartzen ditu bere gidoiarekin. Horrek esan nahi du eragiketa jakin batzuk bakarrik erabil ditzakezula edozein ordenatan, baina jada ezin dituzula begiztak eta zure algoritmoak idatzi.

Horrez gain, aurrez definitutako kontratu adimendunak ezartzen dituzten kontratu adimendunen plataformak daude. Horien artean daude Bitshares eta Steemit. Bitshares-ek kontratu adimendunen sorta du merkataritzarako, kontuen kudeaketarako, plataforma beraren eta bere parametroen kudeaketarako. Steemit antzeko plataforma bat da, baina jada ez dago tokenak jaulkitzera eta merkataritzara bideratzen, Bitshares bezala, blogean baizik, hau da, edukia modu deszentralizatuan gordetzen eta prozesatzen du.

Turing-arbitrarioko kontratuen artean Ethereum plataforma eta RootStock daude, oraindik garatzen ari dena. Hori dela eta, behean Ethereum kontratu adimendunaren plataforman sakonduko dugu.

Kontratu adimentsuak hasierako metodoaren arabera

Hasteko metodoaren arabera, kontratu adimendunak ere gutxienez bi taldetan bana daitezke: automatizatuak eta eskuzkoak (ez automatizatuak). Automatizatuen ezaugarriak dira, ezagutzen diren parametro eta baldintza guztiak kontuan hartuta, kontratu adimenduna erabat automatikoki gauzatzen dela, hau da, ez du eskatzen transakzio gehigarririk bidaltzea eta komisio gehigarri bat gastatzea ondorengo exekuzio bakoitzean. Plataformak berak datu guztiak ditu kontratu adimenduna nola osatuko den kalkulatzeko. Hor logika ez da arbitrarioa, aurrez zehaztua baizik eta hau guztia aurreikus daiteke. Hau da, kontratu adimendun bat exekutatzeko konplexutasuna aldez aurretik kalkulatu dezakezu, horretarako etengabeko komisio bat erabili eta ezartzeko prozesu guztiak eraginkorragoak dira.

Aske programatzen diren kontratu adimendunetarako, exekuzioa ez da automatizatuta. Halako kontratu adimendun bat hasteko, ia urrats guztietan transakzio berri bat sortu behar duzu, hurrengo exekuzio fasera edo hurrengo kontratu adimendun metodora deituko duena, dagokion komisioa ordaindu eta transakzioa berresten den arte itxaron. Exekuzioa arrakastaz burutu daiteke edo ez, kontratu adimendunaren kodea arbitrarioa delako eta ezusteko une batzuk ager daitezkeelako, hala nola, betiko begizta bat, parametro eta argumentu batzuen falta, kudeatu gabeko salbuespenak, etab.

Ethereum kontuak

Ethereum kontu motak

Ikus dezagun zer motatako kontuak egon daitezkeen Ethereum plataforman. Hemen bi kontu mota baino ez daude eta ez dago beste aukerarik. Lehenengo motari erabiltzaile-kontu deitzen zaio, bigarrenari kontratu-kontu bat da. Ikus dezagun nola desberdintzen diren.

Erabiltzaile-kontua sinadura elektronikoaren gako pertsonalak soilik kontrolatzen du. Kontuaren jabeak bere gako-parea sortzen du sinadura elektronikorako ECDSA (Elliptic Curve Digital Signature Algorithm) algoritmoa erabiliz. Gako honekin sinatutako transakzioek soilik alda dezakete kontu honen egoera.

Logika bereizi bat eskaintzen da kontratu adimendunaren konturako. Kontratu adimendunaren portaera guztiz zehazten duen aurrez definitutako software-kodearen bidez bakarrik kontrola daiteke: nola kudeatuko dituen bere txanponak egoera jakin batzuetan, zein erabiltzaileren ekimenez eta zein baldintza gehigarritan banatuko diren txanpon horiek. Garatzaileek programaren kodean puntu batzuk ematen ez badituzte, arazoak sor daitezke. Esate baterako, kontratu adimendun batek egoera jakin bat jaso dezake, non erabiltzaileetako inongo exekuzio gehiago hastea onartzen ez duen. Kasu honetan, txanponak benetan izoztu egingo dira, kontratu adimendunak ez duelako egoera horretatik irteteko aukera ematen.

Nola sortzen diren kontuak Ethereum-en

Erabiltzaile-kontu baten kasuan, jabeak modu independentean sortzen du gako-pare bat ECDSA erabiliz. Garrantzitsua da Ethereum-ek Bitcoin-en algoritmo bera eta kurba eliptiko berdina erabiltzen dituela sinadura elektronikoetarako, baina helbidea modu apur bat ezberdin batean kalkulatzen da. Hemen, hashing bikoitzaren emaitza jada ez da erabiltzen, Bitcoin-en bezala, baina hashing bakarra Keccak funtzioarekin ematen da 256 biteko luzeran. Bit esanguratsuenak ateratzen diren baliotik mozten dira, hots, irteerako hash balioaren 160 bit esanguratsuenak. Ondorioz, helbide bat lortuko dugu Ethereum-en. Izan ere, 20 byte hartzen ditu.

Kontuan izan Ethereum-en kontu-identifikatzailea hex-ean kodetzen dela checksum bat aplikatu gabe, Bitcoin eta beste sistema askotan ez bezala, non helbidea 58 zenbaki-sistema oinarrian kodetzen den checksum bat gehituz. Horrek esan nahi du kontuz ibili behar duzula Ethereum-en kontu-identifikatzaileekin lan egitean: identifikatzailean akats batek ere txanponak galtzea bermatuta dago.

Ezaugarri garrantzitsu bat dago eta datu-base orokorren mailan erabiltzaile-kontu bat sortzen dela da, sarrerako lehen ordainketa onartzen duen unean.

Kontratu adimendunaren kontu bat sortzeak ikuspegi guztiz ezberdina hartzen du. Hasieran, erabiltzaileetako batek kontratu adimendunaren iturburu-kodea idazten du, eta ondoren kodea Ethereum plataformarako konpilatzaile berezi batetik pasatzen da, bere Ethereum makina birtualerako bytecodea lortuz. Sortzen den bytecodea transakzioaren eremu berezi batean jartzen da. Hasierako kontuaren izenean ziurtatzen da. Ondoren, transakzio hau sarean zehar hedatzen da eta kontratu adimendunaren kodea jartzen du. Eragiketaren komisioa eta, horren ondorioz, kontratua gauzatzeko komisioa abiarazlearen kontuaren saldotik kentzen da.

Kontratu adimendun bakoitzak nahitaez dauka bere eraikitzailea (kontratu honena). Baliteke hutsik egotea edo edukia edukitzea. Eraikitzailea exekutatu ondoren, kontratu adimendunen kontuaren identifikatzaile bat sortzen da, zeinaren bidez txanponak bidal ditzakezu, kontratu adimendun metodo batzuetara deitu eta abar.

Ethereum Transakzio Egitura

Argiago geratzeko, Ethereum transakzio baten egitura eta kontratu adimendun kode adibide bat aztertzen hasiko gara.

Smart Contracts-en sarrera

Ethereum transakzio batek hainbat eremu ditu. Horietako lehena, nonce, banatzen duen eta bere egilea den kontuarekiko transakzioaren serie-zenbaki jakin bat da. Hori beharrezkoa da transakzio bikoitzak bereizteko, hau da, transakzio bera bi aldiz onartzen den kasua baztertzeko. Identifikatzaile bat erabiliz, transakzio bakoitzak hash balio bakarra du.

Hurrengoa bezalako eremu bat dator gasaren prezioa. Honek Ethereum oinarrizko moneta gas bihurtzen den prezioa adierazten du, kontratu adimenduna gauzatzeko eta makina birtualaren baliabidearen esleipena ordaintzeko erabiltzen dena. Zer esan nahi du?

Bitcoin-en, kuotak oinarrizko moneta-k β€”Bitcoinek berakβ€” ordaintzen ditu zuzenean. Hori posible da horiek kalkulatzeko mekanismo sinple bati esker: zorrozki ordaintzen dugu transakzioan jasotako datu kopuruagatik. Ethereum-en egoera konplikatuagoa da, transakzioen datuen bolumenean fidatzea oso zaila delako. Hemen, transakzioak makina birtualean exekutatuko den programa-kodea ere eduki dezake, eta makina birtualeko eragiketa bakoitzak konplexutasun desberdina izan dezake. Aldagaietarako memoria esleitzen duten eragiketak ere badaude. Bere konplexutasuna izango dute, eta horren araberakoa izango da eragiketa bakoitzaren ordainketa.

Gas baliokidean eragiketa bakoitzaren kostua konstantea izango da. Eragiketa bakoitzaren kostu konstantea zehazteko berariaz aurkezten da. Sareko kargaren arabera, gasaren prezioa aldatuko da, hau da, koefizientea zeinaren arabera oinarrizko dibisa unitate laguntzaile honetan bihurtuko den komisioa ordaintzeko.

Ethereum-en transakzio baten beste ezaugarri bat ere badago: makina birtualean exekutatzeko daukan byte-kodea exekutatu egingo da emaitzaren batekin osatu arte (arrakasta edo porrota) edo esleitutako txanpon kopuru jakin bat komisioa ordaintzeko agortu arte. . Egoera bat ekiditeko da, akatsen bat gertatuz gero, bidaltzailearen kontuko txanpon guztiak komisioan gastatu ziren (adibidez, makina birtualean abiarazitako betiko ziklo bat), honako eremu hau dago: gasa martxan jarri (askotan gas-muga deitzen zaio) - igorleak transakzio jakin bat burutzeko gastatzeko prest dagoen txanpon kopuru maximoa zehazten du.

Hurrengo eremuari deitzen zaio helmuga helbidea. Horrek txanponen hartzailearen helbidea edo zeinen metodoak deituko diren smart contract zehatz baten helbidea barne hartzen ditu. Ondoren zelaia dator balioa, non helmuga helbidera bidaltzen diren txanpon kopurua sartzen den.

Hurrengoa eremu interesgarri bat da datuak, non egitura osoa sartzen den. Hau ez da eremu bereizia, makina birtualaren kodea definitzen den egitura oso bat baizik. Hemen datu arbitrarioak jar ditzakezu - horretarako arau bereiziak daude.

Eta azken eremuari deitzen zaio Sinadura. Aldi berean, transakzio honen egilearen sinadura elektronikoa eta sinadura hori egiaztatuko den gako publikoa ditu. Gako publikotik transakzio honen igorlearen kontu-identifikatzailea lor dezakezu, hau da, igorlearen kontua sisteman bertan identifikatzea. Transakzioaren egiturari buruzko gauza nagusia aurkitu dugu.

Solidity-rako kontratu adimendunaren kodearen adibidea

Ikus dezagun orain kontratu adimendun errazena adibide bat erabiliz.

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

Goian iturburu-kode sinplifikatu bat dago, erabiltzaileen txanponak eduki ditzakeena eta eskaeraren arabera itzul ditzakeena.

Beraz, Bankuaren kontratu adimendun bat dago funtzio hauek betetzen dituena: bere saldoan txanponak pilatzen ditu, hau da, transakzio bat berresten denean eta halako kontratu adimenduna jartzen denean, bere saldoan txanponak izan ditzakeen kontu berri bat sortzen da; erabiltzaileak eta haien arteko txanponen banaketa gogoan ditu; saldoak kudeatzeko hainbat metodo ditu, hau da, erabiltzailearen saldoa berritu, atera eta egiaztatzeko aukera dago.

Goazen iturburu-kodearen lerro bakoitzean. Kontratu honek etengabeko eremuak ditu. Horietako bat, helbide mota duena, jabea deitzen da. Hemen kontratuak smart contract hau sortu duen erabiltzailearen helbidea gogoratzen du. Gainera, erabiltzailearen helbideen eta balantzeen arteko korrespondentzia mantentzen duen egitura dinamiko bat dago.

Bankuaren metodoa jarraitzen du - kontratuaren izen bera du. Horren arabera, hau da bere eraikitzailea. Hemen jabearen aldagaiari kontratu adimendun hau sarean jarri duen pertsonaren helbidea esleitzen zaio. Hau da eraikitzaile honetan gertatzen den gauza bakarra. Hau da, msg kasu honetan kontratu honen kode osoa duen transakzioarekin batera makina birtualera transferitu diren datuak dira. Horren arabera, msg.sender da kode hau hartzen duen transakzio honen egilea. Kontratu adimendunaren jabea izango da.

Gordailu-metodoak txanpon kopuru jakin bat kontratuaren kontura transferitzeko aukera ematen du transakzio bidez. Kasu honetan, kontratu adimendunak, txanpon hauek jasoz, bere balantzean uzten ditu, baina balantzeen egituran erregistratzen du nor izan zen zehatz-mehatz txanpon horien igorlea norenak diren jakiteko.

Hurrengo metodoari erretiratzea deitzen zaio eta parametro bat hartzen du: norbaitek banku honetatik atera nahi duen txanpon kopurua. Honek metodo hau deitzen duen erabiltzailearen saldoan txanpon nahikoa dagoen egiaztatzen du horiek bidaltzeko. Nahikoa bada, kontratu adimendunak berak txanpon kopuru hori itzultzen dio deitzaileari.

Ondoren, erabiltzailearen egungo saldoa egiaztatzeko metodoa dator. Metodo hau deitzen duenak kontratu adimendunean saldo hori berreskuratzeko erabiliko du. Aipatzekoa da metodo honen aldatzailea ikuspegia dela. Horrek esan nahi du metodoak berak ez dituela bere klaseko aldagaiak inola ere aldatzen eta egia esan irakurketa metodo bat baino ez dela. Metodo hau deitzeko ez da transakzio bereizirik sortzen, ez da kuotarik ordaintzen eta kalkulu guztiak lokalean egiten dira, eta ondoren erabiltzaileak emaitza jasotzen du.

Hiltzeko metodoa behar da kontratu adimendunaren egoera suntsitzeko. Eta hemen metodo honen deitzailea kontratu honen jabea den egiaztapen gehigarri bat dago. Hala bada, kontratua autosuntsitzen da eta suntsipen funtzioak parametro bat hartzen du - kontratuak saldoan geratzen diren txanpon guztiak bidaliko dizkion kontu-identifikatzailea. Kasu honetan, gainerako txanponak automatikoki joango dira kontratuaren jabearen helbidera.

Nola funtzionatzen du Ethereum sareko nodo oso batek?

Ikus dezagun eskematikoki nola gauzatzen diren kontratu adimentsuak Ethereum plataforman eta sareko nodo oso batek nola funtzionatzen duen.

Smart Contracts-en sarrera

Ethereum sareko nodo oso batek gutxienez lau modulu izan behar ditu.
Lehenengoa, edozein protokolo deszentralizaturik bezala, P2P sareko modulua da - sareko konexiorako eta beste nodo batzuekin lan egiteko modulua, non blokeak, transakzioak eta beste nodoei buruzko informazioa trukatzen diren. Hau kripto-moneta deszentralizatu guztien osagai tradizionala da.

Jarraian, bloke-katearen datuak gordetzeko, prozesatzeko, lehentasunezko adar bat aukeratzeko, blokeak eransteko, blokeak deskonektatzeko, bloke horiek baliozkotzeko, etab.

Hirugarren modulua EVM (Ethereum virtual machine) deitzen da - Ethereum transakzioetatik bytecode jasotzen duen makina birtuala da. Modulu honek kontu jakin baten egungo egoera hartzen du eta bere egoeran aldaketak egiten ditu jasotako byte-kodean oinarrituta. Sare-nodo bakoitzeko makina birtualaren bertsioak berdina izan behar du. Ethereum nodo bakoitzean egiten diren kalkuluak berdinak dira, baina modu asinkronoan gertatzen dira: norbaitek transakzio hori lehenago egiaztatu eta onartzen du, hau da, bertan dagoen kode guztia exekutatzen du, eta norbaitek geroago. Horren arabera, transakzio bat sortzen denean, sarera banatzen da, nodoek onartzen dute, eta egiaztapenaren unean, Bitcoin Script-en Bitcoin-en exekutatzen den modu berean, makina birtualaren bytecodea exekutatzen da hemen.

Transakzio bat egiaztatutzat hartzen da bertan jasotako kode guztia exekutatu bada, kontu jakin baten egoera berri bat sortu eta gorde bada transakzio hori aplikatu den edo ez argitu arte. Transakzioa aplikatzen bada, egoera hau amaituta ez ezik, egungoa ere hartzen da. Sare-nodo bakoitzaren kontu bakoitzaren egoera gordetzen duen datu-base bat dago. Kalkulu guztiak modu berean gertatzen direnez eta bloke-katearen egoera berdina denez, kontu guztien egoerak dituen datu-basea ere berdina izango da nodo bakoitzeko.

Kontratu adimendunen mitoak eta mugak

Ethereum-en antzeko kontratu adimendunen plataformetarako dauden murrizketei dagokienez, honako hauek aipa daitezke:

  • kodearen exekuzioa;
  • memoria esleitu;
  • blockchain datuak;
  • ordainketak bidali;
  • kontratu berria sortu;
  • beste kontratu batzuk deitu.

Ikus ditzagun makina birtual bati ezartzen zaizkion murrizketak, eta, horren arabera, uxatu kontratu adimendunen inguruko zenbait mito. Ethereum-en ez ezik, antzeko plataformetan ere egon daitekeen makina birtualean, eragiketa logiko benetan arbitrarioak egin ditzakezu, hau da, kodea idatzi eta bertan exekutatuko da, memoria esleitu dezakezu. Hala ere, kuota bereiz ordaintzen da eragiketa bakoitzeko eta esleitutako memoria-unitate gehigarri bakoitzeko.

Ondoren, makina birtualak blockchain datu-baseko datuak irakur ditzake datu horiek abiarazle gisa erabiltzeko kontratu adimendunaren logika bat edo beste exekutatzeko. Makina birtualak transakzioak sortu eta bidali ditzake, kontratu berriak sor ditzake eta sarean dagoeneko argitaratuta dauden beste kontratu adimendunen dei-metodoak: daudenak, eskuragarriak, etab.

Mitorik ohikoena da Ethereum kontratu adimendunek Interneteko edozein baliabidetako informazioa erabil dezaketela beren baldintzetan. Egia esan, makina birtual batek ezin du sareko eskaerarik bidali Interneteko kanpoko informazio-baliabide batzuetara, hau da, ezinezkoa da kontratu adimendun bat idaztea, erabiltzaileen artean balioa banatuko duena, esate baterako, kanpoan dagoen eguraldiaren arabera. edo txapelketaren bat irabazi duena, edo kanpoko munduan gertatutako beste gertakarien arabera, gertakari horiei buruzko informazioa ez baitago plataformaren beraren datu basean. Hau da, ez dago ezer blockchain-en honi buruz. Bertan agertzen ez bada, makina birtualak ezin ditu datu hauek erabili abiarazle gisa.

Ethereum-en desabantailak

Zerrenda ditzagun nagusiak. Lehenengo desabantaila Ethereum-en kontratu adimendunak diseinatzeko, garatzeko eta probatzeko zailtasun batzuk daudela da (Ethereum-ek Solidity hizkuntza erabiltzen du kontratu adimendunak idazteko). Izan ere, praktikak erakusten du errore guztien ehuneko oso handi bat giza faktoreari dagokiola. Hau egia da jada idatzitako Ethereum kontratu adimendunetarako, batez besteko konplexutasuna edo handiagoa dutenak. Kontratu adimendun sinpleetarako errore bat izateko probabilitatea txikia bada, kontratu adimendun konplexuetan funtsak lapurtzea, haien izoztea, kontratu adimendunak ustekabean suntsitzea etab. ezagunak.

Bigarren desabantaila da makina birtuala bera ez dela perfektua, jendeak idatzia baita. Agindu arbitrarioak exekutatu ditzake, eta hor dago ahultasuna: komando batzuk modu jakin batean konfigura daitezke, aldez aurretik aurreikusi gabeko ondorioak ekarriko dituztenak. Oso eremu konplexua da, baina dagoeneko badaude hainbat ikerketak erakusten duten ahultasun horiek Ethereum sarearen egungo bertsioan daudela eta kontratu adimendun askoren porrota ekar dezaketela.

Beste zailtasun handi bat, desabantailatzat har daiteke. Izan ere, praktikoki edo teknikoki makina birtualean gauzatuko den kontratu baten byte-kodea konpilatzen baduzu, eragiketen ordena zehatz batzuk zehaztu ditzakezula datza. Elkarrekin egiten direnean, eragiketa hauek makina birtuala asko kargatuko dute eta neurrigabe motelduko dute eragiketa horiek egiteagatik ordaindu zen kuotarekin alderatuta.

Iraganean, jada bazegoen Ethereum-en garapenean, makina birtual baten funtzionamendua zehatz-mehatz ulertzen zuten mutil askok halako ahuleziak aurkitu zituztenean. Izan ere, transakzioek oso kuota txikia ordaintzen zuten, baina ia sare osoa moteldu zuten. Arazo hauek konpontzen oso zailak dira, beharrezkoa baita, lehenik, horiek zehaztea, bigarrenik, eragiketa hauek egiteko prezioa doitzea eta, hirugarrenik, hard fork bat egitea, hau da, sareko nodo guztiak bertsio berri batera eguneratzea. softwarearena, eta gero aldaketa horien aldi berean aktibatzea.

Ethereum-i dagokionez, ikerketa asko egin dira, esperientzia praktiko handia lortu da: bai positiboak bai negatiboak, baina, hala ere, oraindik nolabait landu beharreko zailtasunak eta ahuleziak geratzen dira.

Beraz, artikuluaren atal tematikoa osatu da, joan gaitezen sarritan sortzen diren galderetara.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

β€” Dauden kontratu adimendun bateko alderdi guztiek baldintzak aldatu nahi badituzte, kontratu adimendun hau ezeztatu al dezakete multisig erabiliz, eta, ondoren, kontratu adimendun berri bat sortu bere exekuzioaren baldintzak eguneratuta?

Hemen erantzuna bikoitza izango da. Zergatik? Alde batetik, kontratu adimenduna behin definitzen delako eta jada ez duelako aldaketarik suposatzen, eta, bestetik, baldintza batzuen aldaketa osoa edo partziala ematen duen aurrez idatzitako logika izan dezakeelako. Hau da, zure kontratu adimendunean zerbait aldatu nahi baduzu, baldintza hauek eguneratzeko baldintzak ezarri behar dituzu. Horren arabera, modu zuhur horretan bakarrik antola daiteke kontratuaren berritzea. Baina hemen ere arazoak izan ditzakezu: akatsen bat egin eta dagokion ahultasuna lortu. Hori dela eta, horrelako gauzak oso zehatzak eta arretaz diseinatu eta probatu behar dira.

β€” Zer gertatzen da bitartekariak hitzarmen bat egiten badu parte-hartzaileetako batekin: fidantza edo smart contract? Kontratu adimendun batean bitartekari bat behar al da?

Kontratu adimendun batean ez da bitartekaririk behar. Baliteke ez egotea. Garraioaren kasuan, bitartekariak alderdietako batekin konspirazio batean sartzen bada, orduan bai, eskema honek bere balio guztia galtzen du. Hori dela eta, bitartekariak hautatzen dira, prozesu honetan parte hartzen duten alderdi guztiek aldi berean konfiantza izateko moduan. Horrenbestez, ez dituzu txanponak sinadura anitzeko helbide batera transferituko fidatzen ez zaren bitartekari batekin.

β€” Posible al da Ethereum transakzio batekin token ezberdin asko zure helbidetik helburu-helbide desberdinetara transferitzea, adibidez, token horiek trukatzen diren helbideetara?

Galdera ona da eta Ethereum transakzio ereduari dagokio eta Bitcoin eredutik nola desberdintzen den. Eta aldea erradikala da. Ethereum transakzio ereduan txanponak transferitzen badituzu, helbide batetik bestera soilik transferitzen dira, aldaketarik gabe, zehaztu duzun kopuru zehatza besterik ez. Hau da, hau ez da gastatu gabeko irteeren eredua (UTXO), kontuen eta dagozkion saldoen eredua baizik. Teorian posible da transakzio batean hainbat token bidaltzea aldi berean kontratu adimendun maltzur bat idazten baduzu, baina hala ere transakzio asko egin beharko dituzu, kontratu bat sortu, gero tokenak eta txanponak transferitu eta gero metodo egokia deitu. . Horrek esfortzua eta denbora eskatzen du, beraz, praktikan ez du horrela funtzionatzen eta Ethereum-en ordainketa guztiak transakzio bereizietan egiten dira.

β€” Ethereum plataformari buruzko mitoetako bat ezinezkoa dela Interneteko kanpoko baliabide baten datuen araberakoak izango diren baldintzak deskribatzea da, orduan zer egin?

Irtenbidea da kontratu adimendunak berak konfiantzazko orakulu deritzon bat edo gehiago eskain ditzakeela, kanpoko munduan dauden gauzen egoerari buruzko datuak biltzen dituztenak eta kontratu adimendunei metodo berezien bidez transmititzen zaizkiela. Kontratuak berak egiatzat hartzen ditu konfiantzazko alderdiengandik jasotako datuak. Fidagarritasun handiagoa lortzeko, besterik gabe, aukeratu orakulu talde handi bat eta murriztu haien elkarlanaren arriskua. Kontratuak berak ezin ditu gehiengoaren kontraesanean dauden orakuluen datuak kontuan hartu.

Blockchain-i buruzko lineako ikastaroko hitzaldietako bat gai honi eskainita dago - "Smart Contracts-en sarrera".

Iturria: www.habr.com

Gehitu iruzkin berria