Bitcoin Forum

Local => Кодеры => Topic started by: Coin-1 on May 02, 2019, 04:43:33 PM



Title: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on May 02, 2019, 04:43:33 PM
На мой взгляд, актуальным вопросом для Bitcoin и других криптовалют является постоянное увеличение размера блокчейна и, как следствие, необходимость хранить большие массивы данных на клиентских машинах. Многие пользователи не желают скачивать весь многогигабайтный блокчейн, накопившийся за годы существования криптовалюты, только лишь для того, чтобы надёжно отправить несколько транзакций. Поэтому предлагаю публиковать в этой теме различные способы отсечения старых блоков в блокчейне.

Разумеется, весь блокчейн в любом случае необходим для полной верификации и валидации всех транзакций, совершённых начиная с первого GENESIS-блока, а также для анализа передачи монет с адреса на адрес. Как вариант, вместо скачивания блокчейна можно использовать режим PRUNE или онлайн-обозреватели блокчейна, но в этом случае добавляются уязвимости, основанные на доступности сайтов, фишинге и взломе DNS-серверов. Речь идёт об альтернативных способах хранения текущих состояний адресов пользователей криптовалют для клиентских решений.



Первый способ для Bitcoin

Согласно технологии блокчейна Bitcoin, для совершения транзакции нужно знать хеш SHA256D предыдущей транзакции и порядковый номер непотраченного выхода в этой транзакции. Таким образом, для минимизации блокчейна требуется хранить структуру и данные по всем непотраченным выходам UTXO, а также хеши транзакций Bitcoin, содержащих эти выходы с их порядковыми номерами в транзакции.


Примерный дамп содержит 3 таблицы:

1. Список транзакций Bitcoin, содержащих хотя бы один непотраченный выход:
1) Структура транзакции 1:
  • хеш SHA256D транзакции (32 байта)
  • параметры транзакции (lock_time, данные SegWit, и т.п.)
2) Структура транзакции 2
...

Таблица сортируется побайтно по полю "Хеш транзакции" по возрастанию, порядок байтов этого поля little-endian.


2. Список непотраченных выходов UTXO:
1) Структура выхода 1:
  • выходной скрипт
  • количество монет BTC на выходе
  • порядковый номер транзакции согласно списку выше
  • порядковый номер выхода в этой транзакции
2) Структура выхода 2
...

Таблица сортируется сначала по полю "Порядковый номер транзакции", затем по полю "Порядковый номер выхода", оба побайтно по возрастанию, порядок байтов этих полей big-endian.


3. Список заголовков блоков:
1) Структура заголовка 1:
  • Порядковый номер блока в блокчейне
  • Заголовок блока
2) Структура заголовка 2
...

Таблица сортируется побайтно по полю "Порядковый номер блока" по возрастанию, порядок байтов этого поля big-endian. Фактически эта таблица является цепочкой заголовков блоков.


Кроме этого, дамп содержит следующие поля:
  • версия дампа
  • название монеты


Способ отсечения старых блоков в блокчейне заключается в том, что, например, каждый месяц определённый доверенный человек, уважаемый в криптовалютном сообществе, создаёт вышеописанный список непотраченных выходов UTXO транзакций Bitcoin и вычисляет хеш SHA256 этого дампа. Затем он подписывает стандартизированную строку, содержащую размер и хеш созданного файла, своим ключом ECDSA secp256k1 и публикует данный дамп на сайте. Пользователи скачивают этот файл, проверяют подпись и, в случае успешной верификации, загружают дамп специальной версией Bitcoin Core, после чего скачивают остальные блоки, начиная с последнего номера блока дампа.

Таким образом пользователям не нужно будет скачивать весь блокчейн на клиентские машины, а корректность данных будет основана на доверии к человеку, создавшему список непотраченных выходов UTXO транзакций Bitcoin и подписавшему его своим ключом. К тому же, синхронизация с сетью будет занимать минимальное время.



Второй способ для Bitcoin

Та же самая схема, но отличие заключается в том, что майнеры Bitcoin через каждые, например, 4320 блоков (то есть примерно раз в месяц) добавляют в скрипт входа COINBASE-транзакции стандартизированный комментарий, размер и хеш SHA256 файла, содержащего список непотраченных выходов UTXO и опубликованного на сайте. Это будет означать, что майнер подтверждает, что опубликованный список корректен и может быть использован пользователями на клиентских машинах. Если другие майнеры не будут согласны с корректностью данных, содержащихся в этом файле, они не будут продолжать майнить эту ветку, и смайненный блок станет орфаном.

В этом случае пользователи, скачавшие и верифицировавшие опубликованный список непотраченных выходов UTXO транзакций Bitcoin, будут полагаться на объём работы Proof-of-Work, которая была совершена после подтверждения майнером корректности данных, содержащихся в этом файле.



На самом деле, хотя второй способ выглядит убедительнее, он практически нереализуем, поскольку здесь требуется консенсус между майнерами Bitcoin, а в текущей ситуации майнерам всё равно, что написано во входе COINBASE-транзакции, и они будут майнить любую валидную ветку, не проверяя корректность опубликованного файла, содержащего список непотраченных выходов UTXO. Поэтому, на мой взгляд, для Bitcoin первый способ предпочтительнее.

Однако, второй способ может быть реализован в другой криптовалюте, консенсус которой будет обязывать майнеров сверять размер и хеш дампа непотраченных выходов UTXO, записанных во входном скрипте COINBASE-транзакции. К тому же, для полной ноды не будет необходимости скачивать опубликованный дамп, поскольку такой файл она сможет создать самостоятельно по заданному алгоритму.



Предлагайте здесь другие способы отсечения старых блоков в блокчейне с полным описанием алгоритма, не только для Bitcoin. Я буду редактировать второй пост и добавлять ссылки на ваши идеи и решения.

Этот пост был обновлён 30.08.2019.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on May 02, 2019, 04:44:57 PM
Зарезервировано.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: amaclin1 on May 02, 2019, 05:13:38 PM
например, каждый месяц определённый доверенный человек, уважаемый в криптовалютном
сообществе, создаёт вышеописанный список непотраченных выходов UTXO транзакций Bitcoin и вычисляет
хеш SHA256D этого дампа.
Для кого-то он уважаемый, а для кого-то другого неуважаемый.
Как будем человека определять, если москвичи считают уважаемым Васю Пупкина,
а питерцы - Веронику Зюкину? Будем выборы в оффлайне устраивать с кабинками
для голосования? Поздравляю, вы переизобрели существующую централизованную систему.

Quote
Та же самая схема, но отличие заключается в том, что майнеры Bitcoin через каждые, например,
4320 блоков (то есть примерно раз в месяц) добавляют в скрипт входа COINBASE-транзакции
стандартизированный комментарий,
Админить этот сайт будет Вася Пупкин или Вероника Зюкина? Вы представляете, какие
возможности открываются админу подобного сайта?


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: neiros on May 02, 2019, 05:44:07 PM
Прям так и хочется написать на такой штучке https://1.bp.blogspot.com/-ck8HQcEILQM/XMsl-zapvCI/AAAAAAAAAQo/uOma7oyFfKo20ivd4csKz7so2zBBO2-HQCEwYBhgL/s1600/512GB.png - micro SD 512Gb нечто подобное: проблемы централизованных блокчейнов меня не волнуют.


https://ss-iqr.blogspot.com/2018/12/tdc-blockchain.html


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: investgroup on May 04, 2019, 02:32:17 AM
Что-то сильно многа букв у вас, боюсь не осилю ;)    А потому в двух строчках перечислю все известные способы организации проверки(контроля ден. массы - кстати она бывает нужна не всегда...):

1.  Хранение всей истории в виде блокчейна от создания монеты до последнего перевода.  -- ресурсоемкий и дурацкий способ, но зато тривиальный и очевидный

2.  Хранение среза состояния счетов на какой-то момент времени - и проверка транз только до(точнее от ;) ) него.  -- в риппле че-то подобное


PS  оптимален думаю гибрид - где-то посредине из этих методов.   Все остальные - от лукавого ;) и сводяться к этим 2м базовым.

PPS  не уверен что их только 2, кто еще найдет? ;)

PPPs  у вас ошибка с самого начала - легкой ноде вообще не надо ничего хранить, она все равно ничего проверить не сможет - там просто другая модель будет, легкая нода по-просту должна пользоваться услугами других, точнее услугами сети, а не лепить то что там пытался отсеч Сатоши в биткойне...


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 05, 2019, 10:34:32 AM
На самом деле, хотя второй способ выглядит убедительнее, он практически нереализуем, поскольку здесь требуется консенсус между майнерами Bitcoin, а в текущей ситуации майнерам всё равно, что написано во входе COINBASE-транзакции, и они будут майнить любую валидную ветку, не проверяя корректность опубликованного файла, содержащего список непотраченных выходов UTXO. Поэтому, на мой взгляд, для Bitcoin первый способ предпочтительнее.
Почему нереализуем?  Стандартный механимзм.
Для начала предложить на голосование майнерам. Если 80-90% будут за, реализовать и запустить. Как только 90% майнеров одобряют,  будет новый консенсус. Блок без отсутствия этой информации будет невалидным. При 90% риск появления другой ветки минимален. Тем более, что предыдущий консенсус практически остается в силе.

Я что-то не припомню, чтобы майнеры зарубили на корню какую-то хорошую идею.
Тут гораздо важнее, чтобы было желание это сделать. С чем, я думаю, и будет основная загвоздка.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: amaclin1 on May 05, 2019, 12:08:44 PM
Почему нереализуем?  Стандартный механимзм.
Для начала предложить на голосование майнерам.
-- Как остановить поезд?
-- Поезд, стой, ать-два!

Отсечь начало блокчейна - не проблема. Проблема будет, когда я с нуля захочу
скачать, а мне разные ноды будут предлагать свой собственный "начальный блок
с записанным в него UTXO set" и цепочкой блоков построенной от этого блока.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on May 06, 2019, 01:39:17 AM
Прям так и хочется написать на такой штучке https://1.bp.blogspot.com/-ck8HQcEILQM/XMsl-zapvCI/AAAAAAAAAQo/uOma7oyFfKo20ivd4csKz7so2zBBO2-HQCEwYBhgL/s1600/512GB.png - micro SD 512Gb нечто подобное: проблемы централизованных блокчейнов меня не волнуют.

Да, несомненно, это централизованное решение.



например, каждый месяц определённый доверенный человек, уважаемый в криптовалютном
сообществе, создаёт вышеописанный список непотраченных выходов UTXO транзакций Bitcoin и вычисляет
хеш SHA256D этого дампа.
Для кого-то он уважаемый, а для кого-то другого неуважаемый.
Как будем человека определять, если москвичи считают уважаемым Васю Пупкина,
а питерцы - Веронику Зюкину? Будем выборы в оффлайне устраивать с кабинками
для голосования? Поздравляю, вы переизобрели существующую централизованную систему.

Примерная стандартизированная строка для подписывания в качестве "BITCOIN MESSAGE":

Quote
I confirm that the following file containing the blockchain state is correct.
File size (bytes): ...
File SHA256 hash (hex): 0x...

В данном случае доверенный человек проверяет корректность дампа и затем подписывает такую стандартизированную строку своим ключом. Таких доверенных людей, которые подписали список непотраченных выходов UTXO транзакций Bitcoin, может быть много, поэтому конечный пользователь, скачавший дамп, вероятно, сможет найти подпись человека, которому он доверяет.



Quote
Та же самая схема, но отличие заключается в том, что майнеры Bitcoin через каждые, например,
4320 блоков (то есть примерно раз в месяц) добавляют в скрипт входа COINBASE-транзакции
стандартизированный комментарий,
Админить этот сайт будет Вася Пупкин или Вероника Зюкина? Вы представляете, какие
возможности открываются админу подобного сайта?

Если админ подобного сайта изменит хотя бы один байт в подписанном дампе, то такой файл не будет верифицироваться пользователями, скачавшего его.

Поскольку структура дампа заранее известна и все таблицы сортируются по одинаковым алгоритмам, то списки непотраченных выходов UTXO транзакций Bitcoin, вычисленные от одного и того же блока, будут абсолютно идентичны до байта. Такой дамп сможет создать любая полная нода самостоятельно.

Как вариант, в специальной версии Bitcoin Core может быть предусмотрена команда на запрос последнего созданного дампа из сети полных нод.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 06, 2019, 10:17:42 PM
Почему нереализуем?  Стандартный механимзм.
Для начала предложить на голосование майнерам.
-- Как остановить поезд?
-- Поезд, стой, ать-два!

Отсечь начало блокчейна - не проблема. Проблема будет, когда я с нуля захочу
скачать, а мне разные ноды будут предлагать свой собственный "начальный блок
с записанным в него UTXO set" и цепочкой блоков построенной от этого блока.

Думаю, что алгоритм можно найти.  Можно оставить старый. Брать ту цепочку, у которой сложность выше, и количество блоков не меньше заданного N.  Как альтернатива, можно смотреть на средний размер сложности блока в цепочке.

Какая там была вероятность создания альтернативной цепочки из 6 блоков, если майнеров меньше 50%?


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: amaclin1 on May 07, 2019, 03:15:46 AM
Думаю, что алгоритм можно найти.  Можно оставить старый. Брать ту цепочку, у которой
сложность выше, и количество блоков не меньше заданного N.  Как альтернатива, можно
смотреть на средний размер сложности блока в цепочке.
Вы подсоединились к двум нодам.
Одна из них говорит: у меня в цепочке 100 блоков, а все что раньше - отрезано, но сложность
там охулиард. Вторая говорит: у меня в цепочке 150 блоков, а все что раньше - отрезано,
но кумулятивная сложность того что отрезали - два охулиарда.

Кому из этих нод верить и какой блокчейн вы скачаете?

Quote
Какая там была вероятность создания альтернативной цепочки из 6 блоков, если майнеров меньше 50%?
Если у меня есть возможность создать свой utxo set - я запишу его в контрольный блок,
после чего начну всеми своими тремя асиками майнить от этого блока.
И у "основной" сети биткойна будет отрезанная сложность - миллиард, а у моей - два
миллиарда. А проверить вы не сможете - она же отрезана!


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 07, 2019, 07:49:31 AM
Думаю, что алгоритм можно найти.  Можно оставить старый. Брать ту цепочку, у которой
сложность выше, и количество блоков не меньше заданного N.  Как альтернатива, можно
смотреть на средний размер сложности блока в цепочке.
Вы подсоединились к двум нодам.
Одна из них говорит: у меня в цепочке 100 блоков, а все что раньше - отрезано, но сложность
там охулиард. Вторая говорит: у меня в цепочке 150 блоков, а все что раньше - отрезано,
но кумулятивная сложность того что отрезали - два охулиарда.

Кому из этих нод верить и какой блокчейн вы скачаете?

Quote
Какая там была вероятность создания альтернативной цепочки из 6 блоков, если майнеров меньше 50%?
Если у меня есть возможность создать свой utxo set - я запишу его в контрольный блок,
после чего начну всеми своими тремя асиками майнить от этого блока.
И у "основной" сети биткойна будет отрезанная сложность - миллиард, а у моей - два
миллиарда. А проверить вы не сможете - она же отрезана!

Причем тут отрезанная сложность. Важна сложность в оставшейся цепочке.
И сколько блоков ты намайнишь 3-мя асиками?

Из двух цепочек берем ту, в которой средняя сложность блока выше. Количество блоков достаточно большое, например, 10000. И последние блоки в цепочке должны соответствовать текущему времени.
Какова вероятность намайнить такую цепочку?

