// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @title VideoPaymentStorage * @dev Storage layout for VideoPayment contract to ensure upgrade compatibility */ library VideoPaymentStorage { // Storage layout version for upgrade compatibility uint256 constant STORAGE_VERSION = 1; struct ContentConfig { mapping(address => uint256) tokenPrices; // ERC20 token prices uint256 nativePrice; // Native coin price uint256 viewCount; // View count when purchased bool isActive; // Whether content is purchasable } struct ViewPermission { uint256 purchaseTime; // Purchase timestamp uint256 remainingViews; // Remaining view count bool isValid; // Whether permission is valid } struct VideoPaymentStorageStruct { // Owner and admin management address owner; mapping(address => bool) isAdmin; // Content management mapping(uint256 => ContentConfig) contentConfigs; // User permissions mapping(address => mapping(uint256 => ViewPermission)) userPermissions; // Supported payment tokens mapping(address => bool) supportedTokens; // Token enumeration support address[] allSupportedTokens; mapping(address => bool) tokenExists; mapping(address => uint256) tokenIndexes; // for efficient removal // Emergency pause bool paused; // Contract version uint256 version; // Treasury management address payable treasury; // Reserved storage slots for future upgrades uint256[47] __gap; } }