7 марта 2012, 4:08:45 PM   # 1
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я начал писать модульные тесты вчера для повторного включения замены транзакций. Я хотел бы обратиться к сообществу за свои идеи для случаев использования замены транзакций, так что я могу работать в направлении решения, которое будет работать для многих людей, как это возможно.

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

Некоторые предостережения думать о том:

  • CTransaction :: IsNewerThan, кажется, есть недостаток в окончательном цикле метода, если нет побочных эффектов, люди заботятся о. В текущем воплощении (которая восходит к когда-то в 2009 году или, возможно, даже вернуться к исходному коду), это возможно для некоторых входов, чтобы иметь более высокие порядковые номера, чем в предыдущей версии сделки и некоторые имеют более низкие порядковые номера и до сих пор сделка выйти, как "новее."  Если это не будет сделано для определенных побочных эффектов, по-видимому, ошибка (хотя легко исправить). Насколько я могу судить, только код, который вызывает CTransaction :: IsNewerThan является CTransaction :: AcceptToMemoryPool, и этот код путь никогда не попал из-за отключения замены транзакций. Кроме того, этот код не использует какие-либо побочные эффекты этого цикла, насколько я могу видеть.
  • Я не нашел какой-либо код, который предотвращает транзакцию с использования выходов неконечных сделок в CTransaction :: AcceptToMemoryPool. В случае замены транзакции, такой код будет необходимо в случае выходов изменилось. Это может быть желательным, чтобы ограничить путь выхода может быть изменено, чтобы предотвратить двойной тратит.
  • По крайней мере, нам нужно добавить вывод RPC и, возможно, пользовательский интерфейс, чтобы показать, является ли неподтвержденные транзакции являются окончательными или нет. Это будет иметь важное значение для продавцов, чтобы гарантировать, что они не принимают 0-Confirm сделок, которые могут быть заменены из-под них, вызывая двойную сумму расходов на самом деле, независимо от того, как они распространяются через сеть.
  • Некоторые формы уныния должны быть предприняты, чтобы предотвратить шахтер из версий в том числе сделок, которые не последняя версия. Если это использует отказ блока, это приведет к шахтерам не следует правила большинства в шахтные блоки, которые не будут приняты в консенсусной цепи, в результате чего множества тупиковых ветвей. Если используются операционные издержки, чтобы стимулировать шахтеров, чтобы получить максимальные сборы от включая самую последнюю версию, это может быть хорошей идеей, чтобы ограничить новые версии, чтобы заставить их платить более высокие сборы с каждой версией. Это по-прежнему требует догадок со стороны отправителя, чтобы предсказать, сколько плата за транзакцию того бы шахтеры готовы утвердить новую версию сделки. Это также означает, что мы, возможно, потребуется изменить правила замены сделки в отношении ресурсов, что позволяет новый вход, чтобы покрыть дополнительные операционные издержки, если это необходимо (это будет означать изменение, по меньшей мере CTransaction :: FetchInputs а).
  • Там нет никаких стимулов к пересылают несколько версий сделки; на самом деле, есть препятствие: каждый раз, когда новая версия будет получена, оно должно быть подтверждено, прежде чем быть принятым в пул памяти и пересылаются. Такое использование ресурсов может фактически вызвать отказ в обслуживании, как упоминалось Gavin, если слишком много версий транзакции передаются через сеть. Anti-DOS код должен быть добавлен к распространению как-то дроссельный новых версий; некоторые люди могут даже изменить их узлы не распространяются такие сделки вообще, что бы поражение цели всей этой дискуссии.
  • Изменение семантики nLockTime означает, что неконечные сделки не могут быть в пуле памяти не изменяют правила проверки блока. Оно также предотвращает не шахтер узлы от необходимости проверять много разных версии транзакции, вызывая отказ в обслуживании. Проблема заключается в том, что в реальных условиях эксплуатации, nLockTime должны быть достаточно далеко, что окончательный вариант сделки имеет практически 0 шанс не делает его в блок по времени nLockTime истекает. Это позволит предотвратить timelocked транзакции принимаются шахтерами по финализации сделки с более низкой платой.
blueadept сейчас офлайн Пожаловаться на blueadept   Ответить с цитированием Мультицитирование сообщения от blueadept Быстрый ответ на сообщение blueadept


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


7 марта 2012, 5:19:42 PM   # 2
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

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





  • Некоторые формы уныния должны быть предприняты, чтобы предотвратить шахтер из версий в том числе сделок, которые не последняя версия. Если это использует отказ блока, это приведет к шахтерам не следует правила большинства в шахтные блоки, которые не будут приняты в консенсусной цепи, в результате чего множества тупиковых ветвей. Если используются операционные издержки, чтобы стимулировать шахтеров, чтобы получить максимальные сборы от включая самую последнюю версию, это может быть хорошей идеей, чтобы ограничить новые версии, чтобы заставить их платить более высокие сборы с каждой версией. Это по-прежнему требует догадок со стороны отправителя, чтобы предсказать, сколько плата за транзакцию того бы шахтеры готовы утвердить новую версию сделки. Это также означает, что мы, возможно, потребуется изменить правила замены сделки в отношении ресурсов, что позволяет новый вход, чтобы покрыть дополнительные операционные издержки, если это необходимо (это будет означать изменение, по меньшей мере CTransaction :: FetchInputs а).

Есть ли текущие правила проверки блока не отклонять блоки, которые включают в себя операции с неистекшие раз блокировки?
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

7 марта 2012, 6:37:44 PM   # 3
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Они делают. Проблема происходит, когда происходит что-то вроде этого:

1. Timelocked сделка с входом, который имеет последовательность 1 отправляется, заплатив 100 BTC обратно к клиенту и 1 BTC в тарифах
2. Non-timelocked окончательная сделка происходит прямо вокруг, когда nLockTime истекает 50 BTC к поставщику и 51 BTC заказчику
3. Перед тем, как версия входит в блок, nLockTime истекает

Теперь обе сделки являются действительными. Своекорыстных шахтеры будут пытаться заминировать первоначальную сделку в блок. Шахтеры по действующим правилам (без замены транзакции) также будут пытаться заминировать первоначальную сделку в блок. Шахтеры, которые осуществили замену транзакций будут пытаться заминировать окончательную сделку в блок.

Шахтеры, которые осуществили замену транзакций будет, в соответствии с действующими правилами, принимают блоки из своекорыстных шахтеров, которые идут на более высокие операционные издержки и от шахтеров, которые не реализованы замен транзакций. Если, конечно, мы не изменим правила валидации блока так, что если блок содержит транзакцию, для которой пул памяти хранит более поздней версии, этот блок отвергается.

Другой вариант я могу думать (и это будет на самом деле помочь в защите от атак DoS, тоже), чтобы гарантировать, что каждая новая версия сделки имеет более высокие сборы, связанные с ним, тем самым выравнивая стимулы шахтеров с заменой пути сделки предполагается Работа. В этом случае, окончательная сделка на шаге 2 была бы построена по-разному: 50 BTC к поставщику, 49 BTC к клиенту и 2 BTC в тарифах. Это позволит привести стимулы, но она должна была бы быть принужден к сети (или, по крайней мере, продавцами в схеме multisignature, которые не будут предоставлять услуги, пока они не знали сделку они хотят будет тот, который совершает на blockchain ).

Моя альтернативное предложение, изменение семантики nLockTime, сохраняет валидация блок управляет теми же, но изменяет правила пула памяти, так что timelocked транзакции не допускаются в пуле памяти, что позволяет неограниченное количество версий транзакции, которые будут созданы и потенциально завершена до тех пор, как это происходит, прежде чем nLockTime истекает и первоначальная операция действительна для вещания / совершения в blockchain.
blueadept сейчас офлайн Пожаловаться на blueadept   Ответить с цитированием Мультицитирование сообщения от blueadept Быстрый ответ на сообщение blueadept

7 марта 2012, 7:38:14 PM   # 4
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

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

Я продолжаю думать, что сеть будет видеть сделки # 2 как двойные расходы и отклонить его. Но мы не можем предотвратить источник от прохождения его непосредственно к дружественному шахтера, который может включить его в блок, который сделал бы это реальная версия независимо от того, как остальная часть сети думает о вещах.

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

7 марта 2012, 7:57:04 PM   # 5
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Я продолжаю думать, что сеть будет видеть сделки # 2 как двойные расходы и отклонить его. Но мы не можем предотвратить источник от прохождения его непосредственно к дружественному шахтера, который может включить его в блок, который сделал бы это реальная версия независимо от того, как остальная часть сети думает о вещах.

Именно эта проблема.

Я не большой поклонник обязательных платежей, даже тривиальный маленькие. Но это, кажется, работает здесь, на первый взгляд.

Он делает, но только своего рода, а также правила анти-DOS должны быть настроены хорошо. Большинство схем будут иметь timelocked сделки, чтобы сохранить деньги от получения или сбросили атомную бомбу позволяет клиенту получить свой депозит обратно, и завершенные сделки на самом деле платить поставщик. Дозирование субъекты могли бы послать себя несколько версий нескольких транзакций быстро, заставляя каждую версию для распространения через сеть и использовать дисковые и процессорные ресурсы на каждый узел для проверки - таким образом, каждая версия должна стоить дороже. Я бы даже пойти так далеко, чтобы сказать, что каждая новая версия должна иметь по крайней мере вдвое сборов предыдущего, с начальным / timelocked сделки, имеющей установленную минимальную плату (или в процентах плату, даже). Это увеличивает стоимость нескольких версий очень быстро, сохраняя при этом нормальный случай использования единой замены дешевой.

Кроме того, только потому, что сборы выравнивать стимулы шахтеров в целом с транзакцией замена не означает, что двойной тратит не будет с "дружелюбный" шахтеры. Затем снова, дважды затрачивает может произойти сейчас с дружественными шахтерами, предполагающих много горнорудной власти или много удачи.
blueadept сейчас офлайн Пожаловаться на blueadept   Ответить с цитированием Мультицитирование сообщения от blueadept Быстрый ответ на сообщение blueadept

7 марта 2012, 8:50:09 PM   # 6
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Я бы даже пойти так далеко, чтобы сказать, что каждая новая версия должна иметь по крайней мере вдвое сборов предыдущего, с начальным / timelocked сделки, имеющей установленную минимальную плату (или в процентах плату, даже). Это увеличивает стоимость нескольких версий очень быстро, сохраняя при этом нормальный случай использования единой замены дешевой.

Но это не нормальный случай использования. Это просто нормальный случай использования. Удвоение сборы с каждой заменой, конечно, превратить его в единственно возможный нормальный случай использования.
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

7 марта 2012, 8:52:43 PM   # 7
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Но это не нормальный случай использования. Это просто нормальный случай использования. Удвоение сборы с каждой заменой, конечно, превратить его в единственно возможный нормальный случай использования.

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

8 марта 2012, 3:38:12 PM   # 8
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Конструкция порядковых номеров является тонким (читай: в заблуждение), но код является правильным. Я желаю Satoshi пытался документировать этот материал лучше. У меня создалось впечатление, что он не намерен покидать проект, когда он сделал, но решил, что он получал слишком много внимания на его вкус.

Позвольте мне попытаться объяснить, почему это, как задумано.

Договор может содержать вклады от нескольких сторон. Определение IsNewerThan () говорит на английском языке,

  • Если сделка имеет такое же количество входов, которые подключены к тем же выходам (т.е. только сценарий + SEQNO разные), и ...
  • по крайней мере один из новых порядковых номеров входов выше, чем все другие последовательности чисел
  • ... то возможность замены ТХ

Ниже приведена таблица, показывающая итерации основной петли IsNewerThan ():

Код:
BOOL fNewer = ложь;
неподписанных INT nLowest = станд :: numeric_limits<неподписанных INT>::Максимум();
для (INT I = 0; я < vin.size (); я ++)
{
    если (Vin [я] .nSequence! = old.vin [я] .nSequence)
    {
        если (Vin [я] .nSequence <= NLowest)
        {
            fNewer = ложь;
            nLowest = Vin [I] .nSequence;
        }
        если (old.vin [я] .nSequence < nLowest)
        {
            fNewer = TRUE;
            nLowest = old.vin [I] .nSequence;
        }
    }
}
Код:
             СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 1 1 МАХ е           
вход 2 1 2 1 т


             СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 2 1 1 е           
вход 2 1 1 1 F

             СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 1 2 1 т
вход 2 1 2 1 т

             СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 3 2 2 F
вход 2 2 5 2 т

Поскольку порядковые номера всегда обнуляется в SignatureHash (), это означает, что Любые партнер в контракте может выпустить новую версию, не нарушая подписи на других входах.

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

котировка
Я не нашел какой-либо код, который предотвращает транзакцию с использования выходов неконечных сделок в CTransaction :: AcceptToMemoryPool. В случае замены транзакции, такой код будет необходимо в случае выходов изменилось.

Код, кажется, работает, на самом деле, хотя я никогда не проверял. Это, однако, имеет атаки DoS (как это характерно для Bitcoin).

Вы могут зависеть от неконечных сделок. Если ТХ замещено, то dependees о том, что ТХ становятся сиротами. Они будут оставаться в пуле памяти навсегда, потому что ничего не удаляет их. Это общая атака: вы позволили заполнить пул памяти с бесхозными сделками, он не зависит от замены, однако замены TX, на которой другие операции зависят могут вызвать это тоже.

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

котировка
По крайней мере, нам нужно добавить вывод RPC и, возможно, пользовательский интерфейс, чтобы показать, является ли неподтвержденные транзакции являются окончательными или нет.

Да. Это может быть безопасным, чтобы добавить новый параметр, по умолчанию ложь, что указывает на то, следует ли показывать неконечное сделки.

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

Почему шахтер хочет сделать это? Если плата на новой ПЕРЕДАЧЕ ниже, нет никаких причин, чтобы не только следовать стандартным правилам здесь.

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

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

8 марта 2012, 7:12:55 PM   # 9
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Договор может содержать вклады от нескольких сторон. Определение IsNewerThan () говорит на английском языке,

  • Если сделка имеет такое же количество входов, которые подключены к тем же выходам (т.е. только сценарий + SEQNO разные), и ...
  • по крайней мере один из новых порядковых номеров входов выше, чем все другие последовательности чисел
  • ... то возможность замены ТХ
...
Код:
             СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 3 2 2 F
вход 2 2 5 2 т

Поскольку порядковые номера всегда обнуляется в SignatureHash (), это означает, что Любые партнер в контракте может выпустить новую версию, не нарушая подписи на других входах.

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

Спасибо за разъяснения; это где я получал повесил трубку. Я был в состоянии заменить все, но номер один версии с более ранними версиями и в то же время приращение только один номер версии и сделать его пройти тест IsNewerThan (). Теперь, когда я понимаю, семантику, это имеет смысл. Я больше исследований / мышления / тестирования, чтобы сделать, чтобы увидеть, если я могу еще сделать перерыв.

котировка
Я не нашел какой-либо код, который предотвращает транзакцию с использования выходов неконечных сделок в CTransaction :: AcceptToMemoryPool. В случае замены транзакции, такой код будет необходимо в случае выходов изменилось.

Код, кажется, работает, на самом деле, хотя я никогда не проверял. Это, однако, имеет атаки DoS (как это характерно для Bitcoin).

Вы могут зависеть от неконечных сделок. Если ТХ замещено, то dependees о том, что ТХ становятся сиротами. Они будут оставаться в пуле памяти навсегда, потому что ничего не удаляет их. Это общая атака: вы позволили заполнить пул памяти с бесхозными сделками, он не зависит от замены, однако замены TX, на которой другие операции зависят могут вызвать это тоже.

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

котировка
По крайней мере, нам нужно добавить вывод RPC и, возможно, пользовательский интерфейс, чтобы показать, является ли неподтвержденные транзакции являются окончательными или нет.

Да. Это может быть безопасным, чтобы добавить новый параметр, по умолчанию ложь, что указывает на то, следует ли показывать неконечное сделки.

Хорошо, что я пытаюсь сделать, это предотвратить продавец полагаться на неконечных сделках. Там может быть случай использования для него, что ни один из нас не думал, но прямо сейчас, что полагаться на 0-подтверждения сделок, торговцы "окончательный."  Я думаю, ваше предложение, вероятно, лучший способом и должны предотвратить продавец даже от видящих сделок, пока они не завершены или приверженны blockchain, предотвращая тем самым дважды проводит против них.

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

Почему шахтер хочет сделать это? Если плата на новой ПЕРЕДАЧЕ ниже, нет никаких причин, чтобы не только следовать стандартным правилам здесь.

Шахтеры в сговоре с отправителями (или сами) пытается удвоить расходы, могут оказаться полезным включить предыдущие версии транзакций, а не более поздние версии. Кроме того, как вы сказали, плата на новую версии может быть ниже. Без уныния слишком-старых версий транзакций, будет больше шансов последняя версия не является тот, который получает совершено. Это, очевидно, получает смягчены в multisignature прецедентами, но если есть случаи использования, которые я не думал о без multisignature, это может вызвать головную боль.

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

Вы могли бы просто иметь форму экспоненциальной отсрочки для обновления транзакций. Если вы пытаетесь слишком часто заменить операцию замены не будет снято до него "остывает",

Моя проблема состоит в том, что, насколько я могу судить, это все-таки возможно узлы DoS с помощью множества мелких операций. Если злоумышленник разогнал выход 100BTC в 5000 .02BTC выходов и начал заливать обновления для всех тех, что она все еще может перегрузить сеть. Установка как за транзакцию и глобальные пороговые значения для предотвращения выше сценарий может привести к DoS не узлов, но допустимых замен транзакций.

Это будет по-прежнему является проблемой для экспоненциально возрастающей платы предложение я сделал (за исключением глобального порога Дозирование допустимых замен, я не думаю, что бы это необходимо), но не такой большой проблемой, как для экспоненциальной отсрочки, насколько я могу видеть. Опять же, настройка экспоненциально возрастающую плату (как стартовый взнос и как быстро увеличивается плата) может помочь балансировать затраты на действительных пользователей против расходов на нападавших. Кроме того, я не могу придумать причину, чтобы не сделать его регулируемым и позволяют узлам устанавливать свою собственную политику о том, как сильно они хотят, чтобы ограничить замены транзакций.

Кстати, и только несколько отдельно, вот еще один интересный вариант использования для замены операции: сведение к минимуму операционные издержки. Пользователь посылает транзакцию, которая не timelocked, имеет не максимальное количество последовательностей для входов и имеет два выхода: один обратно к себе на 5 BTC и один к некоторому получателю в течение 5 BTC, с платой 0,0005 BTC. Через некоторое время, пользователь видит, что сделка не подтверждает и заменяет его с транзакцией, которая имеет более высокую плату. Пользователь повторяет этот процесс каждые несколько блоков до сделки это подтвердить.
blueadept сейчас офлайн Пожаловаться на blueadept   Ответить с цитированием Мультицитирование сообщения от blueadept Быстрый ответ на сообщение blueadept

9 марта 2012, 10:47:01 AM   # 10
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Г, извините. Я сделал ошибку в приведенной выше схеме, и, таким образом, мое объяснение глючит! Последний пример должен быть:

Код:
            СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 3 2 2 F
вход 2 2 5 2 F

т.е. fNewer == FALSE в этом случае, даже если порядковый номер выше. Это делает намного больше смысла, чем мои предыдущие объяснения, потому что предотвращает атаки отката.

Дай мне попробовать снова. Определение IsNewerThan () говорит на английском языке,

  • Если сделка имеет такое же количество входов, которые подключены к тем же выходам (т.е. только сценарий + SEQNO разные), и ...
  • Там нет порядковых номеров в новой транзакции ниже предыдущей сделки и ....
  • По крайней мере один порядковый номер выше

... то возможность замены ТХ.

Однако это противоречит тому, что вы положили в исходном сообщении. Я не понимаю, как это возможно, чтобы иметь порядковый номер ниже, чем раньше, и у fNewer все еще приходят, чтобы быть правдой.

котировка
Шахтеры в сговоре с отправителями (или сами) пытается удвоить расходы, могут оказаться полезным включить предыдущие версии транзакций, а не более поздние версии. Кроме того, как вы сказали, плата на новую версии может быть ниже.

Последний случай может быть исправлено только говорить людям, не делают этого 🙂

Шахтеры в сговоре с транжир уже известный вектор атаки с самого начала. Я не уверен, что это не отличается от регулярного случая (например, цепь вилки или Финни атаки).

Моя проблема состоит в том, что, насколько я могу судить, это все-таки возможно узлы DoS с помощью множества мелких операций. Если злоумышленник разогнал выход 100BTC в 5000 .02BTC выходов и начал заливать обновления для всех тех, что она все еще может перегрузить сеть. Установка как за транзакцию и глобальные пороговые значения для предотвращения выше сценарий может привести к DoS не узлов, но допустимых замен транзакций.

Идеальный способ справиться с ОСН для эффективной приоритезации работы, поэтому ДОСа сделки все еще обрабатываются так быстро, как это возможно, но только после того, как все другие работы было сделано. Таким образом, вы можете понежиться 100% от узлов ресурсов, но вы не можете фактически отказаться от услуг других людей.

В случае замены ОЙ, то это означает, что не было бы глобальная очередь работ подписей для проверки. Подписи, найденные в блоках приходят в первую очередь. Тогда операции ввода пула памяти в первый раз. Тогда операции, которые заменяют другие сделки, по заказу последнего времени обновления.

Изменение кода Satoshis быть написано, как это не очень легко, но это может быть сделано.
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

9 марта 2012, 3:54:20 PM   # 11
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Г, извините. Я сделал ошибку в приведенной выше схеме, и, таким образом, мое объяснение глючит! Последний пример должен быть:

Код:
            СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 3 2 2 F
вход 2 2 5 2 F

т.е. fNewer == FALSE в этом случае, даже если порядковый номер выше. Это делает намного больше смысла, чем мои предыдущие объяснения, потому что предотвращает атаки отката.

Дай мне попробовать снова. Определение IsNewerThan () говорит на английском языке,

  • Если сделка имеет такое же количество входов, которые подключены к тем же выходам (т.е. только сценарий + SEQNO разные), и ...
  • Там нет порядковых номеров в новой транзакции ниже предыдущей сделки и ....
  • По крайней мере один порядковый номер выше

... то возможность замены ТХ.

Однако это противоречит тому, что вы положили в исходном сообщении. Я не понимаю, как это возможно, чтобы иметь порядковый номер ниже, чем раньше, и у fNewer все еще приходят, чтобы быть правдой.

Спасибо, Откат атака название за то, что я имел в виду. Я могу сделать это:

Код:
            СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 8 4 4 F
вход 2 1 2 1 т

             СТАРЫЙ НОВЫЙ nLowest fNewer
                           MAX F
вход 1 1 2 1 т
вход 2 8 4 1 т

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

котировка
Шахтеры в сговоре с отправителями (или сами) пытается удвоить расходы, могут оказаться полезным включить предыдущие версии транзакций, а не более поздние версии. Кроме того, как вы сказали, плата на новую версии может быть ниже.

Последний случай может быть исправлено только говорить людям, не делают этого 🙂

Шахтеры в сговоре с транжир уже известный вектор атаки с самого начала. Я не уверен, что это не отличается от регулярного случая (например, цепь вилки или Финни атаки).

Это работает для меня, а потом. Последний случай особенно смягчен в multisignature ситуаций, когда принимающая сторона не будет принимать более поздние версии сделки с более низкой платой. В сочетании с не окончательные операции по умолчанию не отображаются, пока они не подтверждены при использовании listtransactions и т.п., должны снизить риск большинства случаев использования, если продавец намеренно не пытается открыть себя до завинчивания. Так что это не идиот доказательства, но она принимает волевой идиот.

Идеальный способ справиться с ОСН для эффективной приоритезации работы, поэтому ДОСа сделки все еще обрабатываются так быстро, как это возможно, но только после того, как все другие работы было сделано. Таким образом, вы можете понежиться 100% от узлов ресурсов, но вы не можете фактически отказаться от услуг других людей.

В случае замены ОЙ, то это означает, что не было бы глобальная очередь работ подписей для проверки. Подписи, найденные в блоках приходят в первую очередь. Тогда операции ввода пула памяти в первый раз. Тогда операции, которые заменяют другие сделки, по заказу последнего времени обновления.

Изменение кода Satoshis быть написано, как это не очень легко, но это может быть сделано.

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

У меня была другая мысль. При использовании nLockTime с заменой сделки, timelocked сделка не должна иметь порядковые номера всех входов установлены в UINT_MAX, в противном случае это невозможно заменить. Таким образом, для того, чтобы многие из случаев использования контракта прямо сейчас, работая на предоставление возможности замены транзакций, это не было бы очень разрушительным изменить nLockTime семантики так, что любые операции с nLockTime в будущем, и все входные порядковые номера, установленные на UINT_MAX не могут быть добавлены в пуле памяти. Это оставляет nLockTime семантики то же, за исключением случаев использования замены транзакции, но позволяет многие контракты должны быть изменены, чтобы быть возможными сейчас. Он также имеет смысл в качестве долгосрочного правила, потому что это бессмысленно (и потенциально опасно, так как это может привести к отказу в обслуживании), чтобы принять несменное timelocked сделки.

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

9 марта 2012, 7:33:58 PM   # 12
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Тьфу ты прав. Мое первое объяснение был верный. Я смущен себя во второй раз. Эта нить такой бардак, извините

Satoshi было это сказать по теме, когда я обсуждал это с ним некоторое время назад:

котировка
Это для контрактов. Незарегистрированная открытая транзакция может сохранить не заменяется до nLockTime. Он может содержать платежи несколькими сторонами. Каждый владелец вход подписывает свой вклад. Для новой версии должны быть записаны, каждый должен подписать более высокий порядковый номер (см IsNewerThan). Подписывая, владелец вход говорит "Я согласен вложить свои деньги в, если каждый вкладывает свои деньги в и выходы этого."  Есть другие варианты в SignatureHash, такие как SIGHASH_SINGLE, что означает "Я согласен, если это один выход (т.е. мой) является то, что я хочу, я не волнует, что вы делаете с другими выходами.",  Если это написано с высокой nSequenceNumber, партия может распрощаться переговоров по этой одной оговоркой, за исключением, или знак SIGHASH_NONE и лук полностью.

Стороны могли бы создать предварительно согласованный вариант по умолчанию, создавая более высокое nSequenceNumber ОГО с помощью OP_CHECKMULTISIG, что требует подмножества сторон подписать, чтобы завершить свою подпись. Стороны провести этот ТХ в резерве и в случае необходимости, передать его вокруг, пока он не имеет достаточное количество подписей.

Одним из вариантов использования nLockTime является высокой частотой сделок между множеством сторон. Они могут постоянно обновлять ТЙ по единодушному согласию. Сторона дает деньги бы быть первым, чтобы подписать следующую версию. Если одна из сторон прекращают согласование изменений, то последнее состояние будет записано в nLockTime. При желании, транзакции по умолчанию могут быть получены после каждой версии, так п-1 стороны могут выдвинуть зависания партию из. Промежуточные операции не должны передаваться. Только конечный результат получает регистрируется в сети. Незадолго до nLockTime стороны и несколько узлов свидетелей транслировать самую высокую последовательность ТХ они видели.

Я предполагаю, что причина, вы можете сделать "откат атаки" чтобы позволить этому прецедент - кто-то доказуемо выходит из переговоров, подписав порядковый номер UINT_MAX так, что они не могут обновить ТЕ дальше. Так что, возможно, откаты на самом деле не является проблемой для случаев использования он имел в виду.

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

9 марта 2012, 7:54:41 PM   # 13
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

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

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

В то же время, я хотел бы знать, что вы думаете об идее декларирования сделок с nLockTime в будущем и все исходные данные, в UINT_MAX незаконным положить в пуле памяти. Это позволяет избежать всех случаев, когда замена сделка действительно может произойти и позволяет nLockTime, которые будут использоваться на пути hashcoin, и я думал, что она была использована, прежде чем прояснить это для нас. Это изменит то, что считается двойным проводят с такой сделкой, но никто не использует timelocked сделок, как они в настоящее время работают в любом случае, потому что кажется бесполезным без замены сделки.
blueadept сейчас офлайн Пожаловаться на blueadept   Ответить с цитированием Мультицитирование сообщения от blueadept Быстрый ответ на сообщение blueadept

9 марта 2012, 8:15:06 PM   # 14
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

В настоящее время такая сделка будет считаться окончательно сразу же, независимо от того, что было время заблокированной, поэтому его вещание до его отведенного времени было бы контрпродуктивным. Мне нужно продумать последствия изменения этого.
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

11 марта 2012, 5:04:58 PM   # 15
 
 
Сообщения: 565
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Поместите этот материал в BIP ... Я даю $ 100 USD награду за это, чтобы стать реальным.

Эндрю Воробьева сейчас офлайн Пожаловаться на Эндрю Воробьёв   Ответить с цитированием Мультицитирование сообщения от Andrew Воробьёв Быстрый ответ на сообщение Andrew Воробьёв

21 марта 2012, 8:16:06 AM   # 16
 
 
Сообщения: 565
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Удар...

Ребята, мы все еще нуждаемся в этом ... не забывайте об этом.
Эндрю Воробьева сейчас офлайн Пожаловаться на Эндрю Воробьёв   Ответить с цитированием Мультицитирование сообщения от Andrew Воробьёв Быстрый ответ на сообщение Andrew Воробьёв

21 марта 2012, 8:43:25 AM   # 17
 
 
Сообщения: 714
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Удар...

Ребята, мы все еще нуждаемся в этом ... не забывайте об этом.

Можете ли вы сказать мне, что "замена TX" простыми словами, спасибо!
finway сейчас офлайн Пожаловаться на finway   Ответить с цитированием Мультицитирование сообщения от finway Быстрый ответ на сообщение finway

21 марта 2012, 9:31:58 AM   # 18
 
 
Сообщения: 565
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Это объяснение, которое я дал, когда я был в Израиле Bitcoin Meetup

Представьте, что вы играете в покер со своим другом ... Вы оба стеком ... Во время игры вы стек растет \ психиатров ... Когда вы сделали вы меняете фишки в наличные деньги и идти ..

Теперь представьте, что вы играете с Bitcoins вместо фишек ...

Пот = 2-из-2 мульти транзакции подписи (АЯ А)

После каждого раунда вам (вы и ваш партнер) создать транзакцию (1 вход (Тх) и 2 выхода) (не передают в сеть), представляющий ваши биткойны, если игра закончится прямо сейчас.

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

Так понятно?
Эндрю Воробьева сейчас офлайн Пожаловаться на Эндрю Воробьёв   Ответить с цитированием Мультицитирование сообщения от Andrew Воробьёв Быстрый ответ на сообщение Andrew Воробьёв

21 марта 2012, 10:06:35 AM   # 19
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Мы не забыли об этом. Эти вещи являются тонкими, и потребуется время, чтобы получить право. Не беспокойтесь об этом.
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

5 апреля 2012, 4:09:15 PM   # 20
 
 
Сообщения: 225
Цитировать по имени
цитировать ответ
по умолчанию Re: замена TX и nLockTime

Я определенно не забыл об этом.

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

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

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW