I’ve been tossing around this concept of being able to perform actions as different types of smart contracts with group memberships like Multi-sigs, DAOs, and Smart Contract wallets, and I think there really needs to be a standard built for how this works.
Here’s a tweet for teh lulz:
Smart contracts can’t do things by themselves, only with outside parties (with private keys) initiating a transaction and paying the gas. However, we’ve devised many different types of “group” contracts that require 1 or more keys with certain permissioned rights to perform an operation for assets under the contract’s control.
The problem is that sometimes the actions I want to perform in dapps (like upgrading a Resolver in an ENS entry my Multi-sig owns) where the asset is owned by the “group” contract, but almost all applications assume the keyholder is the party of interest when using their interface. This is not a good assumption!
I want to be able to go to an interface, have some mechanism of stating “Execute as”, and then have the transaction I would normally perform as a keypair “translated” into how the group contract I am interacting with expects to receive and interact with this action, whether it be a number of confirmations (multi-sig), voting (DAOs), or simply authentication that the keypair is allowed to perform this action (smart contract wallets, limits and beneficiaries for multi-sigs and DAOs).
I have no idea what the solution should look like, I wanted to talk about it here to garner a better idea of how this might best be implemented between various wallets, dapps, or ERC interfaces. The problem is made harder that multiple such types of contracts are in moderate use, and almost nothing is standardized. I think this puts an ERC out of the question, at least one that attempts to standardize interfaces for these actions.
A better attempt might be at creating a “registry” of how to check and perform a few basic things, such as:
- Lookup/authentication that a keypair is an owner/member of a given contract; or, which contract(s) a keypair is a owner/member of
- How to translate an Ethereum transaction into a transaction that is suitable for submission to the contract
- How to get feedback on the state of that transaction, and whether it requires further action on behalf of the user to process (or otherwise is waiting on some confirmation/voting process to continue)
I have no idea if this makes sense to integrate at the wallet level, but that seems to be an attractive option, allowing people to “Add” group membership of some contract they are party to and have the ability to perform actions as that group in exactly the same way they would their normal keypairs. This would reduce the work required of dapp makers, but increase the burden on wallet makers as an advanced feature.
I also have no idea how to integrate this proposal into various dashboards that these group contracts use, like a DAO’s voting dashboard, or a Multi-sig’s management dashboard. I feel like they could just as easily be overlays on what a wallet does (at least a minimally functional overlay that links to the full dashboard), but that also requires a degree of standardization I don’t think exists.
If someone wants to talk further about this at ETHDenver, please let me know.