Топологически упорядоченная база данных биткойнов

Сегодня я выпускаю новую базу данных для биткойнов на Планарии под названием Neon Genesis. Neon Genesis - это вилка Genesis, но с небольшой изюминкой:

Топология транзакции

ДА, топологический порядок транзакций (или естественный порядок), на котором основан Биткойн, может иметь множество вариантов использования.

Ниже я объясню, что это означает на практике, но сначала вот общедоступная конечная точка:



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



Чтобы понять, почему Neon Genesis работает именно так и почему он работает, нам сначала нужно понять концепцию времени в Биткойне. Начнем с обсуждения времени.

Биткойн - это время

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

Тем не мение…

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

Время реализации

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

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

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

И ЭТО компромисс, который делает Chronos. Поддерживая временную метку реального мира, он теряет немного детерминизма. Но это нормально для многих приложений, и Chronos по-прежнему очень полезен для различных случаев использования.

Фактически, это настолько полезно, что только что был выпущен новый экземпляр под названием «Weekly», который поддерживает 7-дневную историю вместо первоначального 24-часового периода окна, который поддерживал Chronos. Вот где это можно использовать:



Но есть ли другие способы?

Биткойн Шредингера

Время не линейно. Это линейно только для того, кто испытывает это на собственном опыте.

Одновременно сосуществуют несколько потоков времени. Каждый узел Биткойн - это собственная вселенная со своей временной шкалой. Время течет линейно в каждой реальности. Мертва ли кошка или жива, уже решено в каждой реальности, но для внешнего мира не решается, пока за ними не «наблюдают», открыв коробку, которая существует как форма нового блока.

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

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

Как время течет внутри ящика Шредингера

Вернемся к заявлению, которое я сделал ранее:

«Все, что происходит в одном блоке, следует рассматривать как происходящее ОДНОВРЕМЕННО».

Это все еще актуально. Все транзакции в одном блоке имеют единую временную метку Unix.

Но что происходит внутри ящика Шредингера? Внутри коробки время все еще течет линейно. Кошка тоже линейно воспринимает время. Однако внутри коробки нет абсолютной отметки времени для каждой транзакции. Нет отметки времени unix или чего-то еще. Это станет особенно актуальным по мере развития и параллелизации майнинга биткойнов. Поэтому пытаться выбрать эту концепцию «метки времени реального мира» для транзакций внутри блока бессмысленно.

Однако у нас ДЕЙСТВИТЕЛЬНО есть кое-что очень ценное, и это относительный график. Тот факт, что вы не знаете, который час (абсолютное время), не означает, что вы не можете ощущать течение времени (относительное время).

Ниже представлена ​​визуализация Биткойна. Горизонтальные пунктирные линии - это относительные временные шкалы внутри каждого узла, и все эти временные шкалы разрешаются в блокчейн (вертикальная сплошная линия) как единственная абсолютная временная метка.

Представьте, что вы заключенный, которого отправили в изолятор без света и без понимания того, что происходит снаружи. Через несколько дней вы быстро потеряете ощущение времени в изоляционной камере. И это то, что Шредингер сделал со своим котом. Однако не бойтесь! У вас все еще есть способность воспринимать «относительное время». Если вы встанете, а затем сядете, вы знаете, что вставание происходило до того, как сесть. ЭТО относительное время. И это по-прежнему имеет важное значение, даже если эта относительная временная шкала не может быть привязана к абсолютной временной шкале внешнего мира.

Временная война

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

Например, до тех пор, пока не будет рожден новый блок, транзакция A в узле X могла произойти до транзакции B. Однако в узле Y транзакция B могла произойти до A. Итак ... имеет ли это значение в общей схеме вещей? Означает ли это несоответствие, что эта относительная временная шкала бесполезна?

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

Итак, почему это нормально, если транзакция A идет перед B в «мире 100», но B появляется перед A в «мире 200»? Потому что историю пишут победители. Неважно, что думает «мир 100», если «мир 200» в конечном итоге завоюет мультивселенную, потому что остальные вселенные в системе мультивселенной вскоре будут следовать правилам «мира 200». Если вы проиграли одну войну, разумно принять реальность и подготовиться к следующей войне.

Представляем Neon Genesis

Neon Genesis, как следует из названия, происходит от Genesis. Так чем же он отличается? И почему это имеет смысл?

Он поддерживает топологию транзакций.

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

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

До сих пор существовало три хронологических способа сортировки транзакций в различных узлах планарии:

  1. Время блокировки: blk.t в Бытие, Вавилон и т. д.
  2. Высота блока: blk.i в Бытие, Вавилон и т. д.
  3. Реальное время: timestamp в хроносе

Обратите внимание, что blk.t и timestamp - абсолютное время, а blk.i - относительное время.

А теперь с Neon Genesis мы получаем доступ к относительному времени ВНУТРИ блока. Вот простой способ визуализировать, как работает Neon Genesis:

Относительная временная шкала представлена ​​новым атрибутом с именем "i". Этот новый атрибут представляет относительный порядок транзакций в блоке. Так, например, если транзакция была седьмой транзакцией, включенной в блок, она имела бы 7 в качестве атрибута "i".

Это означает, что вы можете запрашивать такие вещи:

Здесь просто выбираются последние 20 элементов транзакции, отсортированные по:

  1. высота блока («blk.i») первая
  2. а затем индекс («i»)

Например, если текущая высота блока была 582609 и были:

  • 14 транзакций в блоке 582607
  • 7 сделок в 582608
  • 3 сделки в 582609

Вышеупомянутый запрос вернет все 3 из 582609, все 7 из 582608, а затем последние 10 транзакций (с i в диапазоне от 4 до 13) в блоке 582607, отсортированные по относительному порядку внутри блока. Что это значит?

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

Это также означает, что можно построить единую каноническую шкалу времени как гибрид абсолютного и относительного времени. Вот пример:

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

(27182818, 0), (27182818, 1), (27182818, 2), (27182818, 3), (27182818, 4),
(27182819, 0), (27182819, 1), (27182819, 2),
(27182820, 0), (27182820, 1), (27182820, 2), (27182820, 3), (27182820, 4),
(27182820, 0), (27182820, 1)

Хотите поиграться с базой данных? Вот еще один пример, который вы можете попробовать: https://neongenesis.bitdb.network/query/1HcBPzWoKDL2FhCMbocQmLuFTYsiD73u1j/ewogICJ2IjogMywKICAicSI6IHsKICAgICJkYiI6IFsiYyJdLAogICAgImZpbmQiOiB7fSwKICAgICJzb3J0IjogewogICAgICAiYmxrLmkiOiAtMSwgImkiOiAtMQogICAgfSwKICAgICJsaW1pdCI6IDEwMAogIH0sCiAgInIiOiB7CiAgICAiZiI6ICJbLltdIHwgeyBvcmRlcjogLmksIHR4aWQ6IC50eC5oLCBibG9jazogLmJsay5pIH1dIgogIH0KfQ==

Хронос против Неонового Генезиса

Чтобы по-настоящему разобраться, как все это работает и что это означает, давайте просто для удовольствия сравним Chronos с Neon Genesis.

Вот первое различие между ними:

  • Хронос: на основе абсолютной отметки времени в мемпуле.
  • Neon Genesis: на основе топологического упорядочения внутри блока.

Второй,

  • Хронос. Каждая транзакция имеет абсолютную временную метку (временную метку Unix, когда они были обнаружены).
  • Neon Genesis: каждая транзакция имеет двумерную метку времени: абсолютную и относительную. Сначала у нас есть абсолютная метка времени блока blk.t (у них также есть относительная метка времени blk.i, но это выходит за рамки этой статьи) Затем в том же блоке каждая транзакция имеет свой относительный индекс i. Эти индексы не являются абсолютными отметками времени, а лишь сообщают вам порядок, в котором они произошли в каждой реальности.

использование

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

Как и Хронос, вы можете использовать Neon Genesis для различных случаев, требующих времени, но по-другому. Фактически, вы даже можете использовать одновременно и Chronos, и Neon Genesis.

Например, представьте, что Memo должны были реализовать сервис с помощью Planaria. Он может использовать комбинацию Chronos и Neon Genesis: Chronos для сообщений в мемпуле и Neon Genesis для сообщений в блоке.

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

alice: just updating my memo           Block 27182818:Index 31415
rando: @_unwriter Hello! How are you?  Block 27182818:Index 31414
_unwriter: Hello World!                Block 27182818:Index 31413
...

ИЛИ, если бы он использовал формат «время назад», он может принять новую единицу относительных часов Биткойна (давайте для краткости назовем его здесь просто «тик»), и это может выглядеть так:

alice: just updating my memo                   11 TICKS AGO
rando: @_unwriter Hello indeed! How are you?   12 TICKS AGO
_unwriter: Hello World!                        13 TICKS AGO
...

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

Заключение

Neon Genesis - это эксперимент, который может быть использован всеми другими узлами Planaria, поэтому, если вам это нравится, дайте мне знать, и я могу даже расширить поддержку других узлов Planaria.

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

Попробуйте Neon Genesis:



Узнайте, как построить что-то вроде Neon Genesis:



Присоединяйтесь к сообществу и делитесь отзывами:



Узнайте больше в Twitter: