Перейти к содержанию

Рекомендуемые сообщения

  • 2 года спустя...
Опубликовано (изменено)

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

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

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

Изменено пользователем uncleandy
Опубликовано

 

 

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

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

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

 

 

 

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

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

Опубликовано

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

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

 

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

Опубликовано

 

 

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

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

 

 

 

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

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

 

 

 

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

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

 

 

 

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

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

 

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

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

Опубликовано

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

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

 

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

Опубликовано

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

http://bits.media/raw_transactions/

 

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

Опубликовано

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

http://bits.media/raw_transactions/

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

Опубликовано

 

 

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

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

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

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

Опубликовано (изменено)

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

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

 

 

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

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

Изменено пользователем uncleandy
Опубликовано

.

 

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

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

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

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

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

 

 

 

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

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

Опубликовано (изменено)

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

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

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

 

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

Изменено пользователем uncleandy
Опубликовано

 

 

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

 

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

Опубликовано

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

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

Опубликовано

 

 

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

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

 

 

 

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

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

 

 

 

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

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

 

 

 

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

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

Опубликовано (изменено)

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

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

 

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

Изменено пользователем uncleandy
Опубликовано

 

 

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

 

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

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

 

 

 

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

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

  • 2 недели спустя...
Опубликовано

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

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

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

Опубликовано

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

Опубликовано

 

 

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

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

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

Опубликовано

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

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

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

Опубликовано (изменено)

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

 

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

Изменено пользователем Sorr0s
Опубликовано (изменено)

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

Изменено пользователем Sorr0s

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Похожие топики

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

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

      в Флейм

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

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

      в Флейм

    • Polygon (тикер POL, бывший MATIC) — обсуждение монеты

      Эксплорер - https://polygonscan.com (Примечание от модератора)     Может кто подскажет где можно купить Matic в сете полигон? Без свапов и прочего, за свап платить 50$ чтобы перевести 30 матиков абсурд полнейший. Или купить стейблов уже на сети полигона в PoS ? Я пытался переводить USDC, если с BNB то он в smart chain сети остается, если с usdt то в erc20 я бл..... уже заманался с этими свапами, у меня ненужной крипты по углам уже лежит бестолку столько, хз че с ней дела

      в PoS криптовалюты

    • В Австралии установили лимит на транзакции в криптоматах

      Австралийский центр отчетов и анализа транзакций (AUSTRAC) обязал операторов криптоматов ввести лимит на внесение и снятие наличных на сумму более 5000 австралийских долларов (около $3250). Операторы криптоматов должны публиковать предупреждения о возможном мошенничестве с цифровыми активами, а также проводить более тщательные проверки клиентов и мониторинг транзакций, чтобы отследить подозрительную активность. Новые требования направлены на предотвращение мошенничества и соблюдение правил

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

    • Транзакции 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   https://mempool.space/api/tx/х

      в Биткоин

×
×
  • Создать...