STO module for standard capped crowdsale (USDTieredSTO.sol)

View Source: contracts/modules/STO/USDTiered/USDTieredSTO.solโ€‹

โ†— Extends: USDTieredSTOStorage, STOโ€‹

USDTieredSTO

Contract Members

Constants & Variables

string internal constant POLY_ORACLE;
string internal constant ETH_ORACLE;

Events

event SetAllowBeneficialInvestments(bool _allowed);
event SetNonAccreditedLimit(address _investor, uint256 _limit);
event TokenPurchase(address indexed _purchaser, address indexed _beneficiary, uint256 _tokens, uint256 _usdAmount, uint256 _tierPrice, uint256 _tier);
event FundsReceived(address indexed _purchaser, address indexed _beneficiary, uint256 _usdAmount, enum ISTO.FundRaiseType _fundRaiseType, uint256 _receivedValue, uint256 _spentValue, uint256 _rate);
event ReserveTokenMint(address indexed _owner, address indexed _wallet, uint256 _tokens, uint256 _latestTier);
event SetAddresses(address indexed _wallet, IERC20[] _usdTokens);
event SetLimits(uint256 _nonAccreditedLimitUSD, uint256 _minimumInvestmentUSD);
event SetTimes(uint256 _startTime, uint256 _endTime);
event SetTiers(uint256[] _ratePerTier, uint256[] _ratePerTierDiscountPoly, uint256[] _tokensPerTierTotal, uint256[] _tokensPerTierDiscountPoly);
event SetTreasuryWallet(address _oldWallet, address _newWallet);

Modifiers

validETH

modifier validETH() internal

Arguments

Name

Type

Description

validPOLY

modifier validPOLY() internal

Arguments

Name

Type

Description

validSC

modifier validSC(address _usdToken) internal

Arguments

Name

Type

Description

_usdToken

address

โ€‹

Functions

function (address _securityToken, address _polyAddress) public nonpayable Module

Arguments

Name

Type

Description

_securityToken

address

โ€‹

_polyAddress

address

โ€‹

configure

Function used to intialize the contract variables

function configure(uint256 _startTime, uint256 _endTime, uint256[] _ratePerTier, uint256[] _ratePerTierDiscountPoly, uint256[] _tokensPerTierTotal, uint256[] _tokensPerTierDiscountPoly, uint256 _nonAccreditedLimitUSD, uint256 _minimumInvestmentUSD, enum ISTO.FundRaiseType[] _fundRaiseTypes, address payable _wallet, address _treasuryWallet, IERC20[] _usdTokens) public nonpayable onlyFactory

Arguments

Name

Type

Description

_startTime

uint256

Unix timestamp at which offering get started

_endTime

uint256

Unix timestamp at which offering get ended

_ratePerTier

uint256[]

Rate (in USD) per tier ( 10*18)

_ratePerTierDiscountPoly

uint256[]

โ€‹

_tokensPerTierTotal

uint256[]

Tokens available in each tier

_tokensPerTierDiscountPoly

uint256[]

โ€‹

_nonAccreditedLimitUSD

uint256

Limit in USD ( 10*18) for non-accredited investors

_minimumInvestmentUSD

uint256

Minimun investment in USD ( 10*18)

_fundRaiseTypes

enum ISTO.FundRaiseType[]

Types of currency used to collect the funds

_wallet

address payable

Ethereum account address to hold the funds

_treasuryWallet

address

Ethereum account address to receive unsold tokens

_usdTokens

IERC20[]

Contract address of the stable coins

modifyFunding

Modifies fund raise types

function modifyFunding(enum ISTO.FundRaiseType[] _fundRaiseTypes) external nonpayable withPerm

Arguments

Name

Type

Description

_fundRaiseTypes

enum ISTO.FundRaiseType[]

Array of fund raise types to allow

modifyLimits

modifies max non accredited invets limit and overall minimum investment limit

function modifyLimits(uint256 _nonAccreditedLimitUSD, uint256 _minimumInvestmentUSD) external nonpayable withPerm

Arguments

Name

Type

Description

_nonAccreditedLimitUSD

uint256

max non accredited invets limit

_minimumInvestmentUSD

uint256

overall minimum investment limit

modifyTiers

modifiers STO tiers. All tiers must be passed, can not edit specific tiers.

function modifyTiers(uint256[] _ratePerTier, uint256[] _ratePerTierDiscountPoly, uint256[] _tokensPerTierTotal, uint256[] _tokensPerTierDiscountPoly) external nonpayable withPerm

Arguments

Name

Type

Description

_ratePerTier

uint256[]

Array of rates per tier

_ratePerTierDiscountPoly

uint256[]

Array of discounted poly rates per tier

_tokensPerTierTotal

uint256[]

Array of total tokens per tier

_tokensPerTierDiscountPoly

uint256[]

Array of discounted tokens per tier

modifyTimes

Modifies STO start and end times

function modifyTimes(uint256 _startTime, uint256 _endTime) external nonpayable withPerm

Arguments

Name

Type

Description

_startTime

uint256

start time of sto

_endTime

uint256

end time of sto

_isSTOStarted

function _isSTOStarted() internal view

Arguments

Name

Type

Description

modifyAddresses

Modifies addresses used as wallet, reserve wallet and usd token

function modifyAddresses(address payable _wallet, address _treasuryWallet, IERC20[] _usdTokens) external nonpayable

Arguments

Name

Type

Description

_wallet

address payable

Address of wallet where funds are sent

_treasuryWallet

address

Address of wallet where unsold tokens are sent

_usdTokens

IERC20[]

Address of usd tokens

modifyOracle

Modifies Oracle address. By default, Polymath oracles are used but issuer can overide them using this function Set _oracleAddress to 0x0 to fallback to using Polymath oracles

function modifyOracle(enum ISTO.FundRaiseType _fundRaiseType, address _oracleAddress) external nonpayable

Arguments

Name

Type

Description

_fundRaiseType

enum ISTO.FundRaiseType

Actual currency

_oracleAddress

address

address of the oracle

_modifyLimits

function _modifyLimits(uint256 _nonAccreditedLimitUSD, uint256 _minimumInvestmentUSD) internal nonpayable

Arguments

Name

Type

Description

_nonAccreditedLimitUSD

uint256

โ€‹

_minimumInvestmentUSD

uint256

โ€‹

_modifyTiers

function _modifyTiers(uint256[] _ratePerTier, uint256[] _ratePerTierDiscountPoly, uint256[] _tokensPerTierTotal, uint256[] _tokensPerTierDiscountPoly) internal nonpayable

Arguments

Name

Type

Description

_ratePerTier

uint256[]

โ€‹

_ratePerTierDiscountPoly

uint256[]

โ€‹

_tokensPerTierTotal

uint256[]

โ€‹

_tokensPerTierDiscountPoly

uint256[]

โ€‹

_modifyTimes

function _modifyTimes(uint256 _startTime, uint256 _endTime) internal nonpayable

Arguments

Name

Type

Description

_startTime

uint256

โ€‹

_endTime

uint256

โ€‹

_modifyAddresses

function _modifyAddresses(address payable _wallet, address _treasuryWallet, IERC20[] _usdTokens) internal nonpayable

Arguments

Name

Type

Description

_wallet

address payable

โ€‹

_treasuryWallet

address

โ€‹

_usdTokens

IERC20[]

โ€‹

_modifyUSDTokens

function _modifyUSDTokens(IERC20[] _usdTokens) internal nonpayable

Arguments

Name

Type

Description

_usdTokens

IERC20[]

โ€‹

finalize

Finalizes the STO and mint remaining tokens to treasury address

function finalize() external nonpayable withPerm

Arguments

Name

Type

Description

changeNonAccreditedLimit

Modifies the list of overrides for non-accredited limits in USD

function changeNonAccreditedLimit(address[] _investors, uint256[] _nonAccreditedLimit) external nonpayable withPerm

Arguments

Name

Type

Description

_investors

address[]

Array of investor addresses to modify

_nonAccreditedLimit

uint256[]

Array of uints specifying non-accredited limits

getAccreditedData

Returns investor accredited & non-accredited override informatiomn

function getAccreditedData() external view
returns(investors address[], accredited bool[], overrides uint256[])

Returns

investors list of all configured investors

Arguments

Name

Type

Description

changeAllowBeneficialInvestments

Function to set allowBeneficialInvestments (allow beneficiary to be different to funder)

function changeAllowBeneficialInvestments(bool _allowBeneficialInvestments) external nonpayable withPerm

Arguments

Name

Type

Description

_allowBeneficialInvestments

bool

Boolean to allow or disallow beneficial investments

fallback function - assumes ETH being invested

function () external payable

Arguments

Name

Type

Description

buyWithETH

