Author

Topic: Материал по блокчейну, подскажите (Read 401 times)

legendary
Activity: 2314
Merit: 2300
получается, что нули спереди, это не результат перебора nonce,

Нужно подобрать такой nonce, чтобы хеш заголовка блока был меньше либо равен target. Если, к примеру, target имеет 10 нулей спереди, то и хеш заголовка блока должен иметь 10 или более нулей спереди. Поэтому нули спереди в результирующем хеше - это именно результат перебора nonce.

Quote
а просто потому что мы 16-ю систему перевели в 256 и в начале автоматом выставились нули?

Ничего никуда не перевели. Вы путаете основание системы счисления (16) и разрядность (256), что странно, для человека, изучающего программирование.

Quote
то есть смысл nonce, просто перебирать числа, чтобы наше число оказалось меньше числа таргет и чем меньше таргет, тем  соответственно больше в начале нулей, так как отображение 256 бит!

Как-то так. Но фраза про 256 бит была лишней, так как это справедливо для любой разрядности. Число 0099 меньше числа 9999, поэтому у числа 0099 больше нулей спереди, чем у числа 9999.
member
Activity: 202
Merit: 27
Atom foundation
Ну вроде во втором классе средней школы проходят.
1 = 01 = 001 = 0001 = 00000...000001
2 = 02 = 002 = 0002 = 00000...000002

0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040 = 2a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 = 16ea0bd16532a3d726a01b60dcf34d0756c5140c76a007

ВНЕЗАПНО:

1 < 2
0001 < 0002


допер  Grin


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

target - 256-битное число. Числа фиксированной длины принято отображать с нулями перед значащими цифрами. Так принято для наглядности. То есть, у хеша любого блока будет минимум 8 нулей спереди (при отображении в шестнадцатеричном виде!).

При пересчёте сложности target может уменьшаться. Понятно, что при его уменьшении, нулей спереди станет больше. Значит, и у хеша блока число нулей спереди увеличится, он ведь должен быть меньше или равен target.

получается, что нули спереди, это не результат перебора nonce, а просто потому что мы 16-ю систему перевели в 256 и в начале автоматом выставились нули?

то есть смысл nonce, просто перебирать числа, чтобы наше число оказалось меньше числа таргет и чем меньше таргет, тем  соответственно больше в начале нулей, так как отображение 256 бит!

бомба, когда понимаешь, так просто кажется, в начале дебри были какие-то  Grin
legendary
Activity: 2314
Merit: 2300
то есть всегда в начале нули? получается ближайшее значение к таргет, это значение с нулями?

Когда майнился самый первый блок Bitcoin, его сложность была равна 1.
Этой сложности соответствует:
Code:
target = 00000000ffff0000000000000000000000000000000000000000000000000000
 

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

target - 256-битное число. Числа фиксированной длины принято отображать с нулями перед значащими цифрами. Так принято для наглядности. То есть, у хеша любого блока будет минимум 8 нулей спереди (при отображении в шестнадцатеричном виде!).

При пересчёте сложности target может уменьшаться. Понятно, что при его уменьшении, нулей спереди станет больше. Значит, и у хеша блока число нулей спереди увеличится, он ведь должен быть меньше или равен target.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
просто в коде не нашел сравнение по количеству нулей в начале, вижу только if (thash <= hashTarget)

Ну, всё правильно. Выполняется сравнение двух чисел, и по результату сравнения принимается решение: итерировать ли дальше nonce или мы таки нашли хеш заголовка блока, подходящий под текущий target.

И чего вы к этим нулям прицепились? С чего вы, вообще, взяли что происходит сравнение по количеству нулей?

почему каждый хеш блока, который нашел нужный nonce, выглдят так:
0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
или
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007

то есть всегда в начале нули? получается ближайшее значение к таргет, это значение с нулями?

Ну вроде во втором классе средней школы проходят.
1 = 01 = 001 = 0001 = 00000...000001
2 = 02 = 002 = 0002 = 00000...000002

0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040 = 2a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 = 16ea0bd16532a3d726a01b60dcf34d0756c5140c76a007

ВНЕЗАПНО:

1 < 2
0001 < 0002

16ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 < 2a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 < 0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040

member
Activity: 202
Merit: 27
Atom foundation
просто в коде не нашел сравнение по количеству нулей в начале, вижу только if (thash <= hashTarget)

Ну, всё правильно. Выполняется сравнение двух чисел, и по результату сравнения принимается решение: итерировать ли дальше nonce или мы таки нашли хеш заголовка блока, подходящий под текущий target.

И чего вы к этим нулям прицепились? С чего вы, вообще, взяли что происходит сравнение по количеству нулей?

почему каждый хеш блока, который нашел нужный nonce, выглдят так:
0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
или
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007

то есть всегда в начале нули? получается ближайшее значение к таргет, это значение с нулями?
legendary
Activity: 2314
Merit: 2300
просто в коде не нашел сравнение по количеству нулей в начале, вижу только if (thash <= hashTarget)

Ну, всё правильно. Выполняется сравнение двух чисел, и по результату сравнения принимается решение: итерировать ли дальше nonce или мы таки нашли хеш заголовка блока, подходящий под текущий target.

И чего вы к этим нулям прицепились? С чего вы, вообще, взяли что происходит сравнение по количеству нулей?
member
Activity: 202
Merit: 27
Atom foundation
Так "находим" или "первое попавшееся"? Это разные вещи.
Слово "находим" предполагает некоторую последовательность действий.
https://github.com/neiros/---TTC--TDC---/blob/TDC/src/miner.cpp#L779
просто в коде не нашел сравнение по количеству нулей в начале, вижу только if (thash <= hashTarget)

Вам, может, лучше сначала книжку про Bitcoin прочитать. На русском языке. Там есть разные разделы: Ключи, Транзакции, Блокчейн - выбирайте любой.

спасибо, почитаю, что-то новое обязательно найду. принцип работы nonce я понимаю, хочется понять под капотом
legendary
Activity: 2314
Merit: 2300
есть число таргет (a) = 99
мы находим число 1 (b) и удовлетворяем формулу aтогда первое попавшееся число удовлетворяет, формулу.

Так "находим" или "первое попавшееся"? Это разные вещи.
Слово "находим" предполагает некоторую последовательность действий.

Quote
мне кажется я просто не до дупляю что-то с 256 битной системе

Арифметические операции над 256-битными числами выполняются точно так же, как и над 8-битными.

Вам, может, лучше сначала книжку про Bitcoin прочитать. На русском языке. Там есть разные разделы: Ключи, Транзакции, Блокчейн - выбирайте любой.

А то вопросы вы уж совсем какие-то непонятные задаёте.
member
Activity: 202
Merit: 27
Atom foundation
Утверждение "мы ищем хеш с нулями в начале" не противоречит утверждению "любой хеш ниже таргета", а является следствием из него. Если a< b, то количество значащих цифр числа a меньше либо равно количеству значащих цифр числа b.

Впрочем, если вас сбивают с толку эти нули - не обращайте на них внимания.

приведу пример в двоичной системе, как я это вижу:

есть число таргет (a) = 99
мы находим число 1 (b) и удовлетворяем формулу aтогда первое попавшееся число удовлетворяет, формулу.

мне кажется я просто не до дупляю что-то с 256 битной системе  Undecided

legendary
Activity: 2314
Merit: 2300
то есть любой хешь, ниже таргета?

Верно.

Quote
значит нули вообще не причем?

Утверждение "мы ищем хеш с нулями в начале" не противоречит утверждению "любой хеш ниже таргета", а является следствием из него. Если a< b, то количество значащих цифр числа a меньше либо равно количеству значащих цифр числа b.

Впрочем, если вас сбивают с толку эти нули - не обращайте на них внимания.
member
Activity: 202
Merit: 27
Atom foundation
получается мы ищем хеш с нулями в начале, потом переводим хеш в 265-бит, и проверяем, чтобы он был меньше таргет, тогда хеш валиден?  Lips sealed


Хэш это 256 битное число
Таргет это 256 битное число

Если найденный хэш меньше или равен таргету, значит зашибись!

значит нули вообще не причем? то есть любой хешь, ниже таргета?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
получается мы ищем хеш с нулями в начале, потом переводим хеш в 265-бит, и проверяем, чтобы он был меньше таргет, тогда хеш валиден?  Lips sealed


Хэш это 256 битное число
Таргет это 256 битное число

Если найденный хэш меньше или равен таргету, значит зашибись!
member
Activity: 202
Merit: 27
Atom foundation

Ничего не нужно переводить. Просто сравниваются два 265-битных числа.
Что в десятичном, что в каком ином формате это те же самые числа - одно больше, другое меньше.

if (thash <= hashTarget)

https://github.com/neiros/---TTC--TDC---/blob/TDC/src/miner.cpp#L779


получается мы ищем хеш с нулями в начале, потом переводим хеш в 265-бит, и проверяем, чтобы он был меньше таргет, тогда хеш валиден?  Lips sealed
legendary
Activity: 3486
Merit: 1100
а как он определяет, что меньше этого таргета? он переводит его в десятичные и сравнивает?  или как происходит сравнение?

Ничего не нужно переводить. Просто сравниваются два 265-битных числа.
Что в десятичном, что в каком ином формате это те же самые числа - одно больше, другое меньше.

if (thash <= hashTarget)

https://github.com/neiros/---TTC--TDC---/blob/TDC/src/miner.cpp#L779
member
Activity: 202
Merit: 27
Atom foundation
Чем больше нулей в начале, тем меньше 265-битное число.
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - максимальное
00000000000000000000000000000000ffffffffffffffffffffffffffffffff - среднее
0000000000000000000000000000000000000000000000000000000000000000 - минимальное

Все те 265-битные числа меньше этого таргета - 0000002cd2130000000000000000000000000000000000000000000000000000
Любой хеш меньше таргета будет валидным.


я не понял  Undecided

а как он определяет, что меньше этого таргета? он переводит его в десятичные и сравнивает?  или как происходит сравнение?
legendary
Activity: 3486
Merit: 1100

толковая статья, но не могу принципа работы уловить, там написано:
Quote
Хеш блока может быть каким угодно, но не меньше больше 265-битного числа значения таргета, например, такого:
0000002cd2130000000000000000000000000000000000000000000000000000
Валидный хеш блока биткоина или подобных криптовалют при таком таргете может бить таким
0000002cd2107f99fb83761bdb34a4a86ca1acb711a3c6082acb7af567960ef3
или таким
00000000b7082acb7af5672cd21b7f98a1916c3c61a60ef3a9fb83761bdb344a
или таким и т.п.
000000000000000000000a4ac3761bdb321b7f98b7af5672c1a3c6f8b6ca196f

почему  таргете в начале 6 нулей, а в внизу написано, что валидны хеши с большим количеством нулей?

Чем больше нулей в начале, тем меньше 265-битное число.
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - максимальное
00000000000000000000000000000000ffffffffffffffffffffffffffffffff - среднее
0000000000000000000000000000000000000000000000000000000000000000 - минимальное

Все те 265-битные числа меньше этого таргета - 0000002cd2130000000000000000000000000000000000000000000000000000
Любой хеш меньше таргета будет валидным.



PS. ошибка в статье нашлась Roll Eyes надо будет исправить.
member
Activity: 202
Merit: 27
Atom foundation

толковая статья, но не могу принципа работы уловить, там написано:
Quote
Хеш блока может быть каким угодно, но не меньше 265-битного числа значения таргета, например, такого:
0000002cd2130000000000000000000000000000000000000000000000000000
Валидный хеш блока биткоина или подобных криптовалют при таком таргете может бить таким
0000002cd2107f99fb83761bdb34a4a86ca1acb711a3c6082acb7af567960ef3
или таким
00000000b7082acb7af5672cd21b7f98a1916c3c61a60ef3a9fb83761bdb344a
или таким и т.п.
000000000000000000000a4ac3761bdb321b7f98b7af5672c1a3c6f8b6ca196f

почему  таргете в начале 6 нулей, а в внизу написано, что валидны хеши с большим количеством нулей?
legendary
Activity: 3486
Merit: 1100

difficulty = target_from_bits(0x1d00ffff) / target

сложность определяется количеством нулей в хеше, не могу понять, число difficulty на выходе будет равно количеству нулей?

Судя по формуле: difficulty = количеству таких 0x1d00ffff (00000000ffff0000000000000000000000000000000000000000000000000000) попугаев.
Другими словами никому это число не нужно.

Главное это target - величина 265-битного числа, с которым сравнивается хеш блока.

https://ss-iqr.blogspot.com/2018/12/difficulty.html
member
Activity: 202
Merit: 27
Atom foundation
https://en.bitcoin.it/wiki/Difficulty

bits это компактное представление target. Можно так написать
target = target_from_bits(bits);

target (цель) это 256 битное число. Чем меньше это число, тем больше сложность. Формула перевода невероятно сложная, но я ее тут приведу.

Приготовьтесь:

difficulty = target_from_bits(0x1d00ffff) / target

 Wink

сложность определяется количеством нулей в хеше, не могу понять, число difficulty на выходе будет равно количеству нулей?
newbie
Activity: 24
Merit: 1
Всем привет, пишу свою крипту, дошел до фазы создания блоков. хочу изобрести велосипед и местами со своим блэкджеком.
Подскажите толковый материал, а именно по принципу работы входов-выходов, как именно хранятся данные в блоках, скорость работы базы и какой принцип работы поиска в базе (на физическом носители или в памяти)? Буду признателен, если кто сталкивался с технической частью
Как-то все сумбурно, начините с основ прочитайте книги такие как
1) Как деньги обрели свободу How Money Got Free есть на русском языке. Отрывки из его книги публиковались во многих изданиях, в том числе, в The Atlantic, The New Yorker, American Banker и Avaunt.
2) Технология блокчейн — то, что движет финансовой революцией сегодня
3) Блокчейн для бизнеса
4) Революция блокчейн
5) Биткойн для чайников

Книжки очень интересные и дают полное познание процессов
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
https://en.bitcoin.it/wiki/Difficulty

bits это компактное представление target. Можно так написать
target = target_from_bits(bits);

target (цель) это 256 битное число. Чем меньше это число, тем больше сложность. Формула перевода невероятно сложная, но я ее тут приведу.

Приготовьтесь:

difficulty = target_from_bits(0x1d00ffff) / target

 Wink
member
Activity: 202
Merit: 27
Atom foundation
Я не про базы спрашивал, а про принцип хранения в базе, в первую очередь сам принцип работы входов-выходов. Я использую как раз redis и знаю, что это такое.

Перефразирую вопрос, где можно почитать о самом принципе работы входов-выходов.

https://bitcoin.stackexchange.com/questions/28168/what-are-the-keys-used-in-the-blockchain-leveldb-ie-what-are-the-keyvalue-pair

https://habr.com/ru/post/319862/
https://habr.com/ru/post/319860/

https://bitcoin.org/en/developer-reference#block-headers
вот еще хороший материал, если кому интересно

не могу понять только, какой смысл поля nBit, для высчитывая сложности nonce?

описание выглядит так
An encoded version of the target threshold this block’s header hash must be less than or equal to. See the nBits format described below.
https://bitcoin.org/en/developer-reference#target-nbits

есть еще на русском, но ничего не понятно
Как я уже написал выше, весь майнинг сводится к тому, чтобы найти хэш блока меньше числа, называемого target. В структуре блока это число записывается в поле bits, например для блока #277,316, target равнялся 1903a30c.

$ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4
{
    "hash" : "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4",
    "confirmations" : 35561,
    "size" : 218629,
    "height" : 277316,
    "version" : 2,
    "merkleroot" : "c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e",
    "tx" : ["d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f", 418 more transactions],
    "time" : 1388185914,
    "nonce" : 924591752,
    "bits" : "1903a30c", // Here it's
    "difficulty" : 1180923195.25802612,
    "chainwork" : "000000000000000000000000000000000000000000000934695e92aaf53afa1a",
    "previousblockhash" : "0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569",
    "nextblockhash" : "000000000000000010236c269dd6ed714dd5db39d36b33959079d78dfd431ba7"
}
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Я не про базы спрашивал, а про принцип хранения в базе, в первую очередь сам принцип работы входов-выходов. Я использую как раз redis и знаю, что это такое.

