Skip to content
Ethereum Package for the OpenZeppelin Contracts library.
JavaScript Solidity Shell
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci bring over circleci migration Aug 12, 2019
.github Add @OpenZeppelin/contracts as alternative package name (#1840) Jul 26, 2019
.openzeppelin publish ethereum package Nov 15, 2019
audit Add latest audit to repository (#1664) Mar 1, 2019
contracts remove package.json to avoid confusion Nov 15, 2019
docs remove beta notice Oct 29, 2019
migrations Clean up npm package (#904) Apr 26, 2018
scripts Merge tag 'v2.4.0' of Nov 1, 2019
test fix tests Nov 1, 2019
.codecov.yml Disable Travis in favor of Circle (#1866) Aug 7, 2019
.editorconfig GSN compatibility (#1880) Aug 15, 2019
.eslintrc Added mocha-no-only ESlint plugin. (#1529) Nov 29, 2018
.gitattributes feat: add solidity syntax highlighting directive, fixes #671 Jan 15, 2018
.gitignore Merge tag 'v2.4.0' of Nov 1, 2019
.solcover.js Re-enable solidity coverage Dec 20, 2017
.solhint.json Upgrade solhint to 2.1.0 (#1781) May 30, 2019 Merge tag 'v2.4.0' of Nov 1, 2019 Create (#1061) Jul 5, 2018 Update (#1842) Jul 26, 2019 Fixing instructions by correcting instruction to (#1877) Aug 12, 2019 rename docsite script to docs and update docs setup description Aug 16, 2019 Create from wiki content. (#1776) May 29, 2019
LICENSE Update copyright notice Apr 10, 2019 Merge tag 'v2.4.0' of Nov 1, 2019 Add @OpenZeppelin/contracts as alternative package name (#1840) Jul 26, 2019
logo.png update logo and badges Aug 12, 2019
netlify.toml rename docsite script to docs and update docs setup description Aug 16, 2019
package-lock.json Merge tag 'v2.4.0' of Nov 1, 2019
package.json Merge tag 'v2.4.0' of Nov 1, 2019
truffle-config.js push to all networks Oct 2, 2019


OpenZeppelin Contracts Ethereum Package

NPM Package Build Status

OpenZeppelin Contracts is a library for secure smart contract development. It provides implementations of standards like ERC20 and ERC721 which you can deploy as-is or extend to suit your needs, as well as Solidity components to build custom contracts and more complex decentralized systems.

This fork of OpenZeppelin is set up as a reusable Ethereum Package. It is deployed to the kovan, rinkeby, and ropsten test networks, as well as to the main Ethereum network. You can reuse any of the pre-deployed on-chain contracts by simply linking to them using the OpenZeppelin SDK, or reuse their Solidity source code as with the vanilla version of OpenZeppelin Contracts.

Differences with openzeppelin-contracts

This package contains the same contracts as the vanilla openzeppelin-contracts. The main difference is that all contracts in this package are potentially upgradeable: you will notice that no contracts have constructors defined, but use initializer functions instead. Also, this package is set up as an Ethereum package, and provides a small set of pre-deployed logic contracts that can be used directly via the OpenZeppelin SDK, without needing to deploy them again.

All in all, you should use this package instead of openzeppelin-solidity if you are managing your project via the OpenZeppelin CLI.


npm install @openzeppelin/contracts-ethereum-package

Deployed logic contracts

  • StandaloneERC20: ERC20 token implementation, optionally mintable and pausable.
  • StandaloneERC721: ERC721 non-fungible token implementation with metadata and enumerable extensions, optionally mintable and pausable.
  • TokenVesting: Token holder contract that can release its token balance gradually like a typical vesting scheme, with a cliff and vesting period, optionally revocable.
  • PaymentSplitter: Splits payments among a group of addresses proportionately to some number of shares they own.

Using via the OpenZeppelin CLI

You can easily create upgradeable instances of any of the logic contracts listed above using the OpenZeppelin CLI. This will rely on the pre-deployed instances in mainnet, kovan, ropsten, or rinkeby, greatly reducing your gas deployment costs. To do this, just create a new OpenZeppelin SDK project and link to this package.

$ npm install -g @openzeppelin/cli
$ openzeppelin init
$ openzeppelin link @openzeppelin/contracts-ethereum-package
> Installing...
$ openzeppelin create @openzeppelin/contracts-ethereum-package/StandaloneERC20
> Creating...

To create an instance of a contract, use the openzeppelin create command. As an example, you can run the following to create an upgradeable ERC20 named MyToken, with symbol TKN and 8 decimals, and an initial supply of 100 tokens assigned to the address HOLDER, with a MINTER and a PAUSER. Remember to replace $HOLDER, $MINTER, and $PAUSER with actual addresses when you run this command; you can specify more than one (or none at all) minters and pausers.

$ openzeppelin create
? Pick a contract to instantiate: @openzeppelin/contracts-ethereum-package/StandaloneERC20
? Pick a network: development
✓ Deploying @openzeppelin/contracts-ethereum-package dependency to network
? Do you want to call a function on the instance after creating it?: Yes
? Select which function: * initialize(name: string, symbol: string, decimals: uint8, initialSupply: uint256, initialHolder: address, minters: address[], pausers: address[])
? name (string): MyToken
? symbol (string): MYT
? decimals (uint8): 18
? initialSupply (uint256): 100e18
? initialHolder (address): 0x90f8bf6a479f320ead074411a4b0e7944ea8c9c1
? minters (address[]):
? pausers (address[]):
✓ Setting everything up to create contract instances
✓ Instance created at 0x2612Af3A521c2df9EAF28422Ca335b04AdF3ac66

OpenZeppelin will create an upgradeable ERC20 instance and keep track of its address in the .openzeppelin/rinkeby.json file. Should you update your version of the openzeppelin contracts ethereum package later down the road, you can simply run openzeppelin update to upgrade all your ERC20 instances to the latest version.

You can also deploy a ERC721 token by choosing the StandaloneERC721 contract when running openzeppelin create. Refer to the initialize function of each of the predeployed logic contracts to see which parameters are required for initialization.

Extending contracts

If you prefer to write your custom contracts, import the ones from this package and extend them through inheritance. Note that you must use this package and not @openzeppelin/contracts if you are writing upgradeable contracts.

pragma solidity ^0.5.0;

import '@openzeppelin/upgrades/contracts/Initializable.sol';
import '@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/ERC721Full.sol';
import '@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/ERC721Mintable.sol';

contract MyNFT is Initializable, ERC721Full, ERC721Mintable {
  function initialize() public initializer {
    ERC721Metadata.initialize("MyNFT", "MNFT");

On our site you will find a few guides to learn about the different parts of OpenZeppelin, as well as documentation for the API. Keep in mind that the API docs are work in progress, and don’t hesitate to ask questions in our forum.


OpenZeppelin Contracts is maintained by OpenZeppelin the company, and developed following our high standards for code quality and security. OpenZeppelin Contracts is meant to provide tested and community-audited code, but please use common sense when doing anything that deals with real money! We take no responsibility for your implementation decisions and any security problems you might experience.

The core development principles and strategies that OpenZeppelin Contracts is based on include: security in depth, simple and modular code, clarity-driven naming conventions, comprehensive unit testing, pre-and-post-condition sanity checks, code consistency, and regular audits.

The latest audit was done on October 2018 on version 2.0.0.

Please report any security issues you find to


OpenZeppelin exists thanks to its contributors. There are many ways you can participate and help build high quality software. Check out the contribution guide!


OpenZeppelin is released under the MIT License.

You can’t perform that action at this time.