Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
10 июня 2014, 4:51:41 PM   # 1
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Есть довольно простой способ извлечь UTXO из Bitcoin Ядра?

Код:
{
"высота" : 305134,
"bestblock" : "00000000000000003f0bb243b026fa904946f262eebf0684614ebb2622e4e554",
"операции" : 3304525,
"txouts" : 11337577,
"bytes_serialized" : 393434666,
"hash_serialized" : "4132c6a9bdb7f2492348ba9cf8ca1c1fb954f619805de0c3cd01847f969ece65",
"Итого" : 12878214.79102854
}

Я хотел бы множество этих 11,337,577 выходов, таким образом они могут быть разобраны и сбрасывали в базу данных для анализа. Любые ссылки на информацию или соответствующий код на том, как Bitcoin-Core хранит UTXO? Я понимаю, что я мог бы использовать blockchain анализатор для создания UTXO и что, вероятно, происходит следующая (как я хочу, чтобы посмотреть, как она изменилась с течением времени), но свалка будет хорошим началом. Даже просто свалка индекса (tx_out_hash & tx_out_index) было бы здорово.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes


Как заработать Биткоины?
Без вложений. Не майнинг.


10 июня 2014, 4:59:42 PM   # 2
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Получил 1806 Биткоинов
Реальная история.





Я не уверен в этом конкретной реализации, но, как правило базы данных UTXO это просто база данных: ключи => учет

Ключи, как правило, TXID + Vout, в то время как записи содержат, по меньшей мере, значение + pk_script, хотя обычно и такие вещи, как block_height и т.д.

В случае Bitcon Ядра, она должна быть такой же, так что я бы сказал: использовать любой LevelDB двигатель для загрузки БД и просматривать через него - это должно быть именно то, что вам нужно.
Формат записи не должно быть трудно понять.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

10 июня 2014, 5:09:28 PM   # 3
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

На соответствующую записку, что является "байтов сериализовать" представляющий. 393434666/11337577 = ~ 35 байт на выходе. TX хэш (32 байт) и индекс выхода (1-2 байта) будет от 33 до 34 байт прямо там. Это только со ссылкой на индекс? Или это только со ссылкой на сырье выходные данные (значение & скрипт) не значение подстановки? Это не может быть полный набор, как это было бы ближе к

Проверка правильности ввод произвольного ТХ не следующие нужны?
tx_out_hash (32 байта)
tx_out_index (4 байта)
значение (8 байт)
script_len (вариант - обычно 1 байт)
Сценарий (переменный - 25 байт для выходов P2PKH, которые составляют 90% + UXTO)
То есть 70 байт минимум, поэтому для 11,337,577 выходов UXTO будет как минимум 794MB правильно? Что мне не хватает?
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

10 июня 2014, 5:11:34 PM   # 4
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Я не уверен в этом конкретной реализации, но, как правило базы данных UTXO это просто база данных: ключи => учет

Ключи, как правило, TXID + Vout, в то время как записи содержат, по меньшей мере, значение + pk_script, хотя обычно и такие вещи, как block_height и т.д.

В случае Bitcon Ядра, она должна быть такой же, так что я бы сказал: использовать любой LevelDB двигатель для загрузки БД и просматривать через него - это должно быть именно то, что вам нужно.
Формат записи не должно быть трудно понять.

Мой пост выше был отправлен в то время как вы набирали, но это делает много смысла. Весьма вероятно, что UX сообщили только ключ (хэш & индекс), который будет совпадать с объявленным размером. Поэтому возникает вопрос, какой файл индекс UXTO хранится в?

На редактирования:
котировка
подкаталог chainstate
[V0.8 и выше] База данных LevelDB с компактным представлением всех текущих неизрасходованных результатов транзакций и некоторые метаданные о сделках они с. Данные здесь необходимо для проверки новых входящих блоков и транзакций. Теоретически он может быть восстановлен из блока данных (см параметра -reindex командной строки), но это занимает довольно много времени. Без него, еще можно было теоретически сделать проверку на самом деле, но это будет означать полную проверку с помощью блоков (7 ГБ в мае 2013 года) для каждого вывода тратятся.

Хорошо, так вот с чего начать. Давайте посмотрим, смогу ли я его расшифровать. Благодарю. Было бы хорошо, если структура формата сообщалось где-то другое, чем просто в коде.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

10 июня 2014, 5:15:59 PM   # 5
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Я бы не стало рассчитывать рекордные размеры, как это. LevelDB использует сжатие, что может быть особенно эффективным на клавиши части.

Существует, безусловно, 32-байт TXID на запись. А индекс выход должен быть 4 байта - это в протоколе блок цепи, так что ни один нормальный человек не посмел бы сделать короче в БД.

Я предполагаю, что кто-то скоро скажу вам, что фактический формат индекса и записей, но изучая его с некоторой базой данных браузера я уверен, что вы можете легко вычислить его самостоятельно.

Если вам нужна какая-то конкретные статистика, у меня есть UTXO дб в своем собственном формате / двигателе - с удовольствием, чтобы извлечь что-то для вас.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

10 июня 2014, 5:51:07 PM   # 6
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

На соответствующую записку, что является "байтов сериализовать" представляющий. 393434666/11337577 = ~ 35 байт на выходе. TX хэш (32 байт) и индекс выхода (1-2 байта) будет от 33 до 34 байт прямо там. Это только со ссылкой на индекс? Или это только со ссылкой на сырье выходные данные (значение & скрипт) не значение подстановки? Это не может быть полный набор, как это было бы ближе к

Проверка правильности ввод произвольного ТХ не следующие нужны?
tx_out_hash (32 байта)
tx_out_index (4 байта)
значение (8 байт)
script_len (вариант - обычно 1 байт)
Сценарий (переменный - 25 байт для выходов P2PKH, которые составляют 90% + UXTO)
То есть 70 байт минимум, поэтому для 11,337,577 выходов UXTO будет как минимум 794MB правильно? Что мне не хватает?

Посмотрите в txdb.cpp, CCoinsViewDB :: GetStats.

Код:
stats.nSerializedSize + = 32 + slValue.size ();

Я не следил за объектами вокруг, но на первый взгляд это выглядит как TXID и порядкового номера (в виде varint). Это работает очень хорошо с 35 байт в расчете на выходе.
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

10 июня 2014, 11:49:53 PM   # 7
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Так много разбив в стены, и я полагал, что некоторые из его.

Ключ TXID + 0x63 ("с"), Чтобы указать монеты?

Величина представляет собой несколько неизрасходованных выходы для этого TXID

Из исходного кода (coins.h)
Код:
/ ** обрезки версия CTransaction: только сохраняет метаданные и неизрасходованные результатов транзакций
 *
 * Сериализированный формат:
 * - VARINT (nVersion)
 * - VARINT (nCode)
 * - unspentness bitvector, для Vout [2] и далее; младший байт первый
 * - в не-потраченный CTxOuts (через CTxOutCompressor)
 * - VARINT (nHeight)
 *
 * Значение nCode состоит из:
 * - бит 1: IsCoinBase ()
 * - бит 2: Vout [0] не проводится
 * - бит 4: Vout [1] не проводится
 * - Высшие биты кодируют N, число ненулевых байт в следующем bitvector.
 * - В случае, если как бит 2 и бит 4 убираются, они кодируют N-1, так как там должны быть
 * Хотя бы один не израсходован выход).
 *
 * Пример: 0104835800816115944e077fe7c803cfa57f29b36bf87c1d358bb85e
 *          <><><--------------------------------------------><---->
 * | \ | /
 * Код версии Vout [1] Высота
 *
 * - версия = 1
 * - код = 4 (Vout [1] не проводятся, и 0 ненулевых байты bitvector следует)
 * - unspentness bitvector: в 0 ненулевые байты следуют, имеет длину 0
 * - Vout [1]: 835800816115944e077fe7c803cfa57f29b36bf87c1d35
 * 8358: компактное количество представление 60000000000 (600 BTC)
 * 00: специальный тип txout оплата за Публичную-хэш
 * * 816115944e077fe7c803cfa57f29b36bf87c1d35: адрес uint160
 * - высота = 203998
 *
 *
 * Пример: 0109044086ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4eebbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa486af3b
 *          <><><-><--------------------------------------------------><----------------------------------------------><---->
 * / \ \ | | /
 * Код версии unspentness Vout [4] Vout [16] высота
 *
 * - версия = 1
 * - код = 9 (coinbase, ни Vout [0] или Vout [1] израсходованные,
 * 2 (1, + 1, поскольку оба бит 2 и 4 бита убирается) ненулевой bitvector байты следуют)
 * - unspentness bitvector: биты 2 (0x04) и 14 (0x4000) установлены, так Vout [2 + 2] и Vout [14 + 2] неизрасходованного
 * - Vout [4]: ​​86ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4ee
 * * 86ef97d579: компактное количество представление 234925952 (2,35 BTC)
 * 00: специальный тип txout оплата за Публичную-хэш
 * * 61b01caab50f1b8e9c50a5057eb43c2d9563a4ee: адрес uint160
 * - Vout [16]: bbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa4
 * * Bbd123: компактное количество представление для 110397 (0,001 BTC)
 * 00: специальный тип txout оплата за Публичную-хэш
 * * 8c988f1a4a4de2161e0f50aac7f17e7f9555caa4: адрес uint160
 * - высота = 120891
 * /

С помощью этого я был в состоянии найти некоторые ОЕ и декодировать некоторые части vouts. Высота и значение до сих пор загадка, хотя из-за этого "компактный формат", Есть идеи?
0x86af3b = 120891
0x8bb85e = 203998
0x86ef97d579 = 234925952
0x8358 = 60000000000

DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

11 июня 2014, 12:37:58 AM   # 8
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

С помощью этого я был в состоянии найти некоторые ОЕ и декодировать некоторые части vouts. Высота и значение до сих пор загадка, хотя из-за этого "компактный формат", Есть идеи?
0x86af3b = 120891
0x8bb85e = 203998
0x86ef97d579 = 234925952
0x8358 = 60000000000

Да ладно, просто следуйте звонки .. не так трудно найти ctxoutcompressor и вызов распаковывать сумму:

Код:
// сжатие Сумма:
// * Если сумма 0, выход 0
// * во-первых, разделить количество (в единицах базовых) в наибольшей степени 10 возможных; называть экспоненты е (е макс 9)
// *, если е<9, последняя цифра результирующего числа не может быть 0; хранить его в качестве д, и падение его (деление на 10)
// * вызовите результат п
// * выход 1 + 10 * (9 * п + д - 1) + е
// *, если е == 9, мы знаем только полученное число не равно нулю, поэтому выход 1 + 10 * (п - 1) + 9
// (это может быть декодирован, как и д в [1-9], и е в [0-9])

uint64_t CTxOutCompressor :: CompressAmount (uint64_t п)
{
    если (п == 0)
        возвращать 0;
    ИНТ е = 0;
    в то время как (((п% 10) == 0) && е < 9) {
        п / = 10;
        е ++;
    }
    если (е < 9) {
        INT д = (п% 10);
        утверждают (д >= 1 && d <= 9);
        п / = 10;
        вернуться 1 + (N * 9 + d - 1) * 10 + е;
    } Еще {
        вернуться 1 + (N - 1) * 10 + 9;
    }
}

uint64_t CTxOutCompressor :: DecompressAmount (uint64_t х)
{
    // х = 0 или х = 1 + 10 * (9 * п + д - 1) + е или х = 1 + 10 * (п - 1) + 9
    если (х == 0)
        возвращать 0;
    Икс--;
    // х = 10 * (9 * п + д - 1) + е
    INT е = х% 10;
    х / = 10;
    uint64_t п = 0;
    если (е < 9) {
        // х = 9 * п + д - 1
        INT д = (х% 9) + 1;
        х / = 9;
        // х = п
        п = х * 10 + D;
    } Еще {
        п = х + 1;
    }
    в то время как (е) {
        п * = 10;
        E--;
    }
    вернуться п;
}

Потому что есть миллионы txouts формат работает довольно трудно сохранить каждые байты (сжатие LevelDB не делает ничего полезного для txouts вообще).
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

11 июня 2014, 12:45:15 AM   # 9
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Благодаря Я обнаружил, что после размещения, но я до сих пор не правильно декодировать так как это вопрос младшему или я что-то еще не хватает.

т.е. из примера декодирования 0x86af3b до 120,891 или 120,891 кодирования для 0x86af3b.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

11 июня 2014, 1:54:41 AM   # 10
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Другая часть тайны решена. высота блока записывается как MSB-128 базовых целые числа переменной длиной (не такие же, как в varint протокола Bitcoin).

Код:

// переменной длиной целые числа: байты являются MSB-128 базовой кодировкой числа.
// Высокий бит каждого байт означает, следует ли другая цифра. Делать
// кодирование один-к-одному, один вычитается из всех, кроме последней цифры.
// Таким образом, последовательность байт а [] с длиной Len, где все, кроме последнего байта
// имеет битые 128 набор, кодирует номер:
//
// (а [LEN-1] & 0x7F) + сумма (я = 1..len-1, 128 ^ я * ((а [LEN-я-1] & 0x7F) +1))
//
// Свойства:
// * Очень маленький (0-127: 1 байт, 128-16511: 2 байта, 16512-2113663: 3 байта)
// * Каждое целое число имеет ровно одну кодировку
// * Кодирование не зависит от размера первоначального целого типа
// * Нет избыточности: каждый (бесконечная) последовательность байтов не соответствует списку
// кодируемых целых чисел.
//
// 0: [0x00] 256: [0x81 0x00]
// 1: [0x01] 16383: [0xFE 0x7F]
// 127: [0x7F] 16384: [0xFF 0x00]
// 128: [0x80 0x00] 16511: [0x80 0xFF 0x7F]
// 255: [0x80 0x7F] 65535: [0x82 0xFD 0x7F]
// 2 ^ 32: [0x8e 0xFE 0xFE 0xFF 0x00]

0x86af3b
[134] [175] [59]
7 * 128 ^ 2 + 48 * 128 * 1 + 59 * 128 ^ 0 = 120891

0x8bb85e
[139] [184] [94]
12 * 128 ^ 2 + 57 * 128 * 1 + 94 * 128 ^ 0 = 203998


DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

11 июня 2014, 2:17:15 AM   # 11
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Понял, наконец.

Для Btc значений вы должны сначала расшифровать его из формата MSB базы-128, а затем расшифровать его, используя декомпрессор.

Значение: 0x86ef97d579 = 234925952

86 эф 95 d5 79
[134] [239] [151] [213] [79]

134 * 128 * 4 + 239 * 128 ^ 3 + 151 * 128 ^ 2 + 213 * 128 * 1 + 79 * 128 ^ 0 = 2114333561

Передача 2,114,333,561 через функцию декомпрессора производит 234925952.




DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

11 июня 2014, 1:19:11 PM   # 12
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Это было на самом деле что-то стоит документировать.
Предпочтительно на вики.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

12 июня 2014, 1:53:24 AM   # 13
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Хорошо одна последняя вещь.

При переборе всех в chainstate паров ключей есть одна, очевидно, не ТХ пар. Есть идеи?

Ключ: 0x42
Значение: 0x61E663DEB7E063C6A8293CB3244BD6A1ECA9DB867F58161E0000000000000000
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

12 июня 2014, 3:50:23 AM   # 14
 
 
Сообщения: 1064
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Хорошо одна последняя вещь.

При переборе всех в chainstate паров ключей есть одна, очевидно, не ТХ пар. Есть идеи?

Ключ: 0x42
Значение: 0x61E663DEB7E063C6A8293CB3244BD6A1ECA9DB867F58161E0000000000000000

0x42 является символ «B» и то, что определено есть последний (самый новый?) Блок хэш. В более привычной форме:

'B': 00000000000000001e16587f86dba9eca1d64b24b33c29a8c663e0b7de63e661
dexX7 сейчас офлайн Пожаловаться на dexX7   Ответить с цитированием Мультицитирование сообщения от dexX7 Быстрый ответ на сообщение dexX7

12 июня 2014, 9:53:56 PM   # 15
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Хорошо одна последняя вещь.

При переборе всех в chainstate паров ключей есть одна, очевидно, не ТХ пар. Есть идеи?

Ключ: 0x42
Значение: 0x61E663DEB7E063C6A8293CB3244BD6A1ECA9DB867F58161E0000000000000000

0x42 является символ «B» и то, что определено есть последний (самый новый?) Блок хэш. В более привычной форме:

'B': 00000000000000001e16587f86dba9eca1d64b24b33c29a8c663e0b7de63e661

