Таким образом, мы адаптируем себя (и позволяя другим адаптироваться) к ложной реальности путем разработки систем с предположением, что есть некоторые безопасности в нулевом конфе сделках. Я бы много, а просто написать его полностью, и пусть бизнеса и пользователей адаптироваться к тому, что нулевой конф сделки в основном бесполезна для обмена между сторонами ненадежных. Забудь это. Если вы не доверяете человеку, не связывайся с нулевым подтверждения сделок. Период.
Это, как правило, твердый принцип конструкции: когда что-то сломать, вы должны сделать отказ видимым и документально ясно, так что пользователь понимает, что это не целевое использование программного обеспечения.
Однако, в данном конкретном случае ноль подтверждение может быть установлено таким образом, они почти столь же безопасны, как платежи 1-подтверждения с минимальными щипками к правилам клиента, гораздо более достойной целью, чем сломать их полностью.
Tweak 1. Не отбрасывать двойные операции тратить деньги. Форвард их вместе с другими коллегами, помеченный как тратит два раза(*. Это, по существу тот же раствор, как и в Два Bitcoins по цене одного бумага. Они предлагают угон Bitcoin "бдительный" для этой цели, но я думаю, что маркировка не должен быть четко: вам просто нужно всегда префикс doublespend с первыми расходами при пересылке по другим узлам, неявно связи правильный порядок. Так что, если они еще не видели какой-либо из сделок пока они будут наследовать тот же порядок, как вы, так же, как это происходит сегодня.
Это убивает в зародыше все гонки атак, где торговец не осведомлен о том, что часть шахтеров получили и активно расширяет двойную расходы. После того как вы получили первую сделку нулевого конфа, вы слушаете 10 секунд на другую TXN попытки двойной израсходуют, и если никто не будет получен у вас есть очень высокая степень уверенности, что все честные шахтеры получили эту сделку и активно минируют его. Время распространения составляет порядка 3 секунд, если атакующие посылают 2-й израсходует через 10 секунд, вероятность, что бы добраться до любого шахтер первого равна нуль.
Таким образом, мы вплоть до нападения Финни. (Или непроизвольные Финне, когда злоумышленник мешающего подключения к сети шахтерской так, чтобы представить его другой порядок тратить)
Tweak 2. Не самозабвенно простираться блоки, содержащие двойную расходы. При выборе самой длинной субцепи продлить, блоки, содержащие известный двойные израсходуют должен быть присвоен нулевой или отрицательной трудности. При прочих равных условиях, шахтер бы предпочел простираться на 2 блока субцепи, а не 3 блока субцепи первый из которых содержит то, что он может распознать как двойной потратить.
Это не будет ветвиться цепью: если то, что мы считаем двойными израсходует субцепь растет быстрее, чем наш оригинальный выбор, в каком-то момент мы признаем, что мы были не правы, а сеть имеет различное представление о том, что является законным тратить, так сходимость в конечном итоге будет достигнута. "какой-то момент" где это происходит, определяется отрицательным трудом мы относим блок двойного тратить деньги. Небольшое отрицательное значение позволит работа от атаки блока Финни просто игнорируется большинством честных узлов, что делает атаку очень дорогостоящим с точки зрения ресурсов и BTC потенциально потерянных. (**
Он также устойчив в византийско-Альтруистических-Рациональных парадигмах: если мы уверены в нашей решимости относительно того, что является законным потратить, то мы уверены, большинство других шахтеров имеют ту же идею, из-за подстройку 1. Таким образом, это рационально для нас не распространяется блок, содержащий двойные расходы, из-за негативное влияние сложности было бы иметь на нашу работе точки зрения большинства других шахтеров. Когда достаточное количество шахтеров альтруистичны и реализовать Tweak 2, она становится иррациональной не реализовать его и рациональное большинство будет поддерживать статус-кво.
Вместе щипает 1 и 2 поднимаются планка очень для атак нулевого подтверждения ,. Когда 10 секунд прошло с момента первоначального вещания, мы достаточно уверены, подавляющее большинство шахтеров на нашей стороне, и будет активно бороться атаку Финней, потому что это выгодно для них, чтобы сделать это. Когда злоумышленник получает товар из магазина и транслирует это Финний блок, все узлы узнают о двойном потратить в нем и рационально решили не продлевать его (они должны также вырезать из 2-ой расходов от блока Финний и транслировать его, таким образом, купец узнает о том, что только что произошло).
Превзойти штраф в небольшой негативный сценарий штрафной, злоумышленник должен добывать два блока, первый из которых является блок Финни. Вероятность того, чтобы это произошло на порядок (его отношение хэш мощности) ^ 2, заставляя его делать много двойных тратит в то же время, чтобы иметь шанс возмещения расходов. Таким образом, любой торговый автомат может принять платеж нулевого подтверждения без риска и без необходимости наблюдателей или подкупа шахтеров, чтобы на их стороне.
*) Наивная реализация может открыть потенциальный отказ в обслуживании, жулик узел отправки снова и дважды проводит в одной и той же сделки. Так что вам нужно переслать только один 2-ой расходы, а не какой-либо из следующих действий. Торговец должен знать, что двойной израсходуют идет, не это деталь, так что гонки между 2-ем, третий ... тратит не имеют никакого отношения. Если какие-либо из гоночного doublespends прийти к нему, он не продажам и держит товар.
**) А как насчет большого отрицательного штрафа, стоит один или несколько блоков средней сложности? Это сделало бы дважды проводит атаку еще труднее требовать личное отработки 3 или более скованных блоков; но в какой-то момент медленнее реорганизацию; и глубже многих сирот, отрицая преимущества.