Как централизованные кошельки должны обрабатывать учетные записи пользователей?

Я попытался обобщить этот вопрос из списка разработчиков BitcoinJ.

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

Демон Биткойн предоставляет функциональность не в графическом интерфейсе, а именно в учетных записях. Учетная запись — это строка, которая группирует ключи. Вы можете отправить с учетной записи, и будут собираться только монеты, принадлежащие ключам в этой учетной записи. Это полезно, но довольно ограничено. Однако, используя это, вы можете сделать каждую учетную запись уникальным идентификатором для пользователя, а затем этот пользователь «владеет» соответствующими ключами. Одним кажущимся недостатком этого является то, что существует одно централизованное место для смены владельца учетной записи.

Я придумал потенциально лучшее решение. Каждая учетная запись «владеет» одним или несколькими хэшами открытого ключа (основой биткойн-адреса). При создании транзакции сервис будет передавать эти хэши, сообщая кошельку, что при сканировании неизрасходованных выходов использовать только те, у которых хэш открытого ключа принадлежит пользователю. Таким образом, не связывая учетную запись пользователя с самим закрытым ключом, мы можем предоставить пользователю монопольный доступ к любому количеству ключей.

Это кажется хорошим решением проблемы? Есть ли что-то лучшее, что мне не хватает?

Ваш вопрос содержит ложное предположение. Когда вы отправляете со счета, это просто устанавливает, с какого счета списывается баланс. Клиент не считает, что определенные монеты принадлежат аккаунтам.

Ответы (1)

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

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

Каждая учетная запись «владеет» одним или несколькими хэшами открытого ключа (основой биткойн-адреса).

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

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