Commit Graph

309 Commits

Author SHA1 Message Date
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 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
Jędrzej Stuczyński 67c92b3e56 Feature/validator client rust (#532)
* Moved definition of mixnet contract common items to separate module

* Removed schemars dependency from being wasm32 specific

* Moved query responses to the shared module

* Fixed tests due to differerent import paths

* Updated dashmap in other crates to help with once_cell version selection

* Reexporting coin and humanaddr

* Deserializing response from validator

* Deserializing smart result directly to specific type

* Ability to query for mixnodes and gateways from rust

* Fixed compilation warning due to updated dashmap
2021-03-18 09:31:15 +00:00
Dave Hrycyszyn 4ca40fd3bc Feature/initial mixnet contract (#515)
* Starting on cosmwasm smart contracts

* Mixnet contract now builds

* Removing license and notice files, the monorepo already has these.

* Removing generated README content

* Simplified development instructions a bit.

* Converted some network monitor files to use SPDX license headers

* Renamed packaget to mixnet-contracts

* Depending on the Nym topology crate

* Renaming contract package in usage

* Renamed "announce" to "register_node" in the defined messages

* Fixed package name for mixnet contracts in defined release annotations

* Added the mixnet contracts to the Cargo lock file

* Renamed some fields in our contract topology

* Using the stringy mixnode from the validator client.

* Removing mix nodes count from state, we can infer that

* Saving generated code in comment as it's a useful example for now

* Renamed "count" to "get_topology"

* Adding the beginnings of a validator client (in Typescript)

* Starting to integrate example code. WIP.

* Ignoring generated accounts

* Making a few less mixnodes :)

* Adding shebang to start script

* Cranking up the Nym-related gas limits, as otherwise contract upload fails.

* Simplest mixnode example is now working

* Removing the external client code, it messed up wasm compilation. Will copy/paste for now.

* Contract now wants to add a MixNode rather than an IP string

* Adding mixnodes via contract now works (!)

* Simplified mixnode registration example

* Further mixnode-adding simplification.

* Adding author name

* Fixed description

* Sent funds are now required to bond a mixnode

* Ensuring that we send correct coin denomination

* Unbonding now works (!). Quite primitivist.

* Checking that unbonding works from the client.

* Setting up a thief account to play with

* Checking to see whether thief can unbond a node (it fails, happily)

* Adding a more specific error for when an account attempts to unbond but owns no bonds

* Figured out how to test contract balances

* Set the console messages to explain things a little more nicely

* Tests for insufficient funds result

* Using more async in driver example

* Added a bit more explanation of the actions taken by the driver example

* Locking down wasm instantiate a bit more

* Docs clarifications on how to run example

* README clarification

* Corrected the commit hash in the wasmd build command, it was still set for 0.14.0

* Moved models from types into state

* Starting work on range queries

* whitespace

* Going back to slow but reliabel node uploads and disabling new contract upload

* Cranking gas fees temporarily

* Mixnode key retrieval working and tested

* Range retrievals now working well

* Removing unused clone

* Compressing tests a bit

* Testing node retrieval on large numbers of nodes.

Not sure whether MockStorage has the same space limitations as
production storage does.

* Getting rid of spelling warning

* Removing unused responses

* Minor cleanup

* Starting to map my way out of the tuples

* Slightly more meaningful variable names

* Returning a StdResult from nodes query

* Fighting through the unwraps :)

* Unfucking a bit more

* Starting to use ranged nodes in contract

* Testing node retrieval from range store

* Ditching generated tests

* Adding works, still need to test removing mixnodes

* Attempting to remove a mixnode returns an error when no nodes exist

* Un-registering when no accounts exist (edit)

* un-registering someone else's mixnode fails

* Ensuring proper ownership

* Testing for only 1 mixnode getting deleted

* Testing single-node retrieval

* Removing mixnode working

* Removed unused imports and unused variable warnings

* Made handler functions private

* Tested for error response on mixnode removal

* Ensured proper post-state on mixnode removal

* Using Vec<Coin> for currency equality comparisons

* Removed todo, this amount is only for logging purposes anyway

* Refactoring tests a bit

* Adding a few storytelling comments

* Putting helper methods into alphabetical order

* Drying up mixnode adding in tests

* Using the new add_mixnode helper

* Checking full object equality in test

* Removing the GetNodes handler

* Taking a more "storytelling" approach to the contract tests

* We need a few more methods to run our example driver

* We now need to make a new address for each node we want to have,

as each sending account can only have one node

* HumanAddr not needed

* Making call sequence a little more readable

* Added the results of today's experiments with the REST API to the validator client readme

* Corrected console.log message

* Adding a note about how to run tests

* More contract exercising fun

* Updating mocha

* Whitespace

* Adding a note about running tests

* Adding typed rest client

* Starting to mess with typescript paging client

* Removing the rest client, we'll use the cosmjs one for this

* Noting a few more contract requirements

* Starting client restructuring

* Importing cosmjs stargate client

* Starting to work on the chain cache

* Cleanup

* Removing type annotations which hilariously worked, confusing the compiler

* Might as well do each cache individually

* Renaming chaincache so that it handles only mixnodes

* Renaming chaincache

* Setting dynamic per-page value to ease testing

* Using perPage in tests

* Moving tests back into their own special home so they don't bloat our package

* Ignoring generated docs

* Adding TypeDoc documentation generator

* Removing unused NetClient import

* Added docs generation

* Noting existence of docs generation

* Starting to test paged responses

* Working paging tests

* Clarified test names a bit

* Removed console.logs

* Added a test for two full pages.

* Formatting

* Starting to query for mix nodes

* Removed the topology in preparation for paging

* Removing unused struct

* Getting ready for series-based paging

* We're now setting page size limits on list retrievals

* Pagination starting to work, needs more testing

* Moved test support stuff into its own home

* Removing duplicate testy code

* Testing all paging stuff in the contract

* Removed useless method duplicate

* Moving queries into their own file

* Removing redundant tests

* Testing default paging limit

* Testing max paging limit

* We don't need to c/p pagination stuff from the cw-plus contracts, removing

* Testing pagination

* Making next key calculation explict via a function

* Removing temporary variable

* Commenting final state

* Incorporating the PagedResponse

* On the road to a working TypeScript client

* Adding some logging utilities

* Paged retrieval working but needs improvement - it's very brittle

* Getting the loop right

* Removing unused logger

* Setting up a request count

* Documenting the ins and outs of the client network interface

* Removing requestCount as we're not using it yet

* Success! Making paginated requests for mixnodes!

* Differentiating between MixNode and MixNodeBond

* Checking that Fred can upload a mixnode

* Fixing export

* Adding the ability for client to get balances

* Docs fix

* Converting interfaces to types

* Changing `mixNodes()` to `getMixNodes()` on client

* We might as well return the nodes we've just retrieved when we refresh

* Starting work on unbonding

* Fixed a caching bug which was causing multiple result sets to be cached

* Using the sender address as the key for removal

* Importing some result stuff so we can find out what happened on execution

* Minor messing around to prove that the sequence fully works

* Displaying a nicer message on mixnode unbond

* Renamed announce to bond in validator client

* Fixed unstable clippy warnings

* Removing commented fields

* Comment spacing

* Changed announce to bond in example code

* Making the test accounts directory configurable

* Rebuilt

* Loading keys from the local ./accounts directory

* Ignoring contract lockfile

* Saving out a contract lockfile so things continue working after contract upload

* Splitting the driver example into smaller self-contained examples

* Deleting the example that Andrew hates so much

* Making dependabot happy

* Stricter equals

* Removing unused import
2021-03-09 11:32:51 +00:00
Jędrzej Stuczyński 83753af944 Running CI also on windows and macOS (#512)
* Running CI also on windows and macOS

* Rust 2021 formatting

* clippy::upper_case_acronyms where appropriate

* Allowing unknown clippy lints

* Further clippy updates

* Building wasm client during CI

* wasm actions update

* added working directory to cargo jobs

* Temporarily disabled wasm test and clippy
2021-03-01 11:06:13 +00:00
Jędrzej Stuczyński 6f8ae53f0c Feature/socks5 adjustments (#510)
* Increased default connection buffer size to help with packet bursts

* Informing remote about failure to establish connection

* Properly closing outbound proxy on failure to read from socket

* Split proxy runner into separate inbound and outbound files

* Flag indicating whether socks client actually started proxying

* Clearing stale proxies if other side is closed

* Decreased log level on not a warning

* Closing proxy if no messages were received in a while

* Dont print harmless false-positive errors

* Formatting + future notes

* Fixed packet delay in higher volume traffic

* Don't attempt writing empty messages to connection
2021-02-01 14:45:50 +00:00
Jędrzej Stuczyński 2f867b75f2 Fixed unused import in non-unix systems (#509) 2021-02-01 14:43:11 +00:00
Dave d03af9de05 Merge branch 'develop' of https://github.com/lnceballosz/nym into lnceballosz-develop 2021-01-29 10:28:47 +00:00
Jędrzej Stuczyński 3a261d22f5 Not including gateway non-delay when calculating total packet delay (#507) 2021-01-29 10:18:03 +00:00
Jędrzej Stuczyński c882778583 if on unix, save keys with 0600 permission (#504) 2021-01-29 10:17:02 +00:00
Jędrzej Stuczyński c67e0fee37 More human-readable errors on mixnode/gateway startup (#503)
* More human-readable errors on mixnode/gateway startup

* Missing dots

* Fixed comment moved to incorrect line during formatting
2021-01-29 10:16:38 +00:00
Jędrzej Stuczyński 86c9ab2ef5 Feature/wasm client compilation fixes (#501)
* Gateway client wasm-specific fixes

* wasm-client adjustments
2021-01-29 10:13:22 +00:00
Jędrzej Stuczyński 9cd463b22c Feature/gateway monitoring (#499)
* ability to read from multiple gateway clients

* A very initial updated network monitor

* Summary producer printing report on each finished run

* fixed gateway startup issue

* initial cleanup pass

* Sending to gateways at specified rate

* Renaming

* Fixed first run interval

* Removed false positive error print

* Ability to use 'good' topology that is different from the one being tested

* Fixed clippy warnings
2021-01-29 10:11:13 +00:00
Jędrzej Stuczyński 2d3b4f4b91 Feature/GitHub actions and clippy cleanup (#493)
* Added github actions templates

* removed travis .yml file

* initial clippy cleanup pass

* fixed the rest of clippy warnings

* Made github badges more fancy and consistent with the ones in sphinx

* Updated local rustc version and removed compilation warningns

* ... and fresh clippy warnings

* formatting

* beta clippy specific warnings fixed

* Fixed all nightly clippy warnings

* Fixed trying to unwrap a ()

* Actually running all tests

* Correctly passing the --all flag

* Hopefullly third time's a charm in fixing argument passing
2021-01-18 11:50:29 +00:00
Dimitris Apostolou 131574cd3c Fix typos (#492) 2021-01-04 09:31:50 +00:00
Lina Ceballos 67ac1d9f4b adding license and copyright headers 2020-12-10 10:13:17 +01:00
Jędrzej Stuczyński 210b5466bb Minor mixnet client code simplification and optimization (#472)
* Minor code simplification and optimization

* Made the connection establishing call non-blocking
2020-11-26 13:06:05 +00:00
Jędrzej Stuczyński 33d5effbdc Putting initial packet onto the queue when establishing connection (#471) 2020-11-25 15:09:40 +00:00
Jędrzej Stuczyński cb59153422 Feature/nonblocking mix send (#464)
* No backoff

* reconnections

* Increased default network monitor default sending rate

* Comment for the future

* Maximum connection buffer size as part of config
2020-11-23 17:27:14 +00:00
Jędrzej Stuczyński 89f03e63c7 Feature/delay queue mixnodes (#462)
* Initial idea for the delayer

* Initial rought integration into mixnode

* Removed lock requirement from 'received' metrics

* 'sent' metrics

* Comment fix
2020-11-20 14:49:22 +00:00
Jędrzej Stuczyński 08cb39d0af Feature/slowed down network monitor (#461)
* Variable gateway sending rate

* Changed interval ticker to delay

* Extra comment

* Performing delay after test run

* Minor adjustements

* Decreased sending rate

* minor optimization in case of single packet to send.
2020-11-19 17:48:22 +00:00
Jędrzej Stuczyński a69123ebc1 Simple gateway client reconnection in obvious network failures (#459) 2020-11-18 17:11:41 +00:00
Jędrzej Stuczyński 69eefaf91f Fixed bunch of clippy warnings (#427) 2020-11-10 15:28:55 +00:00
Jędrzej Stuczyński be49c3843a Feature/socks improvements (#423)
* Changed AvailableReader from Future to Stream

* comment formatting

* WIP

* Maximum number of bytes read per poll

* More detailed socks5 printing

* Split up socks5 service provider runner

* Fixed closing proxy too soon on one side

* Additional log information

* Printing connection id in log target

* Adjusted some constants

* Target field in log

* Removed dead code

* Decreased logging level

* Explicitly seperated 'Send' and 'Connect' request + data buffering

* Temporarily commented out test that fails due to not understanding limitations of tokio test io builder

* Fixed socks5 tests
2020-11-10 12:47:26 +00:00
Jędrzej Stuczyński a91b2dcafc Updated validator topology (#420) 2020-11-06 16:58:32 +00:00
Jędrzej Stuczyński 7c04a10545 Added option to set incentives address during mix and gateway init (#419) 2020-11-05 17:15:39 +00:00
Jędrzej Stuczyński 72496ad2aa Feature/max retry (#409)
* Maximum number of allowed reconnection attempts

* Requiring initial internode connection to be successful

* Decreased logging level for failing to establish initial connection
2020-11-03 14:55:10 +00:00
Jędrzej Stuczyński 607297bf54 Feature/no run config flag (#405)
* Removed `--config` parameter in `run` commands

* Removed old tests that were doing disk IO
2020-10-30 16:28:39 +00:00
Jędrzej Stuczyński 72e9fb1bc3 Using metrics interval received from server (#403)
* Using metrics interval received from server

* Test fix
2020-10-30 15:14:19 +00:00