Я делаю ИТ-проекты объяснить, как делает Bitcoin работу, с простым клиентом (с помощью BitcoinJ) в моем университете, и я застрял на пару вещей - наверное, я слишком глуп, чтобы найти ответ я гугл неполадок нескольких способов, а также вика Безразлично» т объяснить мне их. Я очень признателен за любую помощь для любого из этих вопросов.
1. Извлечение блоков - как это работает?
Я знаю, что есть возможность получать простые блоки по их хэшу, но для извлечения каких-либо блоков, мне нужно знать эти хэш - вот почему другой вариант был реализован (getblocks). А вот проблема - как же алгоритм блока Fetching работ? Насколько я читал, - я получил это так (например, я нахожусь на этапе 10 000 и сеть на 19 900):
я выдавать getblocks пакет, посылая блок локатора хэш в качестве хэш-функции блока 10 000 и я получаю в ответ фактура пакет со списком блоков 10 001 - 10 500? И я повторяю, что с хэш-10 500, чтобы получить еще 500 пакет и т.д. и т.п., пока я не достиг 19 900?
Кроме того - когда я получаю недействительные блоки в моей цепи (позволяет сказать, что это блок 10005 и сеть также на 10005, но шахтные 2 новые блоки недействительны) я отправить getblocks пакет с нового блока хэша, как локатор (шахтной 10005) и в ответ я получаю блок 10005 хэша, который я не знаю, поэтому я отправить хэш блок 10004 и в ответ снова я получить хэш-я не знаю, то я отправить хороший блок хэш # 10003, который затем поставляется с фактура пакет для 2-х последних блоков?
Для того, чтобы быть уверенным, - MSG_BLOCK в Inventory Вектор именно хэш-блока, который я загрузить, то только с помощью получить данные, правильно?
2. Я не получаю алгоритмы в операциях - как же Bitcoin:
а) проверить, что кто-то действительно есть монеты с указанием всех сделок позади, чтобы доказать, что они действительно существуют
б) проверить, что кто-то не затрачивая же биткойно второй раз?
Проблема а) в основном - как же TxIn в одном блоке найти TxOut из другого блока, имеющего только хэш его? Он не может пройти через все блоки, чтобы, наконец, найти правильную сделку, потому что это будет слишком много времени для HDD! И приходит другую проблему - даже если бы мы могли просто переходить от одной операции к другой (установочной сделке по номеру блока, в котором она расположена, чтобы предотвратить потребляющий HDD - вероятно, это делается таким образом, я надеюсь, что вы люди помогаете мне найти ответ) - как удвоит расходы проверки работы?
Как vector76 пояснил в одном из своих постов:
котировка
Пример:
вход Тх1 1 поступает из предыдущего ТХ со значением 1
вход Тх1 2 поступает из предыдущего ТХ со значением 2
Выход Тх1 1 имеет значение, равное 2,5, и требует, чтобы ключ А быть востребован.
Выход Тх1 2 имеет значение, равное 0,5, и требует, чтобы ключ В быть востребованы.
Человек с ключом A создает транзакцию и передает его шахтерам:
вход Тх2 1 происходит от TX1 / вывода 1.
Выход Тх2 1 имеет значение 2,0 и требует ключа C, чтобы быть заявленным
Выход Тх2 2 имеет значение, равное 0,5, и требует ключ А быть заявленными
Другие узлы заметить, что Тх1 / выход 1 до сих пор не израсходованы и имеет значение, равное 2,5. Они проверяют, что выходы не больше, чем 2,5. Они отмечают Tx1 / output1, используемый.
Человек с ключом создает еще один (двойной тратиться) сделки:
вход Tx3 1 происходит от TX1 / вывода 1
Выход Tx3 1 имеет значение, равное 1,0, и требует ключа D, чтобы быть заявленным
Выход Tx3 2 имеет значение, равное 1,5, и требует ключ Е быть заявленными
Другие узлы наблюдать что Прд1 / выход 1 уже израсходованы, и они отвергают эту сделку.
вход Тх1 1 поступает из предыдущего ТХ со значением 1
вход Тх1 2 поступает из предыдущего ТХ со значением 2
Выход Тх1 1 имеет значение, равное 2,5, и требует, чтобы ключ А быть востребован.
Выход Тх1 2 имеет значение, равное 0,5, и требует, чтобы ключ В быть востребованы.
Человек с ключом A создает транзакцию и передает его шахтерам:
вход Тх2 1 происходит от TX1 / вывода 1.
Выход Тх2 1 имеет значение 2,0 и требует ключа C, чтобы быть заявленным
Выход Тх2 2 имеет значение, равное 0,5, и требует ключ А быть заявленными
Другие узлы заметить, что Тх1 / выход 1 до сих пор не израсходованы и имеет значение, равное 2,5. Они проверяют, что выходы не больше, чем 2,5. Они отмечают Tx1 / output1, используемый.
Человек с ключом создает еще один (двойной тратиться) сделки:
вход Tx3 1 происходит от TX1 / вывода 1
Выход Tx3 1 имеет значение, равное 1,0, и требует ключа D, чтобы быть заявленным
Выход Tx3 2 имеет значение, равное 1,5, и требует ключ Е быть заявленными
Другие узлы наблюдать что Прд1 / выход 1 уже израсходованы, и они отвергают эту сделку.
У меня жирным шрифтом слова "наблюдать" потому что я не знаю, что это на самом деле означает здесь? Скажем:
Я провожу наличные деньги от TX1 / выхода 1 (который, например, в блоке 5 000) в блоке 10 000 (TX2), а затем я пытаюсь снова провести в блоке 15 000 (TX3) - что шахтеры реально сделать? Они проверяют все блоки (и сделок с ним), начиная с блока 5 000, от которого он тратится, чтобы найти какие-либо материалы для этой продукции? Это потребляет бы HDD ЛИ для каждой проверки транзакции, и я не могу себе представить, как это будет работать в будущем с большим количеством транзакций в секунду и Milions блоков.
Заранее спасибо за любые ответы, вероятно, я буду иметь другие проблемы, опять же, я надеюсь, что я получить их решить здесь (не только для меня!)