Author

Topic: Как отправить транзакцию. (Read 2031 times)

newbie
Activity: 54
Merit: 0
А вот еще какой вопрос, если я делаю узел который создает транзакцию с двойной тратой и записывает ее в свой блок как будто она правильная, как другие узлы могут(если могут) просигнализировать об этом и чтобы все узлы не признали эту транзакцию или этот блок?

Никто никому ни о чем не должен сигнализировать. Каждый узел после проверки информации полученной от какого либо пира, будь то блок или транзакция, начисляет этому пиру штрафные очки по результатам проверки. Если всё ОК - то начисляется 0 очков. если всё плохо - то вплоть до 100. при достижении 100 (по умолчанию, можно поменять из командной строки) пир (его IP) помечается как ненадежный, узел рвет с ним соединение, и нескоро решит принимать входящие подключения с этого IP или сам коннектится к этому IP.
Так же, узел будет пересылать всем другим подключенным к нему узлам полученную информацию только в случае, если блок и транзакции в нем не содержали дабл-спендов и все параметры соответствовали правилам.

Представь себе ситуацию: тебе сосед Вася говорит: "за углом раздают по $100". Ты идешь, проверяешь - ничего там не раздают. Ты возвращаешься и бъешь Васе рожу. Ты после этого пойдешь к соседу Пете сказать ему, что за углом раздают по $100?

legendary
Activity: 2317
Merit: 2318
А вот еще какой вопрос, если я делаю узел который создает транзакцию с двойной тратой и записывает ее в свой блок как будто она правильная, как другие узлы могут(если могут) просигнализировать об этом и чтобы все узлы не признали эту транзакцию или этот блок?

Принимать или не принимать блок - это личное дело отдельно взятой ноды.
Всё, что может сделать нода в отношении других нод - просто не передавать этот неправильный, по её мнению, блок другим нодам.
 
Вообще, очевидно, что ситуация, когда часть нод считают блок валидным, а часть - нет, является ненормальной для сети и может привести к сплиту (форку) блокчейна.
sr. member
Activity: 613
Merit: 256

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

А вот еще какой вопрос, если я делаю узел который создает транзакцию с двойной тратой и записывает ее в свой блок как будто она правильная, как другие узлы могут(если могут) просигнализировать об этом и чтобы все узлы не признали эту транзакцию или этот блок?
newbie
Activity: 54
Merit: 0
То есть количество подтверждений это на самом деле количество блоков которое было найдено после совершения транзакции?
Именно.


Я то думал что все ноды проверяют каждую транзакцию заносимую в блок.
Ты правильно думал. Каждый узел проверяет каждый полученный блок полностю (все транзакции) и если хоть что-то в блоке не соответствует текущему консенсусу - то узел выкидывает этот блок нафиг.
hero member
Activity: 966
Merit: 501
Working 24 hours a day isn't enough anymore.
Ну книженция, не рыба не мяса. Упущены многие интересные моменты, например.
Не уточняется как алгоритм выпекает адрес из ключа.
sr. member
Activity: 613
Merit: 256
а где хранится информация о том кто подтверждает эту транзакцию, в этом же блоке или каждый майнер который подтверждает ее потом занесет информацию о подтверждении уже в свой блок?

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

http://cryptonyka.com/articles/53-andreas-antonopulos-ovladenie-bitkoinom.html
То есть количество подтверждений это на самом деле количество блоков которое было найдено после совершения транзакции?
Я то думал что все ноды проверяют каждую транзакцию заносимую в блок. За книжку особенное спасибо, надеюсь после ее прочтения глупых вопросов задавать не буду.
hero member
Activity: 966
Merit: 501
Working 24 hours a day isn't enough anymore.
а где хранится информация о том кто подтверждает эту транзакцию, в этом же блоке или каждый майнер который подтверждает ее потом занесет информацию о подтверждении уже в свой блок?

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

http://cryptonyka.com/articles/53-andreas-antonopulos-ovladenie-bitkoinom.html

Это предохронитель от так называемого "double-spending".
Чем больше потверждений тем меньше шанс того что тебя "надули".
legendary
Activity: 2317
Merit: 2318
а где хранится информация о том кто подтверждает эту транзакцию, в этом же блоке или каждый майнер который подтверждает ее потом занесет информацию о подтверждении уже в свой блок?

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

http://cryptonyka.com/articles/53-andreas-antonopulos-ovladenie-bitkoinom.html
sr. member
Activity: 613
Merit: 256
И да, информация о подтверждении заносится в блокчейн.
А куда именно заносится информация о подтверждениях? Информация о транзакции заносится в тот блок который ее возьмет и майнеры нашедшие этот блок получат комиссию от этой транзакции с этим понятно, а где хранится информация о том кто подтверждает эту транзакцию, в этом же блоке или каждый майнер который подтверждает ее потом занесет информацию о подтверждении уже в свой блок?
newbie
Activity: 54
Merit: 0
Получается что мне достаточно подписанную транзакцию поместить в любой из мемпулов и она скоро будет видна всем и любой майнер ее может подхватить, но а как происходят подтверждения? Кто подтверждает - наверное полная нода? И куда заносится информация о подтверждении транзакции?

