我正在尝试从本地比特币数据库中提取数据。据我所知,比特币-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);
}
}
有没有人有如何使用比特币数据库(使用任何其他语言)的例子?
答案 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工具。