Skip to main content

Vyper: the Pythonic Programming Language for the EVM

Project description

Build Status Documentation Status Discord Telegram Twitter

PyPI Docker

Coverage Status Language grade: Python

Getting Started

See Installing Vyper to install vyper. See Tools and Resources for an additional list of framework and tools with vyper support. See Documentation for the documentation and overall design goals of the Vyper language.

See learn.vyperlang.org for learning Vyper by building a Pokémon game. See try.vyperlang.org to use Vyper in a hosted jupyter environment!

Note: Vyper is constantly evolving, use with care and understand the risks associated with smart contract development.

Installation

See the Vyper documentation for build instructions.

Compiling a contract

To compile a contract, use:

vyper your_file_name.vy

generate bytecode

vyper -f bytecode file-name.vy > file-name.bin

generate abi

vyper -f abi file-name.vy > file-name.abi

There is also an online compiler available you can use to experiment with the language and compile to bytecode and/or IR.

Note: While the vyper version of the online compiler is updated on a regular basis it might be a bit behind the latest version found in the master branch of this repository.

Contributing

  • See Issues tab, and feel free to submit your own issues
  • Add PRs if you discover a solution to an existing issue
  • For further discussions and questions, post in Discussions or talk to us on Discord
  • For more information, see Contributing

Contributing Code

Setup

uv (recommended)

Make sure you have uv installed

  1. Clone this repo and cd into it
  2. Run git fetch --tags git@github.com:vyperlang/vyper.git to get the tags necessary for version inference
  3. Run uv sync
  4. Run source .venv/bin/activate to activate the virtual environment
  5. Run vyper --version to verify the setup
  6. (optional) Run git config blame.ignoreRevsFile .git-blame-ignore-revs to improve git blame

pip

Make sure you have pip (version 25.1 or above), setuptools, and pytest installed

  1. Clone this repo and cd into it
  2. Run git fetch --tags git@github.com:vyperlang/vyper.git to get the tags necessary for version inference
  3. Run python -m venv .venv to create a virtual environment
  4. Run source .venv/bin/activate to activate it
  5. Run make init to install the main dependencies
  6. Run make dev-init to install the dev dependencies
  7. Run vyper --version to verify the setup
  8. (optional) Run git config blame.ignoreRevsFile .git-blame-ignore-revs to improve git blame

Commands

  • vyper path/to/file.vy to run your local copy of the compiler
  • pytest to test your changes Useful pytest flags: * -x: Fail test run on first test failure * --instafail: Show reason for test failure directly, instead of at the end of a test run * --disable-warnings: Hide warnings which occurred during tests
  • make mypy to type check your changes
  • make lint to check your files are correctly formatted (also runs mypy)

Other Tips

Checking performance

To run a python performance profile (to find compiler perf hotspots):

PYTHONPATH=. python -m cProfile -s tottime vyper/cli/vyper_compile.py "$@"

The utility timer functions timeit, profileit and cumtimeit are available in vyper/utils.py.

Getting call graph

To get a call graph from a python profile, install gprof2dot and xdot, and run it like gprof2dot -f pstats stats | xdot -. (See https://stackoverflow.com/a/23164271/).

Testing with hevm

Install hevm by downloading it from the releases page (https://github.com/ethereum/hevm/releases/latest) and making sure it is in your PATH. hevm tests can be enabled with --hevm flag, and hevm tests can be selected with the -m hevm marker. For instance, pytest -m "hevm" --hevm.

Fuzzing tests

Fuzzing test are very slow, so they are not run by default. To run them, use pytest -m "fuzzing".

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vyper-0.5.0a3.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vyper-0.5.0a3-py3-none-any.whl (617.1 kB view details)

Uploaded Python 3

File details

Details for the file vyper-0.5.0a3.tar.gz.

File metadata

  • Download URL: vyper-0.5.0a3.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vyper-0.5.0a3.tar.gz
Algorithm Hash digest
SHA256 a0712e52b4b155324b298191db74790ad91707bcffff25fa280fcf9b32f7acdb
MD5 47cd2fc4f3d360566408ff7fb10b95d5
BLAKE2b-256 38c07ddb8d16e80631bf02f8cca51f428c0fbd3384b1f16fc35ed698b3eac326

See more details on using hashes here.

Provenance

The following attestation bundles were made for vyper-0.5.0a3.tar.gz:

Publisher: release-pypi.yml on vyperlang/vyper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vyper-0.5.0a3-py3-none-any.whl.

File metadata

  • Download URL: vyper-0.5.0a3-py3-none-any.whl
  • Upload date:
  • Size: 617.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vyper-0.5.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 b266e26f441582419350f8ba94abdbfce486c0b813c22e59e6ef92bc37747268
MD5 2942d7df2226b8082e182654aa0a4f4e
BLAKE2b-256 13b49600200f0980e9e057b6e776b5c940ff35d5b56a9da72115083863ea3b6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vyper-0.5.0a3-py3-none-any.whl:

Publisher: release-pypi.yml on vyperlang/vyper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page