-
Notifications
You must be signed in to change notification settings - Fork 266
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Wake up wallet nodes before relaying messages or payments #2865
Conversation
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/ChannelRelay.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/NodeRelay.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/NodeRelay.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/NodeRelay.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/test/scala/fr/acinq/eclair/io/MessageRelaySpec.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/main/scala/fr/acinq/eclair/io/MessageRelay.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/main/scala/fr/acinq/eclair/payment/send/BlindedPathsResolver.scala
Outdated
Show resolved
Hide resolved
6131cff
to
8da0fc6
Compare
89d3a1d
to
b5a8d98
Compare
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/NodeRelay.scala
Outdated
Show resolved
Hide resolved
b5a8d98
to
fa5b437
Compare
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/ChannelRelay.scala
Outdated
Show resolved
Hide resolved
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/NodeRelay.scala
Outdated
Show resolved
Hide resolved
fa5b437
to
fe35e13
Compare
I amended the last commit which contained a bug in |
eclair-core/src/main/scala/fr/acinq/eclair/payment/relay/NodeRelay.scala
Show resolved
Hide resolved
b02d00a
to
3619ce9
Compare
3619ce9
to
e9a67e1
Compare
Rebased without any changes. |
e9a67e1
to
077f2d9
Compare
077f2d9
to
eae11e8
Compare
This commit doesn't contain any logical change, we just move code to align with the FSM flow. It makes it easier to follow the progress of the state machine to always scroll down when advancing states.
We refactor `NodeRelay.scala` to re-order some steps, without making meaningful functional changes. The steps are: 1. Fully receive the incoming payment 2. Resolve the next node (unwrap blinded paths if needed) 3. Wake-up the next node if necessary (mobile wallet) 4. Relay outgoing payment Note that we introduce a wake-up step, that will be enriched in future commits and can be extended to include mobile notifications. The file is now also easier to follow, as steps are done linearly by simply scrolling down.
We allow relaying data to contain a wallet `node_id` instead of an scid. When that's the case, we start by waking up that wallet node before we try relaying onion messages or payments.
e0b538c
to
f4c1354
Compare
Create a dedicated `peer-wake-up` configuration section. This can be enriched with mobile notification sub-sections.
It turns out that we can keep `requestedShortChannelId_opt` and `walletNodeId_opt` as fields of this actor instead of resolving them once and forwarding the value in every function.
This field is used in feature branches, so we include it to minimize the diff.
This commit doesn't contain any changes apart from using a private class to factor common fields of the `PeerReadyNotifier`.
- clean-up `SomePeerConnected` / `SomePeerDisconnected` - include supervision directly inside the actor itself
It can be useful to track pending `PeerReadyNotifier` instances to avoid performing duplicate actions when multiple `PeerReadyNotifier` spawn for the same peer (e.g. sending a mobile notification). When a `PeerReadyNotifier` actor is started, it registers itself into a singleton `PeerReadyManager`, which tells it whether there are other pending attempts for the same peer.
This way we can have `isFirstAttempt` as a class field, which makes sense since this value won't change.
This makes testing easier. We also do small refactorings in the relay actors without any behavior changes.
This PR ports some of the architecture related to wallet wake-up from feature branches to
master
. It should be reviewed commit-by-commit, while comparing to feature branches to get a feel for the changes that will be needed on the feature branches to adapt to this architecture.Note how the
PeerReadyNotifier
can easily be extended to send push notifications to wallet nodes before waiting for an incoming connection from them.