Можно ли сгенерировать несколько разных eth-адресов из одного закрытого ключа?
Цель состоит в том, чтобы реализовать сервис JavaScript, который позволит пользователю покупать подписку с использованием криптовалюты.
С точки зрения пользователя должно показаться, что:
Как вариант рассматриваю генерацию новой учетной записи с парой публичный/приватный ключ для каждого нажатия пользователем кнопки и сохранение хешированного приватного ключа в БД. Кроме того, мне понадобится воркер, который будет прослушивать сеть и проверять блоки для транзакции на сгенерированную учетную запись. Но мне не очень нравится сохранять закрытый ключ, а также генерировать новую пару ключей...
Поэтому мне интересно, есть ли другой способ реализовать эту функцию без сохранения закрытого ключа в базе данных и без использования сторонних сервисов?
Теоретически один адрес может иметь несколько закрытых ключей ( каждый адрес Ethereum используется (теоретически) 2 ** 96 закрытых ключей? ), но на практике это не так - на практике один закрытый ключ соответствует одному адресу (открытому ключу) и наоборот.
Я не совсем понял, как вы выиграете от нескольких адресов с одним и тем же закрытым ключом в вашем сценарии.
Если вы не хотите хранить несколько закрытых ключей, один из вариантов — сохранить один «главный» закрытый ключ, а затем просто добавить к нему случайные строки («соль» в криптографических терминах) для создания разных адресов и просто сохранить значения соли.
Один из способов — использовать детерминированный иерархический кошелек (первоначально из Биткойн BIP-32 ), например, Light Wallet, см. соответствующий вопрос здесь . Таким образом, закрытый ключ становится «главным» закрытым ключом, из которого можно получить различные дочерние ключи. Таким образом, в БД необходимо сохранить только путь вывода, но не фактические дочерние ключи.
Для мониторинга транзакций нет необходимости сохранять приватные ключи. Монитор должен знать только адрес учетной записи, который вычисляется из открытого ключа.
Расширение ответа Лаури :
Поскольку оба варианта (закрытый ключ > открытый ключ > адрес) являются детерминированными, у вас не может быть более одного адреса из одного закрытого ключа.*
Альтернативой является получение дополнительных закрытых ключей из главного закрытого ключа с заданным правилом вывода. Эти дополнительные закрытые ключи, очевидно, соответствуют новым адресам. Этот тип управления адресами называется иерархическим детерминированным кошельком/HD-кошельком .
Вы эффективно настраиваете: главный закрытый ключ > закрытые ключи (у вас может быть несколько сгенерированных > открытый ключ > адрес
Тарас
Николя Массар