Алгоритм для трех асиков:
Сделать начальный блок с далекой будущей датой.
Записать туда большую сложность, надеясь, что когда мы доживем до этой будущей даты, сложность в  основной будет меньше.
Намайнить 10000 блоков.
Когда подойдет время, попробовать подсунуть эту цепочку кому-то.
Чтобы надуть кого-то, нужно еще найти несколько блоков с такой же скоростью, что и основная цепочка.

p/s/ Чтобы намайнить 10000 блоков с нынешней сложностью, примерный порядок цифр:
 12,5btc*10000*5000$ = 625млн$
С большей сложностью, соответственно, еще больше.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: amaclin1 on May 07, 2019, 08:34:26 AM
Причем тут отрезанная сложность. Важна сложность в оставшейся цепочке.
Это сразу же мина замедленного действия - награда за блок уменьшается, хэшрейт
уменьшается, сложность падает. В какой-то момент затраты на создание альтернативной
цепочки из 10к блоков (с учетом того, что их можно начинать майнить загодя) становятся
допустимыми для атаки. Или вы думаете что при неизменной цене биткойна и халвингах
хэшрейт будет продолжать расти как на дрожжах?

Будем играть в Сатанинскую бутылку (https://www.ozon.ru/context/detail/id/8466619/?gclid=CjwKCAjw2cTmBRAVEiwA8YMgzYewR09OHsMze79u_k3YEEi6gFO_SgFYhhBvadYoWyHUtXQjNLIdOBoCJHUQAvD_BwE)?
Впрочем, мы в нее и так играем, просто изменение правил консенсуса сделает финал более очевидным.

p/s/ Чтобы намайнить 10000 блоков с нынешней сложностью, примерный порядок цифр:
 12,5btc*10000*5000$ = 625млн$
С большей сложностью, соответственно, еще больше.
Вот ни грамма не смущает. Хотите знать что я сделаю? Это будет веселуха.

Я распространю информацию, что начал создавать цепочку блоков заданной сложности
начиная от 01.01.2024 (ну то есть взял себе 5 лет люфта). Блоки будут создаваться с
разницей в таймстампах 1 секунда друг от друга. Фактически, это означает, что если
моя информация правда - то с ненулевой вероятностью биткойну 01.01.2024 придет пиздец -
весь баланс блокчейна будет у меня. Правда это или нет - вы сегодня не знаете, единственным
разумным поведением для вас - будет слить свои биткойны до 01.01.2024 чтобы не рисковать.
И если так поступят все (или многие), то затея удалась!


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: fxpc on May 07, 2019, 09:34:47 AM
Будем играть в Сатанинскую бутылку (https://www.ozon.ru/context/detail/id/8466619/?gclid=CjwKCAjw2cTmBRAVEiwA8YMgzYewR09OHsMze79u_k3YEEi6gFO_SgFYhhBvadYoWyHUtXQjNLIdOBoCJHUQAvD_BwE)?
Впрочем, мы в нее и так играем, просто изменение правил консенсуса сделает финал более очевидным.

Замечательная аналогия, но лучше сразу ссылаться на сам парадокс.
https://ru.wikipedia.org/wiki/Парадокс_сатанинской_бутылки_Стивенсона


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 07, 2019, 10:40:55 AM
Причем тут отрезанная сложность. Важна сложность в оставшейся цепочке.
Это сразу же мина замедленного действия - награда за блок уменьшается, хэшрейт
уменьшается, сложность падает. В какой-то момент затраты на создание альтернативной
цепочки из 10к блоков (с учетом того, что их можно начинать майнить загодя) становятся
допустимыми для атаки. Или вы думаете что при неизменной цене биткойна и халвингах
хэшрейт будет продолжать расти как на дрожжах?
То, что затраты уменьшатся, это еще бабушка надвое сказала. Если уменьшатся, то это будет проблемой и без обрезания блокчейна.
Мы вроде смотрим на то, что изменится именно из-за обрезания блокчейна.
Quote
p/s/ Чтобы намайнить 10000 блоков с нынешней сложностью, примерный порядок цифр:
 12,5btc*10000*5000$ = 625млн$
С большей сложностью, соответственно, еще больше.
Вот ни грамма не смущает. Хотите знать что я сделаю? Это будет веселуха.

Я распространю информацию, что начал создавать цепочку блоков заданной сложности
начиная от 01.01.2024 (ну то есть взял себе 5 лет люфта). Блоки будут создаваться с
разницей в таймстампах 1 секунда друг от друга. Фактически, это означает, что если
моя информация правда - то с ненулевой вероятностью биткойну 01.01.2024 придет пиздец -
весь баланс блокчейна будет у меня. Правда это или нет - вы сегодня не знаете, единственным
разумным поведением для вас - будет слить свои биткойны до 01.01.2024 чтобы не рисковать.
И если так поступят все (или многие), то затея удалась!
О чем ты.:) Объявишь, и все испугаются.  Это можно объявить и сейчас, что-то никто не пугается.
Для начала тебе надо предъявить полмиллиарда долларов.

10000 блоков - это же для примера. Можно рассчитать, какой длины должна быть цепочка, чтобы затраты на его создание превышали определенный тобой же уровень.

В тайстампах 1 сек? - через 2016(вроде так) блоков сложность у тебя взлетит, мама не горюй.
Не понял, зачем таймстампы 1 сек.?

Кроме того, чтобы сделать цепочку за 5 лет,тебе еще нужно поддерживать.
Что собираешься делать с этой цепочкой. Ты даже не сможешь отправить ни одной транзакции с 6-ю подтверждениями, чтобы кого-то надуть. Она устареет быстрее.



Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: amaclin1 on May 07, 2019, 10:54:01 AM
О чем ты.:) Объявишь, и все испугаются.  Это можно объявить и сейчас, что-то никто не пугается.
Для начала тебе надо предъявить полмиллиарда долларов.
Окей, объявлю не я, а Роджер Вер. Или Уоррен Баффет. Им поверите?
Обратите внимание, что предъявлять полмиллиарда надо, а что-либо
делать - совсем не обязательно.

Quote
В тайстампах 1 сек? - через 2016(вроде так) блоков сложность у тебя взлетит, мама не горюй.
Не понял, зачем таймстампы 1 сек.?
Да, пожалуй, это лишнее. Буду 10-минутные интервалы клепать. Точнее, скажу, что буду.

Quote
Кроме того, чтобы сделать цепочку за 5 лет,тебе еще нужно поддерживать.
Еще раз повторяю - сама ситуация, что кто-то может взломать систему приводит к недоверию
к системе и её краху. Вы отказываетесь от основополагающего принципа кумулятивной
сложности начиная от генезис-блока и думаете, что это не отразится на безопасности?


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 07, 2019, 11:32:25 AM
О чем ты.:) Объявишь, и все испугаются.  Это можно объявить и сейчас, что-то никто не пугается.
Для начала тебе надо предъявить полмиллиарда долларов.
Окей, объявлю не я, а Роджер Вер. Или Уоррен Баффет. Им поверите?
Обратите внимание, что предъявлять полмиллиарда надо, а что-либо
делать - совсем не обязательно.
Им поверю. Только вероятность того, чтоб объявят , крайне низкая. Смысла никакого нет. Все равно где-то будут полные копии блокчейнов.
Делать то тоже ничего не надо. Всего-то поставить стоп-кран на то, что блокчейн поменялся, и подождать некоторое время, когда он вернется назад. Стоит это того, чтобы не держать весь блокчейн, или нет, решать каждому.
Quote
Quote
Кроме того, чтобы сделать цепочку за 5 лет,тебе еще нужно поддерживать.
Еще раз повторяю - сама ситуация, что кто-то может взломать систему приводит к недоверию
к системе и её краху. Вы отказываетесь от основополагающего принципа кумулятивной
сложности начиная от генезис-блока и думаете, что это не отразится на безопасности?
Безопасность будет меньше, я с этим не спорю. Если при этом уровень безопасности останется достаточны высоким, то почему бы не делать. Это же вечный компромисс, между уровнем безопасности и затратами на безопасность. Начиная с какого уровня безопасности дальнейшие затраты на увеличение безопасности становятся бессмысленными.

Представим, у меня 10btc. И кто-то выкинет полмиллиарда долларов, чтобы даже не забрать эти средства, а просто попугать меня. И  вероятность это события должна меня заставить делать какие-то подвижки.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: amaclin1 on May 07, 2019, 11:51:23 AM
Им поверю.
Это ненормальная ситуация. Кто-то верит одним, кто-то другим, кто-то вообще никому не верит.
И проблема (я опять повторю!) не в том, что вы лично (не)поверили мне или Баффету.
Проблема для вас лично в том, что поверит или нет кто-то рядом с вами, а вас это коснется.

Quote
Представим, у меня 10btc. И кто-то выкинет полмиллиарда долларов, чтобы даже не забрать
эти средства, а просто попугать меня. И  вероятность это события должна меня заставить делать
какие-то подвижки.
Да не будет никто выкидывать! Баффет поспорит с Гейтсом на 100 баксов, что биткойн сдуется.
(100 баксов - цифра несущественная ни для того, ни для другого) и проведет "операцию", как
в свое время Сорос играл против Банка Англии. В результате простейшей манипуляции - они
порезвятся, а вы выйдете в окно. Вот ради чего?


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 07, 2019, 12:42:09 PM
Quote
Представим, у меня 10btc. И кто-то выкинет полмиллиарда долларов, чтобы даже не забрать
эти средства, а просто попугать меня. И  вероятность это события должна меня заставить делать
какие-то подвижки.
Да не будет никто выкидывать! Баффет поспорит с Гейтсом на 100 баксов, что биткойн сдуется.
(100 баксов - цифра несущественная ни для того, ни для другого) и проведет "операцию", как
в свое время Сорос играл против Банка Англии. В результате простейшей манипуляции - они
порезвятся, а вы выйдете в окно. Вот ради чего?
Если не будет выкидывать, зачем беспокоиться? :)

Это из серии, что Баффет поспорит с Гейтсом, что биткоин сдуется. И скажет, что проведет атаку 51%. Уровень затрат тот  же самый.
Возможные последствия для Биткоина такие же, если не хуже.  И такая "опасность" уже сейчас существует. Она даже более реальная, чем атака на обрезанный блокчейн. Но вроде никто по этому поводу особо не беспокоится.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: GGUL on May 07, 2019, 01:03:20 PM
Им поверю.
Это ненормальная ситуация. Кто-то верит одним, кто-то другим, кто-то вообще никому не верит.
И проблема (я опять повторю!) не в том, что вы лично (не)поверили мне или Баффету.
Проблема для вас лично в том, что поверит или нет кто-то рядом с вами, а вас это коснется.
Что значит, ненормально. Есть два события. Одно то, что Баффет объявит что-то подобное. Вероятность близка к нулю.
Второе событие. То, что Баффет после объявления, сделает это.
Какие у меня причины, чтобы считать вероятность второго события равной нулю. Средства есть, слово на весь мир дал. :)

Quote
Представим, у меня 10btc. И кто-то выкинет полмиллиарда долларов, чтобы даже не забрать
эти средства, а просто попугать меня. И  вероятность это события должна меня заставить делать
какие-то подвижки.
Да не будет никто выкидывать! Баффет поспорит с Гейтсом на 100 баксов, что биткойн сдуется.
(100 баксов - цифра несущественная ни для того, ни для другого) и проведет "операцию", как
в свое время Сорос играл против Банка Англии. В результате простейшей манипуляции - они
порезвятся, а вы выйдете в окно. Вот ради чего?
Если не будет выкидывать, зачем беспокоиться? :)

Это из серии, что Баффет поспорит с Гейтсом, что биткоин сдуется. И скажет, что проведет атаку 51%. Уровень затрат тот  же самый.
Возможные последствия для Биткоина такие же, если не хуже.  И такая "опасность" уже сейчас существует. Она даже более реальная, чем атака на обрезанный блокчейн. Но вроде никто по этому поводу особо не беспокоится.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on May 08, 2019, 12:29:34 AM
По всей видимости, для надёжности дамп также должен содержать цепочку заголовков блоков, начиная от GENESIS-блока. На текущий момент высота последнего блока в блокчейне Bitcoin равна примерно 575000, то есть, поскольку размер заголовка составляет 80 байт, эта цепочка займёт в дампе около 44 мегабайт и будет увеличиваться, как указал сам Сатоши Накамото в описании Bitcoin, на 4.2 мегабайта в год. В общем, не много.

Таким образом, клиент, скачавший список непотраченных выходов UTXO транзакций Bitcoin, сможет оценить примерную кумулятивную сложность майнинга всего блокчейна.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on May 11, 2019, 04:01:32 AM
Мой пост на первой (https://bitcointalk.org/index.php?topic=5138639.0) странице был обновлён.

В структуру дампа была добавлена таблица "Список заголовков блоков", фактически являющаяся цепочкой заголовков.

В связи с этим, из структуры дампа были убраны поля:
  • порядковый номер последнего блока в блокчейне
  • хеш SHA256D последнего блока в блокчейне
  • текущая таргетированная сложность майнинга

Все эти значения клиент, скачавший список непотраченных выходов UTXO транзакций Bitcoin, сможет вычислить самостоятельно, исходя из новой таблицы.



Кстати, вовсе не обязательно записывать цепочку заголовков блоков именно с GENESIS-блока. Сложность майнинга на раннем этапе Bitcoin была минимальной, поэтому первые блоки в любом случае несущественно влияют на кумулятивную сложность майнинга всего блокчейна. В принципе, это не актуально для Bitcoin, но может иметь значение для других криптовалют, в которых блоки добавляются в блокчейн достаточно часто.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: mig38 on May 11, 2019, 08:37:16 PM
Вы бы реализацию в коде бы выкладывали на гитхаб - цены бы вам не было.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: mig38 on May 12, 2019, 12:27:42 PM
Ещё подскажу идей:

1. Нарезка на равные чанки, скажем, сутки, месяц, год.

2. использовать деревья Меркла и брать корневой хэш для чанка вцелом для верификации блока из раннего чанка.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: neiros on May 12, 2019, 01:37:35 PM

Да, несомненно, это централизованное решение.

Антагонизм централизованных решений безрезультатен.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on August 31, 2019, 04:14:00 AM
В разделе "Идеи" недавно была затронута тема про автооптимизацию (https://bitcointalk.org/index.php?topic=5178621.0) блокчейна, поэтому была проведена ревизия описанного здесь способа отсечения старых блоков в блокчейне Bitcoin.


2. Список непотраченных выходов UTXO:
1) Структура выхода 1:
  • Bitcoin-адрес
  • выходной скрипт
  • количество монет BTC на выходе
  • порядковый номер транзакции согласно списку выше
  • порядковый номер выхода в этой транзакции
2) Структура выхода 2
...

Я думаю, что поле "Bitcoin-адрес" во второй таблице "Список непотраченных выходов UTXO" абсолютно не требуется, так как этот адрес уже содержится в выходном скрипте транзакции. Более того, скрипты могут иметь разные форматы, отличные от PAY-TO-PUB-KEY-HASH, в том числе мультисигнатурные. Поэтому поле "Bitcoin-адрес" было убрано из общей структуры, дабы не загромождать дамп ненужными данными, не занимать лишнее место на носителях информации и не тратить впустую ресурсы при вычислении хеша SHA256 скаченного файла.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: crypto_trader#43xzEXrP on September 09, 2019, 01:11:10 AM
На мой взгляд, актуальным вопросом для 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-транзакции. К тому же, для полной ноды не будет необходимости скачивать опубликованный дамп, поскольку такой файл она сможет создать самостоятельно по заданному алгоритму.

Я бы ещё добавил, как третий способ - некую абстракную валидацию списка - самими нодами (https://bitcointalk.org/index.php?topic=5178621.0).
Ведь на нодах уже есть полный блокчейн.
Так почему бы на нодах этих, не пропарсить блокчейн, и список этот - не перегенерировать, с перерасчётом хэшей и проверкой их?
Подписывать, и переподписывать (после проверки) (https://bitcointalk.org/index.php?topic=5138639.msg50916143#msg50916143), тоже можно на нодах -
приватным ключём самих нод, при известных их адресах.
Более того, ноды, как владельцы этих адресов, они - по умолчанию "доверенные лица" (с них же блокчейн и выкачивается).
Ну и орфанить, если инвалид - тоже можно автоматически, на нодах. Вот вам и консенсус.



Какая там была вероятность создания альтернативной цепочки из 6 блоков, если майнеров меньше 50%?
x^(-6) = 1 / (x^6); где x - [Вероятность найти блок в solo, при текущей сложности], ^ - возведение в степень.



По всей видимости, для надёжности дамп также должен содержать цепочку заголовков блоков, начиная от GENESIS-блока. На текущий момент высота последнего блока в блокчейне Bitcoin равна примерно 575000, то есть, поскольку размер заголовка составляет 80 байт, эта цепочка займёт в дампе около 44 мегабайт и будет увеличиваться, как указал сам Сатоши Накамото в описании Bitcoin, на 4.2 мегабайта в год. В общем, не много.

Таким образом, клиент, скачавший список непотраченных выходов UTXO транзакций Bitcoin, сможет оценить примерную кумулятивную сложность майнинга всего блокчейна.
Вот эта идея, сразу же, разрешает вопрос о различных всевозможных фальсификациях в дампе, всякими там "доверенными лицами".
Просто проверка сложности по хэшам из заголовков, и орфаны - по сложности, а не по длине блокчейна.
И места немного. Как и писал сам Сатоши, в PDF-ке своей (https://bitcoin.org/files/bitcoin-paper/bitcoin_ru.pdf), в главе 7.
Да даже если взять блок-цепочку какого-нибудь ZetaCoin (https://chainz.cryptoid.info/zet/)'a, с его 11-ю миллионами блоков...
Хранить заголовки будет лучше, чем хранить весь этот - блокчейн. ;D


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: zidansz on September 11, 2019, 06:09:56 PM
Хочу заметить что какой либо способ удаления "устаревшей" информации из блокчейна криптовалют подставит под удар возможность создания форков.
Если бы допустим разработчики эфира быстро отреагировали на уязвимость DAO и выпустили патч раньше чем сообщество отреагировало и запустило эфир классик, а эфир бы "чистил" блокчейн, то у той части которая была бы несогласна с изменениями не было бы возможности форкнуть ефир.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: crypto_trader#43xzEXrP on September 12, 2019, 02:38:39 PM
Хочу заметить что какой либо способ удаления "устаревшей" информации из блокчейна криптовалют подставит под удар возможность создания форков.
Если бы допустим разработчики эфира быстро отреагировали на уязвимость DAO и выпустили патч раньше чем сообщество отреагировало и запустило эфир классик, а эфир бы "чистил" блокчейн, то у той части которая была бы несогласна с изменениями не было бы возможности форкнуть ефир.
Теоретически, форки блокчейна возможны с любого блока,
учитывая отсутствие центра в децентрализванной сети, то есть - её ячеистую структуру.

Смотри картинку:
https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Blockchain.svg/320px-Blockchain.svg.png

Ну и... Как результат... Последующая обработка каждого форка,
может происходить по-разному, в разных, несвязанных сегментах сети.

Однако, в случае коннекта этих несвязанных сегментов сети,
один блокчейн обязательно должен быть подвержен оверрайду - в пользу другого.
Именно эта идея Сатоши Накамото (https://bitcoin.org/files/bitcoin-paper/bitcoin_ru.pdf) - принципиально исключает
возможность двойных трат в децентрализованной сети.
Ведь так как блокчейн един, то транзакция в нём либо есть, либо её нет.

Но, пока сегменты не связаны, форки блокчейна (разные ветки),
они могут существовать, как не в чём не бывало.
Там - такой эфир, а там - такой, и он тоже вполне себе такой же - эфир.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: zidansz on September 13, 2019, 10:39:01 PM
я не имел ввиду форки которые возникают как следствие конкурентного майнинга
привел как пример эфир классик и эфир

При удалении информации из старых блоков есть потенциал ситуации когда форкнуть криптовалюту будет затруднительно


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: crypto_trader#43xzEXrP on September 14, 2019, 12:11:35 PM
я не имел ввиду форки которые возникают как следствие конкурентного майнинга
привел как пример эфир классик и эфир

При удалении информации из старых блоков есть потенциал ситуации когда форкнуть криптовалюту будет затруднительно
Ну смотри, взять эфир, допустим. У него сейчас более 8500000 блоков в блокчейне.
Так вот, есть у тебя цепочка блоков от 1-го до 8500000-го.
Ты берёшь его, парсишь, извлекаешь оттуда все адреса, имеющие неизрасходованные выходы, монеты, токены всякие.
И создаёшь новый блокчейн. В самых первых блоках - распределяешь все монеты и токены по этим вот всем адресам.
В итоге плучается 100-200 блоков, идущих подряд, где просто начисления идут на эти адреса.
Всё. Никаких старых транзакций. Все балансы всех держателей - на месте. Длина блокчейна 200 блоков.
Синхронизация - быстрая. Раздача - не требует много трафика.
Майнинг с 200-го блока аж до 8500200-го, может проходить как и прежде, причём ещё лет 5.
Ну и форкнуть блокчейн можно на любом блоке, после этого.

Если всё это дело автоматизировать на нодах, и внедрить туда валидацию через и проверки хэшей,
то можно было бы сделать такую оптимизацию - автоматической,
заменяя старый блокчейн новым, содержащим ссылку на старый,
после "признания" этого нового блокчейна, и проверки его -
и делая это, в результате консенсуса, как автообновление - во всей децентрализованной сети.

Что касается хардфорка ETH - ETC, то это тоже, по сути своей - форк блокчейна, то есть - отдельная ветка, как и на картинке выше,
но, пролжающаяся...
Quote
Разделение сетей состоялось в 2016, когда на блоке N1900000 две ветви создали точку отсчета, после которой каждая пошла своим путем. Каждый, кто на тот момент владел монетами ETH, получил монеты ETC по курсу 1 к 1.

И если ты хотел сказать то, что в случае удаления старых транзакций в блокчейне,
допустим с 1-го до 5000000-го блока, этот форк нельзя было бы прогрузить сейчас...
То... Можно!
Можно же, в первый блок просто - засунуть magnet-ссылку (https://ru.wikipedia.org/wiki/Magnet-ссылка),
на файл архива, содержащего предыдущие 5 000 000 блоков,
И если их нет, но они требуются, то выгрузить их по этой магнет-ссылке, из p2p-сети torrent,
какого-нибудь хранилища в датацентре, из облачных хостингов, из самой децентрализованной сети,
а лучше - из закриптованного децентрализированного хранилища, вроде SiaCoin (https://bitcointalk.org/index.php?topic=1060294.0),
где майнинг происходит - жесткими дисками.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: Coin-1 on September 17, 2019, 06:09:39 PM
И если ты хотел сказать то, что в случае удаления старых транзакций в блокчейне,
допустим с 1-го до 5000000-го блока, этот форк нельзя было бы прогрузить сейчас...
То... Можно!
Можно же, в первый блок просто - засунуть magnet-ссылку (https://ru.wikipedia.org/wiki/Magnet-ссылка),
на файл архива, содержащего предыдущие 5 000 000 блоков,
И если их нет, но они требуются, то выгрузить их по этой магнет-ссылке, из p2p-сети torrent,
какого-нибудь хранилища в датацентре, из облачных хостингов, из самой децентрализованной сети,
а лучше - из закриптованного децентрализированного хранилища, вроде SiaCoin (https://bitcointalk.org/index.php?topic=1060294.0),
где майнинг происходит - жесткими дисками.

Я тоже думаю, что весь блокчейн должен хоститься на полных нодах или в специализированных хранилищах данных, чтобы данные можно было в любое время скачать, перепроверить, начиная с GENESIS-блока, или посмотреть историю транзакций по каждому Bitcoin-адресу. В общем-то, эксплореры блокчейнов на базе вебсайтов в какой-то мере сейчас выполняют эту функцию, но информация, которую они предоставляют, должна быть достоверной и, самое главное, проверяемой.

Хеш дампа списка всех непотраченных выходов транзакций UTXO, включённый во входящий скрипт COINBASE-транзакции, я здесь рассматриваю как дополнение к технологии, выражающееся в том, что обычные пользователи имеют возможность максимально надёжно совершать транзакции и отправлять монеты BTC без скачивания всего блокчейна:

Речь идёт об альтернативных способах хранения текущих состояний адресов пользователей криптовалют для клиентских решений.


Title: Re: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe
Post by: zidansz on September 18, 2019, 10:47:24 PM
И если ты хотел сказать то, что в случае удаления старых транзакций в блокчейне,
допустим с 1-го до 5000000-го блока, этот форк нельзя было бы прогрузить сейчас...
То... Можно!
Можно же, в первый блок просто - засунуть magnet-ссылку (https://ru.wikipedia.org/wiki/Magnet-ссылка),
на файл архива, содержащего предыдущие 5 000 000 блоков,
И если их нет, но они требуются, то выгрузить их по этой магнет-ссылке, из p2p-сети torrent,
какого-нибудь хранилища в датацентре, из облачных хостингов, из самой децентрализованной сети,
а лучше - из закриптованного децентрализированного хранилища, вроде SiaCoin (https://bitcointalk.org/index.php?topic=1060294.0),
где майнинг происходит - жесткими дисками.

ну тогда это уже не удаление, а скорее что то вроде архивации, бэкапа...

я вообще ничего не имею даже против удаления - по сути блокчейн ничего не потеряет если хранить только допустим UTXO + 1 предыдущая транзакция

только блокчейн с приложениями например к примеру может иметь кейсы в которых будет уместно сделать форк с более раннего состояния

в принципе сделать что то вроде "удаления" = "архивированию", с выбором на усмотрение пользователей
можно хранить частично - допустим указывая срок или "глубину" от UTXO, делает например разработчик криптовалюты или приложения изменения - пользователи хранят блокчейн на случай отката до более раннего состояния