-
Notifications
You must be signed in to change notification settings - Fork 23
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
Funding fee feature #2584
Funding fee feature #2584
Conversation
e39b523
to
279eb4e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work!
/// Update the position after the rollover protocol has ended. | ||
pub fn finish_rollover(conn: &mut SqliteConnection, updated_position: Position) -> Result<()> { | ||
let affected_rows = diesel::update(positions::table) | ||
.filter(positions::state.eq(PositionState::Rollover)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we always assume that there is ever only one position, we might want to consider removing this filter as it would potentially only lead to errors if the position is not in the state we assume it should be.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That makes some sense. Although in theory we could be catching an actual error here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I opened an issue because I think your comment applies to other spots too: #2599.
@@ -370,7 +377,11 @@ impl Node { | |||
"Finished rollover protocol" | |||
); | |||
|
|||
position::handler::set_position_state(PositionState::Open)?; | |||
let position = update_position_after_rollover() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔧 these two updates should probably run within the same database transaction.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I totally agree, but this requires reworking get_positions
, which is used in 11 spots.
The `Position` model should be as strongly typed as possible. Converting to i64 should happen _just_ before inserting into the database.
This server can be used during local development to query the coordinator database conveniently e.g. ``` $ curl http://localhost:3002/dlc_protocols | jq . [ { "id": 1, "protocol_id": "fb4c6f27-db9d-4b2d-8539-6e609e1559b9", "previous_protocol_id": null, "channel_id": "f689230c5477176961301cb22093cfd52050a52356812039f9c298fe8859eba2", "contract_id": "972c5fcafbd6bbbf874a9a5cd44d9ddd05a2e3f3ae96d5bd771e5af1b8cae1a6", "protocol_state": "Success", "trader_pubkey": "02e9f7a0e0d6eeab989dcbb4e91f0bf95f583b09d8d324cc9635807e844eea82bc", "timestamp": "2024-05-13T05:32:36.452958+00:00", "protocol_type": "open-channel" } ] ``` It can also be used in the e2e tests to easily assert on the state of the coordinator, without needing to add dedicated HTTP API endpoints. It might even be used to modify the coordinator state to create interesting test scenarios.
279eb4e
to
9972e55
Compare
The coordinator generates funding fee events as funding rates are added to the database and applies them on rollover. The app displays funding fee events in a dedicated `Trades` tab, together with regular trades. The funding fee events are added as soon as the app learns about them from the coordinator, which is usually before they are resolved. Additionally, the app will update the position after rolling over based on the funding fee events that were resolved with the rollover. Missing bits: - Apply funding fee events on closing and resizing. - Considering funding fee events when deciding if positions need to be liquidated. - Add some unit tests. - Expanding e2e tests. - Add fee rate to app's `Trades` tab. - Display next fee rate in app's `Trade` screen. Co-authored-by: Philipp Hoenisch <[email protected]>
We only support one position at a time at the moment. Co-authored-by: Richard Holzeis <[email protected]>
9972e55
to
3a85bee
Compare
Fixes https://github.com/get10101/meta/issues/330.
Fixes #2535.
Supersedes #2532.
Sorry for the ginormous PR. I tried to build on top of #2532, but too many things changed.
The main patch is c3e5ee8. To be fair, some things do change slightly in the patches that follow that one, so patch by patch review is not ideal. But I think it's good enough.
I think this feature can be deployed if we don't find any flaws, but there are some missing bits: