Skip to content

evmts/tevm-monorepo

Repository files navigation

A complete toolset to build Ethereum applications in JavaScript

CI NPM Version Tevm Downloads EVMts (0.x.x) Downloads Minzipped Size

tevm-monorepo

Tevm brings first class JavaScript support to ethereum to enable devx and use cases previously not imagined.

Features

✅  EVM simulations directly in a JavaScript evm. Run any ethereum tx locally in the browser and node.js
✅  forking akin to anvil --fork-url
✅  Solidity scripting inspired by foundry scripts. Run solidity in JS and run JS in solidity. You can even do wild things like write an http server in solidity
✅  Compiles contracts in JavaScript via importing solidity files. No more copy pasting abis or complicated build steps
✅  Extensions for usage with Viem, Ethers.js, Next.js, and Express.
✅  EVM Tracing (coming in upcoming release)
✅  Http handlers for running as a server in tests or backends
✅  Full support for the ethereum JSON-RPC api and anvil_ api

Tevm runs in all environments

Visit Docs (under construction) for docs, guides, API and more! 📄

Code example

  1. Write a solidity script HelloWorld.s.sol
// SPDX-License-Identifier: MIT
pragma solidity >0.8.0;

contract HelloWorld {
    function greet(string memory name) public pure returns (string memory) {
        return string(abi.encodePacked("Hello ", name, "!"));
    }
}
  1. Import the solidity file into a JavaScript or TypeScript file. No need to compile it.
import { HelloWorld } from './HelloWorld.sol'

console.log(HelloWorld.abi)
console.log(HelloWorld.bytecode)
  1. Initialize a Tevm memory client and execute your Script using the tevm.script action
import { HelloWorld } from './HelloWorld.sol'
import { createMemoryClient } from 'tevm'

const client = createMemoryClient()

const result = await client.script(
  HelloWorld.read.greet('World')
)

console.log(result.data) // Hello world!

This is just a small subset of what Tevm offers. See docs for more information.

Contributing 💻

Contributions are encouraged, but please open an issue before doing any major changes to make sure your change will be accepted.

See CONTRIBUTING.md for contributing information

License 📄

Most files are licensed under MIT license. There are some files that are copied from ethereumjs that inherit the MPL-2.0. These files are individually marked at the top of the file and are all in the @tevm/state @tevm/blockchain and other packages that wrap ethereumjs libraries.