The METoken contract knows that Faucet has a balance, but the only way that it can transfer that balance is if it receives a transfer call from the address of the contract.
Somehow we need to make the Faucet contract call the transfer function in METoken. If you’re wondering what to do next, don’t. There is no solution to this problem.
The MET sent to Faucet is stuck, forever.
Only the Faucet contract can transfer it, and the Faucet contract doesn’t have code to call the transfer function of an ERC20 token contract.
Perhaps you anticipated this problem. Most likely, you didn’t. In fact, neither did hundreds of Ethereum users who accidentally transferred various tokens to contracts that didn’t have any ERC20 capability.
According to some estimates, tokens worth more than roughly $ 2.5 million USD (at the time of writing) have gotten “stuck” like this and are lost forever.
One of the ways that users of ERC20 tokens can inadvertently lose their tokens in a transfer, is when they attempt to transfer to an exchange or another service.
They copy an Ethereum address from the website of an exchange, thinking they can simply send tokens to it.
However, many exchanges publish receiving addresses that are actually contracts! These contracts are only meant to receive ether, not ERC20 tokens, most often sweeping all funds sent to them to “cold storage” or another centralized wallet.
Despite the many warnings saying “do not send tokens to this address,” lots of tokens are lost this way.