Lição 2

Розуміння синтаксису та основних понять Vyper

Підготуйтеся заглибитися у світ смарт-контрактів Ethereum із Vyper у майбутньому. В Уроці 3 ми розглянемо більш складні принципи Vyper. Ми розглянемо більш практичний підхід, зосередившись на розробці, реалізації та взаємодії з розумними контрактами в мережі Ethereum.

Вступ до синтаксису Vyper

Комп’ютери, як і люди, спілкуються різними мовами. Solidity та Vyper — дві відомі мови в сфері блокчейну Ethereum. Ми представили Vyper, мову програмування смарт-контрактів Ethereum, і порівняли її з Solidity в уроці 1. У цьому розділі ми заглибимося в синтаксис Vyper, який разюче схожий на синтаксис Python. Однією з цілей Vyper є полегшення кодування смарт-контрактів, зберігаючи належний рівень безпеки. Його синтаксис має бути максимально простим і зрозумілим. Якщо ви програміст на Python, ви почуватиметеся як вдома. Навіть якщо ви ні, Python-подібний синтаксис Vyper легко вивчити. Давайте розглянемо основні синтаксичні компоненти Vyper.

Python 
 # Це коментар у Vyper 
 @external 
 def greet(name: string[10]) -> string[30]: 
 return concat("Привіт, ", ім'я, "!")

Основні типи даних у Vyper

Типи даних є будівельними блоками будь-якої мови програмування. Вони визначають, які дані можна зберігати та маніпулювати в програмі. Давайте розглянемо деякі основні типи даних, які пропонує Vyper:

  • Логічний: це двійковий тип даних, який може мати одне з двох можливих значень, істинне або хибне. Приклад: flag: bool = True
  • Цілі числа: Vyper підтримує цілі числа, які можуть бути додатними, від’ємними або нульовими. Вони бувають різних розмірів від 8 до 256 біт, найпоширенішим з яких є int128. Приклад: count: int128 = 10
  • Десятковий: використовується для представлення чисел з плаваючою комою, тобто чисел, які мають десяткову крапку. Приклад: price: decimal = 123.45
  • Байти та рядки: байти – це послідовності байтових даних, а рядки – це послідовності символів Unicode. Приклад: name: string[20] = 'Alice'
  • Списки та масиви: списки — це набір елементів одного типу даних. З іншого боку, масиви — це особливий тип списків, довжина яких фіксована. Приклад: numbers: int128[5] = [1, 2, 3, 4, 5]
    Кожен із цих типів даних займає своє місце в написанні смарт-контрактів. Вам потрібно буде вибрати правильний тип даних для кожної частини даних, яку ви хочете зберегти, залежно від того, які операції ви хочете виконувати з цими даними.

Підсумовуючи, деякі значення, доступні у Vyper:

  • bool
  • int128
  • uint256
  • десяткові знаки
  • адресу
  • байт32
  • Байти
  • Рядок
Python 
 # @version ^0.3.7 

 b: public(bool) 
 i: public(int128) # -2 ** 127 до (2 ** 127 - 1) 
 u: public(uint256) # 0 до 2 * * 256 - 1 
 dec: public(decimal) # -2 ** 127 to (2 ** 127 - 1), 10 знаків після коми 
 addr: public(address) 
 b32: public(bytes32) 
 bs: public(Bytes) [100]) 
 s: public(String[100]) 


 @external 
 def __init__(): 
 self.b = False 
 self.i = -1 
 самост.у = 123 
 self.dec = 3.14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206 e26ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Привіт Вайпер"

Функції в Vyper

Функції у Vyper, як і в багатьох інших мовах, є блоками багаторазового коду, які виконують конкретне завдання. Вони забезпечують кращу модульність вашої програми та дають можливість багаторазового використання коду.

У Vyper ви можете визначити функцію за допомогою ключового слова def , як і в Python. Функції також мають список параметрів і тип повернення. Ось проста функція Vyper:

Python 
 @external 
 def add(a: int128, b: int128) -> int128: 
 return a + b

Декоратор @externalробить цю функцію викликаною поза контрактом (через транзакцію чи інший контракт). Без цього декоратора функцію можна було б викликати лише в межах контракту, де вона визначена.

Внутрішні та зовнішні функції

Функції @internal можна викликати лише всередині контракту.

Функції @external можна викликати лише за межами контракту.

приклад:

Python 
 # @version ^0.3.7 

 # Внутрішні функції можна викликати лише всередині цього контракту 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 


 @external 
 @view 
 def extFunc() -> bool: 
 return True 


 # Зовнішні функції можна викликати лише за межами цього контракту 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # не можна викликати іншу зовнішню функцію 
 # self.extFunc()

    # може викликати внутрішні функції 
 z: uint256 = self._add(x, y) 

 return (x + y) / 2 


 @internal 
 @pure 
 def _sqr(x: uint256) -> uint256: 
 return x * x 


 @external 
 @view 
 def sumOfSquares(x: uint256, y: uint256) -> uint256: 
 повертає self._sqr(x) + self._sqr(y)

Керуючі структури в Vyper

Керуючі структури використовуються для виконання різних дій на основі різних рішень. Vyper пропонує кілька керуючих структур, включаючи цикли if, for і while.

Інструкція if є найпростішою керуючою структурою. Він виконує блок коду, лише якщо задана умова виконується.

Python 
 @external 
 def is_greater_than_ten(a: int128) -> bool: 
 if a > 10: 
 повертає True 
 else: 
 повертає False

Цикл for у Vyper має той самий синтаксис, що й у Python. Ви можете виконати набір інструкцій один раз для кожного елемента в списку, кортежі, наборі тощо.

Числа Python 
 : int128[5] = [1, 2, 3, 4, 5] 

 @external 
 def sum_numbers() -> int128: 
 sum: int128 = 0 
 for i in range(5): 
 sum + = self.numbers[i]
    сума повернення

Цикл while у Vyper неодноразово виконує цільовий оператор, доки задана умова виконується.

Python 
 @external 
 def count_to_ten() -> int128: 
 count: int128 = 0 
 while count < 10: 
 count += 1 
 return count

Обробка помилок у Vyper

У програмуванні обробка помилок має вирішальне значення для роботи з помилками під час виконання та надання значущих повідомлень про помилки користувачеві. Vyper використовує оператор assert для обробки помилок.

Python 
 @external 
 def divide(a: decimal, b: decimal) -> decimal: 
 assert b != 0, "Неможливо поділити на нуль" 
 return a / b

У наведеному вище коді, якщо b дорівнює нулю, буде видано повідомлення про помилку «Неможливо поділити на нуль», і транзакцію буде скасовано. В іншому випадку він перейде до операції поділу.

Vyper також надає оператор revert , який можна використовувати для зупинки виконання поточного виклику та повернення змін стану, а також надаючи повідомлення про помилку.

Це короткий виклад синтаксису та основних принципів Vyper. Ключем до оволодіння Vyper, як і будь-якою мовою програмування, є практика. Я пропоную використовувати ці техніки для написання простих програм. У наступній сесії ми розповімо, як використовувати Vyper для створення та підтримки смарт-контрактів. Слідкуйте!

Вітаємо з успішним завершенням уроку 2! Ви досягли величезного прогресу в розумінні синтаксису та фундаментальних конструкцій Vyper. Ми ознайомилися з синтаксисом Vyper, основними типами даних і функціями, керуючими структурами та обробкою помилок у Vyper. Нагадаємо, що кожен із цих компонентів є основою будь-якої програми Vyper. Дуже важливо мати тверде розуміння цих основних компонентів, і найкращий спосіб зробити це – практикуватися та досліджувати. Створюйте прості програми, які включають те, про що ви дізналися сьогодні. Немає альтернативи практичному досвіду, коли мова йде про кодування.

Підготуйтеся заглибитися у світ смарт-контрактів Ethereum із Vyper у майбутньому. В Уроці 3 ми розглянемо більш складні принципи Vyper. Ми розглянемо більш практичний підхід, зосередившись на розробці, реалізації та взаємодії з розумними контрактами в мережі Ethereum. Зрозумійте, що світ технології блокчейн широкий і постійно змінюється. Як інженер блокчейну, ваша подорож відкриттів і навчання ніколи не закінчується. Ви на шляху до майстерності, і кожен крок вперед, яким би крихітним він не був, є кроком попереду. Продовжуйте свої чудові зусилля, і ми побачимося на уроці 3!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 2

Розуміння синтаксису та основних понять Vyper

Підготуйтеся заглибитися у світ смарт-контрактів Ethereum із Vyper у майбутньому. В Уроці 3 ми розглянемо більш складні принципи Vyper. Ми розглянемо більш практичний підхід, зосередившись на розробці, реалізації та взаємодії з розумними контрактами в мережі Ethereum.

Вступ до синтаксису Vyper

Комп’ютери, як і люди, спілкуються різними мовами. Solidity та Vyper — дві відомі мови в сфері блокчейну Ethereum. Ми представили Vyper, мову програмування смарт-контрактів Ethereum, і порівняли її з Solidity в уроці 1. У цьому розділі ми заглибимося в синтаксис Vyper, який разюче схожий на синтаксис Python. Однією з цілей Vyper є полегшення кодування смарт-контрактів, зберігаючи належний рівень безпеки. Його синтаксис має бути максимально простим і зрозумілим. Якщо ви програміст на Python, ви почуватиметеся як вдома. Навіть якщо ви ні, Python-подібний синтаксис Vyper легко вивчити. Давайте розглянемо основні синтаксичні компоненти Vyper.

Python 
 # Це коментар у Vyper 
 @external 
 def greet(name: string[10]) -> string[30]: 
 return concat("Привіт, ", ім'я, "!")

Основні типи даних у Vyper

Типи даних є будівельними блоками будь-якої мови програмування. Вони визначають, які дані можна зберігати та маніпулювати в програмі. Давайте розглянемо деякі основні типи даних, які пропонує Vyper:

  • Логічний: це двійковий тип даних, який може мати одне з двох можливих значень, істинне або хибне. Приклад: flag: bool = True
  • Цілі числа: Vyper підтримує цілі числа, які можуть бути додатними, від’ємними або нульовими. Вони бувають різних розмірів від 8 до 256 біт, найпоширенішим з яких є int128. Приклад: count: int128 = 10
  • Десятковий: використовується для представлення чисел з плаваючою комою, тобто чисел, які мають десяткову крапку. Приклад: price: decimal = 123.45
  • Байти та рядки: байти – це послідовності байтових даних, а рядки – це послідовності символів Unicode. Приклад: name: string[20] = 'Alice'
  • Списки та масиви: списки — це набір елементів одного типу даних. З іншого боку, масиви — це особливий тип списків, довжина яких фіксована. Приклад: numbers: int128[5] = [1, 2, 3, 4, 5]
    Кожен із цих типів даних займає своє місце в написанні смарт-контрактів. Вам потрібно буде вибрати правильний тип даних для кожної частини даних, яку ви хочете зберегти, залежно від того, які операції ви хочете виконувати з цими даними.

Підсумовуючи, деякі значення, доступні у Vyper:

  • bool
  • int128
  • uint256
  • десяткові знаки
  • адресу
  • байт32
  • Байти
  • Рядок
Python 
 # @version ^0.3.7 

 b: public(bool) 
 i: public(int128) # -2 ** 127 до (2 ** 127 - 1) 
 u: public(uint256) # 0 до 2 * * 256 - 1 
 dec: public(decimal) # -2 ** 127 to (2 ** 127 - 1), 10 знаків після коми 
 addr: public(address) 
 b32: public(bytes32) 
 bs: public(Bytes) [100]) 
 s: public(String[100]) 


 @external 
 def __init__(): 
 self.b = False 
 self.i = -1 
 самост.у = 123 
 self.dec = 3.14 
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52 
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206 e26ae84b525cdacb 
 self.bs = b"\x01" 
 self.s = "Привіт Вайпер"

Функції в Vyper

Функції у Vyper, як і в багатьох інших мовах, є блоками багаторазового коду, які виконують конкретне завдання. Вони забезпечують кращу модульність вашої програми та дають можливість багаторазового використання коду.

У Vyper ви можете визначити функцію за допомогою ключового слова def , як і в Python. Функції також мають список параметрів і тип повернення. Ось проста функція Vyper:

Python 
 @external 
 def add(a: int128, b: int128) -> int128: 
 return a + b

Декоратор @externalробить цю функцію викликаною поза контрактом (через транзакцію чи інший контракт). Без цього декоратора функцію можна було б викликати лише в межах контракту, де вона визначена.

Внутрішні та зовнішні функції

Функції @internal можна викликати лише всередині контракту.

Функції @external можна викликати лише за межами контракту.

приклад:

Python 
 # @version ^0.3.7 

 # Внутрішні функції можна викликати лише всередині цього контракту 
 @internal 
 @pure 
 def _add(x: uint256, y: uint256) -> uint256: 
 return x + y 


 @external 
 @view 
 def extFunc() -> bool: 
 return True 


 # Зовнішні функції можна викликати лише за межами цього контракту 
 @external 
 @view 
 def avg(x: uint256, y: uint256) -> uint256: 
 # не можна викликати іншу зовнішню функцію 
 # self.extFunc()

    # може викликати внутрішні функції 
 z: uint256 = self._add(x, y) 

 return (x + y) / 2 


 @internal 
 @pure 
 def _sqr(x: uint256) -> uint256: 
 return x * x 


 @external 
 @view 
 def sumOfSquares(x: uint256, y: uint256) -> uint256: 
 повертає self._sqr(x) + self._sqr(y)

Керуючі структури в Vyper

Керуючі структури використовуються для виконання різних дій на основі різних рішень. Vyper пропонує кілька керуючих структур, включаючи цикли if, for і while.

Інструкція if є найпростішою керуючою структурою. Він виконує блок коду, лише якщо задана умова виконується.

Python 
 @external 
 def is_greater_than_ten(a: int128) -> bool: 
 if a > 10: 
 повертає True 
 else: 
 повертає False

Цикл for у Vyper має той самий синтаксис, що й у Python. Ви можете виконати набір інструкцій один раз для кожного елемента в списку, кортежі, наборі тощо.

Числа Python 
 : int128[5] = [1, 2, 3, 4, 5] 

 @external 
 def sum_numbers() -> int128: 
 sum: int128 = 0 
 for i in range(5): 
 sum + = self.numbers[i]
    сума повернення

Цикл while у Vyper неодноразово виконує цільовий оператор, доки задана умова виконується.

Python 
 @external 
 def count_to_ten() -> int128: 
 count: int128 = 0 
 while count < 10: 
 count += 1 
 return count

Обробка помилок у Vyper

У програмуванні обробка помилок має вирішальне значення для роботи з помилками під час виконання та надання значущих повідомлень про помилки користувачеві. Vyper використовує оператор assert для обробки помилок.

Python 
 @external 
 def divide(a: decimal, b: decimal) -> decimal: 
 assert b != 0, "Неможливо поділити на нуль" 
 return a / b

У наведеному вище коді, якщо b дорівнює нулю, буде видано повідомлення про помилку «Неможливо поділити на нуль», і транзакцію буде скасовано. В іншому випадку він перейде до операції поділу.

Vyper також надає оператор revert , який можна використовувати для зупинки виконання поточного виклику та повернення змін стану, а також надаючи повідомлення про помилку.

Це короткий виклад синтаксису та основних принципів Vyper. Ключем до оволодіння Vyper, як і будь-якою мовою програмування, є практика. Я пропоную використовувати ці техніки для написання простих програм. У наступній сесії ми розповімо, як використовувати Vyper для створення та підтримки смарт-контрактів. Слідкуйте!

Вітаємо з успішним завершенням уроку 2! Ви досягли величезного прогресу в розумінні синтаксису та фундаментальних конструкцій Vyper. Ми ознайомилися з синтаксисом Vyper, основними типами даних і функціями, керуючими структурами та обробкою помилок у Vyper. Нагадаємо, що кожен із цих компонентів є основою будь-якої програми Vyper. Дуже важливо мати тверде розуміння цих основних компонентів, і найкращий спосіб зробити це – практикуватися та досліджувати. Створюйте прості програми, які включають те, про що ви дізналися сьогодні. Немає альтернативи практичному досвіду, коли мова йде про кодування.

Підготуйтеся заглибитися у світ смарт-контрактів Ethereum із Vyper у майбутньому. В Уроці 3 ми розглянемо більш складні принципи Vyper. Ми розглянемо більш практичний підхід, зосередившись на розробці, реалізації та взаємодії з розумними контрактами в мережі Ethereum. Зрозумійте, що світ технології блокчейн широкий і постійно змінюється. Як інженер блокчейну, ваша подорож відкриттів і навчання ніколи не закінчується. Ви на шляху до майстерності, і кожен крок вперед, яким би крихітним він не був, є кроком попереду. Продовжуйте свої чудові зусилля, і ми побачимося на уроці 3!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.