Criptomoneda: verifique si la transacción es una salida de masternode viable

Estoy desarrollando una herramienta para la automatización de masternodes similar a https://gincoin.io .

Estoy tratando de averiguar cómo decodificar si la transacción es viable para un masternode.

Por lo que sé, la transacción debe cumplir con los siguientes criterios para ser un candidato viable a masternode:

  • La cantidad de envío debe ser exactamente la requerida para una especificación de masternode por moneda (por ejemplo, exactamente 1000.0 monedas)
  • Ninguna de esas monedas debe gastarse.
  • La transacción debe ser verificada por suficientes pares
  • La dirección de envío y devolución deben coincidir (debe ser una transacción para usted)

Por lo que he deducido, getrawtransactionla llamada con txindexel cliente habilitado es la única herramienta que brinda información precisa sobre la transacción, ya que gettransactiones solo para uso interno de la billetera.

Así por ejemplo

Hice la siguiente transacción para mí mismo en la yPNYZoqKHMM49z1JzvCFAzrSTJpKmVmMiodirección de recepción:

ingrese la descripción de la imagen aquí

cuando ejecuto

$ dash-cli -testnet getrawtransaction dd4011a1892a49d9109c299cad6a902ea60aff5a76f49c7d43f1a28861d0a8d3 1

Devuelve la siguiente información sobre los detalles de la transacción:

{
  "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"
        ]
      }
    }
  ]
}

Esta voutparte en particular confirma que se envían exactamente 1000,0 monedas a la dirección solicitada 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"
        ]
      }
    }

Pero, ¿cómo verifico si esa es una transacción usted mismo y si no se gastó ninguna de esas 1000 monedas?

NOTA Esto no está relacionado con una criptomoneda específica, y debería funcionar en cualquier cliente de billetera rpc genérico que esté habilitado para masternode.

Respuestas (1)

Cada proyecto puede tener diferentes requisitos específicos para lo que se considera una transacción válida, pero generalmente una transacción no gastada debe verificarse con todas las transacciones anteriores en la cadena de bloques para asegurarse de que no haya sido referenciada como una entrada ( ) a otro tx vin. Bitcoin almacena una base de datos de salidas de transacciones no gastadas (UTXO), para hacer esta verificación de manera más eficiente.

Esta verificación se realiza en Bitcoin antes de que la transacción ingrese al mempool de un nodo (antes de ser minado), y si falla, la transacción será rechazada.

Actualización : puede obtener un utxo específico por txid usando $ bitcoin-cli gettxout, simplemente no puede consultar por dirección, según el comentario de @PieterWuille a continuación.

¿Cómo verifico las transacciones no gastadas?
Esto se pregunta mucho, y realmente no tengo una buena respuesta porque solo estoy al tanto de la implementación interna del núcleo de Bitcoin. Almacena transacciones recién extraídas en la base de datos de UTXO y elimina las que se gastan. No hay llamada RPC para consultarlos excepto que listunspentsolo muestra el utxo relacionado con las direcciones en su billetera.
Puede utilizar el gettxoutRPC. Si devuelve algo para un txid y vout determinados, la salida no se gasta.
@PieterWuille Muchas gracias, podrías publicar eso como respuesta. ¿Tiene alguna idea de cómo verificar si la transacción se realiza a usted mismo?
Pregúntale a la billetera. Mira si aparece en listtransactions, o si getreceivedbyaddressincluye su dirección.
@PieterWuille, como expliqué, no estoy operando como propietario de la billetera, necesito obtener esta información desde fuera de la billetera