Agree with @SteveJackson. This is a limitation of ERC20.
If these child contracts will be contracts then you can implement the CanReclaimToken
solution. https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/CanReclaimToken.sol
This sets up the contracts to allow for recovery of arbitrary tokens that end up in the contract's possession. The Owner
passes in the address of the ERC20 to recover the balance of unexpected tokens.
In practical terms, you can consider making a software client that maintains a list of known ERC20 contracts by observing a source then observes those token contracts to see if any transactions arrive for any of the child contracts.
It would then be a matter of invoking the reclaimToken()
as Owner
.
Certainly, some implementation details to work out but it would be a workable approach if this an important issue.
Hope it helps.