0

At the moment I am implementing a transaction overwriting with NOPs in Ripple. I want to store information about a transaction I am overwriting inside of the NOP. Looking at the PreviousTxnID field it appears to be ideal for this purpose. However, when I try to use it I get an error of:

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

What is the correct way to use PreviousTxnID to overwrite a prior transaction in Ripple? (say, a transaction we submitted that never got into a ledger due to the use of LastLedgerSequence).

2 Answers 2

3

The PreviousTxnID field is deprecated, broken, and should never be used. Instead, use AccountTxnID. It works as follows:

  1. You must use fully-canonical signatures and you should set the fully canonical flag (0x80000000) on all your transactions. Otherwise, the transaction ID could (in theory) be maliciously modified.

  2. You must enable transaction ID tracking on your account. You do this by performing an AccountSet transaction with SetFlag set to 5. This causes your account to begin tracking each account that it executes.

  3. Include a PreviousTxnID field in your transactions that contains the ID of the previous transaction. This will ensure that a transaction only applies if it has the expected predecessor transaction.

Now, replacing a transaction with a nop will invalidate any successor transactions that have a PreviousTxnID field.

If you wish to disable PreviousTxnID tracking for your account, perform an AccountSet transaction with ClearFlag set to 5.

0

You can find the valid AccountSet options in the documentation: https://ripple.com/wiki/Transaction_Format#AccountSet_.283.29 (PreviousTxnID is not one of them.)

PreviousTxnID appears to be a field that is returned by rippled, not a parameter you set yourself.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.