I’ve been thinking about this in the context of supporting dynamic one-byte aliases, ie a protocol sequence something like:
- A -> B:
VERSION ...
- B -> A:
VERSION ...
- B -> A:
FEATURE bip324-shortid-negotiation
- B -> A:
VERACK
- A -> B:
FEATURE bip324-shortid-negotiation
- A -> B:
VERACK
- A -> B:
BIP324ALIAS 67=hax0r 121=elevenses
- B -> A:
BIP324ALIAS 3=gdaymate
At which point if B receives a message with shortid 67 or 121 form A they should treat it as if it were the message hax0r or elevenses, and if A received message with shortid 3 from B, they should treat it as gdaymate rather than blocktxn.
In that context, if A still wanted to send blocktxn to B, they would need to encode it as a 12 byte ascii message, and should be able to. (If we ever have enough messages to actually allocate all 127 shortids, that would matter; until then nodes should just not override messages)
I’ve got rough code for that at https://github.com/ajtowns/bitcoin/commits/202511-bip324-id/ but haven’t even started writing up text for it.
My rough thinking was that the table in 324 defines the default mapping for when you don’t support “bip324-shortid-negotiation” or don’t receive a “BIP324ALIAS” message, and that otherwise the mapping for send is whatever you choose, and the mapping for receive is whatever your peer chooses. And at that point, you don’t really need to specify a table, you can just negotiate it, whether the messages are new/old.