Я попытался обобщить этот вопрос из списка разработчиков BitcoinJ.
Я работаю над проектом, для которого требуется централизованный кошелек. Из того, что я понял, эти типы услуг обычно полагаются на простые проверки баланса, чтобы гарантировать, что отдельный пользователь не потратит больше, чем есть в его кошельке. То есть все пользователи имеют общий пул ключей, и единственное, что отслеживает баланс каждого пользователя, — это база данных сервиса.
Демон Биткойн предоставляет функциональность не в графическом интерфейсе, а именно в учетных записях. Учетная запись — это строка, которая группирует ключи. Вы можете отправить с учетной записи, и будут собираться только монеты, принадлежащие ключам в этой учетной записи. Это полезно, но довольно ограничено. Однако, используя это, вы можете сделать каждую учетную запись уникальным идентификатором для пользователя, а затем этот пользователь «владеет» соответствующими ключами. Одним кажущимся недостатком этого является то, что существует одно централизованное место для смены владельца учетной записи.
Я придумал потенциально лучшее решение. Каждая учетная запись «владеет» одним или несколькими хэшами открытого ключа (основой биткойн-адреса). При создании транзакции сервис будет передавать эти хэши, сообщая кошельку, что при сканировании неизрасходованных выходов использовать только те, у которых хэш открытого ключа принадлежит пользователю. Таким образом, не связывая учетную запись пользователя с самим закрытым ключом, мы можем предоставить пользователю монопольный доступ к любому количеству ключей.
Это кажется хорошим решением проблемы? Есть ли что-то лучшее, что мне не хватает?
Таким образом, не связывая учетную запись пользователя с самим закрытым ключом, мы можем предоставить пользователю монопольный доступ к любому количеству ключей.
Очень существенным преимуществом, которое могут предложить услуги кошелька, является мгновенная и невидимая передача монет между их учетными записями путем простого обновления их внутренних баз данных без прохождения через цепочку блоков. Таким образом вы можете упростить торговлю, например, на MtGox, а также обеспечить повышенную анонимность, потому что теперь вы можете совершать транзакции, которые не видны в цепочке блоков (а транзакции, которые видны, — это вывод и депозиты в сервисе в целом). , и эти адреса являются общими для многих пользователей, поэтому они также эффективно анонимны). Очевидно, что это не сработает, если сервис не сможет «перераспределять» все монеты по всем своим адресам по своему усмотрению внутри. (И, очевидно, это также работает только в том случае, если каждый владелец учетной записи доверяет службе кошелька, чтобы не взять все монеты и не сбежать).
Каждая учетная запись «владеет» одним или несколькими хэшами открытого ключа (основой биткойн-адреса).
Собственно, для внесения депозитов так уже работает с сервисами кошельков. Существует (или несколько) принимающих адресов (иногда для одноразового использования, иногда стабильных и пригодных для публикации), которые связаны с каждым владельцем учетной записи. Вы вносите средства на счет, используя этот адрес. Однако закрытый ключ остается у службы кошелька и может использоваться ею для всех видов несвязанных платежей.
Дэвид Шварц