A complete toolset to build Ethereum applications in JavaScript
Tevm brings first class JavaScript support to ethereum to enable devx and use cases previously not imagined.
✅ 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! 📄
- 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, "!"));
}
}
- 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)
- 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.
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
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.