Ethereum ICO smart contracts and tools for managing token sales
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
build/expanded Make sure the expanded folder is present in the git checkout. Aug 22, 2017
contracts PaymentSplitter: Improved commenting of the test contract Dec 5, 2018
crowdsales fixed crowdsale test Nov 23, 2018
docs Added paymeny splitter example Dec 11, 2018
ico Seeing if we can get EtherScan verification problems fixes Dec 11, 2018
zeppelin @ 7586e38 Zeppelin: Update to OpenZeppelin contracts to 7586e38 Mar 15, 2018
.dockerignore added docker-compose and ganache chain Mar 9, 2018
.editorconfig add support for rinkeby Jul 15, 2017
.gitignore added .idea to .gitignore Nov 23, 2018
.gitmodules Use HTTPS submodule for Zeppelin as it's public. Mar 20, 2017
.travis.yml fix TOXENV Nov 23, 2018
Dockerfile Fix revert from a statement to a function. Start switching to Docker … May 23, 2018
HISTORY.rst Initial import Mar 20, 2017
LICENSE.txt Fix env definition in Travis Mar 20, 2017 Initial import Mar 20, 2017
README.rst Working on testing documentation Nov 23, 2018
docker-compose.yml added docker-compose and ganache chain Mar 9, 2018 Adding unrestricted transfer agent Dec 5, 2018 Trying to get correct solc version on Travis. Mar 20, 2017
project.json Seeing if we can get EtherScan verification problems fixes Dec 11, 2018
requirements.txt Update requirements.txt Nov 23, 2018
setup.cfg Fixed expansion. Added Kovan support. Apr 11, 2017 comment out libraries in setup Nov 23, 2018
solc-standard.json Adding unrestricted transfer agent Dec 5, 2018
tox.ini use python3.6 Nov 23, 2018


TokenMarket 2018 conference, Gibraltar, June 28th - 29th

Our conference TokenMarket 2018: Insights into the Token Economy is held June 28th in Gibraltar. Tokenisation has created new financial markets. Join the industry leaders to discuss where those markets are heading.

View conference and buy the tickets now


This package contains Ethereum smart contracts and command line toolchain for launching and managing token sales.

Join the chat at Documentation Status


Github issue tracker and source code


About the project

ICO stands for a token or cryptocurrency initial offering crowdsale. It is a common method in blockchain space, decentralized applications and in-game tokens for bootstrap funding of your project.

This project aims to provide standard, secure smart contracts and tools to create crowdsales for Ethereum blockchain.

As the writing of this, Ethereum smart contract ICO business has been booming almost a year. The industry and development teams are still figuring out the best practices. A lot of similar smart contracts get written over and over again. This project aims to tackle this problem by providing reusable ICO codebase, so that developers can focus on their own project specific value adding feature instead of rebuilding core crowdfunding logic. Having one well maintained codebase with best practice and security audits benefits the community as a whole.

This package provides

  • Crowdsale contracts: token, ICO, uncapped ICO, pricing, transfer lock ups, token upgrade in Solidity smart contract programming language
  • Automated test suite in Python
  • Deployment tools and scripts

Token sales

These contracts have been tested, audited and used by several projects. Below are some notable token sales that we have used these contracts

We also have third party token sales using these smart contracts

Quick token sale walkthrough

Features and design goals

  • Best practices: Smart contracts are written with the modern best practices of Ethereum community
  • KYC: Know your customer processes are support enabled to minimize legal risks associated with anonymous payments - see KYCCrowdsale
  • AML: Anti-money laundering processes are supported through offloaded chain analysis - often a requirement to open a bank account - see AMLToken
  • Separation of concerns: Crowdsale, token and other logic lies in separate contracts that can be assembled together like lego bricks
  • Testable: We aim for 100% branch code coverage by automated test suite
  • Auditable: Our tool chain supports verifiable contract builds
  • Reusable: The contract code is modularized and reusable across different projects, all variables are parametrized and there are no hardcoded values or magic numbers
  • Refund: Built-in refund and minimum funding goal protect investors
  • Token upgrade: Token holders can opt in to a new version of the token contract in the case the token owner wants to add more functionality to their token
  • Reissuance: There can be multiple crowdsales for the same token (pre-ICO, ICO, etc.)
  • Emergency stop: To try to save the situation in the case we found an issue in the contract post-deploy
  • Build upon a foundation: Instead of building everything from the scratch, use OpenZeppelin contracts as much as possible as they are the gold standard of Solidity development


TokenMarket can be a launch and hosting partner for your token sale. We offer advisory, legal, technical and marketing services. For more information see TokenMarket ICO services. TokenMarket requires everyone to have at least business plan or whitepaper draft ready before engaging into any discussions.

Community support is available on the best effort basis - your mileage may vary. To get the most of the community support we expect you to be on a senior level of Solidity, Python and open source development. Meet us at the Gitter support chat.

Running tests locally

Quick tutorial (see docs for more information):

export SOLC_BINARY=$(pwd)/
export SOLC_VERSION=0.4.24

Audit reports

Some public audit reports available for some revisions of this codebase:

More audit reports available on a request.