Комп’ютери, як і люди, спілкуються різними мовами. 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:
flag: bool = True
int128
. Приклад: count: int128 = 10
price: decimal = 123.45
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 ви можете визначити функцію за допомогою ключового слова 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 пропонує кілька керуючих структур, включаючи цикли 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 використовує оператор 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!
Комп’ютери, як і люди, спілкуються різними мовами. 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:
flag: bool = True
int128
. Приклад: count: int128 = 10
price: decimal = 123.45
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 ви можете визначити функцію за допомогою ключового слова 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 пропонує кілька керуючих структур, включаючи цикли 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 використовує оператор 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!