账户
0x6b...4897
0x6B...4897

0x6B...4897

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.7+commit.e28d00a7
语言
Solidity
合同源代码
文件 1 的 1:MerkleHashStorage.sol
// 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": []
}
ABI
[{"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"}]