如何打开本地比特币数据库

时间:2013-12-07 14:50:02

标签: berkeley-db bitcoin

我正在尝试从本地比特币数据库中提取数据。据我所知,比特币-qt正在使用BerkeleyDB。我从Oracle网站安装了berkley db,在这里找到了.NET的dll:libdb_dotnet60.dll。我试图打开任何文件,但我得到DatabaseException。这是我的代码:

using BerkeleyDB;
class Program
{
    static void Main(string[] args)
    {
        var btreeConfig = new BTreeDatabaseConfig();
        var btreeDb = BTreeDatabase.Open(@"c:\Users\<user>\AppData\Roaming\Bitcoin\blocks\blk00000.dat", btreeConfig);
    }
}

有没有人有如何使用比特币数据库(使用任何其他语言)的例子?

3 个答案:

答案 0 :(得分:4)

你想要提取什么?只有wallet.dat文件是Berkeley数据库。

块在blkxxxxx.dat文件中一个接一个地存储,其中四个字节表示网络标识符,四个字节给出块大小,在每个块之前。

存储为leveldb数据库的未使用输出的索引。

了解您正在寻找的信息类型会有所帮助。

答案 1 :(得分:1)

有图书馆NBitcoin:https://github.com/MetacoSA/NBitcoin

如何枚举块:

var store = new BlockStore(@"C:\Bitcoin\blocks\", Network.Main);
// this loop will enumerate all blocks ordered by height starting with genesis block
foreach (var block in store.EnumerateFolder())
{
    var item = block.Item;
    string blockID = item.Header.ToString();
    foreach (var tx in item.Transactions)
    {
        string txID = tx.GetHash().ToString();
        string raw = tx.ToHex();
    }
}

答案 2 :(得分:0)

在.NET中,您可以使用BitcoinBlockchain之类的东西,它可以作为https://www.nuget.org/packages/BitcoinBlockchain/的NuGet包使用。它的用法很简单。如果你想看看它是如何实现的,那么源代码可以在GitHub上找到。

如果你想将区块链存储在一个SQL数据库中,你可以更快地查询原始区块链,你可以使用类似https://github.com/ladimolnar/BitcoinDatabaseGenerator提供的BitcoinDatabaseGenerator工具。