I would avoid adding an FSM to every block, especially if you intend to have hundreds of blocks in your scene.
An extremely simple solution would be to embed the required variable data into the name of the block object itself. This way you can embed multiple values into the name of the block and simply read the name of the block on collision.
Example: BLOCK_TYPE_HEALTH
BLOCK: this string or int value denotes what kind of object it is
TYPE: this would typically be an int value if you have multiple block types
HEALTH: an int value representing the health of the block
The actual name of the object can look like this: BLOCK_1_80
To process these values you just need one FSM in your scene that handles collisions. On collision you would use the "Get Name" action, then use the "String Split" action and set the separator to an underscore to separate each of the 3 values into an array.
So if want to destroy a block with about 4 hits, you would want to read the health value and subtract the power of each hit from the health. Let's say the power of your hit is 20, then 80 - 20 = 60 and so on until the health value is 0 or less.
Remember each time you execute this function you can easily write the values back to the name of the object.
The great thing about this technique is the status of each of your blocks in the scene is easily readable by simply looking at the names of the blocks in your hierarchy.
I've been using this technique for years and it has served me well, I hope it helps!
Cheers,
Simon