Consider this scenario:
- X is at version 1 and sends a message to Y, that knows X at version 1. It attaches a chain (v0, v1) to the message.
- X advances to version 2 and sends another message to Y. It attaches a chain (v0, v1, v2).
- Y receives the second message first and updates its knowledge of X to v2.
- Y receives the first message and cannot validate it, as v2 doesn't match any of the attached keys (v0, v1).
A possible (though hacky) solution is to keep old_infos, that is - an LRU cache of other sections' outdated keys. This way it will be probable that in such a scenario Y will still have the v0 key for X in its old_infos when the first message arrives, which will enable it to validate it correctly. This is not a complete solution, however.
Consider this scenario:
A possible (though hacky) solution is to keep
old_infos, that is - an LRU cache of other sections' outdated keys. This way it will be probable that in such a scenario Y will still have the v0 key for X in itsold_infoswhen the first message arrives, which will enable it to validate it correctly. This is not a complete solution, however.