Manual Approval Transfer Manager
Introduced in
2.0.0
Contract name
ManualApprovalTransferManager.sol
Type
Transfer Manager Module
Compatible Protocol Version
^2.0.0
How it works
The Manual Approval Transfer Manager module works by allowing to manually approve or block transactions between account addresses. The Manual approval allows the issuer to create an allowance (that has been approved) with an added expiry time frame for the allowance period. This will cause a transaction from said from/to accounts to succeed even if a different TM said otherwise (or even if those accounts were not part of the GTM’s whitelist). Whereas the manual blocking allows the issuer to specify a list of blocked address pairs with an associated expiry time for the block. In this case, this will make the transaction fail, even if all the other TMs said the transaction was approved.
Key functionalities (as defined in the Smart Contract)
Initialization
This module has no initialization.
Transfer Restriction
This function is used to verify the transfer transaction and allow a manually approved transaction to bypass other restrictions.
Note: This function must only be called by the associated security token.
/**
* @notice Used to verify the transfer transaction and allow a manually approved transaction to bypass other restrictions
* @param _from Address of the sender
* @param _to Address of the receiver
* @param _amount The number of tokens to transfer
*/
function executeTransfer(
address _from,
address _to,
uint256 _amount,
bytes calldata /* _data */
)
external
onlySecurityToken
returns(Result)Add Manual Approval
This function allows the issuer to add a pair of addresses to the manual approvals.
Note: An investor can only have one manual approval at a time. If a second manual approval needs to be added for an investor, the existing one must first be revoked unless it has a zero allowance.
Add Manual Approval Multi
This function allows the issuer to add multiple manual approvals in a batch.
Modify Manual Approval
This function allows the issuer to modify their existing manual approvals.
Modify Manual Approval Multi
This function allows the issuer to add multiple manual approvals in a batch.
Revoke Manual Approval
This function allows the issuer to remove addresses from the manual approvals. For example, when adding a manual approval, an “entry” is created saying A to B to allow this transfer. This function deletes said entry.
Revoke Manual Approval Multi
This function allows the issuer to remove multiple pairs of addresses form manual approvals.
Requirements:
This function requires that (_from.length == _to.length, "Input array length mismatch")
Get Active Approvals To User
This function gets called to return all the actives approvals that correspond to a specific address.
Get Approval Details
This function retrieves the details of the approval that corresponds to _from and _to addresses.
Get Total Approvals Length
This function simply returns the current number of active approvals
Get All Approvals
Get the details of all the transfer approvals
Know Issues/bugs
If a manual approval exists for two addresses, the only way to add a new manual approval for those address is revoking the first one, even if it was expired. (This only affects further approvals between the SAME addresses in the SAME direction. I.E: If A → B = 100 tokens, can’t create a new A → B = 500 until the first A →B has been revoked. But A → C, B → C, C → A, C → B, and even B → A are still possible).
Scope: Address-pair level, in the same order i.e. if allow 100 tokens from A to B, you can allow 1000 tokens from B to A. You will need to revoke the first approval if you want to allow 1000 tokens from A to B, even if the first approval is expired.
It is possible to add manual approval and a manual blocking for the same pair of addresses. Due to the logic on
executeTransfer(), blocking will always win.
Last updated
Was this helpful?