Release Notes


  • Refactor to configuration API to stop writing the default config to ~/.populus/config in favor of using the default config file baked into the populus library.


  • Support for solidity v0.4.18 and v0.4.19


  • Added experimental Vyper support.


  • Fixed deprecation warnings.


  • Drop gevent support.
  • Change upstream dependency for ethereum-utils to new library name eth-utils


  • Bugfix for running tests without explicitely declared project root dir.


  • Bugfix for wait utils in wait_for_block.


  • Update to confguration API to support both project level configuration files as well as user level configuration files.
  • --wait-for-sync cli argument in $ populus deploy now defaults to False (previous defaulted to True)
  • Deprecation of Go-Ethereum based Chain objects in preparation for upcoming Environments API which will replace the Chain API.
  • New $ populus chain new command for initializing local development chains.
  • Removal of $ populus config set and $ populus config delete CLI comands.


  • Add deprecation warning for upcoming removal of python 2 support.


  • Deprecate support for gevent based threading.


  • Upstream bugfix for change to internal API.


  • Support for specifying project directory via any of pytest.ini, --populus-project, or via environment variable PYTEST_POPULUS_PROJECT.
  • Support for running populus commands from outside of the project directory with -p/--project.
  • Deprecate support for solc<0.4.11.
  • Deprecate Project.write_config() in preparation for configuration API refactors.
  • Deprecate $ populus config set and populus config delete commands in preparatin for configuration API refactors.


  • Bugfix for Wait.wait_for_block API when interacting with a tester chain.


  • Bugfix for SolcStandardJSONBacken compilation. Settings for this compiler now appropriately split between standard JSON input and compiler command line arguments.
  • Deprecate: project.contracts_source_dir and releated setting compilation.contracts_source_dir.
  • New API: project.contracts_source_dirs replaces deprecated singular project.contracts_source_dir.
  • New setting compilation.contracts_source_dirs.


  • Add --logging option to main cli command to set logging level.


  • Change default compiler backend to populus.compilation.backends.SolcAutoBackend which will automatically select the appropriate solc compiler backend based on the current installed version olf solc.
  • Add support for standard JSON based solc compilation.
  • Bugfix: Compilation now correctly respects import remappings.


  • Remove deprecated chain.contract_factories API.
  • Remove deprecated chain.get_contract_factory API.
  • Remove deprecated chain.is_contract_available API.
  • Remove deprecated chain.get_contract API.
  • Remove deprecated chain.deployed_contracts API.
  • Remove deprecated contracts pytest fixture.
  • Remove deprecated project.compiled_contracts_file_path API
  • Remove deprecated project.contracts_dir API
  • Remove deprecated project.build_dir API
  • Remove deprecated project.compiled_contracts API
  • Remove deprecated project.blockchains_dir API
  • Remove deprecated project.get_blockahin_data_dir API
  • Remove deprecated project.get_blockchain_chaindata_dir API
  • Remove deprecated project.get_blockchain_dapp_dir API
  • Remove deprecated project.get_blockchain_ipc_path API
  • Remove deprecated project.get_blockchain_nodekey_path API


  • Bump py-geth version to account for removed --ipcapi CLI flag.


  • Allow for empty passwords when unlocking accounts.


  • Bugfix for registrar address sorting to handle nodes which were fast synced and do not have access to the full chain history.


  • Add support to contract provider to handle case where registrar has more than one address for a given contract.


  • Bugfix for compilation of abstract contracts.


  • Bugfix for project.config setter function not setting correct value.


  • Add TestContractsBackend for loading test contracts.


  • Fix incorrect example test file from $ populus init command.


  • Fix warning message for outdated config file so that it actually shows up in terminal.


  • Introduce new Registrar API.
  • Introduce new Provider API
  • Deprecate Chain.get_contract_factory, Chain.get_contract and Chain.is_contract_available APIs.
  • Deprecate Chain.contract_factories API.
  • Deprecate Chain.deployed_contracts API.
  • Remove deprecated migrations API.


  • Bump version to pull in upstream fixes for ethereum-abi-utils


  • Bugfix for remaining web3.utils imports


  • Update upstream dependency.
  • Switch to use ethereum-utils library.


  • Remove gevent dependency
  • Mark migrations API for deprecation.
  • Mark unmigrated_chain testing fixture for deprecation.
  • Mark contracts fixture for deprecation. Replaced by base_contract_factories fixture.
  • Deprecate and remove old populus.ini configuration scheme.
  • Add new configuration API.


  • Upstream version bumps for web3 and ethtestrpc
  • Change to use new web3.providers.tester.EthereumTesterProvider for test fixtures.



  • Contract source directory now configurable via populus.ini file.
  • Updates to upstream dependencies.


  • Bugfix for geth data_dir directory on linux systems.


  • Support solc 0.4.x


  • Support legacy JSON-RPC spec for eth_getTransactionReceipt in wait API.


  • All function in the chain.wait api now take a poll_interval parameter which controls how aggressively they will poll for changes.
  • The project fixture now caches the compiled contracts across test runs.


This release begins the first deprecation cycle for APIs which will be removed in future releases.

  • Deprecated: Entire migrations API
  • New configuration API which replaces the populus.ini based configuration.
  • Removal of gevent as a required dependency. Threading and other asynchronous operations now default to standard library tools with the option to enable the gevent with an environment variable THREADING_BACKEND==gevent


This is the first release of populus that should be considered stable.

  • Remove $ populus web command
  • Remove populus.solidity module in favor of py-solc package for solidity compilation.
  • Remove populus.geth module in favor of py-geth for running geth.
  • Complete refactor of pytest fixtures.
  • Switch to for all blockchain interactions.
  • Compilation: - Remove filtering. Compilation now always compiles all contracts. - Compilation now runs with optimization turned on by default. Can be disabled with --no-optimizie. - Remove use of ./project-dir/libraries directory. All contracts are now expected to reside in the ./project-dir/contracts directory.
  • New populus.Project API.
  • New Migrations API: - $ populus chain init for initializing a chain with the Registrar contract. - $ populus makemigration for creating migration files. - $ populus migrate for executing migrations.
  • New configuration API: - New commands $ populus config, $ populus config:set and $ populus config:unset for managing configuratino.
  • New Chain API: - Simple programatic running of project chains. - Access to web3.eth.contract objects for all project contracts. - Access to pre-linked code based on previously deployed contracts.


  • Removal of the --logfile command line argument. This is a breaking change as it will break when used with older installs of geth.


  • Bugfix: populus init now creates the libraries directory
  • Bugfix: populus compile --watch no longer fails if the libraries directory isn’t present.


  • Bugfix for the geth_accounts fixture.
  • Bugfix for project initialization fixtures.
  • Allow returning of indexed event data from Event.get_log_data
  • Fix EthTesterClient handling of TransactionErrors to allow continued EVM interactions.
  • Bugfix for long Unix socket paths.
  • Enable whisper when running a geth instance.
  • Better error output from compile errors.
  • Testing bugfixes.


  • Add denoms pytest fixture
  • Add accounts pytest fixture
  • Experimental synchronous function calls on contracts with function.s(...)
  • Bugfixes for function group argument validation.
  • Bugfixes for error handling within EthTesterClient
  • Inclusion of Binary Runtime in compilation
  • Fixes for tests that were dependent on specific solidity versions.


  • Make the ethtester client work with asynchronous code.


  • Adds ipc_client fixture.


  • When a contract function call that is supposed to return data returns no data an error was thown. Now a custom exception is thrown. This is a breaking change as previously for addresses this would return the empty address.


  • Actually fix the address bug.


  • Fix bug where addresses were getting double prefixed with 0x


  • Bugfix for Event.get_log_data
  • Add get_code and get_accounts methods to EthTesterClient
  • Add 0x prefixing to addresses returned by functions with multiple return values.


  • Shorted path to cli tests to stay under 108 character limit for unix sockets.
  • Adds tracking of contract addresses deployed to test chains.
  • New redeploy feature available within populus attach as well as notification that your contracts have changed and may require redeployment.


  • Shorted path to cli tests to stay under 108 character limit for unix sockets.
  • Allow passing --verbosity tag into populus chain run
  • Expand documentation with example use case for populus deploy/chain/attach commands.


  • Change the default gas for transactions to be a percentage of the max gas.


  • Improve populus deploy command.
    • Optional dry run to test chain
    • Prompts user for confirmation on production deployments.
    • Derives gas needs based on dry-run deployment.
  • Addition of deploy_coinbase testing fixture.
  • Renamed Contract._meta.rpc_client to be Contract._meta.blockchain_client to be more appropriately named since the EthTesterClient is not an RPC client.
  • Renamed rpc_client argument to blockchain_client in all relevant functions.
  • Moved get_max_gas function onto blockchain clients.
  • Moved wait_for_transaction function onto blockchain clients.
  • Moved wait_for_block function onto blockchain clients.
  • Bugfix when decoding large integers.
  • Reduced gasLimit on genesis block for test chains to 3141592.
  • Updated dependencies to newer versions.


  • Additional support for library contracts which will be included in compilation.
  • deployed_contracts automatically derives deployment order and dependencies as well as linking library addresses.
  • deployed_contracts now comes with the transaction receipts for the deploying transaction attached.
  • Change to use pyethash from pypi


  • New populus attach command for launching interactive python repl with contracts and rpc client loaded into local scope.
  • Support for auto-linking of library contracts for the deployed_contracts testing fixture.


  • Rename rpc_server fixture to testrpc_server
  • Introduce populus_config module level fixture which holds all of the default values for other populus module level fixtures that are configurable.
  • Add new configuration options for deployed_contracts fixture to allow declaration of which contracts are deployed, dependency ordering and constructor args.
  • Improve overall documentation around fixtures.


  • Introduce the ethtester_client which has the same API as the eth_rpc_client.Client class but interacts directly with the ethereum.tester module
  • Add ability to control the manner through which the deployed_contracts fixture communicates with the blockchain via the deploy_client fixture.
  • Re-organization of the contracts module.
  • Support for multiple contract functions with the same name.
  • Basic support for extracting logs and log data from transactions.


  • Significant refactor to the Contract and related Function and Event objects used to interact with contracts.
  • Major improvements to robustness of geth_node fixture.
  • deployed_contracts testing fixture no longer provides it’s own rpc server. Now you must either provide you own, or use the geth_node or rpc_server alongside it in tests.
  • geth_node fixture now writes to a logfile located in ./chains/<chain-name>/logs/ for both cli and test case runs.


  • Add support for address function args with a 0x prefix.


  • Add init command for initializing a populus project.


  • Missing index.html file.


  • Add blockchain management via populus chain commands which wraps geth library.
    • populus chain run <name> for running the chain
    • populus chain reset <name> for resetting a chain
  • Add html/css/js development support.
    • Development webserver via populus web runserver
    • Conversion of compiled contracts to web3 contract objects in javascript.


  • Add support for decoding multiple values from a solidity function call.


  • Add support for decoding address`` return types from contract functions.


  • Add support for contract constructors which take arguments via the new constructor_args parameter to the Contract.deploy method.


  • Fix bug where null bytes were excluded from the returned bytes.


  • Fix a bug in the sendTransaction methods for contract functions that did not pass along most of the **kwargs.
  • Add new Contract.get_balance() method to contracts.


  • Enable decoding of bytes types returned by contract function calls.


  • Enable decoding of boolean values returned by contract function calls.


  • Removed watch command in favor of passing --watch into the compile command.
  • Add granular control to the compile command so that you can specify specific files, contract names, or a combination of the two.


  • Update to pypi version of eth-testrpc
  • Add new watch command which observes the project contracts and recompiles them when they change.
  • Improved shell output for compile command.
  • Re-organized portions of the utils module into a new compilation module.


  • Fix broken import in cli module.



  • Add missing pytest dependency.


  • Fix bug when deploying contracts onto a real blockchain.


  • Project Creation