/**
* @dev Owner may add ERC20 token addresses.
* @param _token token to add.
*/
function addERC20ToTrust(address _token) external {
require(_token != address(0), 'address can not be zero address');
// require(allowance>balance) //Need to add inputs for this check
GrantorAssets[msg.sender].push(_token);
uniqueAssets.add(_token);
emit AddedERC20(msg.sender, _token);
}
/**
* @notice Checks the balance of a passed token for a provided wallet.
* @param _token The target token.
* @param _wallet The target token.
*/
function erc20Balance(
address _token,
address _wallet)
view
public
returns (uint256 total)
{
total = IERC20(_token).balanceOf(_wallet);
return total;
}
/**
* @notice transfers the passed token from the grantor to the specified address.
* @param _token The target token.
* @param _from The grantor's wallet.
* @param _to The trustee or beneficiary's wallet
* @param _amount The _amount to send.
*/
function erc20TransferFrom(
address _token,
address _from,
address _to,
uint256 _amount
) public
{
IERC20(_token).transferFrom( _from, _to, _amount);
}
/**
* @notice transfers fungibles to the beneficiaries
*/
function executeERC20Trust() public onlyRole(TRUSTEE_ROLE) {
// require(block.timestamp > checkInPeriodEnd, "Check-In Period is still live.") ;
require(address(beneficiaryContract) != address(0));
// Iterate over Grantor wallets
for (
uint256 grantor_wallet_idx = 0;
grantor_wallet_idx < grantor.length();
grantor_wallet_idx++
) {
// Iterate over tokens in Grantor wallet
address grantorAddress = grantor.at(grantor_wallet_idx);
address[] memory grantorAddress_tokens = GrantorAssets[grantorAddress];
for (
uint256 asset_idx = 0;
asset_idx < grantorAddress_tokens.length;
asset_idx++
) {
address asset_addr = grantorAddress_tokens[asset_idx];
uint256 total_assets = erc20Balance(asset_addr, grantorAddress);
// require(sent, "Failed to get balance.");
// if (total_assets==0) {pass}
erc20TransferFrom( asset_addr,
grantorAddress,
address(beneficiaryContract),
total_assets
);
// (bool sent) =
// require(sent, "Failed to withdraw tokens");
}
}
}
/**
* @notice transfers fungibles to the beneficiaries
*/
function claimERC20() public {
// Send ether
beneficiaryContract.release(msg.sender);
// Iterate over tokens in Grantor wallet
address grantorAddress = grantor[grantor_wallet_idx];
address[] memory grantorAddress_tokens = GrantorAssets[grantorAddress];
for (
uint256 asset_idx = 0;
asset_idx < grantorAddress_tokens.length;
asset_idx++
) {
address asset_addr = grantorAddress_tokens[asset_idx];
uint256 total_assets = erc20Balance(asset_addr, grantorAddress);
// require(sent, "Failed to get balance.");
// if (total_assets==0) {pass}
beneficiaryContract.release(asset_addr, msg.sender);
// (bool sent) =
// require(sent, "Failed to withdraw tokens");
}
}
Old code previously used to send erc20s