ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move β€” язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим Π² дСталях основныС характСристики языка Move ΠΈ Π² Ρ‡Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия с Π΄Ρ€ΡƒΠ³ΠΈΠΌ, ΡƒΠΆΠ΅ популярным языком для смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² β€” Solidity (Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Ethereum). ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» основан Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ доступного ΠΎΠ½-Π»Π°ΠΉΠ½ 26-страничного whitepaper-Π°.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Move β€” это исполняСмый язык Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

  1. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Move являСтся языком Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Move, Solidity (язык смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Π² Ethereum) β€” язык Π±ΠΎΠ»Π΅Π΅ высокого уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сначала компилируСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π² EVM (Ethereum Virtual Machine).
  2. Move ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ², Π½ΠΎ ΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π±ΡƒΠ΄Π΅Ρ‚ дальшС), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Solidity β€” это язык Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ².


ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° INDEX Protocol. Π Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠ»ΠΈ большой ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Libra, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ настала ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° язык Move. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ совмСстно с Ρ…Π°Π±Ρ€Π°ΡŽΠ·Π΅Ρ€ΠΎΠΌ coolsiu

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Move являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов с сСмантикой, основанной Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅: рСсурс Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скопирован ΠΈΠ»ΠΈ нСявно ΡƒΠ΄Π°Π»Π΅Π½, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, это схоТС с возмоТностями языка Rust. ЗначСния Π² Rust ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Π·Π° Ρ€Π°Π·. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ значСния Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ нСдоступным ΠΏΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ: Use of moved value β€˜x’. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Rust Π½Π΅Ρ‚ сборки мусора. Когда ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ выходят ΠΈΠ· области видимости, ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, Ρ‚Π°ΠΊΠΆΠ΅ освобоТдаСтся. ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Β«Π²Π»Π°Π΄Π΅Π»Π΅Ρ†Β» Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ x являСтся ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ y становится Π½ΠΎΠ²Ρ‹ΠΌ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ здСсь.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ² Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… систСмах

БущСствуСт Π΄Π²Π° свойства физичСских Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅:

  • Π Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ (Π”Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π½ΠΎΡΡ‚ΡŒ, Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ β€” scarcity). ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ² (эмиссия) Π² систСмС Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ. НСобходимо Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ², Π° созданиС Π½ΠΎΠ²Ρ‹Ρ… β€” это привилСгированная опСрация.
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа. Участник систСмы Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ контроля доступа.

