У меня сложилось впечатление, что адреса — это просто закодированные, хэшированные открытые ключи с префиксом и что в блокчейне используется только открытый ключ (а не адрес) для транзакций. Но если публичный ключ хешируется, как кошелек получает публичный ключ от адреса для создания транзакции?
Я провел некоторые исследования, которые подтвердили мои сомнения , что это невозможно . Поэтому мне было интересно, как кошелек создает транзакцию, если у него нет открытого ключа?
РЕДАКТИРОВАТЬ: я имею в виду, как кто-то, пытающийся отправить 10 BTC, получает открытый ключ получателя для оплаты открытого ключа от получателей по адресу. Я полностью понимаю криптографический элемент пар частного и открытого ключей и то, как тратится биткойн, а не то, как открытый ключ получателя получается из адреса. То, что я видел, это то, что (чаще всего) транзакции оплачиваются хэшем открытого ключа (P2PKH), а не тем, что я изначально думал, что все txns оплачиваются открытым ключом (P2PK).
Проще говоря, вы этого не сделаете. Адрес представляет собой хэш открытого ключа с контрольной суммой и префиксом (1). Причина, по которой адреса не являются просто открытыми ключами, неизвестна, вам придется спросить об этом сатоши, однако это, вероятно, сделает их короче. У BTC есть P2PK, но он редко используется, поскольку открытый ключ намного длиннее адреса. Надеюсь это поможет!
Возможно, вас смущает фраза «кошелек», так как только кошелек получателя должен знать открытый ключ, и он у него есть, потому что он создал адрес в первую очередь.
В дальнейшем я буду использовать стандартный адрес 1... (оплата по хэшу публичного ключа). Это не единственный тип адреса, но похожие ответы применимы ко всем типам адресов.
В обычном рабочем процессе участвуют два кошелька. Назовем их Сьюзи (отправитель) и Руди (получатель).
У меня сложилось впечатление, что адреса просто закодированы
Да, адреса закодированы (base58 или base32) для удобства чтения человеком. Они включают контрольную сумму для обеспечения защиты от ошибок при записи и вводе адреса. Биткойн-адрес может представлять владельца пары закрытый/открытый ключ или любой другой скрипт, который может быть представлен через P2SH или P2WSH.
Но если публичный ключ хешируется, как кошелек получает публичный ключ от адреса для создания транзакции?
Чтобы создать транзакцию, которая тратит ваши биткойны, вам нужен доступ к закрытому ключу. Это связано с тем, что почти все транзакции должны включать подпись закрытого ключа, который у вас есть, чтобы потратить заблокированные средства.
Однако у вас может быть кошелек только для просмотра, если вы опасаетесь использовать закрытые ключи на устройстве, подключенном к сети. Кошелек только для просмотра позволяет вам наблюдать за тем, что происходит с этими биткойнами из холодного хранилища, не раскрывая приватные ключи онлайн-миру. Это включает в себя импорт вашего основного открытого ключа на уровне учетной записи, который помогает вам создавать разные адреса для этой учетной записи. С помощью главного открытого ключа на уровне учетной записи вы можете создавать адреса получения/изменения, поскольку у вас есть доступ к открытым ключам, которые будут использоваться для создания этих адресов. Программное обеспечение просто хэширует открытые ключи и кодирует их так, как вам нравится (P2WPKH или P2PKH).
hash160
собой открытый ключ, а хэши — это односторонние математические функции. Если вы хотите создать транзакцию P2PK, вам нужно напрямую запросить у получателя открытый ключ.Существуют различные виды выходов, на которые может быть оплачена транзакция. Для простоты я объясню это на примере вывода Pay-to-PubkeyHash (P2PKH). Я думаю, что именно на этом основан ваш вопрос.
С выходом P2PKH вы правы. Адрес — это просто закодированный и хэшированный открытый ключ с префиксом. Вы можете удалить префикс и изменить кодировку, но вы не можете найти прообраз хеша (в нашем случае открытого ключа).
Но вам не нужно. Как следует из названия Pay-to-PubkeyHash
, вы платите только за хэш открытого ключа в своей транзакции. Получатель может получить открытый ключ, если у него есть соответствующий закрытый ключ, если ему это необходимо.
Publickey --> encode (eg AES?) --> add prefix = address
а затем отправитель отменит этот процесс?
Ариэль Препятствие
Хосе Креспо Барриос
Питер Уилле
dodgy_coder