Pages:
Author

Topic: Some Statistics - page 2. (Read 14283 times)

hero member
Activity: 574
Merit: 513
August 08, 2010, 03:57:58 PM
#9
http://nullvoid.org/bitcoin/flot/ <-- This will come out as ~7-8Mb of data, so don't bother using it directly.  My upload bandwith is very limited.

s == start
e == end (takes precedence over length)
l == length

e.g.
start from block 1000 and end at block 1099
http://nullvoid.org/bitcoin/flot/?s=1000&e=1099
http://nullvoid.org/bitcoin/flot/?s=1000&l=100

start from block 73000 and end at current block
http://nullvoid.org/bitcoin/flot/?s=73000

show first 100
http://nullvoid.org/bitcoin/flot/?e=99
http://nullvoid.org/bitcoin/flot/?l=100

This is similar to gnuplot graphs above, except no images and all data is processed locally/client side using flot/javascript.
For large queries (range of 10,000 blocks and higher), expect delays as my upload bandwidth is limited to 768Kb/sec.
newbie
Activity: 11
Merit: 0
August 08, 2010, 01:05:44 PM
#8
Looks great Grin

EDIT:
And it's getting better every day.
hero member
Activity: 574
Merit: 513
August 08, 2010, 09:04:28 AM
#7
You do realize a moving average does not have to be animated, right?

Update: http://nullvoid.org/bitcoin/statistix.php has non animated moving averages so I guess you do. Smiley
The moving average line is a great addition to the graphs!
Thanks.

It's a moving moving average! ^_^
sr. member
Activity: 294
Merit: 252
Firstbits: 1duzy
August 08, 2010, 03:57:30 AM
#6
You do realize a moving average does not have to be animated, right?

Update: http://nullvoid.org/bitcoin/statistix.php has non animated moving averages so I guess you do. Smiley
The moving average line is a great addition to the graphs!
Thanks.
hero member
Activity: 574
Merit: 513
August 07, 2010, 06:45:36 PM
#5
My statistix page now shows moving average
Also, http://nullvoid.org/bitcoin/gnuplot/anim

s == starting block number (default 50)
i == interval (default 1)

e.g. http://nullvoid.org/bitcoin/gnuplot/anim/?s=1000&i=10

I'm pre-generating the images the now, so not all are available yet.
Update: All images are pre-generated

960x720 ~10kb and less per image

The images may change in future if someone suggests additional data for the images that are useful to include in animation sequence.

note: http://nullvoid.org/bitcoin/gnuplot/anim/?s=1000&i=0 if you want to see still image for certain block number/range
hero member
Activity: 574
Merit: 513
August 03, 2010, 05:11:54 PM
#4
If you have a local ap (apache+php) server, you can run this code and keep it open in browser window and it should update approximately every second.  It isn't 100% precise, but fairly close.

This statement is no longer accurate.  Initially I had been generating my own timestamps based on when the script would see a new block.  Now the timestamp data is extracted from the database and is precise as possible. 
hero member
Activity: 574
Merit: 513
July 16, 2010, 12:48:00 AM
#3
If you have a local ap (apache+php) server, you can run this code and keep it open in browser window and it should update approximately every second.  It isn't 100% precise, but fairly close.

Added: last=$(date +%s); tail -F debug.log | grep --line-buffered height= | sed -u 's/.*\(height=\(.*\)\)/\2/g' | while read line; do now=$(date +%s); delta=$(( $now - $last)); echo $now $delta $line; last=$now; done
sr. member
Activity: 308
Merit: 258
July 16, 2010, 12:46:10 AM
#2
That's cool, but is the time right on block discovery? My PC army discovered 2 of the last 10 blocks and it took them a lot longer than a few seconds?

[edit] Seems right now, I missed the block by 1 when counting backwards. So cool, blocks are discovered pretty fast. So people don't need mega-fast multi-core systems to win the discovery lotto  Grin
hero member
Activity: 574
Merit: 513
July 16, 2010, 12:24:25 AM
#1
http://nullvoid.org/bitcoin/statistix.php
http://nullvoid.org/bitcoin/statistix.php?showallblocks (if you want to see timestamps for all 69,000+ blocks until now) (2.5Mb+ output)
http://jsonrpcphp.org/?page=download&lang=en

statistix.php
Code:
header("Content-type: text/html");
require_once 'jsonRPCClient.php';
$data=new jsonRPCClient('http://127.0.0.1:8332');
$blockcount = $data->getblockcount();
$now = date("U");

$blockfile = "blockdata";
$data = file($blockfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); array_pop($data);
foreach ($data as $line) {
$blocks = strtok($line, " ");
$date = strtok(" ");
$avghash = strtok(" ");
}
?>
 
  
 
 

$data = array_reverse($data);
echo " /-             Statistix             -\\\n";
echo "|            PHP Source Code            |\n";
echo "|---------------------------------------|\n";
echo "|   Last block discovered in duration   |\n";
echo "|       and when it was discovered      |\n";
echo "|---------------------------------------|\n";
echo "|          Now  $now              |\n";
$lastdate = $now - $date; $lastdate .= ($lastdate == 1) ? " sec" : " secs"; $lastdate .= str_repeat(" ", 10 - strlen($lastdate));
$lastblock = trim($blocks); $lastblock .= str_repeat(" ", 12 - strlen($lastblock));
echo "|   Last Block  $lastdate:$lastblock |\n";
$block = array();
foreach ($data as $line) {
$blocks = strtok($line, " ");
$date = strtok(" ");
$avghash = strtok(" ");
$block[$blocks] = $date;
if (($now - 60) <= $date) { $min01date = $date; $min01blocks = $blocks; }
if (($now - 120) <= $date) { $min02date = $date; $min02blocks = $blocks; }
if (($now - 180) <= $date) { $min03date = $date; $min03blocks = $blocks; }
if (($now - 240) <= $date) { $min04date = $date; $min04blocks = $blocks; }
if (($now - 300) <= $date) { $min05date = $date; $min05blocks = $blocks; }
if (($now - 600) <= $date) { $min10date = $date; $min10blocks = $blocks; }
if (($now - 1200) <= $date) { $min20date = $date; $min20blocks = $blocks; }
if (($now - 1800) <= $date) { $min30date = $date; $min30blocks = $blocks; }
if (($now - 2400) <= $date) { $min40date = $date; $min40blocks = $blocks; }
if (($now - 3000) <= $date) { $min50date = $date; $min50blocks = $blocks; }
if (($now - 3600) <= $date) { $hr01date = $date; $hr01blocks = $blocks; }
if (($now - 7200) <= $date) { $hr02date = $date; $hr02blocks = $blocks; }
if (($now - 10800) <= $date) { $hr03date = $date; $hr03blocks = $blocks; }
if (($now - 14400) <= $date) { $hr04date = $date; $hr04blocks = $blocks; }
if (($now - 18000) <= $date) { $hr05date = $date; $hr05blocks = $blocks; }
if (($now - 21600) <= $date) { $hr06date = $date; $hr06blocks = $blocks; }
if (($now - 51200) <= $date) { $hr12date = $date; $hr12blocks = $blocks; }
if (($now - 102400) <= $date) { $day1date = $date; $day1blocks = $blocks; }
if (($now - 204800) <= $date) { $day2date = $date; $day2blocks = $blocks; }
if (($now - 307200) <= $date) { $day3date = $date; $day3blocks = $blocks; }
if (($now - 409600) <= $date) { $day4date = $date; $day4blocks = $blocks; }
if (($now - 512000) <= $date) { $day5date = $date; $day5blocks = $blocks; }
if (($now - 614400) <= $date) { $day6date = $date; $day6blocks = $blocks; }
if (($now - 716800) <= $date) { $wk01date = $date; $wk01blocks = $blocks; }
if (($now - 1433600) <= $date) { $wk02date = $date; $wk02blocks = $blocks; }
if (($now - 2150400) <= $date) { $wk03date = $date; $wk03blocks = $blocks; }
if (($now - 2867200) <= $date) { $wk04date = $date; $wk04blocks = $blocks; }
if (($now - 5734400) <= $date) { $wk08date = $date; $wk08blocks = $blocks; }
if (($now - 11468800) <= $date) { $wk16date = $date; $wk16blocks = $blocks; }
if (($now - 22937600) <= $date) { $wk32date = $date; $wk32blocks = $blocks; }
if (($now - 37376000) <= $date) { $yr1date = $date; $yr1blocks = $blocks; }
}

if ($min01blocks == "") $min01 = ""; else $min01 = "$min01date:$min01blocks";
if ($min02blocks == "") $min02 = ""; else $min02 = "$min02date:$min02blocks";
if ($min03blocks == "") $min03 = ""; else $min03 = "$min03date:$min03blocks";
if ($min04blocks == "") $min04 = ""; else $min04 = "$min04date:$min04blocks";
if ($min05blocks == "") $min05 = ""; else $min05 = "$min05date:$min05blocks";
if ($min10blocks == "") $min10 = ""; else $min10 = "$min10date:$min10blocks";
if ($min20blocks == "") $min20 = ""; else $min20 = "$min20date:$min20blocks";
if ($min30blocks == "") $min30 = ""; else $min30 = "$min30date:$min30blocks";
if ($min40blocks == "") $min40 = ""; else $min40 = "$min40date:$min40blocks";
if ($min50blocks == "") $min50 = ""; else $min50 = "$min50date:$min50blocks";
if ($hr01blocks == "") $hr01 = ""; else $hr01 = "$hr01date:$hr01blocks";
if ($hr02blocks == "") $hr02 = ""; else $hr02 = "$hr02date:$hr02blocks";
if ($hr03blocks == "") $hr03 = ""; else $hr03 = "$hr03date:$hr03blocks";
if ($hr04blocks == "") $hr04 = ""; else $hr04 = "$hr04date:$hr04blocks";
if ($hr05blocks == "") $hr05 = ""; else $hr05 = "$hr05date:$hr05blocks";
if ($hr06blocks == "") $hr06 = ""; else $hr06 = "$hr06date:$hr06blocks";
if ($hr12blocks == "") $hr12 = ""; else $hr12 = "$hr12date:$hr12blocks";
if ($day1blocks == "") $day1 = ""; else $day1 = "$day1date:$day1blocks";
if ($day2blocks == "") $day2 = ""; else $day2 = "$day2date:$day2blocks";
if ($day3blocks == "") $day3 = ""; else $day3 = "$day3date:$day3blocks";
if ($day4blocks == "") $day4 = ""; else $day4 = "$day4date:$day4blocks";
if ($day5blocks == "") $day5 = ""; else $day5 = "$day5date:$day5blocks";
if ($day6blocks == "") $day6 = ""; else $day6 = "$day6date:$day6blocks";
if ($wk01blocks == "") $wk01 = ""; else $wk01 = "$wk01date:$wk01blocks";
if ($wk02blocks == "") $wk02 = ""; else $wk02 = "$wk02date:$wk02blocks";
if ($wk03blocks == "") $wk03 = ""; else $wk03 = "$wk03date:$wk03blocks";
if ($wk04blocks == "") $wk04 = ""; else $wk04 = "$wk04date:$wk04blocks";
if ($wk08blocks == "") $wk08 = ""; else $wk08 = "$wk08date:$wk08blocks";
if ($wk16blocks == "") $wk16 = ""; else $wk16 = "$wk16date:$wk16blocks";
if ($wk32blocks == "") $wk32 = ""; else $wk32 = "$wk32date:$wk32blocks";
if ($yr1blocks == "") $yr1 = ""; else $yr1 = "$yr1date:$yr1blocks";

echo "|    1min  ago  ".$min01.str_repeat(" ", 24 - strlen($min01))."|\n";
echo "|    2min  ago  ".$min02.str_repeat(" ", 24 - strlen($min02))."|\n";
echo "|    3min  ago  ".$min03.str_repeat(" ", 24 - strlen($min03))."|\n";
echo "|    4min  ago  ".$min04.str_repeat(" ", 24 - strlen($min04))."|\n";
echo "|    5min  ago  ".$min05.str_repeat(" ", 24 - strlen($min05))."|\n";
echo "|   10min  ago  ".$min10.str_repeat(" ", 24 - strlen($min10))."|\n";
echo "|   20min  ago  ".$min20.str_repeat(" ", 24 - strlen($min20))."|\n";
echo "|   30min  ago  ".$min30.str_repeat(" ", 24 - strlen($min30))."|\n";
echo "|   40min  ago  ".$min40.str_repeat(" ", 24 - strlen($min40))."|\n";
echo "|   50min  ago  ".$min50.str_repeat(" ", 24 - strlen($min50))."|\n";
echo "|    1hr   ago  ".$hr01.str_repeat(" ", 24 - strlen($hr01))."|\n";
echo "|    2hrs  ago  ".$hr02.str_repeat(" ", 24 - strlen($hr02))."|\n";
echo "|    3hrs  ago  ".$hr03.str_repeat(" ", 24 - strlen($hr03))."|\n";
echo "|    4hrs  ago  ".$hr04.str_repeat(" ", 24 - strlen($hr04))."|\n";
echo "|    5hrs  ago  ".$hr05.str_repeat(" ", 24 - strlen($hr05))."|\n";
echo "|    6hrs  ago  ".$hr06.str_repeat(" ", 24 - strlen($hr06))."|\n";
echo "|   12hrs  ago  ".$hr12.str_repeat(" ", 24 - strlen($hr12))."|\n";
echo "|    1day  ago  ".$day1.str_repeat(" ", 24 - strlen($day1))."|\n";
echo "|    2days ago  ".$day2.str_repeat(" ", 24 - strlen($day2))."|\n";
echo "|    3days ago  ".$day3.str_repeat(" ", 24 - strlen($day3))."|\n";
echo "|    4days ago  ".$day4.str_repeat(" ", 24 - strlen($day4))."|\n";
echo "|    5days ago  ".$day5.str_repeat(" ", 24 - strlen($day5))."|\n";
echo "|    6days ago  ".$day6.str_repeat(" ", 24 - strlen($day6))."|\n";
echo "|    1wk   ago  ".$wk01.str_repeat(" ", 24 - strlen($wk01))."|\n";
echo "|    2wks  ago  ".$wk02.str_repeat(" ", 24 - strlen($wk02))."|\n";
echo "|    3wks  ago  ".$wk03.str_repeat(" ", 24 - strlen($wk03))."|\n";
echo "|    4wks  ago  ".$wk04.str_repeat(" ", 24 - strlen($wk04))."|\n";
echo "|    8wks  ago  ".$wk08.str_repeat(" ", 24 - strlen($wk08))."|\n";
echo "|   16wks  ago  ".$wk16.str_repeat(" ", 24 - strlen($wk16))."|\n";
echo "|   32wks  ago  ".$wk32.str_repeat(" ", 24 - strlen($wk32))."|\n";
echo "|    1yr   ago  ".$yr1.str_repeat(" ", 24 - strlen($yr1))."|\n";
echo "|---------------------------------------/\n";
if (isset($min01blocks)) $min01c = ($blockcount - $min01blocks); else $min01c = 0; echo "| ".fill(number_format($min01c, 0, ".", ","),9)." blocks in last minute\n";
if (isset($min02blocks)) $min02c = ($blockcount - $min02blocks); else $min02c = 0; echo "| ".fill(number_format($min02c, 0, ".", ","),9)." blocks in last 2 mins\n";
if (isset($min03blocks)) $min03c = ($blockcount - $min03blocks); else $min03c = 0; echo "| ".fill(number_format($min03c, 0, ".", ","),9)." blocks in last 3 mins\n";
if (isset($min04blocks)) $min04c = ($blockcount - $min04blocks); else $min04c = 0; echo "| ".fill(number_format($min04c, 0, ".", ","),9)." blocks in last 4 mins\n";
if (isset($min05blocks)) $min05c = ($blockcount - $min05blocks); else $min05c = 0; echo "| ".fill(number_format($min05c, 0, ".", ","),9)." blocks in last 5 mins\n";
if (isset($min10blocks)) $min10c = ($blockcount - $min10blocks); else $min10c = 0; echo "| ".fill(number_format($min10c, 0, ".", ","),9)." blocks in last 10 mins\n";
if (isset($min20blocks)) $min20c = ($blockcount - $min20blocks); else $min20c = 0; echo "| ".fill(number_format($min20c, 0, ".", ","),9)." blocks in last 20 mins\n";
if (isset($min30blocks)) $min30c = ($blockcount - $min30blocks); else $min30c = 0; echo "| ".fill(number_format($min30c, 0, ".", ","),9)." blocks in last 30 mins\n";
if (isset($min40blocks)) $min40c = ($blockcount - $min40blocks); else $min40c = 0; echo "| ".fill(number_format($min40c, 0, ".", ","),9)." blocks in last 40 mins\n";
if (isset($min50blocks)) $min50c = ($blockcount - $min50blocks); else $min50c = 0; echo "| ".fill(number_format($min50c, 0, ".", ","),9)." blocks in last 50 mins\n";
if (isset($hr01blocks)) $hr01c = ($blockcount - $hr01blocks); else $hr01c = 0; echo "| ".fill(number_format($hr01c, 0, ".", ","),9)." blocks in last hour\n";
if (isset($hr02blocks)) $hr02c = ($blockcount - $hr02blocks); else $hr02c = 0; echo "| ".fill(number_format($hr02c, 0, ".", ","),9)." blocks in last 2 hrs";echo "    blocks/hr avg: ".($hr02c / 2)."\n";
if (isset($hr03blocks)) $hr03c = ($blockcount - $hr03blocks); else $hr03c = 0; echo "| ".fill(number_format($hr03c, 0, ".", ","),9)." blocks in last 3 hrs";echo "    blocks/hr avg: ".($hr03c / 3)."\n";
if (isset($hr04blocks)) $hr04c = ($blockcount - $hr04blocks); else $hr04c = 0; echo "| ".fill(number_format($hr04c, 0, ".", ","),9)." blocks in last 4 hrs";echo "    blocks/hr avg: ".($hr04c / 4)."\n";
if (isset($hr05blocks)) $hr05c = ($blockcount - $hr05blocks); else $hr05c = 0; echo "| ".fill(number_format($hr05c, 0, ".", ","),9)." blocks in last 5 hrs";echo "    blocks/hr avg: ".($hr05c / 5)."\n";
if (isset($hr06blocks)) $hr06c = ($blockcount - $hr06blocks); else $hr06c = 0; echo "| ".fill(number_format($hr06c, 0, ".", ","),9)." blocks in last 6 hrs";echo "    blocks/hr avg: ".($hr06c / 6)."\n";
if (isset($hr12blocks)) $hr12c = ($blockcount - $hr12blocks); else $hr12c = 0; echo "| ".fill(number_format($hr12c, 0, ".", ","),9)." blocks in last 12 hrs";echo "   blocks/hr avg: ".($hr12c / 12)."\n";
if (isset($day1blocks)) $day1c = ($blockcount - $day1blocks); else $day1c = 0; echo "| ".fill(number_format($day1c, 0, ".", ","),9)." blocks in last day";echo "      blocks/hr avg: ".($day1c / 24)."\n";
if (isset($day2blocks)) $day2c = ($blockcount - $day2blocks); else $day2c = 0; echo "| ".fill(number_format($day2c, 0, ".", ","),9)." blocks in last 2 days";echo "   blocks/hr avg: ".($day2c / 48)."\n";
if (isset($day3blocks)) $day3c = ($blockcount - $day3blocks); else $day3c = 0; echo "| ".fill(number_format($day3c, 0, ".", ","),9)." blocks in last 3 days";echo "   blocks/hr avg: ".($day3c / 72)."\n";
if (isset($day4blocks)) $day4c = ($blockcount - $day4blocks); else $day4c = 0; echo "| ".fill(number_format($day4c, 0, ".", ","),9)." blocks in last 4 days";echo "   blocks/hr avg: ".($day4c / 96)."\n";
if (isset($day5blocks)) $day5c = ($blockcount - $day5blocks); else $day5c = 0; echo "| ".fill(number_format($day5c, 0, ".", ","),9)." blocks in last 5 days";echo "   blocks/hr avg: ".($day5c / 120)."\n";
if (isset($day6blocks)) $day6c = ($blockcount - $day6blocks); else $day6c = 0; echo "| ".fill(number_format($day6c, 0, ".", ","),9)." blocks in last 6 days";echo "   blocks/hr avg: ".($day6c / 144)."\n";
if (isset($wk01blocks)) $wk01c = ($blockcount - $wk01blocks); else $wk01c = 0; echo "| ".fill(number_format($wk01c, 0, ".", ","),9)." blocks in last week";echo "     blocks/hr avg: ".($wk01c / 168)."\n";
if (isset($wk02blocks)) $wk02c = ($blockcount - $wk02blocks); else $wk02c = 0; echo "| ".fill(number_format($wk02c, 0, ".", ","),9)." blocks in last 2 wks";echo "    blocks/hr avg: ".($wk02c / 336)."\n";
if (isset($wk03blocks)) $wk03c = ($blockcount - $wk03blocks); else $wk03c = 0; echo "| ".fill(number_format($wk03c, 0, ".", ","),9)." blocks in last 3 wks";echo "    blocks/hr avg: ".($wk03c / 504)."\n";
if (isset($wk04blocks)) $wk04c = ($blockcount - $wk04blocks); else $wk04c = 0; echo "| ".fill(number_format($wk04c, 0, ".", ","),9)." blocks in last 4 wks";echo "    blocks/hr avg: ".($wk04c / 672)."\n";
if (isset($wk08blocks)) $wk08c = ($blockcount - $wk08blocks); else $wk08c = 0; echo "| ".fill(number_format($wk08c, 0, ".", ","),9)." blocks in last 8 wks";echo "    blocks/hr avg: ".($wk08c / 1344)."\n";
if (isset($wk16blocks)) $wk16c = ($blockcount - $wk16blocks); else $wk16c = 0; echo "| ".fill(number_format($wk16c, 0, ".", ","),9)." blocks in last 16 wks";echo "   blocks/hr avg: ".($wk16c / 2688)."\n";
if (isset($wk32blocks)) $wk32c = ($blockcount - $wk32blocks); else $wk32c = 0; echo "| ".fill(number_format($wk32c, 0, ".", ","),9)." blocks in last 32 wks";echo "   blocks/hr avg: ".($wk32c / 5376)."\n";
if (isset($yr1blocks)) $yr1c = ($blockcount - $yr1blocks); else $yr1c = 0; echo "| ".fill(number_format($yr1c, 0, ".", ","),9)." blocks in last year";echo "     blocks/hr avg: ".($yr1c / 8760)."\n";
echo "\----------------------------------------";
if (isset($_GET["showallblocks"])) {
echo "\n\n";
foreach ($block as $key => $num) {
$secs = $block[$key] - $block[$key-1];
$secs .= ($secs == 1) ? " second " : " seconds";
$secs = str_repeat(" ", 14 - strlen($secs)).$secs;
if (isset($block[$key-1])) echo "$secs to find block $key\n";
else echo "  unknown time to find block $key\n";
}
} else {
echo "\\\n   Timestamp data for all ".number_format($blockcount)." blocks  |\n";
echo "                 ~".number_format(filesize($blockfile) * 1.23175 / 1024 / 1024, 2)."Mb                 |\n";
echo "-----------------------------------------/";
}
function fill($str, $len) { return str_repeat(" ", $len - strlen($str)).$str; }
?>
 


Additionally, "blockdata" is updated every minute using a cron script written in python.  This python code populates "blockdata" with " "
courtesy of ArtForz

getblockdata.py
Code:
#!/usr/bin/env python
import struct
import hashlib

def uint256_deser(s):
r = 0L
for i in xrange(8):
t = struct.unpack(" r += t << (i * 32)
return r

def uint256_ser(u):
rs = ""
for i in xrange(8):
rs += struct.pack(" u >>= 32
return rs

def uint256_from_compact(c):
nbytes = (c >> 24) & 0xFF
v = (c & 0xFFFFFFL) << (8 * (nbytes - 3))
return v

def get_difficulty(c):
return float(uint256_from_compact(0x1D00FFFF) * 1000 // uint256_from_compact(c)) / 1000.

class CBlock:
def deserialize(self, s):
self.nVersion = struct.unpack(" self.hashPrevBlock = uint256_deser(s[4:36])
self.hashMerkleRoot = uint256_deser(s[36:68])
self.nTime = struct.unpack(" self.nBits = struct.unpack(" self.nNonce = struct.unpack(" h1 = hashlib.sha256(s[0:80]).digest()
self.hash = uint256_deser(hashlib.sha256(h1).digest())
if self.hash > uint256_from_compact(self.nBits):
raise ValueError("bad hash in %s" % repr(self))
self.next = []
self.blocknum = -1
def __repr__(self):
return "CBlock{ver=%08x hp=%064x hm=%064x nt=%08x nb=%08x nn=%08x h=%064x, n=%i}" % (self.nVersion, self.hashPrevBlock, self.hashMerkleRoot, self.nTime, self.nBits, self.nNonce, self.hash, self.blocknum)

def get_chain_len(blk):
r = 1
while len(blk.next) == 1:
blk = blk.next[0]
r += 1
if len(blk.next) > 1:
bestchainlen = 0
for nextblk in blk.next:
chainlen = get_chain_len(nextblk)
if chainlen > bestchainlen:
bestchainlen = chainlen
r += bestchainlen
return r


def readblocks(filename):
f = open(filename, "rb")
blocks = []
idxmap = {}
while True:
try:
magic = f.read(4)
if magic != "\xf9\xbe\xb4\xd9":
break
blklen = struct.unpack(" if blklen < 80:
break
blkdata = f.read(blklen)
if len(blkdata) != blklen:
break
except:
break
blk = CBlock()
blk.deserialize(blkdata)
blocks.append(blk)
idxmap[blk.hash] = blk
if blk.hashPrevBlock:
prevblk = idxmap[blk.hashPrevBlock]
blk.prev = prevblk
prevblk.next.append(blk)
f.close()
rootblk = blocks[0]
del blocks
del idxmap
blk = rootblk
curblkidx = 0
while True:
blk.blocknum = curblkidx
if len(blk.next) == 0:
blk.next = None
break
if len(blk.next) > 1:
bestnextblk = None
bestchainlen = 0
for nextblk in blk.next:
chainlen = get_chain_len(nextblk)
if chainlen > bestchainlen:
bestchainlen = chainlen
bestnextblk = nextblk
elif chainlen == bestchainlen:
if nextblk.nTime < bestnextblk.nTime:
bestchainlen = chainlen
bestnextblk = nextblk
blk.next = [bestnextblk]
blk.next = blk.next[0]
curblkidx += 1
blk = blk.next

blk = rootblk
while blk:
#print "%i %i %.3f 0x%08X" % (blk.blocknum, blk.nTime, get_difficulty(blk.nBits), blk.nBits)
avghashes = 2**256 / uint256_from_compact(blk.nBits)
print "%i %i %i" % (blk.blocknum, blk.nTime, avghashes)
blk = blk.next

if __name__ == "__main__":
print readblocks("/path/to/blk0001.dat")

line for cron
Code:
*/1     *       *       *       *       /path/to/getblockdata.py > /path/to/blockdata
Pages:
Jump to: