可以使用以下使用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
相应地。
问题是如何执行相同的操作来获取隔离见证密钥对?
我查看了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 密码加密的方法。