Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
19 августа 2012, 2:26:27 PM   # 1
 
 
Сообщения: 125
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Это конкретное предложение (и эталонная реализация) для Merkle дерева неизрасходованных-выходов (UTXOs). В конце концов, идея состоит в том, чтобы включить в корневой хеш текущего UTXO дерева в каждом блоке. Это позволит полную проверку (нулевого доверия) облегчённые клиентов, которые используют только константу O (1) объем хранения - например, клиент, который подходит на смарт-карты - и O (журнал N) количество усилий на txOut (где N представляет собой общее количество UTXOs в любой момент времени).

**РЕДАКТИРОВАТЬ**Я включал несколько изменений по сравнению с прослеживание сообщение которые повышают сложность транзакций проверки.

обзор
Проверка сделки требует проверки того, что каждый ТХ-вход не был уже израсходованы. Один из способов сделать это, чтобы перебирать, для каждого TX-вход, от головы цепи обратной, ищет сделки, которая проводит его. Это было бы неэффективным - вместо этого, стандартный клиента (в том числе Питера Wuille-х UltraPrune изменение) создает и поддерживает базу данных, содержащие (по крайней мере) всю доступную в настоящее время монеты. Предлагаю хранить неизрасходованные выходы, а также в качестве дополнительного "запросов по-адрес" Индекс, в сбалансированном Merkle дерева поиска, (то есть, дерево RedBlack дополнен хешами). Это приведет к ряд преимуществ:
  • узлы Full-проверки (особенно облегченный клиентов) нужно будет только для хранения (и доверия) в O (1) хэш текущего блока головки. Данные проверки могут быть запрошены по мере необходимости из (полностью ненадежного) распределенной хеш-таблицы (DHT) (например, сеть сплетен-слой).
  • Lite клиенты могут "начальная загрузка" сами немедленно, просто выбрав правильную голову.
  • Клиенты могут безопасно запросить DHT для получения полного списка расходуемого (стандарт) UTXOs, связанного с данным адресом, без необходимости "пересканировать" blockchain.
  • Произвольная длина вилка может быть допущена без необходимости выработки "REORG."
  • "Доказательств" недействительных сделок (например, двойной потратить) может быть подтверждено в O (N журнал), а также.

Это предложение предусматривает один дополнительный хэш для размещения в каждом блоке: корень хэш дерева UTXO Merkle. Как таковая, она принадлежит в HardFork лист пожеланий. Тем не менее, он также может быть включен в (необязательно слияние-добытого) альт-цепи. Это потребует дополнительных вычислений для проверки транзакции - добавление будет постоянным фактор, так как каждый обработано txinput / txoutput уже требует (даже в UltraPrune), уплотнительный (журнал N) обновление таблицы ВТКЕЯ из UTXOs. На данный момент, это предложение просто описывает автономную структуру данных, которая может быть получена на основе имеющихся данных blockchain.

Нормативная спецификация для этого протокола состоит из A) (сериализация и переваривает) формат для узлов в сбалансированном дереве, где каждый узел листа содержит одну UTXO, а узлы ветвления содержат хеши своих детей; и B) алгоритмы вставки / удаления, которые сохраняют инварианты RedBlack (балансировочный) дерев, гарантирующий O (журнал N) наихудшее усилие каждого обновления.

Эталонная реализация написана на Python, и состоит из 1) модульных, расширяемых, и побочного эффекта свободной RedBlack дерево (в том числе модульных тестов), которые могут быть дополнены произвольно «переварить» функции, 2) экземпляр этой структуры с указанная функция переваривать, и 3) скрипт, который обрабатывает фактические данные blockchain и применяет каждое обновление (каждый txinput и txoutput) к дереву Merkle. Эталонная реализация не совсем оптимизированы, но вместо этого предназначен для простой в анализе и обеспечить побитно правильный золотой стандарт для дерева Merkle на каждом шагу.

Это предложение также является предшественником "В конце концов, Zero-Trust Вероятностный Validation" Схема I описана в более ранняя нить.

Связанных с работой
ByteCoin первым предложил в том числе хэш тока "баланс" в каждом блоке (То есть, набор доступных неизрасходованных выходов TX), что делает возможным проверить транзакции без необходимости хранить всю blockchain. Грег Максвелл позже предложил используя дерево Меркла для того, чтобы выполнить запрос, например, этот набор более эффективно. DiThi позже сделал эквивалентное предложение. Совсем недавно, etotheipi предложил используя самобалансирующейся Меркле дерево так что инкрементальная модификация структуры будет более эффективной. Я обыскивал научную литературу, поиск Usenix документ с 1996 года по Moni NaOR и Kobbi Nissim, предполагая, что дерево RedBlack может быть увеличено с хэш вместо указателей. я написал эталонная реализация такого "Структура данных идентифицированных", Насколько мне известно, это единственный доступный (с открытым исходным кодом) реализация самобалансирующегося хэш дерева.

Хэш дерева (сорта без балансировочных) широко используются, например, в Гит И в Тахо-LAFS.

Нормативная Спецификация протокола
А. Сериализация и Digest Формат
Каждый узел в двоичном узле дерева поиска RedBlack состоит из 1) ключа (самый большой ключа в левом поддереве), 2) левый и правый дети (возможно, отсутствующего), и 3) один бит (представляющий красный или черный), используемый для балансировки 4) значения (только листовые узлы). Ключи должны быть упорядоченная в целях поддержки эффективных поисковых запросов к этой структуре. Два вида запросов поддерживаются (хотя еще может быть добавлено): поиск по (TXID, индекс), как это необходимо для подтверждения операций, а также поиск по (адрес, TXID, индекс), который полезен для клиентов для запроса баланс адреса.

Есть два вида отображений, хранящихся в дереве:
1. UTXO проверки:
       (TXID, индекс) -> (Хэш данных проверки)

    Проверки достоверности данных является подмножеством данных о транзакции, соответствующих TXID: один scriptPubKey, а также некоторые необходимые метаданные (isCoinbase и nHeight).

2. Адрес сканирования:
      (Адрес, TXID, индекс) -> ()

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

Два основных типа обозначены префиксом четыре байт, "UTXO" для (TXID, индекс), и "АДРЕСА" для (адрес, TXID, индекс). «Корневого хэш» является дайджестом корневого узла дерева. Каждый гидролизат является SHA256 хэш сериализованного узла. В последовательном формате, левые и правые поддеревья представлены их переваривает. Дайджеста пустого дерева представлена ​​на 32 нулевых байтов (то есть, генезис хэш). Листовые узлы и узлы ветвления упорядочиваются по-другому, со значением дозорного ("," для листьев, "^" для филиалов), чтобы различать между ними.

Промежуточные узлы сериализуются следующим образом:
Код:
         (Цвет, дл, (("UTXO", Txhash, индекс), ()), Д.Р.):
            [1 байт] [1 байт] [4 байта] [32 байта] [32 байта] [4 байта] [32 байта]
               "^"    цвет   "UTXO"   H (левый) txhash индекс H (справа)
            всего: 1 + 1 + 4 + 32 + 32 + 4 + 32 = 106 байт

          (Цвет, дл, (("АДРЕСА", Адрес txhash, индекс), ()), Д.Р.):
            [1 байт] [1 байт] [4 байта] [32 байта] [20 байт] [32 байта] [4 байта] [32 байта]
            [  "^" ][ цвет][ "АДРЕСА"] [Н (левый)] [адр] [txhash] [индекс] [Н (справа)]
            всего: 1 + 1 + 4 + 32 + 20 + 32 + 4 + 32 = 126 байт

Листовые узлы сериализовать в другом формате, так как левый / правый дайджесты не нужны, но это значение должно быть включено.
Код:
         (цвет, (), (("UTXO", Txhash, индекс), utxohash), ()):
            [1 байт] [1 байт] [4 байта] [32 байта] [4 байта] [32 байта]
               ","    цвет   "UTXO"    txhash индекс utxohash
            всего: 1 + 1 + 4 + 32 + 4 + 32 = 74 байт

          (цвет, (), (("АДРЕСА", Адрес txhash, индекс), ()), ()):
            [1 байт] [1 байт] [4 байта] [20 байт] [32 байта] [4 байта]
               ","    цвет   "АДРЕСА"      Индекс txhash адр
            всего: 1 + 1 + 4 + 20 + 32 + 4 = 62 байт


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

Особые правила балансировки, которые я выбрал, были опубликованы (Stefan Kahrs, "Красно-черные деревья с типами" Журнал функционального программирования, 11 (04), стр 425-432, июль 2001 г.), и полностью определены в этот код Haskell. Этот алгоритм широко используется, например, см LLRB деревья Kāzu Ямамото, этот пост в блоге Мэтт Might, а также этот пост в блоге Марк Чу-Кэррола. Эти правила основаны на знаменитой докторской диссертации Криса Окасаки, в Чисто функциональные структуры данных, которая предусматривает четыре простого правила индивидуального матча достаточно для RedBlack дерева вставка (видеть "баланс" в спецификации Haskell). Для реализации удаление, четыре дополнительные случаи должны быть обработаны (см "balleft" а также "balright" в спецификации Haskell).

Для каждой сделки, сначала все txinputs будут удалены (в последовательном порядке) из дерева, и вторые все новые txoutputs вставляются (также в последовательном порядке). Каждая операция применяется в последовательном порядке в пределах каждого блока, и, конечно, каждый блок применяется для того, как он появляется в цепи.

Ссылка Impementation
Эталонная реализация состоит из трех питона файлов.
  • redblack.py: Реализация красно-черного дерева Стефана Kahrs', с расширяемой "дайджест" увеличение. Два "режимы" предусмотрены для каждой из трех операций: режим записи работает на полном дереве (представлен в виде вложенных питона кортежи), и производит Проверочное Object (VO) (т.е. O (журнал N) путь, состоящий только из узлов, которые были доступ во время этой операции), в то время как режим воспроизведения принимает в корневой хэш и ненадежного VO и проверяет операцию пересчета хэш на каждом шаге.
  • utxo_merkle.py: Специализация RedBlack по definining протокола / сериализации дайджеста описана выше
  • merkle_scan.py: Скрипт, который перебирает весь blockchain, от генезиса блока к голове, постепенно обновляя Merkle дерево, как она идет (требует Гэвин Андресен-х питон bitcointools)

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

Эталонная реализация не оптимизирована. До сих пор я только запустить его на первых 140K блоков перед нетерпением. Это займет всего несколько минут, чтобы пробежать первые 200k сделок. Я спасу обсуждение оптимизированных реализаций для последующих сообщений в этой теме (я предлагаю вам помочь!), Хотя я планирую обновлять этот пост, по крайней мере с оценками производительности, как я иду вперед.

Тизер изображения (два байта хэш)
До и после вставки элемента 10 (дерева полного O (N), режим записи)


До и после вставки элемента 10 (только O (1) корневой хэш и О (журнал N), ненадежный В.О., режим воспроизведения)


Что теперь?
Это не новое предложение; вариации этой идеи были подпрыгивая с 2010 года Из-за свой потенциал для повышения безопасности и масштабируемости облегченных клиентов, важно развивать это раньше, чем позже. Моя цель состоит в том, чтобы подтолкнуть этот процесс вместе, предлагая конкретный протокол и обеспечивает эталонную реализацию. Этот поток должен быть о спецификации и детали реализации (прежде, чем сделать "Зачем беспокоиться?" сообщение, пожалуйста, прочитайте нить etotheipi или какой-либо другой я уже упоминал в произведении).

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

Я планирую постепенно оптимизировать эталонную реализацию, и для O (1) -Хранение Lite-клиентов и полный O (N) -Хранение (UltraPrune) клиентов, а также для обеспечения масштабируемого (ненадежный) DHT, который может служить дерево данные для любой точки в blockchain истории. Мне нужно будет сделать по крайней мере, некоторому прогрессу в этом направлении, прежде чем я могу предложить какую-либо оценку производительности. Вот профиль / для граф вызовов текущей реализации, предполагая, что менее чем 2% времени тратится на вычисления хэшей (большую часть времени тратится на моей эскизной функции сопоставления с образцом, так что это первое, что нужно работать над).

Оба etotheipi и gmaxwell предпочел бы использовать вместо попыток сбалансированных бинарных деревьев по причинам, я считаю uncompelling. Пытается (по крайней мере те, с Merkle хэшей), вероятно, потребуется больше пространства и вычислений, чем сбалансированных деревьев. Etototheipi любит вставную-заказ-независимость в синтаксическом дереве, хотя это не имеет значения, если каждые из них содержит обязательство к корневому хэшу (так как вы можете найти предыдущий корневой хэш в предыдущем блоке). Я не знаю, почему gmaxwell предпочитает попытку. В любом случае, это их очередь обеспечить конкурирующую реализацию!
socrates1024 сейчас офлайн Пожаловаться на socrates1024   Ответить с цитированием Мультицитирование сообщения от socrates1024 Быстрый ответ на сообщение socrates1024


Как заработать Биткоины?
Без вложений. Не майнинг.


20 августа 2012, 8:53:03 PM   # 2
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

Получил 1806 Биткоинов
Реальная история.





Временно отложив дебаты о вставной-порядок-зависимости и пытается-против-BSTs, почему бы не сделать все узлы "лист" узлы? Традиционный BST фактически не отличить - он просто имеет левый и правый указатель, и если они оба NULL, это лист. То, что я предлагаю, что каждый узел содержит элемент множества, и при поиске этого элемента вы можете остановить, прежде чем попасть на дно подотрасли, потому что сам узел ветвления является элементом. Это "стоимость" является хэш некоторой конкатенации, например, SHA256 (elementHash || LeftPtrValue || RightPtrValue). Похоже, что это может сэкономить пространство, хотя я не могу понять, с верхней части моей головы, будь-то значительным. Или же, что сломать некоторые свойства дерева вы показали здесь?

etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

20 августа 2012, 8:58:56 PM   # 3
 
 
Сообщения: 125
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

Я хочу сделать улучшение этого предложения.

Первоначально мое UTXO дерево содержало только ключи, формы (TXID, индекс). Для того, чтобы фактически подтвердить сделку, было бы необходимо искать соответствующие данные транзакции. Несмотря на то, лишь небольшая часть из этих данных транзакций актуальна (только один txout), уплотнительное (1) -Хранение клиент также должен был бы пересчитывать хэш по всей транзакции, чтобы быть безопасным. Это означает, что стоимость проверки, за txout, идет от O (N журнал) до O (T войти N), где Т представляет размер сделки (общее количество txins и txouts).

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

Проверки состоит из полей (isCoinbase, nHeight, сумма, scriptPubKey). Я бы сериализовать его следующим образом:
Код:
             [1 байт] [4 байта] [8 байт] [х байт]
              isCoinbase nHeight количество scriptPubKey

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

Код:
          (цвет, (), (("UTXO", Txhash, индекс), utxohash), ()):
            [1 байт] [1 байт] [4 байта] [32 байта] [4 байта] [32 байта]
               ","    цвет   "UTXO"    txhash индекс utxohash
            всего: 1 + 1 + 4 + 32 + 4 + 32 = 74 байт

Я не могу думать о какой-либо причине, чтобы включить «ценность» для ADDR поисков, но они по-прежнему могут воспользоваться опуская ребенок хэш.
Код:
          (цвет, (), (("АДРЕСА", Адрес txhash, индекс), ()), ()):
            [1 байт] [1 байт] [4 байта] [20 байт] [32 байта] [4 байта]
               ","    цвет   "АДРЕСА"      Индекс txhash адр
            всего: 1 + 1 + 4 + 20 + 32 + 4 = 62 байт

С помощью этой схемы, проверка транзакций только стоит O (N журнала) за txout, независимо от общего размера каждой сделки.
socrates1024 сейчас офлайн Пожаловаться на socrates1024   Ответить с цитированием Мультицитирование сообщения от socrates1024 Быстрый ответ на сообщение socrates1024

20 августа 2012, 9:26:30 PM   # 4
 
 
Сообщения: 125
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

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

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

Когда я осуществляю свою RedBlack дерево, я на самом деле перешел туда и обратно по этому вопросу несколько раз, так как я не был уверен, если это было необходимо использовать клавиши + значение или только ключи. Я осела с помощью клавиш + значений, и сейчас (см предыдущий пост) У меня есть веские основания для этого.
socrates1024 сейчас офлайн Пожаловаться на socrates1024   Ответить с цитированием Мультицитирование сообщения от socrates1024 Быстрый ответ на сообщение socrates1024

21 августа 2012, 1:01:37 AM   # 5
 
 
Сообщения: 125
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

я сделал пост, в котором я обозначил необходимые требования для структур данных Bitcoin. Я сосредоточился на двух различных задач: вилке проверки и подтверждения транзакции.

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

С другой стороны, если вы позволяете более сильные предположения (например, о количестве txouts каждого уникального TXID) или более слабых требований, есть, по крайней мере, некоторые из возможных сценариев, в которых TRIE на основе решения быстрее, но никогда больше, чем постоянный множитель ,

Некоторые связанные с работой с использованием Merkle ПЫТАЕТСЯ

Я нашел несколько примеров Merkle Попыток. Ни один из них не упомянул какую-либо выгоду от порядка обретения независимости. Каждый из них предполагает, что Trie в среднем быстрее, чем RedBlack Меркл дерева постоянного множителем, однако это зависит от ключей, состоящих только из случайных хэш. В UTXO, мы, по крайней мере, нужно искать информацию для проверки с помощью (TXID, IDX). Одно из предложений было использовать где синтаксического дерева только клавиша (TXID) и все txouts с тем же TXID сгруппированы вместе. В этом случае проверка среднего случая зависит от некоторого дополнительного количества, T, описывающее соотношение txouts к уникальной txids: О (Т лога M).

socrates1024 сейчас офлайн Пожаловаться на socrates1024   Ответить с цитированием Мультицитирование сообщения от socrates1024 Быстрый ответ на сообщение socrates1024

21 августа 2012, 4:39:16 AM   # 6
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

я сделал пост, в котором я обозначил необходимые требования для структур данных Bitcoin. Я сосредоточился на двух различных задач: вилке проверки и подтверждения транзакции.

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

С другой стороны, если вы позволяете более сильные предположения (например, о количестве txouts каждого уникального TXID) или более слабых требований, есть, по крайней мере, некоторые из возможных сценариев, в которых TRIE на основе решения быстрее, но никогда больше, чем постоянный множитель ,

Некоторые связанные с работой с использованием Merkle ПЫТАЕТСЯ

Я нашел несколько примеров Merkle Попыток. Ни один из них не упомянул какую-либо выгоду от порядка обретения независимости. Каждый из них предполагает, что Trie в среднем быстрее, чем RedBlack Меркл дерева постоянного множителем, однако это зависит от ключей, состоящих только из случайных хэш. В UTXO, мы, по крайней мере, нужно искать информацию для проверки с помощью (TXID, IDX). Одно из предложений было использовать где синтаксического дерева только клавиша (TXID) и все txouts с тем же TXID сгруппированы вместе. В этом случае проверка среднего случая зависит от некоторого дополнительного количества, T, описывающее соотношение txouts к уникальной txids: О (Т лога M).


Вы фокусирование много на скорости доступа. Получение вопроса о скорости доступа из пути является важным, но я думаю, что останавливаться на нем нет необходимости. Мы установили, что даже миллиарды элементов, то Trie и BST будут иметь тот же, абсолютный порядок времени доступа величины. Trie имеет более теоретический порядок роста по отношению к числу элементов (O (1)), но это абсолютное время постоянного доступа будет сравнимо с O БСТА (в LogN) для N < 10 ^ 10. Я уже доволен заключением:  "и достаточно быстро."

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

(1) Как вы можете гарантировать, что узел-удаление из BST приведет к одной и той же базовой структуре дерева, как вы начали? Любое конкретное добавление узла может просачиваться операции перебалансирования / вращения от нижней части BST к вершине. Гарантирует ли узел-делеция, чтобы отменить эти повороты? Если нет, то, что вам нужно после каждой операции, чтобы убедиться, что вы знаете, как удалить узел, если возникнет необходимость?
(2) Если облегченный-узел запрашивает все UTXOs для данного адреса, как вы (Поставщик) передавать эту информацию? Вы не можете просто дать ему последовательный список UTXOs, и вы не знаете, просто глядя на адресном дереве в каком порядке они были вставлены в подотрасль. Как вы общаетесь эту информацию в облегченном-узел, чтобы он мог проверить список UTXO?

Конечно, я должен дополнить эти вопросы с тем, что пытается даже не должны думать об этом. (1) Удаление узла из синтаксического дерева! Если две попытки имеют одни и те же элементы, что они имеют одинаковую структуру. (2) Отправить список UTXO в любом порядке: если две попытки (или TRIE-ветви) имеют одни и те же элементы, что они имеют одинаковую структуру!

Я не хочу, чтобы сорвать эту нить слишком далеко в направлении Trie-против-BST. Я просто хочу, чтобы убедиться, что есть хорошие ответы на эти вопросы. Я действительно ценю, что кто-то поставил во времени, чтобы попытаться сделать доказательство правильности концепции. Даже если я не согласен с определенной оптимизацией, есть много значения / образования фактически пытаюсь поставить теорию на практику, и уроки, которые вы узнаете, помогут нам в будущем - или вы просто закончить это для нас и тогда мы будем с благодарностью использовать ваше достижение!

Так, спасибо за пионерами этих усилий!

Постскриптум - Вы утверждали в ПМ, с точкой, что Trie может быть параллельно дополненным / поддерживаются. Но я не понимаю аргумент. Я могу спроектировать систему, в которой ветвь узел верхнего уровня (разветвление первого байта), разделены между X нитей / жестких дисков / серверов. Каждый сервер обрабатывает 256 / X отделений. Когда новый блок приходит, все дополнения и делеция, индуцированные этот блок распределяются на соответствующий сервер. Основные ожидания резьбы для всех серверов, чтобы закончить - что происходит на отчетном обновленном "корнеплоды" их поддеревьев - то основной поток объединяет тех, кто в конечном, мастер корень. Это похоже на действительной (крупной!) Выгоду.  



etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

21 августа 2012, 5:34:24 AM   # 7
 
 
Сообщения: 125
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

Это не откос, это самое главное, что мы должны выяснить.

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

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

(1) Как вы можете гарантировать, что узел-удаление из BST приведет к одной и той же базовой структуре дерева, как вы начали? Любое конкретное добавление узла может просачиваться операции перебалансирования / вращения от нижней части BST к вершине. Гарантирует ли узел-делеция, чтобы отменить эти повороты? Если нет, то, что вам нужно после каждой операции, чтобы убедиться, что вы знаете, как удалить узел, если возникнет необходимость?
(2) Если облегченный-узел запрашивает все UTXOs для данного адреса, как вы (Поставщик) передавать эту информацию? Вы не можете просто дать ему последовательный список UTXOs, и вы не знаете, просто глядя на адресном дереве в каком порядке они были вставлены в подотрасль. Как вы общаетесь эту информацию в облегченном-узел, чтобы он мог проверить список UTXO?

1) Узел удаления не обратная узла-вставки. Это не является обязательным требованием. Обе операции производят новые деревья, как правило, с новыми корневыми хэшей. Есть потенциально много деревьев, которые представляют один и тот же набор монет, но только конкретное дерево совершается в данном блоке. Для того, чтобы ответить на "если нет, то, что" вопрос, я попытался четко описать два абстрактных сценариев:

  • Сделка Validation: Я предполагаю, что вы уже знаете, корневой хэш в момент времени T, и иметь доступ к ненадежной копии UTXO-набора (например, хранится на общем облаке хоста). Теперь вам нужно надежно вычислить новый корневой хэш для времени Т + 1 (с одной UTXO удалена). Это делается детерминировано, используя правила RedBlack удаления. Вам нужно только принести O (журнал М) элементы из ненадежного хранилища. Это точно так же трудно, как и с UltraPrune (BTree), который также извлекает по меньшей мере O (журнал М) данных (но требует надежного хранения).

  • Вилка проверка: Если вы проверка вилки, это потому, что вы получили голова цепи, которая претендует быть больше, чем у вас. Пусть точка вилка возвращается N блоков назад. Даже если у вас есть полный UTXO для текущей вилки, вам необходимо моделировать узел, который самозагрузка себя от всего заголовка из N блоков назад. Она занимает O (N журнала M) операции для проверки новой вилки, но только нужно скачать O (M + N) данные, M для моментального снимка UTXO дерева из N блоков назад в вашей цепочке, и N для всех сделки в вилке. Вы проверить их в прямом порядке. Вы не уязвимы для DDoS, потому что вы проверить работу первого (заголовки).


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

Вы (ненадежный сервер) имеют цепь N блоков длиной, и вы хотите, чтобы иметь возможность обслуживать запросы, где «roothash» падает где-нибудь в вашей цепочке. Тогда вы должны хранить O (M + N журнал M) данные в общем - M для текущего UTXO снимка, и N войти M для всех "дельт" от каждой сделки в прошлом. Это "стойкие структура данных" потому что вы можете имитировать запросы от любого из N деревьев, представленных в вашей цепочке. Это "необязательный" потому что это не является необходимым для транзакций Validation или Fork Validation. Я не могу доказать, что нет никаких вариантов этой задачи, для которых Trie может дать более высокую производительность. Если у вас есть контрпример, то мы должны были бы увидеть, если Trie также выполняет удовлетворительно для двух основных требований.

Возможно, вы (сервер) хотели бы сохранить все эти данные (локально) в синтаксическом дереве. Он не обязательно должен быть Trie Merkle. Последовательность UTXO деревьев будет по-прежнему будет обновляться в соответствии с RedBlack балансировочных правил, но вы могли бы использовать для синтаксического дерева хранить все данные узла вы могли бы служить.


котировка
Постскриптум - Вы утверждали в ПМ, с точкой, что Trie может быть параллельно дополненным / поддерживаются. Но я не понимаю аргумент. Я могу спроектировать систему, в которой ветвь узел верхнего уровня (разветвление первого байта), разделены между X нитей / жестких дисков / серверов. Каждый сервер обрабатывает 256 / X отделений. Когда новый блок приходит, все дополнения и делеция, индуцированные этот блок распределяются на соответствующий сервер. Основные ожидания резьбы для всех серверов, чтобы закончить - что происходит на отчетном обновленном "корнеплоды" их поддеревьев - то основной поток объединяет тех, кто в конечном, мастер корень. Это похоже на действительную пользу.

Обычные попытки могут обновляться параллельно, но это не один из технических характеристик, носящей более, когда вы увеличить их с противоударной устойчивостью хэш. Расчет должен быть серийным, но хранение может быть легко sharded (так что одновременно (безопасно), а не параллельно (быстро)). Есть такие вещи, как параллельно с проверкой подлинности обновления структур, но они требуют специальных хэш с гомоморфными сверхдержавами.
socrates1024 сейчас офлайн Пожаловаться на socrates1024   Ответить с цитированием Мультицитирование сообщения от socrates1024 Быстрый ответ на сообщение socrates1024

21 августа 2012, 4:08:05 PM   # 8
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

1) Узел удаления не обратная узла-вставки. Это не является обязательным требованием. Обе операции производят новые деревья, как правило, с новыми корневыми хэшей. Есть потенциально много деревьев, которые представляют один и тот же набор монет, но только конкретное дерево совершается в данном блоке. Для того, чтобы ответить на "если нет, то, что" вопрос, я попытался четко описать два абстрактных сценариев:

  • Сделка Validation: Я предполагаю, что вы уже знаете, корневой хэш в момент времени T, и иметь доступ к ненадежной копии UTXO-набора (например, хранится на общем облаке хоста). Теперь вам нужно надежно вычислить новый корневой хэш для времени Т + 1 (с одной UTXO удалена). Это делается детерминировано, используя правила RedBlack удаления. Вам нужно только принести O (журнал М) элементы из ненадежного хранилища. Это точно так же трудно, как и с UltraPrune (BTree), который также извлекает по меньшей мере O (журнал М) данных (но требует надежного хранения).
  • ...


Мне нужно больше информации, чтобы понять, как это работает. Вы просто говорите, "это не является обязательным требованием" а также "сделано детерминировано, используя правила RedBlack удаления."  Эти правила получают вам другое дерево. Каждый уровень дерева RedBlack, возможно, уже раскатал / реорганизован, весь путь до корня. Без сохранения всей структуры дерева после каждой вставки (что было бы нечестивым объем данных), я не знаю, как вы можете ожидать, чтобы обратить вспять эти операции на REORG. 

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


котировка
Постскриптум - Вы утверждали в ПМ, с точкой, что Trie может быть параллельно дополненным / поддерживаются. Но я не понимаю аргумент. Я могу спроектировать систему, в которой ветвь узел верхнего уровня (разветвление первого байта), разделены между X нитей / жестких дисков / серверов. Каждый сервер обрабатывает 256 / X отделений. Когда новый блок приходит, все дополнения и делеция, индуцированные этот блок распределяются на соответствующий сервер. Основные ожидания резьбы для всех серверов, чтобы закончить - что происходит на отчетном обновленном "корнеплоды" их поддеревьев - то основной поток объединяет тех, кто в конечном, мастер корень. Это похоже на действительную пользу.

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

Я не уверен, что вы имеете в виду? Хэш не имеют никакого отношения к структуре этого дерева: только (адрес, txhash, IDX) значение материи. Вы можете параллельно-вставить или удалить все необходимые листы, чтобы получить правильную структуру, тогда ходить вверх по дереву от каждого листа, повторно вычислив хэш для узлов ветвления, как вы идете. Каждая подотрасль может быть сделано полностью независимо друг от друга, только один процесс в конце, чтобы объединить их в один корневой хэш. Что я пренебрегая?
etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

21 августа 2012, 5:32:35 PM   # 9
 
 
Сообщения: 2478
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

Не сорвать нас, но я просто хотел бы поблагодарить ОП такой хорошо сделанной пост.
Приветствия всматриваться!
RodeoX сейчас офлайн Пожаловаться на RodeoX   Ответить с цитированием Мультицитирование сообщения от RodeoX Быстрый ответ на сообщение RodeoX

22 августа 2012, 1:35:11 AM   # 10
 
 
Сообщения: 836
Цитировать по имени
цитировать ответ
по умолчанию Re: Хранение UTXOs в сбалансированном Merkle дерева (нулевой целевые узлы с O (1) -Хранение)

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

Требование, чтобы убедиться, что множество операций в блоке изменяет дерево в новое состояние с заданным хэш в заголовке блока. Для этого изменение должно быть детерминированным, если вставки / удаления выполняются в порядке транзакция, перечислены в блоке. Если возвращения из вилки, клиент может даже увидеть различное дерево для того же набора операций (потому что другой порядок шахтер захватил их), то это прекрасно, так же как различные доказательства работы хэша.
Grau сейчас офлайн Пожаловаться на Грау   Ответить с цитированием Мультицитирование сообщения от Grau Быстрый ответ на сообщение Grau



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW