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

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

Спасибо огромное! С нетерпением ожидаю следующей статьи.
присоединяюсь, очень легко читается и воспринимается.
Хмм, непонятен момент с перезаписью истории. То есть подразумевается, что существует вероятность некорректной транзакции, которую нужно будет исправить вертикальными блокчейнами. А если в результате корректировки невалидных блоков у кого-нибудь окажется отрицательный баланс? Не возможность ли это для мошенничества? Например кто-нибудь оплатит что-нибудь с помощью ton-валюты, не имея для этого в действительности средств.
Разница станет понятнее, когда я разберу разделение ответственности между узлами. В каждый момент времени есть группы узлов, которые ответственны за добавление блоков в конкретный шардчейн. В группе таких узлов относительно немного (скажем, от десятков до сотни — в зависимости от того, на сколько шардов поделён блокчейн).

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

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

В конечном итоге ваш вопрос аналогичен вопросу «а что будет, если мошенник сможет провести атаку 51%?». Ну, если в какой-то момент времени мошенник сможет воздействовать на подавляющее число ключевых узлов сети, то понятно, что ничего хорошего из этого не выйдет. Идея в том, чтобы сделать такими узлами не один-два сервера, как в централизованных системах, а чуть побольше.
Либо вы не поняли вопрос, либо я понял его по своему.

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

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

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

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

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

В общем-то, эти проблемы никак не характерны для полудецентрализованной системы. Со всяким фродом, насколько я понимаю, и централизованным системам приходится бороться примерно такими же способами.
Насколько я понимаю концепцию Proof of Stake, нода, которая «ошиблась» будет отвечать за это как раз из своего Stake. Это было бы правильно.
Это тоже верно, но неизвестно, будет ли размер штрафа связан с конкретными суммами в транзакциях (и непонятно, стоит ли его к ним привязывать).
Ну если можно будет провернуть нелегальную транзакцию на сумму большую, чем сумма штрафа — то сразу же найдутся те, кто этим воспользуется.
Отменять транзакцию тоже не выглядит правильно потому что в случае с магазином — я могу купить товар за «фальшивые» деньги, товар у меня останется, а у продавца уменьшат баланс. Получится всё как с наличкой, но мы ведь хотим от этого уйти?)
Я, конечно, не разработчик блокчейнов, но считаю единственно верным решением штрафовать того, кто подписал невалидную транзакцию, так чтобы продавец действительно получил свои деньги, но уже валидной транзакцией с кошелька ноды.
Я так понимаю эти корректирующие блоки не могут быть созданы на блок «месячной» давности. Т.к. это разрушило бы всю сеть, при обнаружении ошибки через год. Обычно, блокчейн, связанный с финансами, должен иметь n кол-во блоков сверху, чтобы считать его «валидным». Эти корректирующие блоки, скорее оптимизация, чтобы не откатывать записи до первой валидной или не городить форки и не разделять сеть — на за и против.
А можно чуть подробнее про «предусмотрена возможность «переписать историю» — в случае, если некто (т.н. узел-«рыбак») докажет, что один из блоков был подписан некорректно»?
В частности, интересно, кому и как «некто» будет доказывать, что блок подписан некорректно?
Все данные, хранимые в блокчейне, будут упорядочены в хитрую структуру — дерево Меркла. Это штука, сама по себе похожая на блокчейн, только он линейные, а эта структура — ветвящаяся. Благодаря ей вводится понятие «доказательств Меркла» (Merkle proofs). Вкратце — если мы знаем хэш корня дерева, то чтобы подтвердить, что какой-то кусочек дерева действительно ему принадлежит, не нужно целиком иметь доступ к дереву — нужны только хэши, ведущие от корня к искомой ветке.

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

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

Т.е. причины переписывания истории в TON не имеют отношения к причинам, по которым это ранее требовалось в других блокчейнах (украли слишком уж много денег, баг в смартконтракте, etc.)?

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