all files / contracts/core/internal/ DAOState.sol

100% Statements 0/0
100% Branches 0/0
100% Functions 0/0
100% Lines 0/0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77                                                                                                                                                         
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "../interfaces/IDAOBase.sol";
 
/**
 * @dev Internal library for DAO state management
 * This contract contains all storage variables and state management functions
 */
library DAOState {
    struct State {
        // Core state variables
        string name;
        address factory;
        mapping(IDAOBase.UpgradeableContract => address) upgradeableContracts;
        
        // Proposal storage
        mapping(uint256 => Proposal) proposals;
        mapping(uint256 => TransferData) transferData;
        mapping(uint256 => UpgradeData) upgradeData;
        mapping(uint256 => PresaleData) presaleData;
        mapping(uint256 => PresalePauseData) presalePauseData;
        mapping(uint256 => PresaleWithdrawData) presaleWithdrawData;
        mapping(uint256 => address) presaleContracts;
        
        // Note: Pause and Unpause proposals don't need additional data
        // They just use the basic Proposal struct with ProposalType.Pause or ProposalType.Unpause
        uint256 proposalCount;
        uint256 votingPeriod;
        uint256 minProposalStake;
        uint256 quorum;
        
        // Control flags
        bool executingProposal;
        bool paused;
    }
 
    struct PresalePauseData {
        address presaleContract;
        bool pause;
    }
 
    struct PresaleWithdrawData {
        address presaleContract;
    }
 
    struct Proposal {
        IDAOBase.ProposalType proposalType;
        uint256 forVotes;
        uint256 againstVotes;
        uint256 endTime;
        bool executed;
        mapping(address => bool) hasVoted;
    }
 
    struct TransferData {
        address token;
        address recipient;
        uint256 amount;
    }
 
    struct UpgradeData {
        IDAOBase.UpgradeableContract contractToUpgrade;
        address newImplementation;
        string newVersion;
    }
 
    struct PresaleData {
        address token;
        uint256 amount;
        uint256 initialPrice;
    }
}