It seems that current approach stops workring after amount of parallel
connection exceeds ~500. This PR introduces an 'async' feature which
enable asyncronius, tokio based implementation of stratum server.
* fix bug with passing current_difficulty in Handler
I passed in Handler current_difficulty as an u64, so it was copied
and all later changes were ignored. In this commit I pass referece on
RwLock with current_difficulty.
* fix crash in build_block
* improve error handling
* print error message on unknown error
* replace original server by tokio based one
* fixes after review
* reduce sleep time in mail loop to 5ms
* Allow to have more than min_peers/2 outbound peers
Default value is 8, so we allow only 4 outbound peers, unfortunately if a node is behind NAT it can't get inbound peers and it stucks with 4 peers as maximum.
This PR allows a number of outbound peers to be between min_peers and max_peers/2. Node behind NAT will eventually have just min_peers number of peers.
* Extract into healthy_peers_mix function
* Add a slate version field
* Move current slate version to constant
* Change slate version to uint
* Add default 0 incase it's missing (pre-versioning)
* move slate initialisation outside of selection function
* refactor internal tx lib to support recipient (or anyone else) first models
* rustfmt
* rework init api function
* rustfmt
* refactor wallet lock closures to a defined fnmut type
* rustfmt
* comments for clarification
* rework bucket txs
* introduce max_block_weight to global (based on chain_type)
not yet in use anywhere...
* now using global::max_block_weight() everywhere
* testing max_block_weight needs to be big enough to cover existing chain tests...
* add some test coverage for prepare mineable transactions at the block weight limit
introduce AsLimitedTx{max_weight} so we can build artifically small blocks (per mining config)
* cleanup
* default_mineable_max_weight is just the default max_block_weight
we do not need to account for coinbase reward here (tx vs block)
* 75 change outputs in a test is not valid now that we have a low block weight limit...
* Refresh coinbase key if the existing was removed
It happens if `wallet check` runs in parallel.
Alternative solution is not to remove it during the check.
Fixes#2412
* Save and display optional slate messages
* rustfmt
* fixes and test updates
* rustfmt
* output json
* rustfmt
* add better serialisation of slate message, rename to secp_ser, add tests for serialization functions
* rustfmt
* max length for message enforced by API
* rustfmt
* protect rpc_response from None.unwrap
* protect login handler from crashing before current_block_versions has had time to get populated
* protect worker_stats_id finding from None
* fix owner_api docs: wrong port number
* update ports since PR #2405. We now allow both floo and mainnet owner_apis to run in parallell on a single server, with ports 13420 or 3420
* correction since there is no --mainnet flag
* fixes the comment by @karkagis