Hey Rusty,

I was very delighted to read your proposal. But I don't see how you prevent
message spam. If I understand you correctly you suggest that I can
communicate to any node along a path of peer connections (not necessarily
backed by payment channels but kind of only known through channel
announcements of gossip) via onions and these onions which are send within
a new gossip message are not bound to any fees or payments.

Let's assume I just missed some spam prevention mechanism or that we can
fix them. Do I understand the impact of your suggestion correctly that I
could use this protocol to

1.) create a fee free rebalancing protocol? Because I could also attach a
new lightning message inside the onions that would allow nodes without
direct peer connection to set up a circular rebalancing path.
2.) have the ability to communicate with nodes further away than just my
peers - for example to exchange information for pathfinding and / or
autopilots?


With kind regards Rene

Rusty Russell <ru...@rustcorp.com.au> schrieb am Do., 20. Feb. 2020, 10:37:

> Hi all!
>
>         It seems that messaging over lightning is A Thing, and I want to
> use it for the offers protocol anyway.  So I've come up with the
> simplest proposal I can, and even implemented it.
>
>         Importantly, it's unreliable.  Our implementation doesn't
> remember across restarts, limits us to 1000 total remembered forwards
> with random drop, and the protocol doesn't (yet?) include a method for
> errors.
>
>         This is much friendlier on nodes than using an HTLC (which
> requires 2 round trips, signature calculations and db commits), so is an
> obvious candidate for much more than just invoice requests.
>
>         The WIP patch is small enough I've pasted it below, but it's
> also at https://github.com/lightningnetwork/lightning-rfc/pull/748
>
> diff --git a/01-messaging.md b/01-messaging.md
> index 40d1909..faa5b18 100644
> --- a/01-messaging.md
> +++ b/01-messaging.md
> @@ -56,7 +56,7 @@ The messages are grouped logically into five groups,
> ordered by the most signifi
>    - Setup & Control (types `0`-`31`): messages related to connection
> setup, control, supported features, and error reporting (described below)
>    - Channel (types `32`-`127`): messages used to setup and tear down
> micropayment channels (described in [BOLT #2](02-peer-protocol.md))
>    - Commitment (types `128`-`255`): messages related to updating the
> current commitment transaction, which includes adding, revoking, and
> settling HTLCs as well as updating fees and exchanging signatures
> (described in [BOLT #2](02-peer-protocol.md))
> -  - Routing (types `256`-`511`): messages containing node and channel
> announcements, as well as any active route exploration (described in [BOLT
> #7](07-routing-gossip.md))
> +  - Routing (types `256`-`511`): messages containing node and channel
> announcements, as well as any active route exploration or forwarding
> (described in [BOLT #7](07-routing-gossip.md))
>    - Custom (types `32768`-`65535`): experimental and application-specific
> messages
>
>  The size of the message is required by the transport layer to fit into a
> 2-byte unsigned int; therefore, the maximum possible size is 65535 bytes.
> diff --git a/04-onion-routing.md b/04-onion-routing.md
> index 8d0f343..84eff9a 100644
> --- a/04-onion-routing.md
> +++ b/04-onion-routing.md
> @@ -51,6 +51,7 @@ A node:
>      * [Legacy HopData Payload Format](#legacy-hop_data-payload-format)
>      * [TLV Payload Format](#tlv_payload-format)
>      * [Basic Multi-Part Payments](#basic-multi-part-payments)
> +    * [Directed Messages](#directed-messages)
>    * [Accepting and Forwarding a
> Payment](#accepting-and-forwarding-a-payment)
>      * [Payload for the Last Node](#payload-for-the-last-node)
>      * [Non-strict Forwarding](#non-strict-forwarding)
> @@ -62,6 +63,7 @@ A node:
>    * [Returning Errors](#returning-errors)
>      * [Failure Messages](#failure-messages)
>      * [Receiving Failure Codes](#receiving-failure-codes)
> +  * [Directed Message Replies](#directed-message-replies)
>    * [Test Vector](#test-vector)
>      * [Returning Errors](#returning-errors)
>    * [References](#references)
> @@ -366,6 +368,13 @@ otherwise meets the amount criterion (eg. some other
> failure, or
>  invoice timeout), however if it were to fulfill only some of them,
>  intermediary nodes could simply claim the remaining ones.
>
> +### Directed Messages
> +
> +Directed messages have an onion with an alternate `hop_payload`
> +format.  If this node is not the intended recipient, the payload is
> +simply a 33-byte pubkey indicating the next recipient.  Otherwise, the
> +payload is the message for this node.
> +
>  # Accepting and Forwarding a Payment
>
>  Once a node has decoded the payload it either accepts the payment
> locally, or forwards it to the peer indicated as the next hop in the
> payload.
> @@ -1142,6 +1151,11 @@ The _origin node_:
>    - MAY use the data specified in the various failure types for debugging
>    purposes.
>
> +## Directed Message Replies
> +
> +Directed message replies are encoded the same way as failure messages,
> +except the contents is a directed message for the originator.
> +
>  # Test Vector
>
>  ## Returning Errors
> diff --git a/07-routing-gossip.md b/07-routing-gossip.md
> index ec1a8f0..4c2b836 100644
> --- a/07-routing-gossip.md
> +++ b/07-routing-gossip.md
> @@ -1,4 +1,4 @@
> -# BOLT #7: P2P Node and Channel Discovery
> +# BOLT #7: P2P Node and Channel Discovery and Directed Messages
>
>  This specification describes simple node discovery, channel discovery,
> and channel update mechanisms that do not rely on a third-party to
> disseminate the information.
>
> @@ -31,6 +31,7 @@ multiple `node_announcement` messages, in order to
> update the node information.
>    * [HTLC Fees](#htlc-fees)
>    * [Pruning the Network View](#pruning-the-network-view)
>    * [Recommendations for Routing](#recommendations-for-routing)
> +  * [Directed Messages](#directed-messages)
>    * [References](#references)
>
>  ## Definition of `short_channel_id`
> @@ -1103,6 +1104,37 @@ A->D's `update_add_htlc` message would be:
>  And D->C's `update_add_htlc` would again be the same as B->C's direct
> payment
>  above.
>
> +# Directed Messages
> +
> +Directed messages allow peers to use existing connections to query for
> +invoices (see [BOLT 12](12-offer-encoding.md)).  Like gossip messages,
> +they are not associated with a particular local channel.  Like HTLCs,
> +they use [BOLT 4](04-onion-routing.md#directed-messages) protocol for
> +end-to-end encryption.
> +
> +Directed messages are unreliable: in particular, they are designed to
> +be cheap and not to need to be committed to a database (though an
> +implementation may choose to).  Each one has an optional reply, which
> +is [onion encoded](04-onion-routing.md#directed-message-replies) 0just
> +like HTLC errors.
> +
> +## The `directed` and `directed_reply` Messages
> +
> +1. type: 385 (`directed`) (`option_directed_messages`)
> +2. data:
> +    * [`1366*byte`:`onion_routing_packet`]
> +
> +1. type: 386 (`directed_reply`) (`option_directed_messages`)
> +2. data:
> +    * [`sha256`:`onion_routing_packet_hash`]
> +    * [`u16`:`len`]
> +    * [`len*byte`:`reply`]
> +
> +## Requirements
> +
> +FIXME: similar to update_add_htlc and update_fail_htlc.
> +FIXME: define reasonable timeout after which you can forget if not
> replied?
> +
>  ## References
>
>  1. <a id="reference-1">[RFC 1950 "ZLIB Compressed Data Format
> Specification version 3.3](https://www.ietf.org/rfc/rfc1950.txt)</a>
> _______________________________________________
> Lightning-dev mailing list
> Lightning-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
>
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to