Π­Ρ‚ΠΈ Π΄Π²Π΅ характСристики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ СстСствСнны для физичСских Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ², Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… Π°ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ. НапримСр, Ρ€Π΅Π΄ΠΊΠΈΠΉ ΠΌΠ΅Ρ‚Π°Π»Π» β€” ΠΈΠΌΠ΅Π΅Ρ‚ СстСствСнный Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ (Π΄Π΅Ρ€ΠΆΠ° Π² Ρ€ΡƒΠΊΠ°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π΄Π²ΡƒΠΌ этим свойствам, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ:

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β„– 1: ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π±Π΅Π· Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π° ΠΈ контроля доступа

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

  • G[K]:=n ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ числа, доступного ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ К Π² глобальном состоянии Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°, Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ n.
  • transaction ⟨Alice, 100⟩ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ установку баланса счСта Алисы Π½Π° 100.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • Алиса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΌΠΎΠ½Π΅Ρ‚, просто отправляя transaction ⟨Alice, 100⟩.
  • ΠœΠΎΠ½Π΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Алиса посылаСт Π‘ΠΎΠ±Ρƒ, бСсполСзны, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π‘ΠΎΠ± ΠΌΠΎΠ³ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сСбС Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΌΠΎΠ½Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρƒ ΠΆΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β„– 2: Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ отслСТиваСм ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ количСство ΠΌΠΎΠ½Π΅Ρ‚ Ka Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Ρ€Π°Π²Π½ΠΎ n ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, хотя это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π°, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Алисы (ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, Π³Π»Π°Π²Π½ΠΎΠ΅ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ограничСния количСства).

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β„– 3: ОбъСдиняСм Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

ΠœΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи verify_sig ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ баланса, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Алиса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свой Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ для подписания Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ подтвСрТдСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° являСтся Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ своих ΠΌΠΎΠ½Π΅Ρ‚Ρ‹.

Π―Π·Ρ‹ΠΊΠΈ программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ языки Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ (всС ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π² Move (ΠΏΡ€ΠΈΠΌ.: ΠΊ соТалСнию, Π°Π²Ρ‚ΠΎΡ€ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π°ΠΏΠΏΠ΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ethereum Π² своих сравнСниях, поэтому стоит Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΡ… лишь Π² Ρ‚Π°ΠΊΠΎΠΌ контСкстС. НапримСр, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ниТСсказанного Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈ Π² EOS)):

НСпрямоС прСдставлСниС Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ². Актив кодируСтся с использованиСм Ρ†Π΅Π»ΠΎΠ³ΠΎ числа, Π½ΠΎ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ². На самом Π΄Π΅Π»Π΅, Π½Π΅Ρ‚ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ значСния, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ / эфир / <Π›ΡŽΠ±Π°Ρ ΠœΠΎΠ½Π΅Ρ‚Π°>! Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹ΠΌ ошибкам написаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π°ΠΊΡ‚ΠΈΠ²Ρ‹. ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ² Π²/ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ² Π² структурах Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΡ‚ языка.

Π”Π΅Ρ„ΠΈΡ†ΠΈΡ‚ Π½Π΅Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ. Π―Π·Ρ‹ΠΊ прСдставляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π½Ρ‹ΠΉ Π°ΠΊΡ‚ΠΈΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, срСдства Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π° ТСстко Π·Π°ΡˆΠΈΡ‚Π° нСпосрСдствСнно Π² самой сСмантикС языка. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Ссли ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π°ΠΊΡ‚ΠΈΠ², Π΄ΠΎΠ»ΠΆΠ΅Π½ сам Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС аспСкты рСсурса. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Ethereum.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ свои Π°ΠΊΡ‚ΠΈΠ²Ρ‹, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ стандарта ERC-20, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†Π΅Π»Ρ‹Π΅ числа для опрСдСлСния ΠΊΠ°ΠΊ стоимости, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ эмиссии. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΊΠΎΠ΄ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ соблюдСния ΠΏΡ€Π°Π²ΠΈΠ» эмиссии. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, нСпрямоС прСдставлСниС Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚, Π² рядС случаСв, ΠΊ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ошибкам β€” Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Ρ‚Ρ€Π°Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ².

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ контроля доступа. ЕдинствСнная ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° контроля доступа, примСняСмая сСйчас β€” это схСма подписи с использованиСм асиммСтричной ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. Как ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π°, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° контроля доступа Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π² сСмантикС языка. Но ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ язык, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ программистам ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ контроля доступа β€” это, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°.

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ€Π½ΠΎ для Ethereum, Π³Π΄Π΅ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ для контроля доступа. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ onlyOwner.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я большой ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊ Ethereum, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ свойства Π°ΠΊΡ‚ΠΈΠ²ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ языком Π² цСлях бСзопасности. Π’ частности, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ether Π² смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ появлСнию Π½ΠΎΠ²ΠΎΠ³ΠΎ класса ошибок, извСстных ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄Π° (re-entrancy vulnerabilities). ДинамичСская диспСтчСризация здСсь ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° выполнСния ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π²ΠΎ врСмя выполнСния (динамичСская), Π° Π½Π΅ Π²ΠΎ врСмя компиляции (статичСская).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Solidity, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ A Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° B, ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ B ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π±Ρ‹Π» прСдусмотрСн Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° A, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ уязвимостям ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° (ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ A случайно выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° B, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΡΡ‚ΡŒ дСньги Π΄ΠΎ фактичСского Π²Ρ‹Ρ‡Π΅Ρ‚Π° остатков ΠΈΠ· ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи).

ΠžΡΠ½ΠΎΠ²Ρ‹ Π΄ΠΈΠ·Π°ΠΉΠ½Π° языка Move

РСсурсы ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ порядка

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ высокоуровнСво, Ρ‚ΠΎ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ модулями/рСсурсами/ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ Π² языкС Move ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами/ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π² ООП-языках.
ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π² Move Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°Ρ…. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° для создания, уничтоТСния ΠΈ обновлСния ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… рСсурсов. Но всС это β€” лишь условности (β€œΠΆΠ°Ρ€Π³ΠΎΠ½β€) Π² Move. Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ

Move добавляСт гибкости Libra Ρ‡Π΅Ρ€Π΅Π· скрипты. КаТдая транзакция Π² Libra Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ фактичСски являСтся основной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ дСйствиС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΈ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ списку ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вызывая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Π½Π° общая Π»ΠΎΠ³ΠΈΠΊΠ°. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ скрипты Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Move ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ повСдСния, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ethereum ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ сцСнарии (вызывая ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π½Π°Π·Π²Π°Π½ Β«ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌΒ», Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·. (ΠΏΡ€ΠΈΠΌ.: здСсь ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ½ΠΊΠΈΠΉ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, скрипты Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ псСвдо-Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°, Π΅ΡΡ‚ΡŒ ΠΈ Π² Bitcoin. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΊΠ°ΠΊ я понял β€” Move Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ этот язык, ΠΏΠΎ сути, Π΄ΠΎ уровня ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ языка смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²).

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Move β€” это Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, с ΠΎΠ΄Π½ΠΎΠΉ стороны, язык Π±ΠΎΠ»Π΅Π΅ высокого уровня, Ρ‡Π΅ΠΌ ассСмблСр, Π½ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Π΅Π΅, Ρ‡Π΅ΠΌ исходный ΠΊΠΎΠ΄. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ провСряСтся Π² Ρ€Π°Π½-Ρ‚Π°ΠΉΠΌΠ΅ (on-chain) Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ рСсурсов, Ρ‚ΠΈΠΏΡ‹ ΠΈ бСзопасности памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ выполняСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Move ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΡƒΡŽ для исходного ΠΊΠΎΠ΄Π°, Π½ΠΎ Π±Π΅Π· процСсса компиляции ΠΈ нСобходимости Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ компилятор Π² систСму. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Move языком Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° β€” это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π•Π³ΠΎ Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· исходников, ΠΊΠ°ΠΊ Π² случаС с Solidity, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сбоях ΠΈΠ»ΠΈ Π°Ρ‚Π°ΠΊΠ°Ρ… Π½Π° инфраструктуру компилятора.

Π’Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ

ΠœΡ‹ Π½Π°Ρ†Π΅Π»Π΅Π½Ρ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС это ΠΈΠ΄Π΅Ρ‚ on-chain (ΠΏΡ€ΠΈΠΌ.: ΠΎΠ½-Π»Π°ΠΉΠ½, Π² процСссС выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, поэтому любая Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ замСдлСнию всСй сСти), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½ языка Π³ΠΎΡ‚ΠΎΠ² ΠΊ использованию ΠΈ off-chain срСдств статичСской Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π₯отя это ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΏΠΎΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° срСдств Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ (ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΡƒΠ»ΠΊΠΈΡ‚Π°) ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π° Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅, ΠΈ сСйчас поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ динамичСская вСрификация Π² Ρ€Π°Π½-Ρ‚Π°ΠΉΠΌΠ΅ (on-chain).

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Move ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ критичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ рСсурсами. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ, обСспСчиваСмая ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ, Π² сочСтании с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ, обСспСчиваСмой систСмой Ρ‚ΠΈΠΏΠΎΠ² Move, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ свойства, установлСнныС для Ρ‚ΠΈΠΏΠΎΠ² модуля, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Ρ‹ ΠΊΠΎΠ΄ΠΎΠΌ Π²Π½Π΅ модуля. Π­Ρ‚ΠΎ достаточно ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ абстракции, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, Π½ΠΎ Π½Π΅ ΠΈΠ·Π²Π½Π΅.

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

ΠžΠ±Π·ΠΎΡ€ Move

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ скрипта Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ дСмонстрируСт, Ρ‡Ρ‚ΠΎ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСостороТныС дСйствия программиста Π²Π½Π΅ модуля Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ рСсурсов модуля. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, рСсурсы ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra.

Peer-to-Peer ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΈ

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

Π—Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² amount количСство ΠΌΠΎΠ½Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ с баланса отправитСля ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ.
Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ нСсколько Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ красными надписями):

  • 0x0: адрСс ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, Π³Π΄Π΅ хранится ΠΌΠΎΠ΄ΡƒΠ»ΡŒ
  • Currency: Π½Π°Π·Π²Π°Π½ΠΈΠ΅ модуля
  • Coin: Ρ‚ΠΈΠΏ рСсурса
  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ coin, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ, являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ рСсурса, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ 0x0.Currency.Coin
  • move(): Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано снова
  • copy(): Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано ΠΏΠΎΠ·ΠΆΠ΅

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠ΄: Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ withdraw_from_sender ΠΈΠ· модуля, хранящСгося Π² 0x0.Currency. На Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ срСдства ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ, пСрСмСщая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСсурса ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π° модуля 0x0.Currency.

Π’ΠΎΡ‚ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ошибок Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ:
Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ срСдств ΠΏΡƒΡ‚Π΅ΠΌ измСнСния Π²Ρ‹Π·ΠΎΠ²Π° move(coin) Π½Π° copy(coin). РСсурсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство рСсурса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вызывая copy(coin) Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°.

ΠŸΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ срСдств, ΡƒΠΊΠ°Π·Π°Π² move(coin) Π΄Π²Π°ΠΆΠ΄Ρ‹ . Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ строки 0x0.Currency.deposit (copy (some_other_payee), move (coin)) ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŽ Β«ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΒ» ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹ β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· с ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ с some_other_payee. Π­Ρ‚ΠΎ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ с физичСским Π°ΠΊΡ‚ΠΈΠ²ΠΎΠΌ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Move ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠŸΠΎΡ‚Π΅Ρ€Ρ срСдств ΠΈΠ·-Π·Π° ΠΎΡ‚ΠΊΠ°Π·Π° Π² move(coin). Если Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ рСсурс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»ΠΈΠ² строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ move(coin)), Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° ошибка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ программистов Move ΠΎΡ‚ случайной ΠΈΠ»ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠΉ ΡƒΡ‚Π΅Ρ€ΠΈ срСдств.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Currency

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

КаТдая Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²) ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСсурсов (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€ΠΎΠ²). НапримСр, учСтная запись ΠΏΠΎ адрСсу 0x0 содСрТит ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 0x0.Currency ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСсурса Ρ‚ΠΈΠΏΠ° 0x0.Currency.Coin. УчСтная запись ΠΏΠΎ адрСсу 0x1 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° рСсурса ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ; УчСтная запись ΠΏΠΎ адрСсу 0x2 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° модуля ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСсурса.

НСкоторыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • Π‘ΠΊΡ€ΠΈΠΏΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΉ β€” ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΈΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊ.
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒ β€” это Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠΉ кусок ΠΊΠΎΠ΄Π°, глобально доступный.
  • Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС структурировано ΠΊΠ°ΠΊ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ адрСс Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°
  • Π£Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ записи ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния рСсурса Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ модуля с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (учСтная запись ΠΏΠΎ адрСсу 0x0 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ рСсурс 0x0.Currency.Coin ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Currency)
  • АдрСс Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ модуля являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ° (0x0.Currency.Coin ΠΈ 0x1.Currency.Coin β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ взаимозамСняСмо)
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько экзСмпляров Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° рСсурса Π² ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, опрСдСляя свой кастомный рСсурс β€” (resource TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° рСсурс ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π±Π΅Π· ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π΄Π²Π° рСсурса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ TwoCoins.c1 ΠΈ TwoCoins.c2.

ОбъявлСниС рСсурса Coin

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook
ΠœΠΎΠ΄ΡƒΠ»ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Currency ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ рСсурса с ΠΈΠΌΠ΅Π½Π΅ΠΌ Coin

НСкоторыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • Coin β€” это структура с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° u64 (64-разрядноС Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°)
  • Волько ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ модуля Currency ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ значСния Ρ‚ΠΈΠΏΠ° Coin.
  • Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ скрипты ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ»Π΅ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, прСдоставляСмыС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

РСализация Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ рСсурс Coin Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΅Π³ΠΎ с рСсурсом Coin, хранящимся Π½Π° счСтС получатСля:

  1. Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ рСсурса Coin ΠΈ запись Π΅Π΅ значСния.
  2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ рСсурс Coin, хранящийся Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π΅ получатСля.
  3. ИзмСнСниС значСния количСства Coin Π½Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

НСкоторыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • Unpack, BorrowGlobal β€” встроСнныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹
  • Unpack<T> это СдинствСнный способ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ рСсурс Ρ‚ΠΈΠΏΠ° T. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ рСсурс Π½Π° Π²Ρ…ΠΎΠ΄, ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ассоциированноС с полями рСсурса.
  • BorrowGlobal<T> ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ адрСс Π² качСствС Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ экзСмпляр T, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ) этому адрСсу
  • &mut Coin это ссылка Π½Π° рСсурс Coin

