packages/contracts-core/contracts/base/MessagingBase.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
// ══════════════════════════════ LIBRARY IMPORTS ══════════════════════════════
import {ChainContext} from "../libs/ChainContext.sol";
// ═════════════════════════════ INTERNAL IMPORTS ══════════════════════════════
import {MultiCallable} from "./MultiCallable.sol";
import {Versioned} from "./Version.sol";
// ═════════════════════════════ EXTERNAL IMPORTS ══════════════════════════════
import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
/**
* @notice Base contract for all messaging contracts.
* - Provides context on the local chain's domain.
* - Provides ownership functionality.
* - Will be providing pausing functionality when it is implemented.
*/
abstract contract MessagingBase is MultiCallable, Versioned, Ownable2StepUpgradeable {
// ════════════════════════════════════════════════ IMMUTABLES ═════════════════════════════════════════════════════
/// @notice Domain of the local chain, set once upon contract creation
uint32 public immutable localDomain;
// @notice Domain of the Synapse chain, set once upon contract creation
uint32 public immutable synapseDomain;
// ══════════════════════════════════════════════════ STORAGE ══════════════════════════════════════════════════════
/// @dev gap for upgrade safety
uint256[50] private __GAP; // solhint-disable-line var-name-mixedcase
constructor(string memory version_, uint32 synapseDomain_) Versioned(version_) {
localDomain = ChainContext.chainId();
synapseDomain = synapseDomain_;
}
// TODO: Implement pausing
/**
* @dev Should be impossible to renounce ownership;
* we override OpenZeppelin OwnableUpgradeable's
* implementation of renounceOwnership to make it a no-op
*/
function renounceOwnership() public override onlyOwner {} //solhint-disable-line no-empty-blocks
}