The following 2 extrinsics :
were included in the blockchain, that shows that a transaction with exact same input parameters including the signature was executed twice. Why did this happened ?
Substrate and Polkadot Stack Exchange is a question and answer site for developers building blockchains with the Substrate SDK. It only takes a minute to sign up.Sign up to join this community
This is the typical case of replaying an immortal transaction since both mentioned extrinsics have an immortal lifetime.
Here are the steps that allowed this to happen :
The first extrinsic 10995944-2 was executed and it resulted in :
If an account drops below the ED, it will be reaped, i.e. completely removed from storage and the nonce reset.
What happened in the meantime (before we see the second extrinsic executed hence the same transaction executed again) is extrinsic 10996030-3 during which :
Hence the second extrinsic 10996284-2 could be validly submitted to the blockchain again.
This is an expected behavior since the nonce set in the extrinsic is again valid respect to the state of the blockchain. However this can be mitigated by submitting mortal transactions as it is recommended in the wiki-transaction mortality :
NOTE: If an account is reaped and a user re-funds the account, then they could replay an immortal transaction. Always default to using a mortal extrinsic.
Credits to the team that reported the case & Joe & Iker that provided extensive explanations to the team.