I'm unsure about the issue with the JSON format. Firstly, it improves readability, and secondly, it's utilized by a reliable package (go-eth2-client) that the entire SSV spec relies on.
Apart from that, I believe the question might contain a typo. Alon's question states:
"why is the full block taken from a JSON and the versioned one generated here?"
I assume he meant "blinded" instead of "versioned." @alonmuroch, please correct me if I'm mistaken.
Addressing the question:
Why not? We employ the same logic to construct the blinded block from the full block. The only difference is that the Bellatrix full block was manually built, whereas Capella's block is derived from the JSON.
By the way, the SSZTransactions were created for a specific purpose:
to build the blinded block
verify that the hash root of the full data block matches the blinded one. You can refer to the related test for more information.
That's why we've maintained the same design and introduced SSZWithdrawals for Capella, to ensure that the hash root of the full data Capella block matches the blinded one. With that being said, we can deprecate SSZWithdrawals and use the blinded Capella block in JSON format from go-eth2-client, while still retaining the test to verify that their hash roots are identical.
Apart from that, I believe the question might contain a typo. Alon's question states:
I assume he meant "blinded" instead of "versioned." @alonmuroch, please correct me if I'm mistaken.
Addressing the question:
By the way, the SSZTransactions were created for a specific purpose:
That's why we've maintained the same design and introduced SSZWithdrawals for Capella, to ensure that the hash root of the full data Capella block matches the blinded one. With that being said, we can deprecate SSZWithdrawals and use the blinded Capella block in JSON format from go-eth2-client, while still retaining the test to verify that their hash roots are identical.
_Originally posted by @olegshmuelov in https://github.com/bloxapp/ssv-spec/pull/234#discussion_r1195452213_