Instead of piecemeal-ing the blockData object together, clone the event message and remove what's not needed
Rename variables for clarity
MerkleLink doesn't need to be its own sub-object

Rename the variables used to more closely match their purpose, and move all the verification logic inside the Block object itself.