Good morning darosior, ariard, niftynei, and list,

> We could also consider PoDLE as used in JoinMarket, which solves a similar 
> problem.
> https://gist.github.com/AdamISZ/9cbba5e9408d23813ca8#defence-2-committing-to-a-utxo-in-publicplaintext-at-the-start-of-the-handshake
> Basically, a PoDLE commits to a UTXO, without being trivially grindable from 
> the UTXO set and also including a proof that the creator of the PoDLE knows 
> the secret key behind it.
> It can later be opened to reveal which UTXO the opener allocated.
> If the opener aborts (i.e. does not provide its signatures to the funding 
> transaction) then the acceptor can gossip the UTXO and the revealed PoDLE as 
> well to the rest of Lightning, so that the opener at least cannot reuse the 
> same UTXO to probe other potential acceptors.
> (though, my understanding, there is no clear way to determine when we can 
> safely delete old PoDLEs: maybe each node can keep it around for a month, 
> which might be good enough to limit the practical ability of a snoop to probe 
> other nodes)
> I believe JoinMarket also has solved the issue of allowing a UTXO to be used 
> at most N times (for example due to "honest" failures, such as connectivity 
> interruptions which might cause an abort of the protocol); I think it 
> involves appending a single byte to something that is hashed, and ensuring 
> its value is less than N, so that it can only be used from 0 to N - 1 (and 
> thus allow a UTXO to be used at most N times).
>
> Getting into contact with waxwing / Adam Gibson for this might be useful to 
> fill out how PoDLE works and so on; basically, I believe this issue is a 
> practically solved problem already for JoinMarket, though waxwing may be able 
> to provide a more nuanced opinion.

I communicated with waxwing, and he said:

* See also: https://joinmarket.me/blog/blog/poodle \[sic\].
* The counter I mentioned is implemented using the second generator point.
  * The PoDLE construction requires the standard base point `G`, and another 
generator point `J`.
  * To create the generator point `J`, JoinMarket appends the counter byte (the 
one used to limit N number of uses of the same UTXO) to `G`, hashes it, then 
uses a coerce-to-point.
* PoDLE is sometimes called DLEQ elsewhere.
* There is no concrete answer on "when to delete old PoDLE"; JoinMarket never 
deletes (though they might if throughput increases).
* Watermarks like `nLockTime`, `nSequence`, `nVersion` are currently fixed 
values; JoinMarket sees no reason to change this since equal-valued CoinJoins 
are otherwise obvious to chain analysis anyway.
  * But note: JoinMarket implements PayJoin, which is not otherwise obvious 
onchain, and does indeed do anti-fee-sniping emulation for PayJoin.
  * JoinMarket also strives to make similar feerates across users.

In any case, for myself, my thoughts are:

* I observe that our use-case is quite similar to a PayJoin:
  * The opener proposes to make a payment (to a channel between the opener and 
the acceptor, rather than outright giving control to the acceptor as in 
PayJoin).
  * The acceptor adds some UTXOs which will contribute to the payment output 
(i.e. the channel).
  * This probably does mean we want to later consider `nLockTime` 
anti-fee-sniping as well in multi-funded channel opens.
* Speaking of multi-funded channel opens, it seems to me this interactive tx 
construction mechanism as well can be later used for channel factories.
  * Similarly, PoDLE techniques would be useful as well to multi-funded channel 
factories.
* It would probably be a good idea to share PoDLE format with JoinMarket so we 
can share PoDLE with them (there could be bridges that share PoDLE between a 
JoinMarket maker and a Lightning node, and each network already has its own 
gossip protocols, so LN just needs a gossip protocol for sharing PoDLEs as 
well).
* Probably we can mandate in some BOLT spec to retain PoDLE for at least a year 
or a month or two weeks or so, which should be enough to slow down probe 
attempts.

Regards,
ZmnSCPxj
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to