duneanalytics / duneanalytics/evm.codes

feat: Add support for Vyper in the Playground

Open
#407 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
827
Forks
199
Avg merge
15m
Merged PRs (30d)
1

Description

Description

Currently, evm.codes is the gold standard for interactive EVM opcode debugging, but it is primarily focused on Solidity and Yul. As Vyper remains a critical language for Ethereum (powering protocols like Curve and others), adding Vyper support would make this tool the ultimate cross-language playground for the ecosystem.

The Challenge: Python in the Browser

Since Vyper is a Python-based application with specific dependencies, running it in a browser environment requires a way to execute Python code without a backend. I have been researching ways to achieve this and would like to propose an implementation strategy.

Proposed Technical Approaches

To run the Vyper compiler client-side, we could utilize one of the following:

Pyodide (WASM): (Recommended) A WASM-based CPython interpreter. It is robust, handles complex dependencies well, and can be isolated in a Web Worker to prevent UI blocking.
Brython: Transpiles Python to JS at runtime.
Skulpt: A pure JavaScript implementation of a Python interpreter.

Given that Vyper relies on specific libraries (like ast and semantic-version), Pyodide seems the most viable for a high-fidelity compilation experience similar to the existing soljson.js workflow.

I would like to implement this!

I am highly interested in carrying out this work. My goal is to create a seamless experience where switching the language dropdown to "Vyper" initializes a Vyper-specific worker, compiles the source to bytecode, and feeds it directly into the existing EVM emulator.

I’ve been exploring the site's architecture and would appreciate any guidance on the preferred way to integrate this into the existing Playground component.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the existing Playground component and tracing the current soljson.js workflow. Compare Pyodide, Brython, and Skulpt against Vyper's stated dependencies and browser constraints. Done means selecting an integration approach, adding the Vyper language path, compiling source client-side, and feeding bytecode into the existing EVM emulator.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, typescript, wasm
Domain
blockchain, compilers, frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.