Солидность
Парадигма | Императив |
---|---|
Разработано | Гэвин Вуд |
Разработчик | Кристиан Райтвиснер, [1] Алекс Берегзаси, [2] и несколько бывших основных участников Ethereum . |
Впервые появился | август 2014 г. |
Стабильная версия | 0.8.26 [3] / 21 мая 2024 г |
Язык реализации | С++ [4] |
Лицензия | Стандартная общественная лицензия GNU v3.0 [5] |
Расширения имен файлов | .солнце |
Веб-сайт | Soliditylang |
Под влиянием | |
JavaScript , С++ , Питон |
Solidity — язык программирования для реализации смарт-контрактов. [6] [7] на различных блокчейн- платформах, в первую очередь на Ethereum . [8] Solidity распространяется по лицензии GNU General Public License v3.0 . [9] Solidity был разработан Гэвином Вудом. [10] [ нужен неосновной источник ] и разработан Кристианом Рейтвисснером, Алексом Берегсаси и несколькими бывшими основными участниками Ethereum . [11] Программы в Solidity запускаются на виртуальной машине Ethereum или на совместимых виртуальных машинах.
История
[ редактировать ]Solidity был предложен в августе 2014 года Гэвином Вудом. [12] [ нужен неосновной источник ] Позже язык был разработан командой Solidity проекта Ethereum под руководством Кристиана Райтвисснера.
Solidity — это основной язык, используемый для разработки смарт-контрактов для Ethereum , а также других частных блокчейнов , таких как ориентированный на предприятия блокчейн Hyperledger Fabric. SWIFT развернула проверку концепции, используя Solidity, работающую на Hyperledger Fabric. [13] [14]
Описание
[ редактировать ]Solidity — это статически типизированный язык программирования , предназначенный для разработки смарт-контрактов , которые работают на виртуальной машине Ethereum (EVM) или совместимых виртуальных машинах. [15]
Solidity использует синтаксис, подобный ECMAScript , что делает его знакомым существующим веб-разработчикам; [16] однако, в отличие от ECMAScript, он имеет статическую типизацию и переменные типы возврата. Solidity отличается от других языков, ориентированных на EVM, таких как Serpent и Mutan , в некоторых важных отношениях. Он поддерживает сложные переменные-члены для смарт-контрактов , включая произвольные иерархические отображения и структуры . Solidity Смарт-контракты поддерживают наследование , включая множественное наследование с линеаризацией C3 . Solidity представляет двоичный интерфейс приложений (ABI), который обеспечивает выполнение нескольких типобезопасных функций в рамках одного смарт-контракта (позже это также было поддержано Serpent ). Предложение Solidity также включает «Спецификацию естественного языка», систему документации для определения ориентированных на пользователя описаний разветвлений вызовов методов . [17] [18] [ нужен неосновной источник ]
Пример программы Solidity: [19] [20]
// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.4;contract Coin { // The keyword "public" makes variables // accessible from other contracts address public minter; mapping(address => uint) public balances; // Events allow clients to react to specific // contract changes you declare event Sent(address from, address to, uint amount); // Constructor code is only run when the contract // is created constructor() { minter = msg.sender; } // Sends an amount of newly created coins to an address // Can only be called by the contract creator function mint(address receiver, uint amount) public { require(msg.sender == minter); balances[receiver] += amount; } // Errors allow you to provide information about // why an operation failed. They are returned // to the caller of the function. error InsufficientBalance(uint requested, uint available); // Sends an amount of existing coins // from any caller to an address function send(address receiver, uint amount) public { if (amount > balances[msg.sender]) revert InsufficientBalance({ requested: amount, available: balances[msg.sender] }); balances[msg.sender] -= amount; balances[receiver] += amount; emit Sent(msg.sender, receiver, amount); }}
IDE для разработки
[ редактировать ]- Код Microsoft Visual Studio
- JetBrains IntelliJ
- Онлайн-редактор ремиксов [21]
- Онлайн-редактор EthFiddle [22]
Расширения редактора
[ редактировать ]Блокчейн-платформы
[ редактировать ]Solidity доступен на:
- Лавинная С-цепь
- Смарт-цепочка Binance [25]
- Контрагент (который работает на биткойнах ) [26] [27]
- Эфириум
- Эфириум Классик
- Трон
- Хедера Хэшграф
- Полигон
- помещать
- Решение
- Оптимизм
Критика
[ редактировать ]О многих свойствах безопасности смарт-контрактов по своей сути сложно рассуждать напрямую, а полнота по Тьюрингу Solidity означает, что проверку произвольных свойств невозможно автоматизировать . Современные автоматизированные решения для анализа безопасности смарт-контрактов могут пропускать критические нарушения, давать ложные срабатывания и не обеспечивать достаточного покрытия кода в реалистичных контрактах. [28] Solidity обвиняют в подверженной ошибкам реализации смарт-контрактов Ethereum из-за их нелогичного характера, отсутствия конструкций для решения проблем, специфичных для домена блокчейна, а также отсутствия централизованной документации об известных уязвимостях. [29]
В 2016 году исследователь Корнеллского университета заявил, что Solidity частично виновата во взломе The DAO , произошедшем в том году. Он заявил: «На самом деле это не был недостаток или эксплойт в самом контракте DAO: технически виртуальная машина Ethereum (EVM) работала так, как предполагалось, но Solidity вносила в контракты недостатки безопасности, которые не только были пропущены сообществом, но и пропущены». самими разработчиками языка». [30]
Сообщество разработчиков часто ссылается на то, что Solidity требует большого количества сторонних интерфейсов и API, а также на его неспособность создавать критически важные интеллектуальные контракты с интенсивным использованием информации.
Ссылки
[ редактировать ]- ^ «Вкладчики в Ethereum/solidity» . Гитхаб . Проверено 30 марта 2023 г.
- ^ «Вкладчики в Ethereum/solidity» . Гитхаб . Проверено 30 марта 2023 г.
- ^ «Выпуск 0.8.26» . 21 мая 2024 г. Проверено 25 мая 2024 г.
- ^ «Создавайте программное обеспечение лучше вместе» . Гитхаб . Проверено 30 марта 2023 г.
- ^ Язык контрактно-ориентированного программирования Solidity , Ethereum, 30 марта 2023 г. , получено 30 марта 2023 г.
- ^ Афшар, Вала (17 июля 2017 г.). «Эфириум — вторая по ценности цифровая валюта после биткойна» . ХаффПост . Проверено 10 апреля 2019 г.
- ^ «SOFE Berlin: Swift представляет доказательство концепции блокчейна» . Finextra (Новости). 24 ноября 2016 года . Проверено 24 ноября 2016 г.
- ^ Финли, Клинт. «Кто-то только что украл 50 миллионов долларов из крупнейшего краудфандингового проекта за всю историю. (Людям нельзя доверять)» . Проводной .
- ^ Язык контрактно-ориентированного программирования Solidity , Ethereum, 30 марта 2023 г. , получено 30 марта 2023 г.
- ^ Вуд, Гэвин (13 января 2015 г.). «Созданная твердость» . Эфириум Wiki (в архиве) . Проверено 23 марта 2024 г.
- ^ «Список участников» . Гитхаб .
- ^ «Гэвин Вуд» . gavwood.com . Архивировано из оригинала 30 марта 2023 года . Проверено 30 марта 2023 г.
- ^ Николич, Ивица; Коллури, Аашиш; Сергей, Илья; Саксена, Пратик; Хобор, Фома Аквинский (14 марта 2018 г.). «Обнаружение жадных, блудных и самоубийственных контрактов в больших масштабах». arXiv : 1802.06038 [ cs.CR ].
Различные исходные языки компилируются в семантику EVM, преобладающим из которых является Solidity.
- ^ «Westpac присоединяется к проверке концепции блокчейна SWIFT» . ЗДНет . Проверено 13 июля 2022 г.
- ^ «Учебное пособие по Hyperledger Fabric. Создайте блокчейн-приложение для получения баллов лояльности» . Разработчик IBM . Проверено 10 апреля 2019 г.
- ^ «Влияние языка — документация Solidity 0.8.17» . docs.soliditylang.org . Проверено 30 марта 2023 г.
- ^ Капетаниос-27 июня 2008 г. , с. 309.
- ^ эфириум. «Формат естественной спецификации Ethereum» . Гитхаб .
- ^ «Введение в смарт-контракты — документация Solidity 0.8.19» . docs.soliditylang.org . Проверено 30 марта 2023 г.
- ^ Шнайер, Картикеян; Шнайер, Антуан; Бхаргаван, Седрик; Делинья-Лаво, Анита; Фурне, Голламуди; Шнайер, Брюс; Растоги, Надим; Сибут-Пиноте, Асим; Растоги1, Томас; Свами, Нихил; Занелла-Бегелен, Сантьяго (27 августа 2016 г.). «Краткий доклад: формальная проверка смарт-контрактов» (PDF) . Microsoft Research, Французский институт исследований в области компьютерных наук и автоматизации, Гарвардский университет . Архивировано (PDF) из оригинала 27 августа 2016 г.
{{cite journal}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ «Ремикс — Ethereum IDE» . remix.ethereum.org . Проверено 30 марта 2023 г.
- ^ «EthFiddle — Solidity в браузере. На базе Loom Network» . ethfiddle.com . Проверено 30 марта 2023 г.
- ^ «солидность — Visual Studio Marketplace» . marketplace.visualstudio.com . Проверено 30 марта 2023 г.
- ^ «Solidity — плагин IntelliJ IDE | Торговая площадка» . Торговая площадка JetBrains . Проверено 30 марта 2023 г.
- ^ «Бинанс Смарт Чейн» . Гитхаб . 26 октября 2021 г.
- ^ Винья, Майкл Дж. Кейси и Пол (12 ноября 2014 г.). «BitBeat: Фирма-контрагент Биткойна 2.0 принимает программное обеспечение Ethereum» . Уолл Стрит Джорнал . ISSN 0099-9660 . Проверено 16 апреля 2021 г.
- ^ Свон, Мелани (2015). Блокчейн: проект новой экономики (1-е изд.). [Севастополь, Калифорния] ISBN 978-1-4919-2047-3 . OCLC 900781291 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Цанков, Петар; Дэн, Андрей; Драхслер-Коэн, Дана; Жерве, Артур; Бюнцли, Флориан; Вечев, Мартин (15 октября 2018 г.). «Securify: практический анализ безопасности смарт-контрактов». Материалы конференции ACM SIGSAC 2018 по компьютерной и коммуникационной безопасности . Ассоциация вычислительной техники. стр. 67–82. arXiv : 1806.01143 . дои : 10.1145/3243734.3243780 . hdl : 10044/1/87935 . ISBN 978-1-4503-5693-0 . S2CID 46936025 .
- ^ Ацей, Никола; Бартолетти, М.; Чимоли, Тициана (2017). «Обзор атак на смарт-контракты Ethereum (SoK)». Принципы безопасности и доверия, 6-я Международная конференция, 2017, Труды . Конспекты лекций по информатике. стр. 164–186. дои : 10.1007/978-3-662-54455-6_8 . ISBN 978-3-662-54454-9 . S2CID 15494854 .
- ^ Финли, Клинт (18 июня 2016 г.). «Взлом на 50 миллионов долларов только что показал, что DAO был слишком человечным» . Проводной (Новости) . Проверено 18 февраля 2017 г.