Plonje nan Move - langaj pwogramasyon Libra Facebook la

Next, nou pral konsidere an detay karakteristik prensipal yo nan lang lan Deplase ak ki sa ki diferans kle li yo ak yon lòt, deja popilè lang pou kontra entelijan - Solidite (sou platfòm la Ethereum). Materyèl la baze sou yon etid sou papye ki disponib sou entènèt 26 paj la.

Entwodiksyon

Move se yon lang bytecode ègzekutabl ki itilize pou egzekite tranzaksyon itilizatè yo ak kontra entelijan. Tanpri sonje de pwen:

  1. Pandan ke Deplase se yon lang bytecode ki ka dirèkteman egzekite sou machin nan Deplase vityèl, Solidite (lang kontra entelijan Ethereum a) se yon lang ki pi wo nivo ki se premye konpile bytecode anvan yo te egzekite sou yon EVM (Ethereum Virtual Machine).
  2. Deplase ka itilize pa sèlman aplike kontra entelijan, men tou, pou tranzaksyon koutim (plis sou sa pita), pandan y ap Solidite se yon lang entelijan kontra sèlman.


Tradiksyon an te fèt pa ekip pwojè INDEX Pwotokòl la. Nou te deja tradui gwo materyèl ki dekri pwojè Libra a, kounye a li lè yo gade nan lang nan Deplase nan yon ti kras plis detay. Tradiksyon an te fèt ansanm ak Habrauser coolsiu

Yon karakteristik kle nan Move se kapasite nan defini kalite resous koutim ak semantik ki baze sou lojik lineyè: yon resous pa janm ka kopye oswa efase implicitman, sèlman deplase. Fonksyonèlman, sa sanble ak kapasite lang Rust la. Valè nan Rust ka sèlman asiyen nan yon non nan yon moman. Bay yon valè nan yon non diferan fè li pa disponib anba non anvan an.

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Pou egzanp, brib kòd sa a pral voye yon erè: Sèvi ak valè deplase 'x'. Sa a se paske pa gen okenn koleksyon fatra nan rouye. Lè varyab ale soti nan sijè ki abòde lan, memwa yo refere yo libere tou. Senpleman mete, kapab fèt sèlman yon sèl "pwopriyetè" nan done yo. Nan egzanp sa a x se mèt kay orijinal la ak Lè sa a y vin nouvo pwopriyetè a. Li plis sou konpòtman sa a isit la.

Reprezantasyon nan byen dijital nan sistèm louvri

Gen de pwopriyete byen fizik ki difisil pou reprezante nimerik:

  • Rarite (Rate, orijinal rate). Kantite byen (emisyon) nan sistèm lan dwe kontwole. Kopi byen ki egziste deja yo dwe entèdi, epi kreye nouvo se yon operasyon privilejye.
  • Aksè kontwòl... Patisipan nan sistèm dwe kapab pwoteje byen lè l sèvi avèk règleman kontwòl aksè.

De karakteristik sa yo, ki natirèl pou byen fizik, yo dwe aplike pou objè dijital si nou vle konsidere yo kòm byen. Pou egzanp, yon metal ki ra gen yon rate natirèl, epi sèlman ou gen aksè a li (kenbe l 'nan men ou, pou egzanp) epi ou ka vann oswa depanse li.

Pou ilistre ki jan nou te rive nan de pwopriyete sa yo, kite la kòmanse ak fraz sa yo:

Sijesyon # 1: Règ ki pi senp san rate ak kontwòl aksè

Plonje nan Move - langaj pwogramasyon Libra Facebook la

  • G [K]: = n vle di yon ajou nan yon nimewo aksesib pa yon kle К nan eta mondyal blokchèn lan, ak yon nouvo siyifikasyon n.
  • tranzaksyon lAlice, 100⟩ vle di mete balans kont Alice a 100.

Solisyon ki anwo a gen plizyè gwo pwoblèm:

  • Alice ka resevwa yon kantite san limit nan pyès monnen pa senpleman voye tranzaksyon iceAlice, 100⟩.
  • Pyès monnen Alice voye bay Bob yo pa itil, menm jan Bob te ka voye tèt li yon kantite san pyès monnen avèk menm teknik lan.

Sijesyon # 2: Lè w ap pran an kont defisi a

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Koulye a, nou ap kontwole sitiyasyon an pou ke kantite pyès monnen Ka te omwen egal n anvan tranzaksyon transfè a. Sepandan, pandan ke sa a rezoud pwoblèm lan nan rate, pa gen okenn enfòmasyon sou ki moun ki ka voye pyès monnen Alice a (pou kounye a, nenpòt moun ki ka fè sa, bagay la prensipal se pa vyole règ la nan limite kantite lajan an).

Pwopozisyon # 3: Konbine rate ak kontwòl aksè

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Nou rezoud pwoblèm sa a ak yon mekanis siyati dijital verifye_sig anvan ou tcheke balans lan, ki vle di ke Alice sèvi ak kle prive l 'yo siyen tranzaksyon an ak konfime ke li se mèt kay la nan pyès monnen li.

Lang pwogram blokchèn

Lang blockchain ki egziste deja yo fè fas a pwoblèm sa yo (tout nan yo te rezoud nan Deplase (nòt: malerezman, otè a nan atik la sèlman apèl nan Ethereum nan konparezon l 'yo, kidonk li vo pran yo sèlman nan kontèks sa a. Pou egzanp, pi fò nan sa ki annapre yo tou rezoud nan EOS.)):

Reprezantasyon endirèk nan byen yo. Yon byen kode lè l sèvi avèk yon nonb antye relatif, men yon nonb antye relatif pa menm ak yon avantaj. An reyalite, pa gen okenn kalite oswa valè ki reprezante Bitcoin / Etè / <Nenpòt pyès monnen>! Sa fè ekri pwogram ki sèvi ak byen difisil ak erè ki gen tandans. Modèl tankou pase byen nan/soti nan pwosedi oswa estoke byen nan estrikti mande pou sipò espesyal nan lang nan.

Defisi a pa dilatabl... Lang reprezante yon sèl avantaj ra. Anplis de sa, remèd yo kont rate yo hardwired dirèkteman nan semantik la nan lang nan tèt li. Pwomotè a, si li vle kreye yon avantaj koutim, yo dwe ak anpil atansyon kontwole tout aspè nan resous nan tèt li. Sa yo se egzakteman pwoblèm yo nan kontra entelijan Ethereum.

Itilizatè yo bay byen yo, ERC-20 marqueur, lè l sèvi avèk nonb antye relatif detèmine tou de valè a ak rezèv la total. Chak fwa nouvo marqueur yo kreye, kòd kontra entelijan an dwe poukont verifye konfòmite avèk règleman emisyon yo. Anplis de sa, prezantasyon an endirèk nan byen mennen, nan kèk ka, nan erè grav - kopi, depans doub oswa menm pèt konplè sou byen yo.

Mank kontwòl aksè fleksib... Règleman kontwòl aksè sèlman nan itilize jodi a se yon konplo siyati lè l sèvi avèk asymetrik kriptografik. Tankou pwoteksyon rate, règleman kontwòl aksè yo pwofondman entegre nan semantik lang lan. Men, ki jan pou yon ekstansyon pou lang nan pèmèt pwogramè yo defini pwòp règleman kontwòl aksè yo se souvan yon travay trè difisil.

Sa a se vre tou sou Ethereum, kote kontra entelijan pa gen sipò kriptografik natif natal pou kontwòl aksè. Devlopè yo dwe manyèlman mete kontwòl aksè, pou egzanp, lè l sèvi avèk modifye onlyOwner la.

Menm si mwen se yon gwo fanatik Ethereum, mwen kwè ke pwopriyete avantaj yo ta dwe natif natal sipòte pa lang nan pou rezon sekirite. An patikilye, transfere Etè nan yon kontra entelijan enplike dispatch dinamik, ki te prezante yon nouvo klas pinèz ke yo rekonèt kòm frajilite re-antre. Ekspedisyon dinamik isit la vle di ke lojik ekzekisyon kòd la pral detèmine nan tan exécuter (dinamik) olye ke nan tan konpile (estatik).

Kidonk, nan Solidity, lè kontra A rele yon fonksyon nan kontra B, kontra B ka kouri kòd ki pa te gen entansyon pa pwomotè kontra A a, ki ka lakòz frajilite re-antre (Kontra A a aza/chans aji kòm kontra B pou retire lajan anvan sold yo kont yo aktyèlman dedwi).

Deplase Fondamantal konsepsyon Lang

Resous premye lòd

Nan yon nivo segondè, entèraksyon ki genyen ant modil / resous / pwosedi nan lang lan Deplase se trè menm jan ak relasyon ki genyen ant klas / objè ak metòd nan lang OOP.
Modil Deplase yo sanble ak kontra entelijan nan lòt blokch. Modil la deklare kalite resous ak pwosedi ki defini règleman yo pou kreye, detwi, ak ajou deklare resous yo. Men, tout sa yo se jis konvansyon ("jagon”) Nan Deplase. Nou pral ilistre pwen sa a yon ti kras pita.

Fleksibilite

Move ajoute fleksibilite nan Libra atravè scripting. Chak tranzaksyon nan Libra gen ladan yon script, ki se esansyèlman pwosedi debaz tranzaksyon an. Script la ka fè swa yon aksyon espesifye, pou egzanp, peman nan yon lis espesifye nan benefisyè, oswa reitilize lòt resous - pou egzanp, lè w rele yon pwosedi kote yo espesifye lojik jeneral la. Se poutèt sa Move scripts tranzaksyon yo ofri pi gwo fleksibilite. Yon script ka itilize tou de yon sèl fwa ak repete konpòtman, pandan y ap Ethereum ka sèlman egzekite scripts repete (rele yon metòd sou yon metòd kontra entelijan). Rezon ki fè yo rele li "reutilisable" se paske fonksyon yo nan yon kontra entelijan ka egzekite plizyè fwa. (Remak: Pwen isit la trè sibtil. Sou yon bò, scripts tranzaksyon yo nan fòm pseudo-bytecode egziste tou nan Bitcoin. Nan lòt men an, jan mwen konprann li, Move elaji lang sa a, an reyalite, nan nivo a nan yon lang konplè kontra entelijan.).

Безопасность

Fòma ègzekutabl Move a se bytecode, ki se, sou yon bò, yon lang ki pi wo pase lang asanble, men pi ba nivo pase kòd sous. Bytecode a tcheke nan tan kouri (sou-chèn) pou resous, kalite ak sekirite memwa lè l sèvi avèk yon verifikatè bytecode, ak Lè sa a, egzekite pa entèprèt la. Apwòch sa a pèmèt Move bay sekirite nan kòd sous, men san yo pa pwosesis la konpilasyon ak bezwen an ajoute yon du nan sistèm nan. Fè Move yon lang bytecode se yon solisyon reyèlman bon. Li pa bezwen konpile soti nan sous, menm jan se ka a ak Solidity, epi pa gen okenn bezwen enkyete sou echèk posib oswa atak sou enfrastrikti a du.

Verifikasyon

Nou vize pou fè chèk pi fasil ke posib, paske tout bagay sa yo fèt sou chèn (nòt: sou entènèt, pandan ekzekisyon an nan chak tranzaksyon, se konsa nenpòt reta mennen nan yon ralentissement nan rezo a tout antye), sepandan, okòmansman konsepsyon lang lan pare pou itilize zouti verifikasyon estatik ki pa chèn. Malgre ke sa a pi preferab, pou kounye a devlopman nan zouti verifikasyon (kòm yon zouti separe) te ranvwaye pou lavni an, epi kounye a se sèlman verifikasyon dinamik nan tan kouri (sou-chèn) sipòte.

Modularite

Modil Deplase bay done abstraction ak lokalize operasyon kritik sou resous yo. Enkapsulasyon ki ofri pa modil la, konbine avèk pwoteksyon ki ofri pa sistèm nan kalite Deplase, asire ke pwopriyete mete sou kalite modil la pa ka vyole pa kòd deyò modil la. Sa a se yon konsepsyon abstraction san patipri byen panse, sa vle di ke done yo andedan kontra a ka chanje sèlman nan kad kontra a, men se pa deyò.

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Deplase BECA

Egzanp script tranzaksyon an montre ke aksyon move oswa neglijan pa yon pwogramè deyò yon modil pa ka konpwomèt sekirite resous yon modil la. Apre sa, nou pral gade nan egzanp ki jan modil, resous, ak pwosedi yo te itilize nan pwogram blokaj la Libra.

Peman ant kanmarad

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Kantite pyès monnen ki espesifye nan kantite lajan yo pral transfere nan balans moun k ap voye a bay moun k ap resevwa a.
Gen kèk nouvo bagay isit la (ak make an wouj):

  • 0x0: adrès kont lan kote modil la estoke
  • Lajan: non modil
  • Pyès monnen: kalite resous
  • Valè a pyès monnen retounen pa pwosedi a se yon valè resous nan kalite 0x0.Currency.Coin
  • deplase (): valè pa ka itilize ankò
  • kopi (): valè ka itilize pita

Analize kòd la: nan premye etap la, moun k la rele yon pwosedi yo te rele retire_nan_sendè a soti nan yon modil ki estoke nan 0x0.Lajan. Nan dezyèm etap la, moun k la transfere lajan bay moun k ap resevwa a pa deplase valè resous pyès monnen an nan pwosedi depo modil la. 0x0.Lajan.

Men twa egzanp erè nan kòd ke chèk yo pral rejte:
Kopi lajan pa chanje apèl la deplase (pyès monnen) sou kopi (pyès monnen). Resous yo ka sèlman deplase. Eseye kopi yon kantite nan yon resous (pa egzanp, lè w rele kopi (pyès monnen) nan egzanp ki anwo a) sa pral lakòz yon erè pandan y ap tcheke bytecode la.

Reutilize lajan pa espesifye deplase (pyès monnen) de fwa . Ajoute yon liy 0x0.Currency.deposit (kopi (some_other_payee), deplase (coin)) pou egzanp, pi wo a pral pèmèt moun k la "depanse" pyès monnen yo de fwa - premye fwa a ak benefisyè a, ak dezyèm fwa a ak kèk_lòt_peye. Sa a se yon konpòtman endezirab ki pa posib ak yon avantaj fizik. Erezman, Move pral rejte pwogram sa a.

Pèt lajan akòz refi deplase (pyès monnen). Si ou pa deplase resous la (pa egzanp, lè w efase liy ki genyen deplase (pyès monnen)), yo pral voye yon erè verifikasyon bytecode. Sa a pwoteje pwogramasyon Move kont pèt lajan aksidan oswa move.

Modil lajan

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Chak kont ka genyen 0 oswa plis modil (yo montre kòm rektang) ak youn oswa plis valè resous (yo montre kòm silenn). Pou egzanp, yon kont nan 0x0 gen modil 0x0.Lajan ak valè kalite resous la 0x0.Currency.Coin. Kont nan adrès 0x1 gen de resous ak yon modil; Kont nan adrès 0x2 gen de modil ak yon valè resous.

Moman Nekotory:

  • Script tranzaksyon an se atomik - swa li egzekite konplètman oswa pa ditou.
  • Yon modil se yon moso kòd ki dire lontan ki aksesib globalman.
  • Eta mondyal la estriktire kòm yon tab hash, kote kle a se adrès kont lan
  • Kont yo pa kapab genyen plis pase yon valè resous nan yon kalite bay ak pa plis pase yon modil ak yon non yo bay (kont nan 0x0 pa kapab genyen yon lòt resous 0x0.Currency.Coin oswa yon lòt modil yo te rele Lajan)
  • Adrès modil la deklare se yon pati nan kalite a (0x0.Currency.Coin и 0x1.Currency.Coin yo se kalite separe ki pa ka itilize ka ranplase)
  • Pwogramè yo ka estoke plizyè ka nan kalite resous sa a nan yon kont lè yo defini resous koutim yo - (resous TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Ou ka refere a yon resous pa non li san konfli, pou egzanp ou ka refere a de resous lè l sèvi avèk TwoCoins.c1 и TwoCoins.c2.

Anons resous pyès monnen

Plonje nan Move - langaj pwogramasyon Libra Facebook la
Modil yo te rele Lajan ak yon kalite resous ki rele Pyès monnen

Moman Nekotory:

  • Pyès monnen se yon estrikti ki gen yon sèl jaden kalite u64 (64-bit nonb antye relatif)
  • Pwosedi modil sèlman Lajan ka kreye oswa detwi valè kalite Pyès monnen.
  • Lòt modil ak scripts ka sèlman ekri oswa referans jaden valè a atravè pwosedi piblik modil la bay.

Vann depo

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Pwosedi sa a aksepte yon resous Pyès monnen kòm opinyon ak konbine li ak resous la Pyès monnenki estoke nan kont moun k ap resevwa a:

  1. Detwi pyès monnen resous D 'ak anrejistre valè li yo.
  2. Resevwa yon lyen ki mennen nan yon resous pyès monnen inik ki estoke nan kont moun k ap resevwa a.
  3. Chanje valè a nan kantite pyès monnen pa valè a pase nan paramèt la lè w ap rele pwosedi a.

Moman Nekotory:

  • Depake, BorrowGlobal - bati-an pwosedi yo
  • Depake Sa a se sèl fason pou efase yon resous ki kalite T. Pwosedi a pran yon resous kòm opinyon, detwi li, epi retounen valè ki asosye ak jaden resous la.
  • BorrowGlobal pran yon adrès kòm opinyon epi retounen yon referans a yon egzanp inik nan T ki pibliye (posede) pa adrès sa a
  • &mut pyès monnen sa a se yon lyen nan resous la Pyès monnen

Aplikasyon withdraw_from_sender

Plonje nan Move - langaj pwogramasyon Libra Facebook la

Pwosedi sa a:

  1. Jwenn yon lyen ki mennen nan yon resous inik Pyès monnen, lye ak kont moun k ap voye a
  2. Diminye valè yon resous Pyès monnen atravè lyen an pou kantite lajan espesifye a
  3. Kreye epi retounen yon nouvo resous Pyès monnen ak balans ajou.

Moman Nekotory:

  • Depo ka koze pa nenpòt moun, men retire_nan_sendè a sèlman gen aksè a pyès monnen yo nan kont apèl la
  • GetTxnSenderAddress menm jan ak msg.sender nan solidite
  • RejteSòf si menm jan ak mande pou nan solidite. Si chèk sa a echwe, tranzaksyon an sispann epi tout chanjman yo anile.
  • pake li se tou yon pwosedi entegre ki kreye yon nouvo resous nan kalite T.
  • Osi byen ke Depake, pake ka sèlman rele andedan modil la kote yo dekri resous la T

Konklizyon

Nou egzamine karakteristik prensipal yo nan lang Move, konpare li ak Ethereum, epi tou li te vin abitye ak sentaks debaz la nan scripts. Finalman, mwen trè rekòmande tcheke deyò orijinal papye blan. Li gen ladann anpil detay konsènan prensip konsepsyon langaj pwogramasyon, ansanm ak anpil lyen itil.

Sous: www.habr.com

Add nouvo kòmantè