Extracted text: leaves v-Hash( s) s, secret Lab Task (1/3) * Implement the basic Merkle tree. (Use any programming language) * Test Cases • The reason we use Merkle trees to store block data (ie. transactions) is that verification is very efficient. This verification is called a Merkle proof. To T • Suppose we want to prove that transaction D, was indeed in the block, that formed the header shown in fig T. Ts T6 Do D, D D D, DS DE D7 Lab Task (2/3) * In addition to the transaction hash D;, we also need D, T(D. D,), and T;(T(D,.D;).T(D.D,)) to form the proof. The verification itself performs the following sieps on the proof: • Hash D, and D, to produce T,(D,. D). • Hash S(A,B) and S(C.D) to produce S(S(A,B).S(C.D) • Hash T,(T,(D,D,), T(D,, D,)) and T;T(D,D,), T,(D, D,)) to produce the T root, • Check that the root is the same as what has been stored previously. T4 TS T6 Do D, D D D. D, De D7 Lab Task (3/3) Implement the Merkle proof functionality and to verify it. Create a report to describe what you have done and your observations with sereenshots.