Author

Topic: [Методичка] Программирование скриптов Bitcoin. (Read 16328 times)

sr. member
Activity: 770
Merit: 305
Все правильно расшифровал.
Версия транзакции у меня 1, а не 2, потому что я до сих пор пользуюсь версией клиента v0.13.1
У вас скорее всего та же последовательность действий будет с чуть другим результатом - может быть еще locktime у транзакции будет другой. Не проверял. Меня и этот клиент устраивает.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Если позволите, внесу свою лепту.
Заготовка транзакции 0100000001d0ac0d813c04c5c7d3aa0c6aaa530d104f23f328d8a74f9b3198640ac4155dc701000 00000ffffffff01a6e0f505000000001976a91406599750ae954e00bc73d19a1f4d898659d6c013 88ac00000000

Расшифровывается так:
Версия: 01000000
Флаг: 0001 (Если есть, то это сегвит транзакция, в примере его нет)
Число входов: 01
Вход 1 Хэш предыдущей транзакции (задом наперед): d0ac0d813c04c5c7d3aa0c6aaa530d104f23f328d8a74f9b3198640ac4155dc7
Номер выхода из предыдущей транзакции: 01000000 (да 4 байта Карл!!!)
Длинна скрипта для траты входа: 00 (это число надо поменять на 05 в примере выше)
Сам скрипт: Если длина ноль, то тут ничего нет. Если длина 5, как в примере, то здесь 0000026d51
Input 1 sequence: ffffffff (может быть любое, используется для локтайм скриптов)
Чмсло выходов: 01
Количество отправляемых сатошей в первом выходе: a6e0f50500000000
Длина скрипта в первом выходе: 0x19 (25 байт)
Запирающий скрипт: 76a91406599750ae954e00bc73d19a1f4d898659d6c01388ac
Количество Witness данных: в примере нет
Длина первого Witness: в примере нет
Witness 1: нету
Locktime: 00000000
sr. member
Activity: 770
Merit: 305
Короче, я поискал в интернете.
Нашел https://bitcoin.stackexchange.com/questions/72706/bitcoin-tx-sign-redeem-p2sh-transaction-unable-to-sign-input-invalid-stack-siz
Читаю... прям душа радуется - тот же самый вопрос, только скрипт другой.
У чувака скрипт OP_ADD 7 OP_EQUAL - ну то есть подобрать два числа, сумма которых будет семь
Листаю, значит, листаю... Щас типа ответы пойдут дельные...
А там такой облом! Мой собственный ответ годовалой давности - типа не подписывается это штатным клиентом.
И комментарий уважаемого  Pieter Wuille (это один из главных разработчиков биткойна) - типа не предназначено это.
Хотите нестандартные скрипты использовать - пишите сами себе тулзы.

Не, может как-то и можно. Я не знаю как.

Я вот что сделал.
Те же самые условия.
Запускаем
Code:
"C:\Program Files\Bitcoin\daemon\bitcoin-cli.exe" -testnet -datadir=e:\bitcoin-segwit-testnet createrawtransaction [{\"txid\":\"c75d15c40a6498319b4fa7d828f3234f100d53aa6a0caad3c7c5043c810dacd0\",\"vout\":1}] {\"mg6Xg6sRvJzcQzMTuGPVYAV1XxQbhHnvJR\":\"0.9999991\"}

Получаем "заготовку" транзакции
Code:
0100000001d0ac0d813c04c5c7d3aa0c6aaa530d104f23f328d8a74f9b3198640ac4155dc70100000000ffffffff01a6e0f505000000001976a91406599750ae954e00bc73d19a1f4d898659d6c01388ac00000000

На всякий случай сперва проверяем в консоли

Code:
decoderawtransaction 0100000001d0ac0d813c04c5c7d3aa0c6aaa530d104f23f328d8a74f9b3198640ac4155dc70100000000ffffffff01a6e0f505000000001976a91406599750ae954e00bc73d19a1f4d898659d6c01388ac00000000

Получаем вот такую расшифровку:
Code:
{
  "txid": "e9c8602e616ee54690b32f9eb571bce85867250ead27a662028938be5eff25c8",
  "hash": "e9c8602e616ee54690b32f9eb571bce85867250ead27a662028938be5eff25c8",
  "size": 85,
  "vsize": 85,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "txid": "c75d15c40a6498319b4fa7d828f3234f100d53aa6a0caad3c7c5043c810dacd0",
      "vout": 1,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.99999910,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 06599750ae954e00bc73d19a1f4d898659d6c013 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a91406599750ae954e00bc73d19a1f4d898659d6c01388ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "mg6Xg6sRvJzcQzMTuGPVYAV1XxQbhHnvJR"
        ]
      }
    }
  ]
}

Эта транзакция невалидная, потому что createrawtransaction ничего не знает как нам выводить с адреса 2N6ijRkcgBwzjvwwop9QRuEdBTeggPcSCpA и оставила поле "scriptSig" пустым. А нам туда надо вписать 0000026d51
Утверждается, что signrawtransaction это делать тоже не умеет
Ну, я просто открываю текстовый редактор и вписываю туда нужные байтики:

0100000001d0ac0d813c04c5c7d3aa0c6aaa530d104f23f328d8a74f9b3198640ac4155dc701000 000050000026d51ffffffff01a6e0f505000000001976a91406599750ae954e00bc73d19a1f4d898659d6c01388ac0 0000000


Вот и всё. Как эту же операцию повторить и возможно ли это с помощью bitcoin-cli - я не знаю и особо не стремлюсь

Вы скажите, что вы хотите, может я вам и так помогу. Недорого или даже забесплатно.
sr. member
Activity: 770
Merit: 305
Твоя тулза не опенсурсная? на Гитхабе есть?
Нету. Фактически, это ведь не тулза, а большая коллекция говна, которую
я умело (сам себя не похвалишь - никто не похвалит) и быстро приспосабливаю
каждый раз под решение подобных задач

Quote
да, вот это бы, очень хотелось понять
Ну ты сперва попробуй понять, то ли это что тебе нужно в конечном итоге?
Если да - я либо разберусь как это делать с помощью bitcoin-cli (но опыта с ним у меня мало)
либо просто такую тулзу тебе скомпилирую под твои цели.
newbie
Activity: 38
Merit: 0
Тут я формирую транзакцию своей тулзой

Твоя тулза не опенсурсная? на Гитхабе есть?

Теперь вопрос. Как сформировать такую же транзакцию, но без моей тулзы, а штатным bitcoin-cli ?
Вот это уже мне сложно - тут щас подумать придется Smiley Может кто-то другой подскажет?

да, вот это бы, очень хотелось понять

sr. member
Activity: 770
Merit: 305
Окей, ща тебе нарисую.

1. Хотим использовать скрипт OP_2DROP OP_TRUE Он же 6d51

2. Заходим в консоль. Пишем
decodescript 6d51
получаем
Code:
{
  "asm": "OP_2DROP 1",
  "type": "nonstandard",
  "p2sh": "2N6ijRkcgBwzjvwwop9QRuEdBTeggPcSCpA"
}

3. Отправляем биткойн на адрес 2N6ijRkcgBwzjvwwop9QRuEdBTeggPcSCpA обычным способом
https://testnet.smartbit.com.au/tx/c75d15c40a6498319b4fa7d828f3234f100d53aa6a0caad3c7c5043c810dacd0

4. Теперь с адреса 2N6ijRkcgBwzjvwwop9QRuEdBTeggPcSCpA можно вывести бабло
зная этот скрипт 6d51 и правила его выполнения, ну то есть ему надо подсунуть
"два чего-нибудь неважного" что он выкинет.

5. То есть сразу в хексе я могу записать каким будет scriptSig: 0000026d51

6. Тут я формирую транзакцию своей тулзой (я не использую bitcoin-cli) и вывожу с этого адреса себе обратно.
https://testnet.smartbit.com.au/tx/13804697568b067b846fafd3a6e15a94ecacb53f7811c4896e5fc1bbc650816f

Там в правом верхнем углу есть кнопочка со стрелочками - если на нее кликнуть - откроется подробная
информация о транзакции. И там как раз написан скрипт 0 0 6d51 - то есть сперва два
пустых значения засовываются в стек, а потом как раз выполняется то что нужно - 6d51 -
выкинуть два значения из стека и положить единичку

Таким образом мы перевели бабло с адреса 2N6ijRkcgBwzjvwwop9QRuEdBTeggPcSCpA на адрес
mg6Xg6sRvJzcQzMTuGPVYAV1XxQbhHnvJR используя скрипт OP_2DROP OP_TRUE и не
используя никаких подписей и приватных ключей

Теперь вопрос. Как сформировать такую же транзакцию, но без моей тулзы, а штатным bitcoin-cli ?
Вот это уже мне сложно - тут щас подумать придется Smiley Может кто-то другой подскажет?
sr. member
Activity: 770
Merit: 305
Это почему? Разьве тестнет не полный аналог маин сети, но только с другими префиксами?
Не полный. В основной сети есть несколько стандартных вариантов скриптов, которые допустимы
в scriptPubkey. Транзакция с нестандартными скриптами в основной сети не релеится и с вероятностью
99.9999% никогда не подтвердится.

Quote
Мне не принципиально, можно и p2sh, я всеровно пока плохо разбираюсь чем разные типы
транзакций отличаются друг от друга по функционалу скриптинга
Окей, ща тебе нарисую.
newbie
Activity: 38
Merit: 0
Прям в scriptPubkey?

А куда еще можно?

Такой вариант в тестнете пройдет, а в основной сети не сработает

Это почему? Разьве тестнет не полный аналог маин сети, но только с другими префиксами?

Потому что кроме этого есть еще два (как минимум) варианта: p2sh и p2wsh

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


sr. member
Activity: 770
Merit: 305
Объясните как с помощью bitcoin-cli отправить транзакцию с кастомным скриптом, например скриптом который не проверяет валидацию hash160:
asm: OP_2DROP OP_TRUE

Ты этот скрипт куда хочешь записать? Прям в scriptPubkey?
Такой вариант в тестнете пройдет, а в основной сети не сработает

Почему я спрашиваю об этом?
Потому что кроме этого есть еще два (как минимум) варианта: p2sh и p2wsh
Эти два варианта сработают и в основной сети
newbie
Activity: 38
Merit: 0
Объясните как с помощью bitcoin-cli отправить транзакцию с кастомным скриптом, например скриптом который не проверяет валидацию hash160:
asm: OP_2DROP OP_TRUE
hex: 6d51

Пытался в тестовой сети создать транзакцию так:

Code:
bitcoin-cli createrawtransaction '[{"txid":"","vout":0}]' '[{"":0.01}]'

Code:
bitcoin-cli signrawtransactionwithkey '' '[""]' '[{"txid":"","vout":0, "scriptPubKey":"6d51"}]'

Получаю ошибку:

Code:
error code: -22
error message:
Previous output scriptPubKey mismatch:
OP_HASH160 OP_EQUAL
vs:
OP_2DROP 1

Что не так, почему он хочет чтоб скрипт у меня был такойже как и в vout был?

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Да я и не собираюсь это реализовывать пока что.
Тема с комиссиями релеям возникла как одно из возможных направлений изучения технологии биткоина. Другие направления которые с ходу крутятся в голове:
1. Лайтинг и атомарные свопы. Вроде как уже изучено и задокументировано, но с практикой как-то тормозится пока.
2. Обмен письмами через блокчейн и его скрипты. Это уже есть в точечных проектах, но неплохо было бы изучить подробней. Особенно возможности шифрования сообщений.
3. "Цветные монеты". Типа токены только на биткоине и его скриптах, а не на эфире. Тоже уже где-то видел такое, но почему-то намного меньше распространение получила тема чем то же самое в эфире
Ну и так далее...
sr. member
Activity: 770
Merit: 305
Во-пераых это кому как.
Для меня передача битков из А в Б тождественна передаче бабок. Особенно если А это Дядя Смит, а Б это я.
Я говорю о технической точке зрения, а не об обыденных понятиях

Quote
Во-вторых тоже не так. Релеи могут че-то блокировать конечно, но когда релеев
много, то блокировщики просто посылаются лесом в обход.
Стоп. Вы чуть выше пели про вариант что релей которому не заплатили транзакцию
дальше не пересылает. Это ли не блокировка? Вас будут в этой парадигме блокировать
не потому что вы оппозиционер и покупаете вещества для создания бомбы, а потому что
вы мало заплатили. Вам этот вариант чем-то больше нравится? Ладно. Мне пора прощаться.
Эта тема (про донаты релеям) мне более не интересна. Я всё, что хотел сказать - сказал.

Далее спорить бессмысленно. Вы предлагайте вариант как вы его изобрели и посмотрим
потом все вместе насколько он рабочий. Спорить о том, что как будет хорошо ехать
машина, если к ней в багажник еще положить лошадь я считаю пустой тратой времени.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Чтобы меньше контролеров-блокировщиков было у пересылки моих бабок из точки А в точку Б.
Во-первых, в биткойн-сети нет передачи бабок из точки А в точку Б.
Когда говорят о пересылке монет - это лишь образное выражение.

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


 

Во-пераых это кому как.
Для меня передача битков из А в Б тождественна передаче бабок. Особенно если А это Дядя Смит, а Б это я.
Во-вторых тоже не так. Релеи могут че-то блокировать конечно, но когда релеев много, то блокировщики просто посылаются лесом в обход.
sr. member
Activity: 770
Merit: 305
Чтобы меньше контролеров-блокировщиков было у пересылки моих бабок из точки А в точку Б.
Во-первых, в биткойн-сети нет передачи бабок из точки А в точку Б.
Когда говорят о пересылке монет - это лишь образное выражение.

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


 
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

И к сетевом протоколу взаимодействия нод это не имеет никакого отношения


Из того, что вы ранее сказали я понял, что по вашему TTL нужен только для протоколов где пакеты идут по определенному маршруту.
Я знаю, что это точно не так. В P2P протоколах TTL тоже есть.
Но я знаю также, что в биткоине TTL нет.
Я пытался обосновать: почему в протоколе биткоина нет TTL. В других P2P протоколах TTL есть, а в биткоине нет. У вас есть свое этому объяснение? Да ради бога.

в зависимости от объема транзакции в байтах.

Quote
Для децентрализации?
А она нахер нам спеклась сама по себе?


Чтобы меньше контролеров-блокировщиков было у пересылки моих бабок из точки А в точку Б.
sr. member
Activity: 770
Merit: 305
Мда, с французким у вас не очень ))
Как с английским?

Quote
There are two ways to send money.  If the recipient is online, you
can enter their IP address and it will connect, get a new public
key and send the transaction with comments.  If the recipient is
not online, it is possible to send to their Bitcoin address, which
is a hash of their public key that they give you.  They'll receive
the transaction the next time they connect and get the block it's
in.  This method has the disadvantage that no comment information
is sent, and a bit of privacy may be lost if the address is used
multiple times, but it is a useful alternative if both users can't
be online at the same time or the recipient can't receive incoming
connections.

Это шо за херня? Мемуары Сатоши Накамото о том, как отправлять биткойны на IP-адрес
если реципиент в онлайне и на его публичный ключ (хэш публичного ключа) если он в оффе?
Ну так сразу потом была всеми признана и понята ошибка, что этих двух способов не нужно.
Бо отправка на IP-адрес небезопасна с точки зрения MitM
И с тех пор уже 10 лет мы отправляем биткойны типа вариантом, когда не беспокоимся
о том, находится ли получатель в онлайне или оффлайне. А так называемый онлайн-вариант
давно выпилили на ненадобностью.

И к сетевом протоколу взаимодействия нод это не имеет никакого отношения

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

Quote
Для децентрализации?
А она нахер нам спеклась сама по себе?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
В протоколе биткоина нет TTL потому что нужно уметь отдавать транзакции даже тем
клиентам которые в оффлайне и даже тем которых нет в природе.
Щито?  Grin
Вы вслушайтесь в то что говорите! Ну прочитайте фразу, которую вы написали.
По словам прочитайте! Какие впезду (простите за мой плохой французский)
транзакции для клиентов в оффлайне? Кому вы хотите послать транзакции когда
говорите про клиентов, отсутствующих в природе? Неандертальцам, динозаврам,
селеноидам (жителям Луны)? Их нет в природе. Может в мир сказочных эльфов?
Карлсону на крышу?

Мда, с французким у вас не очень ))
Как с английским?


Quote
TTL протоколу битка не нужен, но вот комиссии нужны как показала практика.
Комиссии не нужны.

Нужны и вы это знаете не хуже меня.
Без комиссий сеть заспамят как это уже было... Кстати, а не вы ли лично проэксплуатировали это? Или я что-то путаю?

Quote
У остальных нод нет экономического стимула находиться в сети.
Если такой стимул появится, то нод в сети будет на порядки больше.
Нахуй они нужны?

Для децентрализации?
sr. member
Activity: 770
Merit: 305
В протоколе биткоина нет TTL потому что нужно уметь отдавать транзакции даже тем
клиентам которые в оффлайне и даже тем которых нет в природе.
Щито?  Grin
Вы вслушайтесь в то что говорите! Ну прочитайте фразу, которую вы написали.
По словам прочитайте! Какие впезду (простите за мой плохой французский)
транзакции для клиентов в оффлайне? Кому вы хотите послать транзакции когда
говорите про клиентов, отсутствующих в природе? Неандертальцам, динозаврам,
селеноидам (жителям Луны)? Их нет в природе. Может в мир сказочных эльфов?
Карлсону на крышу?

Quote
TTL протоколу битка не нужен, но вот комиссии нужны как показала практика.
Комиссии не нужны. Но всем хочется бабла на халяву. Будет ли бабло
за биткойн или изобретут передачу пива по интернету - это неважно.

Quote
У остальных нод нет экономического стимула находиться в сети.
Если такой стимул появится, то нод в сети будет на порядки больше.
Нахуй они нужны?
Если экономический стимул появится для меня постоять на улице у светофора
(допустим, за стояние там в краснобелом шарфике вы мне заплатите сотку грина)
я так и быть постою полчасика. Но вы стараетесь подвести экономическую основу
под простое стояние на улице? На хуя это всем остальным? Кто за это захочет
платить, если на улице и так куча народу стоит бесплатно?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Разница в том, что TCP/IP-пакет идет по маршруту. Я часть этого маршрута, принимаю с одной стороны,
отправляю в другую сторону. Биткойн-пакеты идут броадкастом всем пирам (по запросу).
И сохраняются на узлах как неподтвержденные транзакции.

В некоторых P2P протоколах тоже есть TTL. Не важно броадкастом или нет посылается сообщение, TTL нужен чтобы не захламлять сеть невостребованными пакетами. В протоколе биткоина нет TTL потому что нужно уметь отдавать транзакции даже тем клиентам которые в оффлайне и даже тем которых нет в природе.

TTL протоколу битка не нужен, но вот комиссии нужны как показала практика. Но сейчас комиссии достаются только майнерам. У остальных нод нет экономического стимула находиться в сети. Если такой стимул появится, то нод в сети будет на порядки больше.
sr. member
Activity: 770
Merit: 305
А есть где почитать, где ты развенчиваешь миф о новой экономической парадигме?

Давай не в этом топике. Это все-таки суб-форум "кодеры" и тема про биткойновский скрипт-язык.


Я думал, что уже ответил... Попробую еще раз: с транзакцией произойдет ровно то же самое, что происходит со всеми IP пакетами которые я посылаю одновременно 100500 узлам биткоина. Каждый узел уменьшает TTL на единицу добавляет к транзакции свой

Бред какой-то. ТТL используется для того, чтобы предотвратить циклы в маршрутизации.
Сеть же не без глюков работает. Где-то новые каналы появляются, где-то исчезают.
Чтобы предотвратить хождение по кругу - я при релее пакетов уменьшаю на 1 TTL
И не релею пакеты с TTL=0

Разница в том, что TCP/IP-пакет идет по маршруту. Я часть этого маршрута, принимаю с одной стороны,
отправляю в другую сторону. Биткойн-пакеты идут броадкастом всем пирам (по запросу).
И сохраняются на узлах как неподтвержденные транзакции.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Я думал, что уже ответил... Попробую еще раз: с транзакцией произойдет ровно то же самое, что происходит со всеми IP пакетами которые я посылаю одновременно 100500 узлам биткоина. Каждый узел уменьшает TTL на единицу добавляет к транзакции свой выход (откусывает часть комиссии) и посылает пакет транзакцию дальше. Когда TTL комиссия станет равным нулю, IP пакет транзакцию дальше релеят только альтернативно одаренные ноды.

Между отправкой IP пакетов и твоим предложением есть 2 большие разницы. Можешь объяснить с какой практической целью ты желаешь достичь race condition?

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

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

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

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

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

Во-первых, "погугли" пишется слитно. Во-вторых, когда это я утверждал что ты просишь его быть попугаем? Речь шла лишь о том, что положение вещей позволяет тебе получить данную информацию не прибегая к подобным просьбам. Я предоставил тебе вполне конкретную ссылку, где своими словами пересказываю позицию Амаклина, а также указал 2 направления для поиска именно его изречений. Интересно - ищи, не интересно - не ищи. Если мои утверждения о новой экономической парадигме по вышеназванной ссылке расходятся с позицией Амаклина, то думаю он не станет об этом умалчивать. По-моему, ты путаешь право с обязанностью. Когда Амаклин кому-то сообщает что информация есть в его старых постах, то они идут и ищут, потому что ценность информации превышает издержки связанные с её поиском, ты же пытаешься эти издержки переложить на Амаклина. Это некрасиво, если выражаться культурно, что всё труднее делать, учитывая твою наглость.
member
Activity: 148
Merit: 45
https://bitaps.com/
А есть где почитать, где ты развенчиваешь миф о новой экономической парадигме? Если это были дискусси публичные, на каком либо форуме.
Либо можешь потратить еще немного усилий и вкратце развенчать этот миф для меня? Я понятливый, схватываю на лету, много слов не надо Smiley

Вот тут пересказываю своими словами:
https://bitcointalksearch.org/topic/m.48214176

Если для тебя это недостаточно убедительно, то поищи в профайле Амаклина среди всех сообщений и в старом аккаунте, который amaclin без цифры 1. Прелесть форума в том, что Амаклину не приходится быть попугаем и доносить до каждого в отдельности - ищи и обрящешь.

Я не прошу быть попугаем ни кого, попросил по нормальному ссылку если есть, ведь не перечитывать мне теперь всю историю чьих то сообщений, если можно просто спросить где прочитать. И да просьба была не к вам, так что давайте право сказать "Иди по гугли, я не попугай" давайте оставим Амаклину.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

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


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



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


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

Всё наебалово биткойна сводится к тому, что в оригинальном
изложении профит от майнинга рассматривался не в денежном эквиваленте, а наподобие
всеобщего блага.

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

sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
legendary
Activity: 2128
Merit: 1019
member
Activity: 148
Merit: 45
https://bitaps.com/
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
sr. member
Activity: 770
Merit: 305
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
sr. member
Activity: 770
Merit: 305
1. Я и сейчас плачу комиссию за транзакции, хотя можно и не платить.
Это только из скудоумия. Не считайте это оскорблением, я в каких-то вещах сам такой.
Вот недавно, буквально месяц назад, мне надо было оформить какие-то бумажки.
И вариант - либо бегать по конторам самому практически бесплатно, но я даже адреса не знаю
куда идти. Либо заплатить условную штуку баксов и нужные документы оформят "бойцы-бегунки"
Если бы я знал как сделать это бесплатно - может быть я бы и сделал.
95% крипторасов не знают как экономить на комиссиях. И не собираются знать.
Поэтому и платят.

Quote
2. Я отправляю транзу 10 окружающим нодам, каждый из этих 10 вставляет свой выход
где откусывает часть комиссии. Потом отправляет своим соседям. Комиссия играет ту же
роль, что поле TTL в низкоуровневых протоколах.
Вы серьёзно? Большего бреда я в жизни не видел. Счетчик TTL не меняет сущности пакета,
и состояние системы в целом, а ваш вариант меняет. Итак. У вас транзакция с 0.01 комиссией
релей-нодам. Минимально отщипнуть можно 0.01. Вы эту транзакцию отправляете одновременно
десяти вашим пирам. Каждый пир заинтересован отщипнуть эти 0.01 себе. Внимание, вопрос:
кому достанется награда в 0.01 уе, когда транзакция будет включена в блок?

Теоретически, вы можете подобные транзакции посылать уже сегодня. Там есть хитрые варианты подписи
SIGHASH_NONE и SIGHASH_SINGLE которые позволят модифицировать транзакцию на пути её следования
без инвалидации. Но "глупые релеи" будут пропускать без изменений. А "умные релеи" будут
переподковывать на свой собственный адрес. В результате будет некоторая лотерея кому достанется награда.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

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

1. Я и сейчас плачу комиссию за транзакции, хотя можно и не платить. Тут как раз ничего нового я не сказал.
Новое то, что эта же самая комиссия может перераспределяться между релеями и майнером.
2. Я отправляю транзу 10 окружающим нодам, каждый из этих 10 вставляет свой выход где откусывает часть комиссии. Потом отправляет своим соседям. Комиссия играет ту же роль, что поле TTL в низкоуровневых протоколах.

По поводу энтузиастов: когда будет выбор, брать или не брать комиссию за релей, то те же энтузиасты с радостью поставят правильную галочку в своей коре )
sr. member
Activity: 770
Merit: 305
Комиссия за релеинг это 100% будущее битка, я в этом уверен.
Я уверен, что
а) никакие комиссии на релеинг взять не получится, как бы вам этого ни хотелось.
б) даже если какая-то технология будет - это будет настолько далеко от битка, что битком не будет называться
в) да и вообще про "будущее битка" я как в том анекдоте про медсестру: "в каком ещё будущем?"

Просто рассуждаем логически.
Есть отправитель, есть получатель, есть "третья сторона", которая проводит сделку.
В существующей финансовой системе это "банк", который за комиссию и обеспечивает вас
всей нужной инфраструктурой. Отправителю даёт пластиковую карточку, получателю даёт
POS-терминал.

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

Хорошо, давайте предположим, что количество релей-нод будет сокращаться из-за оттока энтузиастов.
И что с того? Транзакции будут по-прежнему релеиться теми нодами, которые запускаются
время от времени. У меня, например, BitcoinCore днем как правило включен. Хотя, признаюсь,
у меня он работает в режиме -blocksonly -listen=0 -maxconnections=1 и за NAT-ом то есть никакую пользу
я сети не приношу в принципе. Но это я такой хитрый. Остальные оболваненные "цифровым золотом" люди
всерьёз думают что они что-то поддерживают и страшно гордятся этим. Прям даже про "новую элиту"
топики создают.

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

Quote
Я в транзакции трачу 1.1 битка но подписываю только свой выход на 1 биток. 0.1 оставляю на комиссию майнеру целиком, либо те, кто будут релеить могут откусить любое количество от 0.1 себе, записав дополнительный выход в мою транзакцию. Когда транза придет к майнеру, ему достанется комиссии меньше на столько, на сколько жадными будут релеи.
Будет ли такая схема работать? Я не знаю и никто не знает. Надо исследовать этот вопрос.

Я знаю. Схема работать не будет. Во-первых, зачем вы будете платить лишние деньги, если можно не платить?
Во-вторых, если у вас 10 пиров, и вы отправляете одновременно транзакцию с наградой за релей,
то кому из владельцев нод она достанется?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
sr. member
Activity: 770
Merit: 305

Это понятно, что автомобиля без колёс это не автомобиль. 4 колеса у него есть. 5,6,..10,..328 ему нужны или нет?
Если нужны, то зачем?
По-моему, мы слишком сильно съехали в оффтопик.
Автор темы может на нас обидеться.
Нужны ли автомобилю 328 колёс? Я считаю, что нет. Если речь не идет о каких-то очень экстравагантных вариантах использования.

Это ваше право - разработать и выпустить автомобиль с N колесами и убедить нас его покупать.
И это не наша обязанность рассказывать вам почему нам и четырёх колес сегодня хватает.


Это дурацкий троллинг получается - взять какое-то общепринятое утверждение, перевернуть его наоборот,
а потом наблюдать как народ пытается образумить "изобретателя" просто по доброте своей душевной.
legendary
Activity: 3486
Merit: 1100

Это понятно, что автомобиля без колёс это не автомобиль. 4 колеса у него есть. 5,6,..10,..328 ему нужны или нет?
Если нужны, то зачем?
sr. member
Activity: 770
Merit: 305
Если помечтать, что в нынешних объективных реалиях биток всех устраивает, то:
  • Зачем нужны скрипты в биткоине?
  • Какая от них польза?
  • Чем лучше или хуже - биткоин со скриптами или без них?

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

Вы всерьёз спрашиваете что лучше - биткойн со скриптами или без? А вопрос
"что лучше - автомобиль с колесами или без них" (не просто открутить, а спроектировать) не
желаете задать? Может быть без колёс и лучше будет - но сперва расскажите нам, как вы
собираетесь на таком авто ездить. А мы посмотрим какой вариант лучше.
legendary
Activity: 3486
Merit: 1100
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Ну давайте помечтаем.

По-моему у тебя кролик сам себе откусывает голову. Но если хочешь помечтать, то опиши как-то подробнее, а то пока оно само. Нарисовать награду релеям можно, но это надо что-то вроде лайтнинга использовать. Лохопед коннектится к рандомным пирам, приходит к общему консенсусу по комсе, а потом отправляет такую транзу которую все эти пиры согласны релеить, для этого даже мастерноды не нужны, но как заставить релеить тех кто не в доле я не в курсе, пускай оно дальше само - мечта же Smiley
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Ну давайте помечтаем.
Забористая у вас трава. Мне отсыпьте немного. Тоже хочу помечтать.

Это сейчас вы меня наркоманом считаете. Но когда награда за блок станет 0.00, тогда по другому запоете  Grin
sr. member
Activity: 770
Merit: 305
Ну давайте помечтаем.
Забористая у вас трава. Мне отсыпьте немного. Тоже хочу помечтать.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Ну, это вряд ли. Чтобы каждая релей-нода претендовала бы на какую-то сумму от комиссий?
Когда вы будете делить награду я прибегу и скажу - а почему мне не начислили бонус? Я эту транзакцию
тоже видел до включения в блок и переслал ее 18 раз с одного моего компьютера на другой! Гоните таньга!


Ну давайте помечтаем. Теоретически пусть есть такой контракт: "я отправляю своей жене 1 бтц и оставляю 0.1 бтц на комиссию для релеев. Каждый кто видит эту транзакцию, может отщипнуть от комиссии 0.01 бтц пока будет есть что отщипывать". Если ко мне такая транза придет, я охотно отщипну от нее 10 раз по 0.01, но после этого релеить ее бесполезно ибо больше она будет нахуй никому не нужна. Но я так же как и отправитель становлюсь заинтересованным в том, чтобы именно наш вариант транзакции попал в блок. Поэтому лучше откушу 0.01 и отправлю транзу еще 9 соседям, которые сделают то же самое.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Ну вот вы кефир и придумали, собственно.

Дак я в курсе )
Я пытался кефир осилить еще до того, как у этого кефира генезис блок появился. Тут на форуме анонс за полгода вроде выкладывали. Но так и не осилил - че там за газ и как на нем программировать, какой-то мутью все это показалось и потом быстро забылось... Си подобный язык и все остальное для домохозяек появилось позже, видимо как раз потому, что не я один ничего не понял из предварительных анонсов.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
sr. member
Activity: 770
Merit: 305
Интересный вопрос кстати: а можно ли сейчас придумать схему, чтобы тот кто релеит мог брать фиксированную комиссию с транзы?

Ну, это вряд ли. Чтобы каждая релей-нода претендовала бы на какую-то сумму от комиссий?
Когда вы будете делить награду я прибегу и скажу - а почему мне не начислили бонус? Я эту транзакцию
тоже видел до включения в блок и переслал ее 18 раз с одного моего компьютера на другой! Гоните таньга!

Вариант с какими-то "мастер-релей-нодами" я пока не хочу рассматривать. Очередные костыли для наёбывания лохопедов.
sr. member
Activity: 770
Merit: 305
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
sr. member
Activity: 770
Merit: 305
Меня вот эта технология блокчейна реально вштыривает. Я кайфую от нее постоянно, когда начинаю продолжать ее изучение  Smiley
Не одноранговая сеть, не скачки биржевых цен, а именно вот эта штука: когда тысячи клиентов работают абсолютно синхронно и почти без глюков уже десятый год.
Работать за деньги - невелика заслуга.
Как только денежный поток заканчивается - все выключают оборудование
и идут кто в ресторан отмечать профит, кто на пруд топиться. Никого не волнует
что под капотом у технологии.

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

Quote
На сколько сложно будет внести в код оператор перехода на метку?
Абсолютно несложно.
Есть еще неиспользуемые байты. Например, определим один из них как
#define OP_GOTO xx
который будет означать - "прочитать из скрипта число и переместить "курсор" выполнения
на это число байтов назад или вперед". Изменений в коде ну строчек 50 от силы. Это если
не задумываться о проблемах. Можно читать размер перехода не из скрипта, а из стека.
Замечательный способ отстрелить себе ногу.

Только зачем? И что вы будете делать, если вам приходит транзакция, в которой скрипт исполняющийся вечным циклом?
Выполните N операций и отбросите? Ну так тогда зачем вам циклы - у скриптов биткойна и так достаточно возможностей.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
legendary
Activity: 3486
Merit: 1100
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
sr. member
Activity: 770
Merit: 305
У меня есть свои цели: я хочу чтобы биткоин наконец появился в отечественном академическом сообществе.

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

С тем же успехом - мне никто не ответил.  Grin
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
sr. member
Activity: 770
Merit: 305
Разрабы сейчас поставили цель избавиться от буста везде где можно. Вместо блокирующих
сокетов переходят на либэвент. Вобщем сейчас код намного приятней чем даже пару лет назад был.
Дай Бог им сил и времени на это.
Меня даже не смущает то, что именно эти люди и запилили сперва boost, а теперь с гордостью собрались выпиливать.

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

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

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

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

-------------------------------------

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

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

Этой транзакции нет в базе данных Bitcoin Core, поэтому bitcoin-cli её не может поднять из базы и декодировать.
Даже сам Сатоши Накамото, имея приватный ключ к адресу 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa не сможет
потратить свои самые первые 50 BTC, так как вся остальная сеть такую транзакцию сочтет невалидной.
(Конечно, все что ему впоследствии накидали на этот адрес потратить он теоретически может, речь только
о генезис-транзакции)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
sr. member
Activity: 770
Merit: 305
Амаклин прав, ковыряй сорцы. Эти пейсатели там описали "что хотел сказать автор" не слишком вникая в логику.

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

Я начинал с написания самостоятельного независимого парсера blk-файлов, сниффера сетевого
протокола и много читал различных форумов отыскивая зерна среди плевел. Ну и имел явно
выраженную задачу, просто так написать даже подобную "методичку" (статью, руководство,
мануал - как угодно называйте) мне будет сложно. Могу лишь быть рецензентом, выискивая
ошибки и корявости.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Амаклин прав, ковыряй сорцы. Эти пейсатели там описали "что хотел сказать автор" не слишком вникая в логику.
sr. member
Activity: 770
Merit: 305
Ну и кто тут глумится? ))
Ладно. Я что-то действительно возомнил себя королём и начал придираться. Просю просения.

вот вам еще неточность:
Quote
2. Скрипт должен оставлять в стеке непустое значение.
надо понимать разницу между непустым и ненулевым.
в биткойне ноль можно закодировать многими способами, в том числе непустыми.
а есть еще "отрицательный ноль" что-то типа 0x8000000000 - весьма непустая строка, которая
тем не менее приводит скрипт к false.

В целом совет - не пытайтесь переводить https://en.bitcoin.it/wiki/Main_Page
Там фактических ошибок в английской части море, а в русской и подавно.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
sr. member
Activity: 770
Merit: 305
Quote
Где тут входящий скрипт?
Я под скриптом понимаю программу написанную на языке Script. Хочу сделать учебник-методичку про программированию на этом языке. Возможно это будет первый русскоязычный учебник. Буду благодарен за помощь.

Вот я вам выделил жирным. 4d - это его длина, остальное все - некоторый мусор, так как
входящий скрипт в coinbase-транзакции не исполняется Впрочем, правила на формат
этого мусора впоследствии ужесточались.

01000000010000000000000000000000000000000000000000000000000000000000000000fffff fff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c 6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b7 3ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909 a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11 d5fac00000000

Можно даже попытаться его декодировать

Code:
decodescript 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73


{
  "asm": "486604799 4 5468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73",
  "type": "nonstandard",
  "p2sh": "3FimpcNzLCfeJB3zxDAExME4w6BLYryx4z"
}

Тут ничего собственно и нет, только extranonce и знаменитая фраза "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"
Можете сами увидеть на странице https://www.blockchain.com/ru/btc/tx/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b?show_adv=true

То что bitcoin-cli вам это не показывает - ну так корявое приложение для нубланов. Не пользуйтесь этим говном.
Вон даже bc.i и тот показывает scriptSig coinbase-транзакции.

Quote
Опять же в декодированной транзакции из вышеуказанного примера, где там ссылка на предыдущую транзакцию?

вот выделил жирным. перед scriptSig как у всех других инпутов.

01000000010000000000000000000000000000000000000000000000000000000000000000fffff fff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c 6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b7 3ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909 a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11 d5fac00000000


Quote
Не делают.
Ну или скажем так: нестандартные входные скрипты (скрипты в поле scriptSig) не делают транзакцию автоматически нестандартной.
В настоящее время к входному скрипту предъявляются всего три требования:
1. Скрипт не должен содержать синтаксических ошибок
2. Скрипт должен оставлять в стеке непустое значение.
3. В скрипте должно быть не более 15 операторов проверки цифровой подписи.

https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L174
Да ладно вам глумиться! Вы смотрите только кейс if (whichType == TX_SCRIPTHASH)
а все остальное рассматривается в Solver(prev.scriptPubKey, vSolutions)

Quote
Я же написал нет операторов безусловного перехода.
Code:
if ( false )
{
   // something
}

вот вам безусловный переход. безусловный - это значит: будет произведен всегда.
То есть это эквивалентно

Code:
goto label
// something
label:

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



kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Quote
2. Coinbase-транзакции. Эти транзакции не имеют входящих (открывающих) скриптов
имеют

Точно?
Quote
{
   "result": {
      "txid": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
      "hash": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
      "version": 1,
      "size": 134,
      "vsize": 134,
      "locktime": 0,
      "vin": [
         {
            "coinbase": "04ffff001d0104",
            "sequence": 4294967295
         }
      ],
      "vout": [
         {
            "value": 50.00000000,
            "n": 0,
            "scriptPubKey": {
               "asm": "0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d 4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee OP_CHECKSIG",
               "hex": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da758937951 5d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac",
               "reqSigs": 1,
               "type": "pubkey",
               "addresses": [
                  "12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX"
               ]
            }
         }
      ],
      "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000fffff fff0704ffff001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec1 1600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf6 21e73a82cbf2342c858eeac00000000",
      "blockhash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
      "confirmations": 550977,
      "time": 1231469665,
      "blocktime": 1231469665
   },
   "error": null,
   "id": null
}

Где тут входящий скрипт?
Я под скриптом понимаю программу написанную на языке Script. Хочу сделать учебник-методичку про программированию на этом языке. Возможно это будет первый русскоязычный учебник. Буду благодарен за помощь.

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

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

Quote
Quote
"genesis block coinbase" и это единственная транзакция которую нельзя декодировать утилитой bitcoin-cli
можно

bitcoin-cli.exe -rpcuser=user -rpcpassword=pw decoderawtransaction 01000000010000000000000000000000000000000000000000000000000000000000000000fffff fff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c 6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b7 3ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909 a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11 d5fac00000000

Code:
{
  "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
  "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
  "size": 204,
  "vsize": 204,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73",
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 50.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG",
        "hex": "4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac",
        "reqSigs": 1,
        "type": "pubkey",
        "addresses": [
          "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
        ]
      }
    }
  ]
}


Вот этого не знал. Исправлюсь.

Quote
Quote
Первое поле у coinbase транзакций не содержит полезной информации (как в примере выше)
Ну кому как. Кому-то эта информация весьма полезна. Если вы не видите пользы - это не значит что её нет.

Тоже согласен. Надо поправиться.

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

Блин точно.  Grin

Quote
Quote
Нестандартные скрипты не делают транзакцию нестандартной
Делают

Не делают.
Ну или скажем так: нестандартные входные скрипты (скрипты в поле scriptSig) не делают транзакцию автоматически нестандартной.
В настоящее время к входному скрипту предъявляются всего три требования:
1. Скрипт не должен содержать синтаксических ошибок
2. Скрипт должен оставлять в стеке непустое значение.
3. В скрипте должно быть не более 15 операторов проверки цифровой подписи.

https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L174

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

Я же написал нет опетаторов безусловного перехода.
Операторы условного перехода есть.  Smiley

Quote

Дальше мне лень ошибки выискивать


Спасибо и на этом )
sr. member
Activity: 770
Merit: 305
Quote
2. Coinbase-транзакции. Эти транзакции не имеют входящих (открывающих) скриптов
имеют

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

Quote
"genesis block coinbase" и это единственная транзакция которую нельзя декодировать утилитой bitcoin-cli
можно

bitcoin-cli.exe -rpcuser=user -rpcpassword=pw decoderawtransaction 01000000010000000000000000000000000000000000000000000000000000000000000000fffff fff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c 6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b7 3ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909 a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11 d5fac00000000

Code:
{
  "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
  "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
  "size": 204,
  "vsize": 204,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73",
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 50.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG",
        "hex": "4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac",
        "reqSigs": 1,
        "type": "pubkey",
        "addresses": [
          "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
        ]
      }
    }
  ]
}

Quote
Первое поле у coinbase транзакций не содержит полезной информации (как в примере выше)
Ну кому как. Кому-то эта информация весьма полезна. Если вы не видите пользы - это не значит что её нет.

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

Quote
Нестандартные скрипты не делают транзакцию нестандартной
Делают

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

Quote
Входной скрипт находится в проверяемой транзакции и выполняется в начале. Выходной скрипт находится в ранее проверенной транзакции и выполняется сразу после входного скрипта.
Ты сам-то не запутался в своем описании? Что в начале, а что в конце? На самом деле наоборот, сперва выполняется scriptSig а потом scriptPub Ладно. Я тут прочитал пять раз твоё описание и наконец понял что ты имел в виду. Правильно. Но никто все равно не поймет.

Дальше мне лень ошибки выискивать
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Криптовалюта широко известна прежде всего как инструмент для спекулятивной игры на биржах. В статье описываются внутреннее строение транзакций криптовалюты Bitcoin. В статье рассказывается о том, какое место в инфраструктуре сети Bitcoin отведено для языка программирования Script. Приведены примеры некоторых стандартных скриптов.

Введение
Bitcoin – это первая в мире криптовалюта основанная на технологии децентрализованного обмена транзакциями (1). Широкой публике Bitcoin известен прежде всего как инструмент для анонимных, не зависящих от банков платежей, а так же как инструмент для спекулятивной игры на биржах. Мало кто знает и задумывается над тем, что с технической точки зрения, все транзакции Bitcoin – это не что иное, как набор компьютерных программ. Сам код Bitcoin написан на языке программирования C++ (2), но для транзакций используется простой Тьюринг-неполный язык программирования который называется Script.

Утилиты bitcoin-qt, bitcoind, bitcoin-cli
В состав дистрибутива Bitcoin (3) входят несколько исполняемых файлов, из которых наиболее известным является графический клиент bitcoin-qt. Графический клиент позволяет в интерактивном режиме управлять многими функциями, однако зачастую самые новые функции разработчики в графический клиент не включают. Поэтому для изучения протокола Bitcoin на низком уровне, более полезной является утилита командной строки bitcoin-cli. Полный список команд этой утилиты можно получить стандартным ключем
Code:
./bitcoin-cli -?
Так же можно получить подробное описание каждой команды с примерами использования. Например
Code:
/bitcoin-cli help decoderawtransaction
В системах без графической оболочки вместо  bitcoin-qt, для работы сети Bitcoin нужно запускать утилиту bitcoind. Сама по себе эта утилита не представляет никаких интерактивных возможностей, поэтому удобно запускать ее в качестве "демона" (фоновой программы) с соответствующим флагом.
Code:
./bitcoind -daemon

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

Существуют два вида транзакций:
1. Транзакции у которых есть входящие (открывающие) и исходящие (закрывающие) скрипты. Это самый распространенный вид транзакций, каждая из таких транзакций должна ссылаться на предшествующую.
2. Coinbase-транзакции. Эти транзакции не имеют входящих (открывающих) скриптов и не содержат в себе ссылку на предыдущую транзакцию. (примечание: В шестнадцатиричном представалении в сoinbase-транзакциях все поля заполнены как и в обычных транзакциях, но поля отвечающие за входящие скрипты и ссылку на предыдущую транзакцию не несут в себе смысла)

Самая первая транзакция Bitcoin называется "genesis block coinbase" и это единственная транзакция которую нельзя декодировать утилитой bitcoin-cli (примечание: на самом деле можно, но для этого нужно вручную подготовить входные данные, что находится за рамками данной статьи). Полную информацию о любой другой транзакции можно легко получить.
Рассмотрим вторую (следующую после genesis block coinbase) транзакцию в сети Bitcoin. Получить ее можно следующими командами:
Code:
# Получаем хэш первого блока транзакций
./bitcoin-cli getblockhash 1
# Полученный хэш первого блока подставляем в следующую команду
./bitcoin-cli getblock 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048
На выходе получим JSON строку в которой содержится основная информация о самом первом (после genesis) блоке Bitcoin.
Quote
{
        "result": {
                "hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
                "confirmations": 547866,
                "strippedsize": 215,
                "size": 215,
                "weight": 860,
                "height": 1,
                "version": 1,
                "versionHex": "00000001",
                "merkleroot": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
                "tx": [
                        "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098"
                ],
                "time": 1231469665,
                "mediantime": 1231469665,
                "nonce": 2573394689,
                "bits": "1d00ffff",
                "difficulty": 1,
                "chainwork": "0000000000000000000000000000000000000000000000000000000200020002",
                "previousblockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
                "nextblockhash": "000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd"
        },
        "error": null,
        "id": null
}
В этом блоке есть всего одна транзакция, получим теперь информацию о ней
Code:
/bitcoin-cli decoderawtransaction  0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098 1
Эта команда вернет в формате JSON, информацию о самой первой (после genesis) транзакции в сети Bitcoin. Наиболее важными полями в полученном JSON объекте являются следующие:
Quote
               "vin": [ {
                                "coinbase": "04ffff001d0104",
                                "sequence": 4294967295
                        } ],
                "vout": [ {
                                "value": 50.00000000,
                                "n": 0,
                                "scriptPubKey": {
                                        "asm": "0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d 4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee OP_CHECKSIG",
                                        "hex": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da758937951 5d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac",
                                        "reqSigs": 1,
                                        "type": "pubkey",
                                        "addresses": [
                                                "12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX"
 ]   } }  ],

Итак, во всех транзакциях начиная с самой первой, есть два поля "vin" и "vout". Первое поле у coinbase транзакций содержит служебную информацию (как в примере выше), в данной статье это поле нас не интересует. Второе поле у всех транзакций в обязательном порядке содержит микропрограмму на языке Script. Программу можно прочитать в формате "asm" или в формате "hex". Для декодирования программы из шестнадцатиричного формата можно так же использовать утилиту bitcoin-cli. Например выходной  ("vout" или запирающий) скрипт из первой транзакции Bitcoin можно декодировать так:
Code:
./bitcoin-cli decodescript  410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac
На выходе получим:
Quote
{
        "result": {
                "asm": "0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d 4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee OP_CHECKSIG",
                "reqSigs": 1,
                "type": "pubkey",
                "addresses": [ "12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX" ],
                "p2sh": "3BgShGBxRQrczVD6Ftj4z51FfgJ761FdSX"
        },
        "error": null,
        "id": null
}
Таким образом еще раз можно убедиться, что в JSON описании транзакции, поля "hex" и "asm", содержат один и тот же скрипт.

Входные и выходные скрипты Bitcoin
Все микропрограммы-скрипты в транзакциях Bitcoin состоят из двух частей. Первая часть - выходной скрипт который записан в поле vout.scriptPubKey. Вторая часть программы это входной скрипт, записанный в поле vin.scriptSig. Входной скрипт может отсутствовать у транзакций "coinbase", однако выходной скрипт должен присутствовать во всех без исключения транзакциях.
Существует множество правил по которым узлы сети Bitcoin проверяют правильность транзакции (4), но главное из правил можно сформулировать следующими словами: "входной скрипт проверяемой транзакции объединенный с выходным скриптом предыдущей транзакции, должен работать без ошибок и по окончании работы во внутреннем стеке должно быть значение, соответствующее логической истине". Продемонстрируем как работает данное правило на примере:
Code:
# Рассмотрим Bitcoin блок №170
./bitcoin-cli getblockhash 170
Quote
00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee
Code:
./bitcoin-cli getblock 00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee
Quote
{
        "result": {
                "hash": "00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee",
*******************
                "tx": [
                        "b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082",
                        "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16"
                ],
*******************
}
Это первый блок Bitcoin в котором кроме транзакции "coinbase" есть еще одна транзакция и в этой транзакции присутствует входной скрипт. Рассмотрим данную транзакцию, в ней нас будет интересовать только часть "vin".
Code:
./bitcoin-cli getrawtransaction f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 1

Quote
***********************
                "vin": [ {
                                "txid": "0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9",
                                "vout": 0,
                                "scriptSig": {
                                        "asm": "304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181 522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09[ALL]",
                                        "hex": "47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd4102201 81522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901"
*******************

Рассмотрим процесс проверки данной транзакции узлом (клиентом) Bitcoin сети:
1. К клиенту сети Bitcoin приходит транзакция.
2. Клиент сети Bitcoin должен взять из этой транзакции значение полей vin.txid,  vin.vout, vin.scriptSig.
3.  Значение vin.txid - должно совпадать со значением какой-либо ранее проверенной транзакции. В рассматриваемом примере  0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9 это хэш "coinbase" транзакции из блока № 9.
4. Значение  vin.vout должно указывать на номер выходного скрипта в транзакции  vin.txid. В рассматриваемом примере  vin.vout = 0 значит для следующей проверки нужно взять нулевой выходной скрипт из транзакции  0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9.  Рассмотрим эту транзакцию, в ней нас интересует поле "vout"
Code:
./bitcoin-cli getrawtransaction  0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9 1
Quote
*******************************
                "vout": [ {
                                "value": 50.00000000,
                                "n": 0,
                                "scriptPubKey": {
                                        "asm": "0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84c cf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG",
                                        "hex": "410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb8 4ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac",
                                        "reqSigs": 1,
                                        "type": "pubkey",
                                        "addresses": [
                                                "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S"
*********************************
5. Окончательный проверочный скрипт можно представить следующим псевдокодом
Code:
[проверяемая транзакция].vin[i].scriptSig + [ранее проверенная транзакция].vout[vin[i].vout].scriptPubKey
Или пошагово:
Code:
PUSH(0x47) 304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09
PUSH(0x41)  0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3
OP_CHECKSIG

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

Язык программирования Script
В документации приведен список всего около ста команд (5), некоторые из которых зарезервированы и в настоящее время не должны использоваться в транзакциях. Скрипты в транзакциях могут быть "стандартными" и "нестандартными". Исходящие скрипты должны быть только стандартными. Нестандартные входные скрипты не делают транзакцию нестандартной, поэтому открыта возможность для написания пользовательских скриптов различной степени сложности.
В настоящее время к входному скрипту предъявляются всего три требования (6):
1. Скрипт не должен содержать синтаксических ошибок
2. Скрипт должен оставлять в стеке непустое значение.
3. В скрипте должно быть не более 15 операторов проверки цифровой подписи.

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

Заключение
Микропрограммы на языке Script являются неотъемлемой частью протокола Bitcoin. Программы состоят из двух частей: входного и выходного скрипта. Входной скрипт находится в проверяемой транзакции и выполняется в начале. Выходной скрипт находится в ранее проверенной транзакции и выполняется сразу после входного скрипта. Транзакция проходит проверку успешно, только если в конце работы всех частей скрипта, в стеке программы будет значение, соотвествующее логической истине.

Источники информации
1. Satoshi Nakamoto. Bitcoin: A Peer-to-Peer Electronic Cash System. https://bitcoin.org/bitcoin.pdf
2. Bitcoin Core integration/staging tree. https://github.com/bitcoin/bitcoin
3. Bitcoin Core. https://github.com/bitcoin/bitcoin/releases
4. https://github.com/bitcoin/bitcoin/blob/29f429dc7d4c7e6cd012e749cadf89e3138bcab3/src/policy/policy.cpp#L80
5. Script. https://en.bitcoin.it/wiki/Script
6. Bitcoin Core. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L174
Jump to: