StreamDesk

Сегодня хочу поделиться проектом, над которым работала наша команда. Проект выполнен на заказ компанией ITTest для команды Streamity.
22 октября этого года, на митапе посвященном инновационному экономическому проекту NEO, мы рассказали, что же такое StreamDesk.

StreamDesk – уникальный проект, который позволяет обменивать криптовалюту на фиат при помощи смарт-контрактов.

Вкратце система работы сделки со смарт-контрактами:

  1. Продавец создает заявку на продажу своей криптовалюты.
  2. Покупатель откликается на заявку.
  3. Продавец перечисляет криптовалюту в смарт-контракт, тем самым инициализирует сделку в смарт-контракте.
  4. Покупатель перечисляет фиатные деньги продавцу.
  5. StreamDesk убеждается в переводе фиатных денег у платежной системы и позволяет сделке в смарт контракте вывести криптовалюту на кошелек покупателя.

В определенный момент появилась необходимость выбора следующей криптовалюты для внедрения в StreamDesk. Мы перебрали массу вариантов и остановились на NEO. Как на прогрессивной, быстрой и популярной платформе, которую возможно встроить максимально быстро. Этому выбору способствовало несколько факторов:

  • NEO смарт-контракты разрабатываются на популярных языках программирования: C# — основной язык, Phyton – второй по популярности для разработки NEO смарт-контрактов, Visual Basic .NET, F#, Java и Kotlin. С таким разнообразием поддерживаемых языков, разработчику не составит труда начать разрабатывать смарт-контракты в NEO сети, ведь не потребуется тратить время на установку специфичных сред, разбор нового синтаксиса, все привычно и просто. Большинство программистов или используют поддерживаемые языки или встречались уже с ними. Большим плюсом является постоянное расширение списка поддерживаемых языков для разработки. Уже планируется добавить к поддержке языки Golang и JS.
  • Очень развитое комьюнити. Основное место общения в Discord канал «NEO – Smart Economy». Можно по поиску найти ответ на популярные вопросы или задать свой. Сообщество очень быстро и конструктивно отвечает на вопросы. При этом чат комнаты разделены по категориям и тематикам, например, в категории «Development» 9 чатов, в основном разделенные по языкам программирования.
  • В сети достаточное количество гайдов по развертке среды и написанию контрактов. На GitHub опубликовано большое кол-во смарт контрактов на NEO, что также ускоряет старт в разработке смарт-контрактов в сети NEO.
  • Еще момент. NEO VM можно развернуть за считанные минуты из docker образа, и не только NEO VM, но и NEO scan, который вам очень пригодится.

Комиссия сети.

Для сервиса StreamDesk, очень важно предоставить пользователям сервис с минимальными комиссиями. И NEO очень выгоден в этом плане. (сетка fee) Любая транзакция, которая при выполнении потребляет меньше 10 GAS, бесплатна. Для понимания, 10 GAS это достаточно много. Основное потребление – запись данных в хранилище смарт-контракта 1GAS за 1 килобайт, но не менее 1GAS за запись. Поэтому вы не можете себе позволить написание смарт-контракта бездумно, и стараетесь оптимизировать каждый метод.


Один из вариантов сокращения расхода GAS при записи большого кол-ва данных.
В нашем смарт-контракте, при создании сделки, требуется записать 8 переменных. Это достаточно много, учитывая, что происходит несколько проверок переданных параметров, подсчет активов в транзакции. И первая версия метода создания сделки потребляла 13 GAS. А это значит, что пользователю за создание сделки пришлось бы платить 3 GAS из своего кошелька. Это очень много, и мы не могли такое позволить.

Но выход достаточно прост. При создании сделки мы записываем данные:

  • Адрес кошелька продавца
  • Адрес кошелька покупателя
  • Тип криптовалюты (системная или NEP-5)
  • ID криптовалюты (тут нужно сделать оговорку, id системных и NEP-5 валют отличается длинной байт, 32 – системная, 20 – NEP-5)
  • Статус сделки
  • Количество продаваемой криптовалюты
  • Комиссия сервиса
  • Минимальное время для отмены сделки

Если внимательно посмотреть на эти данные, то становится ясно, что кошелек продавца, кошелек покупателя, тип валюты, ID валюты, статус сделки – всегда фиксированной длинны.
Поэтому мы просто объединили эти данные в одну строку и записали как одну переменную. И вот у нас уже не 8 записей в хранилище, а 4.
Таким образом создание сделки стало потреблять меньше 10 GAS и с пользователей сервиса комиссия сети не взимается.

Скорость.

Все, кто работал с криптовалютами сталкивались с проблемой скорости транзакций. В сети NEO транзакции молниеносные. Скорость сети на практике достигает 1000 т/c. Скорость сети NEO открывает новые возможности для блокчейн проектов.
Для тестеров сервиса StreamDesk, тестировать сделки в NEO сети было одно удовольствие.

Сложность с верификацией ввода средств в смарт-контракт.

В документации есть раздел «Contract Triggers», в котором упоминается метод «VerificationR», более подробную информацию по этому методу мы нашли на GitHub в разделе предложения NEP-7, и так как знали, что уже есть NEP-8, не обратили внимания, что NEP-7 так и не был введен.
Что должен был делать метод «VerificationR» — Когда в смарт-контракт входят активы, вызывается метод VerificationR и он может либо принять транзакцию (вернув true), либо ее отклонить (вернуть false). Мы планировали в этом методе верифицировать транзакцию, которую отправляет пользователь и, если передаваемые параметры для создания сделки не верны, или количество передаваемой криптовалюты не совпадает с тем количеством, которое требуется по сделке – отклонять транзакцию.


Но увы, метод VerificationR не введен в NEO VM, и верификации входящих активов нет. И так как мы не можем запретить перечисление в смарт-контракт активов, мы сделали чтобы эти активы не блокировались, и их мог забрать только владелец смарт-контракта, и вернуть их владельцу. Но таких случаев у нас не было, так как, чтобы произошел такой кейс, пользователь сам должен подменить данные для сделки, которые сформировал StreamDesk, а это значит, что он хочет обмануть сервис, себе во вред.