Once these messages are handled by dedicated actors, this will reduce
the amount to runtime errors a la "this message should be handled by
someone else".
See #696.
Instead of passing the whole HashMap to the projection actor, only send what has
actually changed.
Provide separate messages to update settlement proposal and roll over proposals,
as they will be sent from different actors.
```
2021-11-30 16:39:33 INFO daemon::logger: Initialized logger
2021-11-30 16:39:33 INFO taker: Running version: 0.1.2-11-g09cfe03
```
instead of
```
2021-11-30 14:33:14 INFO Initialized logger
2021-11-30 14:33:14 INFO Running version: 0.1.1-367-gcbc42b6
```
Makes it way easier to interpret logs because we have context who logged what.
Move the logic of creating Cfd representation suitable for UI into the
projection actor
For the time being, keep the logic as free functions that are still used in the
"old" way (inside ToSseEvent)
This is to avoid going on chain in a scenario where one party finished the rollover, while the other party ran into a timeout after send-/receiving the last message for the revoke-commit.
This is to avoid going on chain in a scenario where one party sent the signed lock transaction, but did not get the signed transaction from the other party before running into the timeout.
With this solution, we fail the setup (on either side) if we don't receive an acknowledgment message at the end of the setup.
The acknoledge message is a temporary fix.
Once we add monitoring for incomplete DLCs (special case of contract-setup / rollover / collaborative-settlement failing) the ack message should be removed.
As we do not process messages concurrently, heartbeat messages are not processed
during lengthy operations, such as contract setup.
The spam in the amount of commit messages is a bit unfortunate, but only failing
tests on various machines can indicate that the timing might cause issues.
Either of the roles has to record the outcome of the setup, which should be the same for them.
In order to handle this in our event model we need `Completed` in the model so it is not role specific.
The dirty shutdown we observed were caused by the sqlite pool patiently waiting
until we close the connection we've opened in the application setup.
This is turn was eventually triggering Rocket timeout (which is by default
configured to wait 5s for cleanup).
Tighten the scope of connections needed during application startup only to the
necessary minimum (housekeeping & loading cfds at startup)
Originally we thought we need this enum because we would need to use
`MessageChannel`s from the rocket layer. But we can actually fully
qualify the address without issues.
We also introduce `xtra_productivity` to remove some of the indirection
that is happening in this file.
Note: Projection actor is used across both taker and maker, so it really should
publish information about connected counterparty.
Taker should use that channel for deriving maker online status.
Oracle event-id and Dlc have to exist together, one without the other is incomplete, hence we move the event id inside.
Note that the ID is actually already know to the Dlc as part of the `cet` hashmap, but this was not cleaned up in this patch.
This patch goes towards getting the model boundaries right to transition the architecture towards an event model.
Instead of blocking and awaiting for connection to maker before the start, spawn
the connection attempt in a separate task that will also attempt to reconnect if
the maker goes offline.
Extend the unit test to cover the new behaviour.
Do not shutdown the taker upon connection loss anymore.
Co-authored-by: rishflab <rishflab@hotmail.com>