|
|
@ -19,28 +19,32 @@ my $avg_xtn_size = 0; |
|
|
|
my $meta = {}; |
|
|
|
|
|
|
|
# guess the coin a wallet.dat came from |
|
|
|
# NOTE: Zcash wallets start out with no shielded addresses |
|
|
|
# and look exactly like BTC wallets, except for address prefixes |
|
|
|
sub is_zec_prefix { $_[0] eq 't1' or $_[0] eq 't3' } |
|
|
|
sub is_kmd_prefix { $_[0] eq 'R' or $_[0] eq 'b' } |
|
|
|
sub detect_coin { |
|
|
|
my ($c,$meta) = @_; |
|
|
|
my $coin = ""; |
|
|
|
my $coin = "BTC"; |
|
|
|
print "PREFIX=" . $meta->{prefix} . "\n"; |
|
|
|
my $p1 = substr($meta->{prefix}, 0, 1); |
|
|
|
# only sapling-enabled coins have these keys |
|
|
|
my $prefix = $meta->{prefix}; |
|
|
|
my $p1 = substr($prefix, 0, 1); |
|
|
|
|
|
|
|
if (is_kmd_prefix($p1)) { |
|
|
|
$coin = "KMD or asset chain"; |
|
|
|
} elsif (is_zec_prefix($prefix)) { |
|
|
|
$coin = "ZEC/HUSH"; |
|
|
|
} |
|
|
|
|
|
|
|
# NOTE: Some wallets will have a mix of Sprout |
|
|
|
# and Sapling keys in same wallet |
|
|
|
if ($c->{sapzkey} or $c->{sapzkeymeta}) { |
|
|
|
if ($meta->{prefix} eq 't1') { |
|
|
|
$coin = "ZEC Sapling"; |
|
|
|
} elsif ($p1 eq 'R') { |
|
|
|
$coin = "KMD Sapling"; |
|
|
|
} |
|
|
|
$coin .= " Sapling"; |
|
|
|
# only zcash forks have these |
|
|
|
} elsif ($c->{zkey} or $c->{zkeymeta}) { |
|
|
|
if ($meta->{prefix} eq 't1') { |
|
|
|
$coin = "ZEC/HUSH Sprout"; |
|
|
|
} elsif ($p1 eq 'R') { |
|
|
|
$coin = "KMD Sprout"; |
|
|
|
} |
|
|
|
} else { |
|
|
|
$coin = "BTC"; |
|
|
|
$coin .= " Sprout"; |
|
|
|
} |
|
|
|
return $coin; |
|
|
|
} |
|
|
|
|
|
|
|
while (my ($k,$v) = each %wallet) { |
|
|
@ -103,7 +107,7 @@ while (my ($k,$v) = each %wallet) { |
|
|
|
} |
|
|
|
$avg_xtn_size = $counts->{tx} ? $avg_xtn_size / $counts->{tx} : 0; |
|
|
|
|
|
|
|
printf "\n=====Wallet Key Stats=====\n"; |
|
|
|
printf "\n=====Wallet $filename Stats=====\n"; |
|
|
|
my @keys = sort { $counts->{$b} <=> $counts->{$a} } keys(%$counts); |
|
|
|
my $numkeys = scalar @keys; |
|
|
|
for my $k (@keys) { |
|
|
|