function buyWithETH(address _beneficiary) external payable
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

buyWithPOLY

function buyWithPOLY(address _beneficiary, uint256 _investedPOLY) external nonpayable
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_investedPOLY

uint256

โ€‹

buyWithUSD

function buyWithUSD(address _beneficiary, uint256 _investedSC, IERC20 _usdToken) external nonpayable
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_investedSC

uint256

โ€‹

_usdToken

IERC20

โ€‹

buyWithETHRateLimited

Purchase tokens using ETH

function buyWithETHRateLimited(address _beneficiary, uint256 _minTokens) public payable validETH
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

Address where security tokens will be sent

_minTokens

uint256

Minumum number of tokens to buy or else revert

buyWithPOLYRateLimited

Purchase tokens using POLY

function buyWithPOLYRateLimited(address _beneficiary, uint256 _investedPOLY, uint256 _minTokens) public nonpayable validPOLY
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

Address where security tokens will be sent

_investedPOLY

uint256

Amount of POLY invested

_minTokens

uint256

Minumum number of tokens to buy or else revert

buyWithUSDRateLimited

Purchase tokens using Stable coins

function buyWithUSDRateLimited(address _beneficiary, uint256 _investedSC, uint256 _minTokens, IERC20 _usdToken) public nonpayable validSC
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

Address where security tokens will be sent

_investedSC

uint256

Amount of Stable coins invested

_minTokens

uint256

Minumum number of tokens to buy or else revert

_usdToken

IERC20

Address of USD stable coin to buy tokens with

_buyWithTokens

function _buyWithTokens(address _beneficiary, uint256 _tokenAmount, enum ISTO.FundRaiseType _fundRaiseType, uint256 _minTokens, IERC20 _token) internal nonpayable
returns(uint256, uint256, uint256)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_tokenAmount

uint256

โ€‹

_fundRaiseType

enum ISTO.FundRaiseType

โ€‹

_minTokens

uint256

โ€‹

_token

IERC20

โ€‹

_getSpentvalues

function _getSpentvalues(address _beneficiary, uint256 _amount, enum ISTO.FundRaiseType _fundRaiseType, uint256 _minTokens) internal nonpayable
returns(rate uint256, spentUSD uint256, spentValue uint256, initialMinted uint256)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_amount

uint256

โ€‹

_fundRaiseType

enum ISTO.FundRaiseType

โ€‹

_minTokens

uint256

โ€‹

_buyTokens

Low level token purchase

function _buyTokens(address _beneficiary, uint256 _investmentValue, uint256 _rate, enum ISTO.FundRaiseType _fundRaiseType) internal nonpayable whenNotPaused
returns(spentUSD uint256, spentValue uint256)

Arguments

Name

Type

Description

_beneficiary

address

Address where security tokens will be sent

_investmentValue

uint256

Amount of POLY, ETH or Stable coins invested

_rate

uint256

โ€‹

_fundRaiseType

enum ISTO.FundRaiseType

Fund raise type (POLY, ETH, SC)

_buyTokensChecks

function _buyTokensChecks(address _beneficiary, uint256 _investmentValue, uint256 investedUSD) internal view
returns(netInvestedUSD uint256)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_investmentValue

uint256

โ€‹

investedUSD

uint256

โ€‹

_calculateTier

function _calculateTier(address _beneficiary, uint256 _tier, uint256 _investedUSD, enum ISTO.FundRaiseType _fundRaiseType) internal nonpayable
returns(spentUSD uint256, gotoNextTier bool)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_tier

uint256

โ€‹

_investedUSD

uint256

โ€‹

_fundRaiseType

enum ISTO.FundRaiseType

โ€‹

_purchaseTier

function _purchaseTier(address _beneficiary, uint256 _tierPrice, uint256 _tierRemaining, uint256 _investedUSD, uint256 _tier) internal nonpayable
returns(spentUSD uint256, purchasedTokens uint256, gotoNextTier bool)

Arguments

Name

Type

Description

_beneficiary

address

โ€‹

_tierPrice

uint256

โ€‹

_tierRemaining

uint256

โ€‹

_investedUSD

uint256

โ€‹

_tier

uint256

โ€‹

_isAccredited

function _isAccredited(address _investor) internal view
returns(bool)

Arguments

Name

Type

Description

_investor

address

โ€‹

_getIsAccredited

function _getIsAccredited(address _investor, IDataStore dataStore) internal view
returns(bool)

Arguments

Name

Type

Description

_investor

address

โ€‹

dataStore

IDataStore

โ€‹

isOpen

This function returns whether or not the STO is in fundraising mode (open)

function isOpen() public view
returns(bool)

Returns

bool Whether the STO is accepting investments

Arguments

Name

Type

Description

capReached

Checks whether the cap has been reached.

function capReached() public view
returns(bool)

Returns

bool Whether the cap was reached

Arguments

Name

Type

Description

getRate

returns current conversion rate of funds

function getRate(enum ISTO.FundRaiseType _fundRaiseType) public nonpayable
returns(uint256)

Arguments

Name

Type

Description

_fundRaiseType

enum ISTO.FundRaiseType

Fund raise type to get rate of

convertToUSD

This function converts from ETH or POLY to USD

function convertToUSD(enum ISTO.FundRaiseType _fundRaiseType, uint256 _amount) public nonpayable
returns(uint256)

Returns

uint256 Value in USD

Arguments

Name

Type

Description

_fundRaiseType

enum ISTO.FundRaiseType

Currency key

_amount

uint256

Value to convert to USD

convertFromUSD

This function converts from USD to ETH or POLY

function convertFromUSD(enum ISTO.FundRaiseType _fundRaiseType, uint256 _amount) public nonpayable
returns(uint256)

Returns

uint256 Value in ETH or POLY

Arguments

Name

Type

Description

_fundRaiseType

enum ISTO.FundRaiseType

Currency key

_amount

uint256

Value to convert from USD

getTokensSold

โคพ overrides STO.getTokensSoldโ€‹

Return the total no. of tokens sold

function getTokensSold() public view
returns(uint256)

Returns

uint256 Total number of tokens sold

Arguments

Name

Type

Description

getTokensMinted

Return the total no. of tokens minted

function getTokensMinted() public view
returns(tokensMinted uint256)

Returns

uint256 Total number of tokens minted

Arguments

Name

Type

Description

getTokensSoldFor

Return the total no. of tokens sold for the given fund raise type param _fundRaiseType The fund raising currency (e.g. ETH, POLY, SC) to calculate sold tokens for

function getTokensSoldFor(enum ISTO.FundRaiseType _fundRaiseType) external view
returns(tokensSold uint256)

Returns

uint256 Total number of tokens sold for ETH

Arguments

Name

Type

Description

_fundRaiseType

enum ISTO.FundRaiseType

โ€‹

getTokensMintedByTier

Return array of minted tokens in each fund raise type for given tier param _tier The tier to return minted tokens for

function getTokensMintedByTier(uint256 _tier) external view
returns(uint256[])

Returns

uint256[] array of minted tokens in each fund raise type

Arguments

Name

Type

Description

_tier

uint256

โ€‹

getTokensSoldByTier

Return the total no. of tokens sold in a given tier param _tier The tier to calculate sold tokens for

function getTokensSoldByTier(uint256 _tier) external view
returns(uint256)

Returns

uint256 Total number of tokens sold in the tier

Arguments

Name

Type

Description

_tier

uint256

โ€‹

getNumberOfTiers

Return the total no. of tiers

function getNumberOfTiers() external view
returns(uint256)

Returns

uint256 Total number of tiers

Arguments

Name

Type

Description

getUsdTokens

Return the usd tokens accepted by the STO

function getUsdTokens() external view
returns(contract IERC20[])

Returns

address[] usd tokens

Arguments

Name

Type

Description

getPermissions

โคพ overrides IModule.getPermissionsโ€‹

Return the permissions flag that are associated with STO

function getPermissions() public view
returns(allPermissions bytes32[])

Arguments

Name

Type

Description

getSTODetails

Return the STO details

function getSTODetails() external view
returns(uint256, uint256, uint256, uint256[], uint256[], uint256, uint256, uint256, bool[])

Returns

Unixtimestamp at which offering gets start.

Arguments

Name

Type

Description

getInitFunction

โคพ overrides IModule.getInitFunctionโ€‹

This function returns the signature of configure function

function getInitFunction() public pure
returns(bytes4)

Returns

bytes4 Configure function signature

Arguments

Name

Type

Description

_getOracle

function _getOracle(bytes32 _currency, bytes32 _denominatedCurrency) internal view
returns(oracleAddress address)

Arguments

Name

Type

Description

_currency

bytes32

โ€‹

_denominatedCurrency

bytes32

โ€‹