Эм, получается блок PoS будет собран тем клиентом, кто успел предложить монеты с наибольшим 'весом' (пропорционально: объем * время неиспользования).
Тогда следующее утверждение, где то в теме было, - после формирования блока PoS, монеты, которые использовались в нем дробятся пополам. Я так понимаю на адреса, которые пожелает выбрать клиент, собравший блок, или дробить необязательно?
Дробить обязательно, у coinstake-транзакции должно быть как минимум два выхода. Адреса большого значения не имеют, единственное требование - у создающего блок должны быть приватные ключи для них.
Ага, сейчас, я так понимаю, каждый раз генерируется новый адрес для PoS? Дробление не очень выгодно для тех кто собирается копить и майнить PoS-ом.
В свете вышеизложенного предлагаю следующую схему проведения double spent атаки:
1. подготавливается сеть клиентов (или специальная модификация клиента), с размазанными географически точками выхода в интернет
2. при необходимости, код перебора nStakeModifier разработывается с использованием GPU (особенно если количество точек формирования PoS блоков понадобится очень большим)
это повышает скорость/шансы формирвания и рассылки PoS блоков
3. проводится анализ блокчейн на наличие 'активных монет', участвующих в формировании PoS блоков с возможностью выдачи предсказаний, какие монеты в будущем могут быть использованы для формирования PoS, на основе алгоритма в официальном клиенте, и сборе статистики версий клиентов.
это позволит вычислить 'весовые ямы' в будущем блокчейн, т.е. области, где вес монет в PoS блоках может оказаться наименьшим
4. модифицируется алгоритм выбора монет для формирования PoS блоков, монеты придерживаются на кошельке с целью накопить вес и возможностью управляемого использования, так же монеты равномерно размазываются адресам (чем равномернее монеты будут размазаны по адресам, тем больше нод могут одновременно пытаться сформировать PoS)
5. в специально подобранный момент (когда количество монет выйдет из заморозки и/или наберет необходимый вес по сравнению с глубиной предполагаемой ямы, так же можно подгадать поблочный выход монет из заморозки) производится целевая трата монет на атакуемом сервисе и запускается последовательное формирование цепочки PoS блоков (в которой формируется повторная транзакция тех же монет но уже на свой адрес или на иной сервис), без ее публикации
6. если цепочка необходимой длины собрана - она публикуется и отменяет целевую трату.
p.s. перечитал свой алгоритм, и все равно появился вопрос, что ограничивает сформировать цепочку PoS блоков сразу на одном клиенте без создания сложной сети клиентов? Тут же чистая формула, кто подобрал хеш тот и доктор, главное монеты чтобы были.Оценка средств, необходимых для проведения атаки равна:
p.s. упростим вычисления, будем считать что возраст монет минимальный, иначе нужно сравнивать не монеты а их вес
* n - количество узлов для формирования PoS сравнимо с количеством подтверждений, используемых атакуемым сервисом (длина цепочки)
* M - количество монет, которые должны быть свободны к моменту формирования цепочки
* H - максимальное количество монет, которое может быть использовано при формировании PoS блоков сетью на момент атаки (статистику можно собрать из blockchain)
Подбираем такой M < H, тогда n*M - необходимые суммы для проведения атаки
Нет смысла на разных нодах в сети использовать разные монеты, а количество нод (выходов в интернет) в сети должно быть сравнимо с количеством всех клиентов (чем больше тем выше шансы что они успеют сообщить о своих PoS блоках легальным клиентам).