"Поместить транзакцию в любой мемпул" нельзя. Можно послать ее любому узлу, подключенному к сети, а он уже решит, помещать ее в свой мемпул или нет. Получается следующее. Для того, чтобы отправить транзакцию "нестандартными" способами, т.е. непосредствонно с использованием р2р протокола, нужно знать C++, так как единственная нормальная документация на протокол - сырцы официального клиента. Транзакция должна быть полностью валидна, т.е. все входы должны существовать и быть непотраченными и т.д., т.е. нужен способ парсить блоки, строить базу данных потвержденных транзакций и т.д. ВСЁ это уже есть в официальном клиенте. Нафига городить огород?
И да, информация о подтверждении заносится в блокчейн.
hero member
Activity: 840
Merit: 503
Вот есть у меня кошелек на котором есть немного биткоинов, точнее сатоши, как мне самому их со своего кошелька отправить на другой без сторонних API или кошельков? Я хочу понять что происходит в момент совершения транзакции пока транзакция еще не подхватится майнером и не пойдут подтверждения.
Ты сам у себя спросил то что ты хочешь сделать,куда это ты хочешь отправлять свои сатоши со своего кошелька в пространство что ли .ясно же что нужен адресат,а значит кошелек.
sr. member
Activity: 613
Merit: 256
Получается что мне достаточно подписанную транзакцию поместить в любой из мемпулов и она скоро будет видна всем и любой майнер ее может подхватить, но а как происходят подтверждения? Кто подтверждает - наверное полная нода? И куда заносится информация о подтверждении транзакции?
newbie
Activity: 54
Merit: 0

Дак я не могу понять есть общий мемпул куда сначала попадают все транзакции и еще у каждого майнера есть свой мемпул? Тогда получается что биткоин сеть все-таки имеет централизацию и это слабое место сети.

нет никакого "общего" мемпула. Каждый полноценный (не SPV) узел имеет собственный мемпул, в котором (в идеале) есть все, еще неподтвержденные (не включенные ни в какой блок), транзакции. 
full member
Activity: 173
Merit: 100
Дак я не могу понять есть общий мемпул куда сначала попадают все транзакции и еще у каждого майнера есть свой мемпул? Тогда получается что биткоин сеть все-таки имеет централизацию и это слабое место сети.

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

Для понимания работы сети при получении новых транзакций обратите внимание на слово "рилэй" - как я уже писал, это ключевой момент. Он означает буквально "получил и передай другому", переводится как  эстафета, ретрансляция. Поэтому вся сеть узнаёт о новых транзакциях очень быстро, узнают все, включая майнеров.  Ознакомьтесь с принципами работы протокола IRC -  https://ru.wikipedia.org/wiki/IRC
sr. member
Activity: 613
Merit: 256
newbie
Activity: 54
Merit: 0
Я хочу понять что реально происходит в момент совершения транзакции. Т.е. мне надо связаться с любым из майнеров и передать информацию о транзакции и от него она уже разойдется по другим майнерам или что подразумевается под "В момент отправки биткойнов платёжные транзакции попадают в сеть, где их увидят все майнеры"?

В двух словах так:

Модуль "кошелек" (wallet.cpp) фомирует транзакцию, подписывает ее необходимыми ключами (соответсвующими использованным входам) и отправляет ее в мемпул.

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

Любой узел получив от пира сообщение об инвентарной единице, будь то транзакция или блок, проверяет, знает ли он уже о таковой(ом) и, если необходимо, запрашивает ее от источника сообщения. Получив саму транзакцию узел пытается поместить ее в собственный мемпул (см. предыдущий абзац).

Процесс "повторяется" по сети до тех пор пока вся сеть не узнает о транзакции.

Для предотвращения лавины сообщений, каждый узел для каждого соединения ведет список известных на другом конце соединения инвентарных единиц.
sr. member
Activity: 613
Merit: 256
Вот есть у меня кошелек на котором есть немного биткоинов, точнее сатоши, как мне самому их со своего кошелька отправить на другой без сторонних API или кошельков? Я хочу понять что происходит в момент совершения транзакции пока транзакция еще не подхватится майнером и не пойдут подтверждения.

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

В момент отправки биткойнов платёжные транзакции попадают в сеть, где их увидят все майнеры, пользователи перенаправляют друг другу эти данные, (т.н. рилэй), поэтому информация о новых транзакциях распространяется в сети очень быстро. А вот включить ваши транзакции в блок или нет - решают майнеры, в первую очередь смотрят, чтобы транзакция была корректная, чтобы была нужная коммисия и так далее, т.е. чтобы выполнялись требования спецификации. Если, например коммисия низкая - могут и не включить в блок вообще, это как раз решают именно майнеры.
Я хочу понять что реально происходит в момент совершения транзакции. Т.е. мне надо связаться с любым из майнеров и передать информацию о транзакции и от него она уже разойдется по другим майнерам или что подразумевается под "В момент отправки биткойнов платёжные транзакции попадают в сеть, где их увидят все майнеры"?
full member
Activity: 173
Merit: 100
Вот есть у меня кошелек на котором есть немного биткоинов, точнее сатоши, как мне самому их со своего кошелька отправить на другой без сторонних API или кошельков? Я хочу понять что происходит в момент совершения транзакции пока транзакция еще не подхватится майнером и не пойдут подтверждения.

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

В момент отправки биткойнов платёжные транзакции попадают в сеть, где их увидят все майнеры, пользователи перенаправляют друг другу эти данные, (т.н. рилэй), поэтому информация о новых транзакциях распространяется в сети очень быстро. А вот включить ваши транзакции в блок или нет - решают майнеры, в первую очередь смотрят, чтобы транзакция была корректная, чтобы была нужная коммисия и так далее, т.е. чтобы выполнялись требования спецификации. Если, например коммисия низкая - могут и не включить в блок вообще, это как раз решают именно майнеры.
sr. member
Activity: 613
Merit: 256
Вот есть у меня кошелек на котором есть немного биткоинов, точнее сатоши, как мне самому их со своего кошелька отправить на другой без сторонних API или кошельков? Я хочу понять что происходит в момент совершения транзакции пока транзакция еще не подхватится майнером и не пойдут подтверждения.
Jump to: