Всем привет,
Я внедрил новую систему проверки блок / транзакций для ссылочного клиента, называется "ultraprune",
Традиционно, обрезку для Bitcoin считается возможность удалить полные транзакции из памяти, как только все их выходы расходуются, и они погребены достаточно глубоко в цепи. Это не то, что это о.
Учитывая, что почти все операции, выполняемые на blockchain не требуют полного предыдущих операций, но только их неизрасходованные выходы, казалось расточительным использовать полностью индексированный blockchain для всего. Вместо этого мы храним базу данных только неизрасходованные выходы транзакций. После некоторых усилий, чтобы писать пользовательский компактные сериализации для них, я мог бы уменьшить объем, необходимый для такого набора данных менее 70 МБ. Это хранится в файле базы данных BDB (coins.dat), и с индексацией и накладными расходами, и занимает около 130 МБ.
Теперь, это не достаточно. Вы не можете иметь полное остроумие узла только эти выходов. В частности, он не может отменить блок связи, не может выполнить повторное сканирование для бумажника операций, и не может служить цепь к другим узлам. Это, однако, довольно редкие операции. Чтобы компенсировать это, мы продолжаем Неиндексированные но целые блоки (только каждый блок в отдельном файле, на данный момент), а также "расстегивать" информация для соединенных между собой блоков вокруг в дополнение к coins.dat. Нам также нужен индекс блока с метаданными о всех сохраненных блоках, который занимает около 40 МБ на данный момент (хотя это может быть легко уменьшено тоже). Обратите внимание, что это означает, что мы теряем способность найти фактическую сделку в цепочке от TXID, но это не является необходимым для нормальной работы. Такой индекс может быть повторно добавлен позже, если это необходимо.
После того как вы это, шаг к обрезке легко сделать: просто удалить блочные файлы и отменить информацию для старых блоков. Это не реализуется в настоящее время, но не должно быть проблемой. Это просто означает, что вы не можете отсканировать / Reorg / серверу старых блоков, но как только те достаточно глубоко (скажем, несколько тысяч блоков), мы можем терпеть это.
Так, в целом, он позволяет запускать полный узел (сейчас) с:
- 130 MB coins.dat
- 40 MB chain.dat
- размер нераспределенных блоков, + 12%, что для отмены информации.
О, это также быстрее. Я протестированные полный импорт из blockchain (187800 блоков) на моем ноутбуке (2.2GHz i7, 8 GiB RAM, 640 Гб спиннинг жесткого диска) в 22-е минуты. Это было с локального диска, а не из сети (которая имеет дополнительные накладные расходы, и ограничивается ограничениями пропускной способности). То есть с некоторой тонкой настройкой, хотя.
Если люди хотят экспериментировать с ней, видеть мой "ultraprune" филиал на GitHub: https://github.com/sipa/bitcoin/tree/ultraprune.
Обратите внимание, что это экспериментальная, и имеет некоторые недостатки:
- Вы не можете найти (полную) сделку от всего своего TXID.
- если у вас есть операции, которые зависят от неподтвержденных транзакций, тем не получит повторно распространяться
- только блок загрузки и реорганизации будут несколько проверены; Используйте на свой риск
- меньше проверки согласованности возможно в базе данных, и еще меньше реализованы
Также обратите внимание, что это не связано напрямую с последними предложениями для обрезки деревьев, которые используют альт цепь с индексом неизрасходованных монет (и адреса), присоединяемых добывали с основной цепью. Это может быть шагом на пути к такой системе, однако.