// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {CheckpointLeaf} from "../../contracts/mainnet-checkpoint/libraries/CheckpointLeaf.sol"; contract CheckpointLeafTest is Test { function testBuildMerkleRoot_twoLeaves() public pure { CheckpointLeaf.PaymentLeafV1 memory a = _leaf(keccak256("a")); CheckpointLeaf.PaymentLeafV1 memory b = _leaf(keccak256("b")); bytes32[] memory hashes = new bytes32[](2); hashes[0] = CheckpointLeaf.paymentLeafV1(138, a); hashes[1] = CheckpointLeaf.paymentLeafV1(138, b); bytes32 root = CheckpointLeaf.buildMerkleRoot(hashes); assertTrue(root != bytes32(0)); } function testVerifyMerkle_singleLeaf() public pure { CheckpointLeaf.PaymentLeafV1 memory a = _leaf(keccak256("solo")); bytes32 leaf = CheckpointLeaf.paymentLeafV1(138, a); bytes32[] memory proof = new bytes32[](0); assertTrue(CheckpointLeaf.verifyMerkle(leaf, leaf, proof)); } function _leaf(bytes32 txHash) private pure returns (CheckpointLeaf.PaymentLeafV1 memory) { return CheckpointLeaf.PaymentLeafV1({ txHash: txHash, from: address(1), to: address(2), value: 1, blockNumber: 1, blockTimestamp: 1, gasUsed: 21000, success: true }); } }