Security Token contract (SecurityToken.sol)
Last updated
Was this helpful?
Last updated
Was this helpful?
View Source:
↗ Extends: , , , , , , , ↘ Derived Contracts: ,
SecurityToken
SecurityToken is an ERC1400 token with added capabilities:
Events
Arguments
Name
Type
Description
_value
uint256
Arguments
Name
Type
Description
Initialization function
Arguments
Name
Type
Description
_getterDelegate
address
Checks if an address is a module of certain type
Arguments
Name
Type
Description
_module
address
Address to check
_type
uint8
type to check against
Arguments
Name
Type
Description
_type
uint8
Arguments
Name
Type
Description
_partition
bytes32
Arguments
Name
Type
Description
_from
address
_operator
address
_partition
bytes32
Arguments
Name
Type
Description
_entity
address
Arguments
Name
Type
Description
_isTransfer
bool
Arguments
Name
Type
Description
_isRedeem
bool
Arguments
Name
Type
Description
_signed
bool
Arguments
Name
Type
Description
Arguments
Name
Type
Description
Arguments
Name
Type
Description
_authorised
bool
Throws if called by any account other than the owner.
Arguments
Name
Type
Description
Require msg.sender to be the specified module type
Arguments
Name
Type
Description
_type
uint8
Attachs a module to the SecurityToken
Arguments
Name
Type
Description
_moduleFactory
address
is the address of the module factory to be added
_data
bytes
is data packed into bytes used to further configure the module (See STO usage)
_maxCost
uint256
max amount of POLY willing to pay to the module.
_budget
uint256
max amount of ongoing POLY willing to assign to the module.
_label
bytes32
custom module label.
_archived
bool
Arguments
Name
Type
Description
_moduleTypes
uint8[]
_moduleFactory
address
_module
address
_moduleCost
uint256
_budget
uint256
_label
bytes32
_archived
bool
addModule function will call addModuleWithLabel() with an empty label for backward compatible
Arguments
Name
Type
Description
_moduleFactory
address
_data
bytes
_maxCost
uint256
_budget
uint256
_archived
bool
Archives a module attached to the SecurityToken
Arguments
Name
Type
Description
_module
address
address of module to archive
Upgrades a module attached to the SecurityToken
Arguments
Name
Type
Description
_module
address
address of module to archive
Upgrades security token
Arguments
Name
Type
Description
Unarchives a module attached to the SecurityToken
Arguments
Name
Type
Description
_module
address
address of module to unarchive
Removes a module attached to the SecurityToken
Arguments
Name
Type
Description
_module
address
address of module to unarchive
Allows the owner to withdraw unspent POLY stored by them on the ST or any ERC20 token.
Arguments
Name
Type
Description
_tokenContract
address
Address of the ERC20Basic compliance token
_value
uint256
amount of POLY to withdraw
allows owner to increase/decrease POLY approval of one of the modules
Arguments
Name
Type
Description
_module
address
module address
_change
uint256
change in allowance
_increase
bool
true if budget has to be increased, false if decrease
updates the tokenDetails associated with the token
Arguments
Name
Type
Description
_newTokenDetails
string
New token details
Allows owner to change token granularity
Arguments
Name
Type
Description
_granularity
uint256
granularity level of the token
Allows owner to change data store
Arguments
Name
Type
Description
_dataStore
address
Address of the token data store
Allows owner to change token name
Arguments
Name
Type
Description
_name
string
new name of the token
Allows to change the treasury wallet address
Arguments
Name
Type
Description
_wallet
address
Ethereum address of the treasury wallet
Keeps track of the number of non-zero token holders
Arguments
Name
Type
Description
_from
address
sender of transfer
_to
address
receiver of transfer
_value
uint256
value of transfer
freezes transfers
Arguments
Name
Type
Description
Unfreeze transfers
Arguments
Name
Type
Description
Internal - adjusts token holder balance at checkpoint before a token transfer
Arguments
Name
Type
Description
_investor
address
address of the token holder affected
Overloaded version of the transfer function
Returns
bool success
Arguments
Name
Type
Description
_to
address
receiver of transfer
_value
uint256
value of transfer
Transfer restrictions can take many forms and typically involve on-chain rules or whitelists. However for many types of approved transfers, maintaining an on-chain list of approved transfers can be cumbersome and expensive. An alternative is the co-signing approach, where in addition to the token holder approving a token transfer, and authorised entity provides signed data which further validates the transfer.
Arguments
Name
Type
Description
_to
address
address The address which you want to transfer to
_value
uint256
uint256 the amount of tokens to be transferred
_data
bytes
The bytes _data
allows arbitrary data to be submitted alongside the transfer.
for the token contract to interpret or record. This could be signed data authorising the transfer (e.g. a dynamic whitelist) but is flexible enough to accomadate other use-cases. |
Arguments
Name
Type
Description
_from
address
_to
address
_value
uint256
_data
bytes
Overloaded version of the transferFrom function
Returns
bool success
Arguments
Name
Type
Description
_from
address
sender of transfer
_to
address
receiver of transfer
_value
uint256
value of transfer
Transfer restrictions can take many forms and typically involve on-chain rules or whitelists. However for many types of approved transfers, maintaining an on-chain list of approved transfers can be cumbersome and expensive. An alternative is the co-signing approach, where in addition to the token holder approving a token transfer, and authorised entity provides signed data which further validates the transfer.
Arguments
Name
Type
Description
_from
address
address The address which you want to send tokens from
_to
address
address The address which you want to transfer to
_value
uint256
uint256 the amount of tokens to be transferred
_data
bytes
The bytes _data
allows arbitrary data to be submitted alongside the transfer.
for the token contract to interpret or record. This could be signed data authorising the transfer (e.g. a dynamic whitelist) but is flexible enough to accomadate other use-cases. |
Get the balance according to the provided partitions
Returns
Amount of tokens as per the given partitions
Arguments
Name
Type
Description
_partition
bytes32
Partition which differentiate the tokens.
_tokenHolder
address
Whom balance need to queried
Arguments
Name
Type
Description
_partition
bytes32
_tokenHolder
address
_additionalBalance
uint256
Transfers the ownership of tokens from a specified partition from one address to another address
Returns
The partition to which the transferred tokens were allocated for the _to address
Arguments
Name
Type
Description
_partition
bytes32
The partition from which to transfer tokens
_to
address
The address to which to transfer tokens to
_value
uint256
The amount of tokens to transfer from _partition
_data
bytes
Additional data attached to the transfer of tokens
Arguments
Name
Type
Description
_from
address
_to
address
_value
uint256
_partition
bytes32
_data
bytes
_operator
address
_operatorData
bytes
Arguments
Name
Type
Description
_beforeBalance
uint256
_afterBalance
uint256
_value
uint256
Authorises an operator for all partitions of msg.sender
. NB - Allowing investors to authorize an investor to be an operator of all partitions but it doesn't mean we operator is allowed to transfer the LOCKED partition values. Logic for this restriction is written in operatorTransferByPartition()
function.
Arguments
Name
Type
Description
_operator
address
An address which is being authorised.
Revokes authorisation of an operator previously given for all partitions of msg.sender
. NB - Allowing investors to authorize an investor to be an operator of all partitions but it doesn't mean we operator is allowed to transfer the LOCKED partition values. Logic for this restriction is written in operatorTransferByPartition()
function.
Arguments
Name
Type
Description
_operator
address
An address which is being de-authorised
Authorises an operator for a given partition of msg.sender
Arguments
Name
Type
Description
_partition
bytes32
The partition to which the operator is authorised
_operator
address
An address which is being authorised
Revokes authorisation of an operator previously given for a specified partition of msg.sender
Arguments
Name
Type
Description
_partition
bytes32
The partition to which the operator is de-authorised
_operator
address
An address which is being de-authorised
Transfers the ownership of tokens from a specified partition from one address to another address
Returns
The partition to which the transferred tokens were allocated for the _to address
Arguments
Name
Type
Description
_partition
bytes32
The partition from which to transfer tokens.
_from
address
The address from which to transfer tokens from
_to
address
The address to which to transfer tokens to
_value
uint256
The amount of tokens to transfer from _partition
_data
bytes
Additional data attached to the transfer of tokens
_operatorData
bytes
Additional data attached to the transfer of tokens by the operator
Arguments
Name
Type
Description
_partition
bytes32
_from
address
_operator
address
Updates internal variables when performing a transfer
Returns
bool success
Arguments
Name
Type
Description
_from
address
sender of transfer
_to
address
receiver of transfer
_value
uint256
value of transfer
_data
bytes
data to indicate validation
Validate transfer with TransferManager module if it exists
Returns
bool
Arguments
Name
Type
Description
_from
address
sender of transfer
_to
address
receiver of transfer
_value
uint256
value of transfer
_data
bytes
data to indicate validation
Permanently freeze issuance of this security token.
Arguments
Name
Type
Description
_signature
bytes
This function must be called to increase the total supply (Corresponds to mint function of ERC20).
Arguments
Name
Type
Description
_tokenHolder
address
The account that will receive the created tokens (account should be whitelisted or KYCed).
_value
uint256
The amount of tokens need to be issued
_data
bytes
The bytes _data
allows arbitrary data to be submitted alongside the transfer.
Arguments
Name
Type
Description
_tokenHolder
address
_value
uint256
_data
bytes
issue new tokens and assigns them to the target _tokenHolder.
Returns
success
Arguments
Name
Type
Description
_tokenHolders
address[]
A list of addresses to whom the minted tokens will be dilivered
_values
uint256[]
A list of number of tokens get minted and transfer to corresponding address of the investor from _tokenHolders[] list
Increases totalSupply and the corresponding amount of the specified owners partition
Arguments
Name
Type
Description
_partition
bytes32
The partition to allocate the increase in balance
_tokenHolder
address
The token holder whose balance should be increased
_value
uint256
The amount by which to increase the balance
_data
bytes
Additional data attached to the minting of tokens
This function redeem an amount of the token of a msg.sender. For doing so msg.sender may incentivize using different ways that could be implemented with in the redeem
function definition. But those implementations are out of the scope of the ERC1594.
Arguments
Name
Type
Description
_value
uint256
The amount of tokens need to be redeemed
_data
bytes
The bytes _data
it can be used in the token contract to authenticate the redemption.
Arguments
Name
Type
Description
_from
address
_value
uint256
_data
bytes
Decreases totalSupply and the corresponding amount of the specified partition of msg.sender
Arguments
Name
Type
Description
_partition
bytes32
The partition to allocate the decrease in balance
_value
uint256
The amount by which to decrease the balance
_data
bytes
Additional data attached to the burning of tokens
Arguments
Name
Type
Description
_partition
bytes32
_from
address
_value
uint256
_operator
address
_data
bytes
_operatorData
bytes
Decreases totalSupply and the corresponding amount of the specified partition of tokenHolder
Arguments
Name
Type
Description
_partition
bytes32
The partition to allocate the decrease in balance.
_tokenHolder
address
The token holder whose balance should be decreased
_value
uint256
The amount by which to decrease the balance
_data
bytes
Additional data attached to the burning of tokens
_operatorData
bytes
Additional data attached to the transfer of tokens by the operator
Arguments
Name
Type
Description
_from
address
_value
uint256
_data
bytes
This function redeem an amount of the token of a msg.sender. For doing so msg.sender may incentivize using different ways that could be implemented with in the redeem
function definition. But those implementations are out of the scope of the ERC1594.
Arguments
Name
Type
Description
_tokenHolder
address
The account whose tokens gets redeemed.
_value
uint256
The amount of tokens need to be redeemed
_data
bytes
The bytes _data
it can be used in the token contract to authenticate the redemption.
Creates a checkpoint that can be used to query historical balances / totalSuppy
Returns
uint256
Arguments
Name
Type
Description
Used by the issuer to set the controller addresses
Arguments
Name
Type
Description
_controller
address
address of the controller
Used by the issuer to permanently disable controller functionality
Arguments
Name
Type
Description
_signature
bytes
Transfers of securities may fail for a number of reasons. So this function will used to understand the cause of failure by getting the byte value. Which will be the ESC that follows the EIP 1066. ESC can be mapped with a reson string to understand the failure cause, table of Ethereum status code will always reside off-chain
Returns
byte Ethereum status code (ESC)
Arguments
Name
Type
Description
_to
address
address The address which you want to transfer to
_value
uint256
uint256 the amount of tokens to be transferred
_data
bytes
The bytes _data
allows arbitrary data to be submitted alongside the transfer.
Transfers of securities may fail for a number of reasons. So this function will used to understand the cause of failure by getting the byte value. Which will be the ESC that follows the EIP 1066. ESC can be mapped with a reson string to understand the failure cause, table of Ethereum status code will always reside off-chain
Returns
byte Ethereum status code (ESC)
Arguments
Name
Type
Description
_from
address
address The address which you want to send tokens from
_to
address
address The address which you want to transfer to
_value
uint256
uint256 the amount of tokens to be transferred
_data
bytes
The bytes _data
allows arbitrary data to be submitted alongside the transfer.
Arguments
Name
Type
Description
_from
address
_to
address
_value
uint256
_data
bytes
The standard provides an on-chain function to determine whether a transfer will succeed, and return details indicating the reason if the transfer is not valid.
Returns
ESC (Ethereum Status Code) following the EIP-1066 standard
Arguments
Name
Type
Description
_from
address
The address from whom the tokens get transferred.
_to
address
The address to which to transfer tokens to.
_partition
bytes32
The partition from which to transfer tokens
_value
uint256
The amount of tokens to transfer from _partition
_data
bytes
Additional data attached to the transfer of tokens
Used to attach a new document to the contract, or update the URI or hash of an existing attached document
Arguments
Name
Type
Description
_name
bytes32
Name of the document. It should be unique always
_uri
string
Off-chain uri of the document from where it is accessible to investors/advisors to read.
_documentHash
bytes32
hash (of the contents) of the document.
Used to remove an existing document from the contract by giving the name of the document.
Arguments
Name
Type
Description
_name
bytes32
Name of the document. It should be unique always
In order to provide transparency over whether controllerTransfer
/ controllerRedeem
are useable or not isControllable
function will be used.
Returns
bool true
when controller address is non-zero otherwise return false
.
Arguments
Name
Type
Description
This function allows an authorised address to transfer tokens between any two token holders. The transfer must still respect the balances of the token holders (so the transfer must be for at most balanceOf(_from)
tokens) and potentially also need to respect other transfer restrictions.
Arguments
Name
Type
Description
_from
address
Address The address which you want to send tokens from
_to
address
Address The address which you want to transfer to
_value
uint256
uint256 the amount of tokens to be transferred
_data
bytes
data to validate the transfer. (It is not used in this reference implementation
because use of _data
parameter is implementation specific). | | _operatorData | bytes | data attached to the transfer by controller to emit in event. (It is more like a reason string for calling this function (aka force transfer) which provides the transparency on-chain). |
This function allows an authorised address to redeem tokens for any token holder. The redemption must still respect the balances of the token holder (so the redemption must be for at most balanceOf(_tokenHolder)
tokens) and potentially also need to respect other transfer restrictions.
Arguments
Name
Type
Description
_tokenHolder
address
The account whose tokens will be redeemed.
_value
uint256
uint256 the amount of tokens need to be redeemed.
_data
bytes
data to validate the transfer. (It is not used in this reference implementation
because use of _data
parameter is implementation specific). | | _operatorData | bytes | data attached to the transfer by controller to emit in event. (It is more like a reason string for calling this function (aka force transfer) which provides the transparency on-chain). |
Arguments
Name
Type
Description
Arguments
Name
Type
Description
Returns
the address of the owner.
Arguments
Name
Type
Description
Returns
true if msg.sender
is the owner of the contract.
Arguments
Name
Type
Description
Allows the current owner to transfer control of the contract to a newOwner.
Arguments
Name
Type
Description
newOwner
address
The address to transfer ownership to.
Transfers control of the contract to a newOwner.
Arguments
Name
Type
Description
newOwner
address
The address to transfer ownership to.
Check if a status code represents success (ie: 0x*1)
Returns
successful A boolean representing if the status code represents success
Arguments
Name
Type
Description
status
bytes1
Binary ERC-1066 status code
⤿ Overridden Implementation(s):
⤿ Overridden Implementation(s):
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides
⤾ overrides