隔离验证地址生成

以bitcoin 为例:

P2WPKH / P2WSH (hash不同,P2WPKH 是 160(sha256),P2WSH是 sha256(sha256))

1、bip142地址格式:

version 主网 06 ,测试 10

version + witnessVersion(0) + 填充(0) + hash + 校验位 , Base58 编译

// 公钥hash,P2WSH 类似(Script)

byte[] test1 = ecKey1.getPubKeyHash();
int n = 3 + test1.length;
byte[] array = new byte[n + 4];
int version = 6;
array[0] = (byte) (version & 255);

System.arraycopy(test1, 0, array, 3, test1.length);
System.arraycopy(Sha256Hash.hashTwice(array, 0, n), 0, array, n, 4);
String addressSegWit = Base58.encode(array);

 

测试数据: 

公钥: 

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

地址: 

p2xtZoXeX5X8BP8JfFhQK2nD3emtjch7UeFm

2、bech32地址格式:

hrp 主网 “bc”  , 测试 “tb”

hrp + "1" + witnessVersion + hash , Bech32 编译

// 必须为压缩公钥

byte[] hash = Utils.sha256hash160(ecKey.getPubKey());
// 转换
byte[] convert = BitcoinCashBitArrayConverter.convertBits(hash, 8, 5, false);
// 增加witnessVersion
byte[] addWitVer = new byte[convert.length + 1];
addWitVer[0] = 0;// version 默认0
// 编译
String address = Bech32.encode("bc", addWitVer);

 

测试数据:

公钥: 025dabd7507f8b1c4041daaabe90111065dc9c05fa63597296cd8895016692e932

地址: bc1qah6ww9skphh8tfccrykwmc63d0cs3cpvlzmeu6

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值