Pages:
Author

Topic: Три ошибочных постулата Сатоши Накомото - page 8. (Read 2046 times)

legendary
Activity: 2317
Merit: 2318
Ну вот вы смотрите данные хекс редактором, а я читаю исходники.
О чем говорит эта строчка?
https://github.com/bitcoin/bitcoin/blob/master/src/validation.cpp#L3108
Code:
    if (block.vtx.empty() || block.vtx.size() * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT)
        return state.DoS(100, false, REJECT_INVALID, "bad-blk-length", false, "size limits failed");

По моему тут на чистом английском написано: блок не должен быть нулевым И размер всех транзакций в блоке * 4 должен быть меньше или равен 4 мегабайтам И размер блока на диске * 4 должен быть меньше или равен 4 мегабайтам.
Я что-то неправильно понимаю?

Имеем такие константы:
MAX_BLOCK_WEIGHT = 4000000
WITNESS_SCALE_FACTOR = 4

Вот это мне понятно:
::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT
В переводе на русский: Если из сериализованного блока выкинуть witness-данные, то его размер не должен превышать 4000000/4 = 1000000 байт.

Вот это мне непонятно:
block.vtx.size() * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT
vtx - вроде как имеет тип std::vector, значит метод size() возвращает количество элементов в векторе, а не общий занимаемый размер. Ну, короче, не понимаю смысл этой проверки.

Но это ещё не все проверки размера блока. Дальше видим:
Code:
if (GetBlockWeight(block) > MAX_BLOCK_WEIGHT) {
return state.DoS(100, false, REJECT_INVALID, "bad-blk-weight", false, strprintf("%s : weight limit failed", __func__));
где GetBlockWeight это:
Code:
return ::GetSerializeSize(block, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * (WITNESS_SCALE_FACTOR - 1) + ::GetSerializeSize(block, PROTOCOL_VERSION);

Тут уже всё понятно прописано, как в методичке:
Quote
Block size

Blocks are currently limited to 1,000,000 bytes (1MB) total size. We change this restriction as follows:

Block weight is defined as Base size * 3 + Total size. (rationale[3])

Base size is the block size in bytes with the original transaction serialization without any witness-related data, as seen by a non-upgraded node.

Total size is the block size in bytes with transactions serialized as described in BIP144, including base data and witness data.

The new rule is block weight ≤ 4,000,000.


То есть, правило такое: размер_блока_без_witness * 3 + полный_размер_блока < 4000000
legendary
Activity: 2618
Merit: 2304
Quote
3. Заголовок пустого блока будет составлять около 80 байт. Из расчета скорости генерации блока раз в десять минут получаем 80*6*24*365=4.2 Мб в год. Для среднестатистического на 2008 год компьютера с 2 Гб оперативной памяти с учетом закона Мура, предсказывающего рост на 1.2 Гб в год, хранение данных не будет проблемой, даже если все заголовки блоков будут находиться в памяти.

Наивно не правда ли )) ? Сатоши считает сколько места на диске занимают заголовки пустого блока. То есть он изначально рассчитывал, что
а) большинство блоков будут всегда пустые
б) большинство пользователей будут хранить только заголовки.

Реальность оказалась не такой.
В условиях ажиотажа блоки идут переполненные, а для настоящей децентрализации пользователям нужно хранить у себя блоки целиком. И тут нужно вспомнить историчекий факт: в первых версиях биткоина, максимальный размер блока был ограничен не 1 Мб как сейчас, а 30 Мб!
Теперь посчитаем, как должен был бы посчитать Сатоши если бы не хотел слукавить: 80*30*1048576*6*24*365 = 4.2 Мб в год 1540 Гб в год
Вот так вот: если бы Сатоши в момент написания своей статьи действительно верил в то, что биткоинами будет активно пользоваться весь мир, то он бы представил расчет где база блокчейна растет на 1.5 терабайта в год! Скорее всего он и вправду верил, но понимал, что такой расчет отпугнет от его системы чуть менее чем всех и потому посчитал немного по другому ))

Здесь в описании Bitcoin допущена не ошибка, а, скорее, недомолвка. Возможно, на момент написания bitcoin.pdf в 2008 году Сатоши Накамото считал блокчейном (то есть, цепочкой блоков) только заголовки блоков с MerkleRoot, которые связаны между собой через хеширование SHA256D, а транзакции предполагалось хранить отдельно. По факту block-chain Bitcoin является block-header-chain, то есть цепочкой заголовков блоков. Разумеется, каждая транзакция является неотъемлемой частью блока, без которой невозможно верифицировать весь блокчейн полностью.

В общем-то, Сатоши указал, что он в вычислениях имеет в виду хранение заголовков блоков, скорее, в оперативной памяти (in memory), поэтому я не считаю этот постулат ошибкой.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Транзакции записываются внутри блока.
Блок представляется в виде байтового потока (сериализуется) и записывается в виде последовательности байт в файл базы данных блоков (blk*.dat). Это легко проверить: внутри любого blk*.dat можно найти при помощи HEX-редактора сериализованный блок и обнаружить в нём транзакции с witness-данными. Если witness-данные оказываются внутри сериализованного блока, то как можно считать, что witness-данные - это не часть блока?


Ну вот вы смотрите данные хекс редактором, а я читаю исходники.
О чем говорит эта строчка?
https://github.com/bitcoin/bitcoin/blob/master/src/validation.cpp#L3108
Code:
    if (block.vtx.empty() || block.vtx.size() * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT)
        return state.DoS(100, false, REJECT_INVALID, "bad-blk-length", false, "size limits failed");

По моему тут на чистом английском написано: блок не должен быть нулевым И размер всех транзакций в блоке * 4 должен быть меньше или равен 4 мегабайтам И размер блока на диске * 4 должен быть меньше или равен 4 мегабайтам.
Я что-то неправильно понимаю?
legendary
Activity: 2317
Merit: 2318
Ну вот и получаем: блоки хранятся вместе с непотраченными входами. Все непотраченные входы лежат на моем диске вне зависимости от прунинга. Сатоши сказал: блоки с потраченными входами весят 80 байт. Это он хорошо сказал... Только Сатоши забыл посчитать: а сколько будет НЕпотраченных входов? Даже примерно не прикинул, но мы можем сейчас это увидеть экспериментально. И вот в суровой реальности никак 80 байт на блок не получается, ни при каком прунинге.

Согласен. Действительно 80 байт на блок не выходит. Но это не означает, что Накамото полагал что большинство блоков будут пустыми. Это означает, что он ошибся в оценке количества непотраченных выходов и зависимости этого количества от времени.

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

Ну, вот такое допущение сделал Накамото. В конце концов, он не позиционировал Bitcoin в качестве конкурента Visa по количеству транзакций в секунду. Все делают допущения в условиях недостатка информации. Вы, когда оценивали рост блокчейна в 1.5 ТБ в год, тоже сделали допущение, что все 30-мегабайтные блоки должны быть заполнены под завязку. А как оно на самом деле было бы при таких размерах блока - неизвестно.

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

Witness-данные записываются внутри транзакций.
Транзакции записываются внутри блока.
Блок представляется в виде байтового потока (сериализуется) и записывается в виде последовательности байт в файл базы данных блоков (blk*.dat). Это легко проверить: внутри любого blk*.dat можно найти при помощи HEX-редактора сериализованный блок и обнаружить в нём транзакции с witness-данными. Если witness-данные оказываются внутри сериализованного блока, то как можно считать, что witness-данные - это не часть блока?

Я самолично сейчас обнаружил двухмегабайтный блок 00000000000000000015700c792c59cda0380d5e3c3e16ba555cc3cfd6d6bb7d внутри файла blk01590.dat. И он таки реально занимает место на диске больше 2МБ.
И разработчики Bitcoin Core с этим размером согласны:
Code:
getblock 00000000000000000015700c792c59cda0380d5e3c3e16ba555cc3cfd6d6bb7d
{
  "hash": "00000000000000000015700c792c59cda0380d5e3c3e16ba555cc3cfd6d6bb7d",
  "confirmations": 3485,
  "strippedsize": 565164,
  "size": 2297675,
  "weight": 3993167,
  "height": 570816,

О чём мы спорим? О том что размер блока не может превышать 1 МБ? Ну так, вот вам блок, он на вашем диске тоже занимает 2297675 байт. И все эти 2297675  байт передадутся по сети другому SegWit-совместимому клиенту, когда он будет запрашивать блоки.

Quote
Хорошее описание, из которого я теперь окончательно понял следующее: witness данные транзакций в блок не пишутся ))

Но Холмс, как вы пришли к этому умозаключению?
legendary
Activity: 3556
Merit: 1100
Quote
То есть вы хотите сказать. что есть тру-блоки, а есть "неполноценные"?

Да. Полноценными блоками обмениваются SegWit-совместимые клиенты, а старым клиентам подсовываются блоки, в которых из транзакций вырезан witness.

Далёк я немного от SegWit, конечно, считаю его тупиковым путем развития и стараюсь не забивать голову всякой чепухой, но чего-то вы тут намудрили, похоже. Хеш (id) транзакций не может быть разным для старых и новых клиентов. От этого же зависит и хеш дерева Меркла и, соответственно, хеш самого блока. Транзакции для всех клиентов должны быть одинаковыми. А вот как уже эти клиенты интерпретируют для себя эти транзакции, тут другой вопрос.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Есть база данных блоков - bitcoin/blocks, к ней применяется прунинг и размер этой базы подгоняется под параметр prune=2000.
Есть база данных непотраченных выходов (UTXO) - .bitcoin/chainstate, к ней прунинг не применяется, она может расти или уменьшаться в зависимости от текущего количества UTXO в сети.

Вы берёте и сваливаете в одну кучу размер базы, к которой применяется прунинг и размер базы, к которой прунинг не применяется. Получаете результат, который не соответствует вашему prune=2000. Всё логично.

Ну вот и получаем: блоки хранятся вместе с непотраченными входами. Все непотраченные входы лежат на моем диске вне зависимости от прунинга. Сатоши сказал: блоки с потраченными входами весят 80 байт. Это он хорошо сказал... Только Сатоши забыл посчитать: а сколько будет НЕпотраченных входов? Даже примерно не прикинул, но мы можем сейчас это увидеть экспериментально. И вот в суровой реальности никак 80 байт на блок не получается, ни при каком прунинге.

Вы до сих пор не ответили, в каком астрале хранятся witness-данные транзакций, если они, по-вашему, хранятся не в блоках.

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

Что касается хеша блока, я уже говорил:
1. Транзакции в новом формате, включающий в себя witness, хешируются при помощи дерева Меркла, и корневой хеш помещается в один из выходов coinbase-транзакции.
2. Coinbase-транзакция вместе с остальными транзакциями, но уже в старом формате (без witness) хешируются при помощи дерева Меркла и корневой хеш помещается в параметр merkleroot заголовка блока.
3. Ну, а заголовок блока, включающий в себя merkleroot, принимает участие в вычислении хеша блока.
Таким образом, хеш блока зависит, в том числе, и от witness-данных транзакций.

Хорошее описание, из которого я теперь окончательно понял следующее: witness данные транзакций в блок не пишутся ))

legendary
Activity: 2317
Merit: 2318
На самом деле прунинг реализованный в биткоине очень похож на то, что описывал Сатоши. Бесследно старые блоки не удаляются и размер базы прунинга не равен тому. который вы задаете в параметре prune.
Я задал prune=2000 и сейчас у меня база биткоина (.bitcoin/blocks + .bitcoin/chainstate) занимает 5 гигов. Сами догадаетесь почему так или надо разжевывать?

А чего тут догадываться? Кручу-верчу запутать хочу, как говорили напёрсточники во времена оны.

Есть база данных блоков - bitcoin/blocks, к ней применяется прунинг и размер этой базы подгоняется под параметр prune=2000.
Есть база данных непотраченных выходов (UTXO) - .bitcoin/chainstate, к ней прунинг не применяется, она может расти или уменьшаться в зависимости от текущего количества UTXO в сети.

Вы берёте и сваливаете в одну кучу размер базы, к которой применяется прунинг и размер базы, к которой прунинг не применяется. Получаете результат, который не соответствует вашему prune=2000. Всё логично.

что никак не доказывает, что новые клиенты хранят witness где-то там отдельно, как вы сказали "Эта часть записывается за пределами блока".

Уверены в этом?  Wink

Вах! Мамой клянус, да?
Вы придумали себе какое-то таинственное место, где хранятся witness-данные транзакций, а доказать существование этого места не в состоянии.

Code:
getblock 00000000000000000015700c792c59cda0380d5e3c3e16ba555cc3cfd6d6bb7d 0
она вам выдаст ...

... выдаст фотографию голой тетки в трусах. Но голая тетка в трусах это не голая тетка, как ни странно ))

Голая тётка - это я понимаю, а где хранятся отдельно от блоков witness-данные транзакций - это я не понимаю.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Прунинг работает так: вы задаёте фиксированный размер хранилища блоков опцией командной строки -prune=. Это фиксированный размер, сколько зададите - столько и будет занимать места на диске база блоков (но не меньше 550МБ). И эта база не будет расти со временем, старые блоки автоматически будут удаляться, чтобы выдерживать целевой размер базы.

Размер этой базы никак не зависит от количества потраченных выходов (вы его сами задаёте). Реально реализованный механизм прунинга не имеет никакого отношения к тому, что писал Накамото в разделе "7. Экономия дискового пространства". Поэтому, ваша фраза "при размере всего блокчейна 200 гиг, в режиме прунига он весит 2 гиг" не имеет никакого смысла.


На самом деле прунинг реализованный в биткоине очень похож на то, что описывал Сатоши. Бесследно старые блоки не удаляются и размер базы прунинга не равен тому. который вы задаете в параметре prune.
Я задал prune=2000 и сейчас у меня база биткоина (.bitcoin/blocks + .bitcoin/chainstate) занимает 5 гигов. Сами догадаетесь почему так или надо разжевывать?

Старым клиентам новые клиенты дают урезанные неполноценные блоки, влезающие в 1МБ,

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


что никак не доказывает, что новые клиенты хранят witness где-то там отдельно, как вы сказали "Эта часть записывается за пределами блока".

Уверены в этом?  Wink

Code:
getblock 00000000000000000015700c792c59cda0380d5e3c3e16ba555cc3cfd6d6bb7d 0
она вам выдаст ...

... выдаст фотографию голой тетки в трусах. Но голая тетка в трусах это не голая тетка, как ни странно ))


Хорошо. Возьмем Ваш пример с "настоящей децентрализацией", где нет spv-кошельков.
"В результате вспышки на Солнце, навсегда отвалилось 100% майнеров и 100% фулл нод.
Вопрос: когда сеть биткоина восстановит свою работу?"
Результат такой же.

Ответ неверный ))
Если останется хотя бы одна фулл нода, то восстановить нормальную работу сети можно будет хардфорком, который стряпается за пару часов.


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

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

Децентрализация и криптовалюта это вещи перпендикулярные: один раз пересеклись и все.
Хотим говорить про децентрализацию интернет платежей - обсуждаем криптовалюту. Хотим говорить про децентрализацию как технологию в целом - обсуждаем все возможные решения.

Если мы с разных точек подключаемся к одному серверу (или к серверам одной компании), как это может делать что-то децентрализованным.
А spv-кошельком мы не обязаны подключаться к одной фулл-ноде, (или к фулл-нодам одной компании).

Децентрализация нужна не только и не столько для анархии, а нужна для устойчивости к сбоям.
1000 серверов пейпала имеют намного бОльшую устойчивость, чем 1000 фулл нод биткоина при равном количестве тонких клиентов. То есть с точки зрения сохранности данных, децентрализация биткоина проигрывает стандартным системам.
Децентрализация с точки зрения анархии, для биткоина тоже вопрос очень спорный. 25 майнеров это сильно меньше чем число независимых акционеров визы и даже меньше количества дармоедов в аппарате правительства большинства стран. То есть желающие с помощью биткоина получить свободу от своего государства - идут в рабство к другому, пока непризнанному, и потому кажется как бы и несуществующему государству.


1. Чтобы подключиться к пейпалу, нужно получить от него разрешение.
2. Пейпал контролирует твои средства, которые ты ему обязать доверить.
3. Ты не можешь уйти к другому пейпалу. Вернее, другой "пейпал" будет точно таким же, как и этот.

Это все только потому, что пейпал вынужден соблюдать законы государств где работает.
Пока государство не придумало, как прищемить яйца 25 майнерам одновременно, но как только придумает - биткоин станет еще хуже пейпала.
legendary
Activity: 1468
Merit: 1102
Сеть из  25 майнеров, 1000 фулл нод и 1000 000 spv кошельков будет функционировать, если отвалится часть майнеров. Будет работать, даже если все фулл-ноды отвалятся. Возможно медленно, но будет. И уж тем более ничего страшного не будет, если часть spv-кошельков выйдут из сети. Это, что ни на есть, классический пример децентрализованной системы по Вашему определению.

Уверены?
Тогда условия задачи: "В результате вспышки на Солнце, навсегда отвалилось 100% майнеров и 100% фулл нод, но выжили несколько spv кошельков. Вопрос: когда сеть биткоина восстановит свою работу?"
Вообще-то я руководствовался Вашим же определением децентрализации.Smiley
Хорошо. Возьмем Ваш пример с "настоящей децентрализацией", где нет spv-кошельков.
"В результате вспышки на Солнце, навсегда отвалилось 100% майнеров и 100% фулл нод.
Вопрос: когда сеть биткоина восстановит свою работу?"
Результат такой же.
Вывод из Вашего примера: spv-кошельки не уменьшают децентрализацию. Smiley

Я не понимаю, что Вы хотите доказать. Spv-кошельки не самодостаточны. Это часть системы.
Фулл-ноды тоже часть системы. И тоже не самодостаточны. Без майнеров они встанут.
Основа Биткоина - это майнеры.
И Вы забыли еще одно очень важное свойство децентрализованных систем, назовем его открытостью.
Абсолютно необязательное свойство.
Вы меня слегка разочаровали. От человека, который болеет за децентрализацию Биткоина, услышать такой ответ...

Без этого свойства не было бы Биткоина. Кому нужна криптовалюта, если для того, чтобы воспользоваться им, нужно спрашивать разрешение.
Quote
А spv кошелек это тоже не сервер биткоина. Мы же все еще про spv и про их якобы децентрализацию тут? ))
Вот вам аналогия: абсолютно любой человек с любого браузера может подключиться к серверам пейпала. Значит ли это, что пейпал децентрализованная система? Причем в 100 раз более децентрализованная чем биткоин, потому что к этому вашему биткоину не так-то просто подключиться через браузер (я лично не умею).
Странный вопрос. Если мы с разных точек подключаемся к одному серверу (или к серверам одной компании), как это может делать что-то децентрализованным.
А spv-кошельком мы не обязаны подключаться к одной фулл-ноде, (или к фулл-нодам одной компании).

А потом.
1. Чтобы подключиться к пейпалу, нужно получить от него разрешение.
2. Пейпал контролирует твои средства, которые ты ему обязать доверить.
3. Ты не можешь уйти к другому пейпалу. Вернее, другой "пейпал" будет точно таким же, как и этот.

Между системами клиенты+ пейпал,  spv-кошельки+фуллноды  пропасть.
Такая же, как между серверами Visa и майнерами Биткоина.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Про ссд тесты похожи на правду. Для хдд я ни разу в жизни не видел, чтобы 200 мег копировались за секунду... или за две... или даже за пять секунд. (

Так это линейно, то есть без фрагментации и естественно на другой диск. Вот только что проверил с одного забитого HDD на другой скопировал файл 1.4ГБ, заняло 15 секунд, в тестах на пустых дисках как раз будет в районе 200. Диски у меня правда сильно дороже хлама за 60$.
legendary
Activity: 2317
Merit: 2318

Правда в коде не 2 гб, а 550 мб, но что-то у меня не получалось меньше 2 гб сделать.
https://github.com/bitcoin/bitcoin/blob/master/src/validation.h#L195

Скорее всего это приблизительная цифра, реальную надо подгонять вручную.

Прунинг работает так: вы задаёте фиксированный размер хранилища блоков опцией командной строки -prune=. Это фиксированный размер, сколько зададите - столько и будет занимать места на диске база блоков (но не меньше 550МБ). И эта база не будет расти со временем, старые блоки автоматически будут удаляться, чтобы выдерживать целевой размер базы.

Размер этой базы никак не зависит от количества потраченных выходов (вы его сами задаёте). Реально реализованный механизм прунинга не имеет никакого отношения к тому, что писал Накамото в разделе "7. Экономия дискового пространства". Поэтому, ваша фраза "при размере всего блокчейна 200 гиг, в режиме прунига он весит 2 гиг" не имеет никакого смысла.

Quote
Вот вам исходники старого клиента биткоина.
https://github.com/bitcoin/bitcoin/blob/0.14/src/consensus/consensus.h#L16
https://github.com/bitcoin/bitcoin/blob/0.14/src/validation.cpp#L2871

Как этот клиент до сих пор работает и умудряется принимать блоки в 2 мегабайта?

Старым клиентам новые клиенты дают урезанные неполноценные блоки, влезающие в 1МБ, что никак не доказывает, что новые клиенты хранят witness где-то там отдельно, как вы сказали "Эта часть записывается за пределами блока".

Ваша фраза "Эта часть записывается за пределами блока" не подтверждается ничем, ни сегвитовскими BIP-ами (BIP141, BIP143), ни исходниками SegWit-совместимых клиентов.

Выполните в консоле команду
Code:
getblock 00000000000000000015700c792c59cda0380d5e3c3e16ba555cc3cfd6d6bb7d 0
она вам выдаст сериализованный блок в HEX-формате. Какой у него будет размер в байтах? Вот этот размер и показывают блок-эксплореры.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Про ссд тесты похожи на правду. Для хдд я ни разу в жизни не видел, чтобы 200 мег копировались за секунду... или за две... или даже за пять секунд. (
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Стандарт SATA1 – имеет скорость передачи до 150мб/c
Стандарт SATA2 – имеет скорость передачи до 300мб/c
Стандарт SATA3 – имеет скорость передачи до 600мб/c

Хорошо, теперь дайте конкретную модель жесткого диска 1.5 тб / 50$ и попробуем найти для него тесты в интернете ))

Ну не знаю как быстрый порт поможет HDD быстрее вертеться. В продаже имеются только 2ТБ диски, 1.5ТБ не наблюдаю, цена чуть более 60$. Модель хлама Seagate ST2000DM008. Бенчмарк для 3ТБ модели, но на 2ТБ точно будет не лучше. Как видишь случайное чтение и запись с большой очередью по скорости близки к твоей оценке. Вряд ли при синхронизации диск используется настолько интенсивно, но сомневаюсь что средняя скорость поднимется выше 20-30МБ/c.



Описание теста:
1. Seq Q32T1 — последовательная запись файла сегментами по 128Кб в режиме мультипоточности
2. 4K Q32T1 — рандомная запись файла сегментами по 4Кб в режиме мультипоточности
3. Seq — последовательная запись файла сегментами по 1Мб в режиме однопоточности
4. 4K — рандомная запись файла сегментами по 4Кб в режиме однопоточности

Вот для примера результаты SSD Samsung 850 EVO 500GB:

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Стандарт SATA1 – имеет скорость передачи до 150мб/c
Стандарт SATA2 – имеет скорость передачи до 300мб/c
Стандарт SATA3 – имеет скорость передачи до 600мб/c


Хорошо, теперь дайте конкретную модель жесткого диска 1.5 тб / 50$ и попробуем найти для него тесты в интернете ))

Сеть из  25 майнеров, 1000 фулл нод и 1000 000 spv кошельков будет функционировать, если отвалится часть майнеров. Будет работать, даже если все фулл-ноды отвалятся. Возможно медленно, но будет. И уж тем более ничего страшного не будет, если часть spv-кошельков выйдут из сети. Это, что ни на есть, классический пример децентрализованной системы по Вашему определению.

Уверены?
Тогда условия задачи: "В результате вспышки на Солнце, навсегда отвалилось 100% майнеров и 100% фулл нод, но выжили несколько spv кошельков. Вопрос: когда сеть биткоина восстановит свою работу?"

И Вы забыли еще одно очень важное свойство децентрализованных систем, назовем его открытостью.

Абсолютно необязательное свойство.

Виза может и состоит из сети серверов. Но все эти сервера рулятся из одного центра. И эта сеть серверов закрыта. Ты не можешь взять и запустить сервер Визы.

А spv кошелек это тоже не сервер биткоина. Мы же все еще про spv и про их якобы децентрализацию тут? ))
Вот вам аналогия: абсолютно любой человек с любого браузера может подключиться к серверам пейпала. Значит ли это, что пейпал децентрализованная система? Причем в 100 раз более децентрализованная чем биткоин, потому что к этому вашему биткоину не так-то просто подключиться через браузер (я лично не умею).

А нам это неизвестно. Откуда взялась эта цифра - 2ГБ ?

Известно.
Правда в коде не 2 гб, а 550 мб, но что-то у меня не получалось меньше 2 гб сделать.
https://github.com/bitcoin/bitcoin/blob/master/src/validation.h#L195

Скорее всего это приблизительная цифра, реальную надо подгонять вручную.

Откуда вы взяли всю эту ересь? Witness - является частью транзакции. Транзакции в новом формате хешируются по алгоритму дерева Меркла и этот хеш помещается в scriptPubKey coinbase-транзакции. В какое место, по-вашему, это всё записывается, если кроме блоков ничего нет. Пальцем покажите.

Вот вам исходники старого клиента биткоина.


https://github.com/bitcoin/bitcoin/blob/0.14/src/consensus/consensus.h#L16
https://github.com/bitcoin/bitcoin/blob/0.14/src/validation.cpp#L2871

Как этот клиент до сих пор работает и умудряется принимать блоки в 2 мегабайта?
legendary
Activity: 2317
Merit: 2318
Нам лень собирать статистику по пустым блокам, но нам известно, что при размере всего блокчейна 200 гиг, в режиме прунига он весит 2 гиг.

А нам это неизвестно. Откуда взялась эта цифра - 2ГБ ?

Quote
В блок входит то, что хэшируется. Сегвит часть транзакции в блок не входит и не хешируется. Эта часть записывается за пределами блока в то место, где старые клиенты ее не видят, а новые видят.

Откуда вы взяли всю эту ересь? Witness - является частью транзакции. Транзакции в новом формате хешируются по алгоритму дерева Меркла и этот хеш помещается в scriptPubKey coinbase-транзакции. В какое место, по-вашему, это всё записывается, если кроме блоков ничего нет. Пальцем покажите.

Вот вам пример записи корня дерева Меркла в блоке:
Code:
RETURN PUSHDATA(36)[aa21a9ed5b12dbe0fa44e4d3e1f77de9fe7dce28e1e2c838daa13f1b95269aa2e812c86f]

aa21a9ed5b12dbe0fa44e4d3e1f77de9fe7dce28e1e2c838daa13f1b95269aa2e812c86f - это и есть корень дерева Меркла вычисленный с учётом данных witness.
legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
Quote
1. Вычислительная дороговизна отмены транзакций оградила бы продавцов от мошенничества, а легкоосуществимые механизмы эскроу защитили бы покупателей.

Сатоши ошибался когда это писал. Десять лет жизни биткоина показали, что механизмы эскроу не такие уж и легкоосуществимые. Ведь очевидно, что имелось в виду эскроу внутри биткоина а не обычные гаранты на третьей стороне?
Так вот, более или менее рабочие варианты такого эскроу начали появляться буквально год назад в виде атомарных свопов и LN. То и другое все еще на стадии зарождения и имеет крайне глючные реализации. А возможны эти технологии стали только в последних версиях биткоина где разработчики ввели в протокол новый опкод "OP_CHECKLOCKTIMEVERIFY". Когда Сатоши писал свою статью про "легкие механизмы эскроу", он про этот опкод ничего еще не знал и соответственно слова про "легкость" были просто пустыми словами.

Ну здесь толком непонятно что он имел ввиду. Возможно и гаранты засчет мультиподписей в P2SH. Во вторых, возможность смарт контрактов (пускай и довольно кривых) в биткоине была изначально. Так что спорно, по сути. Притом, что OP_CHECKLOCKTIMEVERIFY был добавлен в BIP65, а это было аж в 2014м году. Не сказал бы, что прямо "недавно". Да и сам опкод по сути просто упрощает возможность эскроу смарт контрактов, а не создает что-то с нуля. 



Quote
В условиях ажиотажа блоки идут переполненные, а для настоящей децентрализации пользователям нужно хранить у себя блоки целиком. И тут нужно вспомнить историчекий факт: в первых версиях биткоина, максимальный размер блока был ограничен не 1 Мб как сейчас, а 30 Мб!

Лол, удивлен. Не знал о таком, что раньше было 30мб. Что же случилось, что так ограничили размер блока? Как только получу мериты, обязательно скину за такую информацию то
legendary
Activity: 1468
Merit: 1102

Тут не может быть ошибки, потому что с скоростью интернета 100 мегабит  большинство торрент-закачек у меня идут по 10мб/сек.
Охотно верю, но 1.5 тб диск за 50 баксов крутится со скоростью 1 мб/сек в лучшем случае, так что либо у вас диск получше и подороже, либо я не знаю...
Тут что-то не так.
Стандарт SATA1 – имеет скорость передачи до 150мб/c
Стандарт SATA2 – имеет скорость передачи до 300мб/c
Стандарт SATA3 – имеет скорость передачи до 600мб/c
А сидеры для раздачи блокчейна - дело наживное. Лишь бы был спрос.
Спрос будет, но сидеров на 100500 терабайт которые к тому же требуют постоянного обновления, за бесплатно не будет. Их на 50 гб не было по тем же причинам.
Главное, что технически возможно. А как это организовать, это уже другой вопрос.
Quote
Определитесь с термином "децентрализация", все станет яснее.
Академически устоявшегося определения нет, но в классическом программистком понимании, сеть считается децентрализованной если она одинаково функционирует вне зависимости от того, сколько и какие узлы в сети работают, а сколько и какие отвалились. Можно ли считать сеть из 25 майнеров, 1000 фулл нод и 1000 000 spv кошельков децентрализованной в классическом понимании?
Нет, нельзя. Даже без spv нод современная сеть биткоина не децентрализована, но это хотя бы как-то можно исправить при желании: хардфорком например, а вот сделать подсеть из spv нод тру децентрализованной невозможно в принципе.
Тут загвоздка. Ваш ответ "Нет, нельзя" идет вразнос с Вашим же определением децентрализации. Smiley

Сеть из  25 майнеров, 1000 фулл нод и 1000 000 spv кошельков будет функционировать, если отвалится часть майнеров. Будет работать, даже если все фулл-ноды отвалятся. Возможно медленно, но будет. И уж тем более ничего страшного не будет, если часть spv-кошельков выйдут из сети. Это, что ни на есть, классический пример децентрализованной системы по Вашему определению.

Что такое spv-ноды, не понял. Smiley

И Вы забыли еще одно очень важное свойство децентрализованных систем, назовем его открытостью. Децентрализованная система открыта, если любой желающий, который имеет возможность (это довольно важное уточнение, про которое почему-то забывают) и выполняет правила системы, может подключиться к ней и стать частью системы. Биткоин, как мы понимаем, именно такой открытой системой и является.
И если это свойство у системы сохраняется, система всегда будет децентрализованной, независимо от количества узлов. (Это утверждение для размышлений. Я пока не нашел ему опровержения. Smiley )
Quote
Я изначально говорил не о компаниях как таковых, а о сетевой архитектуре.
Виза это централизованная сеть серверов. Биткоин становится точно такой же централизованной сетью из мастер и слейв нод. Таких сетей было дофига до задумки Сатоши, таких сетей сейчас еще больше. Биткоин, превращаясь в заурядный мастер-слейв, теряет всю свою уникальность и в общем-то свое единственное преимущество, при этом добавляя кучу дополнительных неудобств и недостатков.
Виза может и состоит из сети серверов. Но все эти сервера рулятся из одного центра. И эта сеть серверов закрыта. Ты не можешь взять и запустить сервер Визы.
А Биткоин - открытая децентрализованная система. Поэтому утверждать, что они похожи, мягко говоря, кощунство.Smiley  И пока Биткоин будет открытой системой, он никак не может превратиться в наподобие Визы. Скорее, он самоликвидируется, чем станет Визой.

Если Биткоин становится централизованной сетью, мне хотелось бы знать, что(или кто) станет центром.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Тут не может быть ошибки, потому что с скоростью интернета 100 мегабит  большинство торрент-закачек у меня идут по 10мб/сек.

Охотно верю, но 1.5 тб диск за 50 баксов крутится со скоростью 1 мб/сек в лучшем случае, так что либо у вас диск получше и подороже, либо я не знаю...

А сидеры для раздачи блокчейна - дело наживное. Лишь бы был спрос.
Спрос будет, но сидеров на 100500 терабайт которые к тому же требуют постоянного обновления, за бесплатно не будет. Их на 50 гб не было по тем же причинам.

Поэтому же мне непонятно, откуда вытекает утверждение, что для децентрализации обязательно нужны фулл-ноды. Майнеры да, а фулл-ноды поскольку-постольку. Кому удобнее, те будут пользоваться ими. Кому нет, будут пользоваться упрощенной системой. У Сатоши именно это и сказано. И именно так и сейчас происходит в реальности.

Определитесь с термином "децентрализация", все станет яснее.
Академически устоявшегося определения нет, но в классическом программистком понимании, сеть считается децентрализованной если она одинаково функционирует вне зависимости от того, сколько и какие узлы в сети работают, а сколько и какие отвалились. Можно ли считать сеть из 25 майнеров, 1000 фулл нод и 1000 000 spv кошельков децентрализованной в классическом понимании?
Нет, нельзя. Даже без spv нод современная сеть биткоина не децентрализована, но это хотя бы как-то можно исправить при желании: хардфорком например, а вот сделать подсеть из spv нод тру децентрализованной невозможно в принципе.




В каком смысле Visa больше 1000 независимых бизнесменов применительно к децентрализации. Мне, честно, непонятно.

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



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


Нам лень собирать статистику по пустым блокам, но нам известно, что при размере всего блокчейна 200 гиг, в режиме прунига он весит 2 гиг. Значит если бы биткоином активно пользовались эти 10 лет и размер блока был 30 мег, то при 15 000 гиг полного блокчейна, в режиме прунинга сейчас он бы весил примерно 1.5 тб = 150 мег / в год. Так что не особо удачный расчет у Сатоши получился, как ни крути.

Видно, что подписи транзакций (witness) никуда из транзакций не делись, а просто переместились из scriptSig входов в отдельную структуру данных - witness, которая находится всё в той же транзакции. Если убрать подписи из блока, то как тогда транзакции верифицировать?

В блок входит то, что хэшируется. Сегвит часть транзакции в блок не входит и не хешируется. Эта часть записывается за пределами блока в то место, где старые клиенты ее не видят, а новые видят.
Поэтому для старых клментов сегвит транзакция выглядит так: "Забирайте из меня бабки все кто хочет, подписи не надо - халява".

Почему сайты показывают размер блока+сегвит часть просто как размер блока? Это не ко мне вопрос, а к разработчикам сайтов.
legendary
Activity: 3556
Merit: 1100

Опять всё обсуждение к этому свелось -
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
GGUL, тебе религия не позволяет соблюдать правила форума и отвечать в одном посте? kzv тебе намекнул что флудить нехорошо и отвечать на несколько постов неудобно, а ты продолжаешь.
Вообще-то я вижу один пост, отвечаю на него. Через некоторое время вижу пост от другого человека. Почему я должен вернуться к предыдущему к своему посту  и редактировать его.  Почему я не могу добавить новый пост. Странно.

Неудобно, не отвечай. Smiley

Потому что правила форума говорят что должен и тебе придётся их соблюдать. Ты в его треде пишешь, он написал что это против правил и ему неудобно. Что блять значит неудобно не отвечай? Неудобно соблюдать правила форума - не пользуйся им и сиди пизди сам с собой. Grin
Похоже, аргументы по существу закончились. Пошла в ход любимая демагогия. Smiley

То есть неудобно - не отвечаю это значит закончились аргументы? Ты всегда ведёшь себя как мудак или первомай уже отметил? Cool
Pages:
Jump to: