Skip to content
This repository has been archived by the owner on May 23, 2023. It is now read-only.

Developer Notes

James Won edited this page Mar 15, 2016 · 23 revisions

Installation:

  • Python2.7 is required

pip install -r requirements.txt

That will try to install the requirements in your current environment.

NOTE: If you have not setup a virtualenv this will most likely try to install dependencies globally and might require more privileges.

If you get the following error:

scrypt-1.1.6/lib/crypto/crypto_aesctr.c:38:25: fatal error: openssl/aes.h: No such file or directory

then you need the SSL development libraries. To install them:

On Debian, Ubuntu, Linux Mint and other Ubuntu descendants:

sudo apt-get install libssl-dev

On Fedora, CentOS and RedHat:

sudo yum install openssl-devel

Installing dependencies for OS X

If you are trying to run pyethereum on OS X, please make sure you have the following dependencies installed:

brew install pkg-config libffi autoconf automake libtool openssl

How to contribute

We accept pull requests. Fork the repository and send your PR!

dev_requirements

To install the dependencies necessary for development (testing, ...), run:

pip install -r dev_requirements.txt

Coding

Testing

pytest is used for testing

In order to run tests, you need to prepare the fixtures-submodule:

git submodule init
git submodule update --recursive

then run the tests either by calling py.test (or behave for a set of older tests) consecutively or by calling tox (which will do both).

In order to update the fixtures-submodule:

git submodule status
cd fixtures/
git pull origin develop
cd ..
git commit -m 'updated fixtures submodule'

Tips for testing with the VM:

  1. You can get traces for a transaction using the API and ethclient, e.g.: bin/pyethclient trace 522f583b94cb3a16deca41404ef404c2c1b3484070af2ec7971bc4e1a17c556e
  2. Use the -s modifier to see the log output of tests, e.g. py.test -s tests/test_vm.py
  3. You can customize the level of VM logging detail by modifying PBLogger in processblock.py

Logging:

Please use the logging module for logging.

For basic, verbose logging functionality, the following is sufficient (adjust level to your needs)::

import logging

logging.basicConfig(format='[%(asctime)s] %(name)s %(levelname)s %(message)s', level=logging.DEBUG)
logger = logging.getLogger(__name__)

If you need a more advanced setup, have a look at the python docs

Easy Debugging:

The eth.py script, understands a command line flag for easy debugging, e.g.:

pyethereum/eth.py -L pyethereum.wire:DEBUG,:INFO ...<other args>

will set the log-level for wire to DEBUG and the root logger to INFO.

pyethereum/eth.py -L :DEBUG ...<other args>

logs everything to the console.

Monkey patching

bin/pyeth tries to import a module named pyethereum/monkeypatch.py. You can use monkey patching to temporarily introduce alternate control flow e.g.

"Monkey Patch Example"

import pyethereum.packeter
pyethereum.packeter.Packeter.CLIENT_VERSION += '/YourName'

# set processblock log details
import pyethereum.processblock as pb
pb.pblogger.log_state_delta = True
pb.pblogger.log_ops = True

# write failed blocks to disc
import pyethereum.utils as utils
orig_verify = pb.verify

def log_verify(block, parent):
   res = orig_verify(block, parent)
   if not res:
        pb.logger.debug('### VERIFICATION FAILED ### %r', e)
        f = os.path.join(utils.data_dir, 'badblock.log')
        open(f, 'w').write(str(block.hex_serialize()))
        print block.hex_serialize()
    return res
pb.verify = log_verify

# import other patches
import blockfetcherpatch
Clone this wiki locally