* Remove check for bandwidth for incoming packets
We should only accunt for packets that the client inputs to the mixnet
* Introduce BandwidthController for both types of bandwidth creds
* Add some non-coconut token bandwidth handling
* Use thiserror for gateway-client lib
* Add error handling
* Unable to build for wasm for now
* Fix wasm strange error
* Disable non-coconut credentials for wasm client
* Check for status and throw the error up
* Send encrypted token cred from client
* Gateway receive message and signature validation
* Put the correct amount of tokens that were burned
* [ci skip] Generate TS types
* Eth endpoint and secret key as config parameters
* Add eth_endpoint config argument for gateway
* Update test as well
* Separate panicable code from the safe one
* Move some bandwidth controller panics up the call stack
* Save contract corresponding to the eth endpoint
* Fix template
* Pass the web3 interface as well
* Made event reads possible in gateway
* Add checks for event data
* Cosmos contract for double spending prevention
* Add workflow for the new contract
* Add validator rest URL to config
* Rename eth_events to erc20_bridge
* Pass cosmos mnemonic as well, and put the nymd client in ERC20Bridge
* Call cosmos contract for final verification
* Ask for config parameters in cli
* Fix various stuff
* Increase timeout to allow gateway to check the two chains
* Put some logs for the new flow
* Set consumed bandwidth invariantly of coconut feature
* Fix clippy error
* Add non-coconut checks
* Use 2018 rust instead of 2021
* More verbose nymd error
* Explicitly specify TOKENS_TO_BURN constant
* Put eth burn function in a constant
* Replace to_vec & append with iter & chain
* Test for (de)serialization of TokenCredential
* Minor rename
* Separate credential creation from bandwidth claiming
* Switch from panics to errors when claiming coconut bandwidth
* Another append changed to chain
* Update QA cosmos contract address
* Simplify build/test/clippy separation on coconut feature
* Fix bad features arg positioning
* Use the start_after in cosmos contract query
* Set a limit in line with a range on cosmos queries
* Added unit tests for new cosmos contract
* Fix bandwidth_remaining comparation
* Get remaining bandwidth from gateway
* Add contract build flag
* Add a useful info log
* Use a more robust eth depth for release builds
* Include recipt logs in error message
* Fix clippy for tests
* Use Arc instead of clone
* Rename as_bytes to to_bytes
* Make signature verification in contract more verbose
* Missed rename of paging constant
* Fix gateway start with coconut enabled
* Rename function to claim_token
* Simplify nymd client setup
* Check with block buffer on gateway as well
* Update comment of double spending protection
* Correct contract address
* Backup the keypairs used for buying tokens, in case of error cases
* Don't take any chances with the gateway timeout
* [ci skip] Generate TS types
* Updated cosmos contract to latest QA address
* Add cli options for eth
* Update network monitor timeout value as well
Co-authored-by: neacsu <neacsu@users.noreply.github.com>
* 'Coconut' feature in gateway
* Enabled coconut feature in gateway-requests
* Native client coconut feature
* Ibid for socks5 client
* Ibid for wasm client
* Coconut feature flag for validator-api
* Added coconut feature flag to our CI
* build.yml typo
* Continue on windows errors
* Missing quote
* Another typo in build.yml
* Reclaiming disk space when building for windows on CI
* Sqlx struct stub
* Initial schema
* Initial error enum
* Managed for persisted shared keys
* Initial inbox manager
* Comments
* Using new database in clients handler
* Extending gateway storage API
* tokio::main + placeholder values
* Removed old client store
* Simplified logic of async packet processing
* Renamed table + not null restriction
* BandwidthManager
* Removed sled dependency
* Using centralised storage for bandwidth
* Dead code removal
* WIP connection_handler split and simplification
Maybe it doesn't look like it right now, but once completed it will remove bunch of redundant checks for Nones etc
* Further more explicit clients handler split
* Minor cleanup
* Temporary store for active client handles
* Fixed error types
* Error trait on iv and encrypted address
* Authentication and registration moved to the handler
* Removal of clients handler
* Further logic simplification + returned explicit bandwidth values
* Further cleanup and comments
* Updated config with relevant changes
* Basic bandwidth tracking in client
* FreshHandle doc comments + fixed stagger issue
* Removed side-effects from .map
* More doc comments
* Database migration on build
* Increased default claimed bandwidth
* Renaming
* Fixed client determining available bandwidth
* Removed dead sql table that might be used in the future
* Windows workaround
* Comment
* Return error rather than cap credential
* Update hmac and blake3
* Remain paranoid for `0.*` crates
* Most paranoid versions :)
* Updated aes and using published version of blake3
Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
* Set actual value for bandwidth
Also put it as a public attribute, such that it can be actively used
by the credential consumer
* Switch from sending Attribute structs to sending the actual attribute bytes over the wire
* Add atomic bandwidth value to gateway
* Consume bandwidth based on the mix packet size
* Use Bandwidth struct for specific functionality
* Move bandwidth code outside the dependency path of wasm client
* Use u64 instead of AtomicU64, as the handling is not parallel
* Call perform_initial_authentication instead of register in clients
* Refactor the register/authenticate functions a bit
* Introduce Bandwidth request type
* Add encryption layer to cred
* Remove cred pass and check from handshake
* Replaced unreachable! with error
* Changed decrypt_tagged signature to not take mutable ownership of data
* Put handle_bandwidth work inside a function
* Add check before unwrap
* Remove unnecessary async
* Decouple bandwidth credential from authentication
* Use new_error for ServerResponse:Error
* Send a fresh IV each time the BandwidthCredential request is sent
* Remove unwrap of bincode::serialize
* Add comment regarding Bandwidth response
* Remove _mut from naming
* Leave Debug trait alone, as the initial error doesn't reproduce anymore
* Pass iv as Vec<u8> instead of base58 string
* Renamed AuthenticationIV to IV, as it is now used for more the just authentication
* Did some IV refactorization
* 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
* Hand coconut issuance off the validator-api
* git to cargo
* Move to own module
* Integrate tauri-client, extract common interface
* cargo fmt
* Ergonomics
* Facelift
* Wrap up tauri client
* Set up publish
* Fix fmt
* Install CI dependencies
* Inline deps
* Remove mac deps
* Add dist dir
* Fix beta clippy nag
* Commit some gateway work
* Thread coconut creds through gateway handshake
* Push in progress patch
* Move State from tauri client to coconut interface
* Move get_aggregated_signature from tauri client to coconut interface
* Move prove_credential from tauri client to coconut interface
* Update sphinx version
* Mount coconut routes and manage config file in rocket
* Split default validator endpoint into host and port
* Add init for simple credential initialization
* Fix common gateway client
* Add coconut cred to webassembly client
* Add coconut cred to socks5 client
* Add coconut cred to native client
* Remove direct coconut-rs dependency
* Use only coconut interface in validator api
* Leave validator-api out of workspace and update Cargo.lock
* Fix clippy warnings and update Cargo.lock after rebase
* Switch from attohttpc to reqwest for async gets
This is not only needed for using async requests, but also because attohttpc
causes OpenSSL issues when cross compiling the webassembly client.
* Replace attohttpc with reqwest for puts too
* Make tauri client commands async
* Fix borrow error
* Guard gateway server code from compiling for wasm (client)
* Fix clippy wasm client
* Fix tests
* Fix clippy in tauri client
* Remove commented code
* Update comment of init message
* Remove unnecessary hex dependency
* Replace config argument with key_pair
* Use `trim()` for whitespace removal
* Move verification key query higher up the function calls
* Put KeyPair instead of Config into rocket's managed items
* Re-enable tauri client verify button
* Move verification key up the function calls for prove_credential
* Use consts for verification_key and blind_sign routes of validator-api
* Replace `match` with `map_err`
* Fix typo
* Remove now unnecessary `Clone` derives
... as config is no longer managed by rocket
* Replace `match` with `map_err`
* Make `InternalSignRequest` really internal to validator-api
* Make `with_keypair` live up to its name
* Update Cargo.lock after rebase
* Replace String error with HandshakeError
* Add CoconutInterfaceError to coconut-interface
* Format the new error in tauri client
* Remove from default, as wasm client doesn't build
* Put public key as init argument...
... for the public attributes of the credential
* Use the hash_to_scalar function to make public key into attribute
Use the function from cli-demo-rs from https://github.com/nymtech/coconut
to make the identity public key into a public attribute.
* Replace vector with array for InitMessage
As we know beforehand the size of the keys, we can use fixed size array
instead of vectors. This eliminates the need for a prefixed length in
the serialized form of the InitMessage structure and enables a easy
deserialization of the remote identity before the actual bincode
deserialization that we do in the handshake process.
Before this, the `extract_remote_identity_from_register_init` function
attempted to deserialize into a public key the length-prefixed public key
received from the client, thus failing sporadically with a `Cannot decompress
Edwards point` error.
* Pass public and private attributes to state `init` instead of PublicKey
* Make tauri call with dummy attributes
* Make clients call with their keypairs
* Revert "Make clients call with their keypairs"
This reverts commit b348f47f7a.
* Put dummy, bandwidth private attribute
Co-authored-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>
* Put endpoints and contract address in one place
* Put common ports in one place
* Split cache version from route
* Share validator-api port value between server and client
* Put BECH32 prefix in defaults
* Put DENOM in defaults
* Put network monitor address in defaults
* Fix clippy
* Fix another clippy + tests import of DENOM
* 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
* Modified NymConfig trait to make id optional
* Basic validator-api config definition
* Optionally using the config during startup + flag to enable monitoring
* 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
* 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
* 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
* 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
* 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