Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
9 сентября 2017, 9:04:06 AM   # 1
 
 
Сообщения: 266
Цитировать по имени
цитировать ответ
по умолчанию Re: Как CTxMemPool :: addUnchecked работы ???

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
из https://github.com/bitcoin/bitcoin/blob/master/src/txmempool.cpp#L360

я пытаюсь понять
Код:
CTxMemPool :: addUnchecked
функция.


Код:
BOOL CTxMemPool :: addUnchecked (Const uint256& хэш, Const CTxMemPoolEntry &въездные, setEntries &setAncestors, BOOL validFeeEstimate)
{
    NotifyEntryAdded (entry.GetSharedTx ());
    // Добавить в пул памяти без проверки ничего.
    // Используется AcceptToMemoryPool (), который не делать
    // все соответствующие проверки.
    БЛОКИРОВКА (CS);
    indexed_transaction_set :: итератора newit = mapTx.insert (запись) .Первый;
    mapLinks.insert (make_pair (newit, TxLinks ()));

    // транзакция обновления для любого feeDelta созданного PrioritiseTransaction
    // TODO: рефакторинг так, что плата дельта рассчитывается перед вставкой
    // в mapTx.
    станд :: Карта:: const_iterator поз = mapDeltas.find (хэш);
    если (поз! = mapDeltas.end ()) {
        Const CAmount &дельта = POS->второй;
        если (дельта) {
            mapTx.modify (newit, update_fee_delta (дельта));
        }
    }

    // Обновление cachedInnerUsage включать использование Содержится транзакции.
    // (Когда мы обновляем запись в-mempool родителей, использование памяти будет
    // далее обновляться.)
    cachedInnerUsage + = entry.DynamicMemoryUsage ();

    Const CTransaction& Тх = newit->GetTx ();
    станд :: набор setParentTransactions;
    для (беззнаковое INT I = 0; я < tx.vin.size (); я ++) {
        mapNextTx.insert (станд :: make_pair (&tx.vin [я] .prevout, &TX));
        setParentTransactions.insert (tx.vin [я] .prevout.hash);
    }
    // Не беспокоить беспокоиться о дочерних сделках этого.
    // Обычный случай новой транзакции, поступающей в том, что там не может быть
    // дети, потому что такие дети будут сироты.
    // Исключение то есть, если транзакция входит, что раньше в блоке.
    // В этом случае наш разрыв блок логики будет вызывать UpdateTransactionsFromBlock
    // чтобы убрать беспорядок, мы уезжаем здесь.

    // Обновление предков с информацией об этом ТХ
    для (сопзЬ uint256 &phash: setParentTransactions) {
        txiter пит = mapTx.find (phash);
        если (яма! = mapTx.end ()) {
            UpdateParent (newit, яма, правда);
        }
    }
    UpdateAncestorsOf (правда, newit, setAncestors);
    UpdateEntryForAncestors (newit, setAncestors);

    nTransactionsUpdated ++;
    totalTxSize + = entry.GetTxSize ();
    если (minerPolicyEstimator) {minerPolicyEstimator->processTransaction (запись, validFeeEstimate);}

    vTxHashes.emplace_back (tx.GetWitnessHash (), newit);
    newit->vTxHashesIdx = vTxHashes.size () - 1;

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

позволяет сказать, у нас уже есть ТЙ хэш в нашем mempool, будет
Код:
CTxMemPool :: addUnchecked
добавить уже имеющийся ТЙ хэш в mempool снова?

или он будет отказаться от него?

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


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


9 сентября 2017, 4:45:33 PM   # 2
 
 
Сообщения: 1246
Цитировать по имени
цитировать ответ
по умолчанию Re: Как CTxMemPool :: addUnchecked работы ???

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





Поскольку CTxMempool использует карту, добавив, повторяющиеся записи приведет к новой записи перезаписи исходной записи, но так как они являются дубликатом, ничто не будет на самом деле изменилось. Однако это не должно произойти, поскольку addUnchecked используется только AcceptToMemoryPoolWorker (который является продолжением AcceptToMemoryPool), который будет делать все проверки для принятия транзакции, такие как убедившись, что мы еще не добавили транзакцию нашей mempool, а также все другие проверки достоверности транзакций.
achow101 сейчас офлайн Пожаловаться на achow101   Ответить с цитированием Мультицитирование сообщения от achow101 Быстрый ответ на сообщение achow101

9 сентября 2017, 6:16:42 PM   # 3
 
 
Сообщения: 266
Цитировать по имени
цитировать ответ
по умолчанию Re: Как CTxMemPool :: addUnchecked работы ???

Поскольку CTxMempool использует карту, добавив, повторяющиеся записи приведет к новой записи перезаписи исходной записи, но так как они являются дубликатом, ничто не будет на самом деле изменилось. Однако это не должно произойти, поскольку addUnchecked используется только AcceptToMemoryPoolWorker (который является продолжением AcceptToMemoryPool), который будет делать все проверки для принятия транзакции, такие как убедившись, что мы еще не добавили транзакцию нашей mempool, а также все другие проверки достоверности транзакций.
спасибо, нашел в функции

AcceptToMemoryPoolWorker

https://github.com/bitcoin/bitcoin/blob/master/src/validation.cpp#L446

Здесь https://github.com/bitcoin/bitcoin/blob/master/src/validation.cpp#L480

Код:
    // это уже в пуле памяти?
    если (pool.exists (хэш)) {
        вернуть state.Invalid (ложный, REJECT_DUPLICATE, "TXN-уже-в-mempool");
    }


он отвергает ТХ, если его уже в mempool.

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW