|
Post by izuno on Mar 3, 2023 17:16:32 GMT 10
When P downloads the blockchain from N , P receives the modified transactions with the NIZK proofs and the statements for each block containing modified transactions. P then executes the following steps. For each block B , and for each redacted transaction in B , P runs the verifier of the NIZK. If the NIZK proof is not valid then P marks B as invalid. If the NIZK proof is valid or if there is no redacted transaction then P computes a Merkle tree as follows. For each non redacted transaction P puts in the leaf of the Merkle tree the hash of the transaction; for each redacted transaction, P extracts the hash h from the statement of the NIZK proof and uses this hash as leaf of the Merkle tree. P computes the root of the Merkle tree and considers B a valid block only if the computed Merkle root is equal to the Merkle root contained in the header of B downloaded from N .
If all checks are successful, then P assumes that the downloaded blockchain is correct. Notice that the consistency of the chain is guaranteed also by the NIZK proofs. Such proofs ensure consistency when a redaction is done for a transaction belonging to a block B , still leaving the Merkle root in the header of B unchanged. The only inconsistency that holds is between the old hash and the hash of the new redacted transaction but this inconsistency is fixed by the NIZK proof.
|
|