GovernanceStorage
Unified storage for OCF-based and traditional governance with upgrade safety
Consolidates all governance storage with proper gaps for future phases
State Variables
STORAGE_POSITION
bytes32 constant STORAGE_POSITION = keccak256("capsign.storage.governance.v1");
Functions
layout
function layout() internal pure returns (Layout storage l);
Structs
Proposal
struct Proposal {
uint256 id;
address proposer;
uint256 voteStart;
uint256 voteEnd;
uint256 eta;
bool executed;
bool canceled;
address[] targets;
uint256[] values;
bytes[] calldatas;
bytes32 descriptionHash;
uint256 forVotes;
uint256 againstVotes;
uint256 abstainVotes;
mapping(bytes32 => bool) lotVoted;
mapping(bytes32 => uint8) lotVoteChoice;
mapping(address => bool) addressVoted;
mapping(address => uint8) addressVoteChoice;
}
OCFStockClass
struct OCFStockClass {
string classId;
uint256 votesPerShare;
bool canVoteOnBoard;
bool canVoteOnMajorDecisions;
string[] vetoRights;
uint256 boardSeatsDesignated;
bool conversionVoting;
uint256 liquidationPreference;
uint256 antiDilutionMultiplier;
bool hasDragAlongRights;
bool hasTagAlongRights;
bool hasPreemptiveRights;
uint256 participationCap;
uint256[5] __stockClassGap;
}
OCFVotingRights
struct OCFVotingRights {
string[] eligibleClasses;
uint256 quorumThreshold;
uint256 approvalThreshold;
bool requiresUnanimous;
uint256[4] __votingRightsGap;
}
OCFProposalTypeConfig
struct OCFProposalTypeConfig {
string proposalType;
OCFVotingRights votingRights;
string[] vetoClasses;
uint256[3] __proposalTypeGap;
}
BoardMember
struct BoardMember {
uint256[] committeeIds;
bool active;
uint256 appointedAt;
address appointedBy;
uint256 totalVotingWeight;
string primaryRole;
uint256[4] __boardMemberGap;
}
ExecutiveApproval
struct ExecutiveApproval {
address executive;
address targetWallet;
bytes4 selector;
uint256 maxValue;
bool active;
uint256 validUntil;
uint256[2] __executiveGap;
}
AntiDilutionTerms
struct AntiDilutionTerms {
string protectionType;
uint256 conversionPrice;
uint256 adjustmentMultiplier;
uint256 lastUpdateRound;
uint256[4] __antiDilutionGap;
}
TransferRestrictions
struct TransferRestrictions {
bool hasRightOfFirstRefusal;
bool hasDragAlongRights;
bool hasTagAlongRights;
address transferAgent;
uint256 minimumHoldPeriod;
uint256[3] __transferGap;
}
LiquidationWaterfall
struct LiquidationWaterfall {
uint256[] preferences;
uint256[] participationCaps;
bool[] participationRights;
uint256[5] __liquidationGap;
}
Layout
struct Layout {
string name;
uint256 votingDelay;
uint256 votingPeriod;
uint256 proposalThreshold;
uint256 quorumNumerator;
uint256 quorumDenominator;
uint256 timelockDelay;
uint256 proposalCount;
mapping(uint256 => Proposal) proposals;
mapping(bytes32 => uint256) proposalIds;
mapping(string => OCFStockClass) ocfStockClasses;
string[] ocfStockClassIds;
mapping(address => mapping(string => uint256)) stakeholderShares;
mapping(address => string[]) stakeholderClasses;
mapping(string => OCFProposalTypeConfig) ocfProposalTypes;
string[] ocfProposalTypeIds;
mapping(uint256 => mapping(string => bool)) proposalVetoes;
mapping(address => BoardMember) boardMembers;
address[] activeBoardMembers;
uint256 boardVotingPeriod;
uint256 boardQuorum;
mapping(address => bool) authorizedWallets;
mapping(address => mapping(bytes4 => ExecutiveApproval)) executiveApprovals;
string companyName;
string ocfVersion;
uint256 lastUpdated;
address deployer;
uint256[50] __phase1Gap;
mapping(string => address) capTableProviders;
mapping(bytes32 => uint256) syncEventNonces;
mapping(address => bool) authorizedSyncers;
mapping(bytes32 => string) legalDocumentHashes;
mapping(string => bool) approvedLegalTerms;
uint256[45] __phase2Gap;
mapping(string => AntiDilutionTerms) antiDilutionTerms;
mapping(uint256 => uint256) roundValuations;
mapping(string => TransferRestrictions) transferRestrictions;
mapping(address => mapping(address => uint256)) transferApprovals;
LiquidationWaterfall liquidationWaterfall;
mapping(uint256 => uint256) liquidationEvents;
mapping(uint256 => mapping(address => uint256)) preemptiveAllocations;
mapping(uint256 => mapping(address => bool)) preemptiveExercised;
uint256[40] __phase3Gap;
mapping(address => string) externalIntegrations;
mapping(bytes32 => bytes) crossChainData;
mapping(address => bytes32) complianceHashes;
mapping(string => bool) regulatoryApprovals;
uint256[46] __phase4Gap;
uint256[100] __futureGap;
}
Last updated
Was this helpful?