Платформа Ardor и её конкуренты, ч.3: IOTA

Перевод статьи с английского, источник https://www.nxter.org/ardor-vs-competition-pt-3-iota/

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

На этой неделе я изучал платформу IOTA, распределенный реестр которой не использует блокчейны.

Для чего сравнивать платформы Ardor и IOTA?

На первый взгляд, платформа IOTA ни чем не отличается от Ardor, кроме как распределенным реестром. IOTA использует направленный ациклический граф (DAG), который разработчики называют технологией «tangle», для предоставления информации о транзакциях, вместо хранения транзакций на блокчейне. Эта платформа предназначена в основном для использования микротранзакций между устройствами в Интернете вещей (Internet of Things/IoT), и концепция заключается в том, что IOTA не требует комиссионных сборов. Она (пока) не поддерживает функции «blockchain 2.0», которые составляют основную часть Ardor. На первый взгляд, не похоже, чтобы IOTA была конкурентом Ardor.

И так с какой целью сравнение платформы IOTA включено в серию статей «Платформа Ardor и её конкуренты”?

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

Ardor значительно уменьшает раздувание блокчейнов, но требует, чтобы все узлы сети согласовали строгий порядок транзакций; в то время как IOTA достигает потенциально более высокую пропускную способность, немного ослабляя механизм консенсуса, допуская временные расхождения между транзакциями, но сталкивается с решением серьезной проблемы, связанной с увеличением сплетения (tangle). Эти сопоставления, плюс то, что я узнал о безопасности сплетения, показались весьма интересными, чтобы заслужить статью в этой серии публикаций.

После этой публикации, я планирую переключить свое внимание с масштабирования на особенности и соответствие рынку. Будут рассмотрены платформы Stratis, Ark, и Waves, но пока не знаю в каком порядке.

Tangle (сплетение)

Несомненно, ключевой отличительной особенностью IOTA является tangle (сплетение, клубок).

Другие уникальные особенности IOTA, такие как отсутствие транзакционных сборов, факт того, что транзакции являются строго не упорядоченными, но в конечном итоге согласованными, а также представление о том, что (некоторые) спам фактически увеличивают пропускную способность сети, все эти особенности связаны с тем, как работает tangle (сплетение).

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

Сплетение (tangle) представляет собой направленный ациклический граф, верхние точки которого представляют собой индивидуальные транзакции, а грани представляют собой «подтверждения» предыдущих транзакций. Каждый раз, когда узел (нода) отправляет новую транзакцию в сеть, он должен выбрать две предыдущие транзакции для валидации, на которые он ссылается при новой транзакции, которую он отправляет. По мере того, как новая транзакция проходит через сеть, каждый узел (нода) добавляет ее к своей локальной копии сплетения (tangle), причем одна грань указывает на каждую транзакцию, одобренную новой транзакцией.

Я старался, как мог, но это описание, вероятно, приведет к замешательству. Эта диаграмма должна помочь. Каждый квадрат представляет собой транзакцию, а стрелки, направленные от каждой транзакции к двум другим, представляют собой одобрение двух предыдущих транзакций. Первичная транзакция находится где-то далеко от левой части диаграммы, а новейшие транзакции, называемые «tip - транзакциями» в «Белой книге», находятся с правой стороны и выделены серым цветом.

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

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

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

Консенсус

Одна очень интересная особенность реестра, основанного на сплетении (tangle), такого как IOTA, заключается в том, что узлы, которые получают новые транзакции от своих пар, не должны их немедленно проверять. По факту, сплетение может временно содержать конфликтующие транзакции. Однако, в конечном итоге, узел/нода должен решить, какую из конфликтующих транзакций одобрить (возможно, косвенно), поскольку добавляется новая транзакция.

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

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

Каждый узел, который отправляет новую транзакцию, должен выполнять некоторые доказательства выполнения работы (PoW/Proof of work), которые определяют «собственный вес» транзакции. Кумулятивный вес транзакции определяется как сумма собственных весов своей и всех транзакций, подтвердивших эту транзакцию прямо или косвенно. При обычном сплетении узел может решать, сколько действий предпринять для транзакции, но в IOTA все транзакции требуют одинакового доказательства выполнения работы (PoW) и, таким образом, имеют один и тот же собственный вес. В результате кумулятивный вес транзакции пропорционален количеству других транзакций, которые прямо или косвенно одобряют его.

Что же такое ссылочный алгоритм? Автор «Белой книги» называет это алгоритмом Монте-Карло с применением цепи Маркова (MCMC, см. Раздел 4.1), что является фантастическим способом сказать, что это случайное блуждание по сплетению (tangle), которое одобряет путь с большим кумулятивным весом. Эта публикация уже становится большой, поэтому я пропущу подробности. Достаточно сказать, что при наличии конфликтующих транзакций алгоритм MCMC разрешает конфликт, стремясь выбрать транзакцию с большим кумулятивным весом. В конце концов, одно субсплетение становится основным, а другое - незащищенным. Это соответствует похожему механизму, который блокчейны используют для устранения форка, а кумулятивный вес транзакции в IOTA является приблизительным измерением её финальности таким же способом, как добавление блоков в блокчейн подтверждает все предыдущие транзакции с большей достоверностью.

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

Безопасность

До настоящего времени я в основном просто отбрасывал информацию, содержащуюся в «Белой книге» IOTA. С другой стороны, проблема безопасности при использовании технологии сплетения (tangle) становится намного интереснее. И так как я определенно рекомендую прочитать в «Белой книге» об анализе различных видов атак при использовании технологии сплетения (tangle), а также и остальную часть этого документа, потому что там очень хорошо всё объясняется, я не буду здесь обсуждать большую часть этого анализа.

Вместо этого я хочу сосредоточиться на самой очевидной угрозе, которая представляет собой 51% атаки. Разработчики IOTA на самом деле говорят о 34% атаке, и я не уверен, что понимаю причины, по которым они это утверждают. Я подозреваю, что это связано с тем, что злоумышленник, ожидающий форк, естественно, нуждается только в достаточном количестве хеш - мощностей, чтобы вычислять узлы на каждой ветви форка, т.е. более 50% хеш - мощностей оставшейся части сети. В любом случае, точное число не имеет значения, и в оставшейся части этой статьи я буду использовать термин «34% атака».

С IOTA 34% атака будет выглядеть примерно как на рисунке выше. Злоумышленник производит транзакцию, и тратит немного средств (правая красная точка), затем вычисляет (или, возможно, предварительно вычислил) своё собственное «вредоносное» субсплетение, которое привязывается к основному сплетению выше его транзакции и которое содержит транзакцию с двойной тратой (левая красная точка). Его цель состоит в том, чтобы добавить достаточный кумулятивный вес к своему вредоносному сплетению (tangle), и убедить алгоритм MCMC покинуть основное сплетение (tangle) и следовать по вредоносному.

Надеюсь, что на данном этапе аналогия с блокчейном понятна, потому что есть еще одна важная схожесть. Также как и доказательство выполнения работы (POW) в блокчейне, в сплетение (tangle) безопасность обеспечивается хеш - мощностью сети, так как эта хеш – мощность добавляет кумулятивный вес подлинному сплетению. Однако, в отличие от PoW в блокчейне, узлы на IOTA выполняют PoW только при отправке транзакций. Следовательно, безопасность сплетения зависит только от скорости транзакции и количества PoW за транзакцию. Не торопитесь, свыкнитесь с этой идеей, потому что она очень важна для понимания безопасности сплетения (tangle).

Поскольку сеть IOTA в настоящее время невелика, а скорость транзакций низкая, команда IOTA создала единый надежный узел, называемый координатором, который, в конечном счете, отвечает за выбор текущего состояния сплетения. Его цель - защитить от 34% атаки. Я не собираюсь больше тратить на это время, но я призываю вас прочитать эту критику и ответы разработчиков, и сделать собственные выводы о том, можно ли назвать платформу IOTA децентрализованной под наблюдением Координатора.

Посмотрим, можем ли мы при помощи оценки по величине определить, насколько безопасна сеть без Координатора. Недавний стресс тест в небольшой тестовой сети показал более 100 транзакций в секунду (т/с). Команда предположила, что достижение показателя 1,000 т/с является возможным. Давайте предположим, что, в конечном итоге, IOTA достигла 10,000 т/с. Я не знаю, какое текущее требование PoW для IOTA, но давайте предположим, что средним устройством IoT является Raspberry Pi и 100% производительность CPU для выполнения требуемого PoW достигается в течение 10 секунд. Опять же, многие устройства IoT имеют меньшую мощность, чем Raspberry Pi, и работа процессора в течение 10 секунд для каждой транзакции, вероятно, приведет к провалу.

С этими предположениями мы можем прийти к заключению, что средняя вычислительная мощность, обеспечивающая сеть, составляет приблизительно 10,000 x (количество вычислительных операций Raspberry Pi за 10 секунд) или 100,000 х на вычислительную мощность Raspberry Pi. Есть много нюансов для правильного сопоставительного анализа компьютеров, но нас не интересуют факторы двух или трех - мы просто собираемся оценить порядок величины, поэтому мы будем использовать некоторые цифры, которые я нашел в Интернете

Raspberry Pi3 может достигать сотни MFLOPS (мегафлопс или миллионы операций с плавающей точкой в секунду), а высокопроизводительные графические процессоры измеряются в тысячах GFLOPS (гигафлопс, или миллиарды операций с плавающей точкой в секунду), что в 10,000 раз больше вычислительной мощности. Таким образом, в нашем гипотетическом сценарии злоумышленник с ~ 10 GPU может вычислить всю сеть. Добавьте еще 10, потому что я был неточным, и возможно, целочисленные операции на графических процессорах немного медленнее, чем операции с плавающей точкой, и для выполнения атаки вам еще нужно всего 100 GPU.

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

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

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

В этом случае разработчики IOTA внесли креативный аргумент, не включенный в «Белую книгу», о том, что ограничения пропускной способности и топология сети фактически укрепляют безопасность сети. Я нигде не нашел официального заявления об этом, но после некоторых поисков я наткнулся на эту переписку в Slack, которая является единственным полным аргументом, который я смог найти.

Один из разработчиков IOTA (в частности, Come-from-Beyond, известный как Сергей Иванчегло, и возможно, также известный как BCNext, и также один из первых создателей Nxt), утверждает, что сеть IOTA будет состоять из устройств IoT, которые взаимодействуют исключительно с их ближайшими соседними элементами в ячеистой топологии, и что у злоумышленника даже не будет возможности взаимодействовать с большим количеством устройств в каждой такой ячейке. То есть значительное количество устройств не будут доступны из Интернета или какой-либо другой опорной сети (бэкбон), и единственным способом отправить им сообщения будет использование ячеистой сети других устройств.

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

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

Говоря об ограничениях пропускной способности, давайте затронем тему о масштабируемости.

Масштабируемость

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

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

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

Кроме того, как и все распределенные реестры, IOTA должна бороться с раздуванием. Каждая транзакция на IOTA составляет приблизительно 1,6 кБ, поэтому скорость транзакции, составляющая 100 т/с, приведет к увеличению сплетения со скоростью 160 кБ в секунду, или около 14 ГБ в день. Излишне говорить, что это нереалистичный требуемый объем памяти для устройства IoT.

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

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

Наконец, стоит отметить, что команда IOTA предложила вариант горизонтального разделения сплетения, которая называется «swarm», где многие узлы вместе хранят полное сплетение, но ни один узел не хранит все это. К сожалению, пока еще мало деталей о том, как это работает.

Сравнение с Ardor

Так что из всего этого имеет отношение к платформе Ardor?

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

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

Ardor, напротив, имеет преимущество, потому что его дочерние цепочки защищены единой родительской цепочкой.

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

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

С другой стороны, IOTA столкнётся с огромной проблемой, связанной с раздуванием сплетения (tangle), когда она достигнет скорости сотни транзакций в секунду, тогда как Ardor в значительной степени решила эту проблему.

Наконец, стоит отметить, что согласно предложению на карте развития Ardor обработка транзакций дочерней цепочки была бы передана в выделенные подсети. Это потенциально обеспечило бы вычислительный прирост, подобно «swarming» предложению от IOTA, возможно, приведя к аналогичной высокой пропускной способности.

Заключение

Если вы когда либо уже читали об этом (спасибо!) и уже знакомы с IOTA, то вы, несомненно, заметили, что я упустил много деталей: встроенный алгоритм хеширования, недостаток этого алгоритма, который Come-from-Beyond обозначил как механизм защиты от копирования, использование троичного кодирования и таинственный процессор Jinn, который обеспечивает аппаратную поддержку IOTA в устройствах IoT. В ходе моих исследований я сформировал вполне определённое мнение по ним, но я не хотел делиться этим здесь по двум причинам.

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

Во-вторых, и что более важно, меня больше интересуют фундаментальные понятия, лежащие в основе сплетения (tangle), чем конкретная реализация IOTA. Независимо от того, будет ли IOTA иметь успех или нет, сплетение – это прекрасная идея и заслуживает нашего внимания.

Итак, что мы можем сказать о сплетении (tangle)? Хотя я и в восторге от простоты дизайна и нюансов консенсус механизма, в конце дня я, к сожалению, скептически отнеся к его пригодности к Интернету Вещей. Если убрать этот аспект, увеличить PoW требование и найти способ привязать порог PoW к денежной значимости сети, не убирая обычных пользователей из их фондов, я думаю, что сплетение будет обладать огромным потенциалом как распределенный реестр.

Последний недостающий момент - это то, как безопасно и эффективно справляться с раздуванием, проблемой, которую Ardor решил чрезвычайно хорошо. Возможно, кто-то найдет способ объединить лучшие элементы обоих проектов когда-либо в будущем. К тому времени многое может произойти, особенно в мире cryptoland.

Перевод статьи с английского, источник https://www.nxter.org/ardor-vs-competition-pt-3-iota/