<?php
header("Content-Type: application/json; charset=UTF-8");
/**
* walkchain
*
* Walks through the blockchain and prints out the contents of each record.
*
* No verification of the blockchain validity is performed; this tool simply reads
* each of the records from the blockchain ordered as they are stored on disk.
*
* Marty Anstey (https://marty.anstey.ca/)
* August 2015
*
*/
date_default_timezone_set('UTC');
define('_magic', 0xD5E8A97F);
define('_hashalg', 'sha256');
define('_hashlen', 32);
define('_fn', 'blockchain.dat');
if (!file_exists(_fn)) exit("Can't open "._fn);
$size = filesize(_fn);
$fp = fopen(_fn,'rb');
$height = 0;
$response= '{"blocos":
[';
while (ftell($fp) < $size) {
$header = fread($fp, (13+_hashlen));
$magic = unpack32($header,0);
$version = ord($header[4]);
$timestamp = unpack32($header,5);
$prevhash = bin2hex(substr($header,9,_hashlen));
$datalen = unpack32($header,-4);
$data = fread($fp, $datalen);
$hash = hash(_hashalg, $header.$data);
$arraytratado=explode("|",$data);
$response.='{
"ID":"'.$height.'",
"magic":"'.dechex($magic).'",
"Versão":"'.$version.'",
"timestamp":"'.date("H:i:s m/d/Y",$timestamp).'",
"BlocoAnterior":"'.$prevhash.'",
"blocoAtual":"'.$hash.'",
"Tamanho":"'.$datalen.'",
"Dados":"'.wordwrap($data, 100).'",
"Nome":"'.wordwrap($arraytratado[1], 100).'",
"Email":"'.wordwrap($arraytratado[2], 100).'",
"Comentário":"'.wordwrap($arraytratado[3], 100).'"
},';
}
$response.= ']}';
echo substr_replace($response, "",-3,1);
fclose($fp);
function unpack32($data,$ofs) {
return unpack('V', substr($data,$ofs,4))[1];
}
|