Leçon 2

Понимание синтаксиса и основных концепций Vyper

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

Введение в синтаксис Выпера

Компьютеры, как и люди, общаются на различных языках. Solidity и Vyper - два заметных языка в сфере блокчейна Ethereum. В уроке 1 мы представили Vyper, язык программирования смарт-контрактов Ethereum, и сравнили его с Solidity. В этом разделе вместо этого мы углубимся в синтаксис Vyper, который поразительно похож на синтаксис Python. Одна из целей Vyper - сделать кодирование смарт-контрактов проще, сохранив при этом хорошую безопасность. Его синтаксис должен быть максимально простым и понятным. Вы будете чувствовать себя как дома, если Вы программист на Python. Даже если это не так, синтаксис Vyper, похожий на Python, прост для изучения. Давайте рассмотрим основные синтаксические компоненты Vyper.

Python
# Это комментарий в Vyper
@external
def greet(name: string[10]) -> string[30]:
 return concat("Hello, ", name, "!")

Основные типы данных в Vyper

Типы данных - это строительные блоки любого языка программирования. Они определяют, какого рода данные можно хранить и манипулировать ими в рамках программы. Давайте рассмотрим некоторые основные типы данных, которые предлагает Vyper:

  • Булево: Это двоичный тип данных, который может иметь одно из двух возможных значений - true или false. Пример: flag: bool = True
  • Целые числа: Vyper поддерживает целые числа, которые представляют собой целые числа, которые могут быть либо положительными, либо отрицательными, либо нулевыми. Они бывают различных размеров - от 8 до 256 бит, наиболее распространенным является int128. Пример: count: int128 = 10
  • Десятичный: Используется для представления чисел с плавающей запятой, т.е. чисел, имеющих десятичную точку. Пример: цена: десятичная = 123.45
  • Байты и строки: Байты - это последовательности байтовых данных, а строки - последовательности символов Юникода. Пример: name: string[20] = 'Alice'.
  • Списки и массивы: Списки - это коллекция элементов одного типа данных. Массивы, с другой стороны, представляют собой особый тип списка, в котором длина фиксирована. Пример: числа: int128[5] = [1, 2, 3, 4, 5].
    Каждый из этих типов данных имеет свое место в написании смарт-контрактов. Вам необходимо выбрать правильный тип данных для каждой части данных, которые Вы хотите хранить, исходя из того, какие операции Вы хотите выполнять с этими данными.

Напомним, что некоторые значения, доступные в Vyper:

  • bool
  • int128
  • uint256
  • Десятичные числа
  • адрес
  • байт32
  • Байты
  • String
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 до (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
 self.u = 123
 self.dec = 3.14
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac2030505c6b465c8206e26ae84b525cdacb
 self.bs = b"\x01"
 self.s = "Hello Vyper"

Функции в Vyper

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

В Vyper Вы можете определить функцию, используя ключевое слово def, как и в Python. Функции также имеют список параметров и возвращаемый тип. Вот простая функция Vyper:

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

Декоратор @externaldecoratorделает эту функцию вызываемой извне контракта (транзакцией или другим контрактом). Без этого декоратора функция была бы доступна для вызова только в рамках контракта, в котором она определена.

Внутренние и внешние функции

@внутренние функции могут быть вызваны только внутри контракта.

@внешние функции могут быть вызваны только извне контракта.

Пример:

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:
 return 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:
 return True
 else:
 return False

Цикл for в Vyper имеет тот же синтаксис, что и в Python. Вы можете выполнить набор операторов, по одному разу для каждого элемента в списке, кортеже, наборе и т.д.

Python
numbers: 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 равно нулю, будет выдано сообщение об ошибке "Cannot divide by zero", и транзакция будет отменена. В противном случае он перейдет к операции деления.

Vyper также предоставляет оператор revert, который может быть использован для остановки выполнения текущего вызова и возврата изменений состояния, а также для выдачи сообщения об ошибке.

Это краткое описание синтаксиса и основных принципов работы Vyper. Ключом к освоению Vyper, как и любого другого языка программирования, является практика. Я рекомендую использовать эти техники для написания простых приложений. В следующей сессии мы рассмотрим, как использовать Vyper для построения и сопровождения смарт-контрактов. Будьте начеку!

Поздравляем Вас с успешным завершением Урока 2! Вы достигли огромного прогресса в освоении синтаксиса Vyper и фундаментальных конструкций. Мы рассмотрели введение в синтаксис Vyper, основные типы данных, а также функции, управляющие структуры и обработку ошибок в Vyper. Напомним, что каждый из этих компонентов является основой любой программы Vyper. Очень важно иметь твердое понимание этих основных компонентов, и лучший способ добиться этого - практиковаться и изучать. Создавайте простые программы, включающие в себя то, чему Вы научились сегодня. Нет альтернативы практическому опыту, когда речь идет о кодировании.

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

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 2

Понимание синтаксиса и основных концепций Vyper

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

Введение в синтаксис Выпера

Компьютеры, как и люди, общаются на различных языках. Solidity и Vyper - два заметных языка в сфере блокчейна Ethereum. В уроке 1 мы представили Vyper, язык программирования смарт-контрактов Ethereum, и сравнили его с Solidity. В этом разделе вместо этого мы углубимся в синтаксис Vyper, который поразительно похож на синтаксис Python. Одна из целей Vyper - сделать кодирование смарт-контрактов проще, сохранив при этом хорошую безопасность. Его синтаксис должен быть максимально простым и понятным. Вы будете чувствовать себя как дома, если Вы программист на Python. Даже если это не так, синтаксис Vyper, похожий на Python, прост для изучения. Давайте рассмотрим основные синтаксические компоненты Vyper.

Python
# Это комментарий в Vyper
@external
def greet(name: string[10]) -> string[30]:
 return concat("Hello, ", name, "!")

Основные типы данных в Vyper

Типы данных - это строительные блоки любого языка программирования. Они определяют, какого рода данные можно хранить и манипулировать ими в рамках программы. Давайте рассмотрим некоторые основные типы данных, которые предлагает Vyper:

  • Булево: Это двоичный тип данных, который может иметь одно из двух возможных значений - true или false. Пример: flag: bool = True
  • Целые числа: Vyper поддерживает целые числа, которые представляют собой целые числа, которые могут быть либо положительными, либо отрицательными, либо нулевыми. Они бывают различных размеров - от 8 до 256 бит, наиболее распространенным является int128. Пример: count: int128 = 10
  • Десятичный: Используется для представления чисел с плавающей запятой, т.е. чисел, имеющих десятичную точку. Пример: цена: десятичная = 123.45
  • Байты и строки: Байты - это последовательности байтовых данных, а строки - последовательности символов Юникода. Пример: name: string[20] = 'Alice'.
  • Списки и массивы: Списки - это коллекция элементов одного типа данных. Массивы, с другой стороны, представляют собой особый тип списка, в котором длина фиксирована. Пример: числа: int128[5] = [1, 2, 3, 4, 5].
    Каждый из этих типов данных имеет свое место в написании смарт-контрактов. Вам необходимо выбрать правильный тип данных для каждой части данных, которые Вы хотите хранить, исходя из того, какие операции Вы хотите выполнять с этими данными.

Напомним, что некоторые значения, доступные в Vyper:

  • bool
  • int128
  • uint256
  • Десятичные числа
  • адрес
  • байт32
  • Байты
  • String
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 до (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
 self.u = 123
 self.dec = 3.14
 self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
 self.b32 = 0xada1b75f8ae9a65dcc16f95678ac2030505c6b465c8206e26ae84b525cdacb
 self.bs = b"\x01"
 self.s = "Hello Vyper"

Функции в Vyper

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

В Vyper Вы можете определить функцию, используя ключевое слово def, как и в Python. Функции также имеют список параметров и возвращаемый тип. Вот простая функция Vyper:

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

Декоратор @externaldecoratorделает эту функцию вызываемой извне контракта (транзакцией или другим контрактом). Без этого декоратора функция была бы доступна для вызова только в рамках контракта, в котором она определена.

Внутренние и внешние функции

@внутренние функции могут быть вызваны только внутри контракта.

@внешние функции могут быть вызваны только извне контракта.

Пример:

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:
 return 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:
 return True
 else:
 return False

Цикл for в Vyper имеет тот же синтаксис, что и в Python. Вы можете выполнить набор операторов, по одному разу для каждого элемента в списке, кортеже, наборе и т.д.

Python
numbers: 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 равно нулю, будет выдано сообщение об ошибке "Cannot divide by zero", и транзакция будет отменена. В противном случае он перейдет к операции деления.

Vyper также предоставляет оператор revert, который может быть использован для остановки выполнения текущего вызова и возврата изменений состояния, а также для выдачи сообщения об ошибке.

Это краткое описание синтаксиса и основных принципов работы Vyper. Ключом к освоению Vyper, как и любого другого языка программирования, является практика. Я рекомендую использовать эти техники для написания простых приложений. В следующей сессии мы рассмотрим, как использовать Vyper для построения и сопровождения смарт-контрактов. Будьте начеку!

Поздравляем Вас с успешным завершением Урока 2! Вы достигли огромного прогресса в освоении синтаксиса Vyper и фундаментальных конструкций. Мы рассмотрели введение в синтаксис Vyper, основные типы данных, а также функции, управляющие структуры и обработку ошибок в Vyper. Напомним, что каждый из этих компонентов является основой любой программы Vyper. Очень важно иметь твердое понимание этих основных компонентов, и лучший способ добиться этого - практиковаться и изучать. Создавайте простые программы, включающие в себя то, чему Вы научились сегодня. Нет альтернативы практическому опыту, когда речь идет о кодировании.

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

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.