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.0a2.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.0a2-py3-none-any.whl (580.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vyper-0.5.0a2.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.0a2.tar.gz
Algorithm Hash digest
SHA256 c92629dc80490eafd008ef9b6b969ced60545c27000d9862a3489a6d1d537cba
MD5 02d8fba2bae46520c6195759cf308321
BLAKE2b-256 b50c171e9f717225f3f8f5d25e15ccce9bc1031b1622eb7145fa46f09c3c7996

See more details on using hashes here.

Provenance

The following attestation bundles were made for vyper-0.5.0a2.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.0a2-py3-none-any.whl.

File metadata

  • Download URL: vyper-0.5.0a2-py3-none-any.whl
  • Upload date:
  • Size: 580.6 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.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 fce90ee21a85ca487a8abc20ac90e25b2fbc4dc441433bb23fb698eed20aa1e8
MD5 1c6f784db47ad7d4ce7d5970ea6990b8
BLAKE2b-256 142f3aa5431c47a0f58e4790f77158eee014ebce9d0b9a9272dc52e0ff76dc5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for vyper-0.5.0a2-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