What was the mechanism of "double spending" that was corrected with bip30 and bip34 ?
I don't think it's appropriate to use the term "double-spend" here.
According to BIP30, blocks can't include a transaction with the same hash as a not-fully-spent transaction.
Before implementation of BIP30, blocks could include a transaction with the same ID as an exsiting transaction, even if not all outputs of that existing transaction had been spent. This bug made the coins generated by blocks 91722 and 91812 unspendable because in the UTXO set, they were replaced by the coins generated by blocks 91880 and 91842 respectively.
According to BIP34 (which was introduced some time after BIP30), the scriptsig of coinbase transactions must contain the block height. This prevents coinbase transactions from being identical to each other and therefore in practice it's no longer possible that two coinbase transactions have the same transaction ID.
Ah, OK, this is also how I understood it: these identical TXID render some "honest" UTXO unspendable, there's no way to turn this into a double spend vulnerability, as I thought.
I had read this here:
https://www.learnbitcoin.com/glossary/bip-30BIP 30, detailed in BIP-30, was introduced to address a rare exploit scenario where a user could create a new transaction with exactly the same inputs and outputs as a prior one, generating identical transaction IDs. This could confuse the network or certain wallet implementations, potentially enabling subtle double-spend attacks.
I wondered what could have been these double spend attacks...
Thanks for the clarification !