Можно ли использовать nLockTime TX для флуда в мемпулах?

Что произойдет, если я создам большое количество крупных транзакций с очень высоким значением nLockTime?

Что-то помешает мне заполнить не только майнерские, но и обычные нодовые мемпулы ?

Будут ли майнеры отказываться от транзакций с необоснованно высокой nLockTimeи низкой комиссией за транзакцию?

Что бы сделал BitcoinCore?

Следующее было удалено из вопроса, но, вероятно, помогло бы начать ответ: theymos: «lockTime предотвращает попадание транзакции в блоки. Когда она находится в блоке, ее можно потратить». bitcointalk.org/index.php?topic=131443.msg1432948#msg1432948

Ответы (3)

Из того, что я могу найти, размер мемпула не ограничен. Залить можно, но сложно и дорого/медленно. Я вижу два подхода:

А) минимальная плата за эстафету

  • подключиться к 1000 узлам
  • отправить много txs, которые соответствуют минимальным требованиям к ретрансляции
    • сколько?: 32 000 000, по 32 000 на каждом узле
    • nLocktime в далеком будущем, чтобы они не попали в блоки
    • комиссия за транзакцию: минимальная плата за ретрансляцию: 0,0001
    • количество: очень мало
    • размер на транзакцию: 250 байт
  • мемпулы заполнены 8gb пыли

Потребуется некоторое время, чтобы сгенерировать такое количество адресов и tx и передать их в эфир. Также это будет стоить не менее 3200 BTC.

B) 0 комиссионных транзакций с минимальным выводом 0,01, поэтому они все еще ретранслируются

Мемпул закрыт ограничителем скорости для бесплатных транзакций:

// Continuously rate-limit free transactions
// This mitigates 'penny-flooding' -- sending thousands of free transactions just to
// be annoying or make others' transactions take longer to confirm.

// Use an exponentially decaying ~10-minute window:
// -limitfreerelay unit is thousand-bytes-per-minute

// At default rate it would take over a month to fill 1GB

Так что это будет как минимум очень медленно. Также вам нужно иметь 320 000 BTC для 8GB. :)

Могут быть способы искусственно увеличить txs. Альтернативные клиенты могут действовать по-другому.

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

Транзакции nLocktime, которые еще не действительны, не ретранслируются и, возможно, даже отбрасываются. Отправитель и/или получатель обязаны хранить транзакции до тех пор, пока они не станут действительными, а затем передавать их.

Транзакции с nLockTimeустановленной датой или высотой блока в будущем не будут считаться действительными Bitcoin Core до тех пор, пока не пройдет отметка времени или не будет достигнута высота блока, предшествующая тому, как они станут действительными. Только в этот момент полные узлы будут хранить их в своих мемпулах и пересылать.

Следовательно, атака с переполнением мемпула транзакциями с синхронизацией по времени невозможна.