Давайте купим Твиттер!

В течение последних нескольких месяцев мир технологий гудел от новостей о том, что Илон Маск покупает Twitter. Произойдет ли приобретение на самом деле, еще неизвестно, но многие сотрудники и пользователи Twitter обеспокоены тем, что это может означать для культуры компании и для самого приложения.

В шутку я подумал про себя: «Что, если мы объединимся и вместо этого купим Twitter?» У меня нет 44 миллиардов долларов, но, может быть, мы могли бы собрать средства? Конечно, я мог бы создать проект GoFundMe или Kickstarter.

Я также недавно погрузился в мир Web3, который полностью посвящен децентрализации. Поэтому моей следующей мыслью стало: «Что потребуется для создания краудфандингового приложения с использованием технологии Web3?»

В этой статье будет рассмотрено именно это. Мы рассмотрим, как обычно работают краудфандинговые приложения, как они будут работать в мире Web3 и как мы можем создать собственное децентрализованное краудфандинговое приложение Web3 («dapp»). Мы даже включим несколько примеров кода, которые помогут вам создать собственную децентрализованную платформу для краудфандинга.

Готовы сразиться с Илоном?

Как работают краудфандинговые приложения

Краудфандинговые приложения, такие как GoFundMe или Kickstarter, позволяют пользователям создавать новые сборы средств, в которых каждый может внести свой вклад. Создатель сбора средств принимает пожертвования, обычно при определенных условиях, а затем краудфандинговая платформа берет небольшой процент денег в качестве своей доли. Все выигрывают.

Для такой платформы, как Kickstarter, цель сбора средств должна быть достигнута к крайнему сроку для выделения средств. Если цель достигнута вовремя, то создатель сбора средств получает средства для своего проекта, а со всех кредитных карт участников снимается сумма, которую они пожертвовали. Если срок пройден, а цель не достигнута, то всем, кто внес свой вклад, возвращаются деньги (точнее, их кредитные карты не списываются).

Эта модель работает довольно хорошо, и многие успешные проекты финансируются такими платформами, как Kickstarter. Но что, если бы мы могли исключить посредника?

Как может работать краудфандинговое приложение Web3

Web3 имеет собственный уровень транзакций, который позволяет пользователям переводить средства, хранящиеся в их криптокошельках. Популярные кошельки включают Coinbase Wallet или MetaMask.

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

Для краудфандингового приложения web3 мы могли бы использовать смарт-контракт, который позволяет людям вкладывать средства из своего кошелька в дело, как кампания на Kickstarter. В смарт-контракт может быть встроена логика, позволяющая создателю краудфандингового проекта выводить средства только после достижения цели. До этого средства будут храниться на условном депонировании в смарт-контракте.

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

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

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

Итак, имея в виду эту высокоуровневую архитектуру, давайте проверим реальное децентрализованное приложение для краудфандинга Web3, которое мы создали! Вы можете найти весь код демонстрационного приложения, размещенного на GitHub.

Наше краудфандинговое приложение Web3

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

Если у пользователя нет расширения для браузера криптовалютного кошелька, при нажатии на кнопку появится встроенный пользовательский интерфейс Coinbase Wallet, позволяющий новому пользователю либо подключить существующий мобильный кошелек, либо создать новый кошелек за считанные минуты.

После подключения кошелька пользователь может отправить пожертвование, изменив значение в поле ввода и нажав кнопку «Пожертвовать». (Мы установили минимальную сумму пожертвования в размере 0,01 эфира и цель фонда в размере 10 эфиров в смарт-контракте, но эти значения произвольны.)

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

Это действительно все, что нужно, с точки зрения функциональности.

Итак, как мы построили это? Для создания нашего децентрализованного приложения мы использовали несколько технологий:

  • React для внешнего интерфейса
  • Solidity для смарт-контракта
  • Remix для компиляции и развертывания смарт-контракта
  • Coinbase Wallet SDK для подключения к кошельку пользователя
  • Криптокошельки Coinbase Wallet и MetaMask для отправки и получения средств
  • Инфура для резервного RPC endpoint

Мы описали все этапы установки в README, поэтому не будем вдаваться в пошаговые подробности создания приложения. Если вы хотите продолжить или создать собственное децентрализованное приложение для краудфандинга, мы настоятельно рекомендуем выполнить шаги, описанные в файле README выше!

Здесь мы выделяем два ключевых файла, которые обеспечивают основные функции приложения: файл Crowdfunding.sol для смарт-контракта и файл App.js для пользовательского интерфейса React.

Файл Crowdfunding.sol воспроизведен ниже полностью:

Этот файл мы скомпилировали и развернули в онлайн-IDE Remix, поэтому он фактически не включен в репозиторий проекта. Вместо этого мы ссылаемся на адрес, где был развернут контракт, и используем методы, определенные в двоичном интерфейсе приложения контракта (ABI).

Просмотрев этот файл, вы увидите, что мы определили методы для donate, getBalance, withdraw и returnFunds. Каждый метод делает то, что следует из его названия.

  • Метод donate позволяет пользователям вносить пожертвования.
  • Метод getBalance показывает текущую общую сумму внесенных пожертвований.
  • Метод withdraw позволяет снимать средства, если цель сбора средств достигнута.
  • Метод returnFunds позволяет пользователям запросить возврат обещанной суммы, если они передумают после внесения вклада.

Теперь давайте посмотрим на код внешнего интерфейса с нашим файлом App.js, который также полностью воспроизведен ниже:

В этом файле много кода, но давайте обсудим несколько основных моментов. Как видите, мы используем Coinbase Wallet SDK для подключения к кошельку пользователя. Мы загружаем наш краудфандинговый контракт, используя ABI контракта и развернутый адрес. Мы взаимодействуем с методами смарт-контракта, используя .call() и .send(), и подключаем обработчики кликов к нашим кнопкам, чтобы сделать приложение интерактивным.

На высоком уровне это волшебство, лежащее в основе того, как все это работает. Для получения более подробных инструкций по настройке мы снова отсылаем вас к пошаговому руководству, которое можно найти в README на GitHub.

Заключение

Итак, что мы сегодня узнали?

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

Наконец, мы рассмотрели, как можно создать простое краудфандинговое децентрализованное приложение, технологии, лежащие в его основе, и то, как совместное использование этих технологий может позволить вам запустить приложение за считанные часы.