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 подвергался критике по нескольким причинам:
- Уязвимости: В 2016–2017 годах были обнаружены критические уязвимости в компиляторе Serpent, связанные с переполнением целых чисел и неправильной обработкой внешних вызовов. Это привело к потере средств в некоторых контрактах.
- Отсутствие обновлений: После 2017 года проект практически не развивался. Новые возможности EVM (например, поддержка ABIEncoderV2, транзакции с динамическими данными) не были реализованы.
- Сложность отладки: Из-за ограниченных инструментов и документации разработка на Serpent была трудоёмкой.
- Недостаток сообщества: В отличие от 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 →

