Vyper — это язык на основе Python, который компилируется в байт-код EVM, который может выполняться в сети Ethereum. Он был создан Виталиком Бутериным, основателем Ethereum, и должен превосходить Solidity с точки зрения безопасности.

Синтаксис Vyper очень похож на Solidity, но имеет несколько ключевых отличий. Например, Vyper не допускает бесконечных циклов или массивов переменного размера, что делает его более безопасным. Кроме того, Vyper требует, чтобы все вызовы внешних функций были явными, что помогает снизить риск атак с повторным входом.

Вот пример базового смарт-контракта Vyper:

@public
def multiply(a: uint256, b: uint256) -> uint256:
    return a * b

В этом контракте есть общедоступная функция multiply, которая принимает в качестве аргументов два 256-битных целых числа без знака и возвращает их произведение. Декоратор @public указывает, что эта функция общедоступна, что означает, что любой может вызвать ее.

Давайте разберем код, чтобы объяснить его различные компоненты:

  • @public: это декоратор, который указывает, что следующая функция общедоступна.
  • def multiply(a: uint256, b: uint256) -> uint256: это сигнатура функции, которая указывает ее имя, типы аргументов и тип возвращаемого значения.
  • return a * b: Здесь мы просто возвращаем произведение двух аргументов.

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

Сравнение Vyper с Solidity

Vyper и Solidity являются популярными языками смарт-контрактов, но между ними есть некоторые различия. Вот некоторые из ключевых отличий, о которых следует помнить:

Синтаксис

Vyper использует синтаксис, подобный Python, что делает его относительно простым для разработчиков, уже знакомых с Python. Solidity, с другой стороны, использует C-подобный синтаксис, к которому новички могут привыкнуть.

# Vyper
@public
def multiply(a: uint256, b: uint256) -> uint256:
    return a * b

// Solidity
function multiply(uint256 a, uint256 b) public view returns (uint256) {
    return a * b;
}

Безопасность

Vyper был специально разработан, чтобы быть более безопасным, чем Solidity. Например, Vyper не допускает неограниченных циклов или массивов переменного размера, что может затруднить злоумышленникам использование уязвимостей в смарт-контрактах. Vyper также требует, чтобы внешние вызовы функций были явными, что снижает риск атак с повторным входом.

Экосистема

Solidity существует дольше и имеет большую экосистему, а это означает, что разработчикам Solidity доступно больше инструментов, библиотек и ресурсов. Тем не менее, Vyper набирает популярность и, вероятно, продолжит расти в будущем.

// Solidity
constructor() public {}

// Vyper
@public
def __init__():
    pass

Газовая эффективность

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

# Vyper
@public
def count() -> uint256:
    pass

# Solidity
uint256 count;

function getCount() public view returns (uint256) {
    return count;
}

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

Реальные примеры

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

Система голосования

Этот смарт-контракт позволяет людям голосовать за предложения, используя свои кошельки Ethereum:

owned: address

proposal: {
    name: bytes32,
    vote_count: uint256
}

proposal_list: proposal[10]

@public
def add_proposal(name_: bytes32):
    for i in range(0, 10):
        if proposal_list[i].vote_count == 0:
            proposal_list[i].name = name_
            proposal_list[i].vote_count = 1
            return

@public
def vote(index: uint256):
    if proposal_list[index].vote_count != 0:
        proposal_list[index].vote_count += 1

Кошелек с мультиподписью

Этот смарт-контракт позволяет нескольким людям управлять общим кошельком:

owners: address[3]

@public
def withdraw(amount: uint256):
    if msg.sender == owners[0] or msg.sender == owners[1] or msg.sender == owners[2]:
        if msg.sender.balance >= amount:
            msg.sender.transfer(amount)

Полезные инструменты

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

  • Vyper IDE: веб-среда разработки для Vyper, обеспечивающая подсветку синтаксиса, проверку смарт-контрактов и доступ к готовым шаблонам.
  • Документация по Vyper. Официальная документация по Vyper содержит исчерпывающий обзор языка, включая его синтаксис и семантику.
  • Примеры и учебные пособия по Vyper. В Интернете доступно множество примеров и учебных пособий по Vyper, которые помогут вам приступить к разработке Vyper.
  • Remix: веб-среда разработки для Solidity и Vyper, которая позволяет писать, тестировать и развертывать смарт-контракты.

Заключение

В заключение, Vyper — перспективный язык, разработанный с учетом разработки смарт-контрактов. Он предлагает множество преимуществ в плане безопасности по сравнению с Solidity и, как правило, более экономичен. Хотя у него может быть меньшая экосистема, чем у Solidity, он набирает популярность и, вероятно, продолжит расти в будущем. Имея базовое понимание синтаксиса и семантики Vyper, вы можете начать создавать свои собственные приложения для смарт-контрактов Vyper уже сегодня.

@public
def say_hello() -> String:
    """
    Returns a string containing 'hello'
    """
    return 'hello'

Рекомендации

  1. Vyper ReadtheDocs
  2. Вайпер Гитхаб
  3. Солидити Гитхаб
  4. Что такое Vyper и как им пользоваться? Руководство для начинающих.
  5. "Ремикс"
  6. Выпер IDE
  7. Учебники и примеры по Вайперу
  8. Белая книга Эфириума