From e505067759fd39dd8c9cfadbecd2d2c7d3e0a60e Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sun, 21 Feb 2021 12:02:26 +0000 Subject: [PATCH] Added support for Native SegWit (Bech32) addresses, which have the prefixes "ltc1" and "bc1". Bitcoinj supports these automatically, as long as fromString() is used instead of fromBase58(), which is already the case. Tested on LTC mainnet, and BTC testnet. --- .../org/qortal/api/resource/CrossChainBitcoinResource.java | 2 +- .../org/qortal/api/resource/CrossChainLitecoinResource.java | 2 +- src/main/java/org/qortal/crosschain/Bitcoiny.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/qortal/api/resource/CrossChainBitcoinResource.java b/src/main/java/org/qortal/api/resource/CrossChainBitcoinResource.java index 445d853e..efffc3b0 100644 --- a/src/main/java/org/qortal/api/resource/CrossChainBitcoinResource.java +++ b/src/main/java/org/qortal/api/resource/CrossChainBitcoinResource.java @@ -113,7 +113,7 @@ public class CrossChainBitcoinResource { @Path("/send") @Operation( summary = "Sends BTC from hierarchical, deterministic BIP32 wallet to specific address", - description = "Currently only supports 'legacy' P2PKH Bitcoin addresses. Supply BIP32 'm' private key in base58, starting with 'xprv' for mainnet, 'tprv' for testnet", + description = "Currently supports 'legacy' P2PKH Bitcoin addresses and Native SegWit (P2WPKH) addresses. Supply BIP32 'm' private key in base58, starting with 'xprv' for mainnet, 'tprv' for testnet", requestBody = @RequestBody( required = true, content = @Content( diff --git a/src/main/java/org/qortal/api/resource/CrossChainLitecoinResource.java b/src/main/java/org/qortal/api/resource/CrossChainLitecoinResource.java index 9c841045..13803143 100644 --- a/src/main/java/org/qortal/api/resource/CrossChainLitecoinResource.java +++ b/src/main/java/org/qortal/api/resource/CrossChainLitecoinResource.java @@ -113,7 +113,7 @@ public class CrossChainLitecoinResource { @Path("/send") @Operation( summary = "Sends LTC from hierarchical, deterministic BIP32 wallet to specific address", - description = "Currently only supports 'legacy' P2PKH Litecoin addresses. Supply BIP32 'm' private key in base58, starting with 'xprv' for mainnet, 'tprv' for testnet", + description = "Currently supports 'legacy' P2PKH Litecoin addresses and Native SegWit (P2WPKH) addresses. Supply BIP32 'm' private key in base58, starting with 'xprv' for mainnet, 'tprv' for testnet", requestBody = @RequestBody( required = true, content = @Content( diff --git a/src/main/java/org/qortal/crosschain/Bitcoiny.java b/src/main/java/org/qortal/crosschain/Bitcoiny.java index c3fecb4d..0fe508a2 100644 --- a/src/main/java/org/qortal/crosschain/Bitcoiny.java +++ b/src/main/java/org/qortal/crosschain/Bitcoiny.java @@ -98,8 +98,9 @@ public abstract class Bitcoiny implements ForeignBlockchain { try { ScriptType addressType = Address.fromString(this.params, address).getOutputScriptType(); - return addressType == ScriptType.P2PKH || addressType == ScriptType.P2SH; + return addressType == ScriptType.P2PKH || addressType == ScriptType.P2SH || addressType == ScriptType.P2WPKH; } catch (AddressFormatException e) { + LOGGER.error(String.format("Unrecognised address format: %s", address)); return false; } }