23:43:05 Random shower thought (literally, I just got out of a bath). 23:43:05 Transactions referencing outputs by their index is optimally efficient (w.r.t. txn size and lookup time) under good conditions, but completely brittle in the presence or reorgs deeper than the minimum ring member age. 23:43:05 Referencing outputs by their stealth address would be optimally robust, but take up a lot of space, and require searching for every input. 23:43:05 But now I’m wondering about a hybrid system that barely impacts transaction size (< 2%), brings robustness against reorgs, and doesn’t involve extra searching under normal conditions. 23:43:05 Let W be some window/threshold, e.g. “20 blocks” or “5000 output indices” 23:43:05 Essentially, there are 3 changes 23:43:05 1) Transaction format: each ring member pointer includes the output index (from the existing system), and some error correcting tag “E” such as the last few bits of the stealth address 23:43:06 2) Block generation/verification: Transactions with the same E should not show up within W range of each other. 23:43:06 3) Transaction verification: If a ring member references a particular output index that does not match up on E, search within W range for one that matches, and use that. (During non-reorg conditions, which is the vast majority of the time, E would match and no searching would occur) 23:43:07 W should be determined by the deepest reorg we would expect. Currently the min decoy age is 10 blocks, so even if somebody is trying to double spend they probably wouldn’t go more than 15 or 20 blocks deep. (maybe?)