What proposal are you building?
EVMcrispr is a powerful tool that combines a command-line interface with a Javascript library to interact with Aragon DAOs. With it, you can bundle many DAO operations into just one script, generating a singular transaction/vote.
Why did you decide to build it?
There are more than 2,000 AragonOS DAOs on Mainnet, with over $500 million of total value locked, with major governing protocols such as Curve, Badger, or NFTX. On top of that, there is an emerging ecosystem of DAOs that are being deployed in other networks such as Gnosis Chain, where Gardens is taking the AragonOS framework to the next level.
All those DAOs need DAO tooling for their continuous operation, and many of them have already made use of EVMcrispr at least once:
- CurveDAO used it to upgrade its voting app implementation contract.
- NFTX is using it to install a new voting app with a longer vote time and rewire all the ACL permissions to go through it.
- 1Hive is actively using it on their dapp for all their Gardens and also used it to claim their ENS airdrop and transfer the funds of their mainnet DAO.
- Giveth used it to replace the Unipool contract for another one in their Gardens DAO, and they are using it each time they send GIVbacks.
- TECommons used it for minting and burning tokens, and for migrating to a gardens DAO and installing a bonding curve.
- BrightId is using it to change the parameters on their garden’s conviction voting app, and will use it to install the BrightId gatekeeper as an ACL oracle.
- Agave used it to remove the vesting of some of their seeds and transfer funds from their agent to many contributors.
Funding the improvement and documentation of EVMcrispr, Aragon is supporting their legacy DAOs while it can create new products such as Zaragoza. It also contributes to the development of EVM script tooling, a very promising technology that is finally accessible to Aragon thanks to the development of EVMcrispr and the EVMCL Command Language.
Technical Details of the Project
EVMcripsr is a library that can be used to wrap many actions in one vote of an AragonOS DAO, lowering gas costs and dramatically improving the DAO management experience. Between the available actions, you can find installing new Aragon apps, granting or revoking permissions, calling app functions such as minting tokens, withdrawing funds, etc. It works with both AragonOS v4 and v5, supporting complex app forwarding paths. The repo can be found at:
This tool also pours a generous helping of syntax sugar over many aspects of creating Aragon DAO actions, including:
- Exposed custom commands to interact with the Kernel, ACL, and Agent (those are
install
,upgrade
grant
,revoke
, andact
). - Access to DAO apps by their AragonPM names, instead of their addresses.
- Easy aliasing of DAO AragonID names.
- Exponential number notation, making token decimals and percentage calculations effortless.
- Notation for time periods such as minutes, hours, days, weeks, and years with automatic calculation into seconds.
We plan to introduce the following new features:
- Variables. We will be able to store data to be used later in the script.
-
Helper functions. We will be able to use the following helpers within the scripts:
-
@calc(expression)
- Calculates the result of a mathematical expression. Example:@now+5m
will return the time 5 minutes from now. -
@fetch(url,jsonpath)
- Fetchs the content from an URL and parses it as JSON or returns it as a string. The content can be filtered using JSONPath. -
@get(entity, call)
- Calls the contract view function. -
@id(content)
- Hashes the content. -
@ipfs(content)
- Pins the content on IPFS and returns the hash. -
@now
- Returns current date. -
@params(entity)
- Same as@params.oracle(entity)
for now.-
@params.oracle(entity)
- Returns a Params object that can be composed with other params or passed directly as a permission param.
-
-
@sender
- Returns the address of the signer. -
@token(symbol)
- Returns the address of the specified token.-
@token.balance(symbol,holder)
- Returns the balance of a token holder for a specific token.
-
-
- Autocompletion and better highlighting. EVMcrispr terminal has the capability to become a very powerful tool for creating EVM scripts.
- EVMcrispr simulator. We will be able to simulate the scripts before executing them.
A documentation portal will also be constructed using the Docusaurus framework. This will be the hub of knowledge for how to use EVMcrispr with most Aragon apps in existence. This documentation portal will break down how to transcribe functions within Aragon apps into executable EVM scripts within EVMcrispr. We will also include a greater overview of the app, syntax-sugar info, and how to generate scripts for custom Aragon apps.
Previous work in the same field as EVMcrispr:
These are the most advanced tools we’re aware of that allow users to merge multiple actions into a single proposal:
- Aragon Client built-in console. It is the most similar work to EVMcripsr, although it is quite limited to creating multi-action votes and does not have helpers to parse parameters, making it difficult to do complex operations.
- 1hive node installer. Installer written in javascript and executed from the console. It has been used to install Aragon applications with complex configurations and offers some parsing helpers, but the experience of installing a new app or doing any other operation is still bad.
- 1hive app installer. It is an end-user tool with a UI interface that works pretty well but can only install pre-configured applications, which are still difficult to configure.
- 1hive transactions app. Can create votes with multiple actions for minting, burning, or transferring tokens. It works well for these specific purposes, but it is not a general tool that can create any kind of vote.
Limitations or risks of this proposal.
Unfortunately, it is difficult to adapt EVMcrispr to work with the Aragon Govern framework, as it uses a different programming interface for the ACL and a different subgraph. We plan to make EVMcrispr more flexible in the future, being compatible with more frameworks, but we can not commit to integrating it at this stage of development.
On the other hand, EVMcrispr will be a relevant piece of software in the migration from AragonOS DAOs to Zaragoza DAOs, as it can potentially pack up all the assets of a DAO and send them elsewhere.
Roadmap and Deliverables
We are planning to release one version per month. This is our roadmap:
- v0.4.x (May 2022):
- Introduce environment variables.
- Introduce
@sender
,@token
and@token.balance
helpers.
- v0.5.x (June 2022):
- Restructure EVMcrispr library API.
- Introduce
@params.oracle
,@id
, and@now
helpers.
- v0.6.x (July 2022):
- Retrieve external contracts ABI from external sources (i. e. etherscan).
- Introduce
@ipfs
,@calc
, and@get
helpers.
- v0.7.x (August 2022):
- Allow multi-transaction sending scripts, so we can create many votes in many different DAOs in just one script.
- Allow automatic chain switching.
- v0.8.x (September 2022):
- Improve code highlighting and auto-completion in the EVMcrispr terminal. We are using the same editor as VS Code, which is highly configurable and will allow scripts to be written easier and faster.
- v0.9.x (October 2022):
- Simulate the EVM scripts and notify the user if it will succeed before sending it.
- Introduce the
log
command that provides more information about the simulated changes (token balances, app parameters…) during and after the execution of the script.
Team Information
Names and/or usernames, preferred contact method, and/or relevant social links for team members (Twitter, Github, Aragon Forum, etc.):
-
@sembrestels (Sem)
- Discord: sem
#0161
- Github: sembrestels (Sem) · GitHub
- Discord: sem
-
@PJColombo (Elessar)
- Discord: elessar.eth#7945
- Github: PJColombo (elessar.eth) · GitHub
-
@mitch (Mitch)
- Discord: divine_comedian#5493
- Github: divine-comedian (Mitch) · GitHub
- Medium: https://divine-comedian.medium.com/
Skills and previous experience in related or similar work:
Sem and Elessar are two software engineers that have been working with the Aragon codebase for more than two years.
- One of Sem & Elessar’s first contributions to the Aragon DAO ecosystem was developing the Committees App, the first app that created new instances of other apps (installing a Token Manager and a Voting app for each DAO Committee). The app was funded by the Aragon Community Funding DAO (CFDAO).
- Sem led the migration of the CFDAO afterward to upgrade the proxies and convert the SAI into DAI using the agent. Looking back then, managing EVM scripts was already a thing.
- Sem and Elessar also coded the Transactions App, a tool that allows to mint tokens for multiple accounts in the Token Manager or sends funds to multiple accounts in the Finance app.
- Both have been active contributors of 1Hive and TECommons developing multiple Aragon Apps such as Conviction Voting, the Hatch app, the Augmented Bonding Curve app, and more recently the Superfluid app.
Mitch is a technical documentation writer that has been involved in many web3 projects including DAppNode, PrimeDAO, and DeFi Safety, and is part of the Giveth team and a TECommons community steward as well. This is some of the documentation work he has done:
- Drafted technical documentation for Dappnode and maintains the Giveth Documentation portal. He also has various articles on the Giveth Medium.
- Wrote many, many technical breakdowns of internal projects, and custom Aragon apps and tutorials within the TECommons forum.
Funding Information
We are requesting 70,002 USDC and $30,000 worth of ANT to complete the current roadmap of EVMcrispr.
We are requesting them in six payments of 11,667 USDC and $5,000 worth of ANT each, one per month after the release of each version.
The funds should be sent to 0x8790B75CF2bd36A2502a3e48A24338D8288f2F15
.
- 60,000 USDC will be used to release six minor versions of EVMcrispr, allocating 10,000 USDC to each one.
- 10,000 USDC will be used to fund the creation of a documentation site with a cookbook, compiling many examples of usage for EVMcrispr.
- $30,000 worth of ANT will be used to fund retroactively the three first versions of EVMcrispr.
On top of that, and as a requirement of the Executive Committee, an independent review will be performed after each deliverable. NFTX could fill this role receiving a direct payment from the Executive Committee of 6,000 USDC to the address 0x40d73df4f99bae688ce3c23a01022224fe16c7b2
(their Aragon DAO Agent) before the work starts.
Addendum
This is an example of how writing EVM scripts will look like using EVMcrispr in just a few months:
use eth 1hive # Use 1hive.aragonid.eth DAO on mainnet
forward token-manager voting {
# Claim ENS tokens
set $amount 100e18
set $delegator ZERO_ADDRESS
set $proof @fetch(http://ens.domains/proofs.json,$.domains[:193].proof)
set @token.$tokenlist https://tokens.uniswap.org
forward agent {
exec @token(ENS) claimTokens $amount $delegator $proof
}
# Transfer ERC-721 tokens (using Agent)
set $ens-registry-token 0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85
set $recipient @sender
set $token-id 0
forward agent {
exec $ens-registry-token safeTransferFrom agent $recipient $token-id
}
# Transfer ERC-20 tokens (using Finance)
set $reference Migrate 1hive funds
exec finance newImmediatePayment @token(DAI) $recipient @token.balance(DAI,agent) $reference
exec finance newImmediatePayment @token(ANTv1) $recipient @token.balance(ANTv1,agent) $reference
}
log The 1hive mainnet DAO will have `@token.balance(DAI,agent)` DAI and `@token.balance(ANTv1,agent)` ANT after the execution of the vote.
use gno:garden # Use garden.aragonid.eth DAO on gnosis chain
forward disputable-voting.open --$context @ipfs("Mint 1000 tokens and pair them with HNY") {
exec token-manager mint agent 1000e18
forward agent {
set $honeyswap 0x1C232F01118CB8B424793ae03F870aa7D0ac7f77 # Honeyswap UniswapV2Router02
set $daoToken @get(token-manager,token)
exec $honeyswap addLiquidity {
$daoToken, # TokenA
@token(HNY), # TokenB
@token.balance($daoToken,agent), # amountADesired
@token.balance(HNY,agent), # amountBDesired
0, # amountAMin
0, # amountBMin
agent, # to
@calc(@now+10m) # deadline
}
}
}
log The agent will have `@token.balance(HNY,agent)` HNY after the execution of the vote.