Commit Graph

336 Commits

Author SHA1 Message Date
Jędrzej Stuczyński e5afd54ce0 Feature/node status api (#680)
* Basic storage stub

* New models for new node status api

* Route handling

* Mounting new routes

* Missing selective commit

* Moved network monitor related files to separate package

* Starting to see some sqlx action

* Schema updates

* Log statement upon finished migration

* Removed old diesel related imports

* Converted mixnode cache initialisation into a fairing

* Moved cache related functionalities to separate package

Also defined staging there

* Created run method for validator cache + removed unwrap

* Removed old node-status-api types and left bunch of todo placeholders in their place

* Fixed managing validatorcache

* Status reports are starting to get constructed

* Submitting some dummy results to the database

* Removing duplicate code for generating reports

* Removed statuses older than 48h

* Initial attempt at trying to obtain reports for all active nodes

* Removed duplicates from the full report

* Grabbing uptime history

* Updating historical uptimes of active nodes

* Updated sqlx-data.json

* Removed all placeholder foomp owner values

* Changed Layer serde behaviour for easier usage

* Extended validator api config

* Initial (seems working !) integration with network monitor

* Added database path configuration to config

* Using ValidatorCache in NetworkMonitor

* Flag indicating whether validator cache has been initialised

* Introduced a locla-only route for reward script to perform daily chores

* Flag to save config to a file

* Moved spawning of receiving future to run method rather than new

* Removed arguments that dont make sense to be configured via CLI

* Removed dead code from config file

* More dead code removal

* Added validator API to CI

* Corrected manifest-path arguments

* Constructing network monitor by passing config

* Combined validator API CI with the main CI file

* Using query_as for NodeStatus

* Checking if historical uptimes were already calculated on particular day

* Making id field NOT NULL

* More query_as! action

* Updated sqlx-data.json

* Removed unused chrono feature

* Renamed the migration file

* Changed default validator endpoint to point to local validator

* Removing unnecessary clone

* More appropriate naming

* Removed dead code

* Lock file updates

* Updated network monitor address in contract code

* Don't stage node status api if network monitor is disabled

* cargo fmt

* Updated all license notices to SPDX
2021-07-19 14:02:47 +01:00
Jędrzej Stuczyński 25d2af3b04 Changed Layer serde behaviour for easier usage (#686) 2021-07-16 16:23:41 +01:00
Bogdan-Ștefan Neacşu 973c30592f Use cached topology for clients (#674)
* Add validator-api common client

* Call validator-api from different clients for gateway topology

* Call validator-api from different clients for mixnode topology

* Use consts for the validator-api queries

* Rename the new query_validator function to query_validator_api

* Add mut to mixnode validator client

* Add refreshValidatorAPIGateways as a way to get the gateways...

... from validator-api

* Add refreshValidatorAPIGateways as a way to get the mixnodes...

... from validator-api

* Add yet another mut

* Change the port to validator-api service when querying the topology

* Add parsing check on the config phase...

... to make sure the validator URLs are in the correct format.

* Fix another clippy error

* Use all provided validators instead of just the first one

* The mutable reference was not actually needed, so remove it

* Use global variable for validator-api port

* Use url crate for checking the format and changing the port

* Use URL for parsing and move constants of validator-api to index.ts...

... until we find a way to link to the values from the validator-api
crate.

* Change global variables naming and have the API version into each API query

* Revert the changes to the index on connect...

... as they were working correctly before.

* Use all provided validators for mixnodes as well

* Remove location and layer
2021-07-09 11:50:41 +01:00
Jędrzej Stuczyński 8f98de4abc Feature/validator api config (#671)
* Modified NymConfig trait to make id optional

* Basic validator-api config definition

* Optionally using the config during startup + flag to enable monitoring
2021-07-05 13:48:55 +02:00
Drazen Urch 3aafe54887 Remove mut where possible, parallel cache requests (#668) 2021-07-02 10:50:49 +02:00
Drazen Urch f08f19cd86 Rework validator client requests (#667)
* Rework validator-client to avoid &mut

* Comment

* More logging, sleep

* Fix wasm build

* My clippy missed this
2021-07-01 20:05:29 +02:00
Bogdan-Ștefan Neacşu 57df77a995 Layer selection (#664)
* mixnode: Remove layer computation from mixnode

The layer is currently computed locally. This should be moved to
the validator, and the mixnode should find this information via
a query. Until the query is actually processed, we keep the layer
field as None.

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* contracts: Compute layer of bonding mixnode

Predictably compute the best layer of a bonding mixnode by putting it on
the layer with the fewest mixnodes and, in case of equality, with the
smallest index e.g. layer 1 is better then layer 3 if both have
the fewest mixnodes.

The layer received from the client app is regarded as a preferred option
and is only accepted if the number of nodes on the preferred layer is not
bigger then the one on the best layer.

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* contracts: Add tests for layer selection

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* mixnode: Upgrade from 0.10.2 to 0.10.3

The config file is changed so that it's only containing the layer if
the layer exists.

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* contracts: Move the layer from MixNode to MixNodeBond

Remove the option of a client app to propose a preferred
layer.

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* contracts: Move from u64 to Layer representation

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* contracts: Remove Layer::Invalid as it no longer makes sense...

... because layer choice is now present only in the contract.

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* contracts: Move layer selection algorithm in `choose_with_fewest` method

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* mixnode: Remove layer altogether

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* mixnode: Refactor upgrading system

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* mixnode: Remove layer from template as well

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>

* Remove invalid field from LayerDistribution

Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>
2021-07-01 17:56:57 +03:00
Drazen Urch 343c55f981 Validator API server (#665)
* Rocket main stub

* Add anyhow

* Stub cache reads and writes

* Finalize stubs

* Add generic Rocket.toml

* Put back targets

* Have cache own its validator client

* allow dead code

* Update rocket.toml for 0.5
2021-07-01 14:08:04 +02:00
Jędrzej Stuczyński 2bdee705b7 Feature/total delegation field (#660)
* Changed bond Vec<Coin> into a Coin

* Introduced total_delegation field to bond models

* Restoring total old delegation

* Updating total delegation on new delegations

* Updating total delegation on removal

* Keeping track of delegation increase during rewarding

* Updating total delegation during rewarding + additional response attributes

* Removed irrelevant tests

* Fixed storage-related tests

* Added additional test assertions for delegation increase

* Added additional node rewarding test assertions

* Tests for correct reward calculation + gateway rewarding early termination

* Added delegation field to parsed node type

* Updated typescript bond types

* Moved `OLD_DELEGATIONS_CHUNK_SIZE` to file-wide namespace so that it could be used in tests

* Tests for finding old node delegations

* ibid.

* Issue#657

* Additional test assertions regardingn total delegation

* Missed test field after merge

* ibid

* Cleaning up storage related imports
2021-06-29 11:29:51 +01:00
Drazen Urch 31f567f1ef Use thiserror for validator-client (#658)
* Use thiserror for validator-client

* cargo fmt

* Move comment

* CI
2021-06-29 10:01:44 +02:00
Bogdan-Ștefan Neacșu a82ac9c50d contracts: Removed mixnode location from the bonding process
Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>
2021-06-28 15:10:57 +03:00
Jędrzej Stuczyński f0fafe97fe Using verloc with custom ports 2021-06-23 16:08:48 +01:00
Jędrzej Stuczyński 9df360cf63 Removed constructors only used in tests
To elaborate further, to update Mixnode constructor it would require adding yet two more arguments and at that point the compiler warns about too many arguments
2021-06-23 16:08:27 +01:00
Jędrzej Stuczyński 035ee3a402 Added new ports to bond model 2021-06-23 16:04:21 +01:00
Jędrzej Stuczyński 4c8f8ff1b6 Renamed 'rtt_measurement' to verloc to avoid confusion 2021-06-23 15:38:52 +01:00
Jędrzej Stuczyński 53253d443c Further missing test adjustments 2021-06-23 12:58:24 +01:00
Jędrzej Stuczyński 07f2f9c39e Fixed mixnet contract test fixtures 2021-06-23 12:46:38 +01:00
Jędrzej Stuczyński a6be3e763f Spliting host into explicit address and port(s) 2021-06-22 16:39:07 +01:00
Jędrzej Stuczyński 08964f8775 Introduced type alias for IdentityKey reference 2021-06-18 12:32:13 +01:00
Jędrzej Stuczyński dff7a8976a cargo fmt 2021-06-18 12:15:34 +01:00
Jędrzej Stuczyński 50fbe55be9 Missing imports 2021-06-18 12:01:29 +01:00
Jędrzej Stuczyński 648543e536 Merge branch 'feature/cosmwasm-0.14.0-update' into feature/cosmwasm-0.14.1-update 2021-06-18 11:59:45 +01:00
Jędrzej Stuczyński 3d2654923a Bugfix/delegation type fixes (#649)
* Extended no delegation found errors with address information

* Error now use Display implementation rather than Debug

* Delegation correctly contains owner address

* Updated js delegation type

* Bumped validator client version number

* Delegation::owner returns owned type

* cargo fmt
2021-06-17 10:51:50 +01:00
Jędrzej Stuczyński d03798629c Introduced type aliases for mixnode and gateway keys (#650)
* Introduced type aliases for mixnode and gateway keys

* Ibid for error types

* Ibid for tests
2021-06-17 09:01:41 +01:00
Jędrzej Stuczyński 164c8ad05c Feature/reverse contract mapping (#640)
* WIP

* One fewer todos

* Migrated transactions,queries + query tests

* Transaction-related tests restored

* Import cleanup

* Initial draft of the migration procedure

* Future migration test

* Fixed rust compilation errors

* Unbonding no longer requires explicit identity

* Delegation API changes

* Fixed incorrect gateway delegation object
2021-06-14 17:55:41 +01:00
Jędrzej Stuczyński 1fb26b68c6 Feature/delegated staking (#635)
* Initial delegation

* Queries for delegation

* Validation + delegation tests

* Removing delegation tests + fixes

* Tests for query related functions

* Adjusted delegation queries page limits

* Added delegation queries to validator client

* Methods for delegation inside validator client

* Some comments

* missing return types

* Post merge fixes

* Rewarding mix delegations

* Renaming

* Moved storage keys around

* Gateway delegation

* ibid

* Removed needlessly commented lines
2021-06-10 12:55:58 +01:00
Jędrzej Stuczyński 29fd8b8805 Chore/clippy nightly fixes (#636)
* Removed needless borrow in upgrade args matches

* Pathfinder needless borrows

* cmp needless borrow

* Network monitor needless borrows

* Topology control needless borrows

* Received buffer needless borrow

* Key manager needless borrows

* Network requester needless borrow

* Gateway client needless borrow

* Gateway requests needless borrow

* Nymsphinx needless borrows

* verloc needless borrows

* Socks5 needless borrow

* Clone on copy type
2021-06-07 14:52:11 +01:00
Jędrzej Stuczyński 82def1349f Feature/stats endpoint (#631)
* Idea for stats endpoint

* Introduced /stats endpoint replacing sending data to metrics server

* Removed metrics client

* Removed old metrics file

* cargo fmt
2021-06-07 12:01:43 +01:00
Jędrzej Stuczyński 50f65aa698 Feature/per layer count (#628)
* Initial struct

* WIP

* Added test for migration

* unused import
2021-06-07 11:59:33 +01:00
Jędrzej Stuczyński 93e9dc5c1e Bugfix/verloc fixes and adjustments (#618)
* Using new display trait for identity key

* Establishing verloc connection with timeout

* Further decrease in log severity

* Writing echo packets with timeout

* Sender formatting

* ConnectionWriteTimeout error definition

* Writing verloc results in chunks

* Added run started and run finished fields to verloc

* Reordered the fields

* Storing the timestamps as options to indicate run in progress
2021-06-02 12:50:36 +01:00
Jędrzej Stuczyński 0dcb046576 Changed omitted print to a debug call (#617) 2021-06-02 12:48:28 +01:00
Jędrzej Stuczyński 27e704ab80 Reordered imports 2021-05-27 11:42:11 +01:00
Jędrzej Stuczyński da339a83cd Updated the rest of the codebase 2021-05-27 11:29:31 +01:00
Jędrzej Stuczyński 99780d3eb0 Updated smart contract to work with future cosmwasm 0.14.0 update 2021-05-27 11:27:09 +01:00
Jędrzej Stuczyński ea08fad2e0 Decreased log severity for verloc-related functionalities (#611)
* Decreased log severity for verloc-related functionalities

* Removed unused variable
2021-05-20 20:53:28 -04:00
Jędrzej Stuczyński 1fe38b1b9c Implemented display traits for identity and encryption keys (#607) 2021-05-19 10:33:01 -04:00
Jędrzej Stuczyński ed489149dc Feature/network monitor gateway pings (#608)
* Ability to send Ping frame to gateway

* Sending ping frame to gateways every 1min

* Increased monitor run interval back to 15min

* Whitespace
2021-05-19 10:32:31 -04:00
Jędrzej Stuczyński ea62d01e65 Feature/updated network monitor (#604)
* Connecting to gateway with a timeout

* Added address value to InvalidAddress error

* Initial updated network monitor (does not submit results yet)

* Created client for node status api

* Changed default address to the local one

* Removed old validator client

* Renamed validator client rest to validator client

* Print conversion warnings using Display rather than Debug formattingn

* WIP for adding owner field in monitor

* Preserving changes before branch switch

* Keeping track of node owners during monitoring + using those for node status api

* Removed temporary log statement

* Dont notify node status api if good nodes are broken

* Changed default monitor interval to 5min

* Post merge issues

* Allowing dead version field in seocksrequest

* Updated monitor run interval to 15min

* Reporting gateways and mixnodes separately with the new api

* Unused imports

* Decreased testing interval to temporarily bypass the silent timeout issue

* Formattingn
2021-05-18 17:33:31 +01:00
Jędrzej Stuczyński a8299e867d Feature/ping timings (#603)
* WIP

* WIP for time measurement

* In theory working sender and listener

* Further additions + main.rs for local testing

* Further improvements + config builder

* Initial integration into mixnode

* Verifying mixnode version

* 1.52+ clipy warning

* 1.54 nightly clippy fixes

* Changed HTTP Api to bind to the same ip as used for mix packets

* Changed measurements to instead write to shared object

* Required dependencies

* Connecting with the http api

* Updated mixnode common rand dependency
2021-05-12 11:20:03 -04:00
Dave Hrycyszyn 7dc4d653c2 Feature/add rocket (#600)
* Added rocket at a git tag

* Adding Rocket to the mixnode

* Verloc route now in place

* Adding an http api startup notification

* Updated version number to 0.10.1-dev

* Fixing clippy warnings

* Compressing split a bit

* Adjusted used version of js-sys

Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
2021-05-11 17:40:29 +01:00
Jędrzej Stuczyński a521bc0f54 Logging adjustment (#585)
* Reduced severity of common harmless warnings

* Changed the same ip node warning

* More explicit error on network address binding failure
2021-04-28 09:11:04 -04:00
Jędrzej Stuczyński e8e966b67a Feature/multiple validator endpoints (#583)
* Rust half done

* Removed the temporary 'test'

* Using multiple validator endpoints in the javascript client

* Dont attempt any switches with a single validator endpoint

* Removed the unused temporary function

* Updated validator-client version
2021-04-23 16:41:39 +01:00
Jędrzej Stuczyński 037723eb90 Impl Error trait for ValidatorClientError (#587) 2021-04-23 10:58:06 +01:00
François Garillot d432bebce8 Minor cosmetic changes while reading around (#568)
* Simplify some Option / Result / ? operator patterns

... when they have a direct combinator equivalent.

Tool-aided by [comby-rust](https://github.com/huitseeker/comby-rust)

* Remove panic in socket state
2021-04-19 15:12:19 +01:00
Jędrzej Stuczyński 4e339f1788 Fixed nightly clippy warnings (#572)
* Fixed nightly clippy warnings

* Using string literal in panic message
2021-04-14 16:41:47 +01:00
Jędrzej Stuczyński 3136346a01 Feature/bonding adjustments (#561)
* Made mixnode bonding process similar to that of gateways' + lowered bonding fee

* Adjusted bonding fee to 100

* Adjusted MixNode Display implementation for nicer formating

* Renamed bonding stake to just bond

* Renamed other cases where stake was referring to bond
2021-04-08 11:15:19 +01:00
Jędrzej Stuczyński 596bc76cc6 Chore/dependency updates (#549)
* Updated all non-breaking dependencies

* Updated common/crypto dependencies

* Updated all tokio [and associated] dependencies to most recent version

* Bumped version of rand_distr

* Fixed api changes in tests

* Made clippy happier about the acronym

* Fixed the type while trying to make clippy even happier

* nightly cargo fmt
2021-03-29 15:32:34 +01:00
Jędrzej Stuczyński 7361d7a220 Added contract query to check if given address owns a mixnode/gateway (#544)
* Added contract query to check if given address owns a mixnode/gateway

* Fixed merge conflict
2021-03-24 17:29:08 +00:00
Jędrzej Stuczyński 9e0bb80163 Feature/topology conversion (#536)
* Removed reputation field from existing topology

* ibid for registration time

* Basic bond to topology conversion

* Made existing tests compilable

* Added owner and stake fields to mix and gateway topology entries

* Moved node conversion to topology crate

* Added mixnet contract field to clients configs

* topology refresher trying to use new validator

* Removed clients depepdency on the old validator client

* Removed mixnode dependency on the old validator client

* Removed gateway dependency on the old validator client

* Removed location field fron mixnode and gateway configs

* Removed incentives address from mixnodes and gateways

* Cargo.lock changes

* Ignoring clippy warnings originating from codegen from JsonSchema

* no longer formating string with a literal
2021-03-24 10:52:27 +00:00
Jędrzej Stuczyński 2e7cd451ec Feature/mix contract identity key (#533)
* Added identity_key field to mixnodes

* Printing out required bond information on mixnode startup
2021-03-18 15:05:32 +00:00