Я думал о "Конечное сжатие" система и мне интересно, если она избыточна на некоторое время. Все дело в том, чтобы записать множество UTXO, но этот набор не так уж велик в любом случае.
При обрезке, все операции в сете UTXO должны быть сохранены. Там нет смысла во всех узлах, хранящих всю эту информацию.
Каждая запись в UTXO набор просто нужно записать блочный индекс, индекс сделок и индекс выхода.
Запись UTXO набор должен включать в себя индекс блока 3 байт (до блока 16 млн или около того), индекс транзакции в 2 байта, и индекс производства в 1 байт. Они могут быть формально типами переменной длиной целого.
Это работает как 6 байтов, которые должны быть сохранены для каждого UTXO установить запись, а не нуждаясь по крайней мере, 250 байт на транзакцию.
При загрузке цепи, узел будет (первым заголовки) найти самую длинную цепь POW, а затем сканировать эту цепочку от генезиса до самой длинной точки. Это может снимок UTXO установить каждые несколько блоков, когда он приближается к концу цепи (... 100000, 10000, 1000, 100, 20 блоков назад, а затем все последние 20 блоков, как diff).
Если вилка случается, что меньше, чем 20 блоков (почти все запрещая вилки на основе ошибки), это может пересчитывать набор из переформатирования:. Система точной снимок не столь критична. Diffs, скорее всего, улучшить положение вещей, особенно за последние 20 снимков.
Как это, этот узел не может сделать проверку подписи, но он может убедиться, что нет двойных расходов.
Если это сочеталось с "расширенный" сделки, то это может сделать подпись чеки. Расширены транзакции содержат все входные сделок сделки (и Merkle пути из заголовка блока). Кошелек может хранить транзакции, которые платят в любой из его адресов. Это позволило бы ему построить расширенную транзакцию, когда он тратил.
Если узел получил расширенную транзакцию, было бы проверить
- путь Merkle для всех входных транзакций (требуется блок заголовков)
- подписи для всех входов (требуется ввод транзакций)
- входы не удваивают потраченные (требуется набор utxo)
Если эти проверки проходят, то он знает, что сделка действительна, и он может быть включен в блоках.
Расширенные операции возлагать бремя хранения ОГО на владельцах выходов, а не требуя, чтобы все узлы для хранения информации.
Это также увеличивает общее использование пропускной способности сети для того, чтобы уменьшить хранения. "расширенный" блок будет блок, который включает в себя расширенные операции (и так будет больше).
Это может быть дополнительный бит в карте услуг. EXPANDED_STORE_NODE не будет делать никаких заявлений в отношении проверки. Это было бы просто хранить расширенные блоки.
Жесткая вилка сделает это еще более эффективным. Каждый выход сделка может быть просто МАСТ (Merkle абстрактного синтаксического дерева) хэш и она может быть включена непосредственно в Merkle дерево блока.
Расширена сделка будет включать в себя путь к корню МАСТЫ для каждого входа, а затем сценарий сига (который может быть проверен по отношению к корню МАСТЫ). Это означает, что если входной сигнал с очень крупной сделки, он по-прежнему очень мало.
Тем не менее, даже без жестких вилок, это позволит использовать узлы гораздо меньше мест на диск (но использовать более высокий пропускную способность).
Узлы, работающие на виртуальной машине в центре обработки данных, вероятно, на диске ограничено. Узлы, работающие в чьем-то доме ограничено, вероятно, пропускная способность.
Полный узел мог преобразовать стандартную операцию в расширенной сделку и выступать в качестве моста.