Bitcoin Forum
May 01, 2024, 08:27:59 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 »  All
  Print  
Author Topic: Делаем криптовалюту  (Read 36717 times)
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 01:11:53 PM
 #81

Надо глянуть исходники - как там реализовано, но в оригинале алгоритм задумывался так:
1. Если появились несколько цепочек, то принимаем обе и майним тоже соответственно обе.
2. Как только одна цепочка обогнала другую - начинаем майнить ту которая длиннее.
Неправильно. Никто не гоняется за двумя зайцами майнит две цепочки.

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

Как точно считается сложность цепочки - я тут не особо копенгаген. Там какая-то вроде сложная
формула суммирования, включающая даже количество транзакций в блоке. Но, повторю, в деталях
не особо силен. Суммарная сложность из двух цепочек не обязательно будет больше у той, которая
длиннее, но в принципе для удобства можно считать и так в уме представляя себе "что под капотом"

Quote
Теперь возникает вопрос, что делать с хитрожопыми майнерами, которые продолжают
майнить более короткую цепочку и посылать ее блоки в сеть?
Имеют право. Может у них нет более длинной цепочки?

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

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

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

Quote
Поэтому я и предлагаю внести элемент лотереи. Можно еще таким элементом
сделать перерасчет сложности не раз в 2 недели, а раз в час например ))
и ромбики нарисовать в эбауте.
1714595279
Hero Member
*
Offline Offline

Posts: 1714595279

View Profile Personal Message (Offline)

Ignore
1714595279
Reply with quote  #2

1714595279
Report to moderator
1714595279
Hero Member
*
Offline Offline

Posts: 1714595279

View Profile Personal Message (Offline)

Ignore
1714595279
Reply with quote  #2

1714595279
Report to moderator
Each block is stacked on top of the previous one. Adding another block to the top makes all lower blocks more difficult to remove: there is more "weight" above each block. A transaction in a block 6 blocks deep (6 confirmations) will be very difficult to remove.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 01:47:08 PM
 #82

Надо глянуть исходники - как там реализовано, но в оригинале алгоритм задумывался так:
1. Если появились несколько цепочек, то принимаем обе и майним тоже соответственно обе.
2. Как только одна цепочка обогнала другую - начинаем майнить ту которая длиннее.
Неправильно. Никто не гоняется за двумя зайцами майнит две цепочки.

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

Как точно считается сложность цепочки - я тут не особо копенгаген. Там какая-то вроде сложная
формула суммирования, включающая даже количество транзакций в блоке. Но, повторю, в деталях
не особо силен. Суммарная сложность из двух цепочек не обязательно будет больше у той, которая
длиннее, но в принципе для удобства можно считать и так в уме представляя себе "что под капотом"

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

Quote
Теперь возникает вопрос, что делать с хитрожопыми майнерами, которые продолжают
майнить более короткую цепочку и посылать ее блоки в сеть?
Имеют право. Может у них нет более длинной цепочки?

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

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

Ну не на всегда банить. Просто временно ограничить прием пакетов от него... На всякий случай.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 01:56:40 PM
 #83

Ну не на всегда банить. Просто временно ограничить прием пакетов от него... На всякий случай.

У тебя были блоки 998-999-1000
И ты майнил блок 1001
А тебе подсовывают блок 999'
Ты блок берешь и банишь пира на час.
Молодец, чо. Он тебе хотел прислать реорганизованную цепочку блоков 999'-1000'-1001'
чтобы ты понял что ты майнишь орфан-цепь. А ты его забанил.
На самом деле ты забанил сам себя таким образом.  Grin Молодец. Загнал себя в клетку.
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 07:18:47 PM
 #84

Ну не на всегда банить. Просто временно ограничить прием пакетов от него... На всякий случай.

У тебя были блоки 998-999-1000
И ты майнил блок 1001
А тебе подсовывают блок 999'
Ты блок берешь и банишь пира на час.
Молодец, чо. Он тебе хотел прислать реорганизованную цепочку блоков 999'-1000'-1001'
чтобы ты понял что ты майнишь орфан-цепь. А ты его забанил.
На самом деле ты забанил сам себя таким образом.  Grin Молодец. Загнал себя в клетку.

Я не разбирался в алгоритме, по которому биток банит хосты, но то что он их периодически банит это достоверный факт.
Давайте не будем просто трогать этот алгоритм, а оставим его как есть.
Итого, главные идеи (причем легко реализуемые) нового форка:
1. Включать новый блок в цепочку не чаще чем раз в 10 минут
2. Сделать неизменяемую сложность. Достаточно низкую, чтобы можно было майнить на процессоре.

Как вам эти пункты?

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 07:28:52 PM
 #85

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

Quote
2. Сделать неизменяемую сложность. Достаточно низкую, чтобы можно было майнить на процессоре.
Неизменяемая сложность - это просто дыра-дырища которая позволит провести атаку-51
первому кульному хацкеру, который твой хэш-алгоритм запустит не на своем процессоре, а
сделает порт на GPU или просто арендует мейнфрейм в своем студенческом кампусе.
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 07:35:48 PM
 #86

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

Quote
2. Сделать неизменяемую сложность. Достаточно низкую, чтобы можно было майнить на процессоре.
Неизменяемая сложность - это просто дыра-дырища которая позволит провести атаку-51
первому кульному хацкеру, который твой хэш-алгоритм запустит не на своем процессоре, а
сделает порт на GPU или просто арендует мейнфрейм в своем студенческом кампусе.

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

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 07:47:23 PM
 #87

Я вот не вижу никакой возможности провести такую атаку, если
блоки в цепочку будут приниматься от всех хостов с одинаковой вероятностью.
при таком алгоритме сеть будет сплититься не переставая, в конце концов
каждая нода будет самостоятельно генерировать раз в 10 минут свой собственный блок,
который не будет принят ни одним из её пиров  Grin

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

в биткойне консенсус - транзакции действительны только в мэйнчейне, а мэйнчейн -
это цепочка с наибольшей суммарной сложностью от генезиса.
если ты убираешь правило по наибольшей сложности, то как определить какая цепь
верная, а какая нет?
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 07:53:13 PM
 #88

Я вот не вижу никакой возможности провести такую атаку, если
блоки в цепочку будут приниматься от всех хостов с одинаковой вероятностью.
при таком алгоритме сеть будет сплититься не переставая, в конце концов
каждая нода будет самостоятельно генерировать раз в 10 минут свой собственный блок,
который не будет принят ни одним из её пиров  Grin


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

OpenTrade - Open Source Cryptocurrency Exchange
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 07:56:14 PM
 #89


если ты убираешь правило по наибольшей сложности, то как определить какая цепь
верная, а какая нет?


Правильная цепь та, которая самая длинная. Она же и самая сложная, потому что сложность блока = константа.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 07:58:33 PM
 #90

Правильная цепь та, которая самая длинная. Она же и самая сложная, потому что сложность блока = константа.
вот у меня длина цепи 1000 и у тебя 1000
ты говоришь что отправил мне транзакцию, а я утверждаю что я её не получил
прошло 10 минут
у тебя длина цепи 1001 и у меня 1001
ты говоришь что отправил мне транзакцию, а я утверждаю что я её не получил
прошло 10 минут
у тебя длина цепи 1002 и у меня 1002
ты говоришь что отправил мне транзакцию, а я утверждаю что я её не получил

дебилы, бля.

не, этот разговор мне надоел. извини, но спорить с заведомой глупостью - терять время.
хочешь - делай. я готов поспорить на любую сумму что у тебя ни хуя не выйдет.
но тратить время на объяснения больше не буду.
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 08:12:11 PM
 #91

Правильная цепь та, которая самая длинная. Она же и самая сложная, потому что сложность блока = константа.
вот у меня длина цепи 1000 и у тебя 1000
ты говоришь что отправил мне транзакцию, а я утверждаю что я её не получил
прошло 10 минут
у тебя длина цепи 1001 и у меня 1001
ты говоришь что отправил мне транзакцию, а я утверждаю что я её не получил
прошло 10 минут
у тебя длина цепи 1002 и у меня 1002
ты говоришь что отправил мне транзакцию, а я утверждаю что я её не получил

дебилы, бля.


Вот исходные данные: у тебя 1000 блоков и у меня 1000 блоков. Ты майнишь и я майню...
Если ты находишь блок раньше чем через 10 минут, то блок инвалидный - начинаешь искать новый блок. Тоже самое со мной.
Вероятность того, что 1001 блок мы найдем и включим в свою цепь одновременно - крайне мала... Если мы не майним по блоку в секунду конечно...
Но если кто-то начнет слать по инвалидному блоку в секунду, думаю его все таки оригинальный алгоритм забанит надолго.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 08:29:24 PM
 #92

Вот исходные данные: у тебя 1000 блоков и у меня 1000 блоков. Ты майнишь и я майню...
Если ты находишь блок раньше чем через 10 минут, то блок инвалидный - начинаешь искать новый блок. Тоже самое со мной.
Вероятность того, что 1001 блок мы найдем и включим в свою цепь одновременно - крайне мала... Если мы не майним по блоку в секунду конечно...
Но если кто-то начнет слать по инвалидному блоку в секунду, думаю его все таки оригинальный алгоритм забанит надолго.

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

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

далее по индукции. какой мне смысл орфанить свою цепь и брать твою? в случае чего я могу часики подкрутить
на пару секунд и мои блоки для меня всегда будут верные, а твои - всегда невалидные

Если ты находишь блок раньше чем через 10 минут, то блок инвалидный - начинаешь искать новый блок. Тоже самое со мной.
Я не долбоящер. Если блок № 1000 датирован временем 21:15:37 (допустим) то я в блок № 1001 который собираюсь майнить ставлю время 21:25:37 и если нахожу такой блок за 3 минуты, то не считаю его невалидным, а просто курю 7 минут бамбук и выпускаю в сеть ровно через 600 секунд после блока 1000
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 08:58:55 PM
 #93


Я не долбоящер. Если блок № 1000 датирован временем 21:15:37 (допустим) то я в блок № 1001 который собираюсь майнить ставлю время 21:25:37 и если нахожу такой блок за 3 минуты, то не считаю его невалидным, а просто курю 7 минут бамбук и выпускаю в сеть ровно через 600 секунд после блока 1000


Ну вот, ты такой умный и умеешь подкручивать часики. Велком! Твои блоки будет принимать большинство, которое так крутить не умеет... Правда со временем таких умных может оказаться большинство и к клиенту будет одновременно приходить 100500 разных блоков с одним и тем же временем )) Ну дак клиент возьмет самый первый, а остальных отбреет.
И какой смысл майнить соло свою цепочку, когда большинство работает по другому алгоритму?

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

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 18, 2017, 09:17:56 PM
 #94

Конечно, если исходить из того, что каждый начнет майнить по своему - тогда да,
ничего из такой монеты не выйдет. Но исходить-то нужно из другого: сильно умных
меньшинство, а большинство пользуется официальным клиентом с одинаковым алгоритмом.
Совершаешь ту же ошибку, что и Накамото.
Он тоже думал, что все будут майнить на процессорах примерно одним клиентом
(но возможность читинга он продумал гораздо лучше тебя)
Но оказалось, что дураки готовы объединиться в пул, если владелец пула покажется
им умным и пообещает им бабла больше, чем они смогут заработать сами.
Так что как только пройдет слух, что существует "читерский" клиент или способ подкрутить
часики и получить на три копейки больше - дураков в твоей сети не останется. Все станут "умными".
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 09:44:59 PM
 #95

Так что как только пройдет слух, что существует "читерский" клиент или способ подкрутить
часики и получить на три копейки больше - дураков в твоей сети не останется. Все станут "умными".

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

OpenTrade - Open Source Cryptocurrency Exchange
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 18, 2017, 10:03:03 PM
 #96

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

OpenTrade - Open Source Cryptocurrency Exchange
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 19, 2017, 12:47:22 PM
 #97

Вобщем посмотрел исходники...
Судя по этому: https://github.com/bitcoin/bitcoin/blob/0.12/src/main.cpp#L3428
Алгоритм принятия блоков такой:

1. Если приходит блок, который мы сами спрашивали, то принимаем его в свою цепочку
2. Если приходит блок, который мы не спрашивали, то принимаем его в случае если сложность этого блока больше сложности последнего блока в нашей активной цепочке


OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 19, 2017, 01:39:20 PM
 #98

мухаха.
теперь ответь на вопросы
 - что значит "мы спрашивали блок"?
 - в каком случае клиент может получить блок если его не спрашивал?
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
January 19, 2017, 02:16:27 PM
 #99


 - что значит "мы спрашивали блок"?

Значит отправляли в сеть запрос: "дайте блок с таким-то хэшем у кого он есть"

 
- в каком случае клиент может получить блок если его не спрашивал?


Если в сети появился новый блок.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
January 19, 2017, 02:41:46 PM
 #100

Значит отправляли в сеть запрос: "дайте блок с таким-то хэшем у кого он есть"
Два (риторических) вопроса
- как мы узнаем хэш нового блока?
- зачем нам отправлять такой запрос всем своим пирам?

Давай я не буду тебя мучить. Сам отвечу.
Есть пакет "inv" Если я получаю блок и он вызывает у меня реорганизацию цепочки (или наращивание)
я посылаю всем своим пирам этот пакет. В пакете только хэш блока, но не его высота.
Дальше пиры уже решают что делать с этой информацией.
Могут запросить у меня содержимое блока. Могут проигнорировать, если такой блок у них уже есть.
Запрашивать блок "у всех" смысла нет. Есть смысл запрашивать только у того кто прислал "inv"

Ситуация когда одна нода шлет другой ноде блок без запроса вообще говоря в биткойне
не встречается. Хотя и не запрещается напрямую.

К чему я это объясняю? К тому, что не бывает блоков, которые мы не запрашивали.
Pages: « 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!