レッスン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!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン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!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.