Bitcoin Forum
April 25, 2024, 01:09:02 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 3 4 »  All
  Print  
Author Topic: [Методичка] Программирование скриптов Bitcoin.  (Read 16327 times)
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 20, 2018, 05:22:46 PM
Last edit: November 27, 2018, 06:17:45 PM by kzv
Merited by Alex_Sr (7), xandry (4), Xtc (3), chimk (3), neiros (1), johhnyUA (1), madnessteat (1), ligor (1), xenon131 (1)
 #1

Криптовалюта широко известна прежде всего как инструмент для спекулятивной игры на биржах. В статье описываются внутреннее строение транзакций криптовалюты 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 getrawtransaction  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

OpenTrade - Open Source Cryptocurrency Exchange
1714007342
Hero Member
*
Offline Offline

Posts: 1714007342

View Profile Personal Message (Offline)

Ignore
1714007342
Reply with quote  #2

1714007342
Report to moderator
"In a nutshell, the network works like a distributed timestamp server, stamping the first transaction to spend a coin. It takes advantage of the nature of information being easy to spread but hard to stifle." -- Satoshi
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 20, 2018, 05:23:12 PM
 #2

Reserved

OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 21, 2018, 04:26:19 PM
Last edit: November 21, 2018, 05:09:46 PM by amaclin1
Merited by chimk (1)
 #3

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 Ладно. Я тут прочитал пять раз твоё описание и наконец понял что ты имел в виду. Правильно. Но никто все равно не поймет.

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

Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 21, 2018, 06:14:53 PM
 #4

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

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


Спасибо и на этом )

OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 21, 2018, 06:43:58 PM
 #5

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:

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




Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 21, 2018, 06:58:44 PM
 #6

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
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)

Ну очевидно же, что Solver(prev.scriptPubKey, vSolutions) смотрит на выходящий скрипт предыдущей транзакции. Дальше идет проверка:
если исходящий скрипт предыдущей транзакции нестандартный - значит входной скрипт проверяемой транзакции тоже нестандартный.
если исходящий скрипт предыдущей транзакции стандартный P2SH или типа того - значит три проверки которые я указал.

Я еще не искал где этот Solver лежит, но имена параметров вызова какбэ намекают, что так он и работает.

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

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

Code:
goto label
// something
label:

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

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





OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 21, 2018, 07:14:37 PM
 #7

Ну и кто тут глумится? ))
Ладно. Я что-то действительно возомнил себя королём и начал придираться. Просю просения.

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

В целом совет - не пытайтесь переводить https://en.bitcoin.it/wiki/Main_Page
Там фактических ошибок в английской части море, а в русской и подавно.

Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
fxpc
Sr. Member
****
Offline Offline

Activity: 1316
Merit: 420


KTO EC/\U HUKTO?


View Profile
November 23, 2018, 07:58:27 PM
 #8

Амаклин прав, ковыряй сорцы. Эти пейсатели там описали "что хотел сказать автор" не слишком вникая в логику.

amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 23, 2018, 08:27:04 PM
 #9

Амаклин прав, ковыряй сорцы. Эти пейсатели там описали "что хотел сказать автор" не слишком вникая в логику.

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

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

Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 24, 2018, 07:06:33 AM
 #10

Амаклин прав, ковыряй сорцы. Эти пейсатели там описали "что хотел сказать автор" не слишком вникая в логику.

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

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

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

OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 24, 2018, 07:39:44 AM
Last edit: November 24, 2018, 08:11:46 AM by amaclin1
 #11

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

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

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

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

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

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

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

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

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


Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 24, 2018, 10:16:29 AM
 #12


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


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

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

OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 24, 2018, 11:32:30 AM
 #13

У меня есть свои цели: я хочу чтобы биткоин наконец появился в отечественном академическом сообществе.

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

С тем же успехом - мне никто не ответил.  Grin

Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
fxpc
Sr. Member
****
Offline Offline

Activity: 1316
Merit: 420


KTO EC/\U HUKTO?


View Profile
November 24, 2018, 11:40:25 AM
 #14

У меня есть свои цели: я хочу чтобы биткоин наконец появился в отечественном академическом сообществе.

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

С тем же успехом - мне никто не ответил.  Grin

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

UPD: Кстати, поток хомяков начинает иссякать и всё указывает на то, что крах пирамидки уже очень близок.

neiros
Legendary
*
Offline Offline

Activity: 3500
Merit: 1100



View Profile WWW
November 24, 2018, 12:23:46 PM
Merited by chimk (4)
 #15

У меня есть свои цели: я хочу чтобы биткоин наконец появился в отечественном академическом сообществе.

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

С тем же успехом - мне никто не ответил.  Grin

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

UPD: Кстати, поток хомяков начинает иссякать и всё указывает на то, что крах пирамидки уже очень близок.

fxpc & amaclin1, я с вами совершенно не согласен и вы это знаете.
Всё только начинается. Времени всего-то несколько лет прошло.
Пузырики с пирамидками это мелочи, всего лишь отражение в зеркале.
Почти каждый в нём видит то, что привык или хочет увидеть.

kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 24, 2018, 12:48:13 PM
 #16


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

UPD: Кстати, поток хомяков начинает иссякать и всё указывает на то, что крах пирамидки уже очень близок.

Меня вот эта технология блокчейна реально вштыривает. Я кайфую от нее постоянно, когда начинаю продолжать ее изучение  Smiley
Не одноранговая сеть, не скачки биржевых цен, а именно вот эта штука: когда тысячи клиентов работают абсолютно синхронно и почти без глюков уже десятый год.
И вот эти все потроха, как они реализованы... В статье Сатоши Накомото ведь ни слова нет про всякие скрипты! Почему это именно так реализовано? Кто это первый придумал? Есть ли у этих скриптов уязвимости? Что еще интересного можно заскриптовать кроме обычных купил-продай? На сколько сложно будет внести в код оператор перехода на метку?.. Короче есть огромное поле для исследований.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 24, 2018, 01:12:18 PM
 #17

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

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

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

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

Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
fxpc
Sr. Member
****
Offline Offline

Activity: 1316
Merit: 420


KTO EC/\U HUKTO?


View Profile
November 24, 2018, 01:22:45 PM
 #18

Меня вот эта технология блокчейна реально вштыривает. Я кайфую от нее постоянно, когда начинаю продолжать ее изучение  Smiley
Не одноранговая сеть, не скачки биржевых цен, а именно вот эта штука: когда тысячи клиентов работают абсолютно синхронно и почти без глюков уже десятый год.
И вот эти все потроха, как они реализованы... В статье Сатоши Накомото ведь ни слова нет про всякие скрипты! Почему это именно так реализовано? Кто это первый придумал? Есть ли у этих скриптов уязвимости? Что еще интересного можно заскриптовать кроме обычных купил-продай? На сколько сложно будет внести в код оператор перехода на метку?.. Короче есть огромное поле для исследований.

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

fxpc & amaclin1, я с вами совершенно не согласен и вы это знаете.
Всё только начинается. Времени всего-то несколько лет прошло.
Пузырики с пирамидками это мелочи, всего лишь отражение в зеркале.
Почти каждый в нём видит то, что привык или хочет увидеть.

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

kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 24, 2018, 01:40:02 PM
 #19


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

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

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

Зачем все это?.. Ну чтобы делать скрипты вообще любой сложности.
Нужно ли это кому-то? Судя по популярности эфира - нужно многим.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin1
Sr. Member
****
Offline Offline

Activity: 770
Merit: 305


View Profile
November 24, 2018, 01:48:43 PM
 #20

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

Зачем все это?.. Ну чтобы делать скрипты вообще любой сложности.
Нужно ли это кому-то? Судя по популярности эфира - нужно многим.

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

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

Bitcoin SV GUI client for Windows and Linux
https://github.com/AlisterMaclin/bitcoin-sv/releases
Pages: [1] 2 3 4 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!