Рубрики
Uncategorized

Генерация адреса Биткойн-кошелька из Расширенного открытого ключа с использованием PHP

Автор оригинала: David Wong.

Повторное использование одного и того же адреса биткойн-кошелька является большой проблемой конфиденциальности. Если у вас есть простой интернет-магазин или веб-сайт, запрашивающий пожертвования, вам, возможно, потребуется создать уникальный адрес для каждой транзакции.

Существует множество платежных систем, таких как Bitpay, которые выполняют всю тяжелую работу за вас. Недостатком является то, что им необходимо использовать ваш закрытый ключ. Однако вы можете использовать Расширенный открытый ключ (PUB) из иерархического детерминированного кошелька (HD) для реализации своего собственного простого решения.

Весь процесс описан в BIP32. Я предлагаю вам сначала прочитать его, чтобы получить общее представление об источнике адреса.

В этом уроке мы будем использовать Electrum , OS X Sierra , Apache 2.4 , PHP 7.1 и BitWasp/биткоин- php

Когда дело доходит до биткойн-кошельков, можно использовать любой HD-кошелек, такой как Mycelium. В любой UNIX-подобной системе, особенно в Linux, процесс установки должен быть одинаковым.

Библиотеки PHP и их зависимости требуют PHP 5.6+. Откройте терминал и проверьте свою текущую версию:

php -v

В моей среде результат таков:

PHP 7.1.0 (cli) (built: Jan  2 2017 20:09:35) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies

Если версия меньше 5.6, сначала необходимо обновить PHP.

Глобальный композитор Установки

Прежде чем мы установим библиотеку bitcoin-php, нам нужно убедиться, что composer установлен.

Откройте терминал и введите:

composer -V

Если его содержимое выглядит следующим образом: Версия композитора 1.3.0 2016-12-24 00:47:03 Вы можете смело пропустить этот шаг.

В противном случае установите:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Запустите еще раз композитор -V Убедитесь, что он успешно установлен.

Установите PHP-библиотеку Биткойнов

Перейдите в корневой каталог документов вашего веб-сервера (каталог, в котором хранится ваш веб-сайт) и создайте папки биткойн/hd-ключи

В моем примере корневой каталог документа ~/Сайты Но в других UNIX-подобных системах это может быть /var/www 。 Если вы не уверены, проверьте настройки своего сервера.

cd ~/Sites
mkdir bitcoin bitcoin/hdkeys 
cd bitcoin/hdkeys

установить Bit-Wasp/биткоин-php Библиотека:

composer require bitwasp/bitcoin 

Он будет загружать библиотеки и зависимости. Этот процесс может занять несколько минут.

Если ошибок нет, пожалуйста, перейдите к следующему шагу.

Генерируйте адреса кошельков из xpub, ypux и zpub

Я написал небольшой класс, загрузил все необходимые классы bitcoin-php и упаковал некоторые методы для удобства использования.

Загрузите его в каталог:

wget https://gist.githubusercontent.com/mariodian/5b67a1f315a74a7753a6f23d0198ec48/raw/2742a7909dd2621381de53209e85348a078df470/HD.php

Во-первых, нам нужно получить расширенный открытый ключ .

Откройте Electrum, нажмите Кошелек, затем нажмите Главный открытый ключ и скопируйте строку.

В Electrum 3.x перейдите в Кошелек -> Информация -> Главный открытый ключ

Унаследованный адрес(p2pkh)

Откройте свой любимый текстовый редактор, создайте файл с именем generate. php, а также скопируйте и вставьте следующий код:

set_xpub($xpub);
$address = $hd->address_from_master_pub($path);

echo $address;

Убедитесь, что вы отредактировали его в соответствии со своим собственным ключом $pub Переменные (вы также можете использовать мои).

Откройте браузер и введите http//localhost/hdkeys/generate.php (или ваш собственный путь).

Вывод должен совпадать с первым адресом в вашем кошельке Electrum.

Проверьте, не изменился ли адрес различных путей в коде, путем комментирования или раскомментирования.

Если вы используете Mycelium, вы должны отредактировать его $путь Переменные:

$path = "44'/0'/0'/0/0";

Это покажет первый адрес кошелька. Чтобы добавить индекс адреса, отредактируйте последнюю цифру.

Собственный адрес SegWit (p2wpkh)

Для целей bc1... В начале собственного адреса SegWit (p2wkh), пожалуйста, используйте следующий код:

set_zpub($zpub);
$address = $hd->address_from_master_pub($path);

echo $address;

Не забудьте отредактировать $epub Переменные.

Неродной адрес SegWit (p2sh-p2wpkh)

Большинство кошельков SegWit в настоящее время используют хэш-адрес с открытым ключом “оплата свидетелю”, содержащийся в p2sh.

Пример кода таков:

set_ypub($ypub);
$address = $hd->address_from_master_pub($path);

echo $address;

Опять же, измените свои собственные $epub Переменные.

Адрес с несколькими подписями (p2sh)

В следующем примере я создал кошелек с несколькими подписями 2 из 2 в Electrum.

Это означает, что для подписания и трансляции транзакций требуется две подписи (всего две). Вторая подпись была создана на основе расширенного ключа предыдущего примера.

Если вы пытаетесь создать кошелек, пожалуйста, обратитесь к документу Electrum.

Вернитесь в текстовый редактор и создайте имя с именем generate_multisig.php Новый файл, затем скопируйте и вставьте следующее:

set_multisig_xpubs($xpubs);
$address = $hd->multisig_address_from_xpub($m, $path);

echo $address;

В-третьих, отредактируйте соответствующим образом $pubs Или воспользуйся моим ключом. Если вы используете другие кошельки, пожалуйста, не забудьте их сменить. $путь

Открыть в браузере http://localhost/hdkeys/generate_multisig.php Вы должны увидеть первый адрес кошелька с несколькими подписями.

Как использовать код

Каждый раз при получении нового заказа последний индекс адреса извлекается из базы данных, увеличивается и генерируется.

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

Вы также можете проверить существующие адреса, которые не были профинансированы в эти дни недели. Если такой адрес найден, он может быть назначен новому заказу.

Это предотвращает создание слишком большого количества адресов.

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

Перейдите на консоль Electrum, выполните следующие команды и перезапустите кошелек:

wallet.gap_limit = 100

Когда вы перейдете на вкладку Адрес, вы увидите больше кошельков (выделено красным цветом).

Поделитесь некоторыми интерактивными практическими уроками онлайн-программирования, связанными с блокчейнами, такими как ethernet, EOS, биткойн и т.д.

  • Учебник по разработке Java Ethernet, в основном для программистов Java и Android, посвященный деталям разработки web3j для блокчейна Ethernet.
  • Семинар по Python Ethernet, в основном для инженеров Python, использующих web3.py детали разработки блокчейн-Ethernet.
  • PHP Ethernet workshop в основном знакомит с использованием PHP для интеллектуального взаимодействия при разработке контрактов, создания учетных записей, транзакций, передачи, разработки токенов, фильтров и транзакций.
  • Вводный курс ETF в основном посвящен разработке интеллектуального контракта и приложения DAPP, которое подходит для внедрения.
  • Продвинутый курс разработки Etaifang в основном знакомит с тем, как использовать узел. js, mongodb, блокчейн и IPFs для реализации децентрализованного приложения для электронной коммерции, которое подходит для продвинутой стадии.
  • C
  • Учебник по EOS, этот курс поможет вам быстро начать разработку децентрализованных блокчейн-приложений EOS. Он охватывает основные области знаний о цепочке инструментов EOS, учетных записях и кошельках, выпуске токенов, разработке и развертывании интеллектуальных контрактов, использовании кода и интеллектуальном взаимодействии с контрактами и, наконец, завершает разработку приложения note DApp с использованием всех точек знаний.
  • Курс разработки Java Bitcoin, предназначенный для начинающих, охватывает основные концепции биткоина, такие как хранение блокчейна, децентрализованный механизм консенсуса, ключ и скрипт, транзакция и UTXO. В нем также подробно объясняется, как интегрировать функции поддержки биткойнов в Java-код, такие как создание адресов, управление кошельками, создание простых транзакций и т.д. Это редкое сравнение для инженеров Java. Специальный курс развития валюты.
  • Курс разработки Php Bitcoin для начинающих охватывает основные концепции биткоина, такие как хранение блокчейна, децентрализованный механизм консенсуса, ключ и скрипт, транзакция и UTXO. В нем также подробно объясняется, как интегрировать функции поддержки биткойнов в Php-код, такие как создание адреса, управление кошельком, построение простой транзакции и т. Д., Которые являются редкими для инженеров Php. Курс Развития Валюты.
  • Разработка блокчейна Tender mint подробно этот курс подходит для инженеров, которые хотят использовать tendermint для разработки блокчейна. Содержание курса включает основные концепции модели разработки приложений tendermint, такие как интерфейс BCI, дерево Меркеля, библиотека состояний с несколькими версиями и богатый практический код, такой как выдача токенов. Это лучший выбор для инженеров по языку go, чтобы быстро начать разработку цепочки блоков.

Вот исходный текст, использующий PHP для генерации адреса Биткойн-кошелька из расширенного открытого ключа

Оригинал: “https://developpaper.com/generating-bitcoin-wallet-address-from-extended-public-key-using-php/”