Есть ли более эффективный по площади способ доказать, что транзакция содержится внутри блока?
Клиенты SPV, такие как Electrum, требуют криптографического доказательства того, что транзакция содержится в блоке. Это делается путем включения каждой ветви merkle, необходимой для получения хэша, равного корню merkle блока. Это принимает log(2, N) * 32 bytes
, где N - количество транзакций в блоке.
Существует ли более экономичный способ криптографического доказательства того, что транзакция содержится внутри блока?
Для аргумента предположим, что вам разрешено изменять способ вычисления заголовка блока и дерева merkle или вообще заменить его.
Примером возможного улучшения было бы изменение хэш-функции, используемой для построения деревьев merkle от SHA256d до RIPEMD-160 (или еще одна 160-битная хеш-функция, как SHA512 /160 ). Это займет только log(2, N) * 20 bytes
.
1 ответ
Помимо сокращения используемого хеша, нет никакого способа сделать доказательство меньше места.
На боковой ноте хэш можно сделать короче, просто используя первые n бит. Контрольная сумма адреса биткойна (первые 4 байта sha256 (body)) производится таким образом. Я не знаю, почему ripe160 используется вместо усеченной формы sha256 для основного тела адреса.