Author

Topic: Формат wallet.dat (Read 7023 times)

newbie
Activity: 42
Merit: 0
April 02, 2018, 12:48:17 PM
#19
Да не, вполне полезный топик. Если кто еще поделится ссылочками на более подробно почитать - совсем хорошо!
hero member
Activity: 543
Merit: 501
September 16, 2017, 01:56:11 AM
#18
Более старым пользователям этот пример не о чем не говорит, а новичкам стоило бы и почитать.  Wink
sr. member
Activity: 770
Merit: 305
September 15, 2017, 01:51:30 AM
#17
Сделайте сначала резервную копию wallet.dat в надёжное место!
Фу. Некромант. Топик 6-летней давности поднял.
legendary
Activity: 1064
Merit: 1023
habr
September 13, 2017, 10:54:09 PM
#16
Подскажите плиз, где взять спецификацию на формат файла wallet.dat ?
https://ru.bitcoin.it/wiki/Wallet_protocol


Сделайте сначала резервную копию wallet.dat в надёжное место!


wallet.dat должен быть не зашифрован:

$ file ./wallet.dat
./wallet.dat: Berkeley DB (Btree, version 9, native byte-order)


$ db5.3_dump ./wallet.dat |less
или
$ db5.3_dump -p./wallet.dat |less

Quote
описание

файл wallet.dat представляет собой Bdb файл в котором данные содержатся в двумерном массиве далее предоставленны типы существующих записей и из подробный анализ. Значение revers указывает на то что данные представленны для чтения в программе с переда на зад в отличии от BBE
tx

на примере http://blockexplorer.com/tx/7e341bd059cdb7dfa9a44d08a4f8d635393002aaa6d9f8f072fa8fa09154df00

    ключ hex формат

02747800df5491a08ffa72f0f8d9a6aa02303935d6f8a4084da4a9dfb7cd59d01b347e

    "колличество символов определяющие тип ключа = 2" 02
    "символы ключа (tx)" 7478
    "хеш транзакции revers" 00df5491a08ffa72f0f8d9a6aa02303935d6f8a4084da4a9dfb7cd59d01b347e

    содержание hex формат

    "ver revers = 1" 010000
    "vin_sz" 0008
    "prev_out hash revers" 1f6b109be6edadc5c3f7b096999b03dbdc3f27c4a958eebf7c0cb2291ab63fa8
    "n=15" 0f
    "" 0000008b48
    "scriptSig_1"

    далее идет разбор что представляет собой подпись в DER формате open-ssl

    "метка сигнал о начале подписи" 30
    "длинна подписи = 0x45 = 69 байт" 45
    "разделитель, далее пойдет r" 02
    "длинна r 0x21 = 33 байта" 21
    "r" 00c100f0b013c4ead3a18c3ec9ec8ea24526cc7862bcec82afa651ec030da7566e
    "разделитель, далее пойдет s" 02
    "длинна s 0x20 = 32 байта" 20
    "s" 5e558e8f9eab6f2a51c44672eaef64f7a7d268e30e5cf2b1faed3ca12e93494701
    41
    "scriptSig_2"

    далее идет разбор что представляет собой pub key в DER формате open-ssl

    04
    "x" aae7f5b9b120eb77d536b2791f650727efbbd7e5424b6c1c738f5b5fcd17d13e
    "y" f4c535ade97e8d1cdcc2c1cfcea5b159ba9072b5911120e4d308e9925d4b4df3
    "sequence" ffffffff
    "prev_out hash revers" 7fd01df47d7b4e4cf9de0e089eb2a7a4bd0701096e40db75361e1ff5046120dd

"n=1" 01 0000008b48 "scriptSig_1" 3045022100bae1f7b79d58488c032c7f1af3233e1a976e1a87102f0405865bb09e38fac28b02205 36e5f9b61073183927a8246fc92d65184e1f5de32ccc338137154e7f5a7e5f501 41 "scriptSig_2" 04e6723fb5cb12c4f8bec7f1f9a507b3e080f5063da279187cbc9a6b879ab8ce2dc7de7cccfaacd 44a5874b3255045c7c2a0102e3f073e4d3c86f73e5a1b03fc78 ffffffff "prev_out hash revers" 8cef1afb7df203eee706df2256322db6379538179fdada3942f34914662430fe "n=1" 01 0000008b48

LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
November 14, 2011, 04:44:27 AM
#15
PyWallet весьма удобен. Правда на поддержку шифрованного кошелька не проверял.
sr. member
Activity: 427
Merit: 250
November 13, 2011, 04:09:17 PM
#14
А как можно в кошелек вкрутить новый адрес с ключом, сгенерированный с помощью oclvanitygen, например? В особенности интересует прикручивание после шифрования кошелька в версии 0.4.0
С помощью костылей:
How do I import the private key into bitcoin?

If you wish to spend coins received on a vanity address created by vanitygen, you must import the private key into a bitcoin client.  This process is currently quite difficult.  There are two popular methods of doing this:

  • Sipa's showwallet branch is a patch to the official bitcoin client.  It adds a new command called "importprivkey" that accepts the base-58 encoded private key.  Vanitygen has been tested to work with that version of bitcoin.  Unfortunately, to use this code, you must rebuild the bitcoin client by hand, or get a pre-built binary from a trusted source.
  • Jackjack's pywallet script is an all-in-one tool that directly modifies the wallet.dat file.  This works with a normal, unpatched bitcoin client, but does require Python with the bsddb package.
Также тут
Quote from: Bitcoin.it
As of October 2011, the easiest way to redeem a private key is on MtGox's Add Funds screen. Funds are deposited to the MtGox account after a six-confirmation wait (typically an hour or two).

Итого: патч + самостоятельная сборка, питоновский скрипт или загрузить адрес с бабками на мтгокс. В последнем случае, понятно, адрес импортируется в клиент биржи.
hero member
Activity: 803
Merit: 593
BITS.MEDIA
November 13, 2011, 06:45:43 AM
#13
А как можно в кошелек вкрутить новый адрес с ключом, сгенерированный с помощью oclvanitygen, например? В особенности интересует прикручивание после шифрования кошелька в версии 0.4.0
sr. member
Activity: 288
Merit: 251
November 09, 2011, 04:37:25 AM
#12
благодарю, отправил 0.25 Smiley
Lis
sr. member
Activity: 293
Merit: 251
Spice must flow!
November 09, 2011, 04:18:17 AM
#11
Lis, спасибо!
You would like to thank?
btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
sr. member
Activity: 288
Merit: 251
November 07, 2011, 06:34:56 AM
#10
Lis, спасибо!
Lis
sr. member
Activity: 293
Merit: 251
Spice must flow!
November 07, 2011, 04:24:11 AM
#9
ключ name содержит alias адреса
дамп: (046e616d652131684e6750756f45455363514266577143596177387a4c66674d356a5944474350)
пояснение:
'04' 4 символа, '6e616d65' = name, '21' = !, '31684e6750756f45455363514266577143596177387a4c66674d356a5944474350' = 1hNgPuoEEScQBfWqCYaw8zLfgM5jYDGCP
значение:
дамп (0c77616c6c65745f7768697465)
пояснение: '0c' = 12 символов в alias, 77616c6c65745f7768697465' = 'wallet_white' это и есть alias
Lis
sr. member
Activity: 293
Merit: 251
Spice must flow!
November 07, 2011, 04:14:59 AM
#8
ключ key содержит информацию о ключе:
длинна 70 байт, дамп (036b6579410401d6ea56cb8cf874c6c7c421a468cc32865d3618e098ac033776276206e665120c6 41174783a3da7b05254030128d30b8b0fdd597893b56ba6177f916a2d1838)
пояснение 03 длинна ключа, 6b6579 символы 'key', 410401d6ea56cb8cf874c6c7c421a468cc32865d3618e098ac033776276206e665120c641174783 a3da7b05254030128d30b8b0fdd597893b56ba6177f916a2d1838 публичный ключ
значение:
длинна 282, дамп
fd1701308201130201010420****************************************************************a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a1440342000401d6ea56cb8cf874c6c7c421a468cc32865d3618e098ac033776276206e665120c641174783a3da7b05254030128d30b8b0fdd597893b56ba6177f916a2d1838
пояснение
fd1701308201130201010420 константная последовательность
**************************************************************** приватный ключ
a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffff ffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce 870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a 68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbf d25e8cd0364141020101a144034200 константная последовательность
0401d6ea56cb8cf874c6c7c421a468cc32865d3618e098ac033776276206e665120c641174783a3 da7b05254030128d30b8b0fdd597893b56ba6177f916a2d1838  публичный ключ
Lis
sr. member
Activity: 293
Merit: 251
Spice must flow!
November 07, 2011, 03:56:26 AM
#7
в wallet.dat храниться информация следующего (известного мне) типа
tx, key, name, pool, setting, version, defaultkey.

далее будет hex значения полей ключ/значение всех типов с пояснениями

ключ tx содержит информацию о транзакции:
длинна 35 байт, дамп (02747800a18734f1701b06a53c46c63646261d3c8060708ad3e50e4da949ff20729b61)
пояснение 02 длинна ключа идущего далее, 7478 символы tx, 00a18734f1701b06a53c46c63646261d3c8060708ad3e50e4da949ff20729b61 хеш транзакции.
значение:
длинна неопределенна, дамп
(0100000001541ef309dc591e60ab88046034f4c9b53910698211859e9861baf8554cb6b74100000 0008a4730440220493c28649c7140fa7142a8567eabf5eb3082caf04266bdda54bacbf0981c14ec 0220127c7fb73efc2e42784a61a7f0f79a35a42b8f4a3258026de69dbf934c7fb887014104c127c a2c230432a89b93a6c4cbd2e8beb53d711596e0572633bb4474422e61898f0759acad51ec06b97d 2a0a82acdd84ad9aff20c80295bf3ce820d3051c232bffffffff02103e7681000000001976a914c 2a41578faf621bcebd69153cefd821e106d3be388ac40ee2d12000000001976a9145811cfd9bc24 826c2ed456e14fbd79525387bc9d88ac00000000f89c3adabac51be9204a55572cb992f610fe140 00d49f25f4a4100000000000007fe5545622aa386907d50018062e1381ff502a9418d6b431025ca 28722ea267030f9564c345a9a6fd32d4ba6038eeb4693541c4c3925d449d08ae7d350520ce09f04 6f3f4e5e9a932a0227f5493b364e11fe46b0eb2d8d01124d2e05c774ee735dd989691507b8bcef8 2d09a50d749dbabd8f6062734bfd7e3dbae544b62067ef96ae7ee1d9b46536bc84b4076395a7965 c87633d73ab0ef6fc7c86990faf4ee2f4303a9edad2be95608624a23e3043aa16c3b1679189efeb a5ce611dd6af6daaabef7d5d185550cfac3ede628d833a9de34ed4455cdc34f9a77bd88a15c5077 12500000000010b66726f6d6163636f756e7400000000000038d0d04d0001)
пояснение содержит транзакцию в том виде в котором рассылалась по сети, и содержится в блоке
01000000 версия (revers)
01 кол-во вводов в транзакцию
541ef309dc591e60ab88046034f4c9b53910698211859e9861baf8554cb6b741  хеш ввода
00000000 номер вывода из tx ввода
8a = 138 байт длинна подписи
4730440220493c28649c7140fa7142a8567eabf5eb3082caf04266bdda54bacbf0981c14ec02201 27c7fb73efc2e42784a61a7f0f79a35a42b8f4a3258026de69dbf934c7fb887014104c127ca2c23 0432a89b93a6c4cbd2e8beb53d711596e0572633bb4474422e61898f0759acad51ec06b97d2a0a8 2acdd84ad9aff20c80295bf3ce820d3051c232b подпись
ffffffff sequence
02 колличество выводов
103e768100000000 кол-во монет (revers) = 2172010000 (21.7201)
19 длинна ключа на который выводим монеты
76a914c2a41578faf621bcebd69153cefd821e106d3be388ac ключ (адрес HASH160)
40ee2d1200000000 кол-во монет (revers) = 305000000 (3.05)
19 длинна ключа на который выводим монеты
76a9145811cfd9bc24826c2ed456e14fbd79525387bc9d88ac ключ (адрес HASH160)
00000000 время блокировки tx
f89c3adabac51be9204a55572cb992f610fe14000d49f25f4a41000000000000 хеш блока содержащего tx (revers)
07fe5545622aa386907d50018062e1381ff502a9418d6b431025ca28722ea267030f9564c345a9a 6fd32d4ba6038eeb4693541c4c3925d449d08ae7d350520ce09f046f3f4e5e9a932a0227f5493b3 64e11fe46b0eb2d8d01124d2e05c774ee735dd989691507b8bcef82d09a50d749dbabd8f6062734 bfd7e3dbae544b62067ef96ae7ee1d9b46536bc84b4076395a7965c87633d73ab0ef6fc7c86990f af4ee2f4303a9edad2be95608624a23e3043aa16c3b1679189efeba5ce611dd6af6daaabef7d5d1 85550cfac3ede628d833a9de34ed4455cdc34f9a77bd88a15c507712500000000010b66726f6d61 63636f756e7400000000000038d0d04d0001 инфа об этой части данных потеряна
legendary
Activity: 1120
Merit: 1069
November 02, 2011, 06:16:04 AM
#6
Привести к формату вики - это самое простое, я могу этим заняться.. нужна сама информация.

Какая информация хранится в файле - транзакции, адреса,.. что еще? какая информация доступна по каждому объекту? Есть ли связанные данные? (например есть запись адрес и есть список пар ключ-значение для этого адреса) и т.п.

p.s. Точно помню была утилита, позволяющая весь wallet.dat экспортировать в json формат пообъектно, отредактировать его и сформировать новый файл полностью по этой информации, бегло поискал, не могу найти.

Так вот нужны правила, позволяющие проводить подобные изменения, а так же что происходит когда совершаются типичные действия (появились транзакции, появились блоки), а не просто тут данные X там данные Y. Я понимаю вся эта информация находится в исходных текстах клиента, но читать их несколько затруднительно.
Lis
sr. member
Activity: 293
Merit: 251
Spice must flow!
November 02, 2011, 03:12:36 AM
#5
тоже был бы рад...

p.s. а не разместить ли эту информацию где-нибудь в вики? например тут https://en.bitcoin.it/wiki/wallet.dat
К большому сожалению, не обладаю хорошими познаниями в разметке wiki знанием иностранного языка, и умением в создании документации.
Но могу ответить на ваши вопросы в теме. Быть может кто либо итогам треда заполнит wiki...

Для начала:
файл wallet.dat представляет из себя 2-х мерную таблицу

ключ | значение

не печатные символы я буду заменять * если буду отображать символ в 16-ой системе то буду ставить перед последовательностью 0x
если последовательность текстовая ставить u и заключать в ' '
знак ~ перед символами или после символов означает что перед символами или после символов означает разрыв.

В качестве ключа может выступать поле содержащее key например
0x03 u'key' ~ стандартное начало поля "ключ"
0x03 означает что следом идет 3 символа 'key' отвечающие за тип поля

ключ tx
0x02 u'tx' следом 32 символа являющиеся хешем tx которые показывает утилита опубликованная тут https://bitcointalksearch.org/topic/m.327142
следует учитывать что хеш в wallet.dat в отличии от BBE перевернут побайтно, т.е. 012345 => 452301
legendary
Activity: 1120
Merit: 1069
November 01, 2011, 10:25:30 AM
#4
тоже был бы рад...

p.s. а не разместить ли эту информацию где-нибудь в вики? например тут https://en.bitcoin.it/wiki/wallet.dat
sr. member
Activity: 288
Merit: 251
November 01, 2011, 09:50:32 AM
#3
Буду очень признателен  Smiley
Lis
sr. member
Activity: 293
Merit: 251
Spice must flow!
November 01, 2011, 09:05:32 AM
#2
Подскажите плиз, где взять спецификацию на формат файла wallet.dat ?
Могу поделиться награбленной инфой, спецификации не видел.
sr. member
Activity: 288
Merit: 251
November 01, 2011, 07:25:21 AM
#1
Подскажите плиз, где взять спецификацию на формат файла wallet.dat ?
Jump to: