Удалите ненадежный токен из смарт-контракта ERC20

#solidity #smartcontracts

Вопрос:

У меня есть вопрос, и я пытаюсь погуглить без особого труда.

Давайте возьмем пример этого токена: 1-дюймовый токен

Таким образом, вы можете видеть, что у него есть разные токены, которые люди отправили на этот адрес.

Если бы я был владельцем, как бы я мог реализовать функцию вывода всех этих токенов на свой кошелек?

Ответ №1:

Ваш контракт может определить функцию ERC20 интерфейса transfer() , а затем выполнить эту функцию во внешнем контракте токенов.

 pragma solidity ^0.8;

interface IERC20 {
    function transfer(address _to, uint256 _amount) external returns (bool);
}

contract MyContract {
    modifier onlyOwner {
        require(msg.sender == address(0x123), 'Not authorized');
        _;
    }

    function withdrawERC20Token(address _tokenContractAddress, uint256 _amount) external onlyOwner {
        IERC20 token = IERC20(_tokenContractAddress);
        
        // transfer the `_amount` of tokens (mind the decimals) from this contract address
        // to the `msg.sender` - the caller of the `withdrawERC20Token()` function
        bool success = token.transfer(msg.sender, _amount);
        require(success, 'Could not withdraw');
    }
}