TÄlÄk mÄs detalizÄti apsvÄrsim Move valodas galvenÄs iezÄ«mes un kÄdas ir tÄs galvenÄs atŔķirÄ«bas ar citu, jau viedo lÄ«gumu populÄru valodu - Solidity (platformÄ Ethereum). MateriÄls ir balstÄ«ts uz pieejamÄs tieÅ”saistes 26 lappuÅ”u baltÄs grÄmatas izpÄti.
Ievads
Move ir izpildÄma baitkoda valoda, ko izmanto, lai izpildÄ«tu lietotÄja transakcijas un viedos lÄ«gumus. LÅ«dzu, Åemiet vÄrÄ divus punktus:
- Lai gan Move ir baitu koda valoda, kuru var tieÅ”i izpildÄ«t Move virtuÄlajÄ maŔīnÄ, Solidity (Ethereum viedÄ lÄ«guma valoda) ir augstÄka lÄ«meÅa valoda, kas vispirms tiek apkopota baitu kodÄ, pirms tiek izpildÄ«ta EVM (Ethereum virtuÄlÄ maŔīna).
- Move var izmantot ne tikai viedo lÄ«gumu Ä«stenoÅ”anai, bet arÄ« pielÄgotajiem darÄ«jumiem (vairÄk par to vÄlÄk), savukÄrt Solidity ir vieda tikai lÄ«gumu valoda.
TulkoÅ”anu veica INDEX protokola projekta komanda. MÄs jau esam iztulkojuÅ”i
GalvenÄ Move iezÄ«me ir iespÄja definÄt pielÄgotus resursu tipus ar semantiku, kuras pamatÄ ir lineÄra loÄ£ika: resursus nekad nevar kopÄt vai netieÅ”i dzÄst, tikai pÄrvietot. FunkcionÄli tas ir lÄ«dzÄ«gs Rust valodas iespÄjÄm. Rust vÄrtÄ«bas vienlaikus var pieŔķirt tikai vienam vÄrdam. VÄrtÄ«bas pieŔķirÅ”ana citam nosaukumam padara to nepieejamu ar iepriekÅ”Äjo nosaukumu.
PiemÄram, Å”Äds koda fragments parÄdÄ«s kļūdu: PÄrvietotÄs vÄrtÄ«bas āxā izmantoÅ”ana. Tas ir tÄpÄc, ka RustÄ nav atkritumu savÄkÅ”anas. Kad mainÄ«gie iziet no darbÄ«bas jomas, tiek atbrÄ«vota arÄ« atmiÅa, uz kuru tie attiecas. VienkÄrÅ”i sakot, datu "Ä«paÅ”nieks" var bÅ«t tikai viens. Å ajÄ piemÄrÄ x ir sÄkotnÄjais Ä«paÅ”nieks un tad y kļūst par jauno Ä«paÅ”nieku.
DigitÄlo aktÄ«vu attÄloÅ”ana atvÄrtÄs sistÄmÄs
Ir divi fizisko aktÄ«vu rekvizÄ«ti, kurus ir grÅ«ti attÄlot digitÄli:
- Retums (TrÅ«kums, sÄkotnÄji trÅ«kums). Ir jÄkontrolÄ aktÄ«vu skaits (emisijas) sistÄmÄ. Ir jÄaizliedz esoÅ”o lÄ«dzekļu pavairoÅ”ana, un jaunu izveidoÅ”ana ir priviliÄ£Äta darbÄ«ba.
- Piekļuves kontrole... SistÄmas dalÄ«bniekam jÄspÄj aizsargÄt aktÄ«vus, izmantojot piekļuves kontroles politikas.
Å ie divi raksturlielumi, kas ir dabiski fiziskiem aktÄ«viem, ir jÄÄ«steno digitÄlajiem objektiem, ja vÄlamies tos uzskatÄ«t par aktÄ«viem. PiemÄram, retam metÄlam - ir dabisks trÅ«kums, un tikai jums tas ir pieejams (piemÄram, turot to rokÄs), un jÅ«s varat to pÄrdot vai iztÄrÄt.
Lai ilustrÄtu, kÄ mÄs nonÄcÄm pie Å”iem diviem Ä«paÅ”umiem, sÄksim ar Å”Ädiem teikumiem:
1. ieteikums: vienkÄrÅ”Äkais noteikums bez trÅ«kuma un piekļuves kontroles
- G [K]: = n apzÄ«mÄ numura atjauninÄÅ”anu, kas pieejams ar atslÄgu Š bloka Ä·Ädes globÄlajÄ stÄvoklÄ« ar jaunu nozÄ«mi n.
- darÄ«jums (Alise, 100) nozÄ«mÄ iestatÄ«t Alises konta atlikumu uz 100.
IepriekÅ” minÄtajam risinÄjumam ir vairÄkas lielas problÄmas:
- Alise var saÅemt neierobežotu skaitu monÄtu, vienkÄrÅ”i nosÅ«tot darÄ«jums lAlise, 100ā©.
- MonÄtas, ko Alise sÅ«ta Bobam, ir bezjÄdzÄ«gas, jo Bobs, izmantojot to paÅ”u paÅÄmienu, varÄtu nosÅ«tÄ«t sev neierobežotu skaitu monÄtu.
2. ieteikums: Åemot vÄrÄ deficÄ«tu
Tagad mÄs uzraugÄm situÄciju, lai monÄtu skaits Ka bija vismaz vienÄds n pirms pÄrskaitÄ«juma darÄ«juma. TomÄr, lai gan tas atrisina trÅ«kuma problÄmu, nav informÄcijas par to, kas var nosÅ«tÄ«t Alises monÄtas (pagaidÄm to var darÄ«t ikviens, galvenais ir nepÄrkÄpt summas ierobežoÅ”anas noteikumu).
3. priekŔlikums: apvienot trūkumu un piekļuves kontroli
MÄs atrisinÄm Å”o problÄmu ar digitÄlÄ paraksta mehÄnismu pÄrbaudÄ«t_sig pirms atlikuma pÄrbaudes, kas nozÄ«mÄ, ka Alise izmanto savu privÄto atslÄgu, lai parakstÄ«tu darÄ«jumu un apstiprinÄtu, ka viÅa ir savu monÄtu Ä«paÅ”niece.
Blockchain programmÄÅ”anas valodas
EsoÅ”Äs blokÄ·Ädes valodas saskaras ar Å”ÄdÄm problÄmÄm (visas tika atrisinÄtas programmÄ Move (piezÄ«me: diemžÄl raksta autors savos salÄ«dzinÄjumos piesaista tikai Ethereum, tÄpÄc ir vÄrts tos Åemt tikai Å”ajÄ kontekstÄ. PiemÄram, lielÄkÄ daļa no Ŕīm darbÄ«bÄm ir atrisinÄtas arÄ« EOS.)):
AktÄ«vu netieÅ”a attÄloÅ”ana. LÄ«dzeklis tiek kodÄts, izmantojot veselu skaitli, bet vesels skaitlis nav tas pats, kas aktÄ«vs. Faktiski nav neviena veida vai vÄrtÄ«bas, kas atspoguļotu Bitcoin/Ether/<Jebkuru monÄtu>! Tas apgrÅ«tina tÄdu programmu rakstÄ«Å”anu, kurÄs tiek izmantoti lÄ«dzekļi, un ir iespÄja kļūdÄ«ties. TÄdiem modeļiem kÄ lÄ«dzekļu nodoÅ”ana procedÅ«rÄm/no tÄm vai lÄ«dzekļu glabÄÅ”ana struktÅ«rÄs ir nepiecieÅ”ams Ä«paÅ”s valodas atbalsts.
DeficÄ«ts nav paplaÅ”inÄms... Valoda pÄrstÄv tikai vienu ierobežotu vÄrtÄ«bu. TurklÄt lÄ«dzekļi pret trÅ«kumu ir tieÅ”i saistÄ«ti ar paÅ”as valodas semantiku. IzstrÄdÄtÄjam, ja viÅÅ” vÄlas izveidot pielÄgotu lÄ«dzekli, paÅ”am rÅ«pÄ«gi jÄpÄrvalda visi resursa aspekti. TieÅ”i tÄdas ir Ethereum viedo lÄ«gumu problÄmas.
LietotÄji izsniedz savus aktÄ«vus, ERC-20 marÄ·ierus, izmantojot veselus skaitļus, lai noteiktu gan vÄrtÄ«bu, gan kopÄjo piedÄvÄjumu. Kad tiek izveidoti jauni žetoni, viedÄ lÄ«guma kodam ir neatkarÄ«gi jÄpÄrbauda atbilstÄ«ba emisijas noteikumiem. TurklÄt netieÅ”a aktÄ«vu uzrÄdÄ«Å”ana dažos gadÄ«jumos rada nopietnas kļūdas - dublÄÅ”anos, dubultus tÄriÅus vai pat pilnÄ«gu aktÄ«vu zaudÄÅ”anu.
ElastÄ«gas piekļuves kontroles trÅ«kums... VienÄ«gÄ mÅ«sdienÄs izmantotÄ piekļuves kontroles politika ir paraksta shÄma, kurÄ izmantota asimetriska kriptogrÄfija. TÄpat kÄ aizsardzÄ«ba pret trÅ«kumu, arÄ« piekļuves kontroles politika ir dziļi iestrÄdÄta valodas semantikÄ. Bet kÄ paplaÅ”inÄt valodu, lai programmÄtÄji varÄtu definÄt savas piekļuves kontroles politikas, bieži vien ir ļoti grÅ«ts uzdevums.
Tas attiecas arÄ« uz Ethereum, kur viedajiem lÄ«gumiem nav vietÄjÄs kriptogrÄfijas atbalsta piekļuves kontrolei. IzstrÄdÄtÄjiem ir manuÄli jÄiestata piekļuves kontrole, piemÄram, izmantojot tikai Ä«paÅ”nieka modifikatoru.
Lai gan esmu liels Ethereum cienÄ«tÄjs, uzskatu, ka droŔības nolÅ«kos valodai ir jÄatbalsta lÄ«dzekļu rekvizÄ«ti. Jo Ä«paÅ”i Ether pÄrsÅ«tÄ«Å”ana uz viedo lÄ«gumu ietver dinamisku nosÅ«tÄ«Å”anu, kas ir ieviesusi jaunu kļūdu klasi, kas pazÄ«stama kÄ atkÄrtotas ieejas ievainojamÄ«bas. DinamiskÄ nosÅ«tÄ«Å”ana Å”eit nozÄ«mÄ, ka koda izpildes loÄ£ika tiks noteikta izpildlaikÄ (dinamiskÄ), nevis kompilÄÅ”anas laikÄ (statiskÄ).
TÄdÄjÄdi Solidity, kad lÄ«gums A izsauc funkciju lÄ«gumÄ B, lÄ«gums B var palaist kodu, ko nebija paredzÄjis lÄ«guma A izstrÄdÄtÄjs, kÄ rezultÄtÄ var tikt
Move Language Design Fundamentals
PirmÄs kÄrtas resursi
AugstÄ lÄ«menÄ« Move valodas moduļu / resursu / procedÅ«ru mijiedarbÄ«ba ir ļoti lÄ«dzÄ«ga saistÄ«bai starp klasÄm / objektiem un metodÄm OOP valodÄs.
PÄrvietoÅ”anas moduļi ir lÄ«dzÄ«gi viedajiem lÄ«gumiem citÄs blokÄ·ÄdÄs. Modulis deklarÄ resursu veidus un procedÅ«ras, kas nosaka deklarÄto resursu izveides, iznÄ«cinÄÅ”anas un atjauninÄÅ”anas noteikumus. Bet tas viss ir tikai konvencijas ("žargonÄā) In Move. MÄs ilustrÄsim Å”o punktu nedaudz vÄlÄk.
Elastīgums
Move pieŔķir Svariem elastÄ«bu, izmantojot skriptus. Katrs darÄ«jums Svaros ietver skriptu, kas bÅ«tÄ«bÄ ir darÄ«juma pamatprocedÅ«ra. Skripts var veikt vai nu vienu norÄdÄ«to darbÄ«bu, piemÄram, maksÄjumus noteiktam adresÄtu sarakstam, vai atkÄrtoti izmantot citus resursus ā piemÄram, izsaucot procedÅ«ru, kurÄ ir norÄdÄ«ta vispÄrÄjÄ loÄ£ika. TÄpÄc Move darÄ«jumu skripti piedÄvÄ lielÄku elastÄ«bu. Skripts var izmantot gan vienreizÄju, gan atkÄrtotu uzvedÄ«bu, savukÄrt Ethereum var izpildÄ«t tikai atkÄrtojamus skriptus (vienu metodi izsaucot viedÄ lÄ«guma metodÄ). Iemesls, kÄpÄc to sauc par "atkÄrtoti lietojamu", ir tÄpÄc, ka viedÄ lÄ«guma funkcijas var izpildÄ«t vairÄkas reizes. (PiezÄ«me: Lieta Å”eit ir ļoti smalka. No vienas puses, Bitcoin eksistÄ arÄ« darÄ«jumu skripti pseidobaitu koda veidÄ. No otras puses, kÄ es saprotu, Move paplaÅ”ina Å”o valodu faktiski lÄ«dz pilnvÄrtÄ«gas viedÄs lÄ«gumu valodas lÄ«menim).
DroŔība
Move izpildÄmais formÄts ir baitkods, kas, no vienas puses, ir augstÄka lÄ«meÅa valoda nekÄ montÄžas valoda, bet zemÄka lÄ«meÅa nekÄ pirmkods. Baitkodam izpildes laikÄ (Ä·ÄdÄ) tiek pÄrbaudÄ«ti resursi, veidi un atmiÅas droŔība, izmantojot baitkoda verificÄtÄju, un pÄc tam to izpilda tulks. Å Ä« pieeja ļauj Move nodroÅ”inÄt pirmkoda droŔību, taÄu bez kompilÄcijas procesa un nepiecieÅ”amÄ«bas sistÄmai pievienot kompilatoru. Making Move baitkoda valoda ir patieÅ”Äm labs risinÄjums. Tas nav jÄkompilÄ no avota, kÄ tas ir Solidity gadÄ«jumÄ, un nav jÄuztraucas par iespÄjamÄm kļūmÄm vai uzbrukumiem kompilatora infrastruktÅ«rai.
PÄrbaudÄmÄ«ba
MÅ«su mÄrÄ·is ir veikt pÄrbaudes pÄc iespÄjas vienkÄrÅ”Äk, jo tas viss tiek darÄ«ts Ä·ÄdÄ (piezÄ«me: tieÅ”saistÄ, katra darÄ«juma izpildes laikÄ, tÄpÄc jebkura kavÄÅ”anÄs noved pie visa tÄ«kla palÄninÄÅ”anÄs), tomÄr sÄkotnÄji valodas dizains ir gatavs izmantot Ärpus Ä·Ädes statiskÄs verifikÄcijas rÄ«kus. Lai gan tas ir vÄlams, pagaidÄm verifikÄcijas rÄ«ku (kÄ atseviŔķa rÄ«ku komplekta) izstrÄde ir atlikta uz nÄkotni, un tagad tiek atbalstÄ«ta tikai dinamiskÄ verifikÄcija izpildlaikÄ (Ä·ÄdÄ).
ModularitÄte
PÄrvietoÅ”anas moduļi nodroÅ”ina datu iegÅ«Å”anu un resursu kritisko darbÄ«bu lokalizÄciju. IekļauÅ”ana, ko nodroÅ”ina modulis, apvienojumÄ ar Move tipa sistÄmas nodroÅ”inÄto aizsardzÄ«bu nodroÅ”ina, ka moduļa veidos iestatÄ«tÄs Ä«paŔības nevar pÄrkÄpt kods Ärpus moduļa. Tas ir diezgan labi pÄrdomÄts abstrakcijas dizains, kas nozÄ«mÄ, ka dati lÄ«guma ietvaros var mainÄ«ties tikai lÄ«guma ietvaros, bet ne Ärpus tÄ.
PÄrvietot pÄrskatu
DarÄ«juma skripta piemÄrs parÄda, ka ļaunprÄtÄ«gas vai neuzmanÄ«gas darbÄ«bas, ko veic programmÄtÄjs Ärpus moduļa, nevar apdraudÄt moduļa resursu droŔību. TÄlÄk mÄs apskatÄ«sim piemÄrus, kÄ moduļi, resursi un procedÅ«ras tiek izmantotas Svaru blokÄ·Ädes programmÄÅ”anai.
VienÄdranga maksÄjumi
SummÄ norÄdÄ«tais monÄtu skaits tiks pÄrskaitÄ«ts no sÅ«tÄ«tÄja atlikuma saÅÄmÄjam.
Å eit ir dažas jaunas lietas (izceltas sarkanÄ krÄsÄ):
- 0x0: tÄ konta adrese, kurÄ tiek glabÄts modulis
- Valūta: moduļa nosaukums
- MonÄta: resursa veids
- ProcedÅ«ras atgrieztÄ monÄtas vÄrtÄ«ba ir resursa vÄrtÄ«ba 0x0.Currency.Coin
- pÄrvietot (): vÄrtÄ«bu nevar izmantot vÄlreiz
- kopÄt (): vÄrtÄ«bu var izmantot vÄlÄk
AnalizÄjiet kodu: pirmajÄ solÄ« sÅ«tÄ«tÄjs izsauc procedÅ«ru ar nosaukumu atsaukt_ no sÅ«tÄ«tÄja no moduļa, kas saglabÄts 0x0. ValÅ«ta. OtrajÄ solÄ« sÅ«tÄ«tÄjs pÄrskaita lÄ«dzekļus saÅÄmÄjam, pÄrvietojot monÄtas resursa vÄrtÄ«bu moduļa iemaksas procedÅ«rÄ. 0x0. ValÅ«ta.
Å eit ir trÄ«s koda kļūdu piemÄri, kuras tiks noraidÄ«tas, veicot pÄrbaudes:
DublÄjiet lÄ«dzekļus, mainot zvanu pÄrvietoties (monÄta) par kopija (monÄta). Resursus var tikai pÄrvietot. MÄÄ£inot dublÄt resursa daudzumu (piemÄram, zvanot kopija (monÄta) iepriekÅ” minÄtajÄ piemÄrÄ), pÄrbaudot baitu kodu, radÄ«sies kļūda.
LÄ«dzekļu atkÄrtota izmantoÅ”ana, norÄdot pÄrvietoties (monÄta) divreiz . LÄ«nijas pievienoÅ”ana 0x0.Currency.deposit (kopÄt (kÄds_cits_maksÄjuma saÅÄmÄjs), pÄrvietot (monÄta)) piemÄram, iepriekÅ” minÄtais ļaus sÅ«tÄ«tÄjam āiztÄrÄtā monÄtas divas reizes - pirmo reizi ar maksÄjuma saÅÄmÄju, bet otro ar kÄds_cits_maksÄjuma saÅÄmÄjs. TÄ ir nevÄlama rÄ«cÄ«ba, kas nav iespÄjama ar fizisku Ä«paÅ”umu. Par laimi Move noraidÄ«s Å”o programmu.
LÄ«dzekļu zaudÄjums atteikuma dÄļ pÄrvietoties (monÄta). Ja nepÄrvietojat resursu (piemÄram, dzÄÅ”ot rindu, kurÄ ir pÄrvietoties (monÄta)), tiks parÄdÄ«ta baitkoda verifikÄcijas kļūda. Tas pasargÄ Move programmÄtÄjus no nejauÅ”a vai ļaunprÄtÄ«ga lÄ«dzekļu zaudÄjuma.
Valūtas modulis
KatrÄ kontÄ var bÅ«t 0 vai vairÄki moduļi (parÄdÄ«ti kÄ taisnstÅ«ri) un viena vai vairÄkas resursu vÄrtÄ«bas (parÄdÄ«tas kÄ cilindri). PiemÄram, konts vietnÄ 0x0 satur moduli 0x0. ValÅ«ta un resursa veida vÄrtÄ«bu 0x0.ValÅ«ta.MonÄta. Konts adresÄ 0x1 ir divi resursi un viens modulis; Konts adresÄ 0x2 ir divi moduļi un viena resursa vÄrtÄ«ba.
Nekotory momenti:
- DarÄ«juma skripts ir atomÄrs - vai nu tas tiek izpildÄ«ts pilnÄ«bÄ, vai arÄ« netiek izpildÄ«ts vispÄr.
- Modulis ir ilgmūžīgs koda fragments, kas ir pieejams visÄ pasaulÄ.
- GlobÄlais stÄvoklis ir strukturÄts kÄ hash tabula, kur atslÄga ir konta adrese
- Kontos var bÅ«t ne vairÄk kÄ viena noteikta veida resursa vÄrtÄ«ba un ne vairÄk kÄ viens modulis ar noteiktu nosaukumu (konts 0x0 nevar saturÄt papildu resursus 0x0.ValÅ«ta.MonÄta vai cits modulis ar nosaukumu ValÅ«ta)
- DeklarÄtÄ moduļa adrese ir daļa no tipa (0x0.ValÅ«ta.MonÄta Šø 0x1.ValÅ«ta.MonÄta ir atseviŔķi veidi, kurus nevar izmantot savstarpÄji aizstÄjot)
- ProgrammÄtÄji var saglabÄt kontÄ vairÄkus Å”Äda veida resursa gadÄ«jumus, definÄjot savu pielÄgoto resursu - (resurss TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
- Varat atsaukties uz resursu pÄc tÄ nosaukuma bez konfliktiem, piemÄram, varat atsaukties uz diviem resursiem, kas izmanto TwoCoins.c1 Šø TwoCoins.c2.
MonÄtu resursu paziÅojums
Modulis nosaukts ValÅ«ta un resursa veids ar nosaukumu MonÄta
Nekotory momenti:
- MonÄta ir struktÅ«ra ar vienu tipa lauku u64 (64 bitu neparakstÄ«ts vesels skaitlis)
- Tikai moduļa procedÅ«ras ValÅ«ta var izveidot vai iznÄ«cinÄt Å”Äda veida vÄrtÄ«bas MonÄta.
- Citi moduļi un skripti var ierakstÄ«t vÄrtÄ«bas lauku vai atsaukties uz to, izmantojot tikai moduļa nodroÅ”inÄtÄs publiskÄs procedÅ«ras.
DepozÄ«ta pÄrdoÅ”ana
Å Ä« procedÅ«ra pieÅem resursu MonÄta kÄ ievadi un apvieno to ar resursu MonÄtaglabÄjas saÅÄmÄja kontÄ:
- Ievades resursa MonÄtas iznÄ«cinÄÅ”ana un tÄs vÄrtÄ«bas reÄ£istrÄÅ”ana.
- SaÅemt saiti uz unikÄlu monÄtu resursu, kas glabÄjas saÅÄmÄja kontÄ.
- MonÄtu skaita vÄrtÄ«bas maiÅa par parametrÄ nodoto vÄrtÄ«bu, izsaucot procedÅ«ru.
Nekotory momenti:
- Izpakojiet, BorrowGlobal - iebÅ«vÄtÄs procedÅ«ras
- Izpakojiet Tas ir vienÄ«gais veids, kÄ izdzÄst T tipa resursu. ProcedÅ«ra izmanto resursu kÄ ievadi, iznÄ«cina to un atgriež vÄrtÄ«bu, kas saistÄ«ta ar resursa laukiem.
- AizÅemtiesGlobal izmanto adresi kÄ ievadi un atgriež atsauci uz unikÄlu T gadÄ«jumu, ko publicÄjusi (pieder) Ŕī adrese
- &mut MonÄta Ŕī ir saite uz resursu MonÄta
IzÅemÅ”anas_no_sÅ«tÄ«tÄja ievieÅ”ana
Šī procedūra:
- IegÅ«st saiti uz unikÄlu resursu MonÄta, kas ir saistÄ«ts ar sÅ«tÄ«tÄja kontu
- Samazina resursa vÄrtÄ«bu MonÄta izmantojot saiti par norÄdÄ«to summu
- Izveido un atgriež jaunu resursu MonÄta ar atjauninÄtu bilanci.
Nekotory momenti:
- NoguldÄ«jums var izraisÄ«t jebkurÅ”, bet atsaukt_ no sÅ«tÄ«tÄja var piekļūt tikai zvanÄ«tÄja konta monÄtÄm
- GetTxnSenderAddress līdzīgs msg.sender in Solidity
- NoraidÄ«t Ja vien lÄ«dzÄ«gs pieprasÄ«t in Solidity. Ja Ŕī pÄrbaude neizdodas, darÄ«jums tiek apturÄts un visas izmaiÅas tiek atsauktas.
- Komplekts tÄ ir arÄ« iebÅ«vÄta procedÅ«ra, kas rada jaunu T tipa resursu.
- KÄ arÄ« Izpakojiet, Komplekts var izsaukt tikai tajÄ modulÄ«, kurÄ ir aprakstÄ«ts resurss T
SecinÄjums
MÄs pÄrbaudÄ«jÄm Move valodas galvenÄs Ä«paŔības, salÄ«dzinÄjÄm to ar Ethereum, kÄ arÄ« iepazinÄmies ar skriptu pamata sintaksi. Visbeidzot, es ļoti iesaku pÄrbaudÄ«t
Avots: www.habr.com