Author

Topic: opening the database with Perl (Read 1196 times)

legendary
Activity: 1288
Merit: 1076
January 02, 2012, 06:39:12 AM
#3
I finally managed to open the database using the BerkeleyDB module instead of DB_File.

In short:

Code:
tie my %blkindex, 'BerkeleyDB::Btree',
-Filename => 'blkindex.dat',
-Subname => 'main',

I still have to figure out the equivalent of the 'cursor.set_range("\x0ablockindex")' in Gavin's bitcointools, though.
legendary
Activity: 2128
Merit: 1065
January 01, 2012, 06:58:25 AM
#2
main: 4
What am I missing?
All Berkeley DB database files in Satoshi client are "multiple database capable". In effect they are B-trees of B-trees, where top-level B-tree contains only one node with key "main".

I don't know how to get to the 2nd-level B-tree in Perl. Probably it is documented somewhere.
legendary
Activity: 1288
Merit: 1076
January 01, 2012, 05:51:44 AM
#1

I can see in the bitcointools 's python code that database are DB_BTREE, so I tried:

Code:
use DB_File;
my $db = tie my %h, 'DB_File', ".bitcoin/blockindex.dat", O_RDONLY, 0644, $DB_BTREE;
END { undef $db, untie %h if defined $db }

printf "%s: %d\n", $_, length($_) for keys %h;

but this gives me only one line:

main: 4

What am I missing?  I can understand the the data is a bit serialized or something but I had expexted to have at least a bigger entry.

Jump to: