Портал The New Stack рассказывает о том, что полезно узнать разработчикам, чтобы войти в мир Web3. И как традиционные веб-технологии, такие как JavaScript, вписываются в картину Всемирной паутины третьего поколения.

Несмотря на то, что экосистема разработчиков Web3 составляет лишь малую часть от более крупной экосистемы веб-разработчиков, она быстро растет, поэтому имеет смысл попытаться определить, из чего состоит технологический стек Web3. Мы знаем, что он включает блокчейн для децентрализации и криптовалютные кошельки как форму идентификации. Возможно, вы также слышали о распределенных системах хранения данных с такими грандиозными названиями, как InterPlanetary File System (IPFS).

Лучшее определение стека Web3, вероятно, сформулировал Надер Дабит, инженер по связям с разработчиками компании Edge & Node, занимающейся Web3. В 2020 г., будучи экспертом по бессерверным технологиям в Amazon Web Services, он выпустил в O’Reilly Media книгу под названием «Full Stack Serverless: Modern Application Development with React, AWS, and GraphQL». В апреле 2021 г. он привнес эти навыки в зарождающийся мир Web3. Часть его работы с Edge & Node — это помощь в создании The Graph, протокола Web3 для индексирования и запроса данных блокчейна с помощью GraphQL.

Дабит классифицирует стек Web3 следующим образом:

  • блокчейн;
  • среда разработки блокчейна;
  • файловое хранилище;
  • базы данных P2P;
  • API (индексирование и запросы);
  • идентичность;
  • клиент (фреймворки и библиотеки);
  • другие протоколы.

Он отмечает, этот стек «совершенно отличается во многих отношениях» от традиционной веб-архитектуры — блокчейн и криптовалютная идентификация являются двумя наиболее очевидными отличиями. Дабит также предупреждает, что «инструменты, технологии и экосистема Web3 менее зрелые, чем Web2». «С точки зрения веб-инфраструктуры, — говорит он, — основные различия связаны с тем, что мы считаем „внутренними“ технологиями, но в Web3 о них обычно говорят в терминах „протоколов“».

Фронтенд

Если начать с самого простого, то, согласно Дабиту, клиентские технологии (фреймворки и библиотеки) Web3 по сути такие же, как и в Web2. На фронтенде активно используется JavaScript, и — как и в текущем состоянии Web2 — React является ведущим фреймворком JavaScript. Дабит отмечает, что «подавляющее число проектов и примеров Web3 построено на React».

«В технологиях фронтенда нет особой разницы, кроме собственно клиентских библиотек HTTP», — объясняет он. Так, для взаимодействия с серверами по протоколу HTTP «вместо fetch или axios вы можете использовать web3.js или ethers.js для общения с remote procedure call или клиент graphql для общения с The Graph». Web3.js и ethers.js — это библиотеки JavaScript, которые позволяют разработчикам взаимодействовать с блокчейном Ethereum.

«Также на фронтенде отличаются идентификация и то, как мы с ней работаем, — говорит Дабит. — Для чтения данных вам не нужно ничего знать о пользователе — ведь почти все данные публичны. Но для записи данных обычно требуется подключение к кошельку пользователя. Это можно сделать несколькими способами. В настольном приложении пользователь обычно имеет расширение браузера для своего кошелька, которое автоматически вводит объект глобального окна для сети (например, solana, ethereum, arweave). На мобильных устройствах вы можете аутентифицироваться в приложении кошелька и будете перенаправлены после подписания транзакции».

Если вы играли с покупкой криптовалют или NFT или экспериментировали с dapps (децентрализованными приложениями), велика вероятность, что вы воспользовались криптокошельком MetaMask — у которого есть расширение для Chrome, Firefox и браузеров на базе Chromium, таких как Brave. MetaMask принадлежит компании ConsenSys, которая обоснованно называет себя «ведущей компанией по разработке ПО для Ethereum». Она также владеет одной из ведущих IDE (интегрированных сред разработки) Web3 под названием Truffle. Это среда разработки, среда тестирования и конвейер активов для блокчейна с использованием виртуальной машины Ethereum (EVM). Среди прочего, она предлагает управление жизненным циклом смарт-контрактов и автоматизированное тестирование контрактов.

Изучение Ethereum (и Rust)

Теперь перейдем к более сложным аспектам стека Web3. К настоящему времени большинство разработчиков знакомы с концепцией блокчейна — по сути, это распределенный реестр данных. Но существует множество различных типов блокчейнов. Два наиболее важных — это Bitcoin и Ethereum (и не случайно криптовалюты, связанные с этими блокчейнами, являются двумя лидерами рынка). Но если биткоин, как отметил исследователь Ethereum Джастин Дрейк, программируется примерно так же, как калькулятор, то Ethereum — это полностью программируемый компьютер, отвечающий критериям полноты по Тьюрингу.

Именно программируемая природа Ethereum привела к появлению новой парадигмы стека веб-разработки, ориентированного на блокчейн — так называемого «Web3». Один из принципов Ethereum заключается в том, что теоретически на его основе можно создать что угодно. Если говорить на языке Web2, то это веб-платформа. Ethereum — крупнейшая платформа Web3, и она также совместима с некоторыми другими блокчейнами. Поэтому основной путь к тому, чтобы стать разработчиком Web3, — это научиться использовать Ethereum.

Возможно, вы слышали, что Solidity, язык программирования для блокчейна Ethereum, чем-то напоминает JavaScript. Хотя это действительно так, Solidity используется только для написания смарт-контрактов для блокчейна — размещения данных на блокчейне вместе с любыми инструкциями для этих данных.

«Изучение Solidity и EVM может быть лучшим вариантом для начала работы в качестве разработчика блокчейна, — считает Дабит. — Используя этот набор навыков (и технологический стек), вы сможете создавать не только для Ethereum, но и для других Ethereum Layer 2, сайдчейнов и даже других блокчейнов, таких как Avalanche, Fantom и Celo».

Однако, и это еще один кивок в сторону мира Web2, Rust также становится востребованным навыком для разработчиков смарт-контрактов. Дабит приводит Solana, NEAR и Polkadot в качестве трех примеров блокчейнов с «первоклассной поддержкой Rust».

«Я бы сказал, что Solidity и Rust — с большим отрывом самые используемые и востребованные языки для разработки смарт-контрактов», — утверждает Дабит и добавляет, что опытные программисты смарт-контрактов, поскольку они относительно редки, могут получать зарплату «порядка сотен тысяч долларов в год, и я даже знаю несколько примеров, когда самые опытные из них получают миллион в год».

Как хранить данные и запрашивать их

Одна из самых сложных частей разработки Web3 — хранение и использование данных. Хотя блокчейн хорош тем, что является «недоверенной» цепочкой неизменяемых данных, он также невероятно неэффективен при хранении и обработке больших объемов данных — особенно для dapps. Именно здесь на помощь приходят такие протоколы хранения файлов, как IPFS, Arweave и Filecoin.

Arweave — это Open Source-проект, который описывает себя как «протокол, позволяющий хранить данные постоянно, устойчиво, с единой предоплатой». По сути, это одноранговая (P2P) сеть, но у нее есть свой крипто-словарь: ее механизм майнинга называется «Succinct Proofs of Random Access (SPoRAs)», а разработчики могут устанавливать приложения на «permaweb» (постоянный и децентрализованный веб, построенный поверх Arweave).

Если копнуть еще глубже, то разработчики dapp имеют возможность использовать «внецепочечные» решения, где данные хранятся где-то помимо основного блокчейна. Двумя распространенными формами таких решений являются «сайдчейны» (вторичные блокчейны) и так называемые решения «второго уровня» (L2), такие как Bitcoin Lightning Network и Ethereum Plasma.

Что касается того, как индексировать и запрашивать данные на блокчейне, то это относительно новая область. Но, как отмечалось выше, Дабит работает над одним из решений — The Graph, основанном на GraphQL. Среди прочего, оно позволяет разработчикам делать запросы непосредственно из цепочек L1 или L2, используя GraphQL внутри приложения.

Децентрализация: проблема разработчиков Web3

Исходя из стека Web3, описанного Дабитом, становится ясно, что традиционные навыки веб-программирования — от JavaScript до Rust — помогут вам и в разработке Web3. Но вам также придется научиться программировать блокчейн, используя смарт-контракты, и освоиться в чуждом мире криптовалютных файловых хранилищ и внецепочечных решений.

С точки зрения разработчика, Web3, похоже, сейчас находится в переходном периоде, пытаясь найти способы уйти от зависимости от централизованных сервисов, таких как Coinbase, OpenSea и Alchemy. Но именно в этом и заключается вся сложность, потому что настоящая децентрализация очень трудно достижима для dapps.

Будет интересно посмотреть, как будет развиваться стек Web3 в 2022 г. — по мере того как он будет искать способы оправдать свою собственную шумиху о децентрализации.