BTC隔离见证(3开头)地址离线签名

BTC隔离见证(3开头)地址离线签名(亲测可行)

关于BTC隔离见证(3开头)地址离线签名,貌似相关介绍比较少,主要以理论介绍居多。

所以在这里,我就不再赘述什么是隔离见证地址以及如何完成相关签名的理论部分啦。

如果想快速了解BTC相关资料的,请阅读精通比特币一书,介绍的很好。

只有理论搞清楚了,才能更好地进行代码层面的相关操作。我查阅了一些资料,通过github上一些开源的代码,对其稍加整理。经过BTC主网实际测试,完成了BTC隔离见证(3开头)地址的离线签名功能。

测试的交易hash -> f8f58dec79c6dc0c576f20c89733568facf3cda38a969e0b9ca2b7ed1a97b352

由于没有多少测试币,所以只能按照尽可能低的金额来测试,所幸当前网络不拥堵,否则恐怕是无法打包了!
具体代码实现(java),请大家参考 这里,具体我就不多介绍了,上面都写得很清楚啦~

———————————我是无情的分割线———————————

本着复制粘贴合作分享的原则,根据 bitcoinj 自行总结了一下。
关于bc1开头地址离线签名(附上代码):
注意:本地网络测试ok,主网未完全测试,请自行测试,确保无误!!!

	/**
     * BTC交易离线签名
     *
     * @param from    转账地址 支持 1 3 bc1开头地址
     * @param fromPrk 转账地址私钥 WFI格式
     * @param to      收款地址
     * @param amount  转账数量 单位:聪
     * @param fee     手续费 单位:聪
     * @return
     */
    public static String btcOfflineSignatureAll(String from, String fromPrk, String to, long amount, long fee) {
   
        NetworkParameters networkParameters = RegTestParams.get();
        List<UTXO> utxos = getUnspents(from);
        if (utxos.size() == 0) {
   
            throw new RuntimeException("utxo为空 BTC INSUFFICIENT FEE");
        }
        //组装转账所需的UTXO
        long utxoAmount = 0L;
        List<UTXO> needUtxos = new ArrayList<UTXO>();
        //遍历未花费列表,组装合适的item
        for (UTXO utxo : utxos) {
   
            if (utxoAmount >= (amount + fee)) {
   
                break;
            } else {
   
                needUtxos.add(utxo);
                utxoAmount += utxo.getValue().value;
            }
        }

        //找零 找零金额必须大于等于546聪 否则会视为粉尘攻击
        long changeAmount = utxoAmount - (amount + fee);
        if (changeAmount < 0L) {
   
            log.info("BTC转账地址余额不足 地址={}, 余额={}", from, utxoAmount);
            throw new RuntimeException("BTC INSUFFICIENT FEE");
        }

        //BTC交易构建
        Transaction tx = new Transaction(networkParameters);
        //添加未签名交易输入
        for (UTXO utxo : needUtxos) {
   
            //bc1开头地址 即P2WPKH 交易输入不能加入 Script
            if 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值