// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.7;
contract MerkleHashStorage {
struct MerkleHashData {
bytes32 hash;
uint256 block_timestamp;
}
address public contrat_owner;
mapping (bytes9 => MerkleHashData) public merkleHashDataArray;
/* events */
/* ------ */
event MerkleHashAdded(bytes9 indexed merkle_ref, bytes32 merkle_hash, uint256 block_timestamp);
/* end events */
/* ---------- */
constructor() {
contrat_owner = msg.sender;
}
/* external functions */
/* ------------------ */
function addMerkleHashData(bytes9 merkle_ref, bytes32 merkle_hash) external {
require(merkle_ref != 0, "merkle_ref must be > 0");
require(merkle_hash != 0, "merkle_hash must be > 0");
require(msg.sender == contrat_owner, "only contract owner can call addMerkleHashData");
/* check if merkle_hash has been already added for this merkle_ref */
require(merkleHashDataArray[merkle_ref].hash == 0, "merkle_hash has been already added for this merkle_ref");
/* add new merkleHashData into merkleHashDataArray */
merkleHashDataArray[merkle_ref] = MerkleHashData(merkle_hash, block.timestamp);
emit MerkleHashAdded(merkle_ref, merkle_hash, block.timestamp);
}
/* end external functions */
/* ---------------------- */
/* external view function */
/* ---------------------- */
function getMerkleHashData(bytes9 merkle_ref) external view returns (MerkleHashData memory) {
require(merkle_ref != 0, "merkle_ref must be > 0");
MerkleHashData memory merkleHashData = merkleHashDataArray[merkle_ref];
if (merkleHashData.hash == 0)
return MerkleHashData(0, 0);
return merkleHashData;
}
/* end external view function */
/* -------------------------- */
}
{
"compilationTarget": {
"MerkleHashStorage.sol": "MerkleHashStorage"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes9","name":"merkle_ref","type":"bytes9"},{"indexed":false,"internalType":"bytes32","name":"merkle_hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"block_timestamp","type":"uint256"}],"name":"MerkleHashAdded","type":"event"},{"inputs":[{"internalType":"bytes9","name":"merkle_ref","type":"bytes9"},{"internalType":"bytes32","name":"merkle_hash","type":"bytes32"}],"name":"addMerkleHashData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contrat_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes9","name":"merkle_ref","type":"bytes9"}],"name":"getMerkleHashData","outputs":[{"components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"block_timestamp","type":"uint256"}],"internalType":"struct MerkleHashStorage.MerkleHashData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes9","name":"","type":"bytes9"}],"name":"merkleHashDataArray","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"block_timestamp","type":"uint256"}],"stateMutability":"view","type":"function"}]