* Introduce reverse delegation bucket
* Add client command
* Fix clippy error
* Added tests in queries
* Add tests in transactions
* Migration code. Will be reverted after it's called on testnet
* Replace unwrap with expect
* Move some test code in the right file...
... to remove unnecessary auxiliary function.
* Reduce the scope to migration auxiliary functions
* Rename everything from [node]reverse to reverse[node]
* Fix fmt
* 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
* Rename storage read functions for bond reward rates
* Add reward values per epoch in State
Calculate delegation rewards per epoch for mixnodes and gateways, which
are used when the delegators are rewarded for their stake.
* Migration commit, will be reverted after the testnet contract is updated
* Tiny PR to add stake reward rates and bump version
This is needed so that we can publish the 0.17 version.
* Add the changes to contracts as well
On second thought, update the contract together with the client, and
leave the wallet changes for another PR.
* Rename _stake_ to _delegation_
* 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
* Made contract address optional to allow for contract upload and initialisation
* Using forked cosmwasm
* Basic wallet functionalities
* WIP
* Generic abci_query method
* More API stubs with some semi-working code
* More API stub work
* Moving from fork of cosmos-rust to the upstream
* Implemented most sign-less cosmwasm client methods
* Full contract upload with log parsing
* Implemented most of remaining methods on signing client
* Some initial cleanup on existing code
* Feature-locking nymd client
* Better type for base account
* Pagination handling
* Searching transaction by concrete hash
* basic search_tx
* More cleanup
* Disabled default validator-client features on wasm client
* Fixed account conversion
* Fixed typo in cargo.toml
* Moving back to main cosmos-sdk repo
* Re-exported connect functions
* comment
* Wallet no longer storing signing keys
* Went back to the trait approach
* Example stub of future API
* Removed needless borrow
* Fixed starting page
* Fixed typo
* Using centralised config defaults
* 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
* Basic storage stub
* New models for new node status api
* Route handling
* Mounting new routes
* Missing selective commit
* Moved network monitor related files to separate package
* Starting to see some sqlx action
* Schema updates
* Log statement upon finished migration
* Removed old diesel related imports
* Converted mixnode cache initialisation into a fairing
* Moved cache related functionalities to separate package
Also defined staging there
* Created run method for validator cache + removed unwrap
* Removed old node-status-api types and left bunch of todo placeholders in their place
* Fixed managing validatorcache
* Status reports are starting to get constructed
* Submitting some dummy results to the database
* Removing duplicate code for generating reports
* Removed statuses older than 48h
* Initial attempt at trying to obtain reports for all active nodes
* Removed duplicates from the full report
* Grabbing uptime history
* Updating historical uptimes of active nodes
* Updated sqlx-data.json
* Removed all placeholder foomp owner values
* Changed Layer serde behaviour for easier usage
* Extended validator api config
* Initial (seems working !) integration with network monitor
* Added database path configuration to config
* Using ValidatorCache in NetworkMonitor
* Flag indicating whether validator cache has been initialised
* Introduced a locla-only route for reward script to perform daily chores
* Flag to save config to a file
* Moved spawning of receiving future to run method rather than new
* Removed arguments that dont make sense to be configured via CLI
* Removed dead code from config file
* More dead code removal
* Added validator API to CI
* Corrected manifest-path arguments
* Constructing network monitor by passing config
* Combined validator API CI with the main CI file
* Using query_as for NodeStatus
* Checking if historical uptimes were already calculated on particular day
* Making id field NOT NULL
* More query_as! action
* Updated sqlx-data.json
* Removed unused chrono feature
* Renamed the migration file
* Changed default validator endpoint to point to local validator
* Removing unnecessary clone
* More appropriate naming
* Removed dead code
* Lock file updates
* Updated network monitor address in contract code
* Don't stage node status api if network monitor is disabled
* cargo fmt
* Updated all license notices to SPDX
* 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>
* Changed bond Vec<Coin> into a Coin
* Introduced total_delegation field to bond models
* Restoring total old delegation
* Updating total delegation on new delegations
* Updating total delegation on removal
* Keeping track of delegation increase during rewarding
* Updating total delegation during rewarding + additional response attributes
* Removed irrelevant tests
* Fixed storage-related tests
* Added additional test assertions for delegation increase
* Added additional node rewarding test assertions
* Tests for correct reward calculation + gateway rewarding early termination
* Added delegation field to parsed node type
* Updated typescript bond types
* Moved `OLD_DELEGATIONS_CHUNK_SIZE` to file-wide namespace so that it could be used in tests
* Tests for finding old node delegations
* ibid.
* Issue#657
* Additional test assertions regardingn total delegation
* Missed test field after merge
* ibid
* Cleaning up storage related imports
To elaborate further, to update Mixnode constructor it would require adding yet two more arguments and at that point the compiler warns about too many arguments
* Extended no delegation found errors with address information
* Error now use Display implementation rather than Debug
* Delegation correctly contains owner address
* Updated js delegation type
* Bumped validator client version number
* Delegation::owner returns owned type
* cargo fmt
* Calculating reward per epoch
* Initial uptime-based rewards
* Setting monitor address on init + minor cleanup
* Ability to reward nodes through validator client
* Preemptively updated client version
* Using hardcoded monitor address
* Removed unnecessary let binding
* Comment typo
* Changed validator-client package.json version
* Checking for broadcast error
* Added epoch_length to typescript client's stateparams
* Setting default state on migration
* Removed reward mixnode/gateway methods from the client api
* api for executing custom contract methods
* Removed whitespace leftover from the merge
* Extra comments
* Cleanup
Co-authored-by: Dave Hrycyszyn <futurechimp@users.noreply.github.com>
* 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
* A pull request for discussion about contract state variables
* Updated contract state struct
* Introduced transaction to update the contract state
* Moved transactions to separate file
* Corrected return type on query
* Corrected query match
* Added test for state params query
* Test for state params update
* Removed unused imports
* Helper functions to query for state params
* Removed hardcoded inside bond, old mix bond value
* Helper function to update contract state
* Changed typescript StateParam from numbers to strings
* Somehow unresolved post-merge issues in tests
* Introduced additional helpers for the validator client to use the new contract features
* Using the state-specified bond values
Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
* 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
* Exporting Coin struct, needed for wallet
* Passing the url through instead of using local options.
This gives us the ability to hook up to the new validator
* Removing examples
* Simplifying dependencies a bit
* Setting all contract denominations to uhal
* Making stakeDenom configurable throughout
* 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
* Defined gateway and gatewaybond types
* Gateway related errors
* New message types
* gateway tests fixtures and helpers
* Handling of gateway-related messages
* Fixed most of clippy warnings
* 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