* Introduced route to check mixnode's status (active/standby/inactive/not_found)
* Restored default validator API caching interval to a more sane value
* Changed status route
* Removed outdated constant
* ClaimFreeTestnetBandwidth ClientControlRequest
* Configuration option for the testnet mode in gateway
* Made testnet mode deserialize to default value if not present
* Fixed testnet mode override
* Testnet config options for clients and validator api
* Changed error message for when gateway is not using testnet mode
* Incorporated testnet mode into gateway client
* Activating testnet mode based on config values
* Allowing clippy warnings
* Fixed use of moved value in wasm build
Co-authored-by: Bogdan-Ștefan Neacșu <bogdan@nymtech.net>
* Raw scaffold for tx simulate
* Proper error handling in AbciResult parsing
* Simulate without actual signing operation
* Moved all-fee related functionalities to separate module
* Adding GasInfo to transaction results
* Automated gas estimation
* Slightly adjusted public API
* Using auto fees in eth events
* Removed old print statement
* Reorganised nymd client fee handling
* Put bandaid on wallet gas estimation
* Fixed operation re-export
* warning note on get_approximate_fee
* [ci skip] Generate TS types
* Refactored ProtoAbciResult parsing
* Explicit error on abci query failure
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Add Makefile to make running all checks easier locally
* Different workshare calculation for active vs rewarded set
* Rework omega calculation, update tests
* Remove ZERO const
* unym -> DENOM
Co-authored-by: Drazen Urch <durch@users.noreply.guthub.com>
* Base58 representation of ed25519 signature
* Helper for verifying ed25519 signature on sender address
* Signature verification for gateway bonding
* Signature verification for mixnode bonding
* Added owner signatures for bonding in vesting contract
* Fixed choosing mixnode layer test
* Added owner signature fields to nymd client for bonding
* 'Updated' tauri wallet with new bond requirements
* Mixnode sign command with extra address validation
* Sign command for the gateway
* Signing own gateway's address derived with known mnemonic in not(coconut) case
* Fixed imports post-merge
* Upgraded code to be cosmwasm 1.0-beta.2 compatible (#923)
* Upgraded code to be cosmwasm 1.0-beta.2 compatible
* [ci skip] Generate TS types
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Feature/cosmwasm plus storage (#924)
* Upgraded code to be cosmwasm 1.0-beta.2 compatible
* Added cw-storage-plus dependency
* Experimentally replaced storage for config and layers with cw plus Item
* The same for main mixnode storage
* Usingn IndexedMap for mixnodes
* Split delegations from mixnodes into separate module
* MixnodeIndex on Addr directly
* Moved namespace values to constants
* Outdated comment
* [ci skip] Generate TS types
* Removed redundant identity index on mixnodes
* IndexMap for gateways storage
* Moved total delegation into a Map
* Compiling contract code after delegation storage upgrades
Tests dont compile yet and neither, I would assume, the client code
* Delegation type cleanup
* Client fixes
* Migrated delegation tests + fixed them
* Moved Rewarding Status to rewards
* Reward pool
* Rewarding status migrated
* Made clippy happier
* Added explorer API to default workspace members
* Updated delegation types in explorer-api
* Fixed tauri wallet
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Missing license notices
* Dead code removal
* Changed RewardMixnodeV2 to RewardMixnode
* Adjusted module visibility
* Setting rewarding validator address in init msg
* ContractSettings => ContractState
* Transaction-related cleanup
* Changed ownership queries to return full bond information instead of just a bool
* Function for updating post rewarding storage
* Changed the order of arguments in decrementing reward pool
* Helpers for updating storage after rewarding
* Removed redundant turbofish
* [ci skip] Generate TS types
* Changed bond/delegation validation
* Made clippy happier
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Starting a refactor to cut the huge files into chunks
* Fixing some lints
* ibid
* Mixnode and gateway bonding tests moved
* All transaction test moved into submodules
* Finished splitting out transactions.rs from root into submodules.
* Moved mixnet params state into submodule
* Recombined modules for few top-level actions
* Moving mixnode bonding queries into their own file
* Removed some unused imports
* Got tests running again. Max limit tests not right.
* Fixed tests
* Started moving delegation queries into own module
* Finished moving delegation queries into their own module
* Cleanup
* Moving query limits into relevant modules
* Putting query limits back at top-level
* Using prefix to make storage usage a little more explicit
* Separating storage into smaller chunks
* More storage refactoring
* Finished moving all storage into modules
* Moved all storage prefixes into relevant modules and made them not-public
* Renamed the mostly-empty queries module to query_support
* ibid
* Fixed query support rename problems
* Started to move rewards-related helpers into their own module
* Started moving delegations-related helpers into their own module
* Moved more code from global helpers into delegations helpers
* Moved all remaining test helper code from main helpers file into test helpers
* Made use of test_helpers explicit via a module rename.
Also got rid of non-explicit usages
* Moved mixnode storage retrieval limits into mixnodes storage module
* Moved bond retrieval max limit into storage moduel
* Moved more storage limits into mixnodes storage file; fixed a gateways limit test.
* Added a note on gateways limits constants
I'll re-use the mixnodes values, but it doesn't have to be this way.
We could easily make a specific constant for gateways instaed.
* Renamed "state" to GlobalContractParams
* Pulled bit of test helper code up a level
* Small cleanup of zero spacing in constants
* Made a local helper method private
* Renaming GlobalContractParams to ContractSettings and StateParams to ContractSettingsParams
* ibid
* Renamed contract settings storage methods from "config" (which is a bit vage to "contract_settings"
* Indulging a fullword as a personal protest vs the Go programming language
* Renaming mixnet settings to mixnet contract settings
* Making validate_mixnode_bond private and moving it downwards in the file
* Moving gateway bond validation to the bottom of the tests file
* Getting the wallet compiling again.
* Updated TypeScript client with new types and contract method names
* Updating rust validator client with new contract method names and types
* Fixed type error in mixnet-contract shared msg.
* Used new contract method names and types
* Fixed warnings in non-test code
* All tests compiling
But not passing yet
* Fixed test compilation warnings
* Fixed tests
* Test-locked Delegations struct
Co-authored-by: dave <dave@nym-mbp.lan>
Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
* Unnrolled the loop into separate function
* Ugly way of saving rewarding status
* Initial way of rewarding next page of delegators
* Attribute passing
* Promoted transactions to directory
* Moved rewarding-related functionalities into separate file
* [ci skip] Generate TS types
* Better errors on double rewarding attempt
* Removed old rewarding call
* Test fixes
* Some cleanup
* Paged mixnode rewarding test + serde fixes
* Tests for delegator rewarding
* ExecuteMsg for MixDelegatorRewarding
* Made validator-api code compliable
with bunch of todo!() macros
* Removed Option wrapper from params in MixnodeToReward
* Calculating uptime for entire epoch
* Created shared MIXNODE_DELEGATORS_PAGE_LIMIT constant
* Using new rewarding messages in validator API
* cargo fmt
* Updated wallet state types
* Additional test for correct rewarding information
* Query for rewarding status
* Additional test regarding delegator rewarding
* Client methods for obtaining rewarding status
* Validator API checking for full rewarding
* Removed unused field from validator api config template
* Waiting for MINIMUM number of test routes
* Waiting initialisation_backoff in the early return case
* Fixes crash condition in validator API when calculating last day uptime
* Fixed typo
* Dealing with the case of rewarding mixnode with 0 uptime
* Removed temporary unwrap
* Guarding against 0-size rewarded/active sets
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Introduced rewarding_interval_nonce to contract state
* Queries for ibid.
* Mixnode demanded set size
* Routes for obtaining demanded/active mixnode sets
* Testing only demanded nodes
* Typo
* Initial state
* Feature-locking unused imports
* Generating pseudorandom (with deterministic seed) demanded mixnodes set
* cargo fmt
* Fixed tauri state
* Renamed network monitor address to the rewarding validator
* [ci skip] Generate TS types
* Notice for the future
* Transactions to begin/finish mixnode rewarding + double rewarding protection
* Validator API using new contract calls
* Removed dead code from an old experiment
* [ci skip] Generate TS types
* Removed unused import
* Renamed 'demanded' set to 'rewarded' set
* Some renaming action
* [ci skip] Generate TS types
* Fixed post-merge dependency issue in tests
* Post merge test fix
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* 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>
* Removed separated ipv4 and ipv6 testing
* Testing network using chosen core nodes
This should have probably been like 20 independent commits... sorry...
* SQL migrations for updated schema
* SQL updates
* Using absolute uptime directly
* New uptime calculations
* Config entries, more DB work, some cleanup
* Additional API query routes
* More SQL and API work
* Changed `_` to `-` in new routes
* Removed good topology from config
* Fixed gateways reader yield condition
* Initial gateways pinger
* Minor cleanup and logging level decreases
* Missing trait derivations
* Further logging adjustments
* Unused commented out import
* Claiming additional bandwidth in coconut feature when low
* Fixed build with coconut feature
* Minimum number of test routes
* Making beta/nightly clippy happier
* Additional methods on nymd client
* Checking for time out errors
* Attempting retransmission on suspected time out
* Don't report error if tx is a mempool duplicate
* '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
* Remove migration code
* Added function to iterate over delegation of variable type
* Add unit tests
* Refactored some naming and reused mix/gateway functionality
* Borrow bucket instead of move
* Linked with existing delegations function
* Migration of left-over delegations
* Remove unused imports
* Put a gateway test as well, next to the mix one
* Expose queries for all delegations
* Change break point
* Added client side calls to the new queries
* Fix clippy
* Added pagination and read check tests
* Fix gateway test from the last commit
* Test functions for (de)serialization of identity and owner (in)to storage keys
* Add delegation function unit test
* Feature guard import
* Changed UnpackedDelegation from type to struct
* Remove mutable parameter and put start_after in returned value
* Made all delegations into iterator for OOM safety
* Fix clippy
* Add test for delegations iterator size in memory
* Change map with if let for ease of read
* Use DENOM instead of hardcoded value
* Added separate gateway active set size
* Grabbing contract state
* Defined PartialOrd on MixnodeBond and GatewayBond
* Some initial stub for active set
* Unit tests for mixnode and gateway bond partialord implementation
* Obtaining active sets
* Active nodes routes
* Additional methods on validator client
* Added state migration
* Feature locking unused import
* Fixed State test fixture
* Included block height for partial_ord
* Missing post-merge imports
* api on the client for active nodes
* Native/socks5/wasm clients using active nodes
* Rewarding only active nodes
* Updated validator client StateParams definition
* Gateway active set size
* Contract migration update
* Cargo fmt
* Updated TauriStateParams
* [ci skip] Generate TS types
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* 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
* New tables for rewarding
* Updated cosmos-sdk version
* Removed reward-specific node status routes
* New rewarding-specific config entries
* Additional network defaults
* Initial periodic rewards from validator api
* Replaced print with log
* Filtering nodes with uptime > 0
* Additional failure logging statements
* Fixed operation ordering
* Adjusted next rewarding epoch determination
* Modified rewarding behaviour to keep track of rewarding in progress
* Improved error message on config load failure
* Additional log statement
* Adjusted rewarding gas limit calculation
* Made naming slightly more consistent
* Fixed incorrect parentheses placement
* Fixed fee calculation
* Cargo fmt
* Removed failed merge artifacts
* Introduced comment for any future reward modification
* typos
* Helper functions for the future
* Making @mfahampshire 's life easier
* Redesigned epoch + rewarding skipped epochs (if possible)
* Removed old merge artifacts
* Naming consistency
* Constraining arguments
* Removed unnecessary if branch
* Ignore monitor check for current epoch
* Additional checks for current epoch data
* Monitor threshold check
* cargo fmt
* Fixed post-merge issues in transactions.rs
* New database table holding monitor run info
* SQL interface for new table
* Updated uptime calculation to instead rely on number of monitor test runs
* 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>