Создание системы учетных записей

Я использую систему учетных записей bitcoind для своего веб-приложения, но она не работает так, как я хочу. Поэтому я хочу создать свою собственную систему учетных записей в Laravel (вероятно, с открытым исходным кодом).

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

Но как я могу настроить безопасную систему учетных записей?

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

Затем таблица адресов со всеми адресами, связанными с учетной записью.

Но как мне обрабатывать входящие транзакции? А исходящие транзакции? Если я по какой-то причине изменю что-то за пределами своей системы учетных записей, это, вероятно, довольно легко сломается.

Должен ли я импортировать все транзакции, чтобы рассчитать правильные остатки на счетах?

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

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

Такая система уже существует. Если нет, может ли кто-нибудь помочь мне обдумать это.

Есть ли какая-то особая причина, по которой адреса должны быть связаны с конкретными учетными записями? Из того, что вы пишете, мне кажется, что вы в любом случае полностью контролируете средства на каждом счете, поэтому просто отслеживать балансы ваших пользователей отдельно от адресов было бы намного проще. — Обратите внимание, что «система счетов» в Биткойне Core устарел в течение многих лет и не предназначался для использования в бухгалтерии, неудивительно, что он не делает то, что вы хотите. ;)
@Murch Я просто хочу сделать хороший масштабируемый проект. Таким образом, другие люди также могут использовать его. Если я использую его для других проектов, это может быть очень легко реализовано. Если я слежу за балансом пользователя отдельно от адресов и ошибаюсь(часто такое случается ;)) будет нехорошо.
Хранение средств всех пользователей на отдельных адресах означает, что у вас не будет преимущества масштаба для таких вопросов, как сборы и выбор монет. Вы размалываете UTXO на мелкие кусочки, пока ваши пользователи управляют своими средствами, вы не сможете агрегировать платежи через каналы Lightning без обновления внутри сети (или каналов оплаты)… Это совсем не масштабируемо. — Я также не уверен. что разделение балансов значительно затрудняет ошибку.
@Murch думаю, что я нашел способ. У меня есть таблица со всеми транзакциями. У них есть идентификатор пользователя. Идентификатор пользователя — это идентификатор владельца адреса на момент получения. Таким образом, если адрес переходит на другую учетную запись, транзакции по-прежнему принадлежат тому пользователю, который их получил. Таким образом, я могу просто получить все транзакции пользователя и рассчитать баланс.
Да, кажется, это гораздо лучший способ сделать это. :) Просто убедитесь, что транзакции учитываются только после подтверждения, и, возможно, даже после нескольких блоков, иначе ваша таблица будет сильно запутана реорганизацией блокчейна или устаревшими блоками. ;)

Ответы (1)

У меня работает система учета! Только я его особо не проверял, поэтому он не стабилен. https://github.com/jwz104/биткойн-счета

Он работает с пользователем, адресом и таблицей транзакций.

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

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