На данный момент я реализую перезапись транзакции с помощью NOP в Ripple. Я хочу сохранить информацию о транзакции, которую я перезаписываю, внутри NOP. Глядя на PreviousTxnID
поле, оно кажется идеальным для этой цели. Однако, когда я пытаюсь использовать его, я получаю сообщение об ошибке:
{
"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"
}
}
}
Как правильно перезаписать PreviousTxnID
предыдущую транзакцию в Ripple? (скажем, отправленная нами транзакция так и не попала в реестр из-за использования LastLedgerSequence).
Поле PreviousTxnID
устарело, сломано и никогда не должно использоваться. Вместо этого используйте AccountTxnID
. Это работает следующим образом:
Вы должны использовать полностью канонические подписи, и вы должны установить полностью канонический флаг (0x80000000) для всех ваших транзакций. В противном случае идентификатор транзакции может (теоретически) быть изменен злонамеренно.
Вы должны включить отслеживание идентификатора транзакции в своей учетной записи. Вы делаете это, выполняя AccountSet
транзакцию с SetFlag
установленным значением 5. Это приводит к тому, что ваша учетная запись начинает отслеживать каждую выполняемую учетную запись.
Включите PreviousTxnID
в свои транзакции поле, содержащее идентификатор предыдущей транзакции. Это гарантирует, что транзакция применяется только в том случае, если у нее есть ожидаемая предшествующая транзакция.
Теперь замена транзакции на nop аннулирует все последующие транзакции, в которых есть PreviousTxnID
поле.
Если вы хотите отключить PreviousTxnID
отслеживание для своей учетной записи, выполните AccountSet
транзакцию с ClearFlag
установленным значением 5.
Вы можете найти допустимые параметры AccountSet в документации: https://ripple.com/wiki/Transaction_Format#AccountSet_.283.29 (PreviousTxnID не является одним из них).
PreviousTxnID — это поле, возвращаемое rippled, а не параметр, который вы устанавливаете сами.