An example of a snippet

What it does

The scripting layer Ethereum was missing. A Solidity implementation of the EVM deployed as an Identity contract so you can run any Solidity code just like you could if you had a REPL.

Sol.tty is an easy way to script multiple transaction calls together and send them in a single transaction.

Ideal for saving gas by batching transactions together, writing one-off scripts and codifying specific transaction behavior in a reusable format.

An example of a snippet

How we built it

There are a couple of steps involved in making this:

  • A factory contract that
    • Acts as a registry where we map wallet addresses to Identity contracts
    • Deploys new identity contracts if needed
  • Identity contract that
    • Has a full implementation of the EVM (bytecode parsing and OP code evaluation)
    • Accepts bytecode and a function selector and passes it to the EVM implementation to be executed
  • Use solcjs on the front-end app to compile the snippet into bytecode
  • Sending the compiled bytecode to the Identity contract

Challenges we ran into

  • Implementing the EVM itself (all of the OP codes) while keeping the gas usage low

Accomplishments that we're proud of

  • Implementing the EVM inside the EVM
  • Our own Stack implementation used by our embedded VM
  • The idea of writing an on-chain REPL

What we learned

  • Some of the internals of the EVM itself




Built With

+ 2 more
Share this project: