Browse Source

Better coin detection, correctly detect zcash wallets with no shielded addresses via prefix

master
Jonathan "Duke" Leto 5 years ago
parent
commit
9d7d010111
  1. 36
      wack

36
wack

@ -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) {

Loading…
Cancel
Save