6 апреля 2022

На чём пишут блокчейны? Языки программирования

Введение

Языки программирования. №01

Во-первых, вот откуда можно почерпнуть данные по чейнам и/или языкам программирования:

  1. Общий список №01: https://chainlist.org
  2. Общий список №02 (из Китая): https://www.ccidgroup.com/info/1105/33813.htm 
  3. EVM-список: https://bytwork.com/articles/blokcheyny-evm 
  4. Блокчейн-проекты (компании) №01: https://golden.com/query/list-of-blockchain-companies-W9Z 
  5. Список проектов №02: https://coinmarketcap.com 
  6. Языки программирования в блокчейнах (англ.): https://appinventiv.com/blog/best-blockchain-programming-languages/ 
  7. Языки программирвания в блокчейн-проектах №01: https://medium.com/coinmonks/list-of-programming-languages-and-frameworks-used-in-41-crypto-projects-2b7223099c57 
  8. Языки программирвания в блокчейн-проектах №02: https://mining-cryptocurrency.ru/yazyki-programmirovaniya-dlya-blokchejna-i-smart-kontraktov/ 
  9. Отчёт по языкам программирования за 2021 год: https://insights.stackoverflow.com/survey/2021#overview 

Во-вторых, здесь речь идёт именно о блокчейнах, поэтому разного рода DAG-системы (IoTA, Byteball, Heshgraph, IoTeX, Holochain, etc.) в расчёт не приняты. DLT тоже опущены: XRP-ledger, ряд решений на IBM Hyperledger: тем более — все приватные (закрытые), корпоративные, подобные прочие решения, которые к блокчейнам не относятся. В-третьих, очевидные EVM-форки (Huobi ECO, OKeX-chain, Gate.io-chain, Harmony, Fantom, Aurora, etc.), кроме, пожалуй, L2-решений, но и из них не все взяты в расчёт. В-четвёртых, ряд решений объединены по понятным причинам: EOS, WAX (отчасти), Hive, Steem, Golos (отчасти); Arbitrum, Optimism, Loopring и другие, хотя не всегда это правильно в деталях (скажем, Polygon вынесен как яркий представитель Plasma-имплементаций) — в стратегии познания правильно точно. В-четвёртых, в расчёт приняты не самые популярные, но отличающиеся от иных чейны: Lisk, Elrond, Cardano. В-пятых, ограничился списком пока из 20, потому как общий анализ требует куда больше времени и сил:

  1. Avalanche;
  2. Bitcoin;
  3. BNB chain (BSC);
  4. Cardano;
  5. Celo;
  6. Cosmos (Tendermint, Terra, etc.), 
  7. Elrond;
  8. EOS (Bitshares, Steem/Golos, Hive, Wax);
  9.  Ethereum (EVM-совместимые); 
  10. Lisk;
  11. Near;
  12. Nem;
  13. Neo;
  14. Polkadot;
  15. Polygon;
  16. Solana;
  17. Telos;
  18. Tezos;
  19. Waves;
  20. Zilliqa.

Приступим же? 

Avalanche

Общие данные можно найти:

  1. В WP: https://assets.website-files.com/5d80307810123f5ffbb34d6e/6008d7bbf8b10d1eb01e7e16_Avalanche%20Platform%20Whitepaper.pdf 
  2. Wiki: https://en.wikipedia.org/wiki/Avalanche_(blockchain_platform) 
  3. Github: https://github.com/ava-labs/ 
  4. API: https://docs.avax.network/build/avalanchego-apis/ 

Базовый язык: Go (https://github.com/ava-labs/avalanchego). Помимо него есть:

И, конечно же, в Avalanche есть есть Solidity, поскольку есть EVM-модуль: https://github.com/ava-labs/avalanche-smart-contract-quickstart

Отмечу недавнюю фичу (2020): “​​являясь, по сути, AWS-для-финансов, Avalanche призвана обеспечить передовую инфраструктуру для создания децентрализованных финансовых приложений (DeFi), позволяя любому человеку запускать собственные блокчейны с пользовательскими валидаторами и выпускать активы в соответствии с любыми требуемыми функциями и правилами, включая пользовательские виртуальные машины и программируемое соблюдение законодательства”, — что фактически превращает ряд функций блокчейна в облачный сервис. 

Bitcoin

Здесь всё немного сложнее, но в целом можно выделить:

  1. C++;
  2. C;
  3. Python. 

Безусловно, здесь велик вклад именно Си++, но, если хочется погрузиться глубже, то рекомендую изучить Taproot — там сокрыто много интересного и полезного:

  1. https://coinshares.com/research/taproot-explained-bitcoin-protocol-upgrade 
  2. https://bitcoinist.com/does-taproot-actually-enable-smart-contracts-on-bitcoin-the-debate-rages-on/ 

BNB chain (BSC)

На самом деле — самый что ни на есть стандартный EVM-блокчейн, контролируемый через псевдо-PoS консенсус с минимальным количеством валидаторов, но из-за популярности — отмечу и его. Языки следующие:

  1. Go;
  2. Typescript;
  3. Solidity.

Более того — можно даже разделить систему по этим языкам:

  1. Клиент BSC на основе форка go-ethereum, схема подписи ECDSA: Go;
  2. Javascript SDK для взаимодействия с чейном: Typescript;
  3. Genesis Contracts: Solidity. 

Cardano

Собственно, с них когда-то всё и началось. Судите сами:

  1. Haskell;
  2. Javascript;
  3. Scala.

Неплохой набор…, если вы — высококлассный специалист. А если нет? Поэтому с одной стороны Cardano в 2021 году продвинулся по разработке больше всех (не факт, что дальше), но уже сегодня испытывает нехватку в трудовых резервах. 

Celo

Здесь всё просто:

  1. Go;
  2. TypeScript. 

Убедиться в этом тоже довольно легко: https://github.com/celo-org/celo-blockchain.

Cosmos

И хотя тут большая часть создаётся на Go: https://github.com/cosmos/cosmos-sdk, всё же есть и Rust-модуль: https://github.com/cosmos/cosmos-rust. Для Hub-ов же используется и Python. 

Elrond

В этой системе помимо стандартных Go (https://github.com/ElrondNetwork/elrond-go) и Rust (https://github.com/ElrondNetwork/elrond-wasm-rs) есть много всего интересного, включая и WASM (https://ru.wikipedia.org/wiki/WebAssembly) именно. 

EOS

Поскольку семейство Bitshares (Graphene) появилось давно — даже раньше Ethereum, хоть и смарт-контракты там в “нормальном” виде появились чуть позже, то ожидаемо применение:

  1. Си++;
  2. TypeScript.

Ethereum

Пожалуй, это самая развитое семейство (EVM) блокчейнов, кто бы и что бы ни говорил, поэтому и языков здесь несколько:

  1. Go (https://github.com/ethereum/go-ethereum); 
  2. C++;
  3. Solidity (https://github.com/ethereum/solidity).

Безусловно также, что именно Solidity — простота этого языка — помогли вырваться Эфиру на почётное второе место в ТОП-е криптовалют и на много лет — на первое место именно с точки зрения развитости экосистемы самого чейна. От ETH2 многого не жду, тем паче — что даже название сменили, пока меняли, но всё же очевидно, что В. Бутерин лучше других подошёл к проблеме шардинга, обновления консенсуса, а значит — и ко всем иным вопросам, связанным с этими двумя. 

Lisk

Не думаю, что этот блокчейн популярен, но то, что он полностью создан на JavaScript / TypeScript, заслуживает внимание само по себе как факт: https://github.com/LiskHQ

Near

В связи с парадигмой “лучше проще, да лучше” также имеет несколько языков программирования для разных модулей — разные (https://github.com/near):

  1. Rust;
  2. JavaScript;
  3. TypeScript;
  4. Python.

При этом, благодаря новациям 2020 года, можно использовать и возможности EVM+Solidity: https://near.org/blog/running-ethereum-applications-on-near/

Nem (Symbol)

Этот блокчейн ввёл много инноваций наряду и параллельно с другими: и пространство имён, и PoI-консенсус, и много другого https://nemproject.github.io/nem-docs/pages/Overview/docs.en.html. Отмечу ещё и вот что: “основная блокчейн-сеть NEM была написана на Java. Язык очень популярен в индустрии блокчейна; помимо НИХ он используется в контрактах IOTA, NEO и Hyperledger, IBM Blockchain, Tron, NEBLIO и Ethereum”, — но, как видим, сегодня это в большинстве случаев не так. 

JS, которая, напомню, к Java не имеет никакого отношения, также в чейне используется по назначению: https://github.com/QuantumMechanics/NEM-sdk

Neo

Этот блокчейн стоило указать хотя бы потому, что изначально он был написан на С# (си шарп). При этом “механизм написания смарт-контрактов NeoContract поддерживает такие языки программирования, как C#, VB.Net, F#, Java, Kotlin и Python”. 

Polkadot

Это ещё один ярый приверженец Rust: https://github.com/paritytech/wasmi. По данным Гитхаба также используются:

  • JavaScript;
  • TypeScript;
  • C++;
  • Shell. 

Polygon

Оставил его, так как он есть наследник Plasma. В остальном — всё довольно прозаично и нужно лишь открыть гит:

  1. Go;
  2. JavaScript;
  3. TypeScript;
  4. Rust; 
  5. Solidity.

Пожалуй, добавлю лишь лучшую статью по L2, написанную на русском языке: cyberacademy-dev.medium.com/what-is-blockchain-layer-2-solutions-304408000675, где рассказано и про Polygon (Matic) в том числе. 

Solana

Один из самых дорогих блокчейн проектов: Биткоин обошёлся в условный 0, Ethereum — в 18.5М, а вот Solana уже в сотни миллионов долларов. При этом стэк — вполне стандартный:

  1. Rust;
  2. JavaScript;
  3. TypeScript.

Telos

Когда-то, по данным https://blocktivity.info, сей блокчейн входил в ТОП перспективных. Стек основной у него следующий:

  1. Си++;
  2. JavaScript;
  3. TypeScript. 

Фактически это форк EOS, созданный для совместимости с EVM-смарт-контрактами. 

Tezos

Наряду с Ethereum, EOS, Cosmos, Polkadot, Waves этот блокчейн был создан благодаря эпохе ICO и прошёл много страданий, прежде чем закрепиться на крипто-Олимпе. Пожалуй, по всем параметрам — у него самый необычный стек:

  1. Michelson
  2. OCaml;
  3. Python;
  4. Coq (Gallina);
  5. TeX.

Выделю отдельно следующее: “Michelson — низкоуровневый, специфический, стековый язык программирования, который используется для написания смарт-контрактов в блокчейне Tezos. Michelson был разработан для облегчения процедуры формальной верификации, позволяя пользователям подтверждать свойства своих контрактов”. 

Waves

Здесь, пожалуй, стоит выделить язык смарт-контрактов RIDE. Помимо этого используются:

  1. Java;
  2. Scala;
  3. JavaScript;
  4. TypeScript;
  5. C;
  6. Go.

Подробней, пожалуй, можно почитать про RIDE: https://docs.waves.tech/ru/ride/ — тем более что где-где, а в Waves документации на русском языке хатает. 

Zilliqa

Ещё один представитель экзотики:

  1. Си++;
  2. OCaml;
  3. Go;
  4. JavaScript;
  5. TypeScript. 

На этом, пожалуй, и завершу. 

Сводная аналитика 

Итак, вот предварительные выводы:

  1. В начале были популярны блокчейны, написанные на Си++, в силу разных факторов, но прежде всего — безопасность и возможность написания обобщённого кода с помощью шаблонов (Bitcoin, Litecoin, Dogecoin, etc.: по наследству — и EOS, если понимать историю битшар и графен-семейства);
  2. Всё изменилось с приходом Ethereum & Solidity: EVM и вовсе стала переворотом в индустрии и выросли на поляне чейнов многие и на L1 и на L2 уровнях: BSC, Polygon, Arbitrum, Optimism, Fantom, Aura, Harmony, etc.:
  3. Сегодня же основная борьба идёт между Go — более “быстрым” в начале разработке, и Rust — более продвинутым в стилистике ошибок и других векторах;
  4. И всё же первое место с уверенным отрывом достаётся именно Go (см. таблицу ниже);
  5. При этом наработки Python, JavaScript для Web части и API — несомненны. 

Вот какая предварительная и не во всём точная таблица в итоге получается: 

Языки программирования и блокчейны. Menaskop

Далее хотелось бы сопоставить это с рынком труда программистов, но не сегодня: не в этот раз — точно. Но точно будет и об этом публикация. 

Что же дальше? 

Дальше нужно изучить блокчейны, исходя из разных критериев:

  1. Консенсусов (PoI, PoS, PoW, etc.);
  2. Экологичности; 
  3. Анонимности (LTC, Grin, Zcash, Monero, etc.);
  4. Уровней децентрализации;
  5. Других критериев…

И? И в итоге найти лучшие практики, чтобы понять перспективы развития: в конечном счёте от скорости и качества разработки зависит если не всё, то многое. Если вам это тоже интересна классификация — следите за этим Хабом, подписывайтесь на канал и

До!