---
# System prepended metadata

title: 'EPF: Cohort 4 - Week 9'
tags: [Compilers, Ethereum Protocol Fellowship, Week9, ETK, EPF, Ethereum]

---

This week, my work was mainly focused on finishing the assembler simplification I talked about last week. 

In the first instance I started working on a fairly basic but not very efficient simplification, which can be seen in [PR #132](https://github.com/quilt/etk/pull/132). From the text of the PR itself it reads:

> This is a WIP of the assembler simplification.
The main idea is to drop the use of the pending vector that accumulates bytecodes until the definition of a label is reached.
>
>There is still a lot to optimise, but the general idea is as follows:
>
> - Scan the code to identify labels and macros (surely this can be removed).
> - Process the code in its entirety, expanding macros where possible and saving label positions as they appear.
> - A final pass to concretise all the labels, assigning them their corresponding value.
>
>As I said before, this is still a work in progress, as I don't think it's necessary to do three passes through the code.


However, this first approach gave me a deeper understanding of how the assembler works, and I noticed that the simplification in question could be tackled without the need for several of the operations used in the previous PR. Therefore, I decided to tackle the problem from scratch again and that is how [PR #133](https://github.com/quilt/etk/pull/132) was born. We can see the basic ideas of this implementation from the text of the PR itself:

> This PR simplifies the operation of the assembler, mainly by removing the need to maintain a pending state and to return the assembler to its original state in certain situations (which caused [issue #124](https://github.com/quilt/etk/issues/124)).
>
> The main changes include:
> 
>
> - The creation of two structs, PendingMacro and PendingLabel, which store information about the macros and labels used before they were defined, as well as their relative position in the code.
> - Some push operations have been changed to take an option as parameter, and if this is not None, to act more like an insert than a push (useful for example to insert the calls to the pending macros).
>
>Also, issue #124 has been fixed and the corresponding test added.
>
>All tests should pass successfully. However, I would like to test the new assembler a bit more by writing some code (e.g. following @lightclient 's recommendation and writing an ERC-20 implementation using ETK) before merging it.
>
>In case you don't find it necessary, it can be merged right now.


As mentioned in the same text, this PR also solves [issue #124](https://github.com/quilt/etk/issues/124), which was in the list of "possible tasks after EOF" that I talked about with lightclient.

While all the tests pass correctly, I'm interested in testing the code a bit more by implementing some short example code, like an ERC20, which can also serve to add to the examples section of the documentation, which is empty at the moment.

___________________

So, the tasks for next week are:

- Implement a version of the ERC-20 standard in ETK to add to the list of examples and, by the way, look for possible bugs in the assembler.

- Follow up on the EOF implementation and the possible modifications we were going to make to solve the opcode renaming/deprecation issue I talked about a few weeks ago.