It should be an optimization to keep track of the used subblocks and their known or inferred values to skip unnecessary communication rounds (asking for known parities)
Solution - make all computation on knowledge input.
Have a dictionary of block -> value
On block input, try every possible XOR combination with every existing known block and save the new knowledge (recursively, every "block save" should do this process again)
To retrieve just lookup the dictionary. Get the bit value or None if it does not exist
It should be an optimization to keep track of the used subblocks and their known or inferred values to skip unnecessary communication rounds (asking for known parities)