Благодарю. В этом есть смысл. Это blockhash chainstate в настоящее время представляет.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

12 июня 2014, 10:50:27 PM   # 16
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Хорошо еще одна загадка декодирования

Пример ТХ: http://webbtc.com/tx/14015bd586c0c7a28979ca294b114441f23bfc97be17cd6077b9e12e2709fec3

Код:
E: \ Repos \ UxtoParser \ UxtoParser.Demo \ Bin \ Debug>UxtoParser.Demo.exe ТХ 14015bd586c0c7a28979ca294b114441f23bfc97be17cd6077b9e12e2709fec3
Ключ:
63C3FE09272EE1B97760CD17BE97FC3BF24144114B29CA7989A2C7C086D55B0114

Стоимость:
010C013600946CB2E08075BCBAF157E47BCB67EB2B2339D24268800F514104E6DA9C60084B43D28266243C636BCDAF4D8F17B5954E078D2DECE7D4659E0DEE34
19A40B939C24AC813C692A323CA5207A6FB387FFE28E48F706C95DBF46648F210226CB0561011D9045F6371CB09086BA7148D9942328BCF1DD78CB6EDB35CCDD
A921022EAC137AB02D826DF0AF54E92A352945C9892DF6CD77F1A7C390FC82C8B0EDEA53AE8F9D01

Так что я начать декодирование, как это.

010C013600946CB2E08075BCBAF157E47BCB67EB2B2339D24268800F514104E6DA9C60084B43D28266243C636BCDAF4D8F17B5954E078D2DECE7D4659E0DEE341 9A40B939C24AC813C692A323CA5207A6FB387FFE28E48F706C95DBF46648F210226CB0561011D90 45F6371CB09086BA7148D9942328BCF1DD78CB6EDB35CCDDA921022EAC137AB02D826DF0AF54E92 A352945C9892DF6CD77F1A7C390FC82C8B0EDEA53AE8F9D01

Версия: 0x01 = Ver 1
Код: 0x0C01 = Первый байт (бит 1 = 0 = не coinbase, бит 2 = 0 = Vout [0] уже израсходованы, бит 3 = 1 = Vout [1] израсходованными, бит 4-8 = 0x0001 = один байт следующим образом .. Второй байт = 0x000000001 Это растровое изображение из остальной части неизрасходованных выходов (от Vout [2] +) Бит 1 устанавливается 1 + 1 = 2, так Vout [2] неизрасходованного Резюме:... 2 неизрасходованные выходы ( Vout [1] & Vout [2], ни является выходом coinbase).

Vout [1] | 36 | 00 | 946CB2E08075BCBAF157E47BCB67EB2B2339D242 |
   Значение: MSB-128: 0x36 -> VarInt: 54 -> 6000
   Код: 0x00 = P2PH
   PkHash: 946cb2e08075bcbaf157e47bcb67eb2b2339d242
Vout [2] | 68 | 800F | 514104E6DA9C60084B43D28266243C636BCDAF4D8F17B5954E078D2DECE7D4659E0DEE3419A40B939C24AC813C692A323CA5207A6FB387FFE28E48F706C95DBF46648F210226CB0561011D9045F6371CB09086BA7148D9942328BCF1DD78CB6EDB35CCDDA921022EAC137AB02D826DF0AF54E92A352945C9892DF6CD77F1A7C390FC82C8B0EDEA53AE |
   Значение: MSB-128: 0x68 -> VarInt: 104 -> 12000
   Код: 0x800f. Первый байт не 0x01 до 0x05 поэтому код представляет длину произвольного скрипта. Как декодировать длину?
   Сценарий: 514104e6da9c60084b43d28266243c636bcdaf4d8f17b5954e078d2dece7d4659e0dee3419a40b9 39c24ac813c692a323ca5207a6fb387ffe28e48f706c95dbf46648f2102
                  26cb0561011d9045f6371cb09086ba7148d9942328bcf1dd78cb6edb35ccdda921022eac137ab02 d826df0af54e92a352945c9892df6cd77f1a7c390fc82c8b0edea53ae
Блок: MSB-128: 0x8f9d01 -> 265985

Из Я способен декодировать всю запись UXTO кроме "код" элемент на второй Vout [0]. Все остальное соответствует данным из blockchain. Для стандартных типов ТХ код будет один байт и в диапазоне 0x01-0x05 иначе это как-то? представляет длину сценария и может быть один или два байта. Исходный код не является особенно описательным (script.h).

Код:
* Другие сценарии до 121 байт требуется 1 байт длины + сценария. Выше
 * Что, сценарии до 16505 байт требуется 2 байта + длина сценария.

Декодирование 0x800f с использованием MSB-128 результатов на 143, но фактический сценарий составляет 137 байт. 

Есть идеи?




  
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

12 июня 2014, 11:22:45 PM   # 17
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Ответ на свой вопрос.

В script.h
Код:
    статические константные без знака INT nSpecialScripts = 6;

...

аннулированию Serialize (поток &s, внутр nType, внутр nVersion) сопзЬ {


        если (Сжать (COMPR)) {
            s << CFlatData (&COMPR [0], &COMPR [compr.size ()]);
            вернуть;
        }
        беззнаковое INT nРазмер: = script.size () + nSpecialScripts;
...
}

Это затем кодируется в формате MSB-128 (varint) и предваряется к сценарию, когда сериализованная для UXTO (chainstate). Дело в том, это, кажется, ошибка (конечно, один, что было бы очень трудно исправить сейчас), поскольку не являются 6 специальных сделок там 5. Только Pay2PubKeyHash (0x00), Pay2ScriptHash (0x01), и Pay2PubKey (0x02, 0x3, 0x04) сжаты. Кроме того, поскольку он основан ноль, если скрипт с длиной ноля действует один нужно будет только компенсировать фактическую длину сценария на 4. Права? В любом случае не совсем интуитивно (или я просто устал).










DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

13 июня 2014, 12:23:44 AM   # 18
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Это было на самом деле что-то стоит документировать.
Предпочтительно на вики.
Это действительно глубокое программное обеспечение внутреннее и может меняться от версии к версии. Вы действительно не должны писать внешнее программное обеспечение, которое делает что-нибудь с IT- и если вы делаете, хорошо вы получите держать штуки. Это описано в источнике (serialize.h) Я волнуюсь, что поставив его на вики будет сделать это звучит, как было некоторое обязательство на все, чтобы сохранить его.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

13 июня 2014, 12:41:45 AM   # 19
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Это было на самом деле что-то стоит документировать.
Предпочтительно на вики.
Это действительно глубокое программное обеспечение внутреннее и может меняться от версии к версии. Вы действительно не должны писать внешнее программное обеспечение, которое делает что-нибудь с IT- и если вы делаете, хорошо вы получите держать штуки. Это описано в источнике (serialize.h) Я волнуюсь, что поставив его на вики будет сделать это звучит, как было некоторое обязательство на все, чтобы сохранить его.

Имеет смысл. Я согласен с вики, вероятно, не в том месте. Возможно расширение инлайн документации в исходном коде. Я не думаю, что это своего рода код полезен для большинства приложений, но есть много интересных статистики, которые можно вытянуть из UXTO. Распределение выходного возраста, распределение выходов по типу сценария, распределение выходных значений. Можно было бы построить UXTO из сырых блоков, но так как chainstate имеет, что данные (хотя и в несколько непрозрачных формате), кажется, умнее место, чтобы вытащить это.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

13 июня 2014, 8:46:41 AM   # 20
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: «Легкий способ», чтобы извлечь из UTXO Bitcoin Ядра?

Имеет смысл. Я согласен с вики, вероятно, не в том месте. Возможно расширение инлайн документации в исходном коде. Я не думаю, что это своего рода код полезен для большинства приложений, но есть много интересных статистики, которые можно вытянуть из UXTO. Распределение выходного возраста, распределение выходов по типу сценария, распределение выходных значений. Можно было бы построить UXTO из сырых блоков, но так как chainstate имеет, что данные (хотя и в несколько непрозрачных формате), кажется, умнее место, чтобы вытащить это.
FWIW, то gettxoutsetinfo итерация RPC над множеством utxo, в прошлом, когда я хотел эти данные я просто добавил некоторые приборы в этой функции, чтобы сбросить ее. Даже если вы не очень опытный с C ++ это не должно быть трудно подражать остальной части кода и распечатать его ... это может быть проще (а также более надежны в разных версиях), чем пытаться считывать данные.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW