AggregatePool

An AggregatePool is a pool where investors can invest cryptocurrency into multiple IndividualPools and claim dividends from each. Whenever users invest into an aggregate pool, they are minted shares (ERC20 tokens).

1 share = 1 poolToken (ie 1 USDT). Therefore, do not use the aggregate pool's decimal() function in front-end views- use poolToken.decimal() instead.

Methods

ALLOCATION_MARGIN_OF_ERROR

function ALLOCATION_MARGIN_OF_ERROR() external view returns (uint256)

Returns

DEFAULT_ADMIN_ROLE

function DEFAULT_ADMIN_ROLE() external view returns (bytes32)

Returns

INVESTOR_ROLE

function INVESTOR_ROLE() external view returns (bytes32)

Returns

OWNER_ROLE

function OWNER_ROLE() external view returns (bytes32)

Returns

PAUSER_ROLE

function PAUSER_ROLE() external view returns (bytes32)

Returns

PERCENTAGE_DECIMAL

function PERCENTAGE_DECIMAL() external view returns (uint256)

Returns

POOL_MANAGER_ROLE

function POOL_MANAGER_ROLE() external view returns (bytes32)

Returns

__BasePool__init

function __BasePool__init(address _owner, contract ProtocolConfig _config, contract IERC20Upgradeable _poolToken, enum ProtocolConfig.PoolType _poolType) external nonpayable

Run only once, on initialization

Parameters

__BaseUpgradeablePausable__init

function __BaseUpgradeablePausable__init(address owner) external nonpayable

Parameters

__PauserPausable__init

function __PauserPausable__init() external nonpayable

addInvestors

function addInvestors(address[] investors) external nonpayable

Grants all addresses the INVESTOR_ROLEOnly callable by the owner

Parameters

allowance

function allowance(address owner, address spender) external view returns (uint256)

See {IERC20-allowance}.

Parameters

Returns

applyFee

function applyFee(uint256 amount, uint256 takeRate) external view returns (uint256, uint256)

Parameters

Returns

approve

function approve(address spender, uint256 amount) external nonpayable returns (bool)

See {IERC20-approve}. Requirements: - spender cannot be the zero address.

Parameters

Returns

balanceOf

function balanceOf(address account) external view returns (uint256)

See {IERC20-balanceOf}.

Parameters

Returns

claim

function claim() external nonpayable

Claim all unclaimed dividends from currentIndividualPoolsOnly callable by an investor

currentIndividualPools

function currentIndividualPools(uint256) external view returns (address)

Parameters

Returns

decimals

function decimals() external view returns (uint8)

Returns the number of decimals used to get its user representation. For example, if decimals equals 2, a balance of 505 tokens should be displayed to a user as 5.05 (505 / 10 ** 2). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for display purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.

Returns

decreaseAllowance

function decreaseAllowance(address spender, uint256 subtractedValue) external nonpayable returns (bool)

Atomically decreases the allowance granted to spender by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - spender cannot be the zero address. - spender must have allowance for the caller of at least subtractedValue.

Parameters

Returns

getCumulativeDividends

function getCumulativeDividends() external view returns (uint256)

Gets the sum of all dividends returned to this aggregate pool

Returns

getCurrentIndividualPools

function getCurrentIndividualPools() external view returns (address[])

Gets the list of current individual pools in this aggregate pool

Returns

getFirstWithdrawalTime

function getFirstWithdrawalTime() external view returns (uint256)

Gets the earliest withdrawal timestamp for the individual pools in the aggregate pool

Returns

getInvestorClaimedDividends

function getInvestorClaimedDividends(address investor) external view returns (uint256)

Gets the total claimed dividends aggregated across currentIndividualPools for a single investor

Parameters

Returns

getInvestorDeployedAmount

function getInvestorDeployedAmount(address investor) external view returns (uint256)

Gets the total deployed amount aggregated across currentIndividualPools for a single investor

Parameters

Returns

getInvestorUnclaimedDividends

function getInvestorUnclaimedDividends(address investor) external view returns (uint256)

Gets the total unclaimed dividends aggregated across currentIndividualPools for a single investor

Parameters

Returns

getInvestorUndeployedAmount

function getInvestorUndeployedAmount(address investor) external view returns (uint256)

Gets the total undeployed amount aggregated across currentIndividualPools for a single investor

Parameters

Returns

getPoolManager

function getPoolManager() external view returns (address)

Gets the address of the pool manager

Returns

getRoleAdmin

function getRoleAdmin(bytes32 role) external view returns (bytes32)

Returns the admin role that controls role. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.

Parameters

Returns

getRoleMember

function getRoleMember(bytes32 role, uint256 index) external view returns (address)

Returns one of the accounts that have role. index must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.

Parameters

Returns

getRoleMemberCount

function getRoleMemberCount(bytes32 role) external view returns (uint256)

Returns the number of accounts that have role. Can be used together with {getRoleMember} to enumerate all bearers of a role.

Parameters

Returns

getTotalDeployedAmount

function getTotalDeployedAmount() external view returns (uint256)

Gets the sum of all investments deployed aggregated across currentIndividualPools

Returns

getTotalUndeployedAmount

function getTotalUndeployedAmount() external view returns (uint256)

Gets the total undeployed amount aggregated across currentIndividualPools

Returns

grantRole

function grantRole(bytes32 role, address account) external nonpayable

Grants role to account. If account had not been already granted role, emits a {RoleGranted} event. Requirements: - the caller must have role's admin role.

Parameters

hasRole

function hasRole(bytes32 role, address account) external view returns (bool)

Returns true if account has been granted role.

Parameters

Returns

increaseAllowance

function increaseAllowance(address spender, uint256 addedValue) external nonpayable returns (bool)

Atomically increases the allowance granted to spender by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - spender cannot be the zero address.

Parameters

Returns

individualPoolAllocations

function individualPoolAllocations(address) external view returns (uint256)

Parameters

Returns

initialize

function initialize(address _owner, contract ProtocolConfig _config, contract IERC20Upgradeable _poolToken, address[] _currentIndividualPools, uint256[] _currentPercentages, uint256 _poolInvestmentLimit, uint256 _investorInvestmentLimit) external nonpayable

Run only once, on initialization

Parameters

invest

function invest(uint256 amount) external nonpayable

Invests capital into the aggregate pool and distributes investments accordingly to individualPoolAllocationsOnly callable by an investor

Parameters

investorInvestmentLimit

function investorInvestmentLimit() external view returns (uint256)

Returns

isAdmin

function isAdmin() external view returns (bool)

Returns

name

function name() external view returns (string)

Returns the name of the token.

Returns

pause

function pause() external nonpayable

Pauses all functions guarded by Pause See {Pausable-_pause}. Requirements: - the caller must have the PAUSER_ROLE.

paused

function paused() external view returns (bool)

Returns true if the contract is paused, and false otherwise.

Returns

poolInvestmentLimit

function poolInvestmentLimit() external view returns (uint256)

Returns

poolToken

function poolToken() external view returns (contract IERC20Upgradeable)

Returns

poolType

function poolType() external view returns (enum ProtocolConfig.PoolType)

Returns

removeInvestors

function removeInvestors(address[] investors) external nonpayable

Removes all addresses from the INVESTOR_ROLEOnly callable by the owner

Parameters

renounceRole

function renounceRole(bytes32 role, address account) external nonpayable

Revokes role from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked role, emits a {RoleRevoked} event. Requirements: - the caller must be account.

Parameters

revokeRole

function revokeRole(bytes32 role, address account) external nonpayable

Revokes role from account. If account had been granted role, emits a {RoleRevoked} event. Requirements: - the caller must have role's admin role.

Parameters

setInvestorInvestmentLimit

function setInvestorInvestmentLimit(uint256 newLimit) external nonpayable

Set a new investor investment limitOnly callable by the owner

There are no checks for the minimum newLimit because if the limit is set to an amount lower than an investor's totalInvestedAmountForInvestor, then investors won't be able to make any new investments which is the expected behavior.

Parameters

setPoolAllocations

function setPoolAllocations(uint256[] newPercentages) external nonpayable

Sets the percentage of investments that should go into each poolOnly callable by pool manager

Parameters

setPoolInvestmentLimit

function setPoolInvestmentLimit(uint256 newLimit) external nonpayable

Set a new pool investment limitOnly callable by the owner

There are no checks for the minimum newLimit because if the limit is set to an amount lower than the exisiting capital in the pool, then investors won't be able to make any new investments which is the expected behavior.

Parameters

setPoolManager

function setPoolManager(address newPoolManager) external nonpayable

Replace the current pool manager with a new pool managerOnly callable by the owner

Parameters

supportsInterface

function supportsInterface(bytes4 interfaceId) external view returns (bool)

See {IERC165-supportsInterface}.

Parameters

Returns

symbol

function symbol() external view returns (string)

Returns the symbol of the token, usually a shorter version of the name.

Returns

totalInvestedAmountForInvestor

function totalInvestedAmountForInvestor(address) external view returns (uint256)

Parameters

Returns

totalSupply

function totalSupply() external view returns (uint256)

See {IERC20-totalSupply}.

Returns

transfer

function transfer(address recipient, uint256 amount) external nonpayable returns (bool)

See {IERC20-transfer}. Requirements: - recipient cannot be the zero address. - the caller must have a balance of at least amount.

Parameters

Returns

transferFrom

function transferFrom(address sender, address recipient, uint256 amount) external nonpayable returns (bool)

See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - sender and recipient cannot be the zero address. - sender must have a balance of at least amount. - the caller must have allowance for sender's tokens of at least amount.

Parameters

Returns

unpause

function unpause() external nonpayable

Unpauses the contract See {Pausable-_unpause}. Requirements: - the caller must have the Pauser role

Events

Approval

event Approval(address indexed owner, address indexed spender, uint256 value)

Parameters

Claim

event Claim(address indexed from, uint256 amount)

Parameters

Contribute

event Contribute(address indexed from, uint256 amount)

Parameters

Invest

event Invest(address indexed from, uint256 amount)

Parameters

Paused

event Paused(address account)

Parameters

RemoveUndeployedCapital

event RemoveUndeployedCapital(address indexed remover)

Parameters

RoleAdminChanged

event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)

Parameters

RoleGranted

event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)

Parameters

RoleRevoked

event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)

Parameters

SetPoolAllocations

event SetPoolAllocations(address indexed poolAddress)

Parameters

Transfer

event Transfer(address indexed from, address indexed to, uint256 value)

Parameters

Unpaused

event Unpaused(address account)

Parameters

Withdraw

event Withdraw(address indexed from, uint256 amount)

Parameters

Last updated