Solidity + truffle + openzeppelinで開発しています

トークンを付与した上で、ある時期になったらトークンを回収したいと考えています

コントラクト上で送付したアドレスが把握出来ればループさせればと思いますが、アドレスを取得する方法がわかりません

balanceOfにマッピングしているのでそこから取り出せればと思いましたがfor eachの類はないと理解しています

トークンが動く際にコントラクトの配列にアドレスを持たせるしか無いのでしょうか?

トークンに有効期限を持たせられればとも考えましたが実装方法が思いつかず
出来ても使えるトークンと使えないトークンが混ざってわかりにくいのでよく無いなと

最悪はコントラクトを定期的にデプロイし直すしか無いのかなとも

ご意見いただければと思います

いただいた意見しかないと思っていたのでその実装で行います
mainnetでのガスが確かに気になります