Ха-ха, извините, я не хотел никого обидеть, я просто немного разочарован тем, что люди считают только самые простые решения, и не хотят, чтобы увидеть большую картину.
Давайте начнем с примером ... Предположим, я шахтер, который находится в своем роде экзотических ситуаций: у меня есть неограниченные вычислительные и сетевые ресурсы, и достаточно временное хранения (ОЗУ) для проверки blockchain, но местное постоянное хранение невероятно мало. Но если я хочу, чтобы сохранить что-то, я могу хранить его извне через сеть. Скажем, в DHT, как Freenet, Тахо-LAFS или что-то в этом роде.
Поэтому я хочу, чтобы загрузить и сканировать blockchain до блока N только один раз, то мне нужно, чтобы быть в состоянии проверить достоверность любой сделки. Является ли это возможным?
Конечно. Как я иду через blockchain устрою индекс и будет хранить его во внешнем DHT. Мне нужно только, чтобы держать хэш последнего блока локально, 32 байт, что есть.
Имея этот хэш, я могу извлечь вещи из DHT, пока я не найду выход транзакции, мне нужно проверить в индексе я построил. (Я не забочусь ли DHT безопасно: если что-то подделано, хэши не совпадут.)
Это своего рода очевидна: если безопасные распределенные файловые системы могут существовать, то я могу просто хранить данные в таких файловых системах, а не в локальной файловой системе.
Но ... сколько это будет стоить мне, чтобы проверить сделку? Ну, древовидные datastructures обычно имеют просмотровые затраты на шкале log2 N, где N представляет собой число элементов. В худшем случае каждый отдельный Satoshi является индивидуальным UTXO, поэтому у нас есть 21000000 * 100000000 = 2100000000000000 ~ = 2 ^ 51 UTXOs. Таким образом, мне нужно что-то вроде 51 поисков, чтобы найти UTXO в бинарном дереве поиска. Или только 9 поисков, если у меня есть 64-кратное дерево.
Но люди могут утверждать, что 9 поисков в UTXO много ... Задержка в сети болтовня. Как насчет нуля?
Это возможно. Предположим, что человек, который посылает транзакции знает, как хранить индекс в дигидротестостерон, это не секрет. Чтобы убедиться в том, что я буду включать его сделку в блок, он будет получать все данные мне нужно от самого DHT, и отправит мне сообщение с его сделки и всю информацию мне нужно.
Я не нужно искать что-нибудь в DHT сам, мне нужно только данные, которые были сохранены в сообщении. И это безопасно: если данные были подделаны, хэш не будет соответствовать.
Таким образом, в основном, количество сделок я могу включать в блок ограничен моими вычислительными и сетевыми возможностями, но возможность хранения / стоимость irrelephant.
Но то, что о блоках, добытых другими? Ой...
Ну, можно сделать 9 DHT Lookups за UTXO, указанного в блоке. Количество выходов ограничено, я могу сделать Lookups параллельно, так что это не такая большая проблема. Но все равно...
Вы знаете, шахтеры дружелюбные ребята, как о все они используют тот же DHT, а затем включить информацию о конформационной вместе с блоком они только что добытого?
Таким образом, я получаю новый блок и дополнительную информацию, которая все, что необходимо для подтверждения того, что блок является действительным.
В конце концов, это можно сделать все горнодобывающие, имеющий только 32 байт постоянного безопасного хранения. Это требует немного больше пропускной способности, однако. Но дополнительные затраты на пропускную способность примерно пропорционально размеру блока. Так что, возможно, не большая проблема ...
Например. Я необходимо либо 128 ГБ оперативной памяти, массив жестких дисков и 100 Мбит / с трубой. Или мне нужно 1 Гб оперативной памяти, жестких дисков, на всех и 1 Гбит / с трубы. Что дешевле?
Так что я говорю о хранении / пропускном способность компромиссе. Использование меньшего количества памяти может увеличить задержку, но возможно таким образом, что она не будет иметь решающее значение.
В следующий раз я научу вас, как реализовать blockchain на основе криптовалюта таким образом, что новые шахтеры могут начать добычу сразу, не загружая весь blockchain, следите за обновлениями ...