# Creating an ERC-20 token with OpenZeppelin v3.x?

**URL:** <https://forum.openzeppelin.com/t/creating-an-erc-20-token-with-openzeppelin-v3-x/3950>\
**Category:** Contracts\
**Created:** [September 27, 2020, 5:31am UTC](https://forum.openzeppelin.com/t/creating-an-erc-20-token-with-openzeppelin-v3-x/3950 "2020-09-27T05:31:48Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![abcoathup](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/abcoathup/32/415_2.png) [@abcoathup](https://forum.openzeppelin.com/u/abcoathup)\
**Post date:** [September 28, 2020, 2:28am UTC](https://forum.openzeppelin.com/t/creating-an-erc-20-token-with-openzeppelin-v3-x/3950/2 "2020-09-28T02:28:02Z")

</div>

Hi @PradhumnaPancholi,

I suggest looking at AccessControl rather than Ownable so that you can define roles for specific actions (such as minting).  
See the documentation for details: [https://docs.openzeppelin.com/contracts/3.x/access-control#role-based-access-control](https://docs.openzeppelin.com/contracts/3.x/access-control#role-based-access-control)

ERC20PresetMinterPauser is an example of using AccessControl for minting and pausing:

> <https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/presets/ERC20PresetMinterPauser.sol>

As well as access control, you could look at using hooks (depending on what functionality you need): [https://docs.openzeppelin.com/contracts/3.x/extending-contracts#using-hooks](https://docs.openzeppelin.com/contracts/3.x/extending-contracts#using-hooks)

Whenever someone is creating a token, I suggest they look at: [Points to consider when creating a fungible token (ERC20, ERC777)](https://forum.openzeppelin.com/t/points-to-consider-when-creating-a-fungible-token-erc20-erc777/2915)

Feel free to ask all the questions that you need.

---

_[View the full topic](https://forum.openzeppelin.com/t/creating-an-erc-20-token-with-openzeppelin-v3-x/3950)._
