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

7

我正试图从本地比特币数据库中提取数据。据我所知,比特币客户端使用的是伯克利数据库。我已经从Oracle网站安装了BerkleyDB,并发现其中有一个.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);
    }
}

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


您可以使用任何*.dat文件的解析器,例如我的解析器:https://github.com/ragestack/blockchain-parser。 - Denis Leonov
3个回答

7
你想要提取什么?只有wallet.dat文件是Berkeley数据库。
块以四个字节表示的网络标识符和每个块之前给出块大小的四个字节存储在blkxxxxx.dat文件中。
未花费输出的索引存储为leveldb数据库。
了解你要查找的信息类型会有所帮助。

1
我发现读取比特币区块数据库最简单的方式是通过对比特币客户端或bitcoind进行JSON RPC调用。我的问题是6个月前提出的 :) - Zergatul
我认为他可能正在寻找所有信息/任何信息,并且只想知道如何从区块链文件中获取任何数据的想法。 - pbies

3

这里有一个名为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();
    }
}

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接