ccp*_*zza 7 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());
}
}
Run Code Online (Sandbox Code Playgroud)
这就产生编码的公共地址和私有密钥例如像使用传统的base58 1ERzRYYdbibaQt2kuNfgH8spuoqQxYkwQb,L3AuZ2vNt11ac2xSi6AYwzXyftqSVPcSuHNdTsSuRfknXvoRtWzF相应地.
问题是我如何进行相同的操作来获得segwit密钥对?
我查看了bitcoinj文档,但找不到任何直接生成地址的API作为segwit.
通过查看测试和segwit pull请求,我发现下面的代码(附加到上面的代码中)会产生一个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());
Run Code Online (Sandbox Code Playgroud)
我的理解是上面的代码应该在multisig场景中使用,因此我不确定这是否是从单个私钥派生segwit地址的正确方法.这是生成纸质segwit钱包的正确/可靠/安全的代码吗?
另外,有没有办法使用bitcoinj为私钥添加BIP38密码保护?该类BIP38PrivateKey仅具有从现有base58表示中解密BIP38密钥的方法,但没有用于BIP38密码加密的方法.