Перефразирую вопрос, где можно почитать о самом принципе работы входов-выходов.

https://bitcoin.stackexchange.com/questions/28168/what-are-the-keys-used-in-the-blockchain-leveldb-ie-what-are-the-keyvalue-pair

https://habr.com/ru/post/319862/
https://habr.com/ru/post/319860/
member
Activity: 202
Merit: 27
Atom foundation
По запросу питон и биткоин выдает почти 4000 ссылок, наверняка среди них не одна реализация на нем. Кстати, по первой же идет книга с описанием работы биткоина https://github.com/search?l=Python&q=bitcoin&type=Repositories
Спасибо, буду изучать

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

hero member
Activity: 1232
Merit: 503

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

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


Фреймворк для блокчена это очень хорошая идея
так не все бч же написанны на С, а если их нету то возможно есть какие то подводные камни.
full member
Activity: 1246
Merit: 138
Hodl DeepOnion

Я пишу на питоне, поэтому будет тяжело разгребать С код. проще написать базовый функционал самому. А так смысл есть писать свой блокчейн, та как есть идеи по новому алгоритму консенсуса.
По запросу питон и биткоин выдает почти 4000 ссылок, наверняка среди них не одна реализация на нем. Кстати, по первой же идет книга с описанием работы биткоина https://github.com/search?l=Python&q=bitcoin&type=Repositories
member
Activity: 202
Merit: 27
Atom foundation
У тебя какие-то нубские вопросы для писателя своей крипты с блекджеком. Скорость работы базы зависит от используемого движка и пользовательского устройства. Чаще всего для крипты используют BerkeleyDB и LevelDB. Это nosql БД, то есть key-value хранилище в котором значение (value) присваивается ключу (хешу) и ищется исключительно по нему. С HDD, а тем более SSD эти БД практически на любом конфиге легко справляются с сотнями тысяч, а то и миллионом PUT/GET операций в секунду (при value = 100 байт).
http://www.lmdb.tech/bench/microbench/benchmark.html

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

Перефразирую вопрос, где можно почитать о самом принципе работы входов-выходов.

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

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

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

P.s. в скором времени будем публиковать по нашей платформе(скорее не платформа а framework*) материалы и туториалы. Хотим сделать её проще чем эфир (в плане разработки СК), но существенно функциональнее и гибче - вероятно может заинтересовать, как пример для разбора.
*

Фреймворк для блокчена это очень хорошая идея
hero member
Activity: 1232
Merit: 503
А есть смысл этого блокчеина ? Можно использовать же готовые решение по типу еоса. Кстате попробуйте форкнуть биток или еще любую монету может будет легче разбиратся в работе бч.
jr. member
Activity: 87
Merit: 1
Если определился со стэком, найди "лучшие практики" крипты на нем, затем изучай его код на гитхаб. Все есть в открытом доступе.
Мы таким образом и двигались при разработке своей платформы.

P.s. в скором времени будем публиковать по нашей платформе(скорее не платформа а framework*) материалы и туториалы. Хотим сделать её проще чем эфир (в плане разработки СК), но существенно функциональнее и гибче - вероятно может заинтересовать, как пример для разбора.
*
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
У тебя какие-то нубские вопросы для писателя своей крипты с блекджеком. Скорость работы базы зависит от используемого движка и пользовательского устройства. Чаще всего для крипты используют BerkeleyDB и LevelDB. Это nosql БД, то есть key-value хранилище в котором значение (value) присваивается ключу (хешу) и ищется исключительно по нему. С HDD, а тем более SSD эти БД практически на любом конфиге легко справляются с сотнями тысяч, а то и миллионом PUT/GET операций в секунду (при value = 100 байт).
http://www.lmdb.tech/bench/microbench/benchmark.html
member
Activity: 202
Merit: 27
Atom foundation
Всем привет, пишу свою крипту, дошел до фазы создания блоков. хочу изобрести велосипед и местами со своим блэкджеком.
Подскажите толковый материал, а именно по принципу работы входов-выходов, как именно хранятся данные в блоках, скорость работы базы и какой принцип работы поиска в базе (на физическом носители или в памяти)? Буду признателен, если кто сталкивался с технической частью
Jump to: