You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.3 KiB
74 lines
2.3 KiB
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use BerkeleyDB;
|
|
|
|
my $DEBUG = $ENV{DEBUG} || 0;
|
|
my %wallet;
|
|
my $filename = shift || 'wallet.dat';
|
|
my $db = tie %wallet, 'BerkeleyDB::Btree',
|
|
-Filename => $filename,
|
|
-Subname => "main",
|
|
-Flags => DB_RDONLY,
|
|
or die "Cannot open file $filename: $! $BerkeleyDB::Error\n";
|
|
|
|
my $count = 0;
|
|
my $counts = {};
|
|
while (my ($k,$v) = each %wallet) {
|
|
my $len = unpack("W", substr($k, 0, 1));
|
|
my $type = substr $k, 1, $len;
|
|
my $key = substr $k, $len+1;
|
|
my $vlen = length $v;
|
|
|
|
#printf "%s => %x\n", $k, $v;
|
|
if ($DEBUG) {
|
|
if ($type eq 'key') {
|
|
my $privkey = unpack("H*", $v);
|
|
$key = unpack("H*", $key);
|
|
print "key=$key, privkey=$privkey\n";
|
|
} elsif ($type eq 'cscript') {
|
|
my $cscript = unpack("H*", $v);
|
|
$key = unpack("H*", $key);
|
|
print "key=$key, cscript=$cscript\n";
|
|
} elsif ($type eq 'tx') {
|
|
my $tx = unpack("h*", $key);
|
|
my $vtx = unpack("h*", $v);
|
|
my $l = length($tx);
|
|
my $lvtx= length($vtx);
|
|
print "len=$l tx=$tx, $vtx ($lvtx bytes)\n";
|
|
} elsif ($type eq 'defaultkey') {
|
|
my $dkey = unpack("H*", $v);
|
|
print "defaultkey=$dkey\n";
|
|
} elsif ($type eq 'zkey') {
|
|
my $privkey = unpack("H*", $v);
|
|
$key = unpack("H*", $key);
|
|
print "zkey=$key, privkey=$privkey\n";
|
|
} elsif ($type eq 'name') {
|
|
print "name: $key, $v\n";
|
|
} elsif ($type eq 'bestblock') {
|
|
my $len = length $v;
|
|
print "bestblock ($len bytes):\nbestblock: $key, $v\n";
|
|
} elsif ($type eq 'version') {
|
|
my $len = length $v;
|
|
my $version = unpack("I", $v);
|
|
print "version ($len bytes): $version\n";
|
|
} else {
|
|
my $len = length $v;
|
|
my $v = unpack("I", $v);
|
|
print "$type ($len bytes): $key, $v\n";
|
|
}
|
|
printf "$vlen $type %s:\n", $key;
|
|
}
|
|
$counts->{$type}++;
|
|
$count++;
|
|
}
|
|
|
|
printf "\n=====Wallet Key Stats=====\n";
|
|
my @keys = sort { $counts->{$b} <=> $counts->{$a} } keys(%$counts);
|
|
my $numkeys = scalar @keys;
|
|
for my $k (@keys) {
|
|
printf "%-25s %s\n", $k, $counts->{$k};
|
|
}
|
|
printf "Total: $count keys in $numkeys key types\n";
|
|
|
|
|