* Extracted constants that could realistically be controlled by governance to constants.rs
Also made interval control be more explicit in the contract
* Extracted active set work factor to a constant
* Required type changes in wallet code
* [ci skip] Generate TS types
* Missing change in test code
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Fix wasm client
* Re-enable CI on wasm client
There is an `unused-unit` lint that will fail for now, but this is
regarded as a false positive and should eventualy get fixed:
https://github.com/rustwasm/wasm-bindgen/issues/2774
* The wasm tests would be run under native arch
* Rename function/variables mixnodes->set
* Stub utility interface
* Rewarded set contract interface
* Move epoch to common, epoch to contract
* Move epoch to the chain
* Rewarded set validator-api
* [ci skip] Generate TS types
* Epoch queries
* Moved new code to a new module
* Restored cosmwasm dependencies to their beta.3 versions for better compatibility with the rest of the codebase
* Rewarded set write reorganisation
* Stub for validator api module responsible for rewarded set updates
* Reorganised validator api cache
* Pending contract changes
* Relevant updates to the validator client
* Updating rewarded set based on contract state
* Advancing/Setting current epoch in the contract
* Using blocktime as 'now' at startup
* Adjusted validator-api side rewarding code
* Contract cleanup + query for epoch rewarded set heights
* [ci skip] Generate TS types
* Simplified rewarder processing loop and initial sync
* [ci skip] Generate TS types
* Fixed EXISTING query-related unit tests
* Fixed existing unit tests for rewarding-related transactions
* Cargo fmt
* Removed some dead code
* Using cosmwasm 1.0.0-beta3 for compatibility [with cw-storage-plus and rest of codebase]
* Missing TryInto import
* Additional storage and query related unit tests + a bug fix
* Transaction-related unit tests + bug fixes
* Required migration code
* Update common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs
Co-authored-by: Drazen Urch <drazen@urch.eu>
* Update common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs
Co-authored-by: Drazen Urch <drazen@urch.eu>
* Constant renaming
* Changed determining previous epoch return type to Option<Epoch> if they would precede the genesis
* Exposed the new endpoint to the wallet
* Epoch-related unit tests fixes
* Recommended #[must_use] on next_epoch method
* Renamed all epoch occurences to interval
As they refer to the 'rewarding interval'
Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* Add identicons package
* Tidy up styling and move methods into component directories with better naming
* Add mixnode status colours to theme
* Mixnode status and icon components
* Add status to mixnode types
* Add API method to get mixnode details
* Add mixnode details to state
* Add status and name+description section to mixnode detail page
* Wrap with div instead of p
* Limit width of description and link to new tab
* Limit length of link button and truncate with elipsis
* Replace `filter` with `find`
* Move mix node detail components to a location that is better named
* Refactor mixnode detail state and separate into an independent context from main state.
This prevents the mixnode detail page from showing stale data when switching between mix nodes.
* Tidy up mixnode detail page adding new state provider and a guard component to handle loading, error and not found states
* Layout changes to mixnode description header section
* Add methods to Explorer API client to get a mixnode by id, active set by status and overview summary
* Add color prop to StatsCard and make count optional
* Add optional start and end children to TableToolbar
* Tidy up naming
* Add summary overview and getting mixnodes by active set status to main state
* Add mix node status overview cards
* Add mix node status to routes
* Mixnode list has a dropdown component to select the active set status
* Clean up caching code
* Add resource to get a single mixnode by id
* Add API resources to get `active`, `inactive` and `standby` mixnodes
* Add mixnode summary to API
* Add overview summary endpoint to API
* Fix OpenAPI/swagger base url
* Make clippy happy
* Add method to get validators
* Add methods to get active and rewarded mixnodes
* Fix naming
* Move client creation to crate root
* Move cache to module
* Delete unused files
* Add validators API resource
* Add gateways API resource
* Move tasks to crate root
* Add new HTTP resources for validators and gateways to routes
* Tidy up naming and locations for mixnodes
* Add validator and gateways to state, and tidy up naming
* Add gateways and validator modules to main
* Overview shows validator and gateway summaries from state
* Bundle variable weight Open Sans fonts
* Fix up font weights and sizes
* Fix up typing
* Fix up social icons
* Fix navbar colour
* Fix paper colour in dark mode and border radius
* Fix up stats card
* Tidy up Nym icons
* Fix up overview
* Fix up spacing and padding for overview
* Add light mode shades that are darker for mixnode status values
* Review feedback
* Fix clippy on relevant lints
return_self_not_must_use still produces errors, but that will be
auto-fixed once the change to move it to pedantic is released to beta
channel
* Run fmt
* Moved mixnode status route to node status api module
* Introduced validator-api endpoint for estimating mixnode's reward
* Stake saturation endpoint
* kebab-cased coconut routes
* Created separate crate for validator API models
* Additional routes in validator API client
* Introduced support for new queries in the wallet
* Typescript type derivation
* Fixed up date in license notice
* Introduce a method to update mixnode configuration
Right now, only for profit_margin_percent
* Check that the new profit margin is valid
* Extend a bit the test coverage of mixnode update
* Create validator client function
* [ci skip] Generate TS types
* Update wallet
* Update the bond height as well, as if a rebond was made
Co-authored-by: neacsu <neacsu@users.noreply.github.com>
* Restored mixnode refresh rate to a more sane value
* Moved PrettyMixNodeBondWithLocation to models.rs
* Renaming
* Exposed ability to query for rewarded mixnodes in the validator client
* Reorganised mix_nodes module
* Determining mixnode status (active/standby/inactive)
* Moved LocationCache to separate lock
* Minor cleanup
* Changed serialization case of status enum
* Made clippy happier
* Slightly better grammar
* 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>
* Make develop branch agnostic of the network
* Update network defaults
* Short node identity signature check
Fix tests
* Do not set proxy only for this time
* Update contract addresses
* Network Explorer: configure URLs with `.env` file
* Network Explorer API improvements:
- upgrade `okapi` for swagger generation across multiple resources
- switched `GET mix-node` to `GET mix-nodes`
- added error message when no geolocation env var is set and process continues
* Network Explorer improvements:
- fix up API urls after Network Explorer API changes
- set currency denominations in `.env` file
- set API endpoints in `.env` file
* Network Explorer: change prod env to round robin DNS
* Update test
Co-authored-by: Mark Sinclair <mmsinclair@gmail.com>
* Made client compile again + set auto fees
* Simplified client construction by allowing only a single URL
* wip
* Simplified signing assertion
* Initial implementation of queries
* Implemented all basic nymd queries
* Validator API queries
* Signing related queries
* Using default arguments
* Removed redundant else branches
* `eslint` and `prettier` formatting on Typescript validator client
* Removed cyclic import on Coin type
* Missing direct dependencies
* Ingoring cyclic imports
* Removed unused argument
Co-authored-by: Mark Sinclair <mmsinclair@gmail.com>
* 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>
* 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
* Corrected used bond/pledge terminology
* ibid for the wallet and explorer
* [ci skip] Generate TS types
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
* 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>
* 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>
* Vesting contract (#900)
* Initial interface spec
* .gitignore
* Finalize implementation
* Correct assumptions, use wasm_execute
* Cleanup
* Track delegation balance
* Add delegation flow img
* Proper messaging from the vesting side
* Add proxy_address to RawDelegationData
* Wrap up (un)delegation
* Add proxy: Addr to MixNodeBond
* Stub in bonding/unbonding
* Migrate vesting to cosmwasm 1.0
* Rebase on top of 1.0.0-pre1
* Reimplement delegations tracking with a Map
* Migrate to cw-storage-plus
* Restructure code, add tests
* Streamline contract code, as per review
* Address review comments
* Pre-merge rebase
* Few more nits
* Few more nits
* Fix test
* cargo fmt
* Fix beta CI
Co-authored-by: Drazen Urch <durch@users.noreply.guthub.com>
Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
Co-authored-by: jstuczyn <jstuczyn@users.noreply.github.com>
Co-authored-by: Drazen Urch <durch@users.noreply.guthub.com>
* Introduces query for contract build information
* Removed temporary test garbage
* Removed unused imports in validator-client if built without nymd-client feature
* 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>