At each block there is a determined set of unspent transaction outputs. Each new transaction specifies the unspent outputs it's going to spend in the format
tx_id is 32 bytes.
If at any point in time an unspent output has
cb7f357d7034f93b89a227c2109182740f1798f5a006e9cd0930a380c06aca7e and no other unspent output has a
tx_id with prefix
cb7f35 a new transaction could reference only
cb7f35 and everything would still be exactly determined.
Prefix sizes could be adjustable.
If there were more than one unspent transactions with the same
tx_id at each point any mempool transaction trying to spend from an ambiguous prefix would become invalid and a new one with a bigger prefix would have to be issued.
This could save up to 5GB of disk space in an year according to my stupid naïve math.
This could be implemented either:
- In the raw Bitcoin protocol, so the canonical blocks would have only prefixes;
- As a way to "compact" stored blockchain data without using fancy compression algorithms and without losing the data structure.
So, considering the two potential usages above and not mentioning that this is not doable without a hard-fork (therefore impossible); that is is silly; that disk space is not the biggest bottleneck; and that it isn't worth doing due to practicality and low cost-benefit, why is this a bad idea?