Bootstrapping EnactState¶
To form an EnactState
, some governance action IDs need to be provided. However, at
the time of the initial hard fork into Conway there are no such previous
actions. There are effectively two ways to solve this issue:
-
populate those fields with IDs chosen in some manner (e.g. random, all zeros, etc.), or
-
add a special value to the types to indicate this situation.
In the Haskell implementation the latter solution was chosen. This means
that everything that deals with GovActionID
needs to be aware of
this special case and handle it properly.
This specification could have mirrored this choice, but it is not
necessary here: since it is already necessary to assume the absence of
hash-collisions (specifically first pre-image resistance) for various
properties, we could pick arbitrary initial values to mirror this
situation. Then, since GovActionID
contains a hash, that arbitrary
initial value behaves just like a special case.