[dlc-dev] DLC Messaging and Networking

Philipp Hoenisch philipp at coblox.tech
Mon Mar 28 00:28:05 CEST 2022

Hi all,

thanks for bringing this up @Thibaut. It's a topic we have been 
discussing internally extensively in the past :)

On 26/3/2022 12:04 am, Thibaut Le Guilly wrote:
> Hi all,
> [...]
> _itchy-sats:_
>  1. Not implemented (or applicable, single maker?)
We have no discovery (yet) but takers can provide a maker's address as a 
runtime argument.

> # Proposal
> My view, which hasn't changed much since I started working on DLC, is 
> that we should try to reuse as much as possible from the LN 
> specifications and infrastructure because:
>   * while they might not be perfect, a lot of people have spent a lot
>     of time on them, and I'm not sure that we can come up with
>     something better,
>   * it feels right to reuse the parts that can be; hopefully there
>     will be other p2p applications on top of bitcoin in the future,
>     and it (I) would be sad to see each application re-inventing a new
>     way of doing things,
>   * if doing DLC over LN, there is no choice.
> That being said, LN specs don't define everything we need and not 
> always work well with DLC. One thing I can think of as an example is 
> node announcements that only get considered valid if they are with a 
> channel announcement. For us we would need to find other ways of 
> protecting from DoS.

In almost all our past projects we distinguished between two types of 
nodes: makers and takers. The makers have something to offer, and the 
takers want to find the "best" suitable offer. What is "best" is 
debatable but one important criteria is that these offers can actually 
be taken, i.e. they are real.

So I think you bring up an important topic: DoS and spam protection: 
this is really hard in a peer2peer network so we decided to split 
discovery up into two parts:

1. Node discovery
2. Order discovery

(1) node discovery: In our case, node discovery means, that makers 
announce their intention to offer something somewhere. Our past projects 
made use of rendezvous nodes [0] or gossipsub [1].

Rendezvous nodes are some form of registry servers where nodes can 
register themselves and gossipsub is a pub-sub protocol on top of gossip.

In our case: the makers registered themselves with the trading pairs 
they want to offer and their connection details at an rendezvous node, 
or broadcast their details via gossip. Note: this announcement does not 
include any offer details which can expire such as rates, amounts, etc.
Takers can connect to these rendezvous nodes or subscribe to the 
gossipsub channels and will receive an up2date list of makers who are 

(2) Order discovery: once the taker has a list of makers they open up a 
connection to each maker. This can either be build by polling, i.e. the 
takers "ask" the maker for the latest offers or it can be a pushed based 
approach where the maker tell the taker whenever their offer has changed.

This allows us to push the "spam" protection to the taker side who can 
build up some form of reputation. E.g. a simple naive approach was to 
cut the connection to a maker from the taker side if an order was not 
"real" and never connect to them again. That way, the makers have an 
incentive to provide only takeable offers.

That being said, rendezvous nodes or gossipsub have their advantages and 
disadvantages (e.g. speed vs central point of failure). If we assume 
that splitting the protocols up in 1) node discovery and 2) order 
discovery makes sense then:

In regards to point Using Bolt #10 for point 1). The question is, would 
you re-use existing LN infrastructure for that? If we were to use it, 
then you would get a list of nodes and you'd need to ask each of them if 
they are offering some sort of DLC products. In a big network, where 
suddenly many nodes come only, you could by accident DoS smaller nodes 
with this.

I guess, we'd need to extend that standard slightly to express what the 
nodes registered at this server have to offer (e.g. pure LN vs DLC-based 

In regards to using BOLT #8 for the transport layer: Am I reading it 
correctly that the maximum size of any Lightning message must not exceed 
65535 bytes? That could be an issue for DLCs no?

> In order to successfully establish a DLC across two different 
> implementations (and without copy pasting contract data), they need to 
> agree on point 3 at the very minimum. While at the moment the specs 
> only mention[1] BOLT #8, I think it would make sense to enforce it.
> For the other points, it's not as critical for implementations to 
> agree, but BOLT #10 to cover point 1 also feels quite natural.
> Then it feels like point 2 and 4 need to be specified somehow, but as 
> long as we agree on the transport layer (again BOLT #8 seems to me 
> like the way to go), there shouldn't be any big hurdle.
> Happy to hear what other people think!
> Cheers,
> Thibaut



[0] rendezvous protocol: 
[1] gossipsub: 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailmanlists.org/pipermail/dlc-dev/attachments/20220328/381219aa/attachment.htm>

More information about the dlc-dev mailing list