Bitcoin Forum
August 11, 2024, 02:14:27 PM *
News: Latest Bitcoin Core release: 27.1 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 [4]  All
  Print  
Author Topic: [Методичка] Программирование скриптов Bitcoin.  (Read 16361 times)
amaclin1
Sr. Member
****
Offline Offline

Activity: 826
Merit: 317


View Profile
February 28, 2019, 05:58:53 PM
 #61

Короче, я поискал в интернете.
Нашел 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 - я не знаю и особо не стремлюсь

Вы скажите, что вы хотите, может я вам и так помогу. Недорого или даже забесплатно.
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
February 28, 2019, 07:24:21 PM
Merited by chimk (4), klarki (1)
 #62

Если позволите, внесу свою лепту.
Заготовка транзакции 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

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

Activity: 826
Merit: 317


View Profile
February 28, 2019, 08:56:55 PM
 #63

Все правильно расшифровал.
Версия транзакции у меня 1, а не 2, потому что я до сих пор пользуюсь версией клиента v0.13.1
У вас скорее всего та же последовательность действий будет с чуть другим результатом - может быть еще locktime у транзакции будет другой. Не проверял. Меня и этот клиент устраивает.
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!