Какие?
Способ массово снижения начальной загрузки blockchain для полных узлов
Зачем?
Для подтверждения сделки, вы в принципе необходимо проверить следующее:
- в scriptsigs из его входов соответствуют scriptpubkeys выходов из "источник операции" (Это упрощенное описание)
- "источник операции" все действительны
- сделка не является двойным израсходует другую сделку
Вы также можете сделать это последний чек, если вы только держать след неизрасходованных сделок: если вы знаете, все неизрасходованные транзакции, вы можете забыть все затраченные сделки: вы знаете, что сделка не является двойным тратить деньги, если все ее входы приходят из неизрасходованные сделки. Если в какой-то момент времени, вы знаете, все неизрасходованные операции, вы можете продолжать следить за изменением набора неизрасходованных операций. Проблема в инициализации: когда вы первый настроить узел, единственный способ выяснить, какие сделки неизрасходованные, чтобы загрузить весь блок цепи. Это также означает, что должно быть много других узлы, которые могут дать вам весь блок цепь.
Начальный блок цепи загрузки уже большой PITA сейчас, и это будет только хуже в будущем: блок цепь может только расти. Можно было бы утверждать, что только шахтер (или, может быть, только бассейн операторы?) Действительно нужно проверить сделку, и что другие люди могут вообще доверять сделку, когда она была включены в основной ветви блока цепи. Однако, такого рода рассуждения забывает следующее:
- Mining (включая проверки сделки) предназначаются, чтобы быть массово децентрализованными усилия сообщества, а не то, что делается с помощью некоторого оператора бассейна аристократии.
- Правда, о которых произошли подразумеваются сделки, которые публично читаемыми, не должен проводиться только в тайных книгах оператора пула священства.
Как не сделать это?
Вы можете просто задать другие (полные) узлы, которые являются сделки неизрасходованные. Есть некоторые проверки можно выполнить ли ответ честен, например, неизрасходованные выходы следует добавить к общему количеству добытого Bitcoins, а сделки не должны быть в два раза тратит друг от друга, но нет достаточного количества проверок, чтобы убедиться, что у вас есть правильный набор неизрасходованных операций. Хуже того: если общая сумма выходов добавляет до более, чем количество добытого Bitcoins, у вас нет возможности узнать, что сделка не так: вы можете сделать это только путем извлечения потраченный сделок, так что вам еще нужны другие узлы, чтобы дать вам отработанную часть блока цепи.
Как это сделать?
Для каждого блока, или, может быть, один раз так много блоков, сделать дерево Меркле, содержащий все неизрасходованных транзакции этого момента, в том числе те, которые уже были включены в блок цепи. Включить корневой хеш этого Merkle дерева в блоке (предпочтительно в заголовке блока, но в остальном в фиксированном месте в дереве Merkle блока). "неизрасходованная сделка" Меркл дерево должно быть сделано в детерминированным способом (например, отсортированный по транзакции хэш), так что может быть проверена путем проверки только хэш-значение корня. Шахтеры должны построить только на верхней части блока, если они проверили, что корень хэш из "неизрасходованная сделка" Merkle дерево правильно. Блоки с неправильным корневым хэшем должны быть отклонены.
Теперь, новый полный узел не нужно больше загружать весь блок цепи. Это просто необходимо, чтобы найти самое длинное доказательство из-работы цепи заголовков блоков, загрузите самые последние (*) "неизрасходованные сделки" Merkle дерево и скачать все транзакции, которые произошли после этого момента.
Как улучшить эту идею?
- Если это новый Merkle дерево входит в каждом блоке, может быть, он может полностью заменить традиционный способ ввода транзакций в блоки?
- Что было бы лучшим способом для сортировки транзакций в этом новом дереве? Предпочтительно, оно не должно быть необходимым, чтобы восстановить все дерево, чтобы обновить его новые сделки.
(*) Для обеспечения безопасности, возьмите тот, который уже имеет большое количество подтверждений