Jump to content

Recommended Posts

Posted

,

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

  • 2 years later...
Posted (edited)

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

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

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

Edited by uncleandy
Posted

 

 

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

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

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

 

 

 

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

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

Posted

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

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

 

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

Posted

 

 

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

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

 

 

 

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

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

 

 

 

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

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

 

 

 

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

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

 

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

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

Posted

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

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

 

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

Posted

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

http://bits.media/raw_transactions/

 

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

Posted

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

http://bits.media/raw_transactions/

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

Posted

 

 

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

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

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

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

Posted (edited)

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

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

 

 

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

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

Edited by uncleandy
Posted

.

 

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

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

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

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

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

 

 

 

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

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

Posted (edited)

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

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

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

 

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

Edited by uncleandy
Posted

 

 

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

 

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

Posted

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

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

Posted

 

 

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

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

 

 

 

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

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

 

 

 

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

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

 

 

 

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

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

Posted (edited)

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

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

 

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

Edited by uncleandy
Posted

 

 

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

 

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

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

 

 

 

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

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

  • 2 weeks later...
Posted

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

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

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

Posted

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

Posted

 

 

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

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

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

Posted

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

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

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

Posted (edited)

Еще раз. Есть адрес, на который переводяться биткоины. Как из цепочки транзакций понять на какой адрес переводились биткоины в конкретной транзакции по конкретному выходу? Там-же есть только количество биткоинов и 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
Posted (edited)

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

Edited by Sorr0s

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • Транзакции Bitcoin

      Explorer BTC https://bitaps.com/ + Other Explorers https://blockchair.com/ https://live.blockcypher.com/   Raw Transaction https://bitaps.com/raw/transaction/2da04ab314f98c82cf73366cf2c20f038ac0ce74a1235772ff10961dba71500a https://blockchain.info/rawtx/2da04ab314f98c82cf73366cf2c20f038ac0ce74a1235772ff10961dba71500a?format=hex   Decode Raw Transaction      -  https://www.blockchain.com/btc/decode-tx   Unspent Output https://li

      in Биткоин

    • Обсуждение происходящего в США

      В США так же имеется, что обсудить, поэтому начну.  Главные правила темы: - предоставление пруфов; - информация только про США; - без личного срача.   Трамп передумал подымать пошлину для Канады на импорт стали и алюминия до 50%, поскольку испугался, что в ответ могут быть введены ответные пошлины на экспорт электроэнергии. Что бы включить заднюю, Трампу понадобилось 6 часов. На это его убедил премьер-министр Онтарио Даг Форд, который угрожал такой мерой, на 25% пош

      in Флейм

    • Обсуждение происходящего в Украине

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

      in Флейм

    • Штат Небраска установил лимит на транзакции в криптоматах

      Губернатор американского штата Небраска Джим Пиллен (Jim Pillen) подписал закон о защите пользователей от мошенничества через криптоматы. Необходимость документа авторы объяснили увеличением количества преступлений с цифровыми активами в США. Двухпартийный законопроект был представлен 22 января сенатором Элиотом Бостаром (Eliot Bostar). Согласно тексту, операторы криптоматов должны иметь лицензию в соответствии с законом Небраски о денежных переводах и должны быть зарегистрированы в местном

      in Новости криптовалют

    • Синтия Ламмис повторно внесла на обсуждение Конгресса законопроект о создании резерва в биткоинах

      Председатель банковского подкомитета Сената по цифровым активам Синтия Ламмис повторно внесла на обсуждение членов Конгресса законопроект о создании в США резерва в биткоинах. Синтия Ламмис (Cynthia Lummis) и ее инициативная группа предлагают создать «децентрализованную сеть безопасных хранилищ BTC», управляемых Министерством финансов, а также запустить «пятилетнюю программу покупки биткоинов в объеме 5% от общего предложения криптовалюты». Ожидается, что в рамках государственной программы

      in Новости криптовалют

×
×
  • Create New...