We use enum versioning for many of our data structures (e.g. VersionedTransaction or VersionedQueryRequest). This has to be true for structures which are going to become part of the blockchain (like VersionedTransaction). However, for structures which are not going to become part of the blockchain (like VersionedQueryRequest) this is just an artifact of the communication protocol used. It should be possible to determine the version of the communication protocol used between client and server in the initialization handshake and store it for the duration of the session.
There are three major concerns:
How long will the client session last
How many of these structures are there that would make it worth it to make this kind of a change
Are there other use cases for stateful communication
Upper bound based on scaling data of the queries, which are the longest things in a session (most transactions are fire and forget).
Investigate the code base. Limited number of enums expected, so no more than 2-3.
Investigate the use of hash-based versioning, to lock the client to the Executor version and potential to exchange a module containing the dynamically defined structures.
We use enum versioning for many of our data structures (e.g.
VersionedTransaction
orVersionedQueryRequest
). This has to be true for structures which are going to become part of the blockchain (likeVersionedTransaction
). However, for structures which are not going to become part of the blockchain (likeVersionedQueryRequest
) this is just an artifact of the communication protocol used. It should be possible to determine the version of the communication protocol used between client and server in the initialization handshake and store it for the duration of the session.There are three major concerns:
Could relate to #1788 or #2111