Криптовалюта: проверьте, является ли транзакция жизнеспособной выход мастерноды

Я разрабатываю инструмент для автоматизации мастернод, аналогичный https://gincoin.io .

Я пытаюсь выяснить, как расшифровать, является ли транзакция жизнеспособной для мастерноды.

Насколько я знаю, транзакция должна соответствовать следующим критериям, чтобы быть жизнеспособным кандидатом в мастерноды:

  • Сумма отправки должна быть точно такой, как требуется для мастерноды по спецификации монеты (например, ровно 1000,0 монет).
  • Ни одна из этих монет не должна быть потрачена
  • Транзакция должна быть проверена достаточным количеством пиров
  • Адрес отправки и возврата должен совпадать (должна быть транзакция для себя)

Из того, что я собрал, getrawtransactionвызов с txindexвключенным клиентом — единственный инструмент, который предоставляет точную информацию о транзакции, поскольку gettransactionон предназначен только для внутреннего использования кошелька.

Так например

Я сделал следующую транзакцию для себя по yPNYZoqKHMM49z1JzvCFAzrSTJpKmVmMioадресу получения:

введите описание изображения здесь

Когда я выполняю

$ dash-cli -testnet getrawtransaction dd4011a1892a49d9109c299cad6a902ea60aff5a76f49c7d43f1a28861d0a8d3 1

Возвращает следующую информацию о деталях транзакции:

{
  "hex": "01000000027d0511a068dc2b978f840d761c64760307c3eea44eecddbac3d458ed4848b8af000000006a47304402206d040ff0825fa11af1fa497f9e9ca52218b7576e61679ce73475a899d1d005420220572d6104cab20d1abc77eec0e8d50b78f20ad0aaa5d7720878664a38af90a0c00121030613391de767cf19d8dd1fd3275ce661f5ff1e341e0130d7ade004b4a37c0607feffffff7d0511a068dc2b978f840d761c64760307c3eea44eecddbac3d458ed4848b8af010000006a4730440220296f0c7f8a8a538613e10644454c2146cc978509963a5bfe2211c8126c19c03502207c3310582e08585a2e9329cd14687589da58c3ff730ad75a0bba06a846de0caf01210393b4249c1d422cda439e9629ecb80c23aa0586082c5473ae509c94b395d0d061feffffff028b9e7851000000001976a9146be245a75e9e2b49f3392d260a06249de2396d3388ac00e87648170000001976a914217e65d7d68fc632e1ae63b7536c900021fa927288acd93b0300",
  "txid": "dd4011a1892a49d9109c299cad6a902ea60aff5a76f49c7d43f1a28861d0a8d3",
  "size": 372,
  "version": 1,
  "locktime": 211929,
  "vin": [
    {
      "txid": "afb84848ed58d4c3baddec4ea4eec3070376641c760d848f972bdc68a011057d",
      "vout": 0,
      "scriptSig": {
        "asm": "304402206d040ff0825fa11af1fa497f9e9ca52218b7576e61679ce73475a899d1d005420220572d6104cab20d1abc77eec0e8d50b78f20ad0aaa5d7720878664a38af90a0c0[ALL] 030613391de767cf19d8dd1fd3275ce661f5ff1e341e0130d7ade004b4a37c0607",
        "hex": "47304402206d040ff0825fa11af1fa497f9e9ca52218b7576e61679ce73475a899d1d005420220572d6104cab20d1abc77eec0e8d50b78f20ad0aaa5d7720878664a38af90a0c00121030613391de767cf19d8dd1fd3275ce661f5ff1e341e0130d7ade004b4a37c0607"
      },
      "sequence": 4294967294
    }, 
    {
      "txid": "afb84848ed58d4c3baddec4ea4eec3070376641c760d848f972bdc68a011057d",
      "vout": 1,
      "scriptSig": {
        "asm": "30440220296f0c7f8a8a538613e10644454c2146cc978509963a5bfe2211c8126c19c03502207c3310582e08585a2e9329cd14687589da58c3ff730ad75a0bba06a846de0caf[ALL] 0393b4249c1d422cda439e9629ecb80c23aa0586082c5473ae509c94b395d0d061",
        "hex": "4730440220296f0c7f8a8a538613e10644454c2146cc978509963a5bfe2211c8126c19c03502207c3310582e08585a2e9329cd14687589da58c3ff730ad75a0bba06a846de0caf01210393b4249c1d422cda439e9629ecb80c23aa0586082c5473ae509c94b395d0d061"
      },
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 13.66859403,
      "valueSat": 1366859403,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 6be245a75e9e2b49f3392d260a06249de2396d33 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a9146be245a75e9e2b49f3392d260a06249de2396d3388ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "yW9tDPWry4F4Yoh2ejVpdvMtjawBpNq2jV"
        ]
      }
    }, 
    {
      "value": 1000.00000000,
      "valueSat": 100000000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 217e65d7d68fc632e1ae63b7536c900021fa9272 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914217e65d7d68fc632e1ae63b7536c900021fa927288ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "yPNYZoqKHMM49z1JzvCFAzrSTJpKmVmMio"
        ]
      }
    }
  ]
}

Эта voutчасть, в частности, подтверждает, что ровно 1000,0 монет отправлено по адресу, как запрошено yPNYZoqKHMM49z1JzvCFAzrSTJpKmVmMio:

    {
      "value": 1000.00000000,
      "valueSat": 100000000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 217e65d7d68fc632e1ae63b7536c900021fa9272 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914217e65d7d68fc632e1ae63b7536c900021fa927288ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "yPNYZoqKHMM49z1JzvCFAzrSTJpKmVmMio"
        ]
      }
    }

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

ПРИМЕЧАНИЕ. Это не связано с конкретной криптовалютой и должно работать на любом универсальном клиенте кошелька rpc с включенной мастернодой.

Ответы (1)

У каждого проекта могут быть разные конкретные требования к тому, что считается действительной транзакцией, но, как правило, неизрасходованная транзакция должна быть проверена по сравнению со всеми предыдущими транзакциями в блокчейне, чтобы убедиться, что на нее не ссылаются как на вход ( ) для другого tx vin. Биткойн хранит базу данных неизрасходованных выходов транзакций (UTXO), чтобы сделать эту проверку более эффективной.

Эта проверка выполняется в биткойнах до того, как транзакция войдет в мемпул узла (до майнинга), и если она не пройдена, транзакция будет отклонена.

Обновление : вы можете получить конкретный utxo с помощью txid, используя $ bitcoin-cli gettxout, вы просто не можете запросить по адресу, согласно комментарию @PieterWuille ниже.

Как проверить неизрасходованные транзакции?
Об этом часто спрашивают, и у меня нет хорошего ответа, потому что я знаю только о внутренней реализации ядра Биткойн. Он сохраняет вновь добытые транзакции в базе данных UTXO и удаляет израсходованные. Нет вызова RPC для их запроса, за исключением того, listunspentчто показывает только utxo, связанный с адресами в вашем кошельке.
Вы можете использовать gettxoutРПК. Если он возвращает что-то для заданных txid и vout, результат остается неизрасходованным.
@PieterWuille Большое спасибо, вы можете опубликовать это как ответ. У вас есть идеи, как проверить, была ли транзакция сделана для вас?
Спроси у кошелька. Посмотрите, появляется ли он в listtransactions, или getreceivedbyaddressвключает ли его адрес.
@PieterWuille, как я объяснил, я не работаю как владелец кошелька, мне нужно получить эту информацию из-за пределов кошелька.