Skip to content

Instantly share code, notes, and snippets.

@coffiasd
Created July 17, 2023 04:26
Show Gist options
  • Save coffiasd/96022abd7f9a8a2189bda14bf9e755dc to your computer and use it in GitHub Desktop.
Save coffiasd/96022abd7f9a8a2189bda14bf9e755dc to your computer and use it in GitHub Desktop.
pragma solidity ^0.8.13;
import "forge-std/Test.sol";
import {MerkleProof} from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
contract Merkle is Test {
bytes32 public root;
bytes32[] public leafs;
bytes32[] public l2;
function setUp() public {
address[] memory addrss = new address[](4);
addrss[0] = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;
addrss[1] = 0x2d886570A0dA04885bfD6eb48eD8b8ff01A0eb7e;
addrss[2] = 0xed857ac80A9cc7ca07a1C213e79683A1883df07B;
addrss[3] = 0x690B9A9E9aa1C9dB991C7721a92d351Db4FaC990;
//通过地址列表计算叶子节点的hash值
leafs.push(keccak256(abi.encodePacked(addrss[0])));
leafs.push(keccak256(abi.encodePacked(addrss[1])));
leafs.push(keccak256(abi.encodePacked(addrss[2])));
leafs.push(keccak256(abi.encodePacked(addrss[3])));
//计算第二层的hash值
l2.push(keccak256(abi.encodePacked(leafs[0], leafs[1])));
l2.push(keccak256(abi.encodePacked(leafs[2], leafs[3])));
//计算根的hash值
root = keccak256(abi.encodePacked(l2[1], l2[0]));
}
function testVerify() public {
address proofAddress = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;
bytes32[] memory proof = new bytes32[](2);
proof[0] = leafs[1];
proof[1] = l2[1];
assert(
MerkleProof.verify(
proof,
root,
keccak256(abi.encodePacked(proofAddress))
)
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment