FactoryFeeManager.sol
FactoryFeeManager
Inherits: Ownable2Step, IFactoryFeeManager
Author: JA (@ubinatus)
State Variables
MAX_TRANSFER_FEE
CONSTANTS
Transfer fee is calculated using 18 decimals where 0.05 ether is 5%.
uint64 internal constant MAX_TRANSFER_FEE = 0.05 ether;
_feeData
STATE
Stores fee related information for collection purposes.
FeeData internal _feeData;
_upcomingCreationFee
Stores the info necessary for an upcoming change of the global creation fee.
UpcomingFeeData internal _upcomingCreationFee;
_upcomingTransferFee
Stores the info necessary for an upcoming change of the global transfer fee.
UpcomingFeeData internal _upcomingTransferFee;
_upcomingClaimFee
Stores the info necessary for an upcoming change of the global claim fee.
UpcomingFeeData internal _upcomingClaimFee;
_creationFeeByUnderlyingToken
Maps underlyingToken
s to a custom creation fee struct.
mapping(address => CustomFeeData) internal _creationFeeByUnderlyingToken;
_transferFeeByUnderlyingToken
Maps underlyingToken
s to a custom transfer fee struct.
mapping(address => CustomFeeData) internal _transferFeeByUnderlyingToken;
_claimFeeByUnderlyingToken
Maps underlyingToken
s to a custom claim fee struct.
mapping(address => CustomFeeData) internal _claimFeeByUnderlyingToken;
Functions
setFeeCollector
FUNCTIONS
*Set address of fee collector. Requirements:
msg.sender
has to be the owner of the contract.newFeeCollector
can’t be address 0x0.*
function setFeeCollector(address newFeeCollector) public override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
newFeeCollector | address | Address of feeCollector . |
scheduleGlobalCreationFee
Sets a new global creation fee value, to take effect after 1 hour.
function scheduleGlobalCreationFee(uint64 newFeeValue) public override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
newFeeValue | uint64 | Value for creationFee that will be charged on VestingToken ’s deployments. |
scheduleGlobalTransferFee
Sets a new global transfer fee percentage, to take effect after 1 hour.
*Percentages and fees are calculated using 18 decimals where 1 ether is 100%. Requirements:
newFeePercentage
must be within minTransferFee and maxTransferFee.*
function scheduleGlobalTransferFee(uint64 newFeePercentage) public override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
newFeePercentage | uint64 | Value for transferFeePercentage that will be charged on VestingToken ’s transfers. |
scheduleGlobalClaimFee
Sets a new global claim fee value, to take effect after 1 hour.
function scheduleGlobalClaimFee(uint64 newFeeValue) public override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
newFeeValue | uint64 | Value for claimFee that will be charged on VestingToken ’s claims. |
scheduleCustomCreationFee
Sets a new custom creation fee value for a specific underlying token, to be enabled and take effect after 1 hour from the time of this transaction.
*Allows the contract owner to modify the creation fee associated with a specific underlying token.
The new fee becomes effective after a delay of 1 hour, aiming to provide a buffer for users to be aware of the
upcoming fee change.
This function updates the fee and schedules its activation, ensuring transparency and predictability in fee
adjustments.
The fee is specified in wei, allowing for granular control over the fee structure. Emits a
CustomCreationFeeChange
event upon successful fee update.
Requirements:
- The caller must have owner privileges to execute this function.*
function scheduleCustomCreationFee(address underlyingToken, uint64 newFeeValue) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
newFeeValue | uint64 | The new creation fee amount to be set, in wei, to replace the current fee after the specified delay. |
scheduleCustomTransferFee
Sets a new custom transfer fee percentage for a specific underlying token, to be enabled and take effect after 1 hour from the time of this transaction.
*This function allows the contract owner to adjust the transfer fee for an underlying token.
The fee adjustment is delayed by 1 hour to provide transparency and predictability. Fees are calculated with
precision to 18 decimal places, where 1 ether equals 100% fee.
The function enforces fee limits; newFeePercentage
must be within the predefined 0-MAX_TRANSFER_FEE
bounds.
If the custom fee was previously disabled or set to a different value, this operation schedules the new fee to
take effect after the delay, enabling it if necessary.
Emits a CustomTransferFeeChange
event upon successful execution.
Requirements:
- Caller must be the contract owner.
newFeePercentage
must be within the range limited byMAX_TRANSFER_FEE
.*
function scheduleCustomTransferFee(address underlyingToken, uint64 newFeePercentage) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
newFeePercentage | uint64 | The new transfer fee percentage to be applied, expressed in ether terms (18 decimal places) where 1 ether represents 100%. |
scheduleCustomClaimFee
Sets a new custom claim fee value for a specific underlying token, to be enabled and take effect after 1 hour from the time of this transaction.
*Allows the contract owner to modify the claim fee associated with a specific underlying token.
The new fee becomes effective after a delay of 1 hour, aiming to provide a buffer for users to be aware of the
upcoming fee change.
This function updates the fee and schedules its activation, ensuring transparency and predictability in fee
adjustments.
The fee is specified in wei, allowing for granular control over the fee structure. Emits a
CustomClaimFeeChange
event upon successful fee update.
Requirements:
- The caller must have owner privileges to execute this function.*
function scheduleCustomClaimFee(address underlyingToken, uint64 newFeeValue) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
newFeeValue | uint64 | The new claim fee amount to be set, in wei, to replace the current fee after the specified delay. |
toggleCustomCreationFee
Enables or disables the custom creation fee for a given underlying token, with the change taking effect after 1 hour.
function toggleCustomCreationFee(address underlyingToken, bool enable) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
enable | bool | True to enable the fee, false to disable it. |
toggleCustomTransferFee
Enables or disables the custom transfer fee for a given underlying token, to take effect after 1 hour.
function toggleCustomTransferFee(address underlyingToken, bool enable) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
enable | bool | True to enable the fee, false to disable it. |
toggleCustomClaimFee
Enables or disables the custom claim fee for a given underlying token, with the change taking effect after 1 hour.
function toggleCustomClaimFee(address underlyingToken, bool enable) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
enable | bool | True to enable the fee, false to disable it. |
minTransferFee
Exposes the minimum transfer fee.
function minTransferFee() external pure override returns (uint64);
maxTransferFee
Exposes the maximum transfer fee.
function maxTransferFee() external pure override returns (uint64);
feeCollector
Exposes the FeeData.feeCollector
to users.
function feeCollector() external view override returns (address);
globalCreationFee
Retrieves the current global creation fee to users.
function globalCreationFee() external view override returns (uint64);
globalTransferFee
Retrieves the current global transfer fee percentage to users.
function globalTransferFee() external view override returns (uint64);
globalClaimFee
Retrieves the current global claim fee to users.
function globalClaimFee() external view override returns (uint64);
creationFeeData
Exposes the creation fee for new VestingToken
s deployments.
Enabled custom fees overrides the global creation fee.
function creationFeeData(address underlyingToken)
external
view
returns (address feeCollectorAddress, uint64 creationFeeValue);
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
transferFeeData
Returns the current transfer fee for a specific underlying token, considering any pending updates.
function transferFeeData(address underlyingToken)
external
view
returns (address feeCollectorAddress, uint64 transferFeePercentage);
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
claimFeeData
Returns the current claim fee for a specific underlying token, considering any pending updates.
function claimFeeData(address underlyingToken)
external
view
returns (address feeCollectorAddress, uint64 claimFeeValue);
Parameters
Name | Type | Description |
---|---|---|
underlyingToken | address | Address of the underlyingToken . |
_getCurrentFee
Calculates the current fee based on global, custom, and upcoming fee data.
This function considers the current timestamp and determines the appropriate fee based on whether a custom or upcoming fee should be applied.
function _getCurrentFee(
uint64 globalValue,
UpcomingFeeData memory upcomingGlobalFee,
CustomFeeData memory customFee
)
internal
view
returns (uint64 currentValue);
Parameters
Name | Type | Description |
---|---|---|
globalValue | uint64 | The default global fee value used when no custom fees are applicable. |
upcomingGlobalFee | UpcomingFeeData | A struct containing data about an upcoming fee change, including the timestamp for the change and the new value to be applied. |
customFee | CustomFeeData | A struct containing data about the custom fee, including its enablement status, timestamps for changes, and its values (current and new). |
Returns
Name | Type | Description |
---|---|---|
currentValue | uint64 | The calculated current fee value, taking into account the global value, custom fee, and upcoming fee data based on the current timestamp. |
_processCreationFee
Processes the creation fee for a transaction.
This function retrieves the creation fee data from the manager contract and, if the creation fee is greater
than zero, sends the msg.value
to the fee collector address. Reverts if the transferred value is less than the
required creation fee or if the transfer fails.
function _processCreationFee(address underlyingToken) internal;