Генерация адреса и секретного ключа с помощью Bitcoinj (бумажный кошелек)
Можно сгенерировать допустимую пару ключей биткойнов со следующим кодом, использующим основную ветку биткойн:
import org.bitcoinj.core.Address;
import org.bitcoinj.core.DumpedPrivateKey;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.NetworkParameters;
public class GeneratePrivateKeyBulk {
public static void main(String[] args) {
ECKey key = new ECKey();
Address pubAddress = new Address(NetworkParameters.prodNet(), key.getPubKeyHash());
DumpedPrivateKey privKey = key.getPrivateKeyEncoded(NetworkParameters.prodNet());
System.out.println("Public address: " + pubAddress.toBase58() + "; Private key: " + privKey.toBase58());
}
}
Это создает пригодный для использования открытый кодированный base58 открытый адрес и закрытый ключ, например, как1ERzRYYdbibaQt2kuNfgH8spuoqQxYkwQb
,L3AuZ2vNt11ac2xSi6AYwzXyftqSVPcSuHNdTsSuRfknXvoRtWzF
соответственно.
Вопрос в том, как выполнить ту же операцию, чтобы получитьпару ключей Segwit?
Я посмотрел на документы bitcoinj, но не смог найти API для генерации адресов непосредственно как segwit.
Посмотрев на тесты и запрос на извлечение segwit, я обнаружил, что следующий код (добавленный к приведенному выше коду) будет генерировать адрес segwit (т. Е. Тот, который начинается с3
например,31uLnxKteEYa2u1vgWyVPkTpVfUGduCV82
)
Script script = ScriptBuilder.createP2SHOutputScript(1, Collections.singletonList(key));
Address segwitAddress = Address.fromP2SHScript(NetworkParameters.prodNet(), script);
System.out.println("Segwit address: " + segwitAddress.toBase58());
Насколько я понимаю, приведенный выше код должен использоваться в многозадачном сценарии, поэтому я не уверен, является ли это правильным способом получения адреса segwit из одного закрытого ключа. Это правильный / надежный / безопасный код для создания бумажного сегвит-кошелька?
Кроме того, есть ли способ добавить защиту паролем BIP38 к закрытому ключу с помощью bitcoinj? КлассBIP38PrivateKey
есть только методы для расшифровки ключа BIP38 из существующего представления base58, но нет методов для шифрования пароля BIP38.