From rusty at rustcorp.com.au Mon Dec 18 18:40:20 2017 From: rusty at rustcorp.com.au (Rusty Russell) Date: Tue, 19 Dec 2017 05:10:20 +1030 Subject: [Lightning-dev] General questions about channels In-Reply-To: <5A360843.5060706@AndySchroder.com> References: <5A360843.5060706@AndySchroder.com> Message-ID: <878tdzj2wb.fsf@rustcorp.com.au> Andy Schroder writes: > What's the rational for using millisatoshis as the units for lightning > channels? Aren't you going to loose up to 1/2 of a satoshi when the > channel is closed? You can lose up to 0.999 satoshi per in-progress payment, yes. BOLT #3: The amounts for each output MUST be rounded down to whole satoshis. > Is this because it doesn't hurt and you might as well > be open to the opportunity for these sub satoshi transactions, because > if you aren't, you are giving up the opportunity to get accumulated > revenue from many of those small transactions, that could end up being > greater than 1/2 of a satoshi? In practice, payments of less than a few thousand satoshi are impractical, as they cost more than that to spend. Channel closing costs dwarf the gains to be made from cheating, however. > Since millisatoshis is used, is there a maximum channel funding size? Yes, the upper 32 bits must be zero, from BOLT #2: - for channels with `chain_hash` identifying the Bitcoin blockchain: - MUST set the four most significant bytes of `amount_msat` to 0. This gives a maximum HTLC value of .04294967295 BTC, which, back when we started, was about $10. > Is the optional initial push of millisatoshis during the channel > creation there in order to motivate the other party to be willing to > waste their time with the channel creation in the first place? If not, > what's it for? It's for the common case where you want to connect to someone and make a payment immediately. I'm not sure how widely it will be used, though. It's also the only mechanism for the payer to have *zero* funds in channel (ie. below reserve). > In all of the clients that I've looked at, I can't seem to find out how > to define the timeout closing out a channel when someone does not > cooperate. Is there a fixed value for this as part of the protocol? Or > do most clients have a default that they enforce over all channels that > they create? If there's no in-progress payment, there's no reason to close a channel to an unreachable peer, unless you want to abandon the channel and get the funds back. If there is, BOLT #2 has you covered: https://github.com/lightningnetwork/lightning-rfc/blob/master/02-peer-protocol.md#requirements-8 Hope that helps, Rusty.