Good morning list,
I do not see much point in using miniscript for Lightning unless we decide to
support transporting arbitrary contracts, as here:
https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-August/001383.html
Otherwise, it would be far easier implementation-wise, to just have
carefully-coded SCRIPT to transport HTLCs.
It would even be possible, to write it in miniscript and compile it once, then
debate endlessly on how to improve the output of the miniscript compiler, on
the principle that all that a human-level or higher intelligence needs, to beat
a compiler, is to make a single improvement to the compiled output.
On the other hand, if we *were* to support arbitrary contracts over payment
channels, we should note:
* Very few contracts are "routable" (only HTLCs and DLCs come to mind, and
various HTLCs-yielding-HTLCs constructions) over the network.
* Supporting arbitrary routing would be a massive massive massive headache as
forwarding nodes need to have some assurance they can claim the incoming if the
outgoing is claimed, or similar.
* While miniscript is more amenable to programmatic analysis, I do not know
what property needs to be actually proven in order to prove that contracts can
be forwarded somehow.
* Any absolute timelocks on the contract will imply that the hosting payment
channel (and channel factory, for that matter) has a lifetime up to the
timelock.
* This should be easy to extract from the miniscript.
* This is needed as the payment channel cannot actually enforce time, only
the blockchain layer can, thus enforcement of the timelock can only be done
onchain.
* For Decker-Russell-Osuntokun, the channel unilateral close needs to be
started *before* the absolute timelock, with the channel security parameter of
the CSV-delay before the absolute timelock.
For Poon-Dryja the channel unilateral close can be done on the block before
the absolute timelock (or some more blocks before that as a safety margin).
* Any contract will automatically get a `|| (A && B)` appended to it, where `A`
and `B` are the channel counterparties.
* This is simply the right of all participants to agree to ignore the
contract and settle it by other means, as in Smart Contracts Unchained:
https://zmnscpxj.github.io/bitcoin/unchained.html
* Consider how `update_fail_htlc` works: the HTLC does not explicitly contain
a clause by which it can simply be "failed" other than by the timelock branch.
Yet `update_fail_htlc` does not require waiting for the timelock to arrive.
* This is simply the fact that the payment channel can be updated such that
the contrract is deleted outright, with the contract funds reallocated in any
way that both participants agree.
Of note is that a miniscript compiler would be quite useful if we were to
support arbitrary contracts over Poon-Dryja channels.
This is because, as I pointed out in the linked post, there is a need to add
the condition `&& (A && B) || (revoke)` to the contract in order to ensure that
the transaction first pays out to a revocable output with an `nSequence`
restriction.
The addition of these extra conditions would be trivial with miniscript, and
the miniscript-to-SCRIPT compiler could potentially optimize away the extra
conditions, if a Sufficiently Smart Compiler (TM) for miniscript is developed.
Of course, under Decker-Russell-Osuntokun (which is what triggered this thread
initially anyway), the additional conditions on the arbitrary contract are
unnecessary and all that is needed is to analyze the contract for absolute
timelocks.
Forwardability of arbitrary contracts is more difficult to prove; I cannot
imagine how it can be done.
But surely it would be possible, my untrained intuition subroutine reports.
Regards,
ZmnSCPxj
Sent with ProtonMail Secure Email.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Thursday, September 5, 2019 12:04 AM, Antoine Riard
<[email protected]> wrote:
> Hello all,
> Didn't listen to Pieter Wuille interview, so don't know how he was thinking
> to use miniscript for lightning.
> But currently in lightning all our scripts are templates, a use of a
> miniscript compiler would be to find optimized bitcoin scripts for a given
> policy which model the channel and then hardcode them in lightning backend.
> The other use I can see would be to use miniscript to write customizable
> conditional-payment than our basic HTLCs, real hurdle would be to implement
> on-chain monitoring and resolution right.
> Not sure how Eltoo fit into it as it's a sighash extension to get a new
> update mechanism, miniscript seems more tailored for the transfer layer.
>
> Regards,
> Antoine
>
> Le mer. 4 sept. 2019 à 08:53, Bastien TEINTURIER <[email protected]> a écrit :
>
> > Good morning Richard,
> >
> > This is an interesting initiative, I'm curious to see the results!
> > I know we haven't worked on any Eltoo implementation yet at Acinq and I
> > don't know if others have attempted it.
> >
> > However I have a very open question that may impact your project.
> > I'm starting to look at miniscript [1] (still a total noob though) and
> > listened to an interview where Pieter Wuille briefly mentioned that using
> > miniscript for lightning may be more future-proof and extensible than
> > directly using bitcoin script.
> > Have you considered first re-writing the Eltoo scripts with miniscript? Or
> > did someone else on this list attempt this already?
> > Do people on this list have opinions on whether that is the right direction
> > for Eltoo scripts (and maybe even for Bolt 1.x scripts if any_prevout never
> > makes it to Bitcoin scripts)?
> >
> > Cheers,
> > Bastien
> >
> > [1] http://bitcoin.sipa.be/miniscript/
> >
> > Le mer. 4 sept. 2019 à 13:20, Richard Myers <[email protected]> a écrit :
> >
> > > Hi All,
> > >
> > > To better understand how the eltoo update scheme (
> > > https://blockstream.com/eltoo.pdf ) works in practice I implemented eltoo
> > > in the Bitcoin functional test framework. These simulations exercise a
> > > concrete implementation of the eltoo Bitcoin scripts and explore the data
> > > flow between nodes that use eltoo to update their channel state.
> > >
> > > My motivation for creating these tests is to have a framework for both
> > > understanding and refining the Bitcoin scripts and message passing
> > > protocol for eltoo. I’d love to hear what people think of my initial
> > > implementation.
> > >
> > > This simulation uses a fork of Bitcoin with cdecker’s SIGHASH_NOINPUT
> > > patch applied to the signet2 fork fjahr created with patches applied for
> > > signet (kallewoof), taproot (sipa) and anyprevout* (ajtowns).
> > >
> > > https://github.com/remyers/signet2/blob/eltoo/test/functional/simulate_eltoo.py
> > >
> > > Next steps:
> > >
> > > - add bidirectional channel updates
> > >
> > > - derive public keys for settle transactions from a pre-shared basepoint
> > >
> > >
> > > Does anyone know of any other eltoo implementations? I’d love to compare
> > > notes and get the ball rolling on a detailed specification.
> > >
> > > Special thanks to the Chaincode Summer Residency and Christian Decker for
> > > their helpful advice and encouragement while I worked on this project.
> > >
> > > -- Richard
> > >
> > > _______________________________________________
> > > Lightning-dev mailing list
> > > [email protected]
> > > https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
> >
> > _______________________________________________
> > Lightning-dev mailing list
> > [email protected]
> > https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
_______________________________________________
Lightning-dev mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev