На мой взгляд, актуальным вопросом для Bitcoin и других криптовалют является постоянное увеличение размера блокчейна и, как следствие, необходимость хранить большие массивы данных на клиентских машинах.
Вопрос актуален как никогда, особенно для альтов с маленьким block time и длиннющими блокчейнами.
А по поводу необходимости хранить
большие массивы данных, я бы ещё добавил что данных -
неактуальных.
Ну что там? Старые транзакции чужие. Кто-то отправил кому-то, тот уже давно растратил и забыл.
Последний получатель - вообще ключ потерял приватный. А вы все - сидите теперь, и синхронизируйте гигабайты эти...
И ещё и раздавайте их тем, кто ещё не синхронизировался, кто только вот подключился "потестить",
и тем кто из-за нехватки места под порнуху - тупо выделил все "blk*.dat" нажал "Shift+Delete", или сделал "rm -rf".
Многие пользователи не желают скачивать весь многогигабайтный блокчейн,
накопившийся за годы существования криптовалюты,
только лишь для того, чтобы надёжно отправить несколько транзакций.
Поэтому предлагаю публиковать в этой теме различные способы отсечения старых блоков в блокчейне.
Разумеется, весь блокчейн в любом случае необходим для полной верификации и валидации всех транзакций, совершённых начиная с первого GENESIS-блока, а также для анализа передачи монет с адреса на адрес. Как вариант, вместо скачивания блокчейна можно использовать режим PRUNE или онлайн-обозреватели блокчейна, но в этом случае добавляются уязвимости, основанные на доступности сайтов, фишинге и взломе DNS-серверов. Речь идёт об альтернативных способах хранения текущих состояний адресов пользователей криптовалют для клиентских решений.
Раньше я тоже качал весь блокчейн биткоина, запустив bitcoin-qt.exe,
и синхронизировался сидел там - лишь для того, чтобы получить возможность - отправить свои же монеты.
А потом просто надоели эти синхронизации, и я у DOGECOIN'a - нашёл вот этот веб-кошелёк:
https://my.dogechain.info/#/walletИ не смотря на то, что я знал, что сервер их может отвалиться в любой момент,
и несмотря на то, что количество блоков в блокчейне DOGECOIN'a было 1,200,000
я всё-же сменял часть bitcoin'a на DOGE, просто чтобы использовать их web-wallet - безо всякой синхронизации.
Но затем, появился такой же веб-кошелёк на
https://login.blockchain.com/#/loginкуда можно было импортировать privkey.
После чего, я сразу же - сменял те свои доги назад в биткоин.
И если надо было потратить - импортировал ключ, затем тратил, а сдачу - на другой кошелёк, незасвеченный, сбрасывал целиком.
Исходников этих веб-кошельков, я конечно же не нашёл.
Я думаю, что такие вещи должны быть open-source, более того всё это дело, нужно бы - стандартизировать, и вшить внутрь ноды.
Например, вводишь в консоли "getpeerinfo" - получаешь список пиров и нод.
Берёшь с этого списка ноду, с открытым портом которая, и заходишь на неё - вот так:
http(s)://node_IP:PORT/web-wallet/Нода выгружает скрипты на клиент, дальше уже client-side авторизирируешься,
смотришь баланс, получаешь эти свои UTXO с ноды,
client-side - формируешь RAW-транзкцию на основе этих данных,
client-side её же и подписываешь, получаешь hex, и постишь её - вот сюда:
https://www.blockchain.com/ru/btc/pushtxа лучше - сразу, броадкастишь её - прямо на ноду...
И децентрализация, и веб-кошелек, и блокчейн качать не надо.
Было бы прекрасно видеть подобное, для рандомного bitcoin-based mineable altcoins, после стандартизации, ИМХО.
Первый способ для Bitcoin
корректность данных будет основана на
доверии к человеку, создавшему список непотраченных выходов UTXO транзакций Bitcoin и подписавшему его своим ключом. К тому же, синхронизация с сетью будет занимать
минимальное время.
Второй способ для Bitcoin
Та же самая схема, но отличие заключается в том, что майнеры Bitcoin через
каждые, например, 4320 блоков (то есть примерно раз в месяц) добавляют в скрипт входа COINBASE-транзакции стандартизированный комментарий, размер и хеш SHA256 файла, содержащего список непотраченных выходов UTXO и опубликованного на сайте. Это будет означать, что майнер
подтверждает, что опубликованный список корректен и может быть использован пользователями на клиентских машинах. Если другие майнеры не будут согласны с корректностью данных, содержащихся в этом файле, они не будут продолжать майнить эту ветку, и смайненный блок станет
орфаном.
На самом деле, хотя второй способ выглядит убедительнее, он практически
нереализуем,
поскольку здесь требуется консенсус между майнерами Bitcoin,
а в текущей ситуации майнерам всё равно, что написано во входе COINBASE-транзакции,
и они будут майнить любую
валидную ветку,
не проверяя корректность опубликованного файла,
содержащего список непотраченных выходов UTXO.
Поэтому, на мой взгляд, для Bitcoin первый способ предпочтительнее.
Однако, второй способ может быть реализован в
другой криптовалюте, консенсус которой будет
обязывать майнеров сверять размер и хеш дампа непотраченных выходов UTXO, записанных во входном скрипте COINBASE-транзакции. К тому же, для полной ноды не будет необходимости скачивать опубликованный дамп, поскольку такой файл она сможет создать
самостоятельно по заданному алгоритму.
Я бы ещё добавил, как третий способ - некую абстракную
валидацию списка - самими нодами.
Ведь на нодах уже есть полный блокчейн.
Так почему бы на нодах этих, не пропарсить блокчейн, и список этот - не перегенерировать, с перерасчётом хэшей и проверкой их?
Подписывать, и
переподписывать (после проверки), тоже можно на нодах -
приватным ключём самих нод, при известных их адресах.
Более того, ноды, как владельцы этих адресов, они - по умолчанию "доверенные лица" (с них же блокчейн и выкачивается).
Ну и орфанить, если инвалид - тоже можно автоматически, на нодах. Вот вам и консенсус.
Какая там была вероятность создания альтернативной цепочки из 6 блоков, если майнеров меньше 50%?
x^(-6) = 1 / (x^6); где x - [Вероятность найти блок в solo, при текущей сложности], ^ - возведение в степень.
По всей видимости, для надёжности дамп также должен содержать цепочку заголовков блоков, начиная от GENESIS-блока. На текущий момент высота последнего блока в блокчейне Bitcoin равна примерно 575000, то есть, поскольку размер заголовка составляет 80 байт, эта цепочка займёт в дампе около 44 мегабайт и будет увеличиваться, как указал сам Сатоши Накамото в описании Bitcoin, на 4.2 мегабайта в год. В общем, не много.
Таким образом, клиент, скачавший список непотраченных выходов UTXO транзакций Bitcoin, сможет оценить примерную кумулятивную сложность майнинга всего блокчейна.
Вот эта идея, сразу же, разрешает вопрос о различных всевозможных фальсификациях в дампе, всякими там "доверенными лицами".
Просто проверка сложности по хэшам из заголовков, и орфаны - по сложности, а не по длине блокчейна.
И места немного. Как и писал
сам Сатоши, в PDF-ке своей, в главе 7.
Да даже если взять блок-цепочку какого-нибудь
ZetaCoin'a, с его 11-ю миллионами блоков...
Хранить заголовки будет лучше, чем хранить весь этот - блокчейн.