8

可以使用以下使用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 编码的公共地址和私钥,例如1ERzRYYdbibaQt2kuNfgH8spuoqQxYkwQbL3AuZ2vNt11ac2xSi6AYwzXyftqSVPcSuHNdTsSuRfknXvoRtWzF相应地。

问题是如何执行相同的操作来获取隔离见证密钥对

我查看了bitcoinj 文档,但找不到任何用于直接作为 segwit 生成地址的 API。

通过查看测试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());

我的理解是上面的代码应该用于多重签名场景,因此我不确定这是否是从单个私钥派生隔离见证地址的正确方法。这是生成纸质隔离见证钱包的正确/可靠/安全代码吗?

另外,有没有办法使用 bitcoinj 为私钥添加 BIP38 密码保护?该类BIP38PrivateKey仅具有从现有 base58 表示中解密 BIP38 密钥的方法,但没有用于 BIP38 密码加密的方法。

4

0 回答 0