RegCFOfferingFacet
Implements Reg CF specific compliance including:
$5M maximum raise in 12 months
Per-investor investment limits based on income/net worth
Intermediary requirements
Specialized facet for Regulation Crowdfunding offerings
Uses ExemptionLimitFacet for shared exemption tracking functionality
State Variables
MAX_RAISE_LIMIT
uint256 public constant MAX_RAISE_LIMIT = 5_000_000e6;
HIGH_INCOME_THRESHOLD
uint256 public constant HIGH_INCOME_THRESHOLD = 125_000e6;
LOW_INCOME_LIMIT
uint256 public constant LOW_INCOME_LIMIT = 2_500e6;
HIGH_INCOME_LIMIT
uint256 public constant HIGH_INCOME_LIMIT = 12_500e6;
Functions
initializeRegCF
Initialize Regulation Crowdfunding specific settings
function initializeRegCF(uint256 maxRaise, address intermediary) external;
Parameters
maxRaise
uint256
Maximum amount to raise (must not exceed $5M)
intermediary
address
Address of the intermediary (portal or broker-dealer)
setInvestorLimit
Set investor-specific investment limit based on income/net worth
function setInvestorLimit(address investor, uint256 annualIncomeOrNetWorth) external;
Parameters
investor
address
The investor address
annualIncomeOrNetWorth
uint256
The investor's annual income or net worth
batchSetInvestorLimits
Batch set investor limits
function batchSetInvestorLimits(address[] calldata investors, uint256[] calldata incomeOrNetWorth) external;
Parameters
investors
address[]
Array of investor addresses
incomeOrNetWorth
uint256[]
Array of income/net worth values
validateRegCFInvestment
Validate investment for Regulation Crowdfunding compliance
function validateRegCFInvestment(address investor, uint256 amount) external view returns (bool valid);
Parameters
investor
address
The investor address
amount
uint256
The investment amount
Returns
valid
bool
Whether the investment is valid under Reg CF rules
enforceRegCFCompliance
Enforce Regulation Crowdfunding compliance and exemption limits
function enforceRegCFCompliance(address investor, uint256 amount) external view;
Parameters
investor
address
The investor address
amount
uint256
The investment amount
setIntermediary
Update the intermediary
function setIntermediary(address newIntermediary) external;
Parameters
newIntermediary
address
Address of the new intermediary
getIntermediary
Get the current intermediary
function getIntermediary() external view returns (address intermediary);
Returns
intermediary
address
Address of the current intermediary
getInvestorLimit
Get investor limit
function getInvestorLimit(address investor) external view returns (uint256 limit);
Parameters
investor
address
The investor address
Returns
limit
uint256
The investor's investment limit
setExemptionLimit
Set the exemption limit (must not exceed $5M)
function setExemptionLimit(uint256 newLimit) external;
Parameters
newLimit
uint256
The new exemption limit
getRegCFConfig
Get Regulation Crowdfunding configuration
function getRegCFConfig() external view returns (uint256 maxRaise, address intermediary);
Returns
maxRaise
uint256
The maximum raise amount
intermediary
address
Address of the intermediary
_requireEntity
Internal function to check if caller is the entity
function _requireEntity(OfferingStorage.Layout storage s) internal view;
Events
RegCFOfferingConfigured
event RegCFOfferingConfigured(uint256 maxRaise, address intermediary);
InvestorLimitSet
event InvestorLimitSet(address indexed investor, uint256 limit);
IntermediaryUpdated
event IntermediaryUpdated(address indexed oldIntermediary, address indexed newIntermediary);
Last updated
Was this helpful?