Может ли один кошелек генерировать (и использовать) как SegWit, так и не-SegWit-адреса?

Может ли кошелек Segwit генерировать и использовать не-Segwit-адреса?

Я использую Bitcore от Bitpay для создания кошельков и создания новых адресов для пользователей моей платформы. Я также использую Bitcore-wallet-client для подписи транзакций.

У моих пользователей сейчас есть устаревшие кошельки. Я намерен перевести их кошельки на родной Segwit, но им также потребуются устаревшие адреса, чтобы они могли получать монеты из любого места. (верно?)

Можно ли иметь только один кошелек на пользователя, генерирующий оба типа адресов, или мне придется управлять двумя кошельками на пользователя?

И если мне придется управлять двумя кошельками для каждого пользователя, utxos из одного кошелька, очевидно, не будут доступны для другого. Каков наилучший способ справиться с их «расщепленным балансом»? Должен ли я ориентировать пользователей на отправку всех своих монет на адрес bc1 нового кошелька Segwit? Но затем, всякий раз, когда они получают средства на свои старые адреса, им приходится снова переводить на адрес bc1, чтобы совершать транзакции Segwit. Это не имеет смысла - или нет? Что мне не хватает?

Ответы (2)

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

Хотя можно поддерживать отдельные кошельки для каждого пользователя, вести учет в сети довольно дорого.

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

Однако с операционной стороны вы можете объединить несколько выводов в одну транзакцию и даже перевести часть средств на холодный кошелек, чтобы повысить свою безопасность.

«Если кошельки BitPay могут делать только одно или другое, это будет особенностью локальной реализации». Да, это действительно было проблемой. Bitcore от Bitpay ожидает тип адреса в качестве параметра для создания новых кошельков. Затем он использует это значение всякий раз, когда вы просите его создать новый адрес. Поэтому я просто добавил еще один параметр для потока createAddress и передал туда addressType. Теперь кошельки, созданные с помощью этой системы, могут генерировать и использовать все типы адресов. Как ни странно, система умеет все подписывать. Я понятия не имею, зачем они привязывали один тип адреса к кошельку.
Возможно, они предположили, что пользователям слишком сложно иметь более одного типа адреса или что-то в этом роде.

Может ли один кошелек генерировать (и использовать) как SegWit, так и не-SegWit-адреса?

Да. Пример: в Bitcoin Core вы можете запустить getnewaddress с address_typeаргументом

получить новый адрес

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

Большинство приложений, веб-сайтов, служб и т. д. теперь поддерживают собственные адреса segwit, однако можно использовать адреса p2sh-segwit, если адреса bech32 не поддерживаются.