While the Multicall Scheme has already been installed and successfully tested on xDAI, we’re now in preparation of installing Multicall also on Mainnet. The Multicall is kind of an universal adapter that allows the DXdao to connect to multiple contracts, instead a specific adapter that only connects to a single contract as Generic Schemes, we’ve been using in the past. With Multicall the DXdao will be able to create new connections to external contracts & protocols much faster.
To shortly give an overview of the differences between Generic Schemes and Muticall Schemes:
Generic Schemes
- Connects to one specific Smart Contract
- Can execute any function call on specified Smart Contract
- Limited to execute one action in each proposal
- Governance parameters define the proposal voting process
- Custom UI that needs to be setup
- Can spend funds & transfer ERC20
Multicall Schemes
- Connection to one or multiple whitelisted Smart Contracts
- Can execute any function call on whitelisted Smart Contracts
- Can execute multiple actions on multiple Smart Contracts in a defined order within one proposal
- Governance parameters define the proposal voting process for multiple whitelisted contracts
- Generalized Proposal UI
Even though it’s technically possible, as of now we should not use the Multicall for proposals that involve any kind of funds. This is an additional organizational, security measure we should go until we have general experience with Multicall and better tools to analyze proposals. For now we can simply use the Funding Scheme to transfer funds if needed.
Example (xDAI):
To install the plugin on Mainnet we need to come to a consensus about some installation parameters. Going to share some parameters that we can discuss in this thread:
Multicall Contract Whitelist
The Multicall has a hardcoded (at least of now – we’ll be working on an upgradeable version) list of contracts it can speak to. Updates can only be done by deploying a new Multicall Scheme & Plugin-Manager proposal which is about 2 weeks – that’s why we should make sure we actually have whitelisted all the contracts needed.
- TokenRegistry: 0x93db90445b76329e9ed96ecd74e76d8fbf2590d8
- ENSRegistrywithFallback: 0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e
- ENSETHRegistry: 0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85
- ENSPublicResolver: 0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41
- ENSPublicProvider: 0x226159d592e2b063810a10ebf6dcbada94ed68b8
- DutchX: 0xb9812e2fa995ec53b5b6df34d21f9304762c5497
- GnosisProtocolRelayer: 0x0846Ff449b107A727958264Ad8f29f16B0040327
- OracleCreator: 0x2aE76E736f5e4DdA4996b70AE2765Aa621482357
- SwaprLiquidityRelayer: To be deployed
- Bonding Curve: Addresses to be confirmed (@AugustoL @JohnKelleher )
Governance Parameters
My suggestion is to use the same, proven, governance parameters as the Funds & Voting Power Scheme.
- QueuedVoteRequiredPercentage: 50%
- QueuedVotePeriodLimit: 3888000 (45 days)
- BoostedVotePeriodLimit: 604800 (7 days)
- PreBoostedVotePeriodLimit: 86400 (1 day)
- ThresholdConst: 1200 (1.2)
- QuietEndingPeriod: 172800 (2 days)
- ProposingRepReward: 500 REP
- VotersReputationLossRatio: 4%
- MinimumDaoBounty: 250 GEN
- DaoBountyConst: 10
An explanation of each parameter can be found here:
Permissions
[x] Mint and burn reputation, send ETH and external & native tokens. Note: Cannot turned off (Activated by default, cannot be deactivated)
[ ] Register other plugins
[ ] Add/remove global constraints
[ ] Upgrade the controller
[ ] Call genericCall on behalf of
Future Multicall Scheme Features:
While the first Multicall Scheme version is already a big improvement and will help us to connect to external contracts & ecosystems faster, I believe there’s still big potential for improvements & additional features. We’re going to continue to collaborate with DAOstack to work on:
Updateable Whitelist: Instead of using a hardcoded whitelist, the whitelist can be governed & updated with prosoals.
Enable ETH transfers & ERC20 approvals: ETH transfer & ERC20 approvals with Multicall proposals, currently deactivated as of missing design pattern that ensures sufficient security.
Proposal Simulation: Allow users to simulate transactions & understand the state changes of calls before submitting proposals.
Simplified Proposal Creation UI: Further UI simplification so that allows non-technical users to easily create proposals.