Транзакция все еще не может быть потрачена с CLTV

Ранее я генерировал транзакцию с помощью CHECKLOCKTIMEVERIFY Вот транзакция https://tchain.btc.com/bb1415c166fd9f767c06d34d539f4b110ef4445f74a76c5ffad1ded33032e872

Он блокирует средства до блока 1442909. Я создаю новую транзакцию расходов.

Когда я пытаюсь подписать его:

bitcoin-cli -testnet signrawtransactionwithwallet "020000000172e83230d3ded1fa5f6ca7745f44f40e114b9f534dd3067c769ffd66c11514bb0000000000ffffffff01443dd200000000002676a92103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef88ac00000000"
{
  "hex": "020000000172e83230d3ded1fa5f6ca7745f44f40e114b9f534dd3067c769ffd66c11514bb0000000000ffffffff01443dd200000000002676a92103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef88ac00000000",
  "complete": false,
  "errors": [
    {
      "txid": "bb1415c166fd9f767c06d34d539f4b110ef4445f74a76c5ffad1ded33032e872",
      "vout": 0,
      "witness": [
      ],
      "scriptSig": "",
      "sequence": 4294967295,
      "error": "Locktime requirement not satisfied"
    }
  ]
}

Я получил «Требование блокировки не выполнено»? Сейчас высота блокчейна составляет 1 442 912.

Что я делаю неправильно?

Ответы (1)

Bitcoin Core не поддерживает подписание скриптов с инструкциями CLTV.

Он поддерживает только:

  • П2ПК
  • П2ПКХ
  • k-of-n мультиподпись
  • Обернутые P2WSH версии вышеперечисленного
  • П2ВПКХ
  • Обернутые P2SH версии вышеперечисленного

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

Ошибка, которую вы видите, связана с тем, что в транзакции расходов не установлено поле nLockTime. В общем, CLTV работает косвенно:

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

Но в любом случае, даже если бы у вас было правильное nLockTimeполе, signrawtransactionвы все равно не знали бы, как подписать этот сценарий.

есть ли причина для этого? Чтобы предотвратить потерю средств пользователями или меры защиты для конечного пользователя без подробных знаний? Мне было интересно, могут ли быть действия, позволяющие более сложные варианты использования (после чего-то вроде переключателя «--experimental»)?
Нет, просто не реализовано. Bitcoin Core понятия не имеет, что делает этот скрипт или как создать для него удовлетворительный ввод.
Есть ли план по реализации этого?