Client: Intent accumulator for forwarding multiple actions at once

Created on 19 Sep 2018  路  6Comments  路  Source: aragon/client

Thanks to EVMScripts, forwarders support performing more than one action at the same time. Rather than creating two separate votes to perform two actions that require a vote passing, these two actions can be bundled into a single proposal that can be voted on. This also has the advantage that the bundled actions are performed atomically and one after the other, meaning that the side-effects of actions become effective at the same time.

My idea of how this would work is when we present the signing panel telling the user how the transaction can be executed, we would add a button to defer signing the transaction and add the intent to a transaction 'shopping cart' or accumulator. I'm unsure whether this accumulator would need a view of its own (maybe accessible from the header in the navbar to the right of the Aragon logo) or would be good enough to just interact with it from the signing panel. Actions from different apps could be accumulated.

When the user finishes selecting all the actions that they wish to perform at the same time through a forwarder, we should give the chance to change the order in which they will be executed or even remove some previously added intents. One the user decides to move forward, we would then try to find all the possible forwarders with permission to perform all the selected actions, and then prompt the user to sign.

Some immediate uses for this:

  • Adding a token holder to a multisig requires changing the voting acceptance parameter and minting a token at the same time (https://github.com/aragon/aragon-apps/issues/270).
  • Replacing a member in a multisig or group requires burning and minting a token (https://github.com/aragon/aragon-apps/issues/419). As @jounih pointed out offline, for common actions that require more than one transaction to the contract, we could have an action within the app that just pushes both intents at the same time.
  • Assigning or removing many permissions with just one vote.

This will require adding support for multi-intent transaction pathing in aragon.js and making sure that the Voting app provides correct descriptions for votes executing multiple actions. Given the amount of complexity, it is unclear whether we would be able to have this before launch, but I think it would be beneficial to start designing and thinking about how the interaction will work.

Please let me know if the explanation is not clear enough and some mockups/wireframes would be appreciated.

pending

Most helpful comment

Capturing @bpierre thoughts that a good place for the 'shopping cart' to live would be in the notifications/transaction queue view. The bundled pending transactions could show up with a different state there, and a button to execute them which would make the signer pop up.

All 6 comments

Capturing @bpierre thoughts that a good place for the 'shopping cart' to live would be in the notifications/transaction queue view. The bundled pending transactions could show up with a different state there, and a button to execute them which would make the signer pop up.

I like this, but we need to be careful about its UX. @jounih can you give it some thought? What I want to avoid is having users asking themselves when to perform the transaction. Should I add two more items? Which actions can I add and which not? When should I bundle them? Users don't know any of the technicalities of atomicly executing transactions, so we need to be careful about that

Use cases right now: voting in the Voting app and upgrades in the App Center.

Bumping an old but awesome issue!

Wondering if another use case for this would be for organizations which have non-transferrable assets handling minting a new token and burning an existing token to effectively switch balances between accounts atomically?

Another use case yet! Installing apps and assigning permissions to them.

Do you know if EVMscripts can return parameters? That would be needed for getting the app address and pass it as parameter to the next function in the EVMscript.

Do you know if EVMscripts can return parameters? That would be needed for getting the app address and pass it as parameter to the next function in the EVMscript.

No; this is specifically the problem that has made this very hard for us to design app installation :).

Was this page helpful?
0 / 5 - 0 ratings