That's great news, and many thanks for your demonstration! I'm pretty confident that if segwit activates, sooner or later bitcoinj will by default create wallets with segwit addresses/outputs only. Old wallets will either be migrated (to be decided: on demand, or forcibly), or old wallets will simply not be able to use the lightning network (unless you're willing to implement your option 1 just for that case).
We have to decide on an extension to the BIP32 wallet layout though; guess I'll start a thread about that soon. tl;dr: I'm in favor of option 2. I'm interested in how people on this mailing list think about the Scala language choice you've taken for your work. On 06/29/2017 10:51 AM, Anton wrote: > Hi everyone, > > currently I work on a Lightning network implementation which is intended > to be used on lite clients such as mobile phones, a repo can be found > here: https://github.com/btcontract/lnwallet and also recently I've made > a demo if anyone is interested: https://www.youtube.com/watch?v=yNFfUfyL2xE > > My goals are: > > - build a core Lightning library which is not tied to any specific > wallet or platform and can be reused, related code can be found here: > https://github.com/btcontract/lnwallet/tree/master/app/src/main/java/com/lightning/wallet/ln, > it's a work in progress and a modification of > https://github.com/ACINQ/eclair project where I basically dumb things > down (by not using an Akka actor framework which may be too heavy for > phones, not assuming a locally accessible Core node API is available, > not relaying third party payments for now and so on). It's coming along > nicely and I'm confident it will reach a production ready state sooner > rather than later. > > - build an end-user mobile Bitcoin/Lightning wallet on top of an > aforementioned Lightning library (for Lightning part) and bitcoinj (for > Bitcoin part). This seems like a very convinient and natural solution > since users will be able to at once fund Lightning payment channels > right from their Bitcoin wallet and also fall back to Bitcoin payments > if Lightning is not available for some reason. And this is where some > bitcoinj-specific help is really needed. > > Two things are required for bitcoinj to power a mobile Lightning wallet: > segwit support and ability to create segwit outputs. > Thanks to Jean-Pierre Rupp's work at > https://github.com/bitcoinj/bitcoinj/pull/1334 segwit support is already > here, I use his segwit-enabled modification to create a P2WSH output (as > required by Lightning funding transaction for a payment channel) and it > does work great, as can be seen on a demo video. > > Sadly, this alone is not enough as not only a funding tx should have a > P2WSH output but also all of it's inputs must come from segwit outputs. > This is a problem because currently bitcoinj uses base58 addresses which > produce non-segwit outputs. A funding tx can be created using such > non-segwit outputs but it can be malleated so payment channel can't be > established in a trustless manner, basically it's a show stopper. > > The way I see it, there are two options of getting over this, one > requires no big changes to bitcoinj beyond what is already done but is > quite horrible from UX point of view, the other one requires some deep > changes in bitcoinj: > > Option 1: instead of creating a funding tx directly, we create an > intermediary non-segwit -> P2WPKH tx, then we use it to P2WPKH -> P2WSH > (payment channel output). Pros are: no changes to bitcoinj. Cons are: > doubled fees, doubled confirmation waiting time, implementation > complexities (sending two txs is not atomic, things can happen in the > middle). > > Option 2: add bech32 support to bitcoinj and change it to generate > bech32 addresses instead of base58 addresses in order to get native > segwit outputs. Pros are: Lightning support out of the box, fee > discounts for native segwit txs. Cons are: probably a lot of work and > testing, a breaking change (?) which perhaps should live in a separate > branch, probably something else I haven't thought of. > > Despite implementation complexities associated with the sencond option I > really like it much more since the first one essentially makes users > handle those complexities and I'm not sure they would want to do that, > plus sooner or later bech32 support and address generation will have to > be done anyway. I'm not sure if I can handle all this myself since my > knowledge of bitcoinj if fairly limited and I spend most of my free time > working on Lightning but I'm definitely ready to help with programming > work, especially if the whole process could be split into more or less > clear tasks. > > Please let me know what you think of all this. > > -- > 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 > <mailto:bitcoinj+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout. -- 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.