Для того чтобы человек мог совершать сделки в сети биткоина, ему необходим адрес. Адрес биткоина можно сравнить с банковским счетом в традиционной банковской системе. Однако адреса биткоина отличаются от банковских счетов по многим параметрам. В этой статье мы рассмотрим биткойн-адреса и то, как получить биткойн-адрес с несколькими подписями.
Биткоин-адреса
Биткойн-адрес может быть голым открытым ключом (P2PK), но чаще всего это хэш открытого ключа (P2PKH) или хэш блокирующего скрипта (P2SH). Наиболее распространенный тип биткоин-адреса получается путем криптографического хэширования открытого ключа в формате, который легко копировать и передавать, можно проверить на ошибки и верифицировать с помощью кодировки Base58
. Этот тип адреса имеет префикс 1
и представляет собой хеширование с оплатой до открытого ключа (P2PKH).
Биткойн-адреса также могут быть получены из скриптов вместо открытых ключей. Адреса этой категории имеют префикс 3
, обозначающий адрес хэша с оплатой по скриптам (P2SH), обычно называемый мультисиг-адресом. Существуют также биткоин-адреса, которые представляют собой Segwit
апгрейд в Биткоине, и состоят из основных типов хэша с открытым ключом (P2WPKH) и хэша со скриптом (P2WSH). Они имеют префикс bc1
и длиннее, чем первые два типа, поскольку используют кодировку bech32
.
Недавно у нас появились адреса, представляющие собой обновление Taproot. Адреса Pay-to-taproot (P2TR) начинаются с bc1p
и используют кодировку bech32m
. При использовании маршрута траты ключей, P2TR
позволяет многоключевым схемам, таким как 3-of-5, выглядеть в сети биткоина так же, как и односторонний адрес pay-to-public key, что дает хорошие преимущества в плане конфиденциальности. Адреса P2TR — это голые открытые ключи, как P2PK
.
Биткойн-адреса хранят неизрасходованный транзакционный выход (UTXOs), который представляет собой стоимость биткойна в сатоши
. Чтобы потратить эти UTXO, необходимо доказать право собственности, используя закрытый ключ, связанный с адресом, для создания цифровых подписей, которые разблокируют стоимость, хранящуюся в UTXO.
Мультисиговые адреса Биткойн
Для адресов, полученных на основе более чем одного открытого ключа, в зависимости от количества минимальных подписей, установленных при создании адреса, необходимо предоставить их для разблокирования таких UTXO. Такие типы адресов называются мультисиг-адресами. Это похоже на корпоративный/совместный банковский счет, который требует более одной подписи для подписания чека на снятие средств со счета.
Адреса с несколькими подписями предлагают интересные варианты использования, такие как операции условного депонирования, коллективное управление активами, минимизация риска потери одного закрытого ключа и др. Наиболее распространенным недостатком использования мультисиговых адресов и транзакций является то, что они требуют технических знаний для управления ими.
Мультисиговые транзакции имеют форму m-of-n
, где m
— количество подписей, необходимых для расходования средств, а n
— количество максимальных открытых ключей. Например, для транзакции «2 из 3» потребуется как минимум 2 подписи из возможных 3. В следующем разделе мы рассмотрим, как можно сгенерировать адрес с несколькими подписями на основе 3 открытых ключей и как установить, что для разблокировки средств, отправленных на этот адрес, необходимо предоставить как минимум два из 3 возможных закрытых ключей.
Как сгенерировать 2 из 3 мультисиговых биткоин-адресов
Мы будем использовать демон bitcoin-core для создания P2SH 2of-3 multi-sig адреса. Вот ссылка на то, как его настроить. Убедитесь, что bitcoin core запущен на testnet
. Вы можете запустить демон, выполнив команду bitcoind
.
Мы будем использовать эту библиотеку для генерации пар закрытых и открытых ключей, чтобы использовать их для генерации наших адресов. Следуйте инструкциям в readme, чтобы сгенерировать 3 пары закрытых и открытых ключей:
Используя библиотеку, мы получили следующие открытые ключи в шестнадцатеричном формате:
"03150176a55b6d77eec5740c1f87f434cf416d5bbde1704bd816288a4466afb7bb"
"02c3b2d3baf90e559346895b43253407fbb345c146910837b61f301f4c9a7edfe5"
"02c6e3e94f7ff77457da9e76cf0779ca7c1e8575db064a2ea55400e6a9d8190225"
Теперь мы создадим наш мультисиг-адрес с помощью вышеуказанных открытых ключей.
Используя bitcoin-cli
, сгенерируем мультисиг-адрес следующим образом:
bitcoin-cli -testnet createmultisig 2 '["03150176a55b6d77eec5740c1f87f434cf416d5bbde1704bd816288a4466afb7bb", "02c3b2d3baf90e559346895b43253407fbb345c146910837b61f301f4c9a7edfe5", "02c6e3e94f7ff77457da9e76cf0779ca7c1e8575db064a2ea55400e6a9d8190225"]'
Результат выполнения вышеприведенной команды показан на титульном изображении.
Параметр 2 указывает bitcoind создать адрес, требующий подписи как минимум двух закрытых ключей. Тот факт, что мы используем три открытых ключа, делает его мультисигма-адресом 2of-3. Вы можете использовать любое количество ключей, если оно равно или больше параметра «minimum required to sign».
Вы можете убедиться, что сгенерированный адрес действителен, используя команду:
bitcoin-cli -testnet validateaddress '2MyxShnGQ5NifGb8CHYrtmzosRySxZ9pZo5'
Результат выполнения команды см. на титульном изображении.
Стоит отметить, что сгенерированный нами адрес P2SH
начинается с 2
, а не с 3
, как было указано ранее, поскольку мы используем testnet
(альтернативная цепочка для тестирования).
Вы можете отправить монеты testnet
на сгенерированный адрес и построить транзакцию, чтобы потратить UTXO, используя пары ключей. Это выходит за рамки данной статьи. Подробнее об адресах биткоина и транзакциях вы можете прочитать в главе 4 книги Mastering Bitcoin Андреаса Антонопулоса. Спасибо за прочтение.