使用bitcoinj生成segwit地址和私钥(纸钱包)

时间:2018-01-19 20:32:07

标签: java bitcoin bitcoinj segwit

可以使用以下使用bitcoinj master分支的代码生成有效的旧比特币密钥对:

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

问题是如何进行相同操作以获得 segwit密钥对

我查看了bitcoinj docs,但找不到任何直接以segwit格式生成地址的API。

通过查看testssegwit pull request,我发现以下代码(附加到上面的代码中)会生成一个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());

我的理解是上面的代码应该在multisig场景中使用,因此我不确定这是否是从单个私钥派生segwit地址的正确方法。这是生成纸质文件钱包的正确/可靠/安全的代码吗?

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

0 个答案:

没有答案