Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Ifuatayo, tutaangalia kwa undani sifa kuu za lugha ya Hoja na ni tofauti gani kuu na lugha nyingine, tayari maarufu kwa mikataba ya smart - Mshikamano (kwenye jukwaa la Ethereum). Nyenzo hii inatokana na utafiti wa karatasi nyeupe ya kurasa 26 inayopatikana mtandaoni.

Utangulizi

Move ni lugha ya bytecode inayoweza kutekelezwa ambayo hutumiwa kutekeleza miamala ya watumiaji na mikataba mahiri. Tafadhali kumbuka mambo mawili:

  1. Ingawa Move ni lugha ya bytecode inayoweza kutekelezwa moja kwa moja kwenye Move Virtual Machine, Solidity (lugha mahiri ya mkataba katika Ethereum) ni lugha ya kiwango cha juu ambayo hutungwa kwanza kuwa bytecode kabla ya kutekelezwa katika EVM (Ethereum Virtual Machine).
  2. Hoja inaweza kutumika sio tu kutekeleza mikataba mahiri, lakini pia kwa miamala ya watumiaji (zaidi kuhusu hili baadaye), ilhali Solidity ni lugha mahiri ya mkataba pekee.


Tafsiri ilitekelezwa na timu ya mradi wa Itifaki ya INDEX. Tayari tumetafsiri nyenzo kubwa inayoelezea mradi wa Libra, sasa ni wakati wa kuangalia lugha ya Hamisha kwa undani zaidi. Tafsiri ilifanywa kwa pamoja na Habrauser coolsiu

Kipengele muhimu cha Hamisha ni uwezo wa kufafanua aina za rasilimali maalum kwa kutumia semantiki kulingana na mantiki ya mstari: nyenzo kamwe haiwezi kunakiliwa au kufutwa kabisa, kuhamishwa pekee. Kiutendaji, hii ni sawa na uwezo wa lugha ya Rust. Thamani katika Rust zinaweza tu kupewa jina moja kwa wakati mmoja. Kukabidhi thamani kwa jina tofauti huifanya isipatikane chini ya jina la awali.

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Kwa mfano, kijisehemu cha msimbo kifuatacho kitatupa hitilafu: Matumizi ya thamani iliyosogezwa 'x'. Hii ni kwa sababu Kutu haina mkusanyiko wa takataka. Vigezo vinapotoka nje ya wigo, kumbukumbu wanayorejelea pia huachiliwa. Kwa ufupi, kunaweza kuwa na "mmiliki" mmoja tu wa data. Katika mfano huu x ni mmiliki wa awali na kisha y anakuwa mmiliki mpya. Soma zaidi kuhusu tabia hii hapa.

Inawakilisha mali ya dijiti katika mifumo wazi

Kuna sifa mbili za mali za kimwili ambazo ni vigumu kuziwakilisha kidijitali:

  • Uchekeshaji (Uhaba, katika asili - uhaba). Idadi ya mali (utoaji) kwenye mfumo lazima idhibitiwe. Urudufu wa mali zilizopo lazima uzuiwe, na kuunda mpya ni operesheni ya bahati.
  • Udhibiti wa upatikanaji. Mshiriki wa mfumo lazima awe na uwezo wa kulinda mali kwa kutumia sera za udhibiti wa ufikiaji.

Sifa hizi mbili, ambazo ni za asili kwa mali halisi, lazima pia zitekelezwe kwa vitu vya kidijitali ikiwa tunataka kuzizingatia kama mali. Kwa mfano, chuma cha nadra kina uhaba wa asili, na ni wewe tu unaoweza kuipata (kuishikilia mikononi mwako, kwa mfano) na unaweza kuiuza au kuitumia.

Ili kuonyesha jinsi tulivyofikia sifa hizi mbili, wacha tuanze na sentensi zifuatazo:

Hoja #1: Kanuni rahisi zaidi bila uhaba na udhibiti wa ufikiaji

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

  • G[K]:=n inaashiria kusasisha nambari inayopatikana kwa ufunguo К katika hali ya kimataifa ya blockchain, na maana mpya n.
  • shughuli ⟨Alice, 100⟩ inamaanisha kuweka salio la akaunti ya Alice hadi 100.

Suluhisho hapo juu lina shida kadhaa kubwa:

  • Alice anaweza kupokea idadi isiyo na kikomo ya sarafu kwa kutuma tu muamala ⟨Alice, 100⟩.
  • Sarafu ambazo Alice hutuma kwa Bob hazina thamani, kwani Bob angeweza kujitumia idadi isiyo na kikomo ya sarafu kwa kutumia mbinu hiyo hiyo.

