Я хотел бы сгенерировать биткойн-адрес (открытый / закрытый ключ) в PHP. Я много искал, но не могу найти ни одного рабочего решения.
Это например:
https://github.com/mikegogulski/bitcoin-php
addr_from_mpk($mpk, $i)
Вот например я не понимаю параметров. Пример:
$mpk = '675b7041a347223984750fe3ab229df0c9f960e7ec98226b7182a2cb1990e39901feecf5a670f1d788ab29f626e20de424f049d216fc6f4c6ec42506763fa28e';
for ($i = 0; $i < 10; $i++) {
print addr_from_mpk($mpk, $i) . "\n";
}
Что здесь происходит? Является ли $ mpk закрытым ключом? Если я изменяю один символ в $ mpk, я получаю ошибку.
Кто-нибудь может мне помочь? Есть ли рабочий способ генерировать биткойн-адрес в PHP?
Большое спасибо!
Адрес биткойна и открытый / закрытый ключ не совпадают. Адрес в основном представляет собой открытый ключ. В вашем коде $ mpk является основным открытым ключом. Вы отдаете MPK алгоритму, и он возвращает вам адрес. Вы можете увидеть, как это работает в этой схеме https://en.bitcoin.it/w/images/en/9/9b/PubKeyToAddr.png
Я не вижу методов для создания пары ключей в репо, которую вы предоставили, поэтому вам, вероятно, придется использовать что-то еще. Вы должны создать пару ключей, используя другой инструмент. Я нашел немного кода PHP https://github.com/RobKohr/PHP-Bitcoin-Address-Creator и похоже, что он создал пару ключей в правильном направлении
openssl ecparam -genkey -name secp256k1 | tee data.pem &>/dev/null
openssl ec -text -noout -in data.pem | head -5 | tail -3 | fmt -120 | sed 's/[: ]//g'
Большая часть PHP для библиотек биткойнов опирается на очень устаревшую библиотеку эллиптических кривых.
Я бы предложил использовать один из них, один из которых основан на Майке Гогульском. В PHP не было много биткойнов, кроме этого 🙁
Это bitwasp/bitcoin-lib-php
<?php
require_once "vendor/autoload.php";
use BitWasp\BitcoinLib\BitcoinLib;
$keySet = BitcoinLib::get_new_key_set();
echo $keySet['pubAddr'];
Эта библиотека достаточно стабильна, но использует несколько ярлыков и действительно ожидает, что вы знаете, что делаете.
Тогда есть bitwasp/bitcoin-php
— новее, быстрее, ООП, даже поставляется с расширением, чтобы ускорить его. Но я не отмечаю версию композитора, пока пыль не уляжется 🙂
<?php
require_once "vendor/autoload.php";
use BitWasp\Bitcoin\PrivateKeyFactory;
$private = PrivateKeyFactory::create();
echo $private->getAddress()->getAddress();
Тем не менее, вы делаете не нужен MPK, чтобы сделать биткойн-адрес. MPK предназначен для детерминированного кошелька и является сериализованной точкой [x, y]. Таким образом, вы получите ошибку, если пройдете точку, которая не находится на кривой.
Я настоятельно советую вам прочитать больше о биткойнах и основополагающих принципах, так как ясно, что вы все еще новичок в этом ..