Financial Proposal: EVMcrispr, mutating DAOs' DNA 🧬

These are excellent news; thanks for your confidence. We are thrilled for the opportunity to continue with the development of EVMcrispr, and we hope it will provide the tools to create more complex DAOs and do more complex interactions with the already established ones.

8 Likes

I find the proposal very interesting and quite useful. I am happy that this is already approved and the team can start working on it.

As a side comment I do see important to make it compatible with the new Aragon developments. I know this is not in the current roadmap and I understand the reasons, however I just want to point it out so the team can take this into account, if possible.

Adding multicall support to EVMcrispr would be quite an important feature for being agnostic to the use case. This way we can probably integrate it in the coming Aragon APP and the current offchain governance solutions we are working on (Vocdoni and zkMultisig).

Congrats @sembrestels !

3 Likes

i want to highlight this thread because it shows stakeholder driven development done with evm-crispr

when stakeholders are able to learn and contribute to the community the value of their contributions can’t be overstated - thanks to the team building this & the Aragon team for reviewing and approving

2 Likes

This sounds like a great tool. I really like the CRISPR reference. We should chat sometime. It’d be cool to get to know all of you.

We are about to release the 0.4.x version of EVMcrispr, focused on introducing two fundamental building blocks for any programming language: variables and “get” functions (we call them helpers).

The current 0.3.x branch has the codename “emerging good” as it was the name chosen by the Giveth community, which sponsored EVMcrispr at the beginning.

We would like ask the Aragon community how we call the v0.4.x branch. The chosen name will appear in different places, including in the subtitle of the EVMcrispr Terminal.

  • “vivid memories” - because of the introduction of variables
  • “helpful discovery” - because of the introduction of helpers
  • “semantic conciseness” - because the language is more concise

0 voters

1 Like

May 2022 EOM Report

@daniel-ospina @lee0007 @fartunov

Deliverables

We released the EVMcrispr v0.4.0 with the following features:

  1. We introduced the environment variables feature. - Completed
    • We introduced the new command called “set”, which stores in memory a specified value that can be used later in the script.
  2. We introduced @me (formerly @sender) , @token and @token.balance helpers. - Completed
    • We introduced the @me helper that allows using the transaction sender address in the script.
    • We also introduced the @token(SYM) helper. We can use it to retrieve the address of a token from its symbol, fetching it from the uniswap default tokenlist. We can define a different tokenlist by changing the $token.tokenlist variable.
    • The @token helper has a sub-helper: @token.balance(SYM,account). We can use it to retrieve the token balance of a particular account.
  3. We started a EVMcrispr documentation website. - Ongoing

We can combine the new features in this example that requests all the funds of the vault of a DAO:

connect <your-dao> token-manager voting
set $token.tokenlist https://tokens.honeyswap.org
exec vault transfer @token(HNY) @me @token.balance(HNY,vault)
exec vault transfer @token(WXDAI) @me @token.balance(WXDAI,vault)
exec vault transfer @token(ANTv2) @me @token.balance(ANTv2,vault)

Additional deliverables

  1. We reduced the test suite execution time from more than 2 minutes to only 50 seconds. - Completed
  2. We reduced the package bundle size from ~148 kB in v0.3.8 to only ~14.8 kB in v0.4.0. - Completed
  3. We introduced the “new token” command, which creates a MiniMe token, and we can use it when installing a new token manager. - Completed
  4. We added support to Wallet Connect. - Completed
  5. We added a new footer on the terminal website, with the text “Sponsored by Aragon” and the other organizations that support or previously supported us. - Completed
  6. We started to refactor the typescript library to decouple the EVM scripting and AragonOS logic. - Ongoing
  7. We now expose ethers.js contracts for each AragonOS app in a DAO. - Completed
    • They can be accessed from the EVMcrispr instance using the method “evmcrispr.app(appName)”.
  8. We put together the evmcrispr library and the terminal frontend in just one repo. This move makes forking and modifying evmcrispr much easier for external developers. - Completed
  9. We started using more modern technologies that make the website very fast: pnpm and vite. - Completed
  10. We registered evmcrispr.eth ENS, and EVMcrispr frontend is now available under https://evmcrispr.eth.limo. - Completed

Funding Request

  • USDC (90%): $15,000
  • ANT (10%): $1,667

We request a relation of 90% USDC / 10% ANT instead of 70% USDC / 30% ANT because of the Financial Guild Proposal to reduce the spending in ANT.

Next steps

Aragon will host an Ask Me Anything (AMA) session with us on the 10th of June , and we would love to answer as many questions as we can on how to use EVMcrispr. We will monitor the posts asking questions about DAO architecture on https://support.aragon.org and will do our best to bring some example scripts to explain what is possible to do today.

We also are going to start working on the next version (v0.5.0), which will include the following:

  • EVMcrispr library API refactoring.
  • Introduction of @params.oracle , @id , and @now helpers.
  • And everything else we can do during the next month!

Thanks to everyone who has shown interest during these months in our product. We can only hope to live up to expectations and make a tool that serves all your DAO-ops needs.

5 Likes

Thank you, look forward the NFTX review

2 Likes

Amazing work Sem! So many additional deliverables. Snagging evmcrispr.eth domain FTW.

Always enjoy scrolling through the frequent commits. I wish I could be equally productive as a dev each day.

Happy to sign off on this report on behalf of NFTX :white_check_mark:

EVMcrispr has been a big help for us and will continue to be even more so in the future I expect, considering all the ongoing improvements being made. Appreciate the work and concise writing as always!

5 Likes

ESD General Meeting Monday 18 April UTC 1900: Thank you @gausman for you review, which is the basis upon which the ESD are unanimously agreed to release the next round of funding, provided ultimate signoff from the Tech Committee @voronchuk @nivida @p4u

Scout rewards: @brent @alibama you are nominated by the authors and eligible to receive Scout Funding for your support in the development of this proposals. Please submit your fee notification as per the process here
@fartunov @daniel-ospina
cc Finance @Ricktik6

2 Likes

@lee0007 I don’t have any major remarks. Making a full-scope security audit of the 3rd party developed code is out of the mandate of the technical committee. While most of the code is a frontend, it’s potentially possible to inject maliciously intended injections into produced scripts. Validation that there are no such injections should be done by a professional auditor. From a user perspective, I like the product and the first milestone seems to be delivered in time.

1 Like

Thanks for your reviews @gausman, @lee0007, and @voronchuk! It feels fantastic to have unlocked this first milestone together.

The following two dates to take into account for EVMcrispr are:

  • We will have our first AMA on the 10th of June .
  • We plan to release the v0.5.0 on the 25th of June .

In regards to the security concerns, thanks for the heads up @voronchuk. It is imperative to be well-advised when using EVMcrispr, although you can have a little bit of peace of mind knowing that we manually publish every stable version of the app and DAO voters have tools to decode the vote scripts at their disposition.

Securitized frontend:

Each version of the EVMcrispr frontend is cryptographically signed and published to ENS. This means that when accessed through the ENS domain, it sends back a trustworthy and untampered version of the frontend.

The major problem we still face is that browsers do not properly manage ENS domains, so users need to attach the .link or .limo to them, making the sites vulnerable again to domain hijack attacks. Being hacked this way is unlikely, but not impossible.

And remember, we can always download the repo from Github or the site from IPFS and run it locally.

Decoding scripts:

Even if there was injected code within the script, the vote created still needs to be ratified by the DAO token holders. This process is done using the Aragon Client, an independent dApp that shows a description for each action that the execution of the vote is going to perform.

It is still obviously problematic that sometimes the Aragon Client does not detect the proper description and shows a “No description” field, but the vote calldata can still be decoded to see if it does what it says it should. We will release better tooling for doing that in the next version.

In conclusion, we must take security very seriously in a tool that interacts with DAOs that hold millions of dollars worth in assets in their vaults. Therefore, we use best practices to reduce the attack surface when using EVMcrispr. However, users must actively check what they are signing and/or voting, know what they do, or be advised appropriately.

4 Likes

@Ricktik6 let’s do this optimistically, please include the respective payment in the current payment cycle unless someone from the tech sub-DAO specifically objects.

cc: @lee0007 @daniel-ospina

2 Likes

The upcoming version of EVMcrispr is almost ready, and as the previous month, we would like to let the Aragon Community choose the code name for EVMcrispr v0.5.x.

This version comes with significantly refactoring of the code, moving most of the AragonOS-related code to its module. This means that from now on, EVMcrispr can be used for more than just creating AragonOS votes. It is now a tool to create scripts that perform transactions to EVM-compatible blockchains, including AragonOS votes. So now we are closer to a more general tool that can be used to claim your farming rewards or send funds to multiple addresses, and both things can be done from an address or a DAO.

Knowing that we ask for your help to name this milestone. The options are:

  • “wonderful possibilities” - because this release opens the door to future integrations
  • “total rewiring” - due to the major refactoring the code experimented
  • “unplugged expressions” - because we do not need to be plugged to a DAO to use EVMcrispr anymore

0 voters

3 Likes

June 2022 EOM Report

@daniel-ospina @lee0007 @fartunov

Deliverables

We released the EVMcrispr v0.5.0 “unplugged expressions” with the following features:

  1. We restructured the EVMcrispr library in modules to make it easier to extend with other frameworks in the future - Completed
    • We separated the code between the std (standard) module and the aragonos module.
    • The std module contains the generic exec command and the @token, @me, @id, and @date helpers.
    • The aragonos module contains all the Aragon-specific commands (connect, install, upgrade, grant, revoke, exec, and act) and the @aragonEns helper.
  2. We introduced @id and @date helpers. - Completed
    • The @id helper can be used to obtain the hash of a string
    • The @date helper is a more powerful helper than the @now helper (that we will not need to implement):
      • We can use @date(now) to get the current time
      • We can also use a date in ISO 8601 format to specify an exact date, for instance, @date(2022-02-02Z) to obtain the timestamp for 2nd February 2022.
      • We can also add or remove periods to those dates. Examples: @date(now,+3d) for three days from now, and @date(2015-07-30Z,-2y-4m) for 2 years and 4 months ago from the Ethereum genesis block date.
  3. We introduced major support to named parameters in commands. - Completed
    • New --oracle option in grant command, replacing the @params and @params.oracle helpers we had planned. It allows an EVMcrispr user to set up permissions only available when the oracle returns true. An excellent example of that is the 1hive token oracle Aragon app, which is an ACL oracle that returns true when the address that acts has a specific token.
      # grant any entity permission to create votes if they have a specific token
      grant ANY_ENTITY voting CREATE_VOTES_ROLE voting --oracle token-oracle.open
      
    • New --version option in command install, so we can choose to install a different version, not just the last one. Example:
      # install voting v1.0.0
      install voting:new @token(HNY) $support $quorum $duration --version 1.0.0
      
    • New positional options in command upgrade make it optional and allow to specify a specific version. Example:
      # upgrade voting to the latest version
      upgrade voting
      # downgrade voting to 1.0.0
      upgrade voting 1.0.0
      # upgrade voting to a different contract (be very careful with this one)
      upgrade voting 0x...
      
  4. (From 0.7.x deliverable) Allow multi-transaction sending scripts, so we can create many votes in many different DAOs in just one script. - Completed
    • This is the first version in which we can use EVMcrispr to execute any transaction in the blockchain, without having to be attached to a DAO. Do you want to claim and re-stake your Unipool rewards? Easy:
      # No DAO needed; these actions are performed directly from your address
      exec $contract getReward()
      exec $contract stake(uint256) @token.balance(@me)
      
    • You can also create many votes in the same script!
      connect dao1 token-manager voting (
         # <actions to normal Aragon DAO>
      )
      connect dao2 disputable-voting.open --context "Optional link" (
         # <actions to Gardens>
      )
      
    • On top of that, you can even interact with the DAO apps from your address without forwarding.
      connect dao1 (
         # Cast a vote on vote #1 directly from your address, voting yes
         exec voting vote 1 true true
      )
      

Additional deliverables

  • We researched how to properly create a Little Language (more known as Domain-Specific Language), and started implementing an interpreter to create an Abstract Syntax Tree. It will make it easier to interpret, highlight, and autocomplete the user scripts. - Ongoing
  • New option to command new to create DAOs: new dao <aragonId>. - Ongoing
    • It creates an empty DAO. Once available in the graph, you can install as many apps as you want and grant them permissions within a connect command.
    • Connecting to the DAO just after creating it does not work yet; it needs to be done in a different script.
  • New @aragonEns helper to find the addresses pointed by subdomains of aragonpm.eth and aragonid.eth. Real example used last week: - Completed
    set $repo @aragonEns(hooked-token-manager-no-controller.open.aragonpm.eth)
    exec $repo newVersion(uint16[3],address,bytes) [2,0,0] 0x7cdB48CBF25F4f044eEaE83187E3825Ae301C93d ipfs:Qma2cVx7i9eTu9VSBexWVbfqeS1qwKc8zFFnwV4zrjTMUJ
    
  • We migrated the UI to use Chakra React components, which will make it easier to expand the frontend next to the subsequent iterations. - Completed

Funding Request

  • USDC (90%): $15,000
  • ANT (10%): $1,667

We request a relation of 90% USDC / 10% ANT instead of 70% USDC / 30% ANT because of the Financial Guild Proposal to reduce the spending in ANT.

Next steps

We will keep reading the Crafting Interpreters book from Robert Nystrom, and rebuilding EVMcrispr to be more efficient and powerful based on it.

We also are going to start working on the next version (v0.6.0), which will include the following:

  • Retrieve external contracts ABI from external sources (i. e. etherscan).
  • Introduce @ipfs, @calc, and @get helpers.
  • And everything else we can do during the next month!

Thanks to everyone who attended the AMA on 10th June; it was very cool to see that this project is taking traction!

4 Likes

Great work Sem! Everything coming along really nicely :rocket:

Happy to sign off on this again on behalf of NFTX :white_check_mark:

Thanks for the thorough overview. Some awesome features being added.

1 Like

1/3 approved cc @Ricktik6

2 Likes

Thank you @sembrestels!
Appreciate your validation @gausman
Approved 2/3 cc @Ricktik6

2 Likes

3/3 approved, thank you!

Another version is going to be released (v0.6.0) focusing on making it easier to interact with contract ABIs, IPFS, numeric parameters, and blockchain data in general.

How should we call it? I’m curious on what values do you feel more identified with.

  • “genuine courage” - we are what we do repeatedly, and we are courageous when our acts have part of our heart in them.
  • “fearless authenticity” - we can avoid lots of problems by not staying true to our principles, but staying with the majority won’t allow us to be ourselves.
  • “truthful deepness” - the truth is deep like a fractal; only truth can be zoomed in indefinitely and still be interesting.

0 voters

3 Likes

July 2022 EOM Report

@daniel-ospina @lee0007 @fartunov

Deliverables

We released the EVMcrispr v0.6.0 “fearless authenticity” with the following features:

  1. It reads the ABI from Etherscan API, so we do not need to know the entire function signature to use the exec command - Completed
    • If we want to use this feature, we need to set the $etherscanAPI variable with a valid API key.
    • Now, instead of writing the entire signature, we can write the function name. Example exec @token(WETH) withdraw 40 instead of exec @token(WETH) withdraw(uint256) 40.
    • It supports EIP1822, EIP1967, and other kinds of proxies.
  2. We introduced @ipfs, @calc, and @get helpers. - Completed
    • The @ipfs helper can be used to obtain the CID hash of a string that has been pinned in Pinata. To use this feature, we need to set $ipfs.jwt with the Pinata JWT key. Example: set $foo @ipfs(Hello world).
    • The @calc helper allows calculating big number expressions using +, -, *, and /. It takes care of the order of the operations and accepts environment variables. Example: @calc(2+8e18*13/$bar).
    • We can use @get to get any value exposed in a contract. Example: set $abi name():(string); set $var @get($weth,$abi). It calls the name function of the WETH contract and returns the “Wrapped Ether” string.

Additional deliverables

  • We have been working on an enhanced version of the interpreter, much more potent than the current one. It is still immature and needs much testing before its release, but it is already available at https://next.evmcrispr.blossom.software and this git branch. - Ongoing
    • It allows much more complex scripts, allowing DAO2DAO connections, or interacting with other protocols in the future.
    • It also encapsulates the commands and helpers in modules that can be loaded within the script, keeping the evmcrispr core functionalities much simpler.
  • We added a new raw command that allows sending a transaction to an address with a custom data field. - Completed

Funding Request

  • USDC (90%): $15,000
  • ANT (10%): $1,667

We request a relation of 90% USDC / 10% ANT instead of 70% USDC / 30% ANT because of the Financial Guild Proposal to reduce the spending in ANT.

Next steps

For the next version (v0.7.0), we will stabilize the new interpreter which will allow to create more complex and powerful scripts, while trying to make it as backward-compatible as possible with the current ones.

The new interpreter will be able to load modules, packages containing commands, and helpers that will make our life easier.

We will also introduce the switch command, allowing us to change our connected account or the chain in the middle of a script to operate with different chains and accounts.

4 Likes