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

Разработка Ldice с текущей версией lisk-sdk является сложной задачей, потому что на самом деле нет возможности атомарно обрабатывать ставки.

Пользовательское расширение транзакции BaseTransaction позволяет только читать и изменять записи базы данных для отправителя и получателя. Достаточно лишь отправить ставку для дальнейшей обработки. В текущей версии BetTransaction вычитает стоимость ставки и переводит ее на казначейский счет (0L).

В идеале ставка должна обрабатываться в дополнительной логике обработки блоков, обеспечивающей истинную случайность и согласованную запись в базу данных. Однако с текущим дизайном единственный возможный способ решить эту проблему - иметь собственный модуль, который прослушивает событие chain: blocks: change, выбирает последний блок и обрабатывает ставки соответственно. Что касается доказательства концепции, он работает довольно хорошо, однако после некоторого времени работы сети возникает несоответствие (потерянные ставки, дублированные ставки, недействительная прибыль), особенно если блок содержит несколько ставок для обработки, это, к сожалению, ожидаемое поведение, потому что это происходит. этот модуль изменяет таблицу mem_accounts, в то время как другая логика может обрабатывать новые транзакции.

Другой подход заключался бы в разработке транзакции заявки, но в рамках настраиваемой транзакции, с помощью lisk-sdk 3.0 и ниже. Получить подписи предыдущих блоков невозможно. Теоретически можно использовать настраиваемый модуль для обновления account.asset блокировочных подписей и ставок для обработки с транзакцией заявки, но, к сожалению, он не будет работать ни как account.asset - это объект, хранящийся в базе данных в виде строки, поэтому никакой разницы не будет.

Подводные камни undoAsset,
В любом из описанных выше сценариев все еще существует проблема с правильной отменой транзакций (в случае цепных откатов), поскольку из-за ограниченного доступа к базе данных в настраиваемой транзакции невозможно использовать настраиваемую транзакцию. таблица для хранения результатов или получения подписей блоков для детерминированного воссоздания и отмены ставки. Единственный способ - сохранить результаты ставок в account.asset и при необходимости использовать их для undoAsset. Если в account.asset хранится более ~ 1000 ставок, это становится огромной проблемой производительности, единственный способ решить эту проблему (что опять-таки не идеально) - удалить ставки с достаточно старыми (при условии до BFT безопасного количества блоков).

По указанным выше причинам LDICE останется в качестве доказательства концепции до тех пор, пока не будет разработана lisk-sdk 4.0 и, возможно, 5.0. Очень вероятно, что эти обновления sdk позволят:
* Расширить логику обработки блоков (идеально подходит для обработки ставок и дивидендов);
* Больше свободы с доступом к базе данных из настраиваемой транзакции (решает account.asset проблема)

В течение последних недель мы также завершили первую альфа-версию клиентского приложения, которое теперь использует веб-сокеты для связи с node. LDICE также был оснащен настраиваемым модулем веб-сокета (https://github.com/thepool-io/ldice/tree/master/modules/websocket), поэтому теперь он работает очень плавно. , результаты ставок обычно возвращаются менее чем за 5 секунд, что сопоставимо с централизованными решениями с преимуществами криптографической доказуемости. Это также намного лучше, чем децентрализованные приложения, построенные на Ethereum.

Живая демонстрация POC: http://ldice.thepool.io
Клиентское приложение: https://github.com/thepool-io/ldice -frontend
Основной код: https://github.com/thepool-io/ldice
Клиентское приложение теперь имеет открытый исходный код по лицензии MIT.

Пока LDICE остается POC, мы ждем дальнейших обновлений lisk-sdk. Ожидается доработка клиентского приложения, предстоит еще много работы. Мы также будем работать над более жизнеспособными доказательствами концепций, которые будут выпущены позже.

В процессе разработки и тестирования мы разработали простой инструментарий для LDICE.
https://github.com/thepool-io/ldice-toolkit
Позволяет отправлять токены, регистрировать делегировать, отправлять ставки, а также сеть стресс-тестов со случайными ставками.

Приветствую,
Команда делегатов ThePool.io

PS!
Не забудьте взглянуть, пометить и внести свой вклад в https://github.com/thepool-io/awesome-lisk