Как стать автором
Обновить

От блокчейна к DAG: избавляемся от посредников

Время на прочтение 6 мин
Количество просмотров 14K
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 23

Комментарии 23

Подскажите, как определяется момент, когда транзакцию можно считать случившейся? Когда она точно не инвалидируется? В биткоине это правило 6ти блоков, а здесь?
Подскажите, как определяется момент, когда транзакцию можно считать случившейся?

когда автор транзакции добавил её в реестр и сообщил о ней в сеть.

Когда она точно не инвалидируется? В биткоине это правило 6ти блоков, а здесь?

Когда её порядок станет окончательно определён. А это случится когда провайдеры порядка добавят «достаточно много» (сколько точно, зависит от формы DAGа в каждом конкретном случае) своих транзакций после вашей. Они должны добавлять свои транзакции строго последовательно, поэтому не смогут добавить их к старой части DAGа, что могло бы изменить порядок.

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


Это автор так может считать, если знает, что он не жульничал.
А получатель так считать не может, он должен быть уверен, что транзакция не инвалидируется.

когда провайдеры порядка добавят «достаточно много»

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

Конечно, одного факта, что транзакция произошла, мало. Получатель предпочтёт дождаться финализиции порядка этой транзакции (если не готов брать на себя риски).

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

Получатель увидит в своей копии реестра, что порядок данной транзакции финализировался. Обычно это происходит в течение нескольких минут после появления транзакции в реестре, при этом время уменьшается при увеличении нагрузки на сеть. На explorer.obyte.org (который имеет свою копию реестра) можно видеть статус транзакции, нужно дождаться когда он станет stable (final).
Спасибо
И еще вопрос. Если я, желая обмануть систему и заставить ее думать, что моя транзакция произошла раньше, чем на самом деле, привяжу ее к более ранним транзакциям от провайдеров порядка, как система среагирует на такую ситуацию?
она упорядочится рядом с другими транзакциями, которые были транслированы в сеть примерно в то же время. Вот недавний пример такой транзакции explorer.obyte.org/#xLo0zDsHEnV2B4siCtqygxkTJy8jhVkSAv44d+cD3NE= (смотрите на main chain index — это индикатор порядка)
Не совсем понял. Вот я — жулик. Сослался в своей транзакции исключительно на транзакции, которые произошли позавчера. Понятно, что на мою транзакцию не будет ни одной настолько ранней ссылки. Но ведь это ничего не доказывает — может так случайно вышло.

Я хочу понять, как тут система защитится от double spending по такому сценарию:

1. Плачу Васе сегодня свои последние 100 долларов
2. Жду отгрузки товара
3. Добавляю более раннюю транзакцию на 100 долларов на свой второй аккаунт.
вторая транзакция упорядочится после первой, следовательно, будет помечена как double-spend. То, что она ссылается на позавчерашние транзакции — не имеет значения.
То есть просто по времени ее получения сетью?
Грубо говоря, да.
«получение сетью», как вы понимаете, это нечёткая формулировка, потому что сеть состоит из множества нод, каждая из которых получает транзакцию и добавляет в свой реестр в разное время.
Да, я это понимаю. Спасибо. Стало понятнее о чем речь.
Я правильно понимаю, что если в bitcoin/ethereum пулы внезапно отключаются, то сеть (на некоторое время) замедляется, но продолжает функционировать; в предложенном же подходе, если большинство (кстати, какое большинство? Византийское, абсолютное, какое-то еще?) провайдеров порядка перестанут отправлять транзакции, то сеть на некоторое время «умрет»?

Мотивация с жестко выбранным числом 12 не кажется достаточно обоснованной. Да, это не единая точка отказа, но и не N участников сети, как в существующих открытых блокчейнах.

Ну и в целом, начинать вайтпейпер с отсылки к 1984, а затем оперировать списком доверенных сущностей — как-то иронично, что ли…
Мне тоже кажется, что жесткий выбор фиксированного числа провайдеров порядка — это более слабое решение, чем, например, выбор (псевдо)случайных делегатов для генерации следующего блока (как это сделано, например в NXT).
Эта область быстро развивается, и описанный способ выбора провайдеров порядка не является единственно возможным. Как бы вы выбирали их (псевдо)случайно?
Я всерьез над этим не думал. Но мне кажется, что основная проблема здесь не в том, как именно их выбирать (да вот хоть как в NXT). А в том, почему выборные участники вообще будут создавать эти упорядоченные транзакции. В этом случае их надо вознаграждать. И вот опять появляется комиссия.
Да, мы должны быть достаточно уверены, что выбранные участники будут действительно
— создавать транзакции
— создавать их упорядоченно
Это непросто, потому что многие из них могут быть оффлайн, и надо понимать, что они теряют, если постят неупорядоченно (они ведь анонимны?).

Также, необходимо гарантировать, что «случайным» выбором нельзя манипулировать, в распределённых реестрах это непростая проблема.
Ну, в случае, если есть комиссии можно поступить как-то так: Если узел дал согласие выступать провайдером порядка на какой-то корткий период, то он должен заплатить некоторое escrow, которое верется к нему с добавлением комиссии, если он все сделал честно, и которое он потеряет в противном случае. Конечно все усложняется — например, кто и как определит честно ли он себя вел + может быть выгода от злоупотребления будет выше потерянного escrow.

Но в целом всё понятно. Спасибо за объяснения.
Такой дизайн возможен, у него есть свои преимущества и недостатки (везде есть свои trade-offs).

Сконструировать proof, что он постил транзакции не по порядку, достаточно легко — нужно предъявить обе транзакции, подписанные его приватным ключом.

Но главное, что независимо от принципов выбора провайдеров порядка, они могут влиять лишь на порядок, и то косвенно, но не могут помешать кому либо добавлять свои транзакции в реестр.
Тут скорее вопрос — не может ли кто-то очень влиятельный повлиять на желание этих провайдеров в этом участвовать.
Может, конечно. Поэтому их должно быть достаточно много, чтобы минимизировать шансы одновременного выключения большинства.
Если половина или большинство (т.е. 6 из 12, если их 12) провайдеров порядка перестанут постить, то будет невозможно определить порядок недавних транзакций, хотя они и будут добавляться в DAG. Не зная порядок, нельзя быть 100% уверенным что в случае появления double-spend он не упорядочится раньше той транзакции, которую мы уже видим.

Мотивация с жестко выбранным числом 12 не кажется достаточно обоснованной. Да, это не единая точка отказа, но и не N участников сети, как в существующих открытых блокчейнах.

12 это одна из немногих произвольных констант в данном дизайне. Можно выбрать например 25 или 7 и запустить другую сеть с другим числом провайдеров порядка.

Ну и в целом, начинать вайтпейпер с отсылки к 1984, а затем оперировать списком доверенных сущностей — как-то иронично, что ли…

Что именно иронично?
Важно чётко понимать, о каком именно доверии идёт речь, что именно мы верим относительно доверенных сущностей, верим слепо или рационально, просто доверяем или доверяем-но-проверяем. В «1984» речь идёт о переписывании истории. В DAG это просто невозможно из-за снежного кома транзакций, ссылающихся на каждую запись, и принципа неудаляемости прошлых записей. Это правила протокола, «доверенные сущности» не в силах на них повлиять.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий