I have a pretty standard OpenZeppelin crowdsale. Now the issue is that I want to be able to use one crowdsale contract with multiple (~100) different ERC20 tokens.

Ideally I want to put the crowdsale contract on the chain and then add ERC20 tokens to it over the next few months. I don't want to release a new crowdsale contract for each token because it'll be expensive.

Is there a way to convert the Crowdsale contract into one that can handle multiple tokens? Does one exist already?

  • Yes, it should be possible. I don't know a contract with multiple tokens.
    – Ismael
    Commented Dec 29, 2018 at 17:59

2 Answers 2


This sounds like a perfect use case for the now finalized ERC-1155 token standard, which allows one to manage any number of fungible and non fungible tokens in a single contract.


You could use a few different approaches.

If you want to keep the Open Zeppelin contract pristine, you could consider deploying one for each unique token. That process, could itself be managed with a contract factory pattern. The factory would be concerned with configuring the crowdsale instances and keeping track of them.

Another approach would be to refactor the crowdsale contract such that each external function (and most internal functions) accepts a contract address argument. I would strongly suggest validating the input so only known token contracts are accepted, and that would imply extending it with a function to add token contract addresses.

ERC-1155 multitoken is another option. It is arguably superior in many ways but it comes at the cost of abandoning ERC-20 backward compatibility and thus invalidates the token a crowdsale contracts you have so far. Doing so may also raise some concerns about wallet and exchange compatibility.

Hope it helps.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.