В этом следующем сегменте Building on web3 инженер по взаимодействию с разработчиками Edge & Node Надер Дабит расширяет стек web3 и объясняет, как разработчики могут концептуализировать различные аспекты создания на web3.
В апреле 2021 года я перешел на web3 после того, как проработал традиционным full-stack разработчиком около 10 лет. Погружаясь во все эти новые технологии и идеи, первое, что я хотел узнать, было: "что такое стек web3?".
При создании традиционного веб- или мобильного приложения я часто полагаюсь на несколько ключевых строительных блоков, чтобы завершить работу.
Используя эти основные компоненты, я могу создать большинство типов приложений, которые мне бы хотелось, или по крайней мере добраться до большей части пути. Так как это выглядело в web3?
Оказывается, ответ на этот вопрос не так прост, потому что:
Мне также было сложнее понять, как начать работу с и создавать веб-приложения web3, потому что я подходил к проблемам так же, как и в мире web2.
После работы, исследований, экспериментов и создания вещей за последние 8 месяцев или около того, я бы хотел поделиться тем, что я узнал.
Прежде чем мы определим стек web3, давайте попробуем определить web3. Существует бесконечное количество определений в зависимости от того, кого вы спросите, но для меня я нахожу этоопределение точное место на:
Web3 - это набор протоколов, позволяющих создавать полностью децентрализованные приложения.
С этим децентрализованным стеком технологий мы можем начать создавать децентрализованные приложения, у которых есть свои особенности и характеристики.
Некоторые из характеристик, доступных благодаря web3, включают:
В то время как некоторые из приложений, построенных на децентрализованных технологических стеках, заменят своих предшественников, новая парадигма приложений также стала возможной благодаря новым примитивам, доступным благодаря блокчейнам.
Цифровые платежи и общая инфраструктура заднего конца – такие как машинное обучение, мобильные устройства, виртуальная реальность и другие технологические элементы, платформы и строительные блоки – позволяют создавать совершенно новые типы приложений, некоторые из которых еще предстоит представить.
Это означает, что все будет заменено на веб3? Не обязательно. Хотя я считаю, что построение на децентрализованном технологическом стеке является гораздо лучшим выбором для определенных типов приложений - как и в любом техническом решении, все зависит от того, что вы строите.
Давайте теперь начнем погружение в стек web3, разбитый на этот набор категорий:
Существует бесконечное количество блокчейнов, на которых вы можете выбрать для построения. Нет единственного, который является «лучшим», вместо этого вы должны учитывать различные компромиссы между ними.
Одна из вещей, которая часто важна для меня, когда я учусь чему-то новому, - это идея применения Принцип Пареток тому, чему я учусь. т. е. каков самый эффективный способ извлечь максимальную пользу из этого количества времени и усилий. Следуя этой идее, я могу добиться наибольшего прогресса и импульса, изучая что-то новое за кратчайшее время.
В мире блокчейна изучение Solidity и EVM(или Виртуальная машина Ethereum) может быть лучшей ставкой при начале карьеры в качестве разработчика блокчейна. Используя эти навыки (и технологический стек), вы можете создавать не только для Ethereum, но и для других уровней 2 Ethereum, сайдчейнов, а также других блокчейнов, таких как Avalanche, Fantom и Celo.
Говоря об этом, Rust начинает становиться все более популярным в мире блокчейн, с Solana, NEAR, Polkadot и другими, имеющими поддержку Rust первого класса. Вероятно, нельзя допустить ошибки, изучая одно из них, но для начинающего я бы сказал, что на сегодняшний день Solidity все еще будет лучшим выбором, если кто-то меня спросит.
Помимо этого совета, вот неполный пример блокчейнов, которые имеют прочное сочетание технологий, полезности, сообщества, динамики и будущей жизнеспособности:
При взаимодействии с сетью вам потребуется использовать конечную точку RPC.
Есть несколько способов, как вы можете это сделать:
Публичные RPC конечные точки часто предоставляются сетью, но для большинства производственных dapps вам захочется использовать собственные конечные точки, так как они не являются стабильными или рекомендуемыми для производства.
Есть несколько поставщиков услуг RPC, вот некоторые из них:
Также есть веб3 / децентрализованное решение, Сеть Pocketкоторый, кажется, приобретает тягу.
Любой из этих вариантов, вероятно, хорошо подойдет для прямого взаимодействия с вашей сетью.
Для разработки EVM доступно несколько хороших сред разработки:
Для развития Solana, Якорьбыстро становится точкой входа для новых разработчиков. Он предоставляет интерфейс командной строки для создания, сборки и тестирования программ Solana, а также клиентские библиотеки, которые можно использовать для создания пользовательских интерфейсов. Он также включает DSL, который абстрагирует множество сложностей, с которыми разработчики часто сталкиваются при начале работы с Solana и разработкой на Rust.
Где мы храним изображения, видео и другие файлы в web3? Хранение чего-либо такого большого в цепи обычно является чрезвычайно дорогостоящим, поэтому, вероятно, мы не хотим хранить их там.
Вместо этого мы можем использовать один из нескольких протоколов хранения файлов:
Помимо хранения файлов и хранения на цепочке, вам также может понадобиться хранить данные вне цепочки. Вы можете использовать эти типы решений аналогично тому, как вы могли бы использовать базу данных в традиционном технологическом стеке, но вместо этого они реплицируются через n количество узлов на децентрализованной сети, и поэтому более надежны (по крайней мере, в теории).
Несколько вариантов:
С моей точки зрения, в контексте зрелости экосистемы решений для хранения вне цепи блоков пока не там, где нужно для реализации некоторых более продвинутых сценариев использования, которые могут заинтересовать некоторых разработчиков. Некоторые из вызовов здесь - это данные в реальном времени, обнаружение конфликтов и разрешение конфликтов, авторизация на запись, документация и общий опыт разработчика.
Интеграция решений для обработки данных вне блокчейна с протоколами блокчейна является одним из последних больших препятствий, которые нам нужно преодолеть, прежде чем мы получим полностью децентрализованный стек протоколов, способный поддерживать любые приложения.
Существует множество различий в способе взаимодействия и построения поверх блокчейнов по сравнению с базами данных в традиционном техническом стеке. С блокчейнами данные не хранятся в формате, который можно эффективно или легко потреблять непосредственно из других приложений или фронт-эндов.
Блокчейны оптимизированы для операций записи. Вы часто слышите об инновациях, происходящих вокруг транзакций в секунду, времени блока и стоимости транзакции. Данные блокчейна записываются блоками в течение времени, делая невозможным что-либо, кроме базовых операций чтения.
В большинстве приложений вам нужны функции, такие как реляционные данные, сортировка, фильтрация, полнотекстовый поиск, пагинация и многие другие типы запросов. Для этого данные должны быть проиндексированы и организованы для эффективного извлечения.
Традиционно эту работу выполняют базы данных в централизованной технологической стопке, но в веб-стопке 3 отсутствовала эта индексирующая слой.
Графэто протокол индексации и запроса данных блокчейна, который делает этот процесс намного проще и предлагает децентрализованное решение для этого. Любой может создавать и публиковать открытые GraphQL API, называемые подграфами, что делает запрос данных блокчейна легким.
Чтобы узнать больше о Графе, ознакомьтесь с документациейздесьили мой урокздесь.
Идентичность - это совершенно другая парадигма в web3. В веб2 аутентификация почти всегда основана на личной информации пользователя. Эта информация обычно собирается либо через форму, либо через OAuth-провайдера, который просит пользователя предоставить ее в обмен на доступ к приложению.
В web3 идентичность полностью вращается вокруг идеи кошельков и криптография на открытом ключе.
В то время как название "кошелек" служит своей цели, я обнаружил, что новички в веб-3 находят терминологию запутанной в отношении аутентификации и идентификации. Надеюсь, что в будущем мы сможем придумать какой-то другой способ передать, что такое кошелек, поскольку он объединяет аспекты финансов, а также идентичности и репутации.
Как разработчику, вам потребуется понимать, как получить доступ и взаимодействовать с кошельком и адресом пользователя различными способами.
На очень базовом уровне (и очень распространенном требовании) вам может потребоваться запросить доступ к кошельку пользователя. Для этого вы обычно сможете получить доступ к кошельку пользователя в контексте окна (веб-браузер) или использовать что-то вроде WalletConnectилиАдаптер кошелька Solana.
Например, если у них есть доступный кошелек Ethereum, вы сможете получить доступ к window.ethereum. То же самое для Solana (window.solana), Arweave (window.arweaveWallet) и еще нескольких. WalletConnect хорош для мобильного веба и React Native, поскольку он позволяет пользователям авторизовываться, используя свои мобильные кошельки напрямую с устройства.
Если вы хотите обрабатывать аутентификацию самостоятельно, вы можете разрешить пользователю подписать транзакцию, а затем где-то раскодировать ее, чтобы аутентифицировать пользователя, но это обычно требует наличие сервера.Здесьэто пример того, как это может выглядеть при использовании кошелька EVM и здесьэто пример того, как это сделать с Solana / Phantom.
Что насчет управления профилями пользователей децентрализованным способом?Керамическая сетьпредлагает самый надежный протокол и набор инструментов для управления децентрализованной идентичностью. Недавно они выпустили статья в блогеописание некоторых из их последних обновлений и рекомендации по тому, как все инструменты взаимодействуют. Я бы начал с этого, а затем исследовалих документыдля понимания того, как начать строить, и рассмотрите возможность ознакомления с моим примером проектаздеськоторый использует керамикуself.id.
Если вы хотите извлечь пользователя ENS текстовые записи, библиотека ENSJS предлагает хороший API для получения пользовательских данных:
const ens = новый ENS({ провайдер, ensAddress: getEnsAddress(‘1’) })
const content = await ens.name(‘sha.eth’).getText(‘avatar’)
SpruceIDтоже выглядит многообещающим, но я еще не пробовал это.
Керамический и Ельоба реализуютW3C DIDспецификация, которая сама по себе также является тем, что я бы считал строительным блоком web3. Сказав это, любая централизованная реализация DIDs противоречит идее того, что спецификация пытается достичь.
На сколько пойдут JavaScript-фреймворки, вы можете построить что угодно, так как SDK для клиентской стороны блокчейна в основном не привязан к фреймворкам. Сказано это, подавляющее количество проектов и примеров созданы в React. Есть также несколько библиотек, таких как Адаптер кошелька Solanaчто предлагают дополнительные утилиты для React, поэтому я бы сказал, что изучение или знакомство с React, скорее всего, будет разумным шагом.
Для клиентских SDK в Ethereum естьweb3.jsиethers.jsДля меня Ethers более доступен и имеет лучшую документацию, хотя web3.js существует дольше.
На Solana вы, вероятно, будете работать с@solana/web3.jsи / илиЯкорь. Я обнаружил, что клиентские библиотеки Anchor являются моим любимым инструментом для создания программ на Solana, поскольку я в любом случае использую фреймворк Anchor, и я обнаружил, что тогда мне гораздо легче понять @solana/web3.js.
Оракулы позволяют разработчикам получать доступ к чтению данных из реального мира & внешних систем из смарт-контракта.
Например, большинство финансовых приложений требуют знания данных и событий реального мира, происходящих вне цепи, поэтому Оракулы особенно важны в DeFi.
ChainlinkЭто оракул, который обеспечивает доступ к данным реального мира и вычислениям вне цепи, сохраняя при этом гарантии безопасности и надежности, присущие технологии блокчейн.
Флюксэто оракул межцепочечной, который обеспечивает смарт-контракты доступом к экономически безопасным данным.
Радикл - это децентрализованный протокол сотрудничества по коду, построенный на Git. Его можно рассматривать как децентрализованную версию GitHub.
Livepeerэто децентрализованная сеть видеопотоков. Она зрела и широко используется, более 70 000 GPU работают в сети.
Этот пост будет живым документом, который я буду поддерживать, учась, экспериментируя и собирая обратную связь от разработчиков, создающих веб3.
Если у вас есть какие-либо отзывы или идеи по поводу того, что здесь упущено, пожалуйста, свяжитесь и поделитесь своими мыслями со мной. Увлекательно видеть всю активность, происходящую вокруг web3, поскольку разработчики включаются и принимают участие. Хотя инфраструктура все еще развивается, видение построения по-настоящему децентрализованных протоколов и приложений, которые позволяют людям координироваться, не передавая власть и контроль крупным компаниям, является важным, и мы приближаемся к тому, чтобы сделать это видение реальностью.
В этом следующем сегменте Building on web3 инженер по взаимодействию с разработчиками Edge & Node Надер Дабит расширяет стек web3 и объясняет, как разработчики могут концептуализировать различные аспекты создания на web3.
В апреле 2021 года я перешел на web3 после того, как проработал традиционным full-stack разработчиком около 10 лет. Погружаясь во все эти новые технологии и идеи, первое, что я хотел узнать, было: "что такое стек web3?".
При создании традиционного веб- или мобильного приложения я часто полагаюсь на несколько ключевых строительных блоков, чтобы завершить работу.
Используя эти основные компоненты, я могу создать большинство типов приложений, которые мне бы хотелось, или по крайней мере добраться до большей части пути. Так как это выглядело в web3?
Оказывается, ответ на этот вопрос не так прост, потому что:
Мне также было сложнее понять, как начать работу с и создавать веб-приложения web3, потому что я подходил к проблемам так же, как и в мире web2.
После работы, исследований, экспериментов и создания вещей за последние 8 месяцев или около того, я бы хотел поделиться тем, что я узнал.
Прежде чем мы определим стек web3, давайте попробуем определить web3. Существует бесконечное количество определений в зависимости от того, кого вы спросите, но для меня я нахожу этоопределение точное место на:
Web3 - это набор протоколов, позволяющих создавать полностью децентрализованные приложения.
С этим децентрализованным стеком технологий мы можем начать создавать децентрализованные приложения, у которых есть свои особенности и характеристики.
Некоторые из характеристик, доступных благодаря web3, включают:
В то время как некоторые из приложений, построенных на децентрализованных технологических стеках, заменят своих предшественников, новая парадигма приложений также стала возможной благодаря новым примитивам, доступным благодаря блокчейнам.
Цифровые платежи и общая инфраструктура заднего конца – такие как машинное обучение, мобильные устройства, виртуальная реальность и другие технологические элементы, платформы и строительные блоки – позволяют создавать совершенно новые типы приложений, некоторые из которых еще предстоит представить.
Это означает, что все будет заменено на веб3? Не обязательно. Хотя я считаю, что построение на децентрализованном технологическом стеке является гораздо лучшим выбором для определенных типов приложений - как и в любом техническом решении, все зависит от того, что вы строите.
Давайте теперь начнем погружение в стек web3, разбитый на этот набор категорий:
Существует бесконечное количество блокчейнов, на которых вы можете выбрать для построения. Нет единственного, который является «лучшим», вместо этого вы должны учитывать различные компромиссы между ними.
Одна из вещей, которая часто важна для меня, когда я учусь чему-то новому, - это идея применения Принцип Пареток тому, чему я учусь. т. е. каков самый эффективный способ извлечь максимальную пользу из этого количества времени и усилий. Следуя этой идее, я могу добиться наибольшего прогресса и импульса, изучая что-то новое за кратчайшее время.
В мире блокчейна изучение Solidity и EVM(или Виртуальная машина Ethereum) может быть лучшей ставкой при начале карьеры в качестве разработчика блокчейна. Используя эти навыки (и технологический стек), вы можете создавать не только для Ethereum, но и для других уровней 2 Ethereum, сайдчейнов, а также других блокчейнов, таких как Avalanche, Fantom и Celo.
Говоря об этом, Rust начинает становиться все более популярным в мире блокчейн, с Solana, NEAR, Polkadot и другими, имеющими поддержку Rust первого класса. Вероятно, нельзя допустить ошибки, изучая одно из них, но для начинающего я бы сказал, что на сегодняшний день Solidity все еще будет лучшим выбором, если кто-то меня спросит.
Помимо этого совета, вот неполный пример блокчейнов, которые имеют прочное сочетание технологий, полезности, сообщества, динамики и будущей жизнеспособности:
При взаимодействии с сетью вам потребуется использовать конечную точку RPC.
Есть несколько способов, как вы можете это сделать:
Публичные RPC конечные точки часто предоставляются сетью, но для большинства производственных dapps вам захочется использовать собственные конечные точки, так как они не являются стабильными или рекомендуемыми для производства.
Есть несколько поставщиков услуг RPC, вот некоторые из них:
Также есть веб3 / децентрализованное решение, Сеть Pocketкоторый, кажется, приобретает тягу.
Любой из этих вариантов, вероятно, хорошо подойдет для прямого взаимодействия с вашей сетью.
Для разработки EVM доступно несколько хороших сред разработки:
Для развития Solana, Якорьбыстро становится точкой входа для новых разработчиков. Он предоставляет интерфейс командной строки для создания, сборки и тестирования программ Solana, а также клиентские библиотеки, которые можно использовать для создания пользовательских интерфейсов. Он также включает DSL, который абстрагирует множество сложностей, с которыми разработчики часто сталкиваются при начале работы с Solana и разработкой на Rust.
Где мы храним изображения, видео и другие файлы в web3? Хранение чего-либо такого большого в цепи обычно является чрезвычайно дорогостоящим, поэтому, вероятно, мы не хотим хранить их там.
Вместо этого мы можем использовать один из нескольких протоколов хранения файлов:
Помимо хранения файлов и хранения на цепочке, вам также может понадобиться хранить данные вне цепочки. Вы можете использовать эти типы решений аналогично тому, как вы могли бы использовать базу данных в традиционном технологическом стеке, но вместо этого они реплицируются через n количество узлов на децентрализованной сети, и поэтому более надежны (по крайней мере, в теории).
Несколько вариантов:
С моей точки зрения, в контексте зрелости экосистемы решений для хранения вне цепи блоков пока не там, где нужно для реализации некоторых более продвинутых сценариев использования, которые могут заинтересовать некоторых разработчиков. Некоторые из вызовов здесь - это данные в реальном времени, обнаружение конфликтов и разрешение конфликтов, авторизация на запись, документация и общий опыт разработчика.
Интеграция решений для обработки данных вне блокчейна с протоколами блокчейна является одним из последних больших препятствий, которые нам нужно преодолеть, прежде чем мы получим полностью децентрализованный стек протоколов, способный поддерживать любые приложения.
Существует множество различий в способе взаимодействия и построения поверх блокчейнов по сравнению с базами данных в традиционном техническом стеке. С блокчейнами данные не хранятся в формате, который можно эффективно или легко потреблять непосредственно из других приложений или фронт-эндов.
Блокчейны оптимизированы для операций записи. Вы часто слышите об инновациях, происходящих вокруг транзакций в секунду, времени блока и стоимости транзакции. Данные блокчейна записываются блоками в течение времени, делая невозможным что-либо, кроме базовых операций чтения.
В большинстве приложений вам нужны функции, такие как реляционные данные, сортировка, фильтрация, полнотекстовый поиск, пагинация и многие другие типы запросов. Для этого данные должны быть проиндексированы и организованы для эффективного извлечения.
Традиционно эту работу выполняют базы данных в централизованной технологической стопке, но в веб-стопке 3 отсутствовала эта индексирующая слой.
Графэто протокол индексации и запроса данных блокчейна, который делает этот процесс намного проще и предлагает децентрализованное решение для этого. Любой может создавать и публиковать открытые GraphQL API, называемые подграфами, что делает запрос данных блокчейна легким.
Чтобы узнать больше о Графе, ознакомьтесь с документациейздесьили мой урокздесь.
Идентичность - это совершенно другая парадигма в web3. В веб2 аутентификация почти всегда основана на личной информации пользователя. Эта информация обычно собирается либо через форму, либо через OAuth-провайдера, который просит пользователя предоставить ее в обмен на доступ к приложению.
В web3 идентичность полностью вращается вокруг идеи кошельков и криптография на открытом ключе.
В то время как название "кошелек" служит своей цели, я обнаружил, что новички в веб-3 находят терминологию запутанной в отношении аутентификации и идентификации. Надеюсь, что в будущем мы сможем придумать какой-то другой способ передать, что такое кошелек, поскольку он объединяет аспекты финансов, а также идентичности и репутации.
Как разработчику, вам потребуется понимать, как получить доступ и взаимодействовать с кошельком и адресом пользователя различными способами.
На очень базовом уровне (и очень распространенном требовании) вам может потребоваться запросить доступ к кошельку пользователя. Для этого вы обычно сможете получить доступ к кошельку пользователя в контексте окна (веб-браузер) или использовать что-то вроде WalletConnectилиАдаптер кошелька Solana.
Например, если у них есть доступный кошелек Ethereum, вы сможете получить доступ к window.ethereum. То же самое для Solana (window.solana), Arweave (window.arweaveWallet) и еще нескольких. WalletConnect хорош для мобильного веба и React Native, поскольку он позволяет пользователям авторизовываться, используя свои мобильные кошельки напрямую с устройства.
Если вы хотите обрабатывать аутентификацию самостоятельно, вы можете разрешить пользователю подписать транзакцию, а затем где-то раскодировать ее, чтобы аутентифицировать пользователя, но это обычно требует наличие сервера.Здесьэто пример того, как это может выглядеть при использовании кошелька EVM и здесьэто пример того, как это сделать с Solana / Phantom.
Что насчет управления профилями пользователей децентрализованным способом?Керамическая сетьпредлагает самый надежный протокол и набор инструментов для управления децентрализованной идентичностью. Недавно они выпустили статья в блогеописание некоторых из их последних обновлений и рекомендации по тому, как все инструменты взаимодействуют. Я бы начал с этого, а затем исследовалих документыдля понимания того, как начать строить, и рассмотрите возможность ознакомления с моим примером проектаздеськоторый использует керамикуself.id.
Если вы хотите извлечь пользователя ENS текстовые записи, библиотека ENSJS предлагает хороший API для получения пользовательских данных:
const ens = новый ENS({ провайдер, ensAddress: getEnsAddress(‘1’) })
const content = await ens.name(‘sha.eth’).getText(‘avatar’)
SpruceIDтоже выглядит многообещающим, но я еще не пробовал это.
Керамический и Ельоба реализуютW3C DIDспецификация, которая сама по себе также является тем, что я бы считал строительным блоком web3. Сказав это, любая централизованная реализация DIDs противоречит идее того, что спецификация пытается достичь.
На сколько пойдут JavaScript-фреймворки, вы можете построить что угодно, так как SDK для клиентской стороны блокчейна в основном не привязан к фреймворкам. Сказано это, подавляющее количество проектов и примеров созданы в React. Есть также несколько библиотек, таких как Адаптер кошелька Solanaчто предлагают дополнительные утилиты для React, поэтому я бы сказал, что изучение или знакомство с React, скорее всего, будет разумным шагом.
Для клиентских SDK в Ethereum естьweb3.jsиethers.jsДля меня Ethers более доступен и имеет лучшую документацию, хотя web3.js существует дольше.
На Solana вы, вероятно, будете работать с@solana/web3.jsи / илиЯкорь. Я обнаружил, что клиентские библиотеки Anchor являются моим любимым инструментом для создания программ на Solana, поскольку я в любом случае использую фреймворк Anchor, и я обнаружил, что тогда мне гораздо легче понять @solana/web3.js.
Оракулы позволяют разработчикам получать доступ к чтению данных из реального мира & внешних систем из смарт-контракта.
Например, большинство финансовых приложений требуют знания данных и событий реального мира, происходящих вне цепи, поэтому Оракулы особенно важны в DeFi.
ChainlinkЭто оракул, который обеспечивает доступ к данным реального мира и вычислениям вне цепи, сохраняя при этом гарантии безопасности и надежности, присущие технологии блокчейн.
Флюксэто оракул межцепочечной, который обеспечивает смарт-контракты доступом к экономически безопасным данным.
Радикл - это децентрализованный протокол сотрудничества по коду, построенный на Git. Его можно рассматривать как децентрализованную версию GitHub.
Livepeerэто децентрализованная сеть видеопотоков. Она зрела и широко используется, более 70 000 GPU работают в сети.
Этот пост будет живым документом, который я буду поддерживать, учась, экспериментируя и собирая обратную связь от разработчиков, создающих веб3.
Если у вас есть какие-либо отзывы или идеи по поводу того, что здесь упущено, пожалуйста, свяжитесь и поделитесь своими мыслями со мной. Увлекательно видеть всю активность, происходящую вокруг web3, поскольку разработчики включаются и принимают участие. Хотя инфраструктура все еще развивается, видение построения по-настоящему децентрализованных протоколов и приложений, которые позволяют людям координироваться, не передавая власть и контроль крупным компаниям, является важным, и мы приближаемся к тому, чтобы сделать это видение реальностью.