Dive muFambisa - Facebook's Libra blockchain programming mutauro

Tevere, isu tichaongorora zvakadzama hunhu hukuru hweMutauro wekutamisa uye ndeapi makiyi ayo akakosha neumwe, watove mutauro unozivikanwa wezvibvumirano zvakangwara - Kugadzikana (papuratifomu yeEthereum). Izvo zvinhu zvinoenderana nekudzidza kweanowanikwa epamhepo 26-peji whitepaper.

Nhanganyaya

Move mutauro unogoneka webytecode uyo unoshandiswa kuita mushandisi kutengeserana uye smart zvibvumirano. Ndapota cherechedza pfungwa mbiri:

  1. Ipo Move iri mutauro we bytecode unogona kuitiswa zvakananga paMuchina muchina, Solidity (Ethereum's smart contract mutauro) mutauro wepamusoro-nhanho unotanga kunyorwa kune bytecode usati waurayiwa pane EVM (Ethereum Virtual Machine).
  2. Kufambisa kunogona kushandiswa kwete chete kuita smart zvibvumirano, asiwo zvetsika zviitiko (zvimwe pane izvi gare gare), nepo Solidity iri yakangwara kondirakiti-mutauro chete.


Shanduro iyi yakaitwa nechikwata chepurojekiti yeINDEX Protocol. Takatoshandura kare zvinhu zvakakura zvinotsanangura chirongwa cheLibra, ikozvino yave nguva yekutarisa iyo Move mutauro mune zvishoma zvakadzama. Shanduro yacho yakaitwa pamwe chete naHabrauser coolsiu

Chinhu chakakosha cheMove kugona kutsanangura mhando dzezvishandiso zvine semantics zvichibva pane mutsara logic: sosi haimbofa yakakopwa kana kubviswa zvachose, inongofambiswa chete. Kushanda, izvi zvakafanana nekugona kweRust mutauro. Values ​​muRust inogona kungopihwa kune rimwe zita panguva. Kupa kukosha kune rimwe zita kunoita kuti risawanikwe pasi pezita rapfuura.

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Semuenzaniso, inotevera kodhi snippet inokanda kukanganisa: Kushandiswa kwekutama kukosha 'x'. Izvi zvinodaro nekuti hapana kuunganidzwa kwemarara muRust. Kana misiyano ikabuda muchiyero, ndangariro dzavanoreva nezvadzo dzinosunungurwa futi. Zvichitaurwa zviri nyore, panogona chete kuve ne "muridzi" mumwe we data. Mumuenzaniso uyu x ndiye muridzi wepakutanga uyezve y anova muridzi mutsva. Verenga zvakawanda nezvemaitiro aya pano.

Kumiririrwa kwezvinhu zvemadhijitari mune akavhurika masisitimu

Pane zvinhu zviviri zvezvinhu zvepanyama izvo zvakaoma kumiririra manhamba.

  • Rarity (Kushomeka, pakutanga kushomeka). Huwandu hwezvinhu (kuburitsa) muchirongwa hunofanirwa kudzorwa. Kudzokorora kwezvinhu zviripo kunofanirwa kurambidzwa, uye kugadzira zvitsva ibasa rakaropafadzwa.
  • Kuwana kutonga... Iye anotora chikamu anotora mukana anokwanisa kuchengetedza zviwanikwa achishandisa marongero ekushandisa.

Aya maitiro maviri, ayo ari echisikigo epanyama zviwanikwa, anofanirwa kuitiswa pazvinhu zvemadhijitari kana tichida kuzvitora semidziyo. Semuenzaniso, simbi isingawanzo ine kushomeka kwechisikigo, uye iwe chete ndiwe unokwanisa kuwana (kuibata mumaoko ako, semuenzaniso) uye unogona kuitengesa kana kuishandisa.

Kuenzanisira masviriro atakaita pazvinhu zviviri izvi, ngatitangei nemitsara inotevera:

Pfungwa # 1: Iwo wakareruka Mutemo Pasina Kupotsa uye Kuwana Kudzora

Dive muFambisa - Facebook's Libra blockchain programming mutauro

  • G [K]: = n Inoreva kuvandudzwa kwenhamba inowanikwa nekiyi К mune yepasirese mamiriro e blockchain, iine chirevo chitsva n.
  • mutengesi ⟨Alice, 100⟩ zvinoreva kuseta account yaAlice ku100.

Mhinduro iri pamusoro ine matambudziko akati wandei:

  • Alice anogona kugamuchira risingaperi nhamba yemari nekutumira chete mutengesi ⟨Alice, 100⟩.
  • Mari iyo Alice anotumira kuna Bob haibatsiri, sezvo Bob aigona kuzvitumira nhamba isingaverengeke yemari vachishandisa nzira imwecheteyo.

Pfungwa # 2: Kufunga nezve kushomeka

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Iye zvino tave kuongorora mamiriro ezvinhu kuitira kuti huwandu hwemari Ka anga akaenzana zvakaenzana n pamberi pechinjana chekuchinjisa. Nekudaro, kunyangwe izvi zvichizogadzirisa dambudziko rekushomeka, hapana ruzivo nezve kuti ndiani anogona kutumira mari yaAlice (izvozvi, chero munhu anogona kuita izvi, chinhu chikuru hachisi kutyora mutemo wekuganhurira huwandu).

Chirevo # 3: Kubatanidza kushomeka uye kudzora kwekuwana

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Isu tinogadzirisa dambudziko iri nedhijitari siginecha mashini chengetedza_sig usati watarisa bhalanzi, zvinoreva kuti Alice anoshandisa kiyi yake yakavanzika kusaina kutengeserana uye kusimbisa kuti ndiye muridzi wemari yake.

Blockchain kuronga mitauro

Mitauro iriko ye blockchain inosangana nematambudziko anotevera (ese akagadziriswa muMove (chinyorwa: zvinosuwisa, munyori wenyaya yacho anongokumbira Ethereum mukuenzanisa kwake, saka zvakakodzera kuvatora chete mune ino mamiriro. Semuenzaniso, mazhinji eanotevera anogadziriswawo muEOS.)):

Kumiririra zvisina kunangana kwemidziyo. Asset inokodherwa pachishandiswa nhamba yakakwana, asi nhamba yese haina kufanana neasset. Muchokwadi, hapana mhando kana kukosha kunomiririra Bitcoin/Ether/<Any Coin>! Izvi zvinoita kuti zvirongwa zvekunyora zvinoshandisa midziyo zviome uye zvikanganisike. Mapeteni akadai sekupfuudza midziyo kuenda/kubva kumaitiro kana kuchengeta zvinhu muzvimiro zvinoda rubatsiro rwakanyanya kubva mumutauro.

Kukanganisa hakuwedzerwe... Mutauro unomiririra chinhu chimwe chete chinoshomeka. Pamusoro pezvo, mishonga yekurwisa kushomeka yakashongedzwa yakananga mumasemantiki emutauro iwoyo. Iyo yekuvandudza, kana ichida kugadzira yakasarudzika nhumbi, inofanira kunyatso chengetedza ese maficha esource iye. Aya ndiwo chaiwo matambudziko eEthereum smart zvibvumirano.

Vashandisi vanoburitsa yavo midziyo, ERC-20 tokeni, vachishandisa manhamba kuti vaone zvese kukosha uye huwandu hwese. Pese panogadzirwa matsva matsva, kodhi yechibvumirano chakangwara chinofanirwa kuzvimiririra kutevedzera nemitemo yekubuda. Uye zvakare, kuratidzwa kwakasarudzika kweaseti kunotungamira, mune dzimwe nguva, kune zvakakomba zvikanganiso - kudzokorora, kushandisa zvakapetwa kaviri kana kunyangwe kurasikirwa kwakazara kwezvinhu.

Kusava nekwaniso yekushandisa yekudzora... Iyo chete yekuwana yekudzora marongero parizvino iri kushandiswa siginecha chirongwa uchishandisa asymmetric cryptography. Kunge kudzivirirwa kwekushomeka, marongero ekudzivirira ekuwana akadzika midzi mumasantiki emutauro. Asi maitiro ekuwedzeredza mutauro kubvumidza programmers kuti vatsanangure avo vega marongero ekuwana maitiro kazhinji ibasa rinonetsa kwazvo.

Izvi ndezvechokwadi zvakare paEthereum, uko zvibvumirano zvakangwara hazvina zvekuzvarwa cryptography rutsigiro rwekuwana kutonga. Vagadziri vanofanira kuseta nemaoko kutonga kwekupinda, semuenzaniso, vachishandisa iyo cheteOwner modifier.

Kunyangwe ini ndiri mutsigiri mukuru weEthereum, ndinotenda kuti zvivakwa zveasset zvinofanirwa kutsigirwa nemutauro nekuda kwekuchengetedza. Kunyanya, kuendesa Ether kune kontrakiti yakangwara kunosanganisira dynamic dispatch, iyo yakaunza kirasi itsva yezvipembenene zvinozivikanwa se re-entrancy vulnerabilities. Dynamic dispatch pano inoreva kuti maitiro ekuita kwekodhi achatemerwa panguva yekumhanya (simba) kwete panguva yekuunganidza (static).

Nekudaro, muSolidity, kana kontrakiti A ichidaidza basa mukondirakiti B, kondirakiti B inogona kuita kodhi yakanga isina kurongerwa nemugadziri wekondirakiti A, izvo zvinogona kuguma kupinda zvakare kusasimba (contract A netsaona inoita sekondirakiti B yekubvisa mari mari isati yabviswa account account).

Fambisa Mutauro Dhizaini Yakakosha

Kutanga-kuraira zviwanikwa

Padanho repamusoro, iko kudyidzana pakati pemamojuru / zviwanikwa / maitiro mumutauro wekufambisa kwakangofanana nehukama pakati pemakirasi / zvinhu uye nzira mumitauro yeOP.
Kufambisa mamodule akafanana nezvibvumirano zvehungwaru mune mamwe ma blockchains. Iyo module inozivisa mhando dzemidziyo nemaitiro anotsanangudza mitemo yekugadzira, kuparadza, uye kugadzirisa zviwanikwa zvakaziviswa. Asi idzi dzese ingori magungano ("jargon”) Mukufamba. Tichaenzanisira iyi poindi gare gare.

Flexibility

Move inowedzera kuchinjika kuLibra kuburikidza nekunyora. Chese chekutengeserana muLibra chinosanganisira script, inova ndiyo musimboti maitiro ekutengeserana. Iyo script inogona kuita chero chinhu chimwe chakataurwa, semuenzaniso, kubhadhara kune yakatarwa runyorwa rwevanogamuchira, kana kushandisa zvakare zvimwe zviwanikwa - semuenzaniso, nekudaidza nzira inotsanangurwa zvakazara. Ichi ndicho chikonzero Move transaction zvinyorwa zvinopa kuchinjika kukuru. A script anogona kushandisa zvose-kamwe uye kudzokorora maitiro, nepo Ethereum anogona chete kuita repeatable scripts (kudana imwe nzira pane akangwara kondirakiti nzira). Chikonzero icho ichinzi "reusable" ndechekuti mabasa echibvumirano chakangwara anogona kuitwa kakawanda. (chinyorwa: Pfungwa apa inonyatso chenjera. Kune rimwe divi, magwaro ekutengeserana ari muchimiro chepseudo-bytecode aripowo muBitcoin. Kune rimwe divi, sezvandinozvinzwisisa, Move inowedzera mutauro uyu, kutaura zvazviri, kusvika padanho remutauro wakazara wechibvumirano.).

Chengetedzo

Iyo Move executable fomati ibytecode, inova, kune rimwe divi, mutauro wepadanho repamusoro pane mutauro wegungano, asi yakaderera pane kodhi kodhi. Iyo bytecode inotariswa mukumhanya-nguva (pa-ketani) yezviwanikwa, mhando uye ndangariro kuchengetedza uchishandisa bytecode verifier, uye yozoitwa nemuturikiri. Iyi nzira inobvumira Move kuti ipe chengetedzo yekodhi kodhi, asi pasina maitiro ekubatanidza uye kukosha kwekuwedzera compiler kune system. Kuita Move a bytecode mutauro imhinduro yakanaka. Izvo hazvidi kuunganidzwa kubva kunobva, sezvazvakaita neSolidity, uye hapana chikonzero chekunetsekana nekutadza kutadza kana kurwiswa kweiyo compiler zvivakwa.

Kuvimbika

Isu takanangana nekuita cheki zviri nyore sezvinobvira, nekuti zvese izvi zvinoitwa pa-cheni (chinyorwa: online, panguva yekuitwa kweumwe neumwe mutengano, saka chero kunonoka kunotungamira kudzikira kwenzvimbo yese), zvisinei, pakutanga dhizaini yemutauro yakagadzirira kushandisa off-chain static verification maturusi. Kunyangwe izvi zviri nani, pari zvino kuvandudzwa kwezvishandiso zvekusimbisa (sechikamu cheturusi) chakamisikidzwa kune ramangwana, uye iko zvino chete kusimbiswa kwesimba munguva yekumhanya (pa-chetani) kunotsigirwa.

Modularity

Kufambisa ma module kunopa kudzoreredza kwedatha uye nekuisa munzvimbo kwakakosha mashandiro pane zviwanikwa. Iyo encapsulation inopihwa neiyo module, inosanganiswa pamwe nekudzivirirwa kunopihwa neMove mhando system, inoona kuti zvivakwa zvakaiswa pamhando dzemamojuru hazvigone kutyorwa nekodhi iri kunze kwemo module. Ichi chimiro chakanyatsofungidzirwa-chekufungidzira dhizaini, zvichireva kuti data riri muchibvumirano rinogona kungochinja mukati mechikamu chechibvumirano, asi kwete kunze.

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Fambisa pamusoro

Iyo transaction script muenzaniso inoratidza kuti zviito zvisina kunaka kana zvisina hanya nemugadziri kunze kwemo module haigone kukanganisa kuchengetedzeka kwezviwanikwa zvemu module. Tevere, isu tichatarisa iyo mienzaniso yekuti ma module, zviwanikwa, uye maitiro zvinoshandiswa sei kuronga iyo Libra blockchain.

Peer-to-Peer kubhadhara

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Huwandu hwemakoini hwakatsanangurwa muhuwandu huchatamiswa kubva pasara yeanotumira kuenda kune anoigamuchira.
Pane zvinhu zvishoma zvitsva pano (zvinoratidzwa mutsvuku):

  • 0x0: kero yeakaundi uko module inochengetwa
  • mari: module zita
  • ndarama: mhando yerudzi
  • Iko mari yemari yakadzoserwa nemaitiro ndeye kukosha kwesosi yerudzi 0x0.Currency.Coin
  • famba (): kukosha hakugone kushandiswa zvakare
  • kuteedzera (): kukosha kunogona kushandiswa gare gare

Paridza kodhi withdraw_from_sender kubva module yakachengetwa mu 0x0.Mari. Padanho rechipiri, mutumi anotamisa mari kune anogamuchira nekufambisa ukoshi hwemari muchikamu chedhipoziti. 0x0.Mari.

Heino mienzaniso mitatu yekukanganisa mukodhi inozorambwa nemacheki:
Dzokorora mari nekuchinja kufona famba (mari) pamusoro kopi (mari). Zvishandiso zvinongofambiswa chete. Kuedza kudzokorora huwandu hwechishandiso (semuenzaniso, nekufona kopi (mari) mumuenzaniso uri pamusoro) zvinokonzeresa kukanganisa panguva ye bytecode kusimbiswa.

Kushandiswazve kwemari nekutsanangura famba (mari) kaviri . Kuwedzera mutsara 0x0.Currency.deposit (kopi (vamwe_mumwe_payee), fambisa (mari)) semuenzaniso, zviri pamusoro zvinobvumira mutumiri "kushandisa" mari yacho kaviri - kekutanga nemubhadharo, uye yechipiri aine mumwe_mumwe_anobhadhara. Uyu hunhu husingadiwi husingagoneki nechinhu chenyama. Sezvineiwo, Move icharamba chirongwa ichi.

Kurasikirwa nemari nekuda kwekuramba famba (mari). Kana iwe ukasafambisa sosi (semuenzaniso, nekudzima mutsara une famba (mari)), kukanganisa kwebytecode verification kuchakandwa. Izvi zvinodzivirira Move programmers kubva netsaona kana kurasika kwakashata kwemari.

Mari module

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Imwe neimwe account inogona kuve ne0 kana anopfuura mamodule (anoratidzwa serectangles) uye imwechete kana anopfuura zviwanikwa zviwanikwa (zvinoratidzwa semasilinda). Semuenzaniso, account pa 0x0 ine module 0x0.Mari uye kukosha kwemhando yezvishandiso 0x0.Currency.Coin. Akaundi pakero 0x1 ine zviwanikwa zviviri uye module imwe; Akaundi pakero 0x2 ine ma module maviri uye imwe sosi kukosha.

Nekotory nguva:

  • The transaction script is atomic - ingave inoitwa zvachose kana kwete zvachose.
  • A module chikamu chenguva refu chekodhi chinowanikwa pasi rose.
  • Nyika yepasirese yakarongeka setafura yehashi, uko kiyi ndiyo kero yeakaunti
  • Maakaunti haakwanise kuve neinodarika imwechete kukosha kwechishandiso chemhando yakapihwa uye isingapfuuri module imwe ine zita rakapihwa (akaundi pa. 0x0 haikwanise kuva nechimwe chinhu 0x0.Currency.Coin kana imwe module ine zita mari)
  • Kero yemodule yakaziviswa chikamu cherudzi (0x0.Currency.Coin ΠΈ 0x1.Currency.Coin imhando dzakasiyana dzisingagone kushandiswa zvakasiyana)
  • Vagadziri vezvirongwa vanogona kuchengetedza akawanda emhando iyi yezviwanikwa muakaundi nekutsanangura yavo tsika sosi - (zvekushandisa TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Iwe unogona kunongedzera kune sosi nezita rayo pasina kupokana, semuenzaniso unogona kunongedzera kune maviri zviwanikwa uchishandisa TwoCoins.c1 ΠΈ TwoCoins.c2.

Coin resource chiziviso

Dive muFambisa - Facebook's Libra blockchain programming mutauro
Module yakanzi mari uye rudzi rwezvekushandisa rwakadanwa ndarama

Nekotory nguva:

  • ndarama chimiro chine ndima imwe yerudzi u64 (64-bit isina kusaina nhamba yakazara)
  • Module maitiro chete mari inogona kugadzira kana kuparadza maitiro emhando ndarama.
  • Mamwe mamodule uye zvinyorwa zvinongokwanisa kunyora kana kunongedzera kukosha kwemunda kuburikidza neruzhinji maitiro anopihwa nemodule.

Kutengeswa kwedhipoziti

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Iyi nzira inogamuchira sosi ndarama sekupinza uye inosanganisa iyo neiyo sosi ndaramazvakachengetwa muakaundi yeanogamuchira:

  1. Kuparadza iyo yekuisa sosi Coin uye kurekodha kukosha kwayo.
  2. Kugamuchira chinongedzo kune yakasarudzika Coin resource yakachengetwa muakaundi yemugamuchiri.
  3. Kuchinja kukosha kwenhamba yeMacoin nekukosha kwakapfuura muparameter pakudaidza maitiro.

Nekotory nguva:

  • Bvisa zvinhu, BorrowGlobal - maitiro akavakirwa-mukati
  • Unpack Iyi ndiyo nzira chete yekudzima sosi yerudzi rweT. Iyo nzira inotora sosi sekuisa, inoiparadza, uye inodzosera kukosha kwakabatana neminda yezviwanikwa.
  • BorrowGlobal inotora kero seyokuisa uye inodzosera referensi kune yakasarudzika muenzaniso weT yakaburitswa (iriyo) nekero iyoyo
  • &mut Coin ichi chinongedzo kune resource ndarama

Kuitwa kwe withdraw_from_sender

Dive muFambisa - Facebook's Libra blockchain programming mutauro

Iyi nzira:

  1. Inowana chinongedzo kune yakasarudzika sosi ndarama, yakabatana neakaundi yeanotumira
  2. Inoderedza kukosha kwechinhu ndarama kuburikidza neiyi link yemutengo wakatarwa
  3. Inogadzira uye inodzorera chinhu chitsva ndarama ine mwero yakagadziridzwa.

Nekotory nguva:

  • dhipozita zvinogona kukonzerwa nemunhu wese, asi withdraw_from_sender inokwanisa chete kuwana mari yeakaundi yekufona
  • GetTxnSenderAddress zvakafanana ne msg.sender muSolidity
  • RejectUnless zvakafanana ne inoda muSolidity. Kana cheki iyi ikatadza, kutengeserana kunomiswa uye shanduko dzese dzinodzoserwa kumashure.
  • Pack iyo zvakare yakavakirwa-mukati maitiro inogadzira sosi nyowani yerudzi T.
  • Naizvozvowo Unpack, Pack inogona kungodaidzwa mukati memodule panotsanangurwa sosi T

mhedziso

Takaongorora maitiro makuru emutauro weMove, tichienzanisa neEthereum, uye takazojairana neyokutanga syntax yezvinyorwa. Pakupedzisira, ndinokurudzira zvikuru kutarisa bepa jena repakutanga. Inosanganisira zvakawanda zvakadzama maererano nehurongwa hwekugadzira mutauro misimboti, pamwe nezvakawanda zvinobatsira zvinongedzo.

Source: www.habr.com

Voeg