Bitcoin Forum
November 10, 2024, 03:22:01 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2]  All
  Print  
Author Topic: Cпocoбы oтceчeния cтapыx блoкoв в блoкчeйнe  (Read 571 times)
Coin-1 (OP)
Legendary
*
Offline Offline

Activity: 2618
Merit: 2304



View Profile
May 11, 2019, 04:01:32 AM
 #21

Мой пост на первой странице был обновлён.

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

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

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



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

Activity: 46
Merit: 0


View Profile
May 11, 2019, 08:37:16 PM
 #22

Вы бы реализацию в коде бы выкладывали на гитхаб - цены бы вам не было.
mig38
Newbie
*
Offline Offline

Activity: 46
Merit: 0


View Profile
May 12, 2019, 12:27:42 PM
 #23

Ещё подскажу идей:

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

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

Activity: 3556
Merit: 1100



View Profile WWW
May 12, 2019, 01:37:35 PM
 #24


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

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

Coin-1 (OP)
Legendary
*
Offline Offline

Activity: 2618
Merit: 2304



View Profile
August 31, 2019, 04:14:00 AM
 #25

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


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

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

Activity: 1588
Merit: 214


View Profile
September 09, 2019, 01:11:10 AM
Last edit: September 12, 2019, 02:48:00 PM by crypto_trader#43xzEXrP
Merited by Coin-1 (1)
 #26

На мой взгляд, актуальным вопросом для 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-ю миллионами блоков...
Хранить заголовки будет лучше, чем хранить весь этот - блокчейн. Grin

STOP RUSSIAN INVASION OF UKRAINE - SUPPORT UKRAINIAN DEMOS
Contact me in TOX: 653D6C2D13B6DF22C4CB93432586398858A608EE5457624A9A728BE1A9252C5DA12B894C54DB, or just crypto-trader@toxme.io.
Also, WAVES - SCAM! ;(
zidansz
Full Member
***
Offline Offline

Activity: 165
Merit: 101


View Profile WWW
September 11, 2019, 06:09:56 PM
 #27

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

crypto_trader#43xzEXrP
Full Member
***
Offline Offline

Activity: 1588
Merit: 214


View Profile
September 12, 2019, 02:38:39 PM
 #28

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

Смотри картинку:


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

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

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

STOP RUSSIAN INVASION OF UKRAINE - SUPPORT UKRAINIAN DEMOS
Contact me in TOX: 653D6C2D13B6DF22C4CB93432586398858A608EE5457624A9A728BE1A9252C5DA12B894C54DB, or just crypto-trader@toxme.io.
Also, WAVES - SCAM! ;(
zidansz
Full Member
***
Offline Offline

Activity: 165
Merit: 101


View Profile WWW
September 13, 2019, 10:39:01 PM
 #29

я не имел ввиду форки которые возникают как следствие конкурентного майнинга
привел как пример эфир классик и эфир

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

crypto_trader#43xzEXrP
Full Member
***
Offline Offline

Activity: 1588
Merit: 214


View Profile
September 14, 2019, 12:11:35 PM
 #30

я не имел ввиду форки которые возникают как следствие конкурентного майнинга
привел как пример эфир классик и эфир

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

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

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

И если ты хотел сказать то, что в случае удаления старых транзакций в блокчейне,
допустим с 1-го до 5000000-го блока, этот форк нельзя было бы прогрузить сейчас...
То... Можно!
Можно же, в первый блок просто - засунуть magnet-ссылку,
на файл архива, содержащего предыдущие 5 000 000 блоков,
И если их нет, но они требуются, то выгрузить их по этой магнет-ссылке, из p2p-сети torrent,
какого-нибудь хранилища в датацентре, из облачных хостингов, из самой децентрализованной сети,
а лучше - из закриптованного децентрализированного хранилища, вроде SiaCoin,
где майнинг происходит - жесткими дисками.

STOP RUSSIAN INVASION OF UKRAINE - SUPPORT UKRAINIAN DEMOS
Contact me in TOX: 653D6C2D13B6DF22C4CB93432586398858A608EE5457624A9A728BE1A9252C5DA12B894C54DB, or just crypto-trader@toxme.io.
Also, WAVES - SCAM! ;(
Coin-1 (OP)
Legendary
*
Offline Offline

Activity: 2618
Merit: 2304



View Profile
September 17, 2019, 06:09:39 PM
 #31

И если ты хотел сказать то, что в случае удаления старых транзакций в блокчейне,
допустим с 1-го до 5000000-го блока, этот форк нельзя было бы прогрузить сейчас...
То... Можно!
Можно же, в первый блок просто - засунуть magnet-ссылку,
на файл архива, содержащего предыдущие 5 000 000 блоков,
И если их нет, но они требуются, то выгрузить их по этой магнет-ссылке, из p2p-сети torrent,
какого-нибудь хранилища в датацентре, из облачных хостингов, из самой децентрализованной сети,
а лучше - из закриптованного децентрализированного хранилища, вроде SiaCoin,
где майнинг происходит - жесткими дисками.

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

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

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

Activity: 165
Merit: 101


View Profile WWW
September 18, 2019, 10:47:24 PM
 #32

И если ты хотел сказать то, что в случае удаления старых транзакций в блокчейне,
допустим с 1-го до 5000000-го блока, этот форк нельзя было бы прогрузить сейчас...
То... Можно!
Можно же, в первый блок просто - засунуть magnet-ссылку,
на файл архива, содержащего предыдущие 5 000 000 блоков,
И если их нет, но они требуются, то выгрузить их по этой магнет-ссылке, из p2p-сети torrent,
какого-нибудь хранилища в датацентре, из облачных хостингов, из самой децентрализованной сети,
а лучше - из закриптованного децентрализированного хранилища, вроде SiaCoin,
где майнинг происходит - жесткими дисками.

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

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

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

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

Pages: « 1 [2]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!