I'm happy to announce that current master now has full support for sending to native Segwit addresses (BIP173).
For app developers who depend on bitcoinj, not much should change. However, there are some API differences: The Address class now has two subclasses: SegwitAddress and LegacyAddress. Most of the bitcoinj API continues to use the Address class so it is already prepared for further coming segwit changes. If you need to parse addresses (e.g. from user input), you need to change the previous Address.fromBase58() to - Address.fromString() if you want your app to understand all address types. - LegacyAddress.fromBase58() if for some reason you want your app to stay limited to legacy addresses. - SegwitAddress.fromBech32() if your app should only support native segwit addresses. If you're still using the new Address() constructor you need to migrate to any of the available static constructors, including the above. All address constructors are now either deprecated or have been made private. If you are using address.toBase58() that method only exists for addresses of type LegacyAddress. You should consider using toString() in future, which supports Bech32 just as it has supported Base58. Very similar: use address.getHash() rather than getHash160(). AddressFormatException now has several new subclasses to make the kind of error more clear: - AddressFormatException.InvalidCharacter (the invalid char and its position in the string is available as fields) - AddressFormatException.InvalidDataLength - AddressFormatException.InvalidChecksum - AddressFormatException.InvalidPrefix (prefix means either version header for Base58 or human-readable part for Bech32) - and the already existing AddressFormatException.WrongNetwork if you expect a certain network but the prefix indicates another one Transaction.toString() and Wallet.toString() now also print the types of output scripts and 'to address' for each transaction output. Let me know how converting your app for Segwit addresses worked for you. Feedback welcome! Some words about the future: I already experimented with *receiving* coins to Segwit addresses. It's already working, no further changes (e.g. to bloom filters) necessary! However, be warned: you are not able to spend such coins so they will be stuck in your wallet. At least on master, there is no support for the new transaction format (incl. witnesses) and signing. I'll try to extract the necessary changes from the segwit branch, but if somebody is quicker please beat me at it! P2SH-P2WPKH: I'm not sure if we should invest much time into this. You can of course send to P2SH since ages (v0.11), so sending to P2SH-P2WPKH already works in all relevant released versions of bitcoinj. When it comes to receiving, I'm playing with the thought of skipping P2SH-P2WPKH and directly go for native Segwit. Electrum has taken this approach too. -- You received this message because you are subscribed to the Google Groups "bitcoinj" group. To unsubscribe from this group and stop receiving emails from it, send an email to bitcoinj+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.