Изучая матчасть, особенно что касается блокчейна... возникла пара вопросов.
1) Что конкретно подбирают подбирают майнеры? Т.е согласно матчасти для того что бы блок был включен в цепочку должна быть решена математическая задача которой является хеш id блока+транзакции+некое слово.
Окей есть некий хеш. Он же задача. Насколько я понял майнеры по факту почти брутфорсят некоторые значения. Я думал что идет подбор "некого слова" что бы получить тот же хеш что и в задаче. Т.е угадали слово забирайте ревард. Но похоже я ошибался.
Собсно более детализированный вопрос. Если хеш это задача, то что является ответом на неё и что конкретно перебирают майнеры?
Майнеры подбирают 32-х битное число "nonce", такое, чтобы хэш от блока+nonce был меньше конкретного значения, которое зависит от сложности в данный момент. Вот и вся задача. И решается она не "почти", а самым настоящим брутфорсом.
Т.е А пересылает битки B, и пока блок не добавлен в цепочку А пересылает те же битки самому себе. Насколько я понял в примере показано Что создавая транзакции можно указать тот же самый input со ссылкой ну туже транзакцию что в Input-e транзакции перевода А->B
Далее как я понял если Блок с транзакцией A->A будет добавлен в цепочку раньше то Блок с транзакций A->B будет считаться недействительным так как ссылается на израсходованную транзакцию...
И собственно для этого добавлена задача которая решается 10 минут...
Собсно чего я не понял... В примере указано что А->A должен самостоятельно решать задачу для того что бы блок был добавлен в сеть. Когда A->B решается вычислительной мощностью комьюнити. Сфига? Почему комьюнити не может решить A->A раньше чем A->B даже если он позже отправлен.
Может, если майнер каким-то образом (например - ты сам майнер) получил транзакцию A->A раньше, чем A->B, тогда он ее и включит в блок, а A->B отбросит.
В общем я поплыл чутка, прошу подсказать.
Скорее всего второй участник сделки вообще не увидит транзакцию A->B, а если его клиент и засечет ее раньше, то после включения в блок A->A, A->B окажется невалидной.