There are currently multiple transaction hash collisions in consecutive blocks in EOS as noted below:
Using the Trace API, I have found in the case of the above 8 collisions, the transactions to be exactly the same in the consecutive blocks with the only difference being CPU and NET usage.
However, in the following two transaction hash collisions in consecutive blocks, the transactions are not exactly the same and have different set of
eosio.token transfers associated with them:
I'm sure I'll find more collisions as I progress through the chain. So I had a couple of queries:
- Are these transaction hash collisions a feature or a bug? I'm inclined to believe it's a rare feature related to some form of smart contract activity since they always happen in consecutive blocks. But I can't seem to find any documentation on this.
- If it's a bug, has it been fixed later in the chain and do you know at what height? Also do you know how many such collisions are there in the chain?
- If it's a feature, what exactly is causing this peculiar behavior and what is the suggested workaround to handle this since traditional understanding is that transaction hashes are unique and only occur once.
- In the case of
24301275which has different set of
eosio.tokentransfers in each transaction instance, which one is the valid transaction? Or are they both valid transactions with both set of
eosio.tokentransfers taking place onchain?
For reference, here's different Block Explorer views on transaction
- EOSPark: https://eospark.com/tx/0bd119c4fea6a1147b0eb6cfab1363c1c83b12eaab466fae35b74906d4cf69bc. Seems to have aggregated both transaction instance's actions under the same transaction in Block 24301275
- EOSFlare: https://eosflare.io/tx/0BD119C4FEA6A1147B0EB6CFAB1363C1C83B12EAAB466FAE35B74906D4CF69BC. Seems to have aggregated both transactions instance's actions under the same transaction in Block 24301275
- Bloks.io: https://bloks.io/transaction/0bd119c4fea6a1147b0eb6cfab1363c1c83b12eaab466fae35b74906d4cf69bc?tab=traces. Seems to have included only the actions from first instance of that transaction in Block 24301274