Как прочитать содержимое wallet.dat на С#

Я хотел бы иметь возможность добавлять, удалять, экспортировать и т. д. пары ключей из моего файла wallet.dat. Глядя на исходный код pywallet , это не кажется такой уж сложной задачей, но, конечно, это не так просто, как from bsddb.db import *в C#, и Google меня не подводит. У кого-нибудь есть пример кода или ресурсы для обработки wallet.dat на С#?

Ответы (3)

Wallet.dat — это файл базы данных Berkeley DB. Вы можете проверить Berkeley DB для .NET , чтобы узнать, может ли он прочитать файл.

Почему-то не могу построить. Я получаю массу ошибок такого типа:Error 1 Inconsistent accessibility: parameter type 'out BerkeleyDb.DB_SEQUENCE_STAT*' is less accessible than delegate 'BerkeleyDb.DB_SEQUENCE.StatFcn' C:\Users\enmaku\Documents\Visual Studio 2010\Projects\libdb-dotnet\src\DB_SEQUENCE.cs 146 30 libdb_dotNET45
VS2010 Win7 x64, если это имеет значение.
В разделе Files проекта sourceforge есть предварительно скомпилированные двоичные файлы, которые вы можете попробовать.
Предварительно скомпилированные двоичные файлы работали достаточно хорошо. Если я выясню это на 100%, я создам репозиторий на github и дам ссылку на него здесь.

В дополнение к тому, что упомянул Эрв, следующая версия кошелька может использовать LevelDB для цепочки блоков и некий пользовательский формат для хранилища закрытых ключей.

Вот дополнительная информация о доступе к LevelDB из C# , но я надеюсь, что кто-нибудь дополнит этот пост ссылкой на лучший LevelDB для C# для наших целей.

Взгляните на BitcoinSharp , порт bitcoinj .

Я не подумал, что BitcoinSharp, будучи прямым портом Биткойна на C#, по необходимости будет содержать необходимый код для обработки wallet.dat (да). Я бы предпочел небольшой фрагмент примера кода, чем копаться во всем проекте BitcoinSharp, но, учитывая, что ссылка Erv ведет к несобираемому коду, это может быть моим единственным выбором...
И теперь я получаю The input stream is not a valid binary formatоткрытие совершенно действительного wallet.dat с Wallet.LoadFromFile- Кто-нибудь на самом деле ИСПОЛЬЗОВАЛ это раньше?
Глядя на код, кажется, что BitcoinSharp просто сериализует и десериализует свой объект кошелька с помощью BinaryFormatter, похоже, он не использует формат Berkeley DB, который использует обычный биткойн-клиент, так что, к сожалению, это тупик :(
BitcoinSharp и bitcoinj используют формат кошелька, отличный от используемого биткойн-ядром.