* mixnode: make command modules private
* mixnode: make some node modules private
* mixnode: make config structs private
* mixnode: restore accidentally moved function
* Add a --wallet-adress parameter to init
* Rearranging signing code locations
* A bit more refactoring
* ibid
* Exiting if the stored bech32 address isn't valid at node start
* A few docs comments
* Moved crypto crate up to root src level
* Friendlier startup messages for node verification code
* Switching punk and nymt addresses in test
* Calculating gas fees
* Ability to set custom fees
* Added extra test
* Removed commented code
* Moved all msg types to common contract crate
* Temporarily disabling get_tx method
* Finishing up nymd client API
* Comment fix
* Remaining fee values
* Some cleanup
* Removed needless borrow
* Fixed imports in contract tests
* Moved error types around
* New ValidatorClient
* Experiment with new type of defaults
* Removed dead module
* Dealt with unwrap
* Migrated mixnode to use new validator client
* Migrated gateway to use new validator client
* Mixnode and gateway adjustments
* More exported defaults
* Clients using new validator client
* Fixed mixnode upgrade
* Moved default values to a new crate
* Changed behaviour of validator client features
* Migrated basic functions of validator api
* Updated config + fixed startup
* Fixed wasm client build
* Integration with the explorer api
* Removed tokio dev dependency
* Needless borrow
* Fixex wasm client build
* Fixed tauri client build
* Needless borrows
* Fixed client upgrade print
* Removed redundant comments
* Made note on aggregated verification key into a doc comment
* Removed mixnet contract references from verloc
* Modified default validators structure
* Reformatted validator-api Cargo.toml file
* Removed commented code
* Made the doc comment example a no-run
* Fixed a upgrade print... again
* Adjusted the doc example
* Removed unused import
* Modified NymConfig trait to make id optional
* Basic validator-api config definition
* Optionally using the config during startup + flag to enable monitoring
* 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>
Removed location from the init output and added it as input in the
describe command.
Because this creates a different format of the description file, the
patch version number must also be increased.
Signed-off-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>
* Updated smart contract to work with future cosmwasm 0.14.0 update
* Updated the rest of the codebase
* Reordered imports
* Missing imports
* cargo fmt
* More cargo fmt action
* Introduced type alias for IdentityKey reference
* Constant defined arguments for gateway and mixnode
* Spliting host into explicit address and port(s)
* Using more type restrictive IpAddr rather than String for listening address
* Updated config templates
* Tentative upgrade commands, probably to be further changed before release
* Fixed mixnet contract test fixtures
* Further missing test adjustments
* 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
* 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>
* 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
* 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
* 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
* 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
* Initial changes to validator client API
* Updated models
* GatewayRegistrationInfo constructor
* Change validator topology to convert into NymTopology without failure
* Mixnode registering and unregistering presence
* Directory -> Validator renamings + adjustments
* Updated upgrade command for mixnode
* Extracted metrics part of directory client into separate library
* Removed no longer needed traits
* Integrated new metrics client into mixnode
* Introduced the same set of changes to the gateway
* Getting active topology in client core via validator client
* Updated clients to get correct topology
* Introduced mix mining endpoints to validator client
* Network monitor using validator client
* Removed directory client
* Updated wasm client
* Temporarily disabled the test
* Checking ok status for validator client response
* Updated upgrade command for clients
* Allowing using old presence directory as new validator endpoint for mixnodes and gateways
* Fixed tests in non-default crates
* Updated NymConfig trait making id always obligatory. Also added extra default method implementations
* Preventing init on mixnodes that were initialised before
* Quotes before mix id
* Preventing init on gateways that were initialised before
* Preventing init on native clients that were initialised before
* Preventing init on socks5 clients that were initialised before
* Introduced identity keypair to mixnode
* Updated upgrade 0.9.0 mix upgrade instructions
* Printing failed upgrade notice when it failed
* Moved printing upgrade start notice to beginning of function
* Feature/wasm update (#341)
* Split text and binary client apis
* Very initial attempt at new serialization
* Defined ser+de for Recipient and ReplySURB
* Response errors
* builds with changes
* Working WS API + moved to separate crate
* updated python examples
* Fixed parsing bug
* Updated go examples
* Updated rust examples
* formatting
* Removed unused imports
* dependency updates
* Further dependency changes
* nymsphinx exposingn framing only if not in wasm32
* Cargo lock changes before develop merge
* Pending work
* Actually sending and receiving websocket from rust!
* more WIP
* Initial wasm client + establishing shared key with gateway!
* Splitting and sending a message!
* WIP
* WIP
* Initial wasm-ification of the gateway client
* Passing reconstruction result to js callback!
* Initial WASM cleaning pass
* Dependency pruning
* Moved processing loop to received_processor + at least ack unwrappingn
* Post merge fix
* Kinda updated react example
* Old print statement removed
* Removed yarn.lock
* Fixed building issue for other clients
* Fixed travis test command
* Updated wasm publishing instructions
* Increased default presence and metrics sending interval (#354)
* Defaulting to mix layer with fewest node if no argument provided (#353)
* Defaulting to mix layer with fewest node if no argument provided
* cargo fmt
* Selecting the gateway randomly from 2 known good ones. (#355)
* Selecting the gateway randomly from 2 known good ones. There's a problem with the config file in this commit though.
* Saving value of chosen gateway
* Removed duplicate printing of gateway being used
Co-authored-by: jstuczyn <jedrzej.stuczynski@gmail.com>
* More detailed error response on authentication/registration failure (#356)
* Updated changelog
* Updated version numbers
Co-authored-by: Dave Hrycyszyn <futurechimp@users.noreply.github.com>
* Changed identity keypair to use ed25519
* Encryption key is now x25519 based + compatibiltiy with sphinx
* Pathing and import fixes
* Moved all asymmetric keys to sub-module in crypto
* Extracted aes to separate module
* kdf module in crypto
* Ability to perform diffie hellman on encryption keys
* ecdsa on identity keys
* Extremely rough and incomplete registration handshake
* Authentication primitives
* Creating new random authenticationIV
* Wrapper type for the derived shared key
* Removed AuthToken in favour of using SharedKey for authentication
* Gateway identity keys
* Registration handshake without error mapping
* Gateway address in client config
* Added extra key for gateway presence
* Updated pemstore to work on borrows instead
* Gateway client trying to perform the handshake
* Gateway changes to allow for handshake and shared key
* Debug trait on sharedkey
* native client using updated gateway client
* Slightly updated gateway API
* Minor cleanup
* Fixed pemstore to correctly save multiple keypairs
* Gateway actually deriving shared key during handshake
* Gateway sending correct mid-handshake message
* Missing quotation mark in client config template
* Fixed template for correct shared key serialization
* Fixed gateway authentication
* Fixed tests
* Using correct gateway key when converting to sphinx node
* "get_all_clients" takes them from gateways as opposed to providers now
* cargo fmt
* Renamed pemstore methods
* Unused import
* Encryption of forward requests between client and gateway
* Updated sphinx dependency to use public revision
* Sending 'error' on handshake processing error
* Removed some dead code
* Dead code I forgot to remove before
* Extracted AckAes128Key into a struct
* Slight pemstore revamp allowing for symmetric key store
* ibid.
* PemStorableKey for SharedKey
* Introduced single location responsible for key management for client
* WIP
* Sphinx version update
* Stop using NodeAddressBytes for two distinct and confusing purposes
* Abstracting away SocketAddr from sphinx forwarding
* Passing the bool for reply surbs
* Attack plan for replies + encryption
* Comment + removed variable binding
* ReplySURB usage
* Topology import in nymsphinx
* Sphinx version update
* Changed 'Recipient' to contain client's encryption key
* Message preparation taking shape!
* reply surb also containing the encryption key
* Very initial message receiver
* Sphinx version update
* A possibly working way of receiving surbs
* Fixed incorrect field name in client config template
* camel casing all request arguments
* Renamed and moved `MessageMode` to more appropriate file
* Restored reconstruction tests
* Removed dead code from chunking
* Made rust examples compilable
* reply SURB key storage
* Replies as an InputMessage
* Forgotten commented code
* No retransmission processing for cover or replies
* Received reply processing
* Renamed client pathfinder to something more appropriate
* Made HasherOutputSize public
* Added key store path to config
* Reply surb attaching key digest when used
* Changes due to previous renaming
* Removed comment
* Fixed insert_encryption_key
* Assigning initial value of key store path
* Computing key digest with correct algorithm
* Initial and presumably temporary request serialization
* hacky way of introducing 'FragmentIdentifier' for replies
* Moved responsibility of reply encryption, padding, etc, to message preparer
* Optional recipient in try_get_valid_topology_ref
* Handling new reply surbs with acks and padding
* Updated go and python examples to include replies in text and binary cases
* Updated rust examples + binaryserverresponse
* Helpers in rust examples
* And updated JS example
* Moved shared key generation function to crypto crate
* Cover traffic encryption!
* hmac computation in crypto
* Updated aes imports due to new dependencies
* hkdf made more generic
* crypto cleanup + algorithms in params
* Clippy cleanup pass
* Generating encryption+mac shared keys between client and gateway
* MACs attached to forward requests to gateway
* Gateway messages encrypted and mac'd
* Lowered logging level
* compiler warning cleanup
* Some minor cleanup
* Generic stream cipher
* Generic shared key derivation + algorithm definitions
* Project-wide AES clean-up
* Comment fix
* Removed commented imports
* Updated comments
* Fixed topology test fixture
* Changed identity keypair to use ed25519
* Encryption key is now x25519 based + compatibiltiy with sphinx
* Pathing and import fixes
* Moved all asymmetric keys to sub-module in crypto
* Extracted aes to separate module
* kdf module in crypto
* Ability to perform diffie hellman on encryption keys
* ecdsa on identity keys
* Extremely rough and incomplete registration handshake
* Authentication primitives
* Creating new random authenticationIV
* Wrapper type for the derived shared key
* Removed AuthToken in favour of using SharedKey for authentication
* Gateway identity keys
* Registration handshake without error mapping
* Gateway address in client config
* Added extra key for gateway presence
* Updated pemstore to work on borrows instead
* Gateway client trying to perform the handshake
* Gateway changes to allow for handshake and shared key
* Debug trait on sharedkey
* native client using updated gateway client
* Slightly updated gateway API
* Minor cleanup
* Fixed pemstore to correctly save multiple keypairs
* Gateway actually deriving shared key during handshake
* Gateway sending correct mid-handshake message
* Missing quotation mark in client config template
* Fixed template for correct shared key serialization
* Fixed gateway authentication
* Fixed tests
* Using correct gateway key when converting to sphinx node
* "get_all_clients" takes them from gateways as opposed to providers now
* cargo fmt
* Renamed pemstore methods
* Unused import
* Encryption of forward requests between client and gateway
* Updated sphinx dependency to use public revision
* Sending 'error' on handshake processing error
* Removed some dead code