---
# System prepended metadata

title: EE Tooling

---

# EE Tooling

The plan is to take an iterative approach to the development of EE Tooling.  Each iteration will begin by looking at the existing process, creating a plan to address existing issues and defining a worksplit.

## Iteration 1

### Current EE Development Experience 

1) Pick a language: Rust, Assembly Script, C, C++, etc
2) Write the code for your EE:
    i. define memory layout: SSZ, Solidity-style, etc
    ii. define proof backend (localdb): Sparse Merkle Trees, Merkle Patricia Trees, Binary Trees, etc
    iii. define initial state and initialize the db 
3) Define a custom build process to generate wasm.
4) Execute in a runtime:  Scout or eWasm-rt

### Issues

1) The entire process is unstructured and makes for a confusing developer experience
2) There are virtually no support libraries for writing EEs.
3) The build process for C,C++,Rust to Wasm is different for each langage and require varying levels of expertise.
4) Generating proofs to execute tests is cumbersome and can be abstracted

### Plan

1) This issue can be addressed by beginning the process of defining more of a structured workflow for coding -> building -> testing
2) Start with a simple transfer EE that has a single choice for a memory layout and proof backend.  Hard code state initialization for this particular configuration.
3) The Test Framework (TF) should automate as much of the process for:
    - EE defined in Rust -> wasm
    - building the EE Wrapper (how the TF interacts with the EE) as a shared library that the TF can import
    - loading the EE Wrapper into the TF, sending EE tests to EE Wrapper
    - Taking the resulting blob & proof from the EE Wrapper, wasm code and sending it to the runtime.

The following diagram is meant to represent the process described above:


![](https://i.imgur.com/nC8uUHX.jpg)

We are intentionally limiting each paramter to a single choice so that we can begin to flesh out how the TF will work and how it fits into the workflow.


#### Worksplit

*Matt*
* Create a transfers EE
* Define wrapper
* Write tests

*Jonny*
* Create test framework
    * Support only Rust → Wasm (initially)
    * Communication with Sim Node
* Create a dummy EE to test functionality


#### Backlog for Iteration 2

- Define additional support libraries for different proof backends, memory layouts, etc.
- Experiment with how these support libraries are made available to EE developers.  Will they explicitly import crates?  Should we make a registry of libraries?
- Simplify the build process for Assembly Script, C, C++ to wasm by adding explicit support in the TF






