Кто-нибудь может объяснить различия в поведении getrawtransaction и gettransaction в RPC?

Я щелкнул правой кнопкой мыши историю транзакций в клиенте QT и вставил TxID ниже.

Q1

В следующем тесте кто-нибудь может объяснить, какова цель суффикса -000и для чего он используется?

gettransaction 54b9be14443b152b02ed0b18d27504631cccfa84ce9ada03f9558fbb85b6129c-000

Q2

Почему необработанная транзакция не поддерживает тот же формат идентификатора транзакции, что и предыдущая команда? (мне нужно удалить -000 символов)

getrawtransaction 54b9be14443b152b02ed0b18d27504631cccfa84ce9ada03f9558fbb85b6129c-000
ERROR: parameter 1 must be hexadecimal string

Q3

Когда я разрешаю index=1в bitcoin.conf и переиндексировать, почему я не могу вызывать GetTransactionтранзакции не в своем кошельке? Я хотел бы получить результаты в формате JSON

самостоятельный комментарий № 1 - Вот некоторые комментарии о функции getrawtransaction

Ответы (1)

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

Q2: getrawtransactionзапрашивает пул памяти, набор неизрасходованных выходных данных транзакции и блокчейн (если txindexон включен) для транзакции. Он не запрашивает один вывод, поэтому вы передаете только шестнадцатеричный идентификатор. Вы можете запросить выходные данные отдельных неизрасходованных транзакций с помощью gettxoutкоманды (которая принимает txid + индекс вывода в качестве отдельных аргументов). Вы можете передать дополнительную 1 в качестве аргумента для getrawtransaction, чтобы он был декодирован, а не только необработанный шестнадцатеричный код. decoderawtransactionможет сделать это для произвольных необработанных транзакций в шестнадцатеричном кодировании. Возможно, это ответ на Q3.

Q3: gettransactionэто кошелек RPC. Он не может работать ни с чем другим, так как ему нужен более высокий уровень абстракции. Он вычисляет дебет/кредит и комиссию, что требует определения того, какие выходы исходят от/к вам, а какие являются сдачей. Для этого нужно знать, какие ключи принадлежат вам. Он не запрашивает блокчейн, но вы можете использовать « getrawtransaction[txid] 1», чтобы получить декодированную форму транзакций блокчейна (с txindexвключенным).

Интересно, как gettransactionкоманда, использующая эту accountsфункцию, будет отображать транзакцию (в графическом интерфейсе) и соответствующий идентификатор при moveвыдаче a. Мне также интересно, какие условия вызовут -000появление чего-то другого, кроме a.
Мне нужно сгенерировать больше тестовых данных, но кажется, что проверка ошибок на «получить конкретный вывод» не работает должным образом. например, я не получаю ошибку с этимgettransaction 54b9be14443b152b02ed0b18d27504631cccfa84ce9ada03f9558fbb85b6129c-Invalid
Если отправитель использует sendmany, yoh вряд ли будет первым выводом, поэтому, скорее всего, это приведет к другому суффиксу, чем -000. Транзакция genesis coinbase особенная и никогда не обрабатывается с точки зрения правила консенсуса. По этой причине он также не индексируется.
Перемещение не является транзакцией, и вы не можете запросить его с помощью gettransaction.