Дорогие Все,
Я думал о том подходе, чтобы предотвратить двойные расходы, и я
думаю, я нашел подход, который я задавался вопросом о. Подход предполагает
что шахтеры не пытаются удвоить расходы. Тем не менее, я думаю,
подход делает двойные атаки расходов гораздо сложнее.
Я хочу, чтобы создать систему с одной целью: Если пользователь пытается
двойные израсходует, то * и * сделка будет приземляться в blockchain в
особый путь, который делает пользователь теряет деньги. В качестве побочных целей:
продавец должен получить свои деньги, даже если пользователь пытается удвоить расходы.
Более конкретно, можно было бы сделать это следующим образом: один позволит новый
Формат транзакции, в которой каждый исходящий адрес получает две суммы;
"нормальное количество", И "двойной объем расходов", Такая сделка
будет считаться действительным только при соблюдении двух условий: (1) есть
ровно два исходящих адресов, (2) плата подразумевается также использование "двойной
суммы расходов" является * * более чем в два раза плату подразумевается также использование
нормальное количество. Горняк затем может включать в себя транзакции T в этом новом
Формат двумя различными способами в блок.
(А) Как нормальные сделки, причем в этом случае сделка является
обрабатываются в обычном режиме; суммы будут "нормальное количество"s.
(В) В качестве специального "дважды провел транзакции", Для того, чтобы сделать это,
забойщик должен включать в себя другую сделку T», который не является
выполняется, но только служит доказательством того, что творец
сделка пытался удвоить тратить деньги. Сделка T сусло
быть сделки указанного выше вида здесь, но T»может быть любой
сделка.
В таком случае, сделки в Т выполнены с
"двойной объем расходов", Если есть оставшиеся деньги, то
делится на 2 равные части (до некоторого фиксированного округления). Половина идет
с шахтером, половина идет на адрес содержащего * наименьший *
выход в "нормальное количество" в Т». Мы увидим в момент почему.
Предположим теперь к поставщику V с адресом <В> хочет принять биткойны от
покупатель Б с адресом <В>, Пусть B хочет платить "вал" до V, и добавить
комиссия на перевод "плата", Учитывая сделку, продавец будет наблюдать
сети в течение нескольких секунд, и проверьте наличие двойных траты. Затем,
продавец принимает транзакции T, если она выглядит следующим образом:
(1) Входящий сумма I, я >= 3 * Вэл + 3 * плата
(2) Два исходящих Адреса; один <В>, И еще один, назовем его ,
Там нет других исходящих адресов или записей.
(3) "нормальное количество" и "двойной объем расходов" в <В> находятся
в точности равен Вал.
(4) "нормальное количество" в строго больше, чем Валу
(5) "двойной объем расходов" в самое большее I - 3 * Вал - 2 * плата
В случае, если шахтер видит попытку двойных расходов, он должен
сделайте следующее. Во-первых, выбрать сделку Tmax с самой высокой платы
в значениях двойных расходов. Во-вторых, принять в качестве доказательства двойной
проводя первую альтернативную сделку Tfirst видел. Затем опубликуйте
эти две сделки, Tmax с доказательством Tfirst. Обратите внимание, что система
настроен таким образом, что это дает шахтера максимальную прибыль.
Предположим теперь, что V принимает транзакции T, который пользователь пытался удвоить
тратить, создавая транзакции T, T1, T2, ... Я утверждаю, что если сделки T
был первым один пилить шахтера, то V получает деньги.
(А) Сделка Т обрабатывается как нормальный
(В) транзакциях Ti, обрабатываются как нормальные
(С) Сделка Т представляет собой двойную провел транзакцию, Ti, ее доказательство
(D), сделка Ti, представляет собой двойную провел транзакцию, Т ее доказательство
В случае использования рудничные (A), он получает плату. В случае, если он использует (C), он получает
по крайней мере, вал + плата, так как разница между левым над частью в
двойные суммы расходов Т составляет по меньшей мере 2 * Val + 2 * плата.
Таким образом, можно предположить, что он использует (В) или (D) только тогда, когда он получает также в
не менее 2 * вал + 2 * плата. Так как (D) всегда более ценный для шахтера, чем
(B) - в противном случае сделка Ti не действует - он будет использовать (A),
(D), или (C), в этом случае V получает свои деньги.
Существует еще один случай: Ti может быть сделкой в старом стиле
формат. В этом случае, забойщик не может использовать (D). Так что может быть
выгодно шахтер использовать (B), и V не получит свои деньги -
Однако, B по-прежнему проводит по крайней мере Вэл + плата в сборах, так что это не должно
слишком часто (поставщик может потребоваться увеличить разрыв в T
несколько, так что B тратит еще больше).
Там еще будет вопрос, что делать, когда некоторые шахтеры пытаются помочь
двойная расходы; это не тривиально и может быть реальной проблемой, но
все-таки я думаю, что система будет улучшение уже: прямо сейчас,
двойной удар расходов является то, что я могу работать самостоятельно, однако, я
не имеют вычислительную мощность, чтобы сделать серьезную добычу - и
кроме того, если бы я сделал, я бы не пытался обмануть поставщик для США $ 20. Также,
может быть, можно сделать что-то об этом.
ТЛ; др Почему не совершать сделки, которые имеют два значения для каждого исходящего адреса, где второй можно использовать только тогда, когда пользователь пытался удвоить потратить?