mn spread
mn spread is a visualization tool that allows you to check how masternodes are distributed around the world by processing a list of unique ip addresses.
It resolves ISP and geo location and groups this by region and ISP in real-time.
Three ways of fetching ip list information implemented:
- Parse the IP list from a specific
web explorer
.
- Use a local
wallet cli
to get recent masternode information
- Use a webcrawler that returns you recent information about masternodes
Flow
- get list of all active masternode ip addresses of a coin
- request
ipstack api
with ip address to retrieve information
- analyze and group by location and provider
- visualize
Example visualization
coins implemented
basic coin view
Installation
Its a simple go project that you can just checkout and build an executable. Requires go v1.10+
go get -u "github.com/cwntr/mn-spread"
Code dependencies
github.com/dnaeon/go-vcr/recorder
HTTP request/response recorder
github.com/gin-gonic/gin
Gin Framework to utilize the frontend + APIs
github.com/cwntr/go-crypto-tools
for client, wallet cli and webcrawler's
mn spread API
Coins Details
Util
(GET) /api/totals
lists current MN nodes IPs counts
(GET) /history/:coin/:start-date/:end-date
returns archived .json objects in the given time range.
e.g. /history/xsn/2019-02-01/2019-02-10
will return a list of 10 MN spread result objects.
XSN Governance
Available on: https://mn-spread.de/xsn/gov
(GET) /api/xsn/governance/totals
reads local XSN wallet cli for total governance stats
(GET) /api/xsn/governance/objects
reads local XSN wallet cli for proposal information
(GET) /api/xsn/governance/object/:hash
reads local XSN wallet cli for a specific object (:hash) parameter the object hash
XSN Merchants (TPoS)
Available on: https://mn-spread.de/xsn/merchants
(GET) /api/xsn/merchants/list
reads local XSN wallet cli for merchant contracts and calculates commission rate based on last rewards
Translate IP to Geo Location / ISP info: ipstack.com
(https://ipstack.com/)
Using a free api key
for the ipstack api
is request limited by 10k requests/ month, I decided to record the results. If same
ip is requested again, it will replay the response it received before. So only new ip's will be requested.
free template provided by web-framework: mdbootstrap
(https://mdbootstrap.com)
map: jVectorMap
(http://jvectormap.com/)