stringtranslate.com

Прочность

Solidity — это язык программирования для реализации смарт-контрактов [6] [7] на различных блокчейн- платформах, в частности, Ethereum . [8] Solidity лицензирован в соответствии с GNU General Public License v3.0 . [9] Solidity был разработан Гэвином Вудом [10] [ необходим неосновной источник ] и разработан Кристианом Рейтвиснером, Алексом Берегсаси и несколькими бывшими основными участниками Ethereum . [11] Программы на Solidity запускаются на виртуальной машине Ethereum или на совместимых виртуальных машинах. [12]

История

Solidity был предложен в августе 2014 года Гэвином Вудом [13] [ необходим неосновной источник ] Позднее язык был разработан командой Solidity проекта Ethereum под руководством Кристиана Райтвиснера.

Solidity — основной язык, используемый для разработки смарт-контрактов для Ethereum , а также других частных блокчейнов , таких как ориентированный на предприятия блокчейн Hyperledger Fabric. SWIFT развернул доказательство концепции с использованием Solidity, работающего на Hyperledger Fabric. [14] [15]

Описание

Solidity — это статически типизированный язык программирования , предназначенный для разработки смарт-контрактов , работающих на виртуальной машине Ethereum (EVM) или совместимых виртуальных машинах. [16]

Solidity использует синтаксис, подобный ECMAScript , что делает его знакомым для существующих веб-разработчиков; [17] однако, в отличие от ECMAScript, он имеет статическую типизацию и вариативные типы возвращаемых данных. Solidity отличается от других языков, ориентированных на EVM, таких как Serpent и Mutan, в некоторых важных отношениях. Он поддерживает сложные переменные-члены для смарт-контрактов , включая произвольные иерархические отображения и структуры . Смарт-контракты Solidity поддерживают наследование , включая множественное наследование с линеаризацией C3 . Solidity представляет двоичный интерфейс приложения (ABI), который упрощает несколько типобезопасных функций в рамках одного смарт-контракта (это также позже было поддержано Serpent ). Предложение Solidity также включает «Спецификацию естественного языка», систему документирования для указания ориентированных на пользователя описаний разветвлений вызовов методов . [18] [19] [ необходим неосновной источник ]

Пример программы Solidity: [20] [21]

// SPDX-License-Identifier: GPL-3.0 pragma solidity ^ 0.8.4 ; contract Coin { // Ключевое слово "public" делает переменные // доступными из других контрактов address public minter ; mapping ( address => uint ) public balances ;            // События позволяют клиентам реагировать на определенные // изменения контракта, которые вы объявляете event Sent ( address from , address to , uint amount );         // Код конструктора запускается только при создании // контракта constructor () { minter = msg.sender ; }        // Отправляет сумму вновь созданных монет на адрес // Может быть вызвана только функцией создателя контракта mint ( address receiveer , uint amount ) public { require ( msg.sender == minter ); balances [ receiveer ] += amount ; }                // Ошибки позволяют предоставить информацию о // причине сбоя операции. Они возвращаются // вызывающей функции. error InsufficientBalance ( uint asked , uint available );        // Отправляет сумму существующих монет // от любого вызывающего абонента на адрес function send ( address receiveer , uint amount ) public { if ( summation > balances [ msg.sender ]) revert InsufficientBalance ({ requested : amount , available : balances [ msg.sender ] });                    балансы [ сообщ.отправитель ] -= сумма ; балансы [ получатель ] += сумма ; отправить Отправлено ( сообщ.отправитель , получатель , сумма ); } }          

IDE для разработки

Расширения редактора

Блокчейн-платформы

Solidity доступен на:

Критика

Многие свойства безопасности смарт-контрактов изначально трудно поддаются прямому рассуждению, а полнота Тьюринга в Solidity означает, что проверка произвольных свойств не может быть разрешимо автоматизирована. Текущие автоматизированные решения для анализа безопасности смарт-контрактов могут пропускать критические нарушения, давать ложные срабатывания и не обеспечивать достаточного покрытия кода в реалистичных контрактах. [29] Solidity обвиняют в подверженной ошибкам реализации смарт-контрактов Ethereum из-за его контринтуитивной природы, отсутствия конструкций для работы с аспектами, специфичными для домена блокчейна, и отсутствия централизованной документации известных уязвимостей. [30]

В 2016 году исследователь из Корнеллского университета заявил, что Solidity частично виноват во взломе The DAO , который произошел в том году. Он заявил: «на самом деле это не было недостатком или эксплойтом в самом контракте DAO: технически виртуальная машина Ethereum (EVM) работала так, как и предполагалось, но Solidity вносила недостатки безопасности в контракты, которые не только не заметило сообщество, но и не заметили сами разработчики языка». [31]

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

Сравнение с другими языками смарт-контрактов

Solidity против Rust

Solidity является основным языком программирования для разработки смарт-контрактов на виртуальной машине Ethereum (EVM). [32] Однако Rust стал сильной альтернативой в экосистеме блокчейнов, особенно для блокчейнов, поддерживающих WebAssembly (Wasm) , таких как Polkadot , Klever и Solana .

Безопасность памяти

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

Параллелизм

Rust поддерживает параллельное программирование, что позволяет разработчикам писать высокопроизводительный код, который может обрабатывать несколько задач одновременно. Это особенно полезно для высокопроизводительных блокчейнов, таких как Solana, [33], которым необходимо обрабатывать тысячи транзакций в секунду. Solidity, с другой стороны, изначально не поддерживает параллелизм, что может ограничить его производительность в определенных приложениях. [34]

Интеграция экосистемы

В то время как Solidity глубоко интегрирован с экосистемой Ethereum и ее многочисленными инструментами разработки, [35] Rust универсален и может использоваться на различных блокчейн-платформах, использующих Wasm. Растущая популярность Rust отражается в его принятии новыми блокчейн-проектами, которые отдают приоритет производительности и безопасности.

Ссылки

  1. ^ "Участники ethereum/solidity". GitHub . Получено 30 марта 2023 г.
  2. ^ "Участники ethereum/solidity". GitHub . Получено 30 марта 2023 г.
  3. ^ "Выпуск 0.8.28". 9 октября 2024 г. Получено 27 октября 2024 г.
  4. ^ "Build software better, together" (Создавайте программное обеспечение лучше, вместе). GitHub . Получено 30 марта 2023 г.
  5. ^ Контрактно-ориентированный язык программирования Solidity, ethereum, 30 марта 2023 г. , получено 30 марта 2023 г.
  6. ^ Афшар, Вала (17 июля 2017 г.). «Ethereum — вторая по ценности цифровая валюта после Bitcoin». HuffPost . Получено 10 апреля 2019 г.
  7. ^ "SOFE Berlin: Swift представляет доказательство концепции блокчейна". Finextra (новости). 24 ноября 2016 г. Получено 24 ноября 2016 г.
  8. ^ Финли, Клинт. «Кто-то только что украл 50 миллионов долларов из самого крупного краудфандингового проекта. (Людям нельзя доверять)». Wired .
  9. ^ Контрактно-ориентированный язык программирования Solidity, ethereum, 30 марта 2023 г. , получено 30 марта 2023 г.
  10. ^ Вуд, Гэвин (13 января 2015 г.). «Создал Solidity». Ethereum Wiki (Архив) . Получено 23 марта 2024 г.
  11. ^ "Список участников". GitHub .
  12. ^ Колледж, AMC (1 ноября 2022 г.). Технология блокчейна и криптовалюты с уровнем надежности 1. Advanced Micro Systems Sdn Bhd.
  13. ^ "Gavin Wood". gavwood.com . Архивировано из оригинала 30 марта 2023 г. . Получено 30 марта 2023 г. .
  14. ^ Николич, Ивица; Коллури, Аашиш; Сергей, Илья; Саксена, Пратик; Хобор, Аквинас (14 марта 2018 г.). «Finding The Greedy, Prodigal, and Suicidal Contracts at Scale». arXiv : 1802.06038 [cs.CR]. Различные исходные языки компилируются в семантику EVM, преобладающим из них является Solidity
  15. ^ "Westpac присоединяется к доказательству концепции блокчейна SWIFT". ZDNet . Получено 13 июля 2022 г. .
  16. ^ "Hyperledger Fabric Tutorial - Create a blockchain app for Loyalty points". IBM Developer . Получено 10 апреля 2019 г. .
  17. ^ "Language Influences — Solidity 0.8.17 documentation". docs.soliditylang.org . Получено 30 марта 2023 г. .
  18. ^ Капетаниос-27 июня 2008 г., с. 309.
  19. ^ ethereum. "Формат спецификации Ethereum Natural". GitHub .
  20. ^ «Введение в смарт-контракты — документация Solidity 0.8.19». docs.soliditylang.org . Получено 30 марта 2023 г. .
  21. ^ Шнайер, Картикеян; Шнайер, Антуан; Бхаргаван, Седрик; Делигнат-Лаво, Анита; Фурне, Голламуди; Шнайер, Брюс; Растоги, Надим; Сибю-Пиноте, Асим; Растоги1, Томас; Свами, Нихил; Занелла-Бегелин, Сантьяго (27 августа 2016 г.). "Краткая статья: формальная проверка смарт-контрактов" (PDF) . Microsoft Research, Французский институт исследований в области компьютерных наук и автоматизации, Гарвардский университет . Архивировано (PDF) из оригинала 27 августа 2016 г.{{cite journal}}: CS1 maint: числовые имена: список авторов ( ссылка )
  22. ^ "Remix - Ethereum IDE". remix.ethereum.org . Получено 30 марта 2023 г. .
  23. ^ "EthFiddle - Solidity в браузере. Работает на Loom Network". ethfiddle.com . Получено 30 марта 2023 г. .
  24. ^ "solidity - Visual Studio Marketplace". marketplace.visualstudio.com . Получено 30 марта 2023 г. .
  25. ^ "Solidity - IntelliJ IDEs Plugin | Marketplace". JetBrains Marketplace . Получено 30 марта 2023 г.
  26. ^ "Binance Smart Chain". GitHub . 26 октября 2021 г.
  27. ^ Винья, Майкл Дж. Кейси и Пол (12 ноября 2014 г.). «BitBeat: Bitcoin 2.0 Firm Counterparty Adopts Ethereum's Software». Wall Street Journal . ISSN  0099-9660 . Получено 16 апреля 2021 г.
  28. ^ Свон, Мелани (2015). Блокчейн: план новой экономики (1-е изд.). [Севастополь, Калифорния] ISBN 978-1-4919-2047-3. OCLC  900781291.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  29. ^ Tsankov, Petar; Dan, Andrei; Drachsler-Cohen, Dana; Gervais, Arthur; Bünzli, Florian; Vechev, Martin (15 октября 2018 г.). «Securify: Практический анализ безопасности смарт-контрактов». Труды конференции ACM SIGSAC 2018 года по компьютерной и коммуникационной безопасности . Ассоциация вычислительной техники. стр. 67–82. arXiv : 1806.01143 . doi :10.1145/3243734.3243780. hdl :10044/1/87935. ISBN 978-1-4503-5693-0. S2CID  46936025.
  30. ^ Atzei, Nicola; Bartoletti, M.; Cimoli, Tiziana (2017). «Обзор атак на смарт-контракты Ethereum (SoK)». Принципы безопасности и доверия, 6-я международная конференция, 2017, Труды . Конспект лекций по информатике. стр. 164–186. doi :10.1007/978-3-662-54455-6_8. ISBN 978-3-662-54454-9. S2CID  15494854.
  31. Финли, Клинт (18 июня 2016 г.). «Взлом на 50 миллионов долларов только что показал, что DAO был слишком человечным». Wired (новости) . Получено 18 февраля 2017 г.
  32. ^ Чжэн, Гэвин; Гао, Лунсян; Хуан, Лицюнь; Гуань, Цзянь (31 августа 2020 г.). Разработка смарт-контрактов Ethereum на Solidity. Springer Nature. ISBN 978-981-15-6218-1.
  33. ^ "Разработка с Rust | Solana". solana.com . Получено 16 августа 2024 г. .
  34. ^ «Официальная документация Rust».
  35. ^ "Solidity Lang".