Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
25 января 2015, 5:21:31 PM   # 1
 
 
Сообщений: 10
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

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


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

Я только подключить к известному хосту, поэтому я доверяю все, что исходит от него. Что я могу удалить, чтобы ускорить начальную синхронизацию с blockchain?

Я уже заметил несколько вещей в CheckBlock (main.cpp). Моя версия будет выглядеть так:

Код:
BOOL CheckBlock (Const CBlock& блок, CValidationState& состояние, BOOL fCheckPOW, BOOL fCheckMerkleRoot)
{
    // Эти проверки, которые не зависят от контекста
    // которые могут быть проверены перед сохранением блок-сироту.
/ *
    // Ограничение размера
    если (block.vtx.empty () || block.vtx.size () > MAX_BLOCK_SIZE || :: GetSerializeSize (блок, SER_NETWORK, protocol_version) > MAX_BLOCK_SIZE)
        вернуться state.DoS (100, ошибка ("CheckBlock (): ограничения размера не удалось"),
                         REJECT_INVALID, "плохо-BLK-длина");


    // Проверяем доказательство работы спичек заявленной суммы
    если (fCheckPOW && ! CheckProofOfWork (block.GetHash (), block.nBits))
        вернуться state.DoS (50, ошибка ("CheckBlock (): доказательство работы не удалось"),
                         REJECT_INVALID, "высокой хэш");
* /

    // Проверяем метки
    если (block.GetBlockTime () > GetAdjustedTime () + 2 * 60 * 60)
        вернуться state.Invalid (ошибка ("CheckBlock (): блок временной метки слишком далеко в будущем"),
                             REJECT_INVALID, "время слишком новый");
/ *
    // Первая сделка должна быть coinbase, остальные не должны быть
    если (block.vtx.empty () ||! block.vtx [0] .IsCoinBase ())
        вернуться state.DoS (100, ошибка ("CheckBlock (): первый ТХ не coinbase"),
                         REJECT_INVALID, "плохо центибар пропущенными");
    для (беззнаковое INT I = 1; я < block.vtx.size (); я ++)
        если (block.vtx [I] .IsCoinBase ())
            вернуться state.DoS (100, ошибка ("CheckBlock (): более одного coinbase"),
                             REJECT_INVALID, "плохо центибар-множественный");
* /

/ *
    // Проверка сделок
    BOOST_FOREACH (Const CTransaction& ТХ, block.vtx)
        если (! CheckTransaction (ТХ, состояние))
            возвращать ошибку ("CheckBlock (): CheckTransaction не удалось");
* /

    // Построить дерево Merkle уже. Нам нужно это в любом случае позже, и это делает
    // кэш блок транзакции хэши, а это означает, что они не должны быть
    // пересчитывается много раз во время проверки этого блока.
    block.BuildMerkleTree ();

    // Проверка на наличие дубликатов txids. Это улавливается ConnectInputs (),
    // но поймать его раньше избежать потенциальной атаки DoS:
    задавать uniqueTx;
    для (беззнаковое INT I = 0; я < block.vtx.size (); я ++) {
        uniqueTx.insert (block.GetTxHash (я));
    }
    если (uniqueTx.size ()! = block.vtx.size ())
        вернуться state.DoS (100, ошибка ("CheckBlock (): Дубликат сделка"),
                         REJECT_INVALID, "плохой-txns-дубликат", правда);

/ *
    без знака INT nSigOps = 0;
    BOOST_FOREACH (Const CTransaction& ТХ, block.vtx)
    {
        nSigOps + = GetLegacySigOpCount (ТХ);
    }
    если (nSigOps > MAX_BLOCK_SIGOPS)
        вернуться state.DoS (100, ошибка ("CheckBlock (): недоступный SigOpCount"),
                         REJECT_INVALID, "плохо-BLK-sigops", правда);


    // Проверка корень Merkle
    если (fCheckMerkleRoot && block.hashMerkleRoot! = block.vMerkleTree.back ())
        вернуться state.DoS (100, ошибка ("CheckBlock (): hashMerkleRoot несоответствие"),
                         REJECT_INVALID, "плохо txnmrklroot", правда);
* /

    возвращает истину;
}

Какие изменения я могу сделать, чтобы ускорить его?
CuriousCarl сейчас офлайн Пожаловаться на CuriousCarl   Ответить с цитированием Мультицитирование сообщения от CuriousCarl Быстрый ответ на сообщение CuriousCarl


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


25 января 2015, 5:45:58 PM   # 2
 
 
Сообщения: 2212
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

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





Вы можете вручную добавить совсем недавно контрольно-пропускной пункт ...

Я не думаю, что первоначальная проверка НАСТОЛЬКО проблематично, хотя, просто дайте ему поработать в течение ночи и сделать с ней. AFAIK есть также различные уровни проверки того, что вы могли бы попробовать установить.
Sukrim сейчас офлайн Пожаловаться на Sukrim   Ответить с цитированием Мультицитирование сообщения от Sukrim Быстрый ответ на сообщение Sukrim

25 января 2015, 6:00:31 PM   # 3
 
 
Сообщений: 10
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

Интересно. Как установить эти уровни проверки?
CuriousCarl сейчас офлайн Пожаловаться на CuriousCarl   Ответить с цитированием Мультицитирование сообщения от CuriousCarl Быстрый ответ на сообщение CuriousCarl

25 января 2015, 6:14:09 PM   # 4
 
 
Сообщения: 2212
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

https://en.bitcoin.it/wiki/Running_Bitcoin

котировка
-checklevel =        Как кап блок верификации (0-4, по умолчанию: 3)
Sukrim сейчас офлайн Пожаловаться на Sukrim   Ответить с цитированием Мультицитирование сообщения от Sukrim Быстрый ответ на сообщение Sukrim

25 января 2015, 6:24:45 PM   # 5
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

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

25 января 2015, 6:48:29 PM   # 6
 
 
Сообщения: 2212
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

Да, есть причина, почему эти проверки на месте и столь же строгая, как они!
Sukrim сейчас офлайн Пожаловаться на Sukrim   Ответить с цитированием Мультицитирование сообщения от Sukrim Быстрый ответ на сообщение Sukrim

26 января 2015, 5:51:05 AM   # 7
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

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

Если вы синхронизируете от известного узла, который вы полностью доверяете, просто скопируйте его $ DATADIR / блоки и $ DATADIR / chainstate каталоги к новой системе.

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

26 января 2015, 9:43:01 AM   # 8
 
 
Сообщения: 497
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

gethash () вызывается несколько раз, может быть, й результат можно кэшировать. как в bitcoinj:
https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/core/Block.java#L534
elbandi сейчас офлайн Пожаловаться на elbandi   Ответить с цитированием Мультицитирование сообщения от elbandi Быстрый ответ на сообщение elbandi

27 января 2015, 5:57:28 PM   # 9
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: Удалить блок валидации для того, чтобы ускорить начальную синхронизацию от известного клиента

Какие изменения я могу сделать, чтобы ускорить его?
Удалить все проверки транзакций, а также. Проверка подписи ECDSA особенно CPU тяжелая. 

Однако мне интересно, если это ху проблема. Если это только для начальной синхронизации (т.е. один раз), то гораздо легче переносить blockchain, как Питер указал и запустить фондовый клиент. Однако, если вы собираетесь оставаться подключенными к доверенному узлу (ами) (и без каких-либо других ненадежных узлов), то вы могли бы также быть запущены в SPV клиент / кодовом для снижения потребности в ресурсах на целевой машине постоянно. В сущности bitcoind на удаленном компьютере, спрашивает, как пограничный маршрутизатор для пользовательского приложения / код.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW