Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Sunod, tagdon namon sa detalye ang mga punoan nga kinaiya sa lenggwahe nga Paglihok ug kung unsa ang mga hinungdanon nga kalainan sa uban pa, na sikat nga sinultian alang sa mga smart nga kontrata - Solidity (sa Ethereum platform). Ang materyal gibase sa usa ka pagtuon sa magamit nga 26-panid nga whitepaper sa online.

Pasiuna

Ang Move usa ka executable nga bytecode nga lengguwahe nga gigamit sa pagpatuman sa mga transaksyon sa user ug mga smart nga kontrata. Hatagi'g pagtagad ang duha ka punto:

  1. Samtang ang Paglihok usa ka sinultian nga bytecode nga direkta nga mahimo sa Mov virtual machine, ang Solidity (ang lenggwahe nga kontrata sa Ethereum) usa ka labi ka taas nga lebel nga sinultian nga una nga natipon sa bytecode sa wala pa ipatuman sa usa ka EVM (Ethereum Virtual Machine).
  2. Ang paglihok mahimong magamit dili lamang aron ipatuman ang mga smart nga kontrata, apan alang usab sa mga naandan nga transaksyon (labi pa sa ulahi), samtang ang Solidity usa ka maalamon nga lenggwahe nga kontrata lamang.


Ang paghubad gihimo sa INDEX Protocol project team. Gihubad na namo kaniadto maayo nga materyal nga naghulagway sa proyekto sa Libra, karon na ang panahon sa pagsusi pag-ayo sa Move language. Ang paghubad gihimo uban sa habrauser coolsiu

Usa ka mahinungdanong bahin sa Move mao ang abilidad sa paghubit sa mga custom nga matang sa kapanguhaan nga adunay mga semantika base sa linear logic: ang usa ka kapanguhaan dili gayud makopya o hingpit nga mapapas, mabalhin lamang. Sa pag-andar, kini susama sa mga bahin sa Rust nga pinulongan. Ang mga kantidad sa Rust mahimo ra itudlo sa usa ka ngalan matag higayon. Ang paghatag og bili sa laing ngalan makapahimo niini nga dili ma-access ubos sa miaging ngalan.

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Pananglitan, ang mosunud nga bahin sa code maglabog sayup: Paggamit sa gibalhin nga kantidad 'x'. Kini tungod kay wala’y koleksyon sa basura sa Rust. Kung ang mga variable dili na masakup, ang panumduman nga ilang gipunting napagawas usab. Sa yanong pagkasulti, mahimo usa ra ang "tag-iya" sa datos. Niini nga pananglitan x ang orihinal nga tag-iya ug pagkahuman y nahimong bag-ong tag-iya. Basaha ang dugang bahin niini nga pamatasan dinhi..

Ang representasyon sa digital assets sa bukas nga mga sistema

Adunay duha nga mga kabtangan sa pisikal nga mga kabtangan nga lisud nga ipaila sa digital:

  • Panalagsa (Kakulang, orihinal nga kanihit). Ang gidaghanon sa mga assets (emission) sa sistema kinahanglan makontrol. Ang pagdoble sa mga adunay na nga katigayonan kinahanglan gidili, ug ang paghimo sa mga bag-o usa ka nakapahimulos nga operasyon.
  • Pagkontrol sa access... Kinahanglan nga maprotektahan sa partisipante sa sistema ang mga assets gamit ang mga polisiya sa control control.

Ang kining duha nga mga kinaiyahan, nga natural alang sa pisikal nga mga pagkabutang, kinahanglan ipatuman alang sa mga digital nga butang kung gusto namon nga isipon kini nga mga kabtangan. Pananglitan, ang usa ka talagsaon nga metal adunay natural nga kanihit, ug ikaw ra ang adunay makaadto niini (pananglitan ang pagkuptan niini sa imong mga kamut) ug mahimo nimo kini ibaligya o igasto.

Aron mahulagway kung giunsa miabut sa kining duha nga mga kabtangan, magsugod kita sa mga mosunud nga mga tudling-pulong:

Sugyot # 1: Ang Pinakasimple nga Pagmando nga Wala’y Kulang ug Pagkontrol sa Access

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

  • G [K]: = n nagpasabut sa usa ka pag-update sa usa ka numero nga ma-access sa usa ka yawi К sa kalibutanon nga estado sa blockchain, nga adunay bag-ong kahulogan n.
  • transaksyon ⟨Alice, 100⟩ nagpasabut nga ibutang ang balanse sa account ni Alice sa 100.

Ang solusyon sa taas adunay daghang mga hinungdan:

  • Makadawat si Alice sa usa ka walay kutub nga ihap sa mga sensilyo pinaagi sa yano nga pagpadala transaksyon ⟨Alice, 100⟩.
  • Ang mga sensilyo nga gipadala ni Alice kay Bob wala’y pulos, tungod kay si Bob mahimong magpadala sa iyang kaugalingon sa usa ka walay kutub nga numero sa mga sinsilyo gamit ang parehas nga pamaagi.

Sugyot # 2: Gikonsiderar ang kakulangan

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Karon gisubay namon ang kahimtang aron ang gidaghanon sa mga sinsilyo Ka labing menos managsama n sa wala pa ang transaksyon sa pagbalhin. Bisan pa, samtang gisulbad niini ang problema sa kakulang, wala’y kasayuran bahin sa kung kinsa ang mahimong ipadala ang mga sensilyo ni Alice (sa pagkakaron, bisan kinsa ang makahimo niini, ang panguna nga butang dili ang paglapas sa lagda sa paglimita sa kantidad).

Sugyot # 3: Paghiusa sa kanihit ug pagpugong sa pag-access

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Gisulbad namon kini nga problema sa usa ka mekanismo sa digital signature panghimatuud_sig sa wala pa susihon ang balanse, nga nagpasabut nga gigamit ni Alice ang iyang pribadong yawi aron mapirmahan ang transaksyon ug kumpirmahon nga siya ang tag-iya sa iyang mga sinsilyo.

Mga sinultian sa blockchain nga programa

Ang mga anaa nga mga sinultian nga blockchain nag-atubang sa mga mosunud nga problema (tanan niini nasulbad sa Paglihok (timan-i: Ikasubo, ang tagsulat sa artikulo nag-apelar lamang sa Ethereum sa iyang mga pagtandi, busa angay nga kuhaon lamang kini sa kini nga konteksto. Pananglitan, kadaghanan sa mga mosunud usab nasulbad sa EOS.)):

Dili direkta nga representasyon sa mga assets. Ang usa ka asset gi-encode gamit ang usa ka integer, apan ang usa ka integer nga kantidad dili parehas sa usa ka asset. Sa tinuud, wala’y tipo o kantidad nga nagrepresentar sa bitcoin / ether / <Bisan unsang Coin>! Kini nakapalisud ug dali nga sayup sa pagsulat sa mga programa nga naggamit sa mga kabtangan. Ang mga sumbanan sama sa pagpasa sa mga kabtangan ngadto/gikan sa mga pamaagi o pagtipig sa mga kabtangan sa mga istruktura nagkinahanglan og espesyal nga suporta gikan sa pinulongan.

Ang kakulangan dili mapadako... Ang sinultian nagrepresentar ra sa usa ka nihit nga kabtangan. Ingon kadugangan, ang mga tambal batok sa kanihit gigiyahan sa direkta sa mga semantiko sa sinultian mismo. Ang developer, kung gusto niya nga maghimo usa ka batasan nga katigayonan, kinahanglan nga kontrolon niya pag-ayo ang tanan nga aspeto sa gigikanan mismo. Kini gyud ang mga problema sa mga smart nga kontrata sa Ethereum.

Gipagawas sa mga ninggamit ang ilang mga assets, token sa ERC-20, nga gigamit ang mga integer aron mahibal-an ang pareho nga kantidad ug ang kinatibuk-ang suplay. Kanus-a man gihimo ang mga bag-ong token, ang maalamon nga code sa kontrata kinahanglan nga independente nga susihon ang pagsunod sa mga lagda sa pagbuga. Dugang pa, ang dili direkta nga pagpakita sa mga kabtangan nagdala sa, sa pipila nga mga kaso, sa mga seryoso nga mga sayup - pagdoble, doble nga paggasto o bisan hingpit nga pagkawala sa mga kabtangan.

Kakulang sa pugong nga pag-access sa pag-access... Ang bugtong nga palisiya sa pagkontrol sa pag-access nga gigamit karon usa ka signature scheme nga naggamit asymmetric cryptography. Sama sa pagpanalipod sa kanihit, ang mga palisiya sa pagkontrol sa pag-access lawom nga nalakip sa mga semantiko sa sinultian. Apan kung giunsa mapadako ang sinultian aron tugutan ang mga programmer nga ipasabut ang ilang kaugalingon nga mga polisa sa pagkontrol sa pag-access sa kasagaran usa ka malisud nga buluhaton.

Tinuod usab kini alang sa Ethereum, diin ang mga smart nga kontrata walay lumad nga suporta alang sa cryptography alang sa access control. Ang mga developers kinahanglang manu-mano nga magsulat sa kontrol sa pag-access, pananglitan, gamit ang bugtong Owner modifier.

Bisan kung ako usa ka dako nga fan sa Ethereum, nagtuo ko nga ang mga kabtangan sa asset kinahanglan nga gisuportahan sa pinulongan alang sa mga hinungdan sa seguridad. Sa partikular, ang pagpasa sa Ether ngadto sa usa ka smart nga kontrata makahimo sa dinamikong pagpadala, nga nagpaila sa usa ka bag-ong klase sa mga bug nga nailhan nga re-entrancy vulnerabilities. Ang dinamikong dispatch dinhi nagpasabot nga ang code execution logic matino sa run time (dynamic) ug dili sa compile time (static).

Busa, sa Solidity, kung ang kontrata A nagtawag sa usa ka function sa kontrata B, ang kontrata B mahimong magpadagan sa code nga wala gituyo sa developer sa kontrata A, nga mahimong mosangpot sa re-entry vulnerabilities (Kontrata A aksidenteng naglihok isip kontrata B sa pag-withdraw sa kwarta sa dili pa ang mga balanse sa aktuwal nga deduct sa account).

Ibalhin ang Mga Sukaranan sa Disenyo sa Pinulongan

Mga gigikanan sa una nga pagkahan-ay

Sa usa ka taas nga lebel, ang pakigsandurot tali sa mga modyul / kahinguhaan / pamaagi sa lenggwahe nga Paglihok parehas sa relasyon tali sa mga klase / butang ug pamaagi sa mga sinultian sa OOP.
Ang mga module sa paglihok parehas sa mga smart nga kontrata sa ubang mga blockchain. Gideklara sa modyul ang mga matang sa kahinguhaan ug pamaagi nga nagpasabut sa mga lagda alang sa paghimo, pagguba, ug pag-update sa gideklarar nga mga kahinguhaan. Apan kining tanan mga kombensiyon ra ("jargon”) Sa Lihok. Iilustrar namon kini nga punto sa ulahi gamay.

Flexibility

Ang paglihok nagdugang pagka-flexible sa Libra pinaagi sa scripting. Ang matag transaksyon sa Libra naglakip sa usa ka script, nga sa tinuud mao ang panguna nga pamaagi sa transaksyon. Ang script mahimong makahimo sa usa ka piho nga aksyon, pananglitan, pagbayad sa usa ka piho nga lista sa mga nakadawat, o paggamit pag-usab sa ubang mga kapanguhaan, pananglitan, pinaagi sa pagtawag sa usa ka pamaagi nga naghubit sa sagad nga lohika. Mao kini ang hinungdan nga ang mga script sa transaksyon sa Move nagtanyag daghang kadali. Ang usa ka script mahimong mogamit sa usa ka higayon ug balik-balik nga pamatasan, samtang ang Ethereum mahimo ra nga magpatuman sa nagbalikbalik nga mga script (pagtawag sa usa ka us aka us aka pamaagi sa kontrata). Ang hinungdan nga gitawag kini nga "gibalik-balik" tungod kay ang mga function sa intelihente nga kontrata mahimong ipatuman sa daghang mga higayon. (pahinumdom: dinhi ang higayon maliputon kaayo. Sa usa ka bahin, adunay mga script sa transaksyon sa porma sa pseudo-bytecode sa Bitcoin. Sa laing bahin, sa akong nasabtan, ang Move nagpalapad niini nga pinulongan, sa pagkatinuod, ngadto sa lebel sa usa ka hingpit nga smart contract nga pinulongan).

Kasegurohan

Ang Move executable format kay bytecode, nga, sa usa ka bahin, mas taas nga lebel nga lengguwahe kay sa assembler, pero mas ubos kay sa source code. Ang bytecode gisusi sa run-time (on-chain) alang sa mga kahinguhaan, tipo, ug kaluwasan sa memorya gamit ang bytecode verifier ug dayon ipatuman sa tighubad. Kini nga pamaagi nagtugot sa Move sa paghatag sa seguridad sa source code, apan walay proseso sa pag-compile ug ang panginahanglan sa pagdugang sa usa ka compiler sa sistema. Ang paghimo sa Move usa ka bytecode nga lengguwahe usa ka maayo nga ideya. Dili kinahanglan nga i-compile gikan sa gigikanan, sama sa kaso sa Solidity, dili kinahanglan mabalaka bahin sa posible nga mga kapakyasan o pag-atake sa imprastraktura sa compiler.

Pagpanghimatuud

Gitinguha namon nga himuon ang mga tseke nga dali kutob sa mahimo, tungod kay ang tanan nagpadayon sa kadena (pahinumdom: online, sa panahon sa pagpatuman sa matag transaksyon, busa ang bisan unsang paglangan mosangput sa paghinay sa tibuuk nga network), apan sa sinugdanan ang disenyo sa pinulongan andam na nga mogamit sa off-chain static nga mga himan sa pag-verify. Bisan kung kini mas gipalabi, ang pagpalambo sa mga himan sa pag-verify (isip usa ka bulag nga toolkit) gi-postpone alang sa umaabot, ug ang dinamikong pag-verify sa run-time (on-chain) ra ang gisuportahan karon.

Modularity

Ang mga modyul sa paglihok naghatag kakuhaan data ug pag-localize sa kritikal nga operasyon sa mga gigikanan. Ang encapsulation nga gihatag sa modyul, inubanan sa panalipod nga gihatag sa sistema sa tipo nga Paglihok, nagsiguro nga ang mga kabtangan nga gibutang sa mga tipo sa modyul dili malapas sa code sa gawas sa modyul. Kini usa ka maayo nga gihunahuna nga laraw sa abstraksiyon, gipasabut nga ang datos sa sulud sa kontrata mahimo ra magbag-o sa sulud sa gambalay sa kontrata, apan dili sa gawas.

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Pagbalhin sa kinatibuk-ang paghunahuna

Ang panig-ingnan sa iskrip sa transaksyon nagpakita nga ang makadaot o dili maabtik nga mga aksyon sa usa ka programmer sa gawas sa usa ka module dili mahimong ikompromiso ang seguridad sa mga gigikanan sa usa ka module. Sunod, tan-awon namon ang mga pananglitan kung giunsa gigamit ang mga module, kapanguhaan, ug pamaagi aron ma-program ang Libra blockchain.

Bayad sa kauban sa isigkaingon

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Ang gidaghanon sa mga sensilyo nga gipiho sa kantidad ibalhin gikan sa balanse sa nagpadala ngadto sa nakadawat.
Adunay daghang mga bag-ong punto dinhi (gipasiugda sa pula nga mga inskripsiyon):

  • 0x0: adres sa account diin gitipigan ang module
  • currency: ngalan sa module
  • Sala: lahi nga gigikanan
  • Ang kantidad nga sensilyo nga gibalik sa pamaagi mao ang kantidad nga gigikanan sa type 0x0.Currency.Coin
  • lihok (): kantidad dili magamit pag-usab
  • kopya (): kantidad mahimong magamit sa ulahi

Parse ang code: sa unang lakang, ang nagpadala nagtawag us aka pamaagi nga ginganlan pag-atras_from_sender gikan sa usa ka module nga gitipig sa 0x0.Kasaligan. Sa ikaduhang lakang, ang nagpadala nagbalhin sa mga pundo ngadto sa nakadawat pinaagi sa pagbalhin sa bili sa kapanguhaan sa sensilyo ngadto sa pamaagi sa pagdeposito sa module 0x0.Kasaligan.

Ania ang tulo ka mga pananglitan sa mga sayup sa code nga isalikway sa mga tseke:
Pagdoble sa mga pondo pinaagi sa pagbag-o sa tawag lihok (sensilyo) sa kopya (sensilyo). Ang mga kapanguhaan mahimo ra mabalhin. Pagsulay sa pagdoble sa kantidad sa usa ka kapanguhaan (pananglitan, pinaagi sa pagtawag kopya (sensilyo) sa pananglitan sa taas) moresulta sa usa ka sayup samtang gisusi ang bytecode.

Paggamit pag-usab sa mga pondo pinaagi sa pagtino lihok (sensilyo) kaduha . Pagdugang og linya 0x0.Currency.deposit(kopya(some_other_payee), move(coin)) Ang pananglitan sa ibabaw magtugot sa nagpadala sa "paggasto" sa mga sensilyo kaduha - sa unang higayon uban sa nagbayad, ug sa ikaduha nga higayon uban sa some_other_payee. Kini usa ka dili gusto nga pamatasan nga dili mahimo sa usa ka pisikal nga kabtangan. Maayo na lang, ang Move mosalikway niini nga programa.

Pagkawala sa pundo tungod sa pagdumili lihok (sensilyo). Kung dili nimo ibalhin ang kapanguhaan (pananglitan, pinaagi sa pagtangtang sa linya nga adunay sulud lihok (sensilyo)), usa ka bytecode verification error ang ipataas. Kini nanalipod sa Move programmer gikan sa aksidente o malisyoso nga pagkawala sa mga pundo.

Module sa salapi

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Ang matag account mahimong adunay 0 o daghan pa nga mga module (gihulagway nga mga kahon) ug usa o daghang mga kantidad sa kapanguhaan (gihulagway nga mga silindro). Pananglitan, usa ka account sa 0x0 adunay module 0x0.Kasaligan ug usa ka resource value sa tipo 0x0.Currency.Coin. Account sa adres 0x1 adunay duha ka mga kapanguhaan ug usa ka module; Account sa adres 0x2 adunay duha ka modules ug usa ka resource value.

Nekotory nga mga gutlo:

  • Ang script sa transaksyon kay atomic - bug-os nga gipatuman, o wala gyud.
  • Ang usa ka module usa ka taas nga kinabuhi nga piraso sa code nga magamit sa tibuuk kalibutan.
  • Ang global nga estado gi-istruktura isip usa ka hash table, diin ang adres sa account mao ang yawe
  • Ang mga account mahimong maglangkob og dili molapas sa usa ka resource value sa gihatag nga tipo ug dili molapas sa usa ka module nga adunay gihatag nga ngalan (usa ka account sa 0x0 dili mahimong adunay dugang nga kapanguhaan 0x0.Currency.Coin o laing module nga ginganlan currency)
  • Ang adres sa gideklarar nga module kabahin sa tipo (0x0.Currency.Coin ΠΈ 0x1.Currency.Coin lahi nga mga tipo nga dili magamit nga baylobaylo)
  • Ang mga programmer mahimong magtipig daghang mga higayon sa gihatag nga tipo sa kapanguhaan sa usa ka account pinaagi sa pagtino sa ilang naandan nga kapanguhaan - (kapanguhaan TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Mahimo nimong i-refer ang usa ka kapanguhaan pinaagi sa ngalan niini nga wala’y panagbangi, pananglitan mahimo nimong i-refer ang duha nga mga kapanguhaan nga gigamit Duha ka Sinsilyo.c1 ΠΈ Duha ka Sinsilyo.c2.

Deklarasyon sa kapanguhaan sa sensilyo

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook
Ginganlan nga module currency ug usa ka tipo sa kapanguhaan nga ginganlan Sala

Nekotory nga mga gutlo:

  • Sala usa ka istruktura nga adunay usa ka klase nga natad u64 (64-bit unsigned integer)
  • Mga pamaagi sa module lamang currency makahimo o makaguba sa mga kantidad sa tipo Sala.
  • Ang ubang mga module ug mga script mahimo ra magsulat o mag-refer sa natad sa kantidad pinaagi sa mga pamaagi sa publiko nga gihatag sa module.

Pagpatuman sa deposito

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Kini nga pamaagi modawat sa usa ka kapanguhaan Sala isip input ug gidugtong kini sa usa ka kapanguhaan Salagitipigan sa account sa benepisyaryo:

  1. Pagguba sa input resource Coin ug pagsulat sa bili niini.
  2. Pagkuha og link sa usa ka talagsaon nga kapanguhaan sa Coin nga gitipigan sa account sa nakadawat.
  3. Ang pagbag-o sa kantidad sa gidaghanon sa mga Coins pinaagi sa kantidad nga gipasa sa parameter kung nagtawag sa pamaagi.

Nekotory nga mga gutlo:

  • Unpack, BorrowGlobal - built-in nga mga pamaagi
  • Unpack mao kini ang bugtong paagi sa pagtangtang sa usa ka kapanguhaan sa tipo nga T. Ang pamaagi nagkuha usa ka kapanguhaan ingon input, giguba kini, ug gibalik ang kantidad nga adunay kalabotan sa mga natad sa kapanguhaan.
  • BorrowGlobal nagkuha ug adres isip input ug nagbalik ug reperensiya sa talagsaong pananglitan sa T nga gipatik (gipanag-iya) sa maong adres
  • &mut Sinsilyo kini usa ka sumpay sa usa ka kapanguhaan Sala

Pagpatuman sa withdraw_from_sender

Pag-dive sa Move, Libra Blockchain Programming Language sa Facebook

Kini nga pamaagi:

  1. Nakakuha ug link sa usa ka talagsaon nga kapanguhaan Sala, nalambigit sa account sa nagpadala
  2. Gipakunhod ang bili sa usa ka kapanguhaan Sala pinaagi sa pakisayran alang sa piho nga kantidad
  3. Naghimo ug nagbalik sa usa ka bag-ong kapanguhaan Sala uban ang updated nga balanse.

Nekotory nga mga gutlo:

  • deposit pwede tawgon ni bisan kinsa, pero pag-atras_from_sender adunay access lamang sa mga sensilyo sa calling account
  • GetTxnSenderAddress susama sa msg.sender sa Solidity
  • IsalikwayUnless susama sa nagkinahanglan sa Solidity. Kung kini nga tseke mapakyas, ang pagpatuman sa transaksyon mohunong ug ang tanan nga mga pagbag-o ibalik.
  • putos kini usab usa ka built-in nga pamaagi nga nagmugna usa ka bag-ong kapanguhaan sa tipo T.
  • Ingon usab Unpack, putos matawag lang sulod sa module diin gideklara ang kahinguhaan T

konklusyon

Among gisusi ang mga nag-unang kinaiya sa Move nga pinulongan, itandi kini sa Ethereum, ug nasinati usab sa batakang syntax sa mga script. Sa katapusan, girekomenda ko kaayo ang pag-browse orihinal nga puti nga papel. Naglakip kini sa daghang mga detalye bahin sa mga prinsipyo sa disenyo sa programming language, ingon man daghang mapuslanon nga mga link.

Source: www.habr.com

Idugang sa usa ka comment