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

NameTypeDescription

_0

uint256

undefined

DEFAULT_ADMIN_ROLE

function DEFAULT_ADMIN_ROLE() external view returns (bytes32)

Returns

NameTypeDescription

_0

bytes32

undefined

INVESTOR_ROLE

function INVESTOR_ROLE() external view returns (bytes32)

Returns

NameTypeDescription

_0

bytes32

undefined

OWNER_ROLE

function OWNER_ROLE() external view returns (bytes32)

Returns

NameTypeDescription

_0

bytes32

undefined

PAUSER_ROLE

function PAUSER_ROLE() external view returns (bytes32)

Returns

NameTypeDescription

_0

bytes32

undefined

PERCENTAGE_DECIMAL

function PERCENTAGE_DECIMAL() external view returns (uint256)

Returns

NameTypeDescription

_0

uint256

undefined

POOL_MANAGER_ROLE

function POOL_MANAGER_ROLE() external view returns (bytes32)

Returns

NameTypeDescription

_0

bytes32

undefined

__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

NameTypeDescription

_owner

address

The address of who should have the "OWNER_ROLE" of this contract

_config

contract ProtocolConfig

The address of the OpenGuild ProtocolConfig contract

_poolToken

contract IERC20Upgradeable

The ERC20 token denominating investments, withdrawals and contributions

_poolType

enum ProtocolConfig.PoolType

The pool type of the BasePool

__BaseUpgradeablePausable__init

function __BaseUpgradeablePausable__init(address owner) external nonpayable

Parameters

NameTypeDescription

owner

address

undefined

__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

NameTypeDescription

investors

address[]

Addresses of the new investors

allowance

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

See {IERC20-allowance}.

Parameters

NameTypeDescription

owner

address

undefined

spender

address

undefined

Returns

NameTypeDescription

_0

uint256

undefined

applyFee

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

Parameters

NameTypeDescription

amount

uint256

Amount to subtract the fee from

takeRate

uint256

Rate to calculate the fee

Returns

NameTypeDescription

_0

uint256

Tuple of OpenGuild's take + remainder

_1

uint256

a tuple where the first value is the fee taken from the amount and the second is the remainder (amount without the fee)

approve

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

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

Parameters

NameTypeDescription

spender

address

undefined

amount

uint256

undefined

Returns

NameTypeDescription

_0

bool

undefined

balanceOf

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

See {IERC20-balanceOf}.

Parameters

NameTypeDescription

account

address

undefined

Returns

NameTypeDescription

_0

uint256

undefined

claim

function claim() external nonpayable

Claim all unclaimed dividends from currentIndividualPoolsOnly callable by an investor

currentIndividualPools

function currentIndividualPools(uint256) external view returns (address)

Parameters

NameTypeDescription

_0

uint256

undefined

Returns

NameTypeDescription

_0

address

undefined

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

NameTypeDescription

_0

uint8

undefined

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

NameTypeDescription

spender

address

undefined

subtractedValue

uint256

undefined

Returns

NameTypeDescription

_0

bool

undefined

getCumulativeDividends

function getCumulativeDividends() external view returns (uint256)

Gets the sum of all dividends returned to this aggregate pool

Returns

NameTypeDescription

_0

uint256

Sum of all dividends returned to this aggregate pool

getCurrentIndividualPools

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

Gets the list of current individual pools in this aggregate pool

Returns

NameTypeDescription

_0

address[]

a list of addresses of current individual pools

getFirstWithdrawalTime

function getFirstWithdrawalTime() external view returns (uint256)

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

Returns

NameTypeDescription

_0

uint256

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

getInvestorClaimedDividends

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

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

Parameters

NameTypeDescription

investor

address

the address of the investor to get the deployed amount

Returns

NameTypeDescription

_0

uint256

Claimed dividends aggregated across currentIndividualPools for a single investor

getInvestorDeployedAmount

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

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

Parameters

NameTypeDescription

investor

address

the address of the investor to get the deployed amount

Returns

NameTypeDescription

_0

uint256

Deployed amount aggregated across currentIndividualPools for a single investor

getInvestorUnclaimedDividends

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

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

Parameters

NameTypeDescription

investor

address

the address of the investor to get the deployed amount

Returns

NameTypeDescription

_0

uint256

Deployed amount aggregated across currentIndividualPools for a single investor

getInvestorUndeployedAmount

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

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

Parameters

NameTypeDescription

investor

address

the address of the investor to get the undeployed amount

Returns

NameTypeDescription

_0

uint256

Undeployed amount aggregated across currentIndividualPools for a single investor

getPoolManager

function getPoolManager() external view returns (address)

Gets the address of the pool manager

Returns

NameTypeDescription

_0

address

Address of the pool manager

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

NameTypeDescription

role

bytes32

undefined

Returns

NameTypeDescription

_0

bytes32

undefined

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

NameTypeDescription

role

bytes32

undefined

index

uint256

undefined

Returns

NameTypeDescription

_0

address

undefined

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

NameTypeDescription

role

bytes32

undefined

Returns

NameTypeDescription

_0

uint256

undefined

getTotalDeployedAmount

function getTotalDeployedAmount() external view returns (uint256)

Gets the sum of all investments deployed aggregated across currentIndividualPools

Returns

NameTypeDescription

_0

uint256

Sum of all investments deployed aggregated across currentIndividualPools

getTotalUndeployedAmount

function getTotalUndeployedAmount() external view returns (uint256)

Gets the total undeployed amount aggregated across currentIndividualPools

Returns

NameTypeDescription

_0

uint256

Total undeployed amount aggregated across currentIndividualPools

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

NameTypeDescription

role

bytes32

undefined

account

address

undefined

hasRole

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

Returns true if account has been granted role.

Parameters

NameTypeDescription

role

bytes32

undefined

account

address

undefined

Returns

NameTypeDescription

_0

bool

undefined

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

NameTypeDescription

spender

address

undefined

addedValue

uint256

undefined

Returns

NameTypeDescription

_0

bool

undefined

individualPoolAllocations

function individualPoolAllocations(address) external view returns (uint256)

Parameters

NameTypeDescription

_0

address

undefined

Returns

NameTypeDescription

_0

uint256

undefined

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

NameTypeDescription

_owner

address

The address that is assigned the "OWNER_ROLE" of this contract

_config

contract ProtocolConfig

The address of the OpenGuild ProtocolConfig contract

_poolToken

contract IERC20Upgradeable

The ERC20 token denominating investments, withdrawals and contributions

_currentIndividualPools

address[]

The individual pools associated with this aggregate pool

_currentPercentages

uint256[]

The percentage allocations associated with this aggregate pool

_poolInvestmentLimit

uint256

The cap of investments accepted by this pool

_investorInvestmentLimit

uint256

The maximum investment that an investor could make in the entire pool

invest

function invest(uint256 amount) external nonpayable

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

Parameters

NameTypeDescription

amount

uint256

Amount to be invested

investorInvestmentLimit

function investorInvestmentLimit() external view returns (uint256)

Returns

NameTypeDescription

_0

uint256

undefined

isAdmin

function isAdmin() external view returns (bool)

Returns

NameTypeDescription

_0

bool

undefined

name

function name() external view returns (string)

Returns the name of the token.

Returns

NameTypeDescription

_0

string

undefined

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

NameTypeDescription

_0

bool

undefined

poolInvestmentLimit

function poolInvestmentLimit() external view returns (uint256)

Returns

NameTypeDescription

_0

uint256

undefined

poolToken

function poolToken() external view returns (contract IERC20Upgradeable)

Returns

NameTypeDescription

_0

contract IERC20Upgradeable

undefined

poolType

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

Returns

NameTypeDescription

_0

enum ProtocolConfig.PoolType

undefined

removeInvestors

function removeInvestors(address[] investors) external nonpayable

Removes all addresses from the INVESTOR_ROLEOnly callable by the owner

Parameters

NameTypeDescription

investors

address[]

Addresses of the removed investors

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

NameTypeDescription

role

bytes32

undefined

account

address

undefined

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

NameTypeDescription

role

bytes32

undefined

account

address

undefined

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

NameTypeDescription

newLimit

uint256

New investor investment limit

setPoolAllocations

function setPoolAllocations(uint256[] newPercentages) external nonpayable

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

Parameters

NameTypeDescription

newPercentages

uint256[]

Corresponding allocation percentages to the individual pool addresses

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

NameTypeDescription

newLimit

uint256

New pool investment limit

setPoolManager

function setPoolManager(address newPoolManager) external nonpayable

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

Parameters

NameTypeDescription

newPoolManager

address

Address of the new pool manager

supportsInterface

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

See {IERC165-supportsInterface}.

Parameters

NameTypeDescription

interfaceId

bytes4

undefined

Returns

NameTypeDescription

_0

bool

undefined

symbol

function symbol() external view returns (string)

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

Returns

NameTypeDescription

_0

string

undefined

totalInvestedAmountForInvestor

function totalInvestedAmountForInvestor(address) external view returns (uint256)

Parameters

NameTypeDescription

_0

address

undefined

Returns

NameTypeDescription

_0

uint256

undefined

totalSupply

function totalSupply() external view returns (uint256)

See {IERC20-totalSupply}.

Returns

NameTypeDescription

_0

uint256

undefined

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

NameTypeDescription

recipient

address

undefined

amount

uint256

undefined

Returns

NameTypeDescription

_0

bool

undefined

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

NameTypeDescription

sender

address

undefined

recipient

address

undefined

amount

uint256

undefined

Returns

NameTypeDescription

_0

bool

undefined

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

NameTypeDescription

owner indexed

address

undefined

spender indexed

address

undefined

value

uint256

undefined

Claim

event Claim(address indexed from, uint256 amount)

Parameters

NameTypeDescription

from indexed

address

undefined

amount

uint256

undefined

Contribute

event Contribute(address indexed from, uint256 amount)

Parameters

NameTypeDescription

from indexed

address

undefined

amount

uint256

undefined

Invest

event Invest(address indexed from, uint256 amount)

Parameters

NameTypeDescription

from indexed

address

undefined

amount

uint256

undefined

Paused

event Paused(address account)

Parameters

NameTypeDescription

account

address

undefined

RemoveUndeployedCapital

event RemoveUndeployedCapital(address indexed remover)

Parameters

NameTypeDescription

remover indexed

address

undefined

RoleAdminChanged

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

Parameters

NameTypeDescription

role indexed

bytes32

undefined

previousAdminRole indexed

bytes32

undefined

newAdminRole indexed

bytes32

undefined

RoleGranted

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

Parameters

NameTypeDescription

role indexed

bytes32

undefined

account indexed

address

undefined

sender indexed

address

undefined

RoleRevoked

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

Parameters

NameTypeDescription

role indexed

bytes32

undefined

account indexed

address

undefined

sender indexed

address

undefined

SetPoolAllocations

event SetPoolAllocations(address indexed poolAddress)

Parameters

NameTypeDescription

poolAddress indexed

address

undefined

Transfer

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

Parameters

NameTypeDescription

from indexed

address

undefined

to indexed

address

undefined

value

uint256

undefined

Unpaused

event Unpaused(address account)

Parameters

NameTypeDescription

account

address

undefined

Withdraw

event Withdraw(address indexed from, uint256 amount)

Parameters

NameTypeDescription

from indexed

address

undefined

amount

uint256

undefined

Last updated