Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Nesaf, byddwn yn ystyried yn fanwl brif nodweddion yr iaith Symud a beth yw ei gwahaniaethau allweddol ag iaith arall, sydd eisoes yn boblogaidd ar gyfer contractau craff - Solidedd (ar blatfform Ethereum). Mae'r deunydd yn seiliedig ar astudiaeth o'r papur gwyn 26 tudalen ar-lein sydd ar gael.

Cyflwyniad

Mae Move yn iaith bytecode gweithredadwy a ddefnyddir i gyflawni trafodion defnyddwyr a chontractau smart. Rhowch sylw i ddau bwynt:

  1. Tra bod Move yn iaith is-god y gellir ei gweithredu'n uniongyrchol ar beiriant rhithwir Move, mae Solidity (iaith gontract smart Ethereum) yn iaith lefel uwch sy'n cael ei llunio gyntaf i is-god cyn cael ei gweithredu ar EVM (Peiriant Rhithwir Ethereum).
  2. Gellir defnyddio symud nid yn unig i weithredu contractau craff, ond hefyd ar gyfer trafodion arfer (mwy ar hyn yn nes ymlaen), tra bod Solidity yn iaith glyfar contract yn unig.


Gwnaethpwyd y cyfieithiad gan dîm prosiect Protocol INDEX. Yr ydym wedi cyfieithu o'r blaen deunydd gwych yn disgrifio prosiect Libra, nawr mae'n amser edrych yn agosach ar yr iaith Symud. Gwnaed y cyfieithiad ynghyd a'r habrauser coolsiu

Un o nodweddion allweddol Move yw'r gallu i ddiffinio mathau o adnoddau wedi'u teilwra gyda semanteg yn seiliedig ar resymeg llinol: ni ellir byth copïo adnodd na'i ddileu yn ymhlyg, dim ond ei symud. Yn swyddogaethol, mae hyn yn debyg i nodweddion yr iaith Rust. Dim ond i un enw ar y tro y gellir neilltuo gwerthoedd yn Rust. Mae aseinio gwerth i enw arall yn ei wneud yn anhygyrch o dan yr enw blaenorol.

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Er enghraifft, bydd y pyt cod canlynol yn taflu gwall: Defnyddio gwerth wedi'i symud 'x'. Mae hyn oherwydd nad oes casgliad garbage yn Rust. Pan fydd newidynnau yn mynd allan o'u cwmpas, mae'r cof y maen nhw'n cyfeirio ato yn cael ei ryddhau hefyd. Yn syml, dim ond un "perchennog" all fod yn y data. Yn yr enghraifft hon x yw'r perchennog gwreiddiol ac yna y yn dod yn berchennog newydd. Darllenwch fwy am yr ymddygiad hwn yma..

Cynrychiolaeth asedau digidol mewn systemau agored

Mae'n anodd cynrychioli dau eiddo asedau ffisegol yn ddigidol:

  • Prinder (Prinder, prinder yn wreiddiol). Rhaid rheoli nifer yr asedau (allyriadau) yn y system. Rhaid gwahardd dyblygu asedau presennol, ac mae creu rhai newydd yn weithred freintiedig.
  • Rheoli mynediad... Rhaid i gyfranogwr y system allu amddiffyn asedau gan ddefnyddio polisïau rheoli mynediad.

Rhaid gweithredu'r ddwy nodwedd hyn, sy'n naturiol ar gyfer asedau ffisegol, ar gyfer gwrthrychau digidol os ydym am eu hystyried fel asedau. Er enghraifft, mae gan fetel prin ddiffyg naturiol, a dim ond chi sydd â mynediad iddo (gan ei ddal yn eich dwylo, er enghraifft) a gallwch ei werthu neu ei wario.

I ddangos sut y gwnaethom gyrraedd y ddau eiddo hyn, gadewch inni ddechrau gyda'r brawddegau canlynol:

Awgrym # 1: Y Rheol Symlaf Heb Brinder a Rheoli Mynediad

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

  • G [K]: = n yn dynodi diweddariad o rif sy'n hygyrch gan allwedd К yn nhalaith fyd-eang y blockchain, gydag ystyr newydd n.
  • trafodiad ⟨Alice, 100⟩ yw gosod balans cyfrif Alice i 100.

Mae gan yr ateb uchod sawl problem fawr:

  • Gall Alice dderbyn nifer anghyfyngedig o ddarnau arian trwy eu hanfon yn syml trafodiad ⟨Alice, 100⟩.
  • Mae'r darnau arian y mae Alice yn eu hanfon at Bob yn ddiwerth, gan y gallai Bob anfon nifer anghyfyngedig o ddarnau arian ato'i hun gan ddefnyddio'r un dechneg.

Awgrym # 2: Gan ystyried y diffyg

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Nawr rydym yn monitro'r sefyllfa fel bod nifer y darnau arian Ka yn gyfartal o leiaf n cyn y trafodiad trosglwyddo. Fodd bynnag, er bod hyn yn datrys problem prinder, nid oes unrhyw wybodaeth ynghylch pwy all anfon darnau arian Alice (am y tro, gall unrhyw un wneud hyn, y prif beth yw peidio â thorri'r rheol o gyfyngu ar y swm).

Cynnig # 3: Cyfuno prinder a rheoli mynediad

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Rydym yn datrys y broblem hon gyda mecanwaith llofnod digidol gwirio_sig cyn gwirio'r balans, sy'n golygu bod Alice yn defnyddio ei allwedd breifat i lofnodi'r trafodiad a chadarnhau mai hi yw perchennog ei darnau arian.

Ieithoedd rhaglennu Blockchain

Mae'r ieithoedd blockchain presennol yn wynebu'r problemau canlynol (datryswyd pob un ohonynt yn Move (nodyn: yn anffodus, dim ond yn ei gymariaethau y mae awdur yr erthygl yn apelio at Ethereum, felly mae'n werth eu cymryd yn y cyd-destun hwn yn unig. Er enghraifft, mae'r rhan fwyaf o'r canlynol hefyd yn cael ei ddatrys yn EOS.)):

Cynrychiolaeth anuniongyrchol o asedau. Mae ased yn cael ei amgodio gan ddefnyddio cyfanrif, ond nid yw gwerth cyfanrif yr un peth ag ased. Mewn gwirionedd, nid oes unrhyw fath na gwerth yn cynrychioli bitcoin / ether / <Any Coin>! Mae hyn yn ei gwneud hi'n anodd ac yn dueddol o wallau ysgrifennu rhaglenni sy'n defnyddio asedau. Mae angen cefnogaeth arbennig gan yr iaith ar gyfer patrymau fel trosglwyddo asedau i/o weithdrefnau neu storio asedau mewn strwythurau.

Nid oes modd ehangu'r diffyg... Dim ond un ased prin yw iaith. Yn ogystal, mae'r meddyginiaethau yn erbyn prinder yn cael eu gwifrau'n uniongyrchol i semanteg yr iaith ei hun. Rhaid i'r datblygwr, os yw am greu ased wedi'i deilwra, reoli pob agwedd ar yr adnodd ei hun yn ofalus. Dyma'r union broblemau contractau smart Ethereum.

Mae defnyddwyr yn cyhoeddi eu hasedau, tocynnau ERC-20, gan ddefnyddio cyfanrifau i bennu'r gwerth a chyfanswm y cyflenwad. Pryd bynnag y bydd tocynnau newydd yn cael eu creu, rhaid i'r cod contract craff wirio yn annibynnol ei fod yn cydymffurfio â'r rheolau allyriadau. Yn ogystal, mae cyflwyno asedau yn anuniongyrchol yn arwain, mewn rhai achosion, at wallau difrifol - dyblygu, gwariant dwbl neu hyd yn oed golli asedau'n llwyr.

Diffyg rheolaeth mynediad hyblyg... Yr unig bolisi rheoli mynediad sy'n cael ei ddefnyddio ar hyn o bryd yw cynllun llofnod sy'n defnyddio cryptograffeg anghymesur. Fel amddiffyn prinder, mae polisïau rheoli mynediad wedi'u hymgorffori'n ddwfn yn semanteg yr iaith. Ond mae sut i ymestyn yr iaith i ganiatáu i raglenwyr ddiffinio eu polisïau rheoli mynediad eu hunain yn aml yn dasg anodd iawn.

Mae hyn hefyd yn wir am Ethereum, lle nad oes gan gontractau smart gefnogaeth frodorol ar gyfer cryptograffeg ar gyfer rheoli mynediad. Rhaid i ddatblygwyr ysgrifennu rheolaeth mynediad â llaw, er enghraifft, gan ddefnyddio'r addasydd onlyOwner.

Er fy mod yn gefnogwr mawr o Ethereum, credaf y dylai eiddo asedau gael eu cefnogi'n frodorol gan yr iaith am resymau diogelwch. Yn benodol, mae trosglwyddo Ether i gontract smart yn galluogi anfon deinamig, sydd wedi cyflwyno dosbarth newydd o fygiau a elwir yn wendidau ail-fynediad. Mae anfon deinamig yma yn golygu y bydd rhesymeg gweithredu'r cod yn cael ei phennu ar amser rhedeg (deinamig) ac nid ar amser llunio (statig).

Felly, yn Solidity, pan fydd contract A yn galw swyddogaeth contract B, gall contract B redeg cod na fwriadwyd gan ddatblygwr contract A, a all arwain at gwendidau ail-fynediad (mae contract A yn gweithredu'n ddamweiniol fel contract B i godi arian cyn i'r balansau gael eu didynnu o'r cyfrif).

Symud Hanfodion Dylunio Iaith

Adnoddau archeb gyntaf

Ar lefel uchel, mae'r rhyngweithio rhwng modiwlau / adnoddau / gweithdrefnau yn yr iaith Symud yn debyg iawn i'r berthynas rhwng dosbarthiadau / gwrthrychau a dulliau mewn ieithoedd OOP.
Mae modiwlau symud yn debyg i gontractau craff mewn blociau blociau eraill. Mae'r modiwl yn datgan mathau a gweithdrefnau adnoddau sy'n diffinio'r rheolau ar gyfer creu, dinistrio a diweddaru adnoddau datganedig. Ond confensiynau yn unig yw’r rhain i gyd (“jargon”) Wrth Symud. Byddwn yn darlunio’r pwynt hwn ychydig yn ddiweddarach.

Hyblygrwydd

Mae symud yn ychwanegu hyblygrwydd i Libra trwy sgriptio. Mae pob trafodiad yn Libra yn cynnwys sgript, sef prif weithdrefn y trafodiad mewn gwirionedd. Gall y sgript naill ai berfformio un weithred benodol, er enghraifft, gwneud taliadau i restr benodol o dderbynwyr, neu ailddefnyddio adnoddau eraill, er enghraifft, trwy alw gweithdrefn sy'n diffinio rhesymeg gyffredin. Dyma pam mae sgriptiau trafodion Symud yn cynnig llawer o hyblygrwydd. Gall sgript ddefnyddio ymddygiadau un-amser a chylchol, tra bod Ethereum yn gallu gweithredu sgriptiau cylchol yn unig (sy'n galw un dull contract smart). Y rheswm y'i gelwir yn "ailadrodd" yw y gellir cyflawni swyddogaethau contract smart sawl gwaith. (Nodyn: yma y foment yn gynnil iawn. Ar y naill law, mae sgriptiau trafodion ar ffurf ffug-bytecode yn Bitcoin. Ar y llaw arall, fel yr wyf yn ei ddeall, mae Move yn ehangu'r iaith hon, mewn gwirionedd, i lefel iaith contract smart llawn).

diogelwch

Fformat gweithredadwy Move yw bytecode, sydd, ar y naill law, yn iaith lefel uwch na chydosodwr, ond ar lefel is na chod ffynhonnell. Mae'r cod byte yn cael ei wirio mewn amser rhedeg (ar y gadwyn) am adnoddau, mathau, a diogelwch cof gan ddefnyddio dilysydd cod byte ac yna'n cael ei weithredu gan y cyfieithydd. Mae'r dull hwn yn caniatáu i Move ddarparu diogelwch cod ffynhonnell, ond heb y broses grynhoi a'r angen i ychwanegu casglwr i'r system. Mae Making Move yn iaith bytecode yn syniad da iawn. Nid oes angen ei lunio o'r ffynhonnell, oherwydd yn achos Solidity, nid oes angen poeni am fethiannau neu ymosodiadau posibl ar y seilwaith casglwr.

Gwiriadwyedd

Ein nod yw gwneud y gwiriadau mor hawdd â phosibl, gan fod y cyfan yn mynd yn ei flaen (sylwer: ar-lein, yn ystod gweithredu pob trafodyn, felly mae unrhyw oedi yn arwain at arafu'r rhwydwaith cyfan), ond i ddechrau mae'r dyluniad iaith yn barod i ddefnyddio offer gwirio statig oddi ar y gadwyn. Er bod hyn yn well, mae datblygiad offer dilysu (fel pecyn cymorth ar wahân) wedi'i ohirio ar gyfer y dyfodol, a dim ond dilysu deinamig mewn amser rhedeg (ar y gadwyn) sy'n cael ei gefnogi ar hyn o bryd.

Modiwlaidd

Mae modiwlau symud yn darparu tynnu data ac yn lleoleiddio gweithrediadau beirniadol ar adnoddau. Mae'r crynhoad a ddarperir gan y modiwl, ynghyd â'r amddiffyniad a ddarperir gan y system math Move, yn sicrhau na ellir torri eiddo sydd wedi'i osod ar fathau'r modiwl trwy god y tu allan i'r modiwl. Dyluniad tynnu sylw da yw hwn, sy'n golygu mai dim ond o fewn cwmpas y contract y gellir newid data o fewn contract, ond nid yn allanol.

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Symud trosolwg

Mae enghraifft sgript y trafodiad yn dangos na all gweithredoedd maleisus neu ddiofal gan raglennydd y tu allan i fodiwl beryglu diogelwch adnoddau modiwl. Nesaf, byddwn yn edrych ar enghreifftiau o sut mae modiwlau, adnoddau a gweithdrefnau yn cael eu defnyddio i raglennu'r blockchain Libra.

Taliadau cyfoedion i gyfoedion

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Bydd nifer y darnau arian a nodir yn y swm yn cael eu trosglwyddo o falans yr anfonwr i'r derbynnydd.
Mae sawl pwynt newydd yma (wedi'u hamlygu mewn arysgrifau coch):

  • 0x0: cyfeiriad y cyfrif lle mae'r modiwl yn cael ei storio
  • Arian cyfred: enw'r modiwl
  • Darn arian: math o adnodd
  • Mae'r gwerth darn arian a ddychwelir gan y weithdrefn yn werth adnoddau o fath 0x0.Currency.Coin
  • symud (): ni ellir defnyddio gwerth eto
  • copi (): gellir defnyddio gwerth yn nes ymlaen

Rhannwch y cod: yn y cam cyntaf, mae'r anfonwr yn galw gweithdrefn a enwir tynnu_from_sender o fodiwl sydd wedi'i storio yn 0x0.C Arian cyfred. Yn yr ail gam, mae'r anfonwr yn trosglwyddo arian i'r derbynnydd trwy symud gwerth yr adnodd darn arian i weithdrefn adneuo'r modiwl 0x0.C Arian cyfred.

Dyma dair enghraifft o wallau yn y cod a fydd yn cael eu gwrthod gan wiriadau:
Dyblygu cronfeydd trwy newid yr alwad symud (darn arian) ar copi (darn arian). Dim ond adnoddau y gellir eu symud. Ceisio dyblygu swm yr adnodd (er enghraifft, trwy ffonio copi (darn arian) yn yr enghraifft uchod) bydd yn arwain at wall wrth ddilysu is-god.

Ailddefnyddio arian trwy nodi symud (darn arian) ddwywaith . Ychwanegu llinell 0x0.Currency.deposit(copi(rhai_arall_talai), symud(darn arian)) bydd yr enghraifft uchod yn caniatáu i'r anfonwr "wario" y darnau arian ddwywaith - y tro cyntaf gyda'r talai, a'r ail dro gyda rhai_talai_arall. Mae hwn yn ymddygiad annymunol nad yw'n bosibl gydag ased corfforol. Yn ffodus, bydd Move yn gwrthod y rhaglen hon.

Colli arian oherwydd gwadu symud (darn arian). Os na fyddwch yn symud yr adnodd (er enghraifft, trwy ddileu'r llinell sy'n cynnwys symud (darn arian)), bydd gwall dilysu cod beit yn cael ei godi. Mae hyn yn amddiffyn rhaglenwyr Move rhag colli arian yn ddamweiniol neu'n faleisus.

Modiwl arian cyfred

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Gall pob cyfrif gynnwys 0 neu fwy o fodiwlau (a ddarlunnir fel blychau) ac un neu fwy o werthoedd adnoddau (a ddarlunnir fel silindrau). Er enghraifft, cyfrif yn 0x0 yn cynnwys modiwl 0x0.C Arian cyfred a math o werth adnodd 0x0.Currency.Coin. Cyfrif yn y cyfeiriad 0x1 dau adnodd ac un modiwl; Cyfrif yn y cyfeiriad 0x2 dau fodiwl ac un gwerth adnoddau.

Eiliadau nekotory:

  • Mae'r sgript trafodiad yn atomig - naill ai wedi'i gweithredu'n llwyr, neu ddim o gwbl.
  • Mae modiwl yn ddarn hirhoedlog o god sydd ar gael yn fyd-eang.
  • Mae'r cyflwr byd-eang wedi'i strwythuro fel tabl stwnsh, a chyfeiriad y cyfrif yw'r allwedd
  • Ni all cyfrifon gynnwys mwy nag un gwerth adnodd o fath penodol a dim mwy nag un modiwl gydag enw penodol (cyfrif yn 0x0 Ni all gynnwys adnodd ychwanegol 0x0.Currency.Coin neu fodiwl arall a enwir Arian cyfred)
  • Mae cyfeiriad y modiwl datganedig yn rhan o'r math (0x0.Currency.Coin и 0x1.Currency.Coin yn fathau ar wahân na ellir eu defnyddio'n gyfnewidiol)
  • Gall rhaglenwyr storio enghreifftiau lluosog o fath o adnodd penodol mewn cyfrif trwy ddiffinio eu hadnodd personol - (adnodd TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Gallwch gyfeirio at adnodd wrth ei enw heb wrthdaro, er enghraifft gallwch gyfeirio at ddau adnodd gan ddefnyddio DauCoins.c1 и DauCoins.c2.

Datganiad adnoddau darn arian

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook
Modiwl a enwyd Arian cyfred a math o adnodd wedi'i enwi Darn arian

Eiliadau nekotory:

  • Darn arian yn strwythur gydag un maes o fath u64 (cyfanrif heb ei lofnodi 64-did)
  • Gweithdrefnau modiwl yn unig Arian cyfred yn gallu creu neu ddinistrio gwerthoedd o fath Darn arian.
  • Dim ond trwy weithdrefnau cyhoeddus a ddarperir gan y modiwl y gall modiwlau a sgriptiau eraill ysgrifennu neu gyfeirio at y maes gwerth.

Gweithredu'r blaendal

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Mae'r weithdrefn hon yn derbyn adnodd Darn arian fel mewnbwn ac yn ei gydgadwynu ag adnodd Darn arianwedi'i storio ar gyfrif y buddiolwr:

  1. Dinistrio'r adnodd mewnbwn Coin ac ysgrifennu ei werth.
  2. Cael dolen i adnodd Coin unigryw storio ar gyfrif y derbynnydd.
  3. Newid gwerth nifer y Darnau Arian yn ôl y gwerth a basiwyd yn y paramedr wrth alw'r weithdrefn.

Eiliadau nekotory:

  • Dadbacio, BorrowGlobal - gweithdrefnau adeiledig
  • Dadbacio dyma'r unig ffordd i ddileu adnodd o fath T. Mae'r drefn yn cymryd adnodd fel mewnbwn, yn ei ddinistrio, ac yn dychwelyd y gwerth sy'n gysylltiedig â meysydd yr adnodd.
  • BorrowGlobal cymryd cyfeiriad fel mewnbwn ac yn dychwelyd cyfeiriad at yr enghraifft unigryw o T a gyhoeddwyd (yn eiddo) gan y cyfeiriad hwnnw
  • & mud Darn Arian mae hwn yn ddolen i adnodd Darn arian

Gweithredu pull_from_sender

Dive into Move, Iaith Rhaglennu Libra Blockchain Facebook

Mae'r weithdrefn hon:

  1. Yn cael dolen i adnodd unigryw Darn arian, yn gysylltiedig â chyfrif yr anfonwr
  2. Yn lleihau gwerth adnodd Darn arian drwy gyfeirio at y swm penodedig
  3. Yn creu ac yn dychwelyd adnodd newydd Darn arian gyda balans wedi'i ddiweddaru.

Eiliadau nekotory:

  • Adneuo gellir ei alw gan unrhyw un, ond tynnu_from_sender yn cael mynediad i ddarnau arian y cyfrif galw yn unig
  • Cyfeiriad GetTxnSender yn debyg i msg.sender mewn Cadernid
  • Gwrthod Oni bai yn debyg i ei gwneud yn ofynnol mewn Cadernid. Os bydd y gwiriad hwn yn methu, bydd gweithrediad y trafodiad yn dod i ben a chaiff yr holl newidiadau eu rholio'n ôl.
  • pecyn mae hefyd yn weithdrefn adeiledig sy'n creu adnodd newydd o fath T.
  • Yn ogystal a Dadbacio, pecyn dim ond y tu mewn i'r modiwl lle mae'r adnodd wedi'i ddatgan y gellir ei alw T

Casgliad

Fe wnaethom ddadansoddi prif nodweddion yr iaith Symud, ei gymharu ag Ethereum, a dod yn gyfarwydd hefyd â chystrawen sylfaenol sgriptiau. Yn olaf, rwy'n argymell pori yn fawr papur gwyn gwreiddiol. Mae'n cynnwys llawer o fanylion am egwyddorion dylunio iaith rhaglennu, yn ogystal â llawer o ddolenni defnyddiol.

Ffynhonnell: hab.com

Ychwanegu sylw