Pendekezo Nambari 2: Zingatia upungufu

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Sasa tunafuatilia hali hiyo ili idadi ya sarafu Ka ilikuwa angalau sawa n kabla ya shughuli ya uhamisho. Walakini, wakati hii inasuluhisha shida ya uhaba, hakuna habari kuhusu ni nani anayeweza kutuma sarafu za Alice (kwa sasa, mtu yeyote anaweza kufanya hivi, mradi hauvunji sheria ya kikomo cha idadi).

Pendekezo #3: Changanya Uhaba na Udhibiti wa Ufikiaji

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Tunatatua tatizo hili kwa kutumia utaratibu wa sahihi wa dijitali thibitisha_sig kabla ya kuangalia salio, kumaanisha kwamba Alice anatumia ufunguo wake wa faragha kutia sahihi shughuli hiyo na kuthibitisha kuwa yeye ndiye mmiliki wa sarafu zake.

Lugha za Programu za Blockchain

Lugha zilizopo za blockchain zinakabiliwa na shida zifuatazo (zote zilitatuliwa katika Hoja). Kwa bahati mbaya, mwandishi wa makala inahusu Ethereum tu kwa kulinganisha kwake, hivyo wanapaswa kuchukuliwa tu katika muktadha huu. Kwa mfano, mengi ya yafuatayo pia yanatatuliwa katika EOS)):

Uwakilishi usio wa moja kwa moja wa mali. Kipengee kimesimbwa kwa kutumia nambari kamili, lakini nambari kamili si sawa na kipengee. Kwa hakika, hakuna aina au thamani inayowakilisha Bitcoin/Ether/! Hii hufanya kuandika programu zinazotumia vipengee kuwa ngumu na kukabiliwa na makosa. Sampuli kama vile kupitisha mali hadi/kutoka kwa taratibu au kuhifadhi mali katika miundo zinahitaji usaidizi maalum kutoka kwa lugha.

Upungufu hauongezeki. Lugha inawakilisha mali moja tu adimu. Kwa kuongezea, njia za ulinzi dhidi ya upungufu zimeunganishwa moja kwa moja kwenye semantiki za lugha. Msanidi programu, ikiwa anataka kuunda mali maalum, lazima adhibiti kwa uangalifu vipengele vyote vya rasilimali mwenyewe. Haya ndiyo matatizo hasa ya mikataba ya smart ya Ethereum.

Watumiaji hutoa mali zao, tokeni za ERC-20, kwa kutumia nambari kamili ili kubaini thamani na jumla ya usambazaji. Wakati wowote tokeni mpya zinapoundwa, msimbo mahiri wa mkataba lazima uthibitishe kwa kujitegemea kufuata sheria za utoaji. Kwa kuongeza, uwakilishi usio wa moja kwa moja wa mali husababisha, katika baadhi ya matukio, kwa makosa makubwa - kurudia, matumizi ya mara mbili au hata hasara kamili ya mali.

Ukosefu wa udhibiti wa ufikiaji rahisi. Sera pekee ya udhibiti wa ufikiaji inayotekelezwa kwa sasa ni mpango sahihi unaotumia kriptografia isiyolinganishwa. Kama vile ulinzi wa uhaba, sera ya udhibiti wa ufikiaji imepachikwa kwa kina katika semantiki ya lugha. Lakini jinsi ya kupanua lugha ili kuruhusu watayarishaji programu kufafanua sera zao za udhibiti wa ufikiaji mara nyingi ni kazi yenye changamoto.

Hili pia ni kweli kwenye Ethereum, ambapo mikataba mahiri haina usaidizi wa usimbaji fiche asilia kwa udhibiti wa ufikiaji. Wasanidi lazima waweke udhibiti wa ufikiaji wao wenyewe, kwa mfano, kwa kutumia kirekebishaji cha Mmiliki pekee.

Ingawa mimi ni shabiki mkubwa wa Ethereum, ninaamini kuwa mali inapaswa kuungwa mkono na lugha kwa madhumuni ya usalama. Hasa, kuhamisha Etha hadi kwa mkataba mahiri huhusisha utumaji unaobadilika, ambao umeanzisha aina mpya ya hitilafu inayojulikana kama udhaifu wa kuingia tena. Utumaji unaobadilika hapa unamaanisha kuwa mantiki ya utekelezaji wa msimbo itabainishwa wakati wa utekelezaji (nguvu) badala ya wakati wa kukusanya (tuli).

