Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Dûv re, em ê bi hûrgulî taybetmendiyên sereke yên zimanê Move bizivirin û cûdahiyên wê yên sereke bi zimanek din, jixwe populer a ji bo peymanên hişmend çi ne - Solidîtî (li ser platforma Ethereum). Materyal li ser bingeha lêkolînek li ser kaxezê spî ya serhêl a 26 rûpelî heye.

Pîrozbahiyê

Move zimanek bytekodê ya îcrakar e ku ji bo pêkanîna danûstendinên bikarhêner û peymanên jîr tê bikar anîn. Ji kerema xwe du xalan bîr bînin:

  1. Gava ku Move zimanek bytecode ye ku rasterast dikare li ser makîneya virtual Move-ê were sepandin, Solidity (zimanê peymana hişmend a Ethereum) zimanek astek bilind e ku yekem car berî ku li ser EVM (Makîneya Virtual a Ethereum) were dariştin bi bytecode tête berhev kirin.
  2. Move dikare ne tenê ji bo bicihanîna peymanên hişmend, lê di heman demê de ji bo danûstendinên xwerû jî were bikar anîn (bêtir li ser vê paşê), dema ku Solidity zimanek tenê-peymanek hişmend e.


Werger ji aliyê ekîba projeya Protokola INDEX ve hatiye kirin. Me berê jî wergerandiye materyalek mezin ku projeya Libra diyar dike, aniha dema wê ye ku meriv hinekî bi hûrgulî li zimanê Move binêre. Werger bi hev re bi Habrauser re hat kirin coolsiu

Taybetmendiyek sereke ya Move ev e ku meriv bi semantîkê re li ser bingeha mantiqa rêzikî cûreyên çavkaniyê yên xwerû diyar bike: çavkaniyek çu carî nayê kopî kirin an bi nepenî jêbirin, tenê nayê veguheztin. Ji hêla fonksiyonel ve, ev dişibihe kapasîteyên zimanê Rust. Nirxên di Rust de tenê di carekê de dikarin bi navekî ve werin destnîşankirin. Veqetandina nirxek ji navek din re wê di bin navê berê de neberdest dike.

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Mînakî, perçeya kodê ya jêrîn dê xeletiyek bavêje: Bikaranîna nirxa barkirî 'x'. Ev e ji ber ku li Rust komkirina çopê tune. Dema ku guherbar ji qadê derdikevin, bîranîna ku ew behs dikin jî azad dibe. Bi hêsanî, tenê yek "xwedan" daneyê dikare hebe. Di vê mînakê de x xwediyê eslî ye û paşê y dibe xwediyê nû. Di derbarê vê tevgerê de bêtir bixwînin vir.

Di pergalên vekirî de nûnertiya hebûnên dîjîtal

Du taybetmendiyên hebûnên laşî hene ku dijwar e ku ew bi dîjîtal werin temsîl kirin:

  • Rarîtî (Kêmasî, bi eslê xwe kêmasî). Pêdivî ye ku hejmara hebûnên (xuyang) di pergalê de were kontrol kirin. Divê dubarekirina sermayeyên heyî bêne qedexe kirin, û afirandina yên nû xebatek bi rûmet e.
  • Kontrola gihîştinê... Beşdarê pergalê divê bikaribe bi karanîna polîtîkayên kontrolkirina gihîştinê hebûnan ​​biparêze.

Van her du taybetmendiyên ku ji bo hebûnên laşî xwezayî ne, ger em bixwazin wan wekî hebûnan ​​bihesibînin, divê ji bo tiştên dîjîtal werin bicîh kirin. Mînakî, metalek nadir kêmasiyek xwezayî heye, û tenê hûn dikarin xwe bigihînin wê (mînakî di destên xwe de bigirin) û hûn dikarin wê bifroşin an xerc bikin.

Ji bo ronîkirina ka em çawa gihîştine van her du taybetmendiyan, em bi hevokên jêrîn dest pê bikin:

Pêşniyara # 1: Rêbaza Hêsan a Bê Kêmasî û Kontrolkirina Gihîştinê

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

  • G [K]: = n nûvekirina jimareyek ku bi kilîtê tê gihîştin destnîşan dike К di rewşa gerdûnî ya blokê de, bi wateyek nû n.
  • danûstandin ⟨Alice, 100⟩ tê vê wateyê ku balansa hesabê Alice -ê li 100 -an tê danîn.

Çareseriya jorîn çend pirsgirêkên sereke hene:

  • Alice dikare bi tenê şandinê hejmarek bêsînor a peran bistîne danûstandin ⟨Alice, 100⟩.
  • Pereyên ku Alice ji Bob re dişîne bêkêr in, ji ber ku Bob dikaribû bi heman teknîkî bi xwe re hejmarek bêsînor zîv bişîne.

Pêşniyara # 2: Hesabkirina kêmasiyê

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Naha em rewşê dişopînin da ku hejmara peran Ka bi kêmanî wekhev bû n berî danûstendina veguhastinê. Lêbelê, dema ku ev pirsgirêka kêmasiyê çareser dike, agahiyek tune ku kî dikare diravên Alice bişîne (ji bo naha, her kes dikare wiya bike, ya sereke ev e ku em qaîdeya sînorkirina mîqdarê neşikînin).

Pêşniyara # 3: Kombînasyona kêmasî û gihîştinê

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Em vê pirsgirêkê bi mekanîzmayek nîşana dîjîtal çareser dikin verify_sig berî kontrolkirina balansê, ku tê vê wateyê ku Alice mifteya xweya taybet bikar tîne da ku danûstendinê îmze bike û piştrast bike ku ew xwediyê zêrên wê ye.

Zimanên bernamekirinê yên Blockchain

Zimanên blockchain ên heyî bi pirsgirêkên jêrîn re rû bi rû ne (hemî di Move de hatin çareser kirin (têbînî: mixabin, nivîskarê gotarê tenê di berhevdanên xwe de serî li Ethereum dide, ji ber vê yekê hêja ye ku meriv wan tenê di vê çarçoveyê de bigire. Mînakî, pirên jêrîn jî di EOS de têne çareser kirin.)):

Nûnerê neyekser ê malûmatan. Taybetmendiyek bi karanîna jimareyek tê kod kirin, lê jimarek ne wekî hebûnek e. Di rastiyê de, celeb an nirxek ku Bitcoin / Ether / <Her Coin> temsîl dike tune! Ev yek nivîsandina bernameyên ku malûmilkan bikar tînin dijwar û xeletî dike. Nimûneyên wekî derbaskirina hebûnên ji bo/ji proseduran an hilanîna hebûnên di avahiyan de piştgirîya taybetî ji zimên re hewce dike.

Kêmasî nayê berfireh kirin... Ziman tenê yek hebûnek kêm temsîl dike. Wekî din, dermanên li hember kêmasiyê rasterast di semantîka ziman bixwe de têne girêdan. Pêşvebir, ger ew bixwaze sermayek xwerû biafirîne, divê bi baldarî hemî aliyên çavkaniyê bixwe kontrol bike. Vana bi rastî pirsgirêkên peymanên hişmend ên Ethereum in.

Bikarhêner sermayeyên xwe, nîşanên ERC-20, bi hejmaran vedihewînin da ku hem nirx û hem jî pêşkêşiya giştî diyar bikin. Kengê ku nîşanên nû têne afirandin, divê kodê peymana biaqil serbixwe pêbaweriya bi rêzikên weşanê verast bike. Digel vê yekê, pêşkêşkirina neyekser a malûmatan, di hin rewşan de, dibe sedema xeletiyên cidî - dubarekirin, xerckirina dualî an tewra wenda kirina malûmatan jî.

Nebûna kontrola gihîştina nerm... Tenê polîtîkaya kontrola gihîştinê ya ku îro tê bikar anîn nexşeyek nîşanê ye ku şîfrekirina asîmetrîkî bikar tîne. Mîna parastina kêmasiyê, polîtîkayên kontrolkirina gihîştinê jî di semantîka zimên de kûr in. Lê çawa meriv ziman dirêj bike da ku destûr bide bernamenûs ku polîtîkayên xweya kontrola gihîştinê diyar bikin bi gelemperî karek pir xapînok e.

Ev di heman demê de li ser Ethereum jî rast e, ku girêbestên biaqil ji bo kontrolkirina gihîştinê piştgirîya krîptografî ya xwemalî tune. Pêdivî ye ku pêşdebir bi destan kontrola gihîştinê saz bikin, mînakî, bi karanîna guhezkera tenêOwner.

Her çend ez heyranokek mezin a Ethereum me, ez bawer dikim ku divê taybetmendiyên sermayeyê ji bo armancên ewlehiyê bi xwemalî ji hêla ziman ve werin piştgirî kirin. Bi taybetî, veguheztina Ether ji peymanek biaqil re şandina dînamîkî vedihewîne, ku çînek nû ya xeletiyan ku wekî qelsiyên ji nû ve têketinê têne zanîn destnîşan kiriye. Li vir şandina dînamîk tê vê wateyê ku mantiqa darvekirina kodê dê di dema xebitandinê de (dînamîkî) ne di dema berhevkirinê de (statîk) were destnîşankirin.

Ji ber vê yekê, di Solidity de, dema ku peymana A fonksiyonek di peymana B de vedixwîne, peymana B dibe ku koda ku ji hêla pêşdebirê peymana A ve ne hatî armanc kirin, ku dibe ku encam bide. qelsiyên ji nû ve têketinê (peymana A bi xeletî wekî peymana B tevdigere da ku drav bikişîne berî ku bermayiyên hesabê bi rastî werin derxistin).

Bingehên Sêwirana Ziman Move

Çavkaniyên rêza yekem

Di astek bilind de, têkiliya di navbera modul / çavkanî / prosedurên bi zimanê Move de pir dişibihe têkiliya di navbera çîn / tişt û rêbazên di zimanên OOP de.
Modulên Move dişibin peymanên hişmend ên di blokên din de. Modul celeb û prosedurên çavkaniyê ku rêgezên afirandin, hilweşandin û nûvekirina çavkaniyên daxuyanîkirî diyar dike. Lê ev hemî tenê peyman in ("jargon”) Di Tevgerê de ye. Em ê vê xalê hinekî paşê diyar bikin.

Felqbûn

Move bi nivîsandinê re nermbûnek li Libra zêde dike. Her danûstendina li Libra skrîptek vedihewîne, ku bi bingehîn prosedûra bingehîn a danûstendinê ye. Skrîpt dikare yek çalakiyek diyarkirî pêk bîne, mînakî, dravdana navnîşek diyarkirî ya wergiran, an jî çavkaniyên din ji nû ve bikar bîne - mînakî, bi gazîkirina pêvajoyek ku tê de mantiqa giştî tête diyar kirin. Ji ber vê yekê nivîsarên danûstendinê yên Move nermbûnek mezintir pêşkêş dikin. Skrîptek dikare hem tevgerên yek-carî û hem jî dubarekirî bikar bîne, dema ku Ethereum tenê dikare nivîsarên dubarekirî bimeşîne (navê rêbazek li ser rêbazek peymanek biaqil). Sedema ku jê re "ji nû vebikaranîna" tê gotin ev e ku fonksiyonên peymanek jîr dikare gelek caran were darve kirin. (not: Xala li vir pir nazik e. Ji aliyekî ve, nivîsarên danûstendinê yên di forma pseudo-bytecode de di Bitcoin de jî hene. Ji hêla din ve, wekî ku ez jê fam dikim, Move vî zimanî, bi rastî, di asta zimanek peymanek jîr-tevahî de berfireh dike.).

Ewlekariyê

Forma îcrakar Move bytecode ye, ku ji aliyek ve zimanek ji zimanê meclîsê bilindtir e, lê ji koda çavkaniyê astek nizmtir e. Bytecode di dema xebitandinê de (li ser zincîrê) ji bo çavkanî, celeb û ewlehiya bîranînê bi karanîna verastkerek bytecode tê kontrol kirin, û dûv re ji hêla wergêr ve tê darve kirin. Ev nêzîkatî dihêle Move ku ewlehiya koda çavkaniyê peyda bike, lê bêyî pêvajoya berhevkirinê û hewcedariya lê zêdekirina berhevkerek li pergalê. Çêkirina Move zimanek bytecode çareseriyek pir baş e. Ne hewce ye ku ew ji çavkaniyê were berhev kirin, wekî ku di Solidity de ye, û ne hewce ye ku meriv ji têkçûn an êrişên gengaz ên li ser binesaziya berhevkerê xeman bike.

Verifiability

Mebesta me ew e ku kontrolên bi qasî ku pêkan hêsan pêk bînin, ji ber ku ev hemî li ser zincîrê têne kirin (têbînî: serhêl, di dema pêkanîna her danûstendinê de, ji ber vê yekê her derengî dibe sedema hêdîbûna tevahiya torê), Lêbelê, di destpêkê de sêwirana ziman amade ye ku amûrên verastkirina statîk ên derveyî-zincîrê bikar bîne. Her çend ev bijartir e, ji bo naha pêşkeftina amûrên verastkirinê (wek amûrek veqetandî) ji bo pêşerojê hate paşxistin, û naha tenê verastkirina dînamîkî di dema xebitandinê de (li ser zincîrê) tê piştgirî kirin.

Modularity

Modulên Tevger rakêşana daneyê peyda dikin û operasyonên krîtîk li ser çavkaniyan herêmî dikin. Girtîgeha ku ji hêla modulê ve hatî peyda kirin, digel parastina ku ji hêla pergala celebê Move ve hatî peyda kirin, bi hev ve girê dide, piştrast dike ku taybetmendiyên ku li ser celebên modulê hatine danîn bi kodê derveyî modulê nayê binpê kirin. Ev sêwiranek rakêşandinê ya bi rengek baş-ramandî ye, tê vê wateyê ku daneyên di hundurê peymanê de tenê dikarin di çarçoveya peymanê de biguhezin, lê ne li derve.

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Çavdêriyê bar bike

Mînaka senaryoya danûstendinê destnîşan dike ku kiryarên xedar an xemsar ên bernameçêkerek li derveyî modulek nikare ewlehiya çavkaniyên modulek tawîz bide. Dûv re, em ê li mînakan binihêrin ka modul, çavkanî û prosedur çawa têne bikar anîn da ku bernameya blockchain -a Libra -yê bername bikin.

Pereyên peer-to-Peer

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Hejmara dravên ku di mîqdarê de hatine destnîşankirin dê ji balansa şanderê ji wergir re were veguheztin.
Li vir çend tiştên nû hene (bi sor têne destnîşan kirin):

  • 0x0: navnîşana hesabê ku modul lê tê hilanîn
  • Diravcins: navê module
  • Xûrdepere: cureyê çavkaniyê
  • Nirxa coinê ku ji hêla prosedurê ve hatî vegerandin nirxek çavkaniya 0x0 e. Currency.Coin
  • bizivirin (): nirx dîsa nayê bikaranîn
  • kopî (): nirx dikare paşê were bikar anîn

Kodê analîz bikin: di gava yekem de, şandyar prosedurek bi navê bang dike remove_from_sender ji modulek ku tê de hatî tomarkirin 0x0. Pere. Di gava duyemîn de, şander drav diguhezîne wergir û nirxa çavkaniya drav di prosedûra depokirina modulê de vediguhezîne. 0x0. Pere.

Li vir sê mînakên xeletiyên kodê hene ku dê ji hêla kontrolê ve bêne red kirin:
Bi guheztina banga fonan dubare bikin tevger (pere) li ser kopî (coin). Çavkanî tenê dikarin werin veguheztin. Hewl didin ku hejmareke çavkaniyekê dubare bikin (mînak, bi bangkirinê kopî (coin) di mînaka jorîn de) dema ku bytecode -ê tê kontrol kirin dê xeletiyek çêbibe.

Bi diyarkirina veberhênana drav tevger (pere) du caran . Zêdekirina rêzek 0x0.Currency.deposit (kopîkirin (some_other_payee), barkirin (coin)) Mînakî, ya jorîn dê bihêle ku şander du caran drav "xerc bike" - cara yekem bi mûçegir re, û ya duyemîn jî bi some_other_payee. Ev tevgerek nexwestî ye ku bi hebûnek laşî ne mimkun e. Xwezî, Move dê vê bernameyê red bike.

Ji ber redkirinê windabûna fonan tevger (pere). Ger hûn çavkaniyê neguhezînin (mînak, bi jêbirina rêza tê de tevger (pere)), xeletiyek verastkirina bytecode dê were avêtin. Ev bernameçêkerên Move ji windabûna drav an xeletî diparêze.

Modula pereyê

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Her hesab dikare 0 an bêtir modulan (wek rectangles têne xuyang kirin) û yek an bêtir nirxên çavkaniyê (wek silindir têne xuyang kirin) hebe. Mînakî, hesabek li 0x0 modulek heye 0x0. Pere û nirxa cureyê çavkaniyê 0x0.Pere.Coin. Hesab li navnîşanê 0x1 du çavkanî û yek modul heye; Hesab li navnîşanê 0x2 du modul û yek nirxa çavkaniyê heye.

Demên Nekotory:

  • Nivîsara danûstendinê atomî ye - an ew bi tevahî tête darve kirin an jî qet nabe.
  • Modulek kodek demdirêj e ku li seranserê cîhanê tê gihîştin.
  • Dewleta gerdûnî wekî tabloyek hash hatî çêkirin, ku mifteya wê navnîşana hesabê ye
  • Hesab dikarin ji yek nirxa çavkaniyê ya celebek diyar û ne bêtir ji yek modulek bi navek diyarkirî (hesabek li 0x0 nikare çavkaniyek zêde bihewîne 0x0.Pere.Coin an modulek din bi navê Diravcins)
  • Navnîşana modula diyarkirî beşek ji celebê ye (0x0.Pere.Coin и 0x1.Pere.Coin cureyên cihê ne ku bi hev re nayên bikar anîn)
  • Bernamesaz dikarin bi diyarkirina çavkaniya xwerû ya xwerû gelek mînakên vê celeb çavkaniyê di hesabekê de hilînin - (çavkanî TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Hûn dikarin çavkaniyek bi navê wê bêyî nakokiyan binav bikin, mînakî hûn dikarin du çavkaniyan bikar bînin TwoCoins.c1 и TwoCoins.c2.

Daxuyaniya çavkaniya coin

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra
Modula bi navê Diravcins û celebek çavkaniyek bi navê Xûrdepere

Demên Nekotory:

  • Xûrdepere avahiyek bi yek qada cureyê ye u64 (64-bit jimareya bênîşan)
  • Tenê prosedurên modulê Diravcins dikare nirxên cureyê biafirîne an hilweşîne Xûrdepere.
  • Modul û nivîsarên din tenê dikarin bi prosedurên gelemperî yên ku ji hêla modulê ve têne peyda kirin binivîsin an referansa qada nirxê bikin.

Firotina emanetê

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Ev prosedur çavkaniyek qebûl dike Xûrdepere wekî têketinê û wê bi çavkaniyê re dike yek Xûrdeperedi hesabê wergir de hatî hilanîn:

  1. Hilweşandina çavkaniya têketinê Coin û tomarkirina nirxa wê.
  2. Wergirtina girêdanek bi çavkaniyek Coin ya yekta ya ku di hesabê wergir de hatî hilanîn.
  3. Guhertina nirxa hejmara Coins ji hêla nirxa ku di parametreyê de derbas dibe dema ku prosedurek bang dike.

Demên Nekotory:

  • Unpack, BorrowGlobal - prosedurên çêkirî
  • Ji berhevxistin Ev riya yekane ye ji bo jêbirina çavkaniyek bi tîpa T. Pêvajo çavkaniyekê wekî têketinê digire, wê hildiweşîne û nirxa ku bi qadên çavkaniyê ve girêdayî ye vedigerîne.
  • BorrowGlobal navnîşanek wekî têketinê digire û referansek vedigerîne mînakek bêhempa ya T-ya ku ji hêla wê navnîşanê ve hatî weşandin (xwedî) ye
  • &mut Coin ev girêdanek çavkaniyê ye Xûrdepere

Pêkanîna vekişîna_from_sender

Dive nav Move - Zimanê bernamesaziya zincîra blokê ya Facebookê Libra

Ev prosedur:

  1. Girêdanek bi çavkaniyek bêhempa digire Xûrdepere, bi hesabê şanderê ve girêdayî ye
  2. Nirxa çavkaniyekê kêm dike Xûrdepere bi riya lînkê ji bo mîqdara diyarkirî
  3. Çavkaniyek nû diafirîne û vedigerîne Xûrdepere bi hevsengiya nûvekirî.

Demên Nekotory:

  • Diravdanî dikare ji aliyê her kesî ve bibe, lê remove_from_sender tenê gihîştina pereyên hesabê gazîkirinê heye
  • Navnîşana GetTxnSender mîna msg.sender li Solidity
  • RejectUnless mîna xwestin li Solidity. Ger ev kontrol bi ser nekeve, danûstendin tê rawestandin û hemî guhertin paşde têne vegerandin.
  • Hevdan ew jî pêvajoyek çêkirî ye ku çavkaniyek nû ya celeb T diafirîne.
  • Û herwisa Ji berhevxistin, Hevdan tenê dikare di hundurê modulê de ku çavkanî tê de tête gotin T

encamê

Me taybetmendiyên sereke yên zimanê Move lêkolîn kir, bi Ethereum re dan ber hev, û di heman demê de bi hevoksaziya bingehîn a tîpan jî nas bûn. Di dawiyê de, ez pir pêşniyar dikim ku hûn kontrol bikin kaxeza spî ya orîjînal. Ew di derbarê prensîbên sêwirana zimanê bernamenûsê de, û her weha gelek girêdanên bikêr de gelek hûrgulî vedihewîne.

Source: www.habr.com

Add a comment