Снимите высокий барьер для входа

Несмотря на обещание децентрализованных приложений, пользовательский интерфейс все еще не готов к массовому внедрению. Есть много проектов, направленных на улучшение этого положения. Кошельки нового поколения, нацеленные на конкуренцию с Metamask, работают над тем, чтобы скрыть всю основу внедрения Web3. Яркими примерами являются Torus, Fortmatic, Portis, Unilogin и Authereum. Однако, на мой взгляд, далеко не все идет.

Скрытие сантехники

Моя основная проблема - это то, что у меня было с тех пор, как я начал работать с DApps несколько лет назад. Как пользователь, каждый раз, когда я хочу отправить транзакцию в блокчейне, мне предлагается уродливое всплывающее окно с просьбой подтвердить, предупреждая меня о стоимости и отпугивая меня. Для меня как человека, получившего посвящение в космос уже несколько лет, это не так уж важно. Но тогда было и есть до сих пор. Я точно знаю, что новички в космосе встречают одни и те же пугающие всплывающие окна каждый раз, когда они пытаются что-то сделать. Это неприятно и является основной причиной того, что показатель отказов DApps так высок.

Я понимаю, как платформа, вам нужно, чтобы пользователь знал, что операция будет стоить денег. Меньше всего вы как платформа хотите дискредитировать, потому что вы не предупредили пользователей о стоимости использования, а ваши расходы на газ бессознательно опустошили их аккаунты эфира. Однако есть гораздо лучшие способы сделать это, чем принятая в настоящее время норма.

Взгляните на рисунок 1. Если вы не очень хорошо знакомы с кошельками Ethereum, DApps и отраслью в целом, вы не узнаете, что вообще означает это всплывающее окно. Некоторые пользователи будут думать, что весь сайт - подделка, поскольку всплывающие окна, возникающие при нажатии кнопок, часто считаются теневой практикой. Но здесь это норма. И это появляется каждый раз, когда пользователь хочет взаимодействовать со смарт-контрактом.

Не только это, но и тот факт, что необходимо установить все расширение, чтобы даже иметь возможность взаимодействовать с DApps, кажется архаичным. Это медленно меняется. Opera выпустила поддержку DApp в своем мобильном браузере, а другие кошельки теперь поставляются со встроенными браузерами DApp. Но все они настолько нишевые, что определенно не являются мейнстримом.

Если Google не выпустит поддержку DApp для своего браузера Chrome или Mozilla для Firefox, проблема все равно будет существовать. Неважно, насколько красивы вы делаете всплывающие окна (у Fortmatic есть несколько вкусных закругленных краев), какие нишевые продукты поддерживают внедрение Web3, проблема остается.

Что нужно сделать?

Пользователи, которые используют Metamask и других внедренных провайдеров Web3, уже знают, как они работают, они опытные пользователи, которые не боятся DApps. Я считаю, что стремление сделать это впечатление более ярким, гладким или округлым - пустая трата времени. Это не заставит обычных пользователей устремиться на вашу платформу, потому что вы не решите их проблему. Их проблема - понимание того, что происходит.

Вместо того, чтобы сосредотачиваться на том, чтобы сделать внедренный опыт Web3 более упорядоченным, постарайтесь полностью отказаться от него. Создайте платформу, которая позволит пользователям взаимодействовать со смарт-контрактами, даже не зная, что есть смарт-контракты или блокчейн. Сделайте это понятным для инвесторов и энтузиастов, а для масс - удалите его полностью. Думайте как банк. Банки не выставляют напоказ внутреннее устройство своих систем и не заставляют пользователей подписывать каждое маленькое решение, они скрывают его, чтобы вам не о чем беспокоиться. Они справляются с тяжелой работой, пользователи этого не видят.

Но как это сделать? В большинстве руководств по разработке DApp рассказывается о Web3.js или Web3.py и о том, как эти библиотеки используются для взаимодействия с внедренным экземпляром Web3 в браузере. Так построено большинство DApps, и он отлично подходит для демонстрации сантехники и получения Metamask для отображения этих ужасных всплывающих окон. Как я уже сказал, отлично подходит для продвинутых пользователей, но эти библиотеки также можно использовать, чтобы скрыть сантехнику, не требуя поддержки Web3 на стороне клиента.

Почему бы не создать платформу, не требующую внедрения Web3. Вместо этого разрешите пользователям регистрироваться с использованием их электронной почты и пароля или даже через социальные сети, такие как Twitter, Google и Facebook. Сделайте это знакомым. Хорошо, поэтому вам могут потребоваться некоторые другие навыки, если вы новичок в разработке, но проверенные и проверенные фреймворки, такие как Laravel, делают это из коробки. Ни метамаск, ни Web3 на стороне клиента.

Как только они войдут в систему и попадут на вашу панель управления, позвольте им создать учетную запись. Под этим я подразумеваю, что пусть они нажмут кнопку, которая создаст новый адрес Ethereum на бэкэнде.

«А как насчет закрытых ключей?» Я слышал, вы спросите.

Во-первых, для обычного пользователя сохранение закрытых ключей в распоряжении конечного пользователя не является большой проблемой. Я полностью понимаю, что хранение любых закрытых ключей централизованно - плохая идея, идет вразрез со всей предпосылкой технологии Blockchain и ее следует минимизировать, если не искоренить.

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

Таким образом, хранение этих ключей вместе с их учетной записью на вашей платформе вполне возможно. Это устраняет необходимость раскрытия Web3 и использования Metamask.

Сосредоточьтесь на усыновлении

Предположим, вы создаете платную платформу, на базе которой есть смарт-контракты Ethereum. Вы знаете, что вашим пользователям нужно будет взаимодействовать с ними, но вы не хотите требовать базовых знаний о Metamask и кошельках, прежде чем они смогут его использовать. Они хотят просто использовать ваш продукт, а не часами изучать Web3. Начните с создания платформы, которая позволяет регистрироваться и входить в систему через Facebook, Google и другие социальные сети.

Создайте информационную панель, которая позволит пользователю создать учетную запись. Назовите его «пользователем» или чем-то еще, что сделает его еще более понятным, если вы беспокоитесь, что терминология Blockchain отпугнет их. Когда они это сделают, попросите у них PIN-код или пароль шифрования или просто используйте их пароль для входа в систему, чтобы зашифровать их закрытый ключ. Сохраните эту зашифрованную версию в базе данных вместе с данными пользователя.

Вы знаете, что транзакции в Blockchain не бесплатны, и ваш продукт тоже не бесплатный. FIAT по-прежнему остается лидером на рынке валют. Сделайте это основным способом оплаты с помощью Stripe или чего-то подобного. Какова бы ни была ваша структура оплаты, будь то разовая плата или модель подписки, загрузите кошелек пользователя эфиром, когда вы получите его платеж. Насколько они знают, они только что заплатили вам свою ежемесячную плату, но вы знаете, что пополнили их счет, чтобы они могли начать взаимодействовать с вашей экосистемой смарт-контрактов.

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

Web3.py Пример

В следующем примере кода предполагается, что у вас есть Python3, Web3.py (который можно установить через pip), а также учетную запись Infura и URL-адрес для доступа к цепочке блоков.

Вместо того, чтобы раскрывать функциональность во внешнем интерфейсе, которая неизбежно требует Metamask или другого кошелька Web3, давайте рассмотрим, как мы можем создать учетную запись, сгенерировать зашифрованную версию учетной записи с паролем, а затем расшифровать ее по запросу пользователя с помощью сервера Web3.py -боковая сторона. Эта функция также доступна в Web3.js.

Внутри терминала Python выполните следующие команды:

# Import the Web3.py library
from web3 import Web3
# Set your Infura url - obtained from the Infura dashboard
infura_url = "https://mainnet.infura.io/v3/YOUR_INFURA_KEY"
# Initialize web3 instance
web3 = Web3(Web3Provider.HTTPProvider(infura_url))
# Create an account when the user requests
# This will create a new account object with
# an address and a private key
new_account = web3.eth.account.create()
# Encrypt the account to store in your database
keystore = new_account.encrypt(user_password)

Сохраняя этот зашифрованный keystore, платформа не знает, что такое закрытый ключ. Единственный способ расшифровать и подписать транзакции - это знать значение userPassword. Давайте посмотрим, как это сделать.

# Retrieve the private key from the keystore and user password
priv_key = web3.eth.account.decrypt(keystore, userPassword)

Этот закрытый ключ - все, что нужно для подписания транзакций от имени этого адреса.

Прочтите полную документацию по Python’s Web3.py или Javascript’s Web3.js.

Дальнейшее чтение

Если вас интересует разработка блокчейнов, я пишу учебные пособия, пошаговые руководства, подсказки и советы о том, как начать работу и создать портфолио. Ознакомьтесь с некоторыми из этих ресурсов: