Лучший способ интегрировать платежи Ethereum в веб-приложение

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

Мой случай: Решение для онлайн-гемблинга, где пользователи могут вносить деньги на свой счет и делать ставки.
Требования: Платежи должны быть основаны на Ethereum, т.е. пользователи переводят ETH и получают игровые деньги (токены) или видят свой баланс непосредственно в ETH.

Решения, которые я вижу, и их проблемы:

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

2) Создайте что-то похожее на контракт Token. В этом случае пользователь сможет перевести ETH на какой-либо адрес и получить токены (хранящиеся в блокчейне).
Проблема: идентифицировать пользователя - опять же не так просто (та же проблема, что описана выше).
Я знаю, что можно использовать MetaMask, в этом случае идентификация пользователя не требуется, но в этом случае игровая логика должна быть размещена в смарт-контракте. Использование MetaMask и полностью децентрализованного приложения неприемлемо, это будет слишком дорого. Во-первых, поскольку игры очень динамичны с большим количеством изменений состояния (игра в процессе, деньги в игре и т. д.), потребуется много газа. Во-вторых, действия зависят от состояния, поэтому изменения состояния должны быть доступны мгновенно, недопустимо ждать, пока транзакция будет добыта.

3) Создайте новый адрес ethereum для каждого зарегистрированного пользователя (сохраните закрытые ключи в базе данных). В этом случае потребуется некоторая логика синхронизации на серверной части приложения (ETH во внутреннюю валюту [токены в базе данных приложения]).
Например, пользователь переводит ETH на созданный адрес, затем заходит в приложение и нажимает кнопку «Синхронизировать», затем приложение проверяет количество ETH на созданном для пользователя адресе, передает эти ETH на адрес владельца приложения и добавляет токены (внутренняя валюта) для этого. пользователя в базе данных приложения.

4) Создать смарт-контракт, по которому пользователи смогут передавать ETH с дополнительными данными (каким-то уникальным идентификатором). В этом случае также требуется сложная логика синхронизации.
Пример: когда пользователь хочет получить токены (внутренняя валюта), приложение предоставляет ему адрес контракта и сгенерированный уникальный идентификатор и сохраняет этот идентификатор в базе данных приложения (один ко многим пользователям/идентификаторам). Пользователь передает ETH на указанный адрес контракта и добавляет дополнительные данные (сгенерированный уникальный идентификатор), контракт сохраняет, сколько ETH было передано с использованием этого уникального идентификатора, серверная часть приложения использует эту информацию для добавления токенов (внутренней валюты) в базу данных приложения [вызов функций, который не не изменить состояние бесплатно].

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

а) Правильно ли я понимаю описанные потоки?
б) Есть ли лучшие или более правильные решения для моего случая?
в) Какое решение выбрать?

Ответы (1)

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

Итак... чтобы ответить на ваш актуальный вопрос... Здесь на самом деле много всего...

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

2) Предлагаемая стоимость эффективной работы вашего кошелька. На самом деле, вы можете запустить этот кошелек любым старым способом и, вероятно, все будет в порядке, но наиболее эффективным способом работы с этим кошельком будет использование алгоритмов, которые эффективно используют оставшиеся монеты при каждом вводе/выводе, сводя к минимуму пыль. Неплохой идеей будет хранить все свои монеты по нескольким адресам (один адрес будет самым дешевым, но несколько повышают безопасность). «Стоимость» здесь — это исследования и/или разработки по поиску существующего программного обеспечения кошелька Ethereum для правильной обработки ввода и вывода транзакций, минимизации комиссий и пыли.

3) Предлагаемая ценность анонимного управления вашим кошельком. Отправка денег туда и обратно между разными адресами ethereum может помочь повысить анонимность вашего сайта. Имейте в виду, что это прямо противоположно пункту 1. Если правоохранительные органы могут беспокоить вас, вы можете использовать какой-либо тип CoinJoin или аналогичный сервис ethereum.

Я бы не рекомендовал добавлять смарт-контракт в уравнение. Есть несколько очень успешных сайтов, подобных этим, которые не используют никаких специальных функций Ethereum. Если вы хотите использовать специальные функции Ethereum, интегрируйте свой сайт с чем-то вроде Augur или Gnosis .