Я думал, что я оставил записку для потомков, связанных с схемой повторяющейся с использованием среднего состояния сжатия, чтобы избежать отправок coinbase операций; как это кажется, чтобы заново время от времени. Это обсуждалось несколько раз, разбросанных в разных местах, и я думал, что это полезно поставить понимание фольклора в одном месте.
В Bitcoin сегодня различные схемы, как P2Pool или UTXO установить обязательства Предполагается, что требует добавления некоторых обязательных данных в транзакции coinbase. Для того, чтобы доказать, обязательные данные присутствуют вы должны затем передать всю транзакцию coinbase. Coinbase транзакции могут быть большими, например, в p2pool и Eligius как бассейны, которые платят непосредственно или по другим причинам. Теоретически, coinbase сделка может быть до размера целого блока.
Расхождения оптимизации поставить свои обязательные данные в конце сделки coinbase, а затем отправить SHA256 Midstate. Приемник может затем выполнить хэширование с обязательными данными и проверкой соглашения.
Я лично думаю, что этот проект нецелесообразен, поскольку он отшелушивает назад черный ящик хрупкой конструкции Merkle-damgеrd и может открыть некоторые новые атаки префиксов расширения, никто не подумали проверить SHA2 для ... но если это будет сделано, реализации _должны_ быть очень осторожным, чтобы избежать осложнений от захвата сериализации. Например. если вам требуется ваше последнее обязательство быть свободным выходом стоячего "OP_RETURN PUSH (данные)" может кто-то вместо того, чтобы сделать свой окончательный вывод "OP_RETURN [другие вещи] PUSH__8 + 4 + данные + Размер", А затем, что выход будет потреблять прилагаемое обязательство, а затем можно отправить неверную Midstate доказательство, что будет анализироваться по-разному в Midstate только клиентом и реализации, которые работают со всей сделкой coinbase; открывая проспект для атак.
Еще один способ сказать это то, что в связи с использованием переменной длины поля сериализации транзакций не может быть считан в обратном направлении, и поэтому ни одно приложение с помощью Midstate compression--, который по своей сути скрывает переднюю часть transaction-- не может иметь какую-либо зависимость от сериализованного структуры за "заканчивается этих байтов"..
Для применения обязательств, эти проблемы можно избежать, как p2pool делает, делая ваше правило быть специфическим для последних N байт сделки (ваше обязательство + nlocktime), независимо от того, что происходит перед ними (например, встроенными в другом выходе нормально) .. ., но я до сих пор думаю, что лучше, чтобы избежать этой конструкции полностью.