【问题标题】:How to open local bitcoin database如何打开本地比特币数据库
【发布时间】:2013-12-24 21:56:38
【问题描述】:

我正在尝试从本地比特币数据库中提取数据。据我所知,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);
    }
}

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

【问题讨论】:

标签: berkeley-db bitcoin


【解决方案1】:

你想提取什么?只有 wallet.dat 文件是伯克利数据库。

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

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

了解您要查找的信息类型会有所帮助。

【讨论】:

  • 我发现读取比特币区块数据库最简单的方法是通过 JSON RPC 调用比特币客户端或 bitcoind。我的问题是 6 个月前提出的 :)
【解决方案2】:

在 .NET 中,您可以使用诸如 BitcoinBlockchain 之类的东西,它可以作为 NuGet 包在https://www.nuget.org/packages/BitcoinBlockchain/ 获得。它的用法是微不足道的。如果你想看看它是如何实现的,可以在 GitHub 上找到源代码。

如果您想将区块链存储在 SQL 数据库中,您可以使用比原始区块链更快、更多方式查询的 SQL 数据库,您可以使用 https://github.com/ladimolnar/BitcoinDatabaseGenerator 上提供的 BitcoinDatabaseGenerator 工具之类的工具。

【讨论】:

    【解决方案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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 2014-01-17
      相关资源
      最近更新 更多