Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Ondoren, Move hizkuntzaren ezaugarri nagusiak zehatz-mehatz aztertuko ditugu eta zeintzuk diren kontratu adimentsuetarako dagoeneko ezaguna den beste hizkuntza batekin dituen desberdintasun nagusiak - Solidity (Ethereum plataforman). Materiala sarean eskuragarri dagoen 26 orrialdeko liburu zuriaren azterketan oinarritzen da.

Sarrera

Move bytecode hizkuntza exekutagarria da, erabiltzaileen transakzioak eta kontratu adimendunak exekutatzeko erabiltzen dena. Kontuan izan bi puntu:

  1. Move Move makina birtualean zuzenean exekutatu daitekeen bytecode-lengoaia den arren, Solidity (Ethereum-en kontratu adimendunaren lengoaia) goi-mailako hizkuntza bat da, eta bytecode-n konpilatzen dena EVM (Ethereum Virtual Machine ) batean exekutatu aurretik.
  2. Mugitu kontratu adimendunak ezartzeko ez ezik, transakzio pertsonalizatuetarako ere erabil daiteke (geroago honi buruz gehiago), Solidity kontratu adimendunen hizkuntza soilik den bitartean.


Itzulpena INDEX Protocol proiektuko taldeak egin du. Dagoeneko itzuli dugu Libra proiektua deskribatzen duen material handia, orain Move hizkuntzari xehetasun apur bat gehiago aztertzeko garaia da. Itzulpena Habrauserrekin batera egin da coolsiu

Move-ren funtsezko ezaugarri bat logika linealean oinarritutako semantikaren bidez baliabide mota pertsonalizatuak definitzeko gaitasuna da: baliabide bat ezin da inoiz kopiatu edo inplizituki ezabatu, mugitu bakarrik. Funtzionalki, Rust hizkuntzaren gaitasunen antzekoa da. Rust-en balioak izen bati bakarrik esleitu daitezke aldi berean. Beste izen bati balio bat esleituz gero, ez dago erabilgarri aurreko izenarekin.

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Adibidez, kode zati honek errore bat emango du: Mugitutako 'x' balioaren erabilera. Hau da Rust-en zabor bilketarik ez dagoelako. Aldagaiak esparrutik kanpo ateratzen direnean, aipatzen duten memoria ere askatzen da. Besterik gabe, datuen "jabe" bakarra egon daiteke. Adibide honetan x jatorrizko jabea da eta gero y jabe berria bihurtzen da. Irakurri gehiago jokabide honi buruz hemen.

Aktibo digitalak sistema irekietan irudikatzea

Digitalki irudikatzeko zailak diren aktibo fisikoen bi propietate daude:

  • Bitxikeria (Eskaria, jatorriz eskasia). Sistemako aktibo kopurua (emisioa) kontrolatu behar da. Dauden aktiboak bikoiztea debekatu egin behar da, eta berriak sortzea eragiketa pribilegiatua da.
  • Sarbide kontrola... Sistemako parte-hartzaileak aktiboak babestu ahal izan behar ditu sarbidea kontrolatzeko politikak erabiliz.

Aktibo fisikoentzat naturalak diren bi ezaugarri hauek objektu digitaletarako ezarri behar dira aktibotzat hartu nahi baditugu. Adibidez, metal arraro batek - eskasia naturala du, eta zuk bakarrik daukazu sarbidea (eskuetan edukiz, adibidez) eta saldu edo gastatu dezakezu.

Bi propietate horietara nola iritsi garen ilustratzeko, has gaitezen esaldi hauekin:

1. iradokizuna: Eskasirik eta Sarbide Kontrolik gabeko araurik sinpleena

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

  • G [K]: = n tekla baten bidez eskura daitekeen zenbaki baten eguneratzea adierazten du К blockchain-aren egoera globalean, esanahi berri batekin n.
  • transakzioa ⟨Alice, 100⟩ Aliceren kontuaren saldoa 100ean jartzea esan nahi du.

Goiko irtenbideak hainbat arazo nagusi ditu:

  • Alicek txanpon kopuru mugagabea jaso dezake, besterik gabe, bidaliz transakzioa ⟨Alice, 100⟩.
  • Alicek Bobi bidaltzen dizkion txanponek ez dute ezertarako balio, Bobek bere buruari txanpon kopuru mugagabea bidal baitezake teknika bera erabiliz.

2. iradokizuna: defizita kontuan hartuz

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Orain egoeraren jarraipena egiten ari gara txanpon kopurua Ka berdina izan zen behintzat n transferentzia transakzioa baino lehen. Hala ere, honek eskasiaren arazoa konpontzen duen arren, ez dago Aliceren txanponak nork bidali ditzakeen informaziorik (oraingoz, edonork egin dezake hori, gauza nagusia zenbatekoa mugatzeko araua ez haustea da).

3. proposamena: eskasia eta sarbide-kontrola uztartzea

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Arazo hau sinadura digitalaren mekanismo batekin konpontzen dugu egiaztatu_sig saldoa egiaztatu aurretik, horrek esan nahi du Alicek bere gako pribatua erabiltzen duela transakzioa sinatzeko eta bere txanponen jabea dela berresteko.

Blockchain programazio lengoaiak

Dauden bloke-kateen lengoaiek arazo hauek dituzte (guztiak Move-n konpondu ziren (oharra: zoritxarrez, artikuluaren egileak Ethereum-era soilik jotzen du bere konparaketetan, beraz, merezi du testuinguru honetan soilik hartzea. Esaterako, EOSen ere ebazten da honako hauetako gehienak.)):

Ondasunen zeharkako ordezkaritza. Aktibo bat zenbaki oso bat erabiliz kodetzen da, baina zenbaki oso bat ez da aktibo baten berdina. Izan ere, ez dago Bitcoin/Ether/<Any Coin> adierazten duen mota edo baliorik! Horrek aktiboak erabiltzen dituzten programak idaztea zaildu egiten du eta akatsak izan ditzake. Aktiboak prozeduretara/etatik pasatzea edo aktiboak egituretan gordetzea bezalako ereduek hizkuntzaren laguntza berezia behar dute.

Defizita ez da hedagarria... Hizkuntzak ondasun urri bakarra adierazten du. Horrez gain, eskasiaren aurkako erremedioak hizkuntzaren beraren semantikan zuzenean sartzen dira. Garatzaileak, aktibo pertsonalizatu bat sortu nahi badu, arretaz kontrolatu behar ditu baliabidearen alderdi guztiak berak. Hauek dira Ethereum kontratu adimendunen arazoak.

Erabiltzaileek beren aktiboak igortzen dituzte, ERC-20 tokenak, zenbaki osoak erabiliz balioa zein eskaintza osoa zehazteko. Token berriak sortzen diren bakoitzean, kontratu adimendunaren kodeak modu independentean egiaztatu behar ditu isurketen arauak betetzen dituela. Gainera, aktiboen zeharkako aurkezpenak, kasu batzuetan, akats larriak ekartzen ditu: bikoizketa, gastu bikoitza edo aktiboen erabateko galera ere bai.

Sarbide-kontrol malgurik eza... Gaur egun indarrean dagoen sarbide-kontroleko politika bakarra kriptografia asimetrikoa erabiltzen duen sinadura-eskema da. Eskasiaren babesa bezala, sarbide-kontroleko politikak oso barneratuta daude hizkuntzaren semantikan. Baina hizkuntza nola hedatu programatzaileek beren sarbide-kontrol-politikak definitzeko aukera izan dezaten oso lan zaila izaten da.

Hau Ethereum-en ere egia da, non kontratu adimendunek ez duten jatorrizko kriptografia euskarririk sarbide-kontrolerako. Garatzaileek eskuz ezarri behar dute sarbide-kontrola, adibidez, Jabe bakarra aldatzailea erabiliz.

Ethereum-en zale handia naizen arren, uste dut aktiboen propietateek hizkuntzak berez onartu behar dituztela segurtasun helburuetarako. Bereziki, Ether kontratu adimendun batera transferitzeak bidalketa dinamikoa dakar, eta horrek berriro sartzeko ahultasun gisa ezagutzen diren akatsen klase berri bat sartu du. Bidalketa dinamikoak hemen esan nahi du kodearen exekuzio-logika exekuzioan (dinamikoa) zehaztuko dela konpilazio garaian (estatikoa) baino.

Horrela, Solidity-n, A kontratuak B kontratuko funtzio bat deitzen duenean, B kontratuak A kontratuaren garatzaileak nahi ez zuen kodea exekutatu dezake, eta horrek eragin dezake. berriro sartzeko ahultasunak (A kontratuak ustekabean B kontratu gisa jokatzen du kontuko saldoak benetan kendu aurretik dirua ateratzeko).

Mugitu Hizkuntzaren Diseinuaren Oinarriak

Lehen mailako baliabideak

Maila altuan, Move lengoaian moduluen/baliabideen/prozeduren arteko elkarrekintza oso antzekoa da OOP lengoaietako klase/objektuen eta metodoen arteko erlazioarekin.
Mugitu moduluak beste bloke-kateetako kontratu adimendunen antzekoak dira. Moduluak deklaratutako baliabideak sortzeko, suntsitzeko eta eguneratzeko arauak definitzen dituzten baliabide motak eta prozedurak deklaratzen ditu. Baina hauek guztiak konbentzioak besterik ez dira ("jerga”) Mugimenduan. Puntu hau apur bat geroago azalduko dugu.

malgutasuna

Move-k malgutasuna gehitzen dio Librari scripten bidez. Libra-ko transakzio bakoitzak script bat dakar, hau da, funtsean, transakzioaren oinarrizko prozedura. Scriptak ekintza zehatz bat egin dezake, adibidez, hartzaileen zerrenda zehatz bati ordainketak egitea, edo beste baliabide batzuk berrerabili, adibidez, logika orokorra zehaztuta dagoen prozedura bati deituta. Horregatik, Move transakzio-scriptek malgutasun handiagoa eskaintzen dute. Script batek behin-behineko jokabideak eta errepikakorrak erabil ditzake, eta Ethereum-ek, berriz, script errepikagarriak soilik exekutatu ditzake (kontratu adimendun metodo batean metodo bat deituz). "berrerabilgarria" deitzen zaion arrazoia kontratu adimendun baten funtzioak hainbat aldiz exekutatu daitezkeelako da. (ohar: Hemen kontua oso sotila da. Alde batetik, sasi-bytecode formako transakzio-scriptak ere existitzen dira Bitcoin-en. Bestalde, nik ulertzen dudanez, Movek hizkuntza hau zabaltzen du, hain zuzen ere, erabateko kontratu adimendun hizkuntza baten mailara.).

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Move exekutagarria formatua bytecode da, hau da, alde batetik, mihiztadura hizkuntza baino maila altuagoko hizkuntza, baina iturburu kodea baino maila baxuagoa. Bytecodea exekuzio-denboran (katean) egiaztatzen da baliabideak, motak eta memoriaren segurtasuna bytecode egiaztatzaile bat erabiliz, eta, ondoren, interpreteak exekutatzen du. Ikuspegi honi esker, Move-k iturburu-kodearen segurtasuna eskaintzea ahalbidetzen du, baina konpilazio prozesurik gabe eta sisteman konpilatzaile bat gehitu beharrik gabe. Move bytecode hizkuntza bat egitea oso irtenbide ona da. Ez da iturburutik konpilatu behar, Solidity-rekin gertatzen den bezala, eta ez dago konpiladorearen azpiegituretan izan daitezkeen hutsegiteez edo erasoez kezkatu beharrik.

verifiability

Egiaztapenak ahalik eta errazen egitea dugu helburu, hori guztia katean egiten baita (oharra: linean, transakzio bakoitzaren exekuzioan zehar, beraz, edozein atzerapenek sare osoaren moteltzea dakar), hala ere, hasieran hizkuntzaren diseinua prest dago katetik kanpoko egiaztapen estatikoko tresnak erabiltzeko. Hau hobetsiagoa den arren, oraingoz egiaztapen-tresnen garapena (tresna bereizi gisa) etorkizunerako atzeratu egin da, eta orain exekuzio-denboran (katean) egiaztapen dinamikoa soilik onartzen da.

Modularitatea

Mugitu moduluek datuen abstrakzioa eskaintzen dute eta baliabideetan eragiketa kritikoak lokalizatzen dituzte. Moduluak eskaintzen duen kapsulatzeak, Move motako sistemak eskaintzen duen babesarekin konbinatuta, bermatzen du moduluaren motetan ezarritako propietateak ezin direla urratu modulutik kanpoko kodearekin. Hau ongi pentsatutako abstrakzio-diseinua da, hau da, kontratu bateko datuak kontratuaren esparruan soilik alda daitezkeela, baina ez kanpotik.

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Mugitu ikuspegi orokorra

Transakzio-script-en adibideak erakusten du modulu batetik kanpoko programatzaile batek egindako ekintza gaiztoek edo arduragabekeriak ezin dutela modulu baten baliabideen segurtasuna arriskuan jarri. Ondoren, Libra bloke-katea programatzeko moduluak, baliabideak eta prozedurak nola erabiltzen diren aztertuko ditugu.

Peer-to-Peer ordainketak

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Zenbatekoan zehaztutako txanpon kopurua igorlearen saldotik hartzailera transferituko da.
Hemen gauza berri batzuk daude (gorriz nabarmenduta):

  • 0x0: modulua gordeta dagoen kontuaren helbidea
  • Moneta: moduluaren izena
  • Coin: baliabide mota
  • Prozedurak itzultzen duen txanponaren balioa 0x0.Currency.Coin motako baliabide-balioa da
  • mugitu (): balioa ezin da berriro erabili
  • kopiatu (): balioa geroago erabil daiteke

Aztertu kodea: lehenengo urratsean, igorleak izeneko prozedura bat deitzen du igorle_tik kendu bertan gordetako modulu batetik 0x0.Moneta. Bigarren urratsean, igorleak hartzaileari dirua transferitzen dio txanpon-baliabidearen balioa moduluaren gordailu-prozedurara eramanez. 0x0.Moneta.

Hona hemen txekeen bidez baztertuko diren kodean akatsen hiru adibide:
Bikoiztu funtsak deia aldatuz mugitu (txanpon) on kopia (txanpona). Baliabideak bakarrik mugitu daitezke. Baliabide baten kantitate bat bikoizten saiatzea (adibidez, deituz kopia (txanpona) goiko adibidean) errore bat eragingo du bytecode baliozkotzean.

Funtsak berrerabiltzea zehaztuz mugitu (txanpon) Bi aldiz . Lerro bat gehitzea 0x0.Moneta.gordailua (kopiatu (beste_ordaintzailea), mugitu (txanpona)) adibidez, aurrekoak bidaltzaileak txanponak bi aldiz "gastatzeko" aukera emango dio - lehen aldiz ordaintzailearekin, eta bigarrena. beste_ordaintzaileren bat. Hau aktibo fisiko batekin posible ez den portaera desiragarria da. Zorionez, Move-k programa hau baztertuko du.

Funtsak galtzea ukoagatik mugitu (txanpon). Baliabidea mugitzen ez baduzu (adibidez, duen lerroa ezabatuz mugitu (txanpon)), bytecode egiaztapen-errore bat botako da. Horrek Move programatzaileak babesten ditu ustekabeko edo asmo txarreko funtsen galeretatik.

Moneta modulua

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Kontu bakoitzak 0 modulu edo gehiago (laukizuzen gisa erakusten dira) eta baliabide-balio bat edo gehiago (zilindro gisa erakusten dira). Adibidez, kontu bat helbidean 0x0 modulua dauka 0x0.Moneta eta baliabide motaren balioa 0x0.Moneta.Txanpona. Kontua helbidean 0x1 bi baliabide eta modulu bat ditu; Kontua helbidean 0x2 bi modulu eta baliabide balio bat ditu.

Nekotory uneak:

  • Transakzio-scripta atomikoa da - guztiz exekutatzen da edo ez da batere exekutatzen.
  • Modulua mundu osoan eskuragarri dagoen iraupen luzeko kode bat da.
  • Egoera globala hash taula gisa egituratzen da, non gakoa kontuaren helbidea den
  • Kontuek ezin dute eduki mota jakin bateko baliabide-balio bat baino gehiago eta izen jakin batekin modulu bat baino gehiago (kontua: 0x0 ezin du baliabide gehigarririk eduki 0x0.Moneta.Txanpona edo izeneko beste modulu bat Moneta)
  • Adierazitako moduluaren helbidea motako (0x0.Moneta.Txanpona ΠΈ 0x1.Moneta.Txanpona elkartrukatu ezin diren mota bereiziak dira)
  • Programatzaileek baliabide mota honen hainbat instantzia gorde ditzakete kontu batean beren baliabide pertsonalizatua zehaztuz - (baliabidea TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Gatazkarik gabe baliabide bati erreferentzia egin diezaiokezu bere izenaz; adibidez, bi baliabide aipatu ditzakezu erabiliz Bi Txanpon.c1 ΠΈ Bi Txanpon.c2.

Txanpon baliabideen iragarkia

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia
Izeneko modulua Moneta eta izeneko baliabide mota bat Coin

Nekotory uneak:

  • Coin motako eremu bakarra duen egitura da u64 (64 biteko sinatu gabeko zenbaki osoa)
  • Moduluaren prozedurak soilik Moneta motako balioak sortu edo suntsitu ditzake Coin.
  • Beste modulu eta script-ek balio-eremua soilik idatzi edo erreferentzia egin dezakete moduluak emandako prozedura publikoen bidez.

Gordailuaren salmenta

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Prozedura honek baliabide bat onartzen du Coin sarrera gisa eta baliabidearekin konbinatzen du Coinhartzailearen kontuan gordeta:

  1. Sarrerako baliabidea Coin suntsitzea eta bere balioa erregistratzea.
  2. Hartzailearen kontuan gordetako Coin baliabide esklusibo baterako esteka jasotzea.
  3. Txanpon kopuruaren balioa aldatzea parametroan emandako balioarekin prozedura deitzean.

Nekotory uneak:

  • Deskonprimitu, BorrowGlobal - Eraikitako prozedurak
  • Deskargatu Hau da T motako baliabide bat ezabatzeko modu bakarra. Prozedurak baliabide bat hartzen du sarrera gisa, suntsitzen du eta baliabidearen eremuekin lotutako balioa itzultzen du.
  • BorrowGlobal helbide bat hartzen du sarrera gisa eta erreferentzia bat itzultzen du helbide horrek argitaratutako (jabea) T instantzia bakar bati
  • &mut Txanpona hau baliabiderako esteka da Coin

withdraw_from_sender ezarpena

Dive into Move - Facebook-en Libra blockchain programazio-lengoaia

Prozedura hau:

  1. Baliabide esklusibo baterako esteka lortzen du Coin, igorlearen kontuarekin lotuta
  2. Baliabide baten balioa murrizten du Coin zehaztutako zenbatekoaren estekaren bidez
  3. Baliabide berri bat sortu eta itzultzen du Coin saldo eguneratuarekin.

Nekotory uneak:

  • Gordailua edonork eragin dezake, baina igorle_tik kendu dei-kontuaren txanponak soilik ditu sarbidea
  • GetTxnSenderAddress antzekoak msg.sender Solidotasunean
  • Baztertu ezean antzekoak behar Solidotasunean. Egiaztapen honek huts egiten badu, transakzioa gelditu egingo da eta aldaketa guztiak atzera egiten dira.
  • Pack halaber, T motako baliabide berri bat sortzen duen prozedura integratua da.
  • Baita Deskargatu, Pack baliabidea deskribatzen den moduluaren barruan bakarrik deitu daiteke T

Ondorioa

Move hizkuntzaren ezaugarri nagusiak aztertu, Ethereum-ekin alderatu eta gidoien oinarrizko sintaxia ere ezagutu genuen. Azkenik, egiaztatzea gomendatzen dut jatorrizko paper zuria. Programazio-lengoaiaren diseinuaren printzipioei buruzko xehetasun asko biltzen ditu, baita esteka erabilgarriak ere.

Iturria: www.habr.com

Gehitu iruzkin berria