Kwa hivyo, katika Mshikamano, mkataba A unapoita kazi katika mkataba B, mkataba B unaweza kutekeleza kanuni ambayo haikukusudiwa na msanidi wa mkataba A, ambayo inaweza kusababisha udhaifu wa kuingia tena (mkataba A kwa bahati mbaya unakuwa kama mkataba B wa kutoa pesa kabla ya salio la akaunti kukatwa).

Hoja Misingi ya Usanifu wa Lugha

Kwanza kuagiza rasilimali

Kuzungumza kwa kiwango cha juu, mwingiliano kati ya moduli/nyenzo/taratibu katika lugha ya Hamisha ni sawa na uhusiano kati ya madarasa/vitu na mbinu katika lugha za OOP.
Moduli katika Move ni sawa na mikataba mahiri katika minyororo mingine ya kuzuia. Moduli inatangaza aina za rasilimali na taratibu zinazobainisha sheria za kuunda, kuharibu, na kusasisha rasilimali zilizotangazwa. Lakini haya yote ni makusanyiko tu ("jargon”) katika Hamisha. Tutaelezea jambo hili baadaye kidogo.

Utulivu

Hoja huongeza kubadilika kwa Mizani kupitia uandishi. Kila muamala katika Mizani ni pamoja na hati, ambayo kimsingi ndiyo utaratibu wa msingi wa muamala. Hati inaweza kutekeleza kitendo kimoja maalum, kwa mfano, malipo kwa orodha maalum ya wapokeaji, au kutumia tena rasilimali zingine - kwa mfano, kwa kuitisha utaratibu ambao mantiki ya jumla imebainishwa. Hii ndiyo sababu hati za shughuli za Hamisha hutoa unyumbufu zaidi. Hati inaweza kutumia tabia za wakati mmoja na zinazojirudia, ilhali Ethereum inaweza tu kutekeleza hati zinazoweza kurudiwa (ita njia moja kwenye mbinu mahiri ya mkataba). Sababu inaitwa "inayoweza kutumika tena" ni kwa sababu kazi za mkataba mahiri zinaweza kutekelezwa mara nyingi. (Kumbuka: Hoja hapa ni hila sana. Kwa upande mmoja, hati za shughuli katika mfumo wa pseudo-bytecode pia zipo katika Bitcoin. Kwa upande mwingine, kama ninavyoielewa, Move inapanua lugha hii, kwa kweli, hadi kiwango cha lugha kamili ya mkataba mzuri.).

usalama

Umbizo la Move inayoweza kutekelezwa ni bytecode, ambayo ni, kwa upande mmoja, lugha ya kiwango cha juu kuliko lugha ya mkusanyiko, lakini kiwango cha chini kuliko msimbo wa chanzo. Bytecode huangaliwa katika muda wa kukimbia (on-chain) kwa rasilimali, aina na usalama wa kumbukumbu kwa kutumia kithibitishaji cha bytecode, na kisha kutekelezwa na mkalimani. Mbinu hii inaruhusu Hoja kutoa usalama wa msimbo wa chanzo, lakini bila mchakato wa ujumuishaji na hitaji la kuongeza mkusanyaji kwenye mfumo. Kufanya Sogeza lugha ya bytecode ni suluhisho nzuri sana. Haihitaji kukusanywa kutoka kwa chanzo, kama ilivyo kwa Solidity, na hakuna haja ya kuwa na wasiwasi juu ya kushindwa iwezekanavyo au mashambulizi kwenye miundombinu ya mkusanyaji.

Uthibitisho

Tunalenga kufanya ukaguzi kwa urahisi iwezekanavyo, kwani yote haya hufanywa kwa mnyororo (kumbuka: mtandaoni, wakati wa utekelezaji wa kila shughuli, hivyo ucheleweshaji wowote husababisha kupungua kwa mtandao mzima), hata hivyo, mwanzoni muundo wa lugha uko tayari kutumia zana za uthibitishaji zisizo na mnyororo. Ingawa hii inapendekezwa zaidi, kwa sasa uundaji wa zana za uthibitishaji (kama zana tofauti) umeahirishwa hadi siku zijazo, na sasa ni uthibitishaji wa nguvu tu katika muda wa utekelezaji (on-chain) unaotumika.

Utaratibu

Moduli za kuhamisha hutoa uondoaji wa data na kubinafsisha utendakazi wa rasilimali muhimu. Usimbaji unaotolewa na moduli, pamoja na ulinzi unaotolewa na mfumo wa aina ya Hamisha, huhakikisha kuwa sifa zilizowekwa kwenye aina za moduli haziwezi kukiukwa na msimbo nje ya moduli. Huu ni muundo wa busara wa uondoaji, kumaanisha kuwa data iliyo ndani ya mkataba inaweza tu kubadilishwa ndani ya mawanda ya mkataba, na sio kutoka nje.

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Sogeza hakiki

Mfano wa hati ya muamala unaonyesha kuwa vitendo viovu au vya kutojali vinavyofanywa na mpangaji programu nje ya sehemu hiyo haviwezi kuhatarisha usalama wa nyenzo za sehemu hii. Ifuatayo, tutaangalia mifano ya jinsi moduli, rasilimali, na taratibu zinatumika kupanga msururu wa Mizani.

Malipo ya Rika kwa Rika

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Idadi ya sarafu iliyobainishwa kwa kiasi itahamishwa kutoka salio la mtumaji hadi kwa mpokeaji.
Kuna mambo machache mapya hapa (yaliyoangaziwa kwa rangi nyekundu):

  • 0x0: anwani ya akaunti ambapo moduli imehifadhiwa
  • Sarafu: jina la moduli
  • Coin: aina ya rasilimali
  • Thamani ya sarafu iliyorejeshwa na utaratibu ni thamani ya rasilimali ambayo aina yake ni 0x0.Currency.Coin
  • hoja (): thamani haiwezi kutumika tena
  • nakala (): thamani inaweza kutumika baadaye

Hebu tuangalie msimbo: katika hatua ya kwanza, mtumaji huita utaratibu unaoitwa ondoa_kutoka_kwa_mtumaji kutoka kwa moduli iliyohifadhiwa ndani 0x0.Fedha. Katika hatua ya pili, mtumaji huhamisha fedha kwa mpokeaji kwa kuhamisha thamani ya rasilimali ya sarafu kwenye utaratibu wa kuhifadhi wa moduli. 0x0.Fedha.

Hapa kuna mifano mitatu ya makosa katika nambari ambayo yatakataliwa na hundi:
Rudufu pesa kwa kubadilisha simu hoja (sarafu) juu ya nakala (sarafu). Rasilimali zinaweza tu kuhamishwa. Kujaribu kurudia idadi ya rasilimali (kwa mfano, kwa kupiga simu nakala (sarafu) katika mfano hapo juu) itasababisha hitilafu wakati wa uthibitishaji wa bytecode.

Matumizi tena ya fedha kwa kubainisha hoja (sarafu) mara mbili . Kuongeza mstari 0x0.Currency.deposit (nakala (mlipaji_wengine), hamisha (sarafu)) kwa mfano, hapo juu itamruhusu mtumaji "kutumia" sarafu mara mbili - mara ya kwanza na mlipaji, na ya pili na mlipaji_mwingine. Hii ni tabia isiyofaa ambayo haiwezekani kwa mali ya kimwili. Kwa bahati nzuri, Hoja itakataa programu hii.

Upotezaji wa pesa kwa sababu ya kukataa hoja (sarafu). Ikiwa hutahamisha rasilimali (kwa mfano, kwa kufuta mstari ulio na hoja (sarafu)), hitilafu ya uthibitishaji wa bytecode itatupwa. Hii inalinda Hamisha watayarishaji programu dhidi ya upotevu wa pesa kwa bahati mbaya au hasidi.

Moduli ya sarafu

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Kila akaunti inaweza kuwa na moduli 0 au zaidi (zinazoonyeshwa kama mistatili) na thamani moja au zaidi ya rasilimali (zinazoonyeshwa kama silinda). Kwa mfano, akaunti katika 0x0 ina moduli 0x0.Fedha na thamani ya aina ya rasilimali Sarafu.0x0.Sarafu. Akaunti kwa anwani 0x1 ina rasilimali mbili na moduli moja; Akaunti kwa anwani 0x2 ina moduli mbili na thamani moja ya rasilimali.

Wakati fulani:

  • Hati ya muamala ni ya atomiki - ama inatekelezwa kabisa au isitekelezwe kabisa.
  • Moduli ni kipande cha msimbo cha muda mrefu ambacho kinaweza kufikiwa kimataifa.
  • Hali ya kimataifa imeundwa kama jedwali la hashi, ambapo ufunguo ni anwani ya akaunti
  • Akaunti inaweza kuwa na si zaidi ya thamani moja ya rasilimali ya aina fulani na si zaidi ya moduli moja yenye jina fulani (akaunti katika 0x0 haiwezi kuwa na rasilimali ya ziada Sarafu.0x0.Sarafu au moduli nyingine iliyopewa jina Sarafu)
  • Anwani ya moduli iliyotangazwa ni sehemu ya aina (Sarafu.0x0.Sarafu ΠΈ Sarafu.0x1.Sarafu ni aina tofauti ambazo haziwezi kutumika kwa kubadilishana)
  • Waandaaji programu wanaweza kuhifadhi hali nyingi za aina hii ya rasilimali kwenye akaunti kwa kufafanua rasilimali zao maalum - (rasilimali TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Unaweza kurejelea rasilimali kwa jina lake bila migongano, kwa mfano unaweza kurejelea rasilimali mbili ukitumia TwoCoins.c1 ΠΈ TwoCoins.c2.

Tangazo la rasilimali ya sarafu

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain
Moduli iliyopewa jina Sarafu na aina ya rasilimali iliyopewa jina Coin

Wakati fulani:

  • Coin ni muundo wenye uwanja mmoja wa aina u64 (nambari kamili isiyo na 64-bit)
  • Taratibu za moduli pekee Sarafu inaweza kuunda au kuharibu maadili ya aina Coin.
  • Moduli na hati zingine zinaweza tu kuandika au kurejelea uga wa thamani kupitia taratibu za umma zinazotolewa na moduli.

Uuzaji wa amana

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Utaratibu huu unakubali rasilimali Coin kama pembejeo na kuichanganya na rasilimali Coiniliyohifadhiwa katika akaunti ya mpokeaji:

  1. Kuharibu sarafu ya rasilimali ya pembejeo na kurekodi thamani yake.
  2. Inapokea kiungo cha rasilimali ya kipekee ya Sarafu iliyohifadhiwa kwenye akaunti ya mpokeaji.
  3. Kubadilisha thamani ya nambari ya Sarafu kwa thamani iliyopitishwa kwenye parameta wakati wa kupiga utaratibu.

Wakati fulani:

  • Fungua, BorrowGlobal - taratibu zilizojengwa
  • Fungua Hii ndiyo njia pekee ya kufuta rasilimali ya aina T. Utaratibu huchukua rasilimali kama ingizo, huiharibu, na kurejesha thamani inayohusishwa na sehemu za rasilimali.
  • BorrowGlobal huchukua anwani kama ingizo na kurudisha rejeleo kwa mfano wa kipekee wa T iliyochapishwa (inayomilikiwa) na anwani hiyo
  • &mut Coin hiki ni kiungo cha rasilimali Coin

Utekelezaji wa kujiondoa_kutoka_kwa_mtumaji

Ingia kwenye Move - Lugha ya programu ya Facebook ya Libra blockchain

Utaratibu huu:

  1. Hupata kiungo cha rasilimali ya kipekee Coin, iliyounganishwa na akaunti ya mtumaji
  2. Hupunguza thamani ya rasilimali Coin kupitia kiungo kwa kiasi kilichotajwa
  3. Inaunda na kurejesha rasilimali mpya Coin na mizani iliyosasishwa.

Wakati fulani:

  • Amana inaweza kusababishwa na mtu yeyote, lakini ondoa_kutoka_kwa_mtumaji ina ufikiaji wa sarafu za akaunti ya kupiga simu pekee
  • GetTxnSenderAddress sawa na msg.mtumaji katika Mshikamano
  • KataaIsipokuwa sawa na zinahitaji katika Mshikamano. Hundi hii ikishindwa, muamala utasimamishwa na mabadiliko yote yanarejeshwa.
  • Pakiti pia ni utaratibu uliojengwa ndani ambao huunda rasilimali mpya ya aina T.
  • Pia Fungua , Pakiti inaweza tu kuitwa ndani ya moduli ambapo rasilimali imeelezewa T

Hitimisho

Tulichunguza sifa kuu za lugha ya Move, tukailinganisha na Ethereum, na pia tukafahamu sintaksia ya msingi ya hati. Hatimaye, ninapendekeza sana kuangalia karatasi nyeupe ya asili. Inajumuisha maelezo mengi kuhusu kanuni za kubuni lugha ya programu, pamoja na viungo vingi muhimu.

Chanzo: mapenzi.com

Kuongeza maoni