Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
17 января 2014, 2:39:05 AM   # 1
 
 
Сообщений: 14
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я работаю над проектом, самообразование, где я пытающимся построить дешевое приложение шахтера. Я настроил "testnet в коробке" и написал небольшую шахтера, который строит версии 2 блоков. Горняк шахта успешно, все блоки, вплоть до 127, но при попытке представить блок 128 блоков становятся отвергнутыми со ссылкой на ошибку "AcceptBlock (): блок несоответствие высоты в coinbase"

Сценарий coinbase Я использую выглядит следующим образом: (пример не включает префикс длины сценария varint)
0180 00002f503253482f04b8864e50080800000200000001072f736c7573682f



Любопытно, как блок, который не может это один сразу мимо максимального значения подписанного байта (127) Я подозреваю, что может быть подлинной ошибка здесь, связанная с тем, как Bitcoin вычисляет ожидаемый префикс.

Внутренне высота сохраняется как "подписанный" INT: (Собранный из AcceptBlock () функция в main.cpp)
INT nHeight = 0;

Я подозреваю, что ошибки возникают, когда эти подписанные значения получают уплотненные в переменный целый. Мы, возможно, просто не видел этого, из-за возможности версии блока 2 не был введен, пока оба testnet и mainnet не было достаточно долго, чтобы замаскировать проблему. К сожалению, у меня нет среды или инструментов, созданной для компиляции и грабли вокруг в Bitcoin коде. Может кто-то здесь более подготовлены, и более знающим, чем я могу помочь мне исследовать это? Мне было бы любопытно результата следующего Snippit кода:

INT nHeight = 128;
CSCRIPT ожидать = CScript () << nHeight;

Смотрите, если байты, построенные CScript оказываются "0180" как и ожидалось.


Заранее спасибо!

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


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


17 января 2014, 2:47:59 AM   # 2
 
 
Сообщений: 14
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

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





В случае, если кто хотел бы больше контекста здесь, это пример попытки представления. (Представлено шестнадцатеричной в "submitblock")

0200000062BDE75A8EF452C5489925E0439FFB42DA9C03B9152E4F361C75C2D400000000A548FD7 DADA0874163A7480A114F1EB2DE0A1BA0CFF667444867A421907865A14999D852FFFF001D600B96 520101000000010000000000000000000000000000000000000000000000000000000000000000f fffffff20018000002f503253482f04b8864e50080800000209020000072f736c7573682f000000 000100f2052a010000001976a91445434bcc52d8e4255d1a5d624854b11fd3a9853188ac0000000
Farthom сейчас офлайн Пожаловаться на Farthom   Ответить с цитированием Мультицитирование сообщения от Farthom Быстрый ответ на сообщение Farthom

17 января 2014, 3:04:39 AM   # 3
 
 
Сообщения: 138
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

последний байт должен быть меньше или равно 127, правильная кодировка "02 80 00",

может быть, вы должны использовать неподписанные Int.
techwtf сейчас офлайн Пожаловаться на techwtf   Ответить с цитированием Мультицитирование сообщения от techwtf Быстрый ответ на сообщение techwtf

17 января 2014, 3:27:07 AM   # 4
 
 
Сообщений: 14
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

Я запутался, то varint спецификация говорит одиночные байты для хранения хорошо до 252

< 0xfd 1 uint8_t
Farthom сейчас офлайн Пожаловаться на Farthom   Ответить с цитированием Мультицитирование сообщения от Farthom Быстрый ответ на сообщение Farthom

17 января 2014, 3:37:03 AM   # 5
 
 
Сообщений: 14
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

Я также предполагаю, что это использует "varint" как указано на Bitcoin вики. Я предполагаю, что я путаюсь над тем, что определяет "длина" ряда.
Farthom сейчас офлайн Пожаловаться на Farthom   Ответить с цитированием Мультицитирование сообщения от Farthom Быстрый ответ на сообщение Farthom

17 января 2014, 4:12:20 PM   # 6
 
 
Сообщения: 1512
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

Это зависит от того, "varint" используется...

котировка
// переменной длиной целые числа: байты являются 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]

МЭД кодированной подпись использует формат данные с длиной октетов, указанный в ASN.1 http://luca.ntop.org/Teaching/Appunti/asn1.html
deepceleron сейчас офлайн Пожаловаться на deepceleron   Ответить с цитированием Мультицитирование сообщения от deepceleron Быстрый ответ на сообщение deepceleron

17 января 2014, 4:20:58 PM   # 7
 
 
Сообщения: 1148
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

BIP-34 определяет его как

байт: длина
байт [длина]: высота

Она не определяет, если высота будет подписан или нет.

Я думаю, что скорее всего, проблема заключается в том, что он интерпретируется как знаковое число.

01 80 означает, -128 в знаковом двоичном.

Вам нужно добавить 00 байт, чтобы гарантировать, что он работает.

02 0080 будет 128.
TierNolan сейчас офлайн Пожаловаться на TierNolan   Ответить с цитированием Мультицитирование сообщения от TierNolan Быстрый ответ на сообщение TierNolan

18 января 2014, 4:03:55 AM   # 8
 
 
Сообщений: 14
Цитировать по имени
цитировать ответ
по умолчанию Re: Не удается добывать блоки 128 и за ее пределами с использованием версии 2 блоков.

Спасибо deepceleron за ваш ответ. Я убежден, что вы вывесили правильно, но я в тупик одной вещи. Я использовал "BouncyCastle" библиотека для .NET, чтобы выполнить эту кодировку. Образец кода:

DerInteger INTEG = новый DerInteger ((INT) template.Height);
байт [] heightBytes = integ.GetDerEncoded ();
Строка гекс = Util.ByteArrayToString (heightBytes);
гекс = hex.Substring (2); // Strip от начального тега INTEGER "02"

Для значения 128 это приводит:
02 00 80
Вместо ожидаемого
02 80 00

Почему Bitcoin различаются по порядку байт из спецификации? Я предполагаю, что это достаточно, чтобы написать некоторый порядок байтов реверсивный логику легко, но я хочу, чтобы убедиться, что я не хватает чего-то.
Farthom сейчас офлайн Пожаловаться на Farthom   Ответить с цитированием Мультицитирование сообщения от Farthom Быстрый ответ на сообщение Farthom



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW