* peers: also test IP address in blacklist
previously IP was only tested if "host" itself was an IP
* peers: IP based restrictions on internal peer list
forbid multiple peers sharing single IPv4
forbid multiple peers sharing IPv6 /64
limit number of .onion peers relative to total number of peers
* Make resource module optional in server/env.py
* Ignore root user check if starting on Windows.
* Skip signal handler setup on Windows.
* Graceful shutdown on Windows; more elegant way to detect Windows.
* rename method "upgrade_required"
* attempt to crash old clients to force users to upgrade
On the BTC chain, exploit a DOS vulnerability in old Electrum clients,
to kill their network thread and make them unusable. This should force
users of old clients that are vulnerable to the transaction-broadcast
phishing attack to upgrade their client.
send_notification adds the retreived collateral to self.mns during masternode.subscribe, this can issue a runtime error because size of self.mns changes during iteration.
Reproduce: issue multiple masternode.subscribe (with valid and invalid collaterals) during the same session.
* Blacklist logic:
* do not return blacklisted peers to clients
* blacklist is retrieved from BLACKLIST_URL
* blacklist is refreshed every 10 minutes
* for BitcoinSegwit, BLACKLIST_URL defaults to https://electrum.org/blacklist.json
* make sybil detection independent from peer discovery