前言:想了解他们的不同,可以看这边文章:以1, 3, bc1 开头的比特币地址的区别
我这里只说代码的实现
1.首先引入bitcoinj最新的库
compile 'org.bitcoinj:bitcoinj-core:0.15'
2.按照我之前的文章获取到btc私钥,链接:区块链开发之确定性算法生成BTC,ETH的私钥,公钥和地址_调用比特币或者其他区块链的密码库,生成私钥、公钥、地址,并观察地址的特征,对比-CSDN博客
3.生成不同格式地址代码如下:
LegacyAddress address1 = LegacyAddress.fromKey(networkParameters, ecKey);
System.out.println("1开头的地址:" + address1.toBase58());
/*LegacyAddress address3 = LegacyAddress.fromScriptHash(networkParameters, ecKey.getPubKeyHash());
System.out.println("3开头的地址:" + address3.toBase58());
这个方式不对,参考以下代码:
*/
参数threshold是你多签的时候,必须携带的一个数字,pubkeys是你所有参与多签的账号
Script script = ScriptBuilder.createP2SHOutputScript(int threshold, List<ECKey> pubkeys)
LegacyAddress address3 = LegacyAddress.fromScriptHash(network, ScriptPattern.extractHashFromP2SH(script))
System.out.println("3开头的地址:" + address3.toBase58());
SegwitAddress segwitAddress = SegwitAddress.fromKey(networkParameters, ecKey);
System.out.println("bc1开头的地址:" + segwitAddress.toBech32());
打印结果:
1开头的地址:1AMWsQHBgBCmMog3JxSkvAT5NcXQeGNxba
3开头的地址:3B3XnwmdE5X9SyNUS47MLnp1X8p8Afi8kx
bc1开头的地址:bc1qv6dxy7tmsyupwp46skcdg08c8693c6chrcu94h