¿Cómo usar correctamente PreviousTxnID en una transacción Ripple?

En este momento estoy implementando una sobrescritura de transacciones con NOP en Ripple. Quiero almacenar información sobre una transacción que estoy sobrescribiendo dentro del NOP. Mirando el PreviousTxnIDcampo, parece ser ideal para este propósito. Sin embargo, cuando intento usarlo me sale un error de:

{
  "id": 11,
  "status": "success",
  "type": "response",
  "result": {
    "engine_result": "tefWRONG_PRIOR",
    "engine_result_code": -184,
    "engine_result_message": "This previous transaction does not match.",
    "tx_blob": "1200032200000000240000F69555DA10915AA58303872299078F4CD9AD81D4771219C38764BE84B3AB3D6763977268400000000000000F7321025D9E40A50D78347EB8AFF7A36222BBE173CB9D06E68D109D189FF8616FC211077446304402204710D875B7DFC0F9A9F2101F67E0043AE255258BF9F6F21BCF7D42BC19B3A41E0220554CAB999EF43FD3EF720C6869D63F2E324AD774662B51AE4599F50B60E9B4DA8114448BD3912AA0E86A18B17784E7177B262FC38D73",
    "tx_json": {
      "Account": "rfESTMcbvbvCBqU1FTvGWiJP8cmUSu4GKg",
      "Fee": "15",
      "Flags": 0,
      "PreviousTxnID": "DA10915AA58303872299078F4CD9AD81D4771219C38764BE84B3AB3D67639772",
      "Sequence": 63125,
      "SigningPubKey": "025D9E40A50D78347EB8AFF7A36222BBE173CB9D06E68D109D189FF8616FC21107",
      "TransactionType": "AccountSet",
      "TxnSignature": "304402204710D875B7DFC0F9A9F2101F67E0043AE255258BF9F6F21BCF7D42BC19B3A41E0220554CAB999EF43FD3EF720C6869D63F2E324AD774662B51AE4599F50B60E9B4DA",
      "hash": "B1932085BA94FEBE7A360D71359752A1666C48CCBBD97DFF16FFFA8626EDA253"
    }
  }
}

¿Cuál es la forma correcta de PreviousTxnIDsobrescribir una transacción anterior en Ripple? (digamos, una transacción que enviamos que nunca entró en un libro mayor debido al uso de LastLedgerSequence).

Respuestas (2)

El PreviousTxnIDcampo está obsoleto, roto y nunca debe usarse. En su lugar, utilice AccountTxnID. Funciona de la siguiente manera:

  1. Debe usar firmas completamente canónicas y debe configurar el indicador completamente canónico (0x80000000) en todas sus transacciones. De lo contrario, la identificación de la transacción podría (en teoría) modificarse maliciosamente.

  2. Debe habilitar el seguimiento de ID de transacción en su cuenta. Para ello, realice una AccountSettransacción con SetFlagel valor 5. Esto hace que su cuenta comience a rastrear cada cuenta que ejecuta.

  3. Incluya un PreviousTxnIDcampo en sus transacciones que contenga el ID de la transacción anterior. Esto garantizará que una transacción solo se aplique si tiene la transacción predecesora esperada.

Ahora, reemplazar una transacción con un nop invalidará cualquier transacción sucesora que tenga un PreviousTxnIDcampo.

Si desea deshabilitar PreviousTxnIDel seguimiento de su cuenta, realice una AccountSettransacción con ClearFlagel valor 5.

Puede encontrar las opciones válidas de AccountSet en la documentación: https://ripple.com/wiki/Transaction_Format#AccountSet_.283.29 (PreviousTxnID no es una de ellas).

PreviousTxnID parece ser un campo devuelto por rippled, no un parámetro que usted mismo establezca.