Представьте, что у вас есть блокчейн, в котором схема Proof of Work представляет собой целочисленную факторизацию. Есть код операции, который принимает два целых числа $N,M$ где он возвращает true, если $M\не\в \{0,1,N\}$ и $N \mod M \экв 0$. Теперь предположим, что нам нужно факторизовать число, скажем, $M_g$. Это может быть число Каннингема, блестящее число или любое другое число, для которого интересно знать его факторизацию.
Мы можем создать транзакцию, в которой скрипт блокировки средств транзакции представляет собой код операции с $M_g$ как первый ввод. Таким образом, скрипт разблокировки — это просто любой нетривиальный фактор $M_g$. Это позволит любому участнику блокчейна получить вознаграждение за эту факторизацию.
Две проблемы: атака майнера посередине и атака реорганизации.
Атака «Шахтер посередине»: Майнер, получивший транзакцию с помощью скрипта разблокировки, сможет увидеть фактор на виду и заменить эту транзакцию на транзакцию, в которой средства отправляются на их кошельки, а не на кошельки решателя.
Атака реорганизации Если стоимость монеты блокчейна высока, также есть стимул атаковать блок, в котором была добыта транзакция решателя, путем повторного решения этого блока с замененной транзакцией, аккредитующей себя (злоумышленник) и пытающейся создать более длинную цепочку из этого. новый блок.
Итак, возникает вопрос, как можно безопасно отправлять решения в этой цепочке блоков? Нужен ли новый опкод? Можно ли сделать это двумя транзакциями или нужно три транзакции?
Спасибо.
Примечание: Я не смог найти подходящие теги для этого вопроса, поэтому выбираю что-нибудь даже отдаленно связанное. Также кажется, что обмен стеками биткойнов предназначен исключительно для биткойнов.