Author

Topic: Протокол биткойна - вопросы (Read 2144 times)

Xtc
legendary
Activity: 1973
Merit: 1028
;u
btcsec.com/articles/
Читать снизу вверх
legendary
Activity: 1260
Merit: 1019
Quote
1. Каким образом биткойн кошелек и/или протокол биткойн рассчитывает сколько у меня денег/достаточно ли денег: каждый раз он вынужден пробегать по цепочке blockchain и считать сумму всех транзакцией моего кошелька?
Нет, конечно. Вы когда в магазине платите - вы пересчитываете все деньги в кошельке? Нет.
Каждый раз когда вы в кошелек кладете монетку - вы к балансу прибавляете. Когда платите - отнимаете.
Если вы в установленный клиент импортируете приватный ключ - то тогда да, клиент пробегает по всей цепочке блоков - ему надо найти все приходы и расходы.
Это касается не только Bitcoin Core. На легких клиентах примерно то же самое, только этим занимается не твой комп, а соседский.

Quote
2. сообщение о моей транзакции, как я понимаю, сопровождается моим публичным ключем для подтверждения идентичности. Значит в пакете каждой транзакции биткойнов содержится еще и публичный ключ?
Если кратко - то да. В некоторых случаях это не так, но не буду парить мозг вам.

Quote
3. проверка получателем, действительно ли отправитель имеет деньги:
Боб не просто идет вперед и принимает сделку. Вместо этого, он передает сообщение Алисы всей сети. Другие члены сети проверяют, имеет ли Алиса этот инфокоин. Если это так, они передают сообщение «Да, Алиса владеет инфокоином 1234567, теперь он может быть передан Бобу».Как только достаточное количество людей распространят этот послание в сети, все обновят свои цепочки блоков, которые будут показывать, что инфокоин 1234567 теперь принадлежит Бобу, и сделка завершена

а) Т.е. если у нас в сети 100тыс человек, то все они проверяют мою транзакцию?
Да. Проверяют все. Только в сети значительно меньше 100к фулл-нод

Quote
б) что значит "достаточное кол-во людей"? Сколько это?
Это хуёвый перевод. Если я, допустим, проверил передачу от Алисе к Бобу - то я уже считаю, что теперь тратить может Боб. И если я получу транзакцию от Боба к Чарли - то я и эту транзакцию буду проверять. А если кто-то в сети еще не получил перевод от Алисы к Бобу (такое тоже может случиться - сеть работает не мгновенно, может человек только вошел), а сразу получает перевод от Боба к Чарли - то он такую транзакцию принять не может. Он по-прежнему уверен что владелец Алиса.

Quote
в) В какой момент эти остальные люди меняют цепочку блоков у себя? : вот кто-то получает запрос на проверку, ок, проверил - совпало и что сразу обновлять? А что если у нескольких других не совпадет?
Вы разберитесь с транзакциями, которые просто по сети гуляют и с транзакциями которые уже в блоках. Поймете.

Quote
г) Что случится если в сети появятся ну например 50тыс ботов на 100 тыс реальных пользователей, у которых будет совершенно своя история транзакций?
Ничего не случится. Непонятно что вы называете "ботом", но перевести деньги кому-то можно только сперва получив их от кого-то, так?

Quote
д) если предположить, что в сети появился миллион или даже 10 миллионов ботов, которые бессмысленно посылают друг-другу минимальную сумму биткойнов, то получим аналог Dos атаки и сеть просто встанет?
В клиенты встроены анти-ддос механизмы. Если клиент получает от соседа слишком много переводов без комиссии - он просто рвет соединение. А может и IP включить в blacklist. А переводы с комиссией не будут для атакующего бесплатными.

Quote
а) Как я понимаю, подтверждение - это и есть майнинг. А если это так, то в случае, если у нас в сети всего(упростим задачу) 10 пользователей и никто из них не хочет заниматься майнингом, то транзакции там и будут висеть необработанные?
Теоретически - да.

Quote
б) Получается что если подтверждает только майнер, то если у нас есть свои 2 бота которые подтвердят сфальсифицированную транзакцию то все ее примут?
Нет. Сфальсифицировать транзакцию нельзя - там же подпись. Узлы сети просто не примут неправильно подписанные данные. Ну а сто тысяч ботов конечно могут друг-другу посылать мусор. Но зачем?

Quote
в) Если в сети работают 2 майнера, и первый нашел ключ быстрее второго, то второй никакого вознаграждения не получает? т.е. его компьютер продолжает работать в холостую? или там если получит сообщение о том, что кто-то уже нашел ключ, но он прекратит работу, начнет работать над другой задачей и так далее пока не бросит эту затею тк у других компьютеры мощнее?
Второй (а также третий, четвертый и все остальные) получают дулю.
Но как только они видят, что кто-то их опередил - они начинают работу над следующим блоком. Это же цепочка! У нее есть начало, а потом каждый может нарастить ей кончик, если повезет.

Quote
г) откуда берется вознаграждение за поиск ключа? Получается что в программе майнера стоит простое условие: если результат == ключу то баланс+=25 монет?? Если это так, то ведь ничего не мешает хакнуть такую программу.
Ну это все равно что нюкать 127.0.0.1 - мир не заметит этого.
Вот если вы сможете всем в мире (или хотя бы какому-то значительному количеству) поставить хакнутую программу - тогда да.
Это называется либо хард-форк, либо альт-койн.

Quote
д) Кто "создает" и "запечатывает" в коробку транзакции пользователей и "выдумывает" для них ключ?
Майнеры

Quote
е) Где вообще хранится эта "коробка" с транзакциями? Если сеть одноранговая, то у нас нет какого-то отдельного места где мы могли бы держать очередь и тп. Или каждый кошелек автоматом создает на каждой машине свою очередь и автоматом инкременирует ее номер после того как она заполнена? В таком случае как они синхронизируют номера для "коробок"?
Это файл (вернее, файлы blk***.dat) которые хранятся на каждой фулл-ноде. В принципе, формат хранения роли не имеет - можно в SQL-базе хранить.

Quote
5) если в цепочке "коробок" появляется разветвление, то берется то, которое длиннее и оно считается правильным.
Как строится цепочка? - пакет имеет id на предыдущий пакет и тд.
В таком случае если злоумышленник сгенерирует более длинную цепочку, то его цепочка и будет считаться правильной, разве нет?
Да, более длинная цепочка является правильной. Но "сгенерировать" это не так уж просто.
Это и есть майнинг. Условно говоря, есть некоторый блок данных ИКС
Надо найти такое число ИГРЕК чтобы хеш-функция F (ИКС + ИГРЕК) оказась бы меньше заданого числа.
Для этого вам в сети биткойн сегодня придется перебрать миллиарды и триллионы значений
Сейчас вся сеть перебирает примерно 287 355 126 000 000 000 таких "игреков" в секунду. И нужное значение находят счастливчики раз в 10 минут.

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


sr. member
Activity: 392
Merit: 250
newbie
Activity: 8
Merit: 0
1. Каким образом биткойн кошелек и/или протокол биткойн рассчитывает сколько у меня денег/достаточно ли денег: каждый раз он вынужден пробегать по цепочке blockchain и считать сумму всех транзакцией моего кошелька?

2. сообщение о моей транзакции, как я понимаю, сопровождается моим публичным ключем для подтверждения идентичности. Значит в пакете каждой транзакции биткойнов содержится еще и публичный ключ?

3. проверка получателем, действительно ли отправитель имеет деньги:
Боб не просто идет вперед и принимает сделку. Вместо этого, он передает сообщение Алисы всей сети. Другие члены сети проверяют, имеет ли Алиса этот инфокоин. Если это так, они передают сообщение «Да, Алиса владеет инфокоином 1234567, теперь он может быть передан Бобу».Как только достаточное количество людей распространят этот послание в сети, все обновят свои цепочки блоков, которые будут показывать, что инфокоин 1234567 теперь принадлежит Бобу, и сделка завершена

а) Т.е. если у нас в сети 100тыс человек, то все они проверяют мою транзакцию?
б) что значит "достаточное кол-во людей"? Сколько это?
в) В какой момент эти остальные люди меняют цепочку блоков у себя? : вот кто-то получает запрос на проверку, ок, проверил - совпало и что сразу обновлять? А что если у нескольких других не совпадет?
г) Что случится если в сети появятся ну например 50тыс ботов на 100 тыс реальных пользователей, у которых будет совершенно своя история транзакций?
д) если предположить, что в сети появился миллион или даже 10 миллионов ботов, которые бессмысленно посылают друг-другу минимальную сумму биткойнов, то получим аналог Dos атаки и сеть просто встанет?

4
"Существует способ избежать этой проблемы, используя идею, известную как доказательство правильности работы (proof-of-work). Идея парадоксальна и включает в себя сочетание двух других идей: (1) (искусственно) сделать подтверждение транзакций затратными для пользователей сети в виде компьютерных вычислений; и (2), вознаградить их за помощь проверки транзакций.
...
Дэвид проверяет свою копию цепочки блоков, и видит, что каждая сделка годна. Он хотел бы помочь, отправив новость о годности сделок для всей сети.

Тем не менее, прежде чем сделать это, как часть протокола проверки, Дэвиду требуется решить непростую вычислительную задачу — доказательство правильности работы. Без решения этой задачи, остальная часть сети не будет принимать его проверку сделок."

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

а) Как я понимаю, подтверждение - это и есть майнинг. А если это так, то в случае, если у нас в сети всего(упростим задачу) 10 пользователей и никто из них не хочет заниматься майнингом, то транзакции там и будут висеть необработанные?
б) Получается что если подтверждает только майнер, то если у нас есть свои 2 бота которые подтвердят сфальсифицированную транзакцию то все ее примут?
в) Если в сети работают 2 майнера, и первый нашел ключ быстрее второго, то второй никакого вознаграждения не получает? т.е. его компьютер продолжает работать в холостую? или там если получит сообщение о том, что кто-то уже нашел ключ, но он прекратит работу, начнет работать над другой задачей и так далее пока не бросит эту затею тк у других компьютеры мощнее?
г) откуда берется вознаграждение за поиск ключа? Получается что в программе майнера стоит простое условие: если результат == ключу то баланс+=25 монет?? Если это так, то ведь ничего не мешает хакнуть такую программу.

д) Кто "создает" и "запечатывает" в коробку транзакции пользователей и "выдумывает" для них ключ?

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




5) если в цепочке "коробок" появляется разветвление, то берется то, которое длиннее и оно считается правильным.
Как строится цепочка? - пакет имеет id на предыдущий пакет и тд.
В таком случае если злоумышленник сгенерирует более длинную цепочку, то его цепочка и будет считаться правильной, разве нет?







Jump to: