func (s *ProxyServer) StatsIndex(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) hashrate, hashrate24h, totalOnline, miners := s.collectMinersStats() stats := map[string]interface{}{ "miners": miners, "hashrate": hashrate, "hashrate24h": hashrate24h, "totalMiners": len(miners), "totalOnline": totalOnline, "timedOut": len(miners) - totalOnline, } var upstreams []interface{} current := atomic.LoadInt32(&s.upstream) for i, u := range s.upstreams { upstream := convertUpstream(u) upstream["current"] = current == int32(i) upstreams = append(upstreams, upstream) } stats["upstreams"] = upstreams stats["current"] = convertUpstream(s.rpc()) stats["url"] = "http://" + s.config.Proxy.Listen + " -u minername -p x" t := s.currentBlockTemplate() stats["height"] = t.Height stats["diff"] = util.GetDifficultyRatio(blockchain.BigToCompact(t.Difficulty)) stats["luck"] = s.getLuckStats() stats["now"] = util.MakeTimestamp() json.NewEncoder(w).Encode(stats) }
// This example demonstrates how to convert a target difficulty into the compact // "bits" in a block header which represent that target difficulty . func ExampleBigToCompact() { // Convert the target difficulty from block 300000 in the main block // chain to compact form. t := "0000000000000000896c00000000000000000000000000000000000000000000" targetDifficulty, success := new(big.Int).SetString(t, 16) if !success { fmt.Println("invalid target difficulty") return } bits := blockchain.BigToCompact(targetDifficulty) fmt.Println(bits) // Output: // 419465580 }
func TestBigToCompact(t *testing.T) { tests := []struct { in int64 out uint32 }{ {0, 0}, {-1, 25231360}, } for x, test := range tests { n := big.NewInt(test.in) r := blockchain.BigToCompact(n) if r != test.out { t.Errorf("TestBigToCompact test #%d failed: got %d want %d\n", x, r, test.out) return } } }