Dividend-Module
Dividend Checkpoint Module
Introduced in
1.3.0
Contract name
DividendCheckpointModule
Compatible ST Protocol version range
^3.0.0
Type
Checkpoint Module
How it works
Dividend Checkpoint Module:
This module allows the issuer to define checkpoints at which token balances and the total supply of a token can be consistently queried. The dividends checkpoint is for dividend payment mechanisms and on-chain governance, both of which need to be able to determine token balances consistently as of a specified point in time.
DISCLAIMER:
Under certain conditions, the function pushDividendPayment
May fail due to block gas limits. If the total number of investors that ever held tokens is greater than ~15,000. If this happens investors can pull their dividends, or the Issuer can use
pushDividendPaymentToAddresses()
to provide an explicit address list in batches.
Key functionalities (as defined in the Smart Contract)
Get Default Excluded
This function simply returns a list of the default excluded addresses.
Create Checkpoint
This function allows the issuer to create a checkpoint for their respective security token and returns a checkpoint ID.
Set Default Excluded
This function allows for the issuer to clear their dividends list and to set a new list of excluded addresses used for future dividend issuances.
SetWithholding
This function allows the issuer to set withholding tax rates for their investors.
There are a few requirements for the function:
Investors list length must equal the withholding list length (so we don’t have mismatched input lengths)
withholding tax must be less than or equal to 10**18 or else it will be marked as incorrect withholding tax.
Set withholding fixed
This function allows the issuer to set the withholding tax rates for investors.
Requirement:
Withholding must be less than (or equal to) than 10**18 or else the function will return “Incorrect withholding tax”
Push Dividend To Addresses
This function allows the issuer to push dividends to the provided list of addresses.
Push Dividend Payment
This function allows the issuer to push dividends to the provided list of addresses.
Pull Dividend Payment
This function allows investors to pull their own issued dividends. Note: If the dividend contract is paused then it will not allow investors to pull their dividends
Pay Dividend
This internal function allows for the payment of dividends.
Reclaim Dividend
This function allows the issuer to reclaim the remaining unclaimed dividend amounts that have expired for investors.
Calculate Dividend
This function is used to calculate the number of dividends that are claimable.
Requirements:
Dividend Index must be less than the length of the dividend
Dividend storage size must be equal to the dividends index
Get Dividend Index
This function returns the index according to the inputted checkpoint ID.
Withdraw Withholding
This function allows the issuer to withdraw withheld tax from the dividend index.
Update dividend dates
This function allows the issuer to change the maturity/expiry dates of a given dividendIndex.
Change the treasury wallet address
The function used to change the treasury wallet address. It can only be called by the issuer.
Getters
getDividendsData()
get all static dividend data.getDividendData(uint256 _dividendIndex)
get static dividend data of a given dividendIndex.getDividendProgress(uint256 _dividendIndex)
Retrieves list of investors, their claim status and whether they are excluded.getCheckpointData(uint256 _checkpointId)
Retrieves list of investors, their balances, and their current withholding tax percentage.isExcluded(address _investor, uint256 _dividendIndex)
Checks whether an address is excluded from claiming a dividend.isClaimed(address _investor, uint256 _dividendIndex)
Checks whether an address has claimed a dividend.getTreasuryWallet()
returns the treasury wallet address.
Ether Dividend Checkpoint Module
Introduced in
1.3.0
Contract(s) name
EtherDividendCheckpoint.sol
Compatible ST Protocol version range
^3.0.0
Type
Checkpoint Module
How it works
This checkpoint module for issuing ether dividends to investors.
Key functionalities (as defined in the Smart Contract)
Create a Dividend
This function allows the issuer to create a dividend and a corresponding checkpoint for that dividend. It requires a global list of excluded addresses.
Create Dividend With Checkpoint
This function allows the issuer to create a dividend with a provided checkpoint. This function also requires a global list of excluded addresses.
Create Dividend With Exclusions
This function is used to create a dividend and checkpoint for the dividend and also allows the issuer to define a specific list of explicitly excluded addresses.
Create Dividend With Checkpoint And Exclusions
This function is used to create a dividend with a provided checkpoint and also allows the issuer to define a specific list of explicitly excluded addresses.
Function Requirements:
Excluded address list needs to be less than or equal to the excluded address list limit
Dividend expiry must be greater than the maturity ("Expiry is before maturity")
Dividend expiry date must be greater than the present moment ("Expiry can’t be in the past")
Dividend sent must be greater than 0. ("No dividend sent")
The checkpointId must be less than or equal to the
ISecurityToken(securityToken).currentCheckpointId()
Name cannot be 0
The zero address cannot be included in the excluded addresses list ("Invalid address")
Cannot dupe the system with excluded-address:
!dividends[dividendIndex].dividendExcluded[_excluded[j]]
Reclaim Dividend
This function allows the issuer to have the ability to reclaim remaining unclaimed dividend amounts, for expired investor dividends.
Function Requirements:
_dividendIndex
must be less than the dividends.length ("Incorrect dividend index")The current time period must be great than or equal to the dividends[_dividendIndex].expiry time ("Dividend expiry is in the future")
Withdraw withholding
This function allows the issuer to withdraw the withheld tax. This collected tax will directly be transferred to the treasury wallet.
Requirements:
The dividendIndex must be less than the dividends.length ("Incorrect dividend index")
The Dividend storage dividend must equal the dividends[_dividendIndex]
ERC20 Dividend Checkpoint Module
Introduced in
1.3.0
Contract(s) name
ERC20DividendCheckpoint.sol
Compatible ST Protocol version range
^3.0.0
Type
Checkpoint Module
How it works
Checkpoint module for issuing ERC20 dividends. The function works by having a mapping to token addresses for each dividend.
Key functionalities (as defined in the Smart Contract)
CreateDividend
This function allows the issuer to create a dividend and a corresponding checkpoint for that dividend. It requires a global list of excluded addresses.
Create dividend checkpoint
This function allows the issuer to create a dividend with a provided checkpoint. This function also requires a global list of excluded addresses.
Create dividend with exclusions
This function is used to create a dividend and checkpoint for the dividend and also allows the issuer to define a specific list of explicitly excluded addresses.
Create dividend checkpoint and exclusions
This function allows the issuer to create a dividend with a provided checkpoint ID.
Important Function Requirements:
Excluded address list needs to be less than or equal to the excluded address list limit
Dividend expiry must be greater than the maturity ("Expiry is before maturity")
Dividend expiry date must be greater than the present moment ("Expiry can’t be in the past")
Dividend sent must be greater than 0. ("No dividend sent")
The token cannot be the zero address(0) ("Invalid token")
checkpointId must be less than or equal to the
securityTokenInstance.currentCheckpointId()("Invalid checkpoint")
IERC20(_token).transferFrom(msg.sender, address(this), _amount)
needs to have enough allowance to make a transfer ("insufficient allowance")The name cannot be 0.
Cannot dupe the system with excluded-address:
!dividends[dividendIndex].dividendExcluded[_excluded[j]], "duped exclude address");
Reclaim dividend
This function is used by the issuer in order to reclaim remaining unclaimed dividend amounts, specifically for expired dividends.
withdraw withholding
This function allows an issuer to withdraw the withheld tax.
Last updated
Was this helpful?