РСализация withdraw_from_sender

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Move — язык программирования Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Libra ΠΎΡ‚ Facebook

Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ссылку Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ рСсурс Coin, привязанный ΠΊ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρƒ отправитСля
  2. Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСсурса Coin ΠΏΠΎ ссылкС Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ сумму
  3. Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ рСсурс Coin с ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌ балансом.

НСкоторыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • Deposit ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΊΠ΅ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ withdraw_from_sender ΠΈΠΌΠ΅Π΅Ρ‚ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΌΠΎΠ½Π΅Ρ‚Π°ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°
  • GetTxnSenderAddress схоТС с msg.sender Π² Solidity
  • RejectUnless схоТС с require Π² Solidity. Если эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Π°, исполнСниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ останавливаСтся ΠΈ всС измСнСния ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ.
  • Pack<T> это Ρ‚Π°ΠΊ ΠΆΠ΅ встроСнная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, которая создаСт Π½ΠΎΠ²Ρ‹ΠΉ рСсурс Ρ‚ΠΈΠΏΠ° Π’.
  • Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Unpack<T>, Pack<T> ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля, Π³Π΄Π΅ описан рСсурс T

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ основныС характСристики языка Move, сравнили Π΅Π³ΠΎ с Ethereum, Π° Ρ‚Π°ΠΊΠΆΠ΅ ознакомились с основным синтаксисом скриптов. Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ white paper. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя мноТСство Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² проСктирования языка программирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ мноТСство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ссылок.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