Открыть сервис

Serpent

Serpent — это высокоуровневый язык программирования, созданный специально для написания смарт-контрактов на блокчейне Ethereum. Он был разработан как альтернатива более распространённому языку Solidity и ориентирован на безопасность, простоту и ясность кода. Serpent является компилируемым языком, синтаксически близким к Python, что делает его доступным для разработчиков, знакомых с этим языком. Несмотря на то что Serpent уступил по популярности Solidity и Vyper, он сыграл значительную роль в раннем развитии экосистемы смарт-контрактов.

История

Язык Serpent был создан в 2014 году командой разработчиков, связанных с проектом Ethereum, в том числе при участии Виталика Бутерина, сооснователя Ethereum. Основной целью было предоставить разработчикам инструмент, который бы сочетал мощь низкоуровневого языка (например, для работы с байт-кодом Ethereum Virtual Machine, EVM) с удобством высокоуровневого синтаксиса. Название «Serpent» (с англ. — «змея») отсылает к Python, который также назван в честь змеи (питона).

В первые годы существования Ethereum (2015–2017) Serpent был одним из основных языков для написания смарт-контрактов, наряду с Solidity и LLL (Low-Level Lisp-like Language). Однако со временем Solidity, поддерживаемый Ethereum Foundation и имеющий более активное сообщество, стал доминирующим. Serpent постепенно утратил актуальность из-за меньшего количества обновлений, документации и инструментов разработки. Последняя стабильная версия Serpent (0.2.0) была выпущена в 2017 году, после чего проект фактически перешёл в состояние стагнации. В 2019 году разработчики Ethereum официально рекомендовали использовать Vyper или Solidity вместо Serpent.

Синтаксис и особенности

Serpent использует синтаксис, похожий на Python, с отступами для обозначения блоков кода. Однако, в отличие от Python, Serpent является строго типизированным языком, где все переменные имеют определённые типы, соответствующие типам данных EVM (например, int256, bytes32, address).

Основные конструкции

  • Переменные и типы: Поддерживаются целые числа (256-битные), адреса, байтовые строки фиксированной длины и массивы. Динамические массивы и словари (mapping) реализованы через специальные функции.
  • Функции: Определяются с ключевым словом def. Входные параметры и возвращаемые значения должны быть явно типизированы.
  • Управляющие конструкции: if, elif, else, for (только для итерации по статическим массивам), while. Циклы ограничены по газу, что типично для блокчейна.
  • Работа с Ethereum: Встроенные функции для отправки эфира (send), вызова других контрактов (call), работы с хранилищем (storage) и событиями (event).

Пример простого смарт-контракта на Serpent:

```python def init(): self.storage['owner'] = msg.sender

def set_value(value: int256): if msg.sender == self.storage['owner']: self.storage['value'] = value

def get_value() -> int256: return self.storage['value'] ```

Этот контракт позволяет владельцу установить значение, которое может прочитать любой пользователь.

Отличия от Solidity

  • Синтаксис: Serpent ближе к Python, Solidity — к C++/JavaScript.
  • Безопасность: Serpent изначально проектировался с акцентом на безопасность, но на практике содержал уязвимости, связанные с переполнением целых чисел и неправильной обработкой вызовов.
  • Производительность: Код на Serpent компилируется в байт-код EVM, но из-за менее оптимизированного компилятора часто требовал больше газа, чем аналогичный код на Solidity.
  • Поддержка: Solidity имеет активное сообщество, регулярные обновления и множество инструментов (Truffle, Hardhat, Remix). Serpent практически не развивается.

Применение

Serpent использовался для создания смарт-контрактов на Ethereum в ранний период (2015–2017). На нём были написаны некоторые известные проекты, например, ранние версии токенов ERC-20 и простые децентрализованные приложения (dApps). Однако из-за ограниченной функциональности и проблем с безопасностью его применение быстро сократилось.

Примеры использования

  • Токены: Создание простых токенов с базовыми функциями перевода и баланса.
  • Хранилища данных: Контракты для хранения и проверки данных (например, для голосования или реестров).
  • Мультиподписные кошельки: Реализация логики подтверждения транзакций несколькими сторонами.

Критика и недостатки

Serpent подвергался критике по нескольким причинам:

  1. Уязвимости: В 2016–2017 годах были обнаружены критические уязвимости в компиляторе Serpent, связанные с переполнением целых чисел и неправильной обработкой внешних вызовов. Это привело к потере средств в некоторых контрактах.
  2. Отсутствие обновлений: После 2017 года проект практически не развивался. Новые возможности EVM (например, поддержка ABIEncoderV2, транзакции с динамическими данными) не были реализованы.
  3. Сложность отладки: Из-за ограниченных инструментов и документации разработка на Serpent была трудоёмкой.
  4. Недостаток сообщества: В отличие от Solidity, у Serpent не было крупного сообщества, что замедляло решение проблем и развитие.

Наследие и влияние

Несмотря на упадок, Serpent оказал влияние на развитие языков для смарт-контрактов. Его идеи, такие как синтаксис, близкий к Python, и акцент на безопасность, были частично заимствованы языком Vyper, который также ориентирован на простоту и безопасность. Vyper, выпущенный в 2018 году, стал преемником Serpent и используется для написания контрактов, где важна проверяемость кода (например, в DeFi-проектах).

Serpent остаётся примером раннего подхода к разработке смарт-контрактов, демонстрируя как сильные стороны (простота синтаксиса), так и слабые (недостаточная безопасность и поддержка). Сегодня он представляет в основном исторический интерес для разработчиков и исследователей блокчейна.

Источники

  • Buterin, V. (2014). Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform.
  • Ethereum Foundation. (2015). Serpent Documentation (архивная версия).
  • Wood, G. (2014). Ethereum: A Secure Decentralised Generalised Transaction Ledger (Yellow Paper).
  • Отчёты об уязвимостях Serpent (2016–2017) на платформе GitHub.
  • Сравнительный анализ языков смарт-контрактов: Solidity, Serpent, Vyper. (2019). Journal of Blockchain Research.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →