Commit Graph

52 Commits

Author SHA1 Message Date
Ali Behjati 245cc231fd refactor(hermes): improve logging 2023-12-11 18:54:55 +01:00
Ali Behjati 93e9c49b60 fix(hermes): handle price feed removal properly 2023-12-07 18:20:31 +00:00
Ali Behjati d07579e0a6 feat(hermes): only return unique price updates on get_* methods 2023-10-27 17:01:42 +02:00
Ali Behjati 6215460613 fix(hermes): fix metrics content-type
Openmetrics specification expects its own content-type instead of plain
text. I didn't set it before as Prometheus still accepts text format but
apparently there are some scrapers (like datadog) that decide
dynamically what format to use for parsing based on the content type and
our format follows Openmetrics specification. Prometheus should be able
to parse it but weirdly it didn't work in our situation. An example of
inconsistency is how counters are represented. In Openmetrics
specification the metric name is appended by `_total` whereas normal
prometheus just uses the metric name.
2023-10-20 13:16:11 +02:00
Ali Behjati 6db59ff6d1 fix(hermes): correct the metrics server env var 2023-10-19 12:46:38 +02:00
Ali Behjati 9da64103db feat(hermes): add metrics
Co-authored-by: Reisen <Reisen@users.noreply.github.com>
2023-10-18 15:04:10 +02:00
Ali Behjati d11216f309 feat(hermes): use ip from request headers for ratelimiting 2023-10-13 13:26:48 +02:00
Ali Behjati bb922c3a17 fix(hermes): add lock for the entire message state
Before this change, there was a lock for each message and it could
cause the updateData for multiple ids have 2 updates (because of the
race with the thread updating the states). This change adds a RwLock
which makes sure that when the entire message state is updating,
no one can read from it while allowing concurrent reads in other
occasions.
2023-10-11 19:01:42 +02:00
Ali Behjati 0c25fccce5 chore(hermes): update wormhole config 2023-10-09 18:39:53 +02:00
Reisen 71307a1baa chore(hermes): bump to version 0.3.0, backwards incompatible CLI features/run mode 2023-10-09 09:14:12 +01:00
Reisen 2c0413dce4 feat(hermes): move to wormhole gRPC from p2p 2023-10-09 08:56:59 +01:00
Ali Behjati 1a64d58834 patch(hermes): improve ws reliability
- Add max message size for incoming messages
- Add sent message rate limit and ip whitelisting
2023-10-05 16:00:48 +02:00
Ali Behjati 916d9463b2 chore(hermes): bump major version 2023-09-28 17:16:54 +02:00
Ali Behjati 9714a851eb feat(hermes): Check price ids exist before each request
This check will make rejects faster (and block invalid requests
to benchmarks). The other benefit is that we can log the
errors from the get_price_feeds_with_update_data since it should
not fail anymore.
2023-09-28 11:10:51 +02:00
Reisen 26b8dcdea9 refactor(hermes): move to clap_derive 2023-09-25 13:22:10 +01:00
Ali Behjati f41cf822ff feat(hermes): drop additional signatures from VAAs
Co-authored-by: Reisen <Reisen@users.noreply.github.com>
2023-09-22 18:17:10 +02:00
Ali Behjati 6d3579ea7d feat(hermes): add xlabs bootstrap 2023-09-21 14:01:57 +02:00
Ali Behjati 272dbef9b3 fix(hermes): fix slot metadata bug 2023-09-20 11:37:05 +02:00
Ali Behjati 5e45146acb feat(hermes): add out of order subscription
Also improve the readiness probe

Co-authored-by: Reisen <Reisen@users.noreply.github.com>
2023-09-19 15:54:33 +02:00
Reisen 263b80b1f7 refactor(hermes): introduce CacheStore 2023-09-19 13:08:11 +02:00
Ali Behjati 518ab13e03 refactor(hermes): use tokio sync primitives in p2p 2023-09-08 16:17:06 +02:00
Ali Behjati ed505d9e53 fix(hermes): improve tracing logs
- Add EnvFilter to respect RUST_LOG
- Disable ANSI if stderr is not a terminal
2023-09-05 19:12:14 +02:00
Reisen 860178f057 feat(hermes): add tracing 2023-09-05 13:50:20 +01:00
Reisen 0559b45936 feat(hermes): add datadog profiling 2023-09-01 11:58:43 +01:00
Reisen ac8895cada ci: bump hermes version 2023-08-28 12:18:43 +02:00
Ali Behjati 0682cc9b67 fix(hermes): handle rare cases on update data
Fix hermes construct_update_data to support generating update_data
for more than 255 messages. This is very unlikely to happen in normal
cases but the way WS <> store interact can cause this to happen when
a WS client subscribes to all price feeds.
2023-08-17 18:30:39 +03:30
Ali Behjati f36bd21f31 fix(hermes): handle non-existent ids on ws 2023-08-12 15:19:34 +03:30
Ali Behjati 1ed8b673f9 fix(hermes): use compatible ws format as xc-server 2023-08-09 12:57:18 +03:30
Ali Behjati 04b31f17c5 fix(hermes): send close message on WS closure
Some WS clients were receiving "Abnormal Connection Closure" errors.
This commit fixes the issue by sending specific close message upon
receiving close message from client. This commit also refactors the
ws.rs code by making it simpler and using tokio::time::Interval
instead of a manually implemented interval. Lastly, it updates the
axum package to include newer patches.
2023-08-08 18:57:06 +03:30
Jayant Krishnamurthy 99f1b6e950
[hermes] Finish up docs (#1002)
* docs

* stuff

* comment
2023-08-03 09:24:31 -07:00
Jayant Krishnamurthy 61e29ac166
[hermes] add utoipa for API docs (#990)
* [hermes] add utoipa for docs

* fix build

* format
2023-07-27 11:29:56 -07:00
Ali Behjati c1517349f8
test(hermes): add tests for store (#985) 2023-07-27 12:28:12 +03:30
Ali Behjati ec6378676c chore(hermes): version bump 2023-07-26 12:23:12 +03:30
Ali Behjati 4fba5d4f1b chore(hermes): update crates 2023-07-26 12:23:12 +03:30
Reisen 8c342c2ae0 fix: bump cargo and go versions to fix memory/compile issue 2023-07-21 16:56:46 +01:00
Ali Behjati 96cb221a3a
[hermes] Fix concurrency issue (#925) 2023-06-28 12:30:06 +02:00
Ali Behjati d07cc9d1ea
[hermes] Add storage tests + refactor (#907)
* [hermes] Add storage tests + refactor

* Bump pythnet_sdk version + update cosmwasm

* Address review feedbacks
2023-06-22 14:38:56 +01:00
Ali Behjati b596090bd8
[hermes] Switch to message structs in pythnet_sdk (#897) 2023-06-19 18:21:39 +02:00
Ali Behjati 4c2dfad755
[hermes] fix cors bug (#896)
* Fix cors policy error

* Bump version

* Remove unused dependencies
2023-06-19 17:15:12 +02:00
Ali Behjati f394d9e761
[hermes] Fix memory leak (#881) 2023-06-13 17:11:47 +02:00
Ali Behjati 3a1b2a36b3 Address comments 2023-06-05 15:19:48 +01:00
Ali Behjati 4fa9304b4f Move Message type extensions to pyth-client 2023-06-05 15:19:48 +01:00
Ali Behjati 9dd1520a25 Small refactor 2023-06-05 15:19:48 +01:00
Reisen 065fba29b1 feat: correct wire format definitions 2023-06-05 15:19:48 +01:00
Reisen a1dff0f5ac feat: add serializers for pyth formats
feat: use pythnet serialization in hermes

Fix vaa validation

Clippy

Update config names

Wrap Store with Arc

Store works perfectly without Arc as all it's elements are behind an Arc
or something similar to that, however a developer might make
mistake to add a field and missing it.

Improve error handling

Update metadata struct

Add metadata

Update Eth listener

Pin wormhole to a version

Fix ws dispatcher

fix: blocking in go recv corrupts tokio runtime

Make network <> store message passing non-blocking

Update logs and revert debug changes
2023-06-05 15:19:48 +01:00
Ali Behjati 8aeef6e6bd Add vaa verification 2023-06-05 15:19:48 +01:00
Ali Behjati d70119c067 Use pyth-oracle types 2023-06-05 15:19:48 +01:00
Ali Behjati 05bd9b4be7 Use wormhole sdk 2023-06-05 15:19:48 +01:00
Ali Behjati 866eace744 Add initial version 2023-06-05 15:19:48 +01:00
Ali Behjati 32596d5d4e
[hermes] Add more rest api methods (#746)
* [hermes] Add more rest api methods

Add many of the price service apis. Per David suggestion, we do
validation in parsing instead of doing it later. I didn't find
any suitable library to deserialize our hex format so I created
a macro to implement it because we use it in a couple of places.
I tried making a generic HexInput but couldn't make it working
(and I need other crates like generic_array for it which makes
the code more complex)

* Address feedbacks
2023-04-18 17:20:11 +02:00