Files
smom-dbis-138/contracts/mainnet-checkpoint/storage/CheckpointStorage.sol

74 lines
2.2 KiB
Solidity
Raw Normal View History

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {CheckpointLeaf} from "../libraries/CheckpointLeaf.sol";
/**
* @title CheckpointStorage
* @notice EIP-7201 namespaced storage for upgradeable checkpoint hub.
*/
library CheckpointStorage {
/// @custom:storage-location erc7201:dbis.storage.Chain138MainnetCheckpoint
struct CheckpointStorageStruct {
uint64 latestBatchId;
uint256 latestCheckpointBlock;
bytes32 latestPaymentsRoot;
uint64 chainId;
uint16 batchSize;
uint32 maxBatchWaitSeconds;
uint256 minPaymentValueWei;
bool requireValidatorSigs;
bool allowCalldataOnlySubmit;
bool allowCCIPIngress;
bool enforcePreviousBatchId;
bool paused;
uint64 expectedSourceChainSelector;
address batchEmitterOnSource;
address ccipRouter;
address legacyMirrorV1;
address legacyTetherV1;
address submitterAttestationSigner;
mapping(uint64 => CheckpointHeader) checkpoints;
mapping(bytes32 => bool) processedProofHashes;
mapping(bytes32 => uint64) txHashToBatchId;
mapping(uint64 => bool) processedBatchIds;
mapping(bytes32 => ExtensionConfig) extensions;
bytes32[] extensionList;
uint256[37] __gap;
}
struct CheckpointHeader {
uint64 batchId;
uint64 previousBatchId;
uint64 chainId;
uint256 checkpointBlock;
uint256 startBlock;
uint256 endBlock;
bytes32 blockHash;
bytes32 stateRoot;
bytes32 paymentsRoot;
bytes32 receiptsRoot;
uint16 txCount;
uint32 flags;
uint64 submittedAt;
address submitter;
bytes32 contentURI;
}
struct ExtensionConfig {
address module;
uint32 hooks;
bool active;
}
// keccak256(abi.encode(uint256(keccak256("dbis.storage.Chain138MainnetCheckpoint")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant CHECKPOINT_STORAGE_LOCATION =
0x94db105fe8bb9354ca3efbce04a4b0527821f7a844cf050ca0ad49fe0d3aad00;
function get() internal pure returns (CheckpointStorageStruct storage $) {
assembly {
$.slot := CHECKPOINT_STORAGE_LOCATION
}
}
}