Перейти к основному контенту

Как реализовать рынок ERC-721

смарт-контракты
erc-721
solidity
токены
Средний уровень
Альберто Куэста Каньяда
19 марта 2020 г.
5 минут на чтение

В этой статье я покажу вам, как написать код аналога Craigslist для блокчейна Эфириум.

До появления Gumtree, Ebay и Craigslist доски объявлений в основном делались из пробки или бумаги. Доски объявлений были в школьных коридорах, газетах, на уличных фонарях и витринах магазинов.

Все изменилось с появлением интернета. Количество людей, которые могли увидеть конкретную доску объявлений, увеличилось на много порядков. Благодаря этому рынки, которые они представляют, стали гораздо более эффективными и масштабировались до глобальных размеров. Ebay — это огромный бизнес, который берет свое начало от этих физических досок объявлений.

С появлением блокчейна эти рынки снова изменятся, и я покажу вам, как именно.

Монетизация

Бизнес-модель публичной блокчейн-доски объявлений должна будет отличаться от модели Ebay и подобных компаний.

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

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

Бизнес-лидеры с более широким видением, чем у меня, поймут, как это монетизировать. Все, что я вижу, — это то, что это отличается от статус-кво и, вероятно, прибыльно.

Кроме того, есть аспект автоматизации и платежей. Некоторые вещи могут быть очень эффективно токенизированы (opens in a new tab) и проданы на доске объявлений. Токенизированные активы легко передаются в блокчейне. В блокчейне можно легко реализовать очень сложные методы оплаты.

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

Я просто рад это создавать. Давайте посмотрим на код.

Реализация

Некоторое время назад мы запустили репозиторий с открытым исходным кодом (opens in a new tab) с примерами реализации бизнес-кейсов и другими полезными вещами, пожалуйста, взгляните.

Код для этой доски объявлений на Эфириуме (opens in a new tab) находится там, пожалуйста, используйте его как хотите. Просто имейте в виду, что код не проходил аудит, и вам нужно провести собственную проверку, прежде чем вкладывать в него деньги.

Основы доски не сложны. Все объявления на доске будут представлять собой просто структуру с несколькими полями:

struct Trade {
  address poster;
  uint256 item;
  uint256 price;
  bytes32 status; // Открыт, Исполнен, Отменен
}

Итак, есть кто-то, кто публикует объявление. Предмет для продажи. Цена предмета. Статус сделки, который может быть открытым, выполненным или отмененным.

Все эти сделки будут храниться в отображении (mapping). Потому что в Solidity, кажется, все является отображением. А еще потому, что это удобно.

mapping(uint256 => Trade) public trades;

Использование отображения просто означает, что мы должны придумать идентификатор (id) для каждого объявления перед его публикацией, и нам нужно будет знать id объявления, прежде чем мы сможем с ним работать. Существует множество способов справиться с этим как в смарт-контракте, так и во фронтенде. Пожалуйста, спрашивайте, если вам нужны подсказки.

Далее возникает вопрос о том, что это за предметы, с которыми мы имеем дело, и что это за валюта, которая используется для оплаты транзакции.

Что касается предметов, мы просто попросим, чтобы они реализовывали интерфейс ERC-721 (opens in a new tab), который на самом деле является просто способом представления предметов реального мира в блокчейне, хотя он лучше всего работает с цифровыми активами (opens in a new tab). Мы собираемся указать наш собственный контракт ERC-721 в конструкторе, что означает, что любые активы на нашей доске объявлений должны быть предварительно токенизированы.

Для платежей мы собираемся сделать нечто подобное. Большинство блокчейн-проектов определяют свою собственную криптовалюту ERC-20 (opens in a new tab). Некоторые другие предпочитают использовать популярную, такую как DAI. На этой доске объявлений вам просто нужно решить при создании, какой будет ваша валюта. Легко.

constructor (
  address _currencyTokenAddress, address _itemTokenAddress
) public {
  currencyToken = IERC20(_currencyTokenAddress);
  itemToken = IERC721(_itemTokenAddress);
  tradeCounter = 0;
}

Мы почти у цели. У нас есть объявления, предметы для торговли и валюта для платежей. Создать объявление означает поместить предмет на условное депонирование (escrow), чтобы показать, что он у вас есть и что вы не опубликовали его дважды, возможно, на другой доске.

Приведенный ниже код делает именно это. Помещает предмет на условное депонирование, создает объявление, выполняет некоторые служебные задачи.

Принять сделку означает выбрать объявление (сделку), заплатить цену, получить предмет. Приведенный ниже код извлекает сделку. Проверяет ее доступность. Оплачивает предмет. Извлекает предмет. Обновляет объявление.

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

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

Вот и все. Вы добрались до конца реализации. Довольно удивительно, насколько компактными бывают некоторые бизнес-концепции, когда они выражены в коде, и это один из таких случаев. Ознакомьтесь с полным контрактом в нашем репозитории (opens in a new tab).

Заключение

Доски объявлений — это распространенная конфигурация рынка, которая масштабировалась с появлением интернета, став чрезвычайно популярной бизнес-моделью с несколькими монополистическими победителями.

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

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

Как всегда, если вы собираетесь создать что-то интересное и были бы рады совету, пожалуйста, напишите мне (opens in a new tab)! Я всегда рад помочь.