Jump to content
Sign in to follow this  

Recommended Posts

,

У меня все открывается. Какой браузер, какая ошибка возникает?

Share this post


Link to post
Share on other sites

Такой вопрос по статье - где именно исполняется описанный в конце скрипт биткоин?
 

Отправитель получает открытый ключ получателя (pubKey) общаясь с ним. Когда сумма монет была отправлена на IP-адрес, получатель должен предоставить только подпись (sig). Подпись сверяется с открытым ключом в scriptPubKey.

Например, кто может объяснить чем именно выполняются действия "получатель должен предоставить только подпись" и какой именно софт производит "сверку с открытым ключем в scriptPubKey"?

Edited by uncleandy

Share this post


Link to post
Share on other sites

 

 

где именно исполняется описанный в конце скрипт биткоин?

Тот тип транзакций, про который вы цитируете, используется крайне редко, так как отправка по IP - штука ненадежная. В over 99.999...% случаев транзакции отправляются на адреса Bitcoin.

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

 

 

 

какой именно софт производит "сверку с открытым ключем в scriptPubKey"?

Это может быть любой софт, поддерживающий общепринятую реализацию протокола Bitcoin. В идеале официальный кошелек, но вы можете на коленке написать свой собственный клиент сети.

Share this post


Link to post
Share on other sites

валидность транзакции проверяется всей цепочкой узлов, через которую она проходит.

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

 

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

Share this post


Link to post
Share on other sites

 

 

Т.е. валидность транзакции проверяется не только при ее подтверждении (при формировании блока в процессе майнинга), но и при распространении?

Да, конечно, проверяется валидность с точки зрения соответствия протоколу. Для банальной защиты от спама и кривых транзакций.

 

 

 

Но как на этих промежуточных узлах можно проверить какие-то внешние условия?

Что за внешние условия?

 

 

 

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

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

 

 

 

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

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

 

Возможно мы друг друга не поняли. Проверку подписи для использования монет можно сделать только при наличии закрытого ключа, который теоретически должен быть только у получателя транзакции. Но попытаться предъявить ключ может кто угодно.

Все остальные узлы проверяют только ее техническое соответствие протоколу (то есть, например, что в качестве хэшей не вбит какой-то левый набор символов).

Share this post


Link to post
Share on other sites

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

Возможно я не очень хорошо понимаю суть скриптовых возможностей транзакций биткоина.

 

Скриптовый язык в транзакции может работать только с данными которые уже включены в транзакцию? Или он может использовать какие-то внешние по отношению к своей транзакции данные?

Share this post


Link to post
Share on other sites

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

http://bits.media/raw_transactions/

 

Статья немного устарела, сейчас набор команд расширился, но в целом соответствует.

Share this post


Link to post
Share on other sites

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

http://bits.media/raw_transactions/

А вот это что такое - https://en.bitcoin.it/wiki/Script?

Share this post


Link to post
Share on other sites

 

 

А вот это что такое

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

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

Если вы программист, там вроде бы ничего сложного нет :rolleyes: А гуевые инструменты не видел.

Share this post


Link to post
Share on other sites

Собственно, при получении транзакции клиент их и обрабатывает - если видит свой адрес, то расшифровывает, если не свой но все правильно - распинывает дальше по сети, если считает что неправильно - дропает.

Смутно вроде начинаю понимать. А есть где-нибудь описание данного процесса на реальном примере?

 

 

Если вы программист, там вроде бы ничего сложного нет

Да - программист. Поэтому и хочу досконально разобраться.

Edited by uncleandy

Share this post


Link to post
Share on other sites

.

 

А есть где-нибудь описание данного процесса на реальном примере?

На русском вряд ли найдется, подозреваю что тему у нас мало кто жевал. Большинству достаточно того, что умеет кошелек.

На всякий случай гляньте в ветке разработки

https://forum.bits.media/index.php?/forum/55-razrabotka/

А так и в той же вики должно быть описание процесса.

 

 

 

Да - программист.

Я к сожалению не программист. Если у вас хороший английский, лучше потолкаться в девелоперских ветках на толке.

Share this post


Link to post
Share on other sites

По скрипту вроде-бы понял. Script может работать только с данными текущей транзакции. Другие дело что транзакция может предварительно подготавливаться множеством участников, которые могут размещать в ней свои подписи и публичные ключи. А скрипт будет указывать что и в каком порядке проверять для того, что-бы проверить что транзакция правильная.

Еще один вопрос всплыл. Вроде-бы по теме...
 

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

 

Что-то я не совсем понимаю. Ведь подтверждений транзакции будет множество - т.е. ее в свой блок включит не один майнер (в моем кошельке для некоторых транзакций есть более 100000 подтверждений). Тогда кто из майнеров и в каком количестве получит комиссию? Только тот, который сделает первое подтверждение транзакции?

Edited by uncleandy

Share this post


Link to post
Share on other sites

 

 

Что-то я не совсем понимаю. Ведь подтверждений транзакции будет множество - т.е. ее в свой блок включит не один майнер (в моем кошельке для некоторых транзакций есть более 100000 подтверждений). Тогда кто из майнеров и в каком количестве получит комиссию? Только тот, который сделает первое подтверждение транзакции?

 

Тут предельно понятно, что тот майнер(или пул) который и вставил(нашел) блок в цепь, тот и получит комиссию, которая и образовалась от разности выходных и входных транзакций  + награду за блок. И не тот получает этот остаток кто первым подтвердил транзакцию, а только тот кто нашел блок

Share this post


Link to post
Share on other sites

И не тот получает этот остаток кто первым подтвердил транзакцию, а только тот кто нашел блок

Стоп-стоп-стоп! А разве подтверждением транзакции является не факт майнинга блока с этой транзакцией в нем?

Share this post


Link to post
Share on other sites

 

 

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

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

 

 

 

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

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

 

 

 

Тогда кто из майнеров и в каком количестве получит комиссию? Только тот, который сделает первое подтверждение транзакции?

Да, только первый и один раз.

 

 

 

тот и получит комиссию, которая и образовалась от разности выходных и входных транзакций + награду за блок.

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

Share this post


Link to post
Share on other sites

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

А можете об этом рассказать подробнее? Насколько я понимаю "подтверждение транзакции" подразумевает ее проверку на корректность всех входов и подписей. Как-же тогда второй блок может "подтверждать" эту транзакцию если при его майнинге не происходит ее проверки?

 

Хотя, у меня есть вариант ответа... Когда майнер получает очередной блок из сети, он его проверяет на корректность, в том числе, проверяет на корректность все транзакции в нем. И сохраняет у себя с пометкой "проверен". Таким образом получается, что майнер в конечном итоге, производит проверку всех предыдущих транзакций до того, как приступит к майнингу очередного блока. Я правильно понял?

Edited by uncleandy

Share this post


Link to post
Share on other sites

 

 

А можете об этом рассказать подробнее? Насколько я понимаю "подтверждение транзакции" подразумевает ее проверку на корректность всех входов и подписей. Как-же тогда второй блок может "подтверждать" эту транзакцию если при его майнинге не происходит ее проверки?

 

Вы задаете совсем уж очевидные вопросы, которые расписаны в большинстве теоретических статей, если их читать вминательно. Количество блоков в цепочке после блока с транзакцией (подтверждений) - это основа надежности блокчейна.

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

 

 

 

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

Примерно так. Не только майнер, а любой "полный" клиент сети, возможности у них одинаковые. Майнер может набирать транзакции в блок произвольно, по умолчанию - с приоритетом по комиссии, но можно настроить и другие параметры отбора. Например, некоторые пулы были неоднократно замечены в приоритетном пропихивании "своих" транзакций.

Share this post


Link to post
Share on other sites

Всем спасибо за пояснения!

Теперь возник вопрос, ответ на который очевиден, если не разбираться в сути...

Во входах и выходах транзакции используются скрипты bitcoin (scriptSig и scriptPubKey). Насколько я понимаю, они могут быть произвольными. Но тогда я не понимаю каким образом можно определить на какой именно адрес производиться вывод биткоинов? В статье еще описан перевод на IP-адрес. Вот это вообще не понятно. Кто может пояснить каким образом по script в транзакции можно понять куда именно переводятся биткоины?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

 

 

откуда взять адрес назначения выхода

В классическом случае товарищ пользователь вводит его руками. Про API сами ищите:)

В чем вообще вопрос?

Share this post


Link to post
Share on other sites

В классическом случае товарищ пользователь вводит его руками. Про API сами ищите :)

В чем вообще вопрос?

Еще раз. Есть адрес, на который переводяться биткоины. Как из цепочки транзакций понять на какой адрес переводились биткоины в конкретной транзакции по конкретному выходу? Там-же есть только количество биткоинов и Script, который может быть любым, по идее.

Share this post


Link to post
Share on other sites

Еще раз. Есть адрес, на который переводяться биткоины. Как из цепочки транзакций понять на какой адрес переводились биткоины в конкретной транзакции по конкретному выходу? Там-же есть только количество биткоинов и Script, который может быть любым, по идее.

 

Давай разбираться. Начнем с простого. У транзакции есть один вход и один выход. Здесь все просто, видно с какого адреса на какой идут средства. Далее имеет два адреса входом и два выходом.  Возьмем круглые цифры на вход 1+1, выход 1.5+0.5 (комиссию не трогаем, допустим мы ее не платим). Чуток сложнее, но тоже понятно. А теперь возьмем пять входов 1+1+1+1+1, и пять выходов 2+0.5+0.5+1.5+0.5. Вот тут уже проблема... С каких адресов(входов) пошла сумма в 2 биткойна на этот первый выход? Да, с любых  двух, берем два любых входа, складываем, и вот они и могут быть этой суммой. О других выходах, с более мелкими значениями еще сложнее судить. Здесь главное, чтоб адреса участвующие в транзакциях использовались единожды. Тогда невозможно, при наличии большого количества входов и выходов, связать что либо. Или, точнее, 100% утверждать, что, вот с этого адреса, биткойн пошел на этот.

Edited by Sorr0s

Share this post


Link to post
Share on other sites

Существует способ формирования транзакции на основе коллективного объединения. Называется это Coinjoin. Суть способа в том, чтобы создать транзакцию из данных предоставленных  группой людей. Каждый участник формирует свою часть транзакции. Берет свои выход(ы), из них создает вход(ы), подписывает приватным ключем(или ключами, если входов несколько) и формирует выходные данные( адрес получателя и скрипт с условиями, что сделать чтоб потратить). И так делает каждый участник, скидывает в общую кучу, которая формируется в транзакцию и отправляется в сеть. Понять кто, куда, сколько отправляет нереально. Выше пост об этом. В транзакции нет каких то особых идентификаторов, которые бы показывали, что вот этот вход связан с этим выходом. Остается лишь догадываться, прикидывая что куда, пытаясь разглядеть хоть какие то признаки связи, то ли в суммах, то ли в адресах. И чем их больше в транзакции, тем невозможнее.

Edited by Sorr0s

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...