Branchy Syntax = legit!
Hi everyone!
elessar here!
Sorry for the late release this month. It has been a hectic month and a lot of work has been done, but hopefully, the new features compensate for the delayed report.
August 2022 EOM Report - v.0.7.0 âBranchy Syntaxâ
@daniel-ospina @lee0007 @fartunov
This version comprises a complete refactoring and restructuring of the library.
Embrace modularity . The evmcl
command language (which is now called cas11 ) has been converted into a formal fully-fledged DSL (Domain-specific Language) comprise of composable and independent parser combinators that receive the raw cas11 script and produce the nodes (building blocks) of something called AST (Abstract Syntax Tree) which will be later on processed by an interpreter (the evmcrispr).
ASTs are pretty useful structures that facilitate the manipulation and processing of source code in a more consistent, non-ambiguous, and convenient manner.
The different commands and helpers have been moved to separated encapsulated modules following the separation of concerns principle. In this way, new web3 protocols can be supported and integrated more easily.
Deliverables
-
New
switch <network name or id>
command that allows you to dynamically switch the chain. -
New
load <module> [as <alias>]
command that allows you to import the modules containing a set of commands and helpers. At the moment, there are two modules:-
std
: the core module which is not required to import. It contains the following:- Commands:
load
,exec
andset
andswitch
. - Helpers:
@date
,@get
,@id
,@ipfs
,@me
,@token
and@token.balance
.
- Commands:
-
aragonos
: Aragon module that contains the following:- Commands:
act
,connect
,forward
,grant
,install
,new-dao
,new-token
,revoke
andupgrade
- Helpers:
@aragonEns
.
- Commands:
When loading a module, you have access to all its commands and helpers by prefixing the module name. For example, to use the
aragonos
module youâd do the following:load aragonos as ar ar:connect 1hive token-manager voting ( install agent:new grant voting token-manager ISSUE_ROLE voting )
Note an alias (in this case
ar
) has been set for the module. -
-
New call operator
<contractAddress>::<method>(<args>)
to call read-only contract functions. Example:load aragonos as ar ar:connect myDAO ( set $var1 token-manager exec token-manager::token() transfer(address,uint256) vault 2500e18 exec $var1::token() transfer(address,uint256) vault 2500e18 set $var2 @token(DAI)::decimals() )
It also supports chainable calls. Hereâs an example:
load aragonos as ar ar:connect myDAO ( set $var1 token-manager::token()::decimals() )
At the moment it only supports calls to functions that return primitive data types.
-
@calc()
helper has been deprecated in favor of native arithmetic expression operations that support priority parenthesis. Example:set $var1 (@token.balance(DAI, @me) * (5 - myContract::aMethodReturningNumber()))
. -
Complete support of nested expression structures (e.g. arrays, block command expressions, call expressions, helper expressions, etc).
-
Support of nested
connect
commands that allow you to define DAO-to-DAO operations scripts and have access to different organizationsâ apps inside a scope.
You can reference a different DAOâs app by their name, address or nesting index. The format would be as follow:_<dao>:<app-identifier>
.
Example:load aragonos as ar ar:connect mainDAO ( ar:connect subDAO tollgate token-manager voting ( # It grants mainDAO's voting app permissions to create votes in # subDAO's voting app. grant _mainDAO:voting voting CREATE_VOTES_ROLE # Here the nesting index "_1" is the same as "_myDAO". grant _1:voting token-manager MINT_ROLE ) )
-
The
forward <...path> ( <...commands> )
command is back. It allows you to customize the forward path by not having to define it in theconnect
command. This can be helpful when creating scripts that will be sent through a forwarding path composed of apps from different DAOs. Example:load aragonos as ar ar:connect mainDAO ( ar:connect committeeDAO ( forward _mainDAO:token-manager token-manager ( ... ) ) )
-
Option arguments can now be used in-between commands. Example
my-command --anOpt 1e18 anotherArg --anotherOpt 1e18 anotherArg
. -
Improved error handling logic that displays the location (line and column number) and type of the failed expression along with the error message.
-
Parser combinators implement error recovering logic which allows them to scan the whole script looking for the maximum number of syntax errors.
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 working on integrating the new library into the EVMcrispr terminal and improving the code highlighting and auto-completion of the editor (which will be easier to do now thanks to ASTs).
Weâll also keep polishing the library and fixing any possible edge case.
This brilliant project continues to have my 100% support for funding but ANT Holders are yet to commit to honouring legitimate funding allocations since S2 ESD funding was not approved. If you hold ANT I would highly recommend voting here Aragon Voice cc @sembrestels
Thank you for yet another month of valuable contribution! Waiting for @gausmanâs sign off before approving monthly payment
Very interesting, can you explain how this supports integration more easily?
This looks like great work! Thank you for such a technical update!
The current modules are two, std
and aragonos
. Future modules could be giveth
, superfluid
, uniswap
, safe
âŚ
A good example of the current structure of a module is std
.
- It has a main class that defines the name and loads the module helpers and commands.
- Every module helper is defined in a different file within the helpers directory.
- Every module command is also defined within a file, within the commands directory.
This structure is still in alpha, and is subject to heavy changes during the subsequent versions. Once we have a stable way to define modules, we will publish them on npm and apm, so other developers will be able to load their modules and define their custom commands and helpers.
The next module to integrate will probably be giveth
.
@daniel-ospina @fartunov Believe we do not need to continue the previous process of ESD approval as the funding for this project is now approved by Main DAO as per this vote cc @Ricktik6
Although no approval is required anymore, would still be great if you could share the September progress report @PJColombo @sembrestels
As we are currently in the last month of funding for this initiative, it would be great to receive a final overview report by the end of this month.
You could use this format for the last report (October report) Notion â The all-in-one workspace for your notes, tasks, wikis, and databases.
Hello everyone, the auto-completion feature (targeted for the end of September) took more time than we expected, and although huge progress has been made, we are going to delay its release to the end of October. We are also delaying the last release of this proposal (which includes simulations) to the end of November. This is why we are skipping Septemberâs monthly payment, so we will get paid when we release what we promised. Thanks for your understanding; the next version will help a lot with the user experience of EVMcrispr. We will tell you more about it in the following days.
Hi everyone! elessar here again!
This last version has taken a bit more time than expected. Weâve been a little bit busy with ETHBogota, ETHLatam and Devcon this month. Weâve had the opportunity to see old faces and meet some wonderful new people during these events as well as participating in the ETHGlobal hackathon where we ended up finalists
(you can check out the project here, if youâre interested
).
Anyway, we hope you like what this new version brings.
October 2022 EOM Report - v.0.8.0 âModular Consigliereâ
v0.8.0, as its name may suggest, is a user-center version that seeks to improve the terminal UX by providing new auto-completion features which offers contextual code completion suggestions that take into account the previous commands that youâve typed in as well as the current commandâs parameters to help you fill the next word.
Deliverables
- Commands and helpers suggestions based on the current imported modules.
- Method signature suggestions given a specific contract address.
- Specific identifiers suggestions based on the command and argument position being filled.
- Dynamic suggestions list that changes based on the previous commands.
- Code highlighting: commands, helpers, keywords and literals
- UI enhancements: wallet connection and error handling display.
Next steps
Weâll be working on the final version that offers transaction simulation features to to test the userâs scripts.
Weâll also keep working on improving the auto-completion feature by fixing possible bugs and edge cases and adding support to a couple of missing commands.
We are about to release the last version funded by this financial proposal. We are very thankful for everything we could build, thanks to Aragon. In this final version, we are introducing the long-awaited simulations.
Simulations fork the blockchain from a certain point (present or past) and perform fictional operations to see if there are âno glitches in the Matrixâ (no bugs in your script) before it is performed for real.
As usual, we request the community for the codename of this next version. These are the options:
- Morphean simulation - You will be able to simulate transactions and see if the outcome is what you expect.
- Intrepid daydreamer - You will be able to time-travel to the future or the past to explore the state of the blockchain.
- Endless construct - Your simulation, your rules, so you will be able to impersonate other addresses (including contracts) to make them do what you wish.
0 voters
We target November 26th for releasing it. Stay tuned.
November 2022 EOM Report
@daniel-ospina @lee0007 @fartunov
Deliverables
EVMcrispr v0.8.1
On November 17, we released a patch called EVMcrispr v0.8.1 with the following changes:
New Features:
- You can attach a script to the URL, which will be preloaded in the terminal (example).
- The
raw
command is reintroduced in this version. - New arithmetic operator for exponentiation (
^
) in mathematical calculations. - The Goerli network is now supported by the EVMcrispr and the aragonos module.
- The
exec
command can now process payable functions. - Gas is estimated by the wallet by default now.
- New
print
command. - New autocompletion suggestions for Aragon agents and tokens retrieved with the
@token
helper.
Fixes:
- Fix line endings in Windows. The new parser could not process multiline scripts in Windows due to how it treats line endings.
- Some numbers were not processed as BigNumbers, making some operations impossible.
- Network changes were not considered when processing the subsequent commands and helpers, making some operations fail.
- The call operator (
::
) can process view functions with an underscore in them (such astoken-manager::MINT_ROLE()
) - Fixes in the
set
command and@get
helper.
EVMcrispr v0.9.0
Today we release EVMcrispr v0.9.0, âmorphean simualtionâ, with the following new features:
- New sequential interpreter, which makes it easier to write scripts in which one operation depends on the result of a previous one.
- New
tenderly
module that can be used to fork the blockchain from a certain point, simulate transactions (from any address), and advance time. It introduces the following commands:-
fork
: Used to execute all the commands within a simulated blockchain fork from a specific block number and a specific address. -
wait
: Used to advance time and blocks in the simulated blockchain. -
expect
: Used to specify an expected outcome or test case.
-
- New
for
command used to repeat many operations with different parameters.
This is a nice example on how simulations can be used to simulate a vote in a DAO and checking that everything is correct after the execution (you can also see the counterpart in ethers.js):
load tenderly as sim
switch gnosis
set $tenderly <user>/<project>/<apiKey>
set $token.tokenlist https://tokens.honeyswap.org
set $gardenHolder 0x5b0F8D8f47E3fDF7eE1c337AbCA19dBba98524e6
set $gardenVoters [0x6120f29ccb5b1DDaa5a747235F257Ef6cB47970F, 0xc89000E12C600b12D6e61a535cD3fedd4ac1eeC4, 0xa328500Eab25698b8b146D195F35f5b26C93AAEe]
set $somebodyElse 0x02d9cc72Bc796D2128E58c04B6e50A4E101c0be1
set $multisig 0xe6a1b6B98dc978888b0c83DbA2D5fabcF5069312
set $commonPool 0x4ba7362F9189572CbB1216819a45aba0d0B2D1CB
sim:fork 24850000 (
# Return funds to common pool and execute the vote #14
exec @token(HNY) transfer(address,uint256) $commonPool @token.balance(HNY,$multisig) --from $multisig
expect @token.balance(HNY,$commonPool) > 8000e18
set $voteId 14
set $executionScript 0x000000010b21081c6f8b1990f53fc76279cc41ba22d7afe200000084c35ac76d00000000000000000000000000000000000000000000000000000000009895b700000000000000000000000000000000000000000000000000000000001e8480000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000002c68af0bb140000
set $voting 0xfbd0b2726070a9d6aff6d7216c9e9340eae68b2a
for $gardenVoter of $gardenVoters (
exec $voting vote(uint256,bool) $voteId true --from $gardenVoter
)
wait 30d 5s
exec $voting executeVote(uint256,bytes) $voteId $executionScript
# Check new conviction settings are correct
set $conviction 0x0b21081c6f8b1990f53fc76279cc41ba22d7afe2
expect $conviction::decay() == 9999799
expect $conviction::maxRatio() == 2000000
expect $conviction::weight() == 10000
expect $conviction::minThresholdStakePercentage() == 200000000000000000
)
EVMcrispr documentation
With this deliverable we release a Cookbook with a series of âpre-cookedâ recipes:
- Deploying a multisig to many chains with Gnosis Safe.
- Creating a stream with Superfluid.
- Creating a reputation token voting system with AragonOS.
- Depositing tokens into a vault and setting a payment schedule with AragonOS.
- Harvesting and cashing out of Sushi.
- Harvesting, locking, and voting on Curve Finance.
- Creating leveraged positions on AAVE v3.
We also revisited the rest of the articles, improving them substantially, and adding a new article explaining simulations.
Funding Request
- USDC (90%): $15,000
- ANT (10%): $1,665
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.
Hey @sembrestels and team,
Thank you for the great work and effort the last 2 seasons.
Happy to share that your received the final payment of this proposal.
Looking forward to the delivery summary & the future collaboration!
Thank you Seb!
EVMcrispr Project Final Report
Approved Funding
- $60,000 for the release of 6 new versions.
- $10,000 for creating the documentation portal.
- $30,000 in ANT for retroactively funding the first three versions of EVMcrispr.
- $6,000 in USDC for funding NFTX as an independent reviewer of the project.
Total: $100,000 (70% USDC and 30% ANT) + $6,000 for an independent review.
Final Expenditure
Due to a change of policy by the Financial Guild, we recieved 90% of the funds in USDC and a 10% in ANT:
- $90,000 in USDC.
- $10,000 in ANT.
- $6,000 in USDC for the independent review.
Total: $100,000 (90% USDC and 10% ANT) + 6,000 for an independent review.
Original Deliverables
-
v0.4.x (May 2022):
- Introduce environment variables.
- Introduce
@sender
(finally called@me
),@token
and@token.balance
helpers.
-
v0.5.x (June 2022):
- Restructure EVMcrispr library API.
- Introduce
@params.oracle
(finally called--oracle
option),@id
and@now
(finally extended to@date
) 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 to create many votes in many different DAOs in just one script.
- Allow automatic chain switching.
-
v0.8.x (
September 2022â October 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â November 2022):- Simulate the EVM scripts and notify the user if it will succeed before sending it.
- Introduce the
log
(finally calledprint
) command that provides more information about the simulated changes (token balances, app parametersâŚ) during and after the execution of the script.
-
Documentation Portal
- Articles of EVMcrispr modules, simulations, and syntactic sugar.
- Articles on how to use AragonOS:
- Aragon apps: Token Manager, Voting, Finance, Vault, Agent, and Transactions.
- Garden apps: Disputable Voting and Agreement.
- A cookbook with pre-cooked recipes featuring protocols such as AragonOS, Gnosis Safe, Curve Finance, Sushi, AAVE, and Superfluid.
Additional Deliverables
-
Language formalization:
- We used well-established practices in programming language theory to formalize our command language, unfolding new recursive structures, closures, better error handling, modules, etc.
-
Extra commands:
-
new-token
: creates a MiniMe token, and we can use it when installing a new token manager. -
new-dao
: 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. -
raw
: allows sending a transaction to an address with a custom data field. -
for
: allows repeating a set of actions for each element of an array.
-
-
Extra helpers:
-
@aragonEns
: helper to find the addresses pointed by subdomains ofaragonpm.eth
andaragonid.eth
.
-
-
Better frontend:
- We added support to Wallet Connect.
- 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.
- We use more modern technologies that make the website very fast: pnpm and vite.
- We migrated the UI to use Chakra React components.
-
Improved security:
- We registered evmcrispr.eth ENS, and EVMcrispr frontend is now available under https://evmcrispr.eth.limo.
-
Other improvements:
- We reduced the bundle size from ~148 kB in v0.3.8 to only ~18.8 kB in v0.9.0, and the new version has tons of new features.
Deliverables Not Executed
We executed all the deliverables, although two features are failing, and we would like to fix them in subsequent versions of EVMcrispr.
-
Retrieve external contracts ABI from external sources. - It stopped working in the most recent versions, and we will prioritize a fix for this in the next EVMcrispr release. In the meantime, you can use the
@get
helper to interact with external contracts. -
Complete multi-chain support for AragonOS module. - The
aragonos
module depends on the AragonOS subgraph in each network, and for some of them, it is not available. We will include support for those networks as soon as the subgraphs are available. Current available networks are are Mainnet, Goerli, and Gnosis Chain.
Short reflection on S1 and S2
We are very thankful for the tremendous impulse Aragon gave to EVMcrispr from v0.3.8 to v0.9.0.
During this time, EVMcrispr has passed from being a helpful tool for performing DAO-ops to being a fully-fledged scripting language for performing operations on different protocols (Curve, Sushi, Superfluid, Gnosis Safe, etc.).
We will continue developing the language and add new modules, so EVMcrispr can be even more potent in the future and allow Aragon DAOs (both old and new) to perform incrementally more complex transactions encoded with a simple language.
Stoked to see the evolution and to have been able to support and learn about this project. Thank you for the transparency provided throughout and the work delivered, as proposed and above and beyond. I trust this team will continue to grow from strength to strength. Keep killin it
Great stuff as always! Love it