diff --git a/docs/configuration/proposal-submission.md b/docs/configuration/proposal-submission.md index a5a840e9..fb99a9f9 100644 --- a/docs/configuration/proposal-submission.md +++ b/docs/configuration/proposal-submission.md @@ -4,24 +4,33 @@ sidebar_position: 2 # Proposal submission -Proposal submission parameters are initially set when you create a DAO. Of -course you can always modify them later with a [governance -proposal](/definitions/proposals) containing the `Update Proposal Submission -Config` action from the `DAO Governance` category. +A DAO's proposal submission configuration manages the rules around submitting a +proposal for voting. + +## How to update the proposal submission configuration + +To change the proposal submission configuration of a DAO, you must submit a +[governance proposal](/features/proposals/what) containing the `Update Proposal +Submission Config` action from the `DAO Governance` category. If you have multiple choice proposals enabled, you will instead see two different actions, one labeled `Update Single Choice Proposal Submission Config` -and the other labeled `Update Multiple Choice Proposal Submission Config`. +and the other `Update Multiple Choice Proposal Submission Config`. You may +configure each proposal type (single and multiple choice) separately, though +they should probably be kept in sync so the voting experience is consistent. + +## Parameters -The various parameters are described below. +You can update all of these parameters with the action(s) mentioned above at any +time. -## Proposal deposit +### Proposal deposit This is a required deposit someone must put down to create a proposal. This can be the DAO's governance token, if it exists, or any other token on the chain. By default, this is disabled. -### Refunding proposal deposits +#### Refunding proposal deposits There are three ways to handle proposal deposits: @@ -36,7 +45,7 @@ You may want to enable this if you are worried about spam. ::: -## Proposal submission policy +### Proposal submission policy This determines who is allowed to submit proposals to your DAO. The options are: diff --git a/docs/configuration/staking.md b/docs/configuration/staking.md index d1e1b2ce..32bc3070 100644 --- a/docs/configuration/staking.md +++ b/docs/configuration/staking.md @@ -4,15 +4,19 @@ sidebar_position: 3 # Staking -Token-based and NFT-based DAOs can configure the parameters of their staking -process. +A DAO's staking configuration determines the rules of the token staking process. +Only token-based and NFT-based DAOs have a staking process to configure. +Member-based DAOs do not have staking because they do not use tokens. -Staking parameters are initially set when you create a DAO. Of course you can -always modify them later with a [governance proposal](/definitions/proposals) -containing the `Update Staking Config` action from the `DAO Governance` -category. +## How to update the staking configuration -## Unstaking duration +To change the staking configuration of a DAO, you must submit a [governance +proposal](/features/proposals/what) containing the `Update Staking Config` +action from the `DAO Governance` category. + +## Parameters + +### Unstaking duration After someone stakes tokens in a DAO, those tokens cannot be immediately unstaked. The unstaking duration is how long they remain locked after deciding diff --git a/docs/configuration/voting.md b/docs/configuration/voting.md index 372f3af5..7e8cd9bd 100644 --- a/docs/configuration/voting.md +++ b/docs/configuration/voting.md @@ -4,17 +4,27 @@ sidebar_position: 1 # Voting -Voting parameters are initially set when you create a DAO. Of course you can -always modify them later with a [governance proposal](/definitions/proposals) -containing the `Update Voting Config` action from the `DAO Governance` category. +A DAO's voting configuration determines the rules of the voting process. Things +like the passing threshold and voting duration. + +## How to update the voting configuration + +To change the voting configuration of a DAO, you must submit a [governance +proposal](/features/proposals/what) containing the `Update Voting Config` action +from the `DAO Governance` category. If you have multiple choice proposals enabled, you will instead see two different actions, one labeled `Update Single Choice Voting Config` and the -other labeled `Update Multiple Choice Voting Config`. +other `Update Multiple Choice Voting Config`. You may configure each proposal +type (single and multiple choice) separately, though they should probably be +kept in sync so the voting experience is consistent. + +## Parameters -The various parameters are described below. +You can update all of these parameters with the action(s) mentioned above at any +time. -## Passing threshold and quorum +### Passing threshold and quorum The **_passing threshold_** is the `Yes` threshold needed to pass a proposal. It defaults to majority (i.e. any votes above 50%). It sounds simple, but it gets @@ -25,7 +35,7 @@ The **_quorum_** is the proportion of all voting power that must vote for a proposal to be **passable**. It defaults to 20%. For single choice proposals, quorum can be disabled. -### Multiple choice proposals +#### Multiple choice proposals Multiple choice proposals use quorum in the same way, but they do not have a passing threshold. Instead, as long as the quorum is met, whichever option @@ -35,7 +45,7 @@ quorum for multiple choice proposals. Read on to understand how passing threshold and quorum affect each other for single choice proposals. -### With quorum enabled +#### With quorum enabled If your DAO has a quorum set, the passing threshold is only calculated among **those who voted**. @@ -62,7 +72,7 @@ preferences (if not enough people are paying attention). ::: -### With quorum disabled +#### With quorum disabled If your DAO has no quorum set, the passing threshold is calculated among **all possible voters**. This is considered an absolute threshold. @@ -77,16 +87,16 @@ understanding with others before making any changes. ::: -## Only members execute +### Only members execute If enabled, only members may execute passed proposals. If disabled, anyone can. This defaults to enabled. -## Voting duration +### Voting duration This is the maximum time proposals remain open for voting. -## Allow revoting +### Allow revoting If enabled, votes can be changed before the voting duration ends. This defaults to disabled. diff --git a/docs/definitions/_category_.json b/docs/definitions/_category_.json deleted file mode 100644 index 9708d27e..00000000 --- a/docs/definitions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Definitions", - "position": 3 -} diff --git a/docs/definitions/proposals.md b/docs/definitions/proposals.md deleted file mode 100644 index 6246bac4..00000000 --- a/docs/definitions/proposals.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Proposals - -Proposals are how DAOs take action. You can think of proposals as the nervous -system of the DAO—members submit and vote on proposals, and if passed, the DAO -_does something_. Proposals are composed of three components: a title, a -description, and actions. - -:::note - -When you create a proposal, the voting distribution of members at the time of -proposal creation is snapshotted and used for the proposal. This means that if -you were not a member when a proposal was created, you will not be able to vote -on it. - -This is a security measure that prevents an attacker from purchasing a DAO's -governance tokens if it's listed on an exchange, manipulating a vote, and then -selling tokens immediately afterward. It also ensures that a DAO members knows -_to whom_ they are making a proposal: the people who have voting power at the -moment the proposal goes live. - -::: - -Actions are where things get interesting. They are software instructions that -get executed on the blockchain after a proposal is passed. As a simple example: -an action could pay a contributor by transferring money from the DAO's treasury -to their wallet. The purpose of the DAO DAO UI is to make it easy to do this by -abstracting away the technicalities of the blockchain in an easy-to-use -interface that we call actions. - -:::tip Examples - -A blockchain software instruction could: - -- Deploy a docker container on [Akash](https://akash.network/). -- [Update the - configuration](https://daodao.zone/dao/juno10h0hc64jv006rr8qy0zhlu4jsxct8qwa0vtaleayh0ujz0zynf2s2r7v8q/proposals/A7) - of a smart contract. -- Pay a [RPC node - provider](https://daodao.zone/dao/juno1gpwekludv6vu8pkpnp2hwwf7f84a7mcvgm9t2cvp92hvpxk07kdq8z4xj2/proposals/A7). - -Truly anything you can do on a blockchain is supported by DAO DAO DAOs, with the -added benefits of sophisticated governance processes. - -::: - -The components of a proposal are shown and described below. - -![Proposal form](/img/proposal.png) - -### Title - -A title identifies the purpose of a proposal. It should be concise. - -### Description - -A description explains in detail what a proposal _is_. This may be a -[constitution](https://daodao.zone/dao/juno10h0hc64jv006rr8qy0zhlu4jsxct8qwa0vtaleayh0ujz0zynf2s2r7v8q/proposals/A1), -legal agreement, justification, or simply a place to document relevant -information. Really it can be anything you want. There are no rules, and you -should feel free to experiment. - -For example, if you are submitting a proposal to pay someone's salary, you may -want to explain why you're paying them or what the relevant terms of work are. - -You can use [Markdown syntax](https://www.markdownguide.org/basic-syntax/) for -rich formatting. - -### Actions - -Actions execute when a proposal is passed and executed. These actions let you do -things like _spend_ from the DAO's treasury, add or remove members, _mint_ new -governance tokens, and more. - -DAO DAO already has many actions that cover almost every possible action you can -take on a blockchain. For the most part, you can create proposals without -needing to actually write out any software instructions (i.e. transactions) by -hand. The DAO DAO UI abstracts away many of those details for you. If you're -doing something custom or experimental, you can always use a custom message. If -you'd like to create a new action for DAOs to use, [you can do that -too](https://github.com/DA0-DA0/dao-dao-ui/wiki/Adding-an-action-to-DAO-DAO)! - -## Multiple choice proposals - -The default proposal type is `single choice`, meaning voters only have the -option to vote `Yes` or `No`, and thus a proposal either passes or fails. -Multiple choice proposals, on the other hand, allow many options to be voted on. - -If your DAO does not have multiple choice proposals enabled, ensure the DAO is -at least on [version 2](/upgrading/v2), and then [enable them with a -proposal](#enable-multiple-choice-proposals). - -### How do they work? - -A multiple choice proposal is just like a single choice proposal, except that -instead of a single set of actions, you can create many labeled options, each -with their own set of actions. - -Simply choose the `Multiple Choice` proposal type when creating a new proposal. - -![Multiple choice proposal](/img/multiple-choice-proposal.png) - -Each option has different actions associated with it. - -![Option 1](/img/multiple-choice-proposal-option-1.png) - -![Option 2](/img/multiple-choice-proposal-option-2.png) - -When you go to vote, the proposal will show each of the options, instead of just -`Yes` and `No`. - -![Multiple choice proposal](/img/multiple-choice-proposal-done.png) - -### Enable multiple choice proposals - -If you create a new DAO, multiple choice proposals are enabled by default. If -you have an existing DAO without multiple choice proposals enabled, you can -enable them by passing a single choice proposal containing the `Enable Multiple -Choice Proposals` action. - -On the proposal creation page, click the `Add an action` button. - -![Proposal creation form](/img/enable-multiple-choice-add-action.png) - -Click on the `DAO Governance` category, and then choose `Enable Multiple Choice -Proposals`. - -![DAO Governance category](/img/action-modal-dao-governance-category.png) - -![Enable multiple choice -action](/img/enable-multiple-choice-dao-governance-category.png) - -![Complete proposal](/img/enable-multiple-choice-done.png) - -Once you submit, pass, and execute this proposal, multiple choice proposals will -be enabled for the DAO! diff --git a/docs/features/_category_.json b/docs/features/_category_.json new file mode 100644 index 00000000..4aaeb074 --- /dev/null +++ b/docs/features/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Features", + "position": 3 +} diff --git a/docs/features/proposals/_category_.json b/docs/features/proposals/_category_.json new file mode 100644 index 00000000..14cdfa4c --- /dev/null +++ b/docs/features/proposals/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Proposals", + "position": 1 +} diff --git a/docs/features/proposals/types.md b/docs/features/proposals/types.md new file mode 100644 index 00000000..89ac6685 --- /dev/null +++ b/docs/features/proposals/types.md @@ -0,0 +1,108 @@ +--- +sidebar_position: 2 +--- + +# Types of proposals + +DAO DAO supports single choice (`Yes`, `No`, or `Abstain`) and multiple choice +(`A`, `B`, `C`, `D`, ..., or `None of the above`) proposals. They work very +similarly. + +## Single choice + +A single choice proposal contains a title, description, and an optional set of +actions to execute if passed. The only voting options are `Yes`, `No`, and +`Abstain`, and thus a single choice proposal either passes or fails. + +![Single choice proposal](/img/features/proposals/single-choice-proposal.png) + +### Title + +A title identifies the purpose of a proposal. It should be concise. + +### Description + +A description explains in detail what a proposal _is_. This may be a +[constitution](https://daodao.zone/dao/juno10h0hc64jv006rr8qy0zhlu4jsxct8qwa0vtaleayh0ujz0zynf2s2r7v8q/proposals/A1), +legal agreement, justification, or simply a place to document relevant +information. Really it can be anything you want. There are no rules, and you +should feel free to experiment. + +For example, if you are submitting a proposal to pay someone's salary, you may +want to explain why you're paying them or what the relevant terms of work are. + +You can use [Markdown syntax](https://www.markdownguide.org/basic-syntax/) for +rich formatting. + +### Actions + +Actions execute when a proposal is passed and executed. These actions let you do +things like spend from the DAO's treasury, add or remove members, mint new +governance tokens, and more. + +DAO DAO already has many actions that cover almost every possible action you can +take on a blockchain. For the most part, you can create proposals without +needing to actually write out any software instructions (i.e. transactions) by +hand. The DAO DAO UI abstracts away many of those details for you. If you're +doing something custom or experimental, you can always use a custom message. If +you'd like to create a new action for DAOs to use, [you can do that +too](https://github.com/DA0-DA0/dao-dao-ui/wiki/Adding-an-action-to-DAO-DAO)! + +## Multiple choice + +Multiple choice proposals can contain between 2 and 20 different options, each +with their own set of actions, and they always include a `None of the above` +option to ensure a proposal cannot force an action to be taken. + +If your DAO does not have multiple choice proposals enabled, ensure the DAO is +at least on [V2](/upgrading/v2), and then [enable multiple choice proposals with +a single choice proposal](#enable-multiple-choice-proposals). + +### How do they work? + +A multiple choice proposal is just like a single choice proposal, except that +instead of a single set of actions, you can create many labeled options, each +with their own set of actions. + +Simply choose the `Multiple Choice` proposal type when creating a new proposal. + +![Multiple choice +proposal](/img/features/proposals/multiple-choice-proposal.png) + +Each option has different actions associated with it. + +![Option 1](/img/features/proposals/multiple-choice-proposal-option-1.png) + +![Option 2](/img/features/proposals/multiple-choice-proposal-option-2.png) + +When you go to vote, the proposal will show each of the options and a `None of +the above` option, instead of just `Yes` and `No`. + +![Multiple choice +proposal](/img/features/proposals/multiple-choice-proposal-done.png) + +### Enable multiple choice proposals + +If you create a new DAO, multiple choice proposals are enabled by default. If +you have an existing DAO without multiple choice proposals enabled, you can +enable them by [passing a single choice proposal](/quickstart/create-a-proposal) +containing the `Enable Multiple Choice Proposals` action in the `DAO Governance` +category. + +On the proposal creation page, click the `Add an action` button. + +![Proposal creation +form](/img/features/proposals/enable-multiple-choice-add-action.png) + +Click on the `DAO Governance` category, and then choose `Enable Multiple Choice +Proposals`. + +![DAO Governance category](/img/shared/action-modal-dao-governance-category.png) + +![Enable multiple choice +action](/img/features/proposals/enable-multiple-choice-dao-governance-category.png) + +![Complete proposal](/img/features/proposals/enable-multiple-choice-done.png) + +Once you publish, pass, and execute this proposal, multiple choice proposals +will be enabled for the DAO! diff --git a/docs/features/proposals/what.md b/docs/features/proposals/what.md new file mode 100644 index 00000000..aaa13901 --- /dev/null +++ b/docs/features/proposals/what.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 1 +--- + +# What are proposals? + +Proposals are how DAOs take action. You can think of proposals as the nervous +system of the DAO—members submit and vote on proposals, and if passed, the DAO +_does something_. + +## What can proposals do? + +Proposals can contain actions, which is where things get really interesting. +Actions are software instructions that get executed on the blockchain after a +proposal is passed. As a simple example: an action could pay a contributor by +transferring money from the DAO's treasury to their wallet. The purpose of the +DAO DAO UI is to make it easy to do this by abstracting away the technicalities +of the blockchain in an easy-to-use interface. + +:::tip Examples + +A blockchain software instruction could: + +- Deploy a docker container on [Akash](https://akash.network/). +- [Update the + configuration](https://daodao.zone/dao/juno10h0hc64jv006rr8qy0zhlu4jsxct8qwa0vtaleayh0ujz0zynf2s2r7v8q/proposals/A7) + of a smart contract. +- Pay a [RPC node + provider](https://daodao.zone/dao/juno1gpwekludv6vu8pkpnp2hwwf7f84a7mcvgm9t2cvp92hvpxk07kdq8z4xj2/proposals/A7). + +Truly anything you can do on a blockchain is supported by DAO DAO DAOs, with the +added benefits of sophisticated governance processes. + +::: + +## Voting on proposals + +When you create a proposal, the voting distribution of members at the time of +proposal creation is snapshotted and used for the proposal. This means that if +you were not a member when a proposal was created, you will not be able to vote +on it. + +This security measure prevents an attacker from purchasing a DAO's governance +tokens if it's listed on an exchange, manipulating a vote, and then selling the +tokens immediately afterward. Essentially, it ensures that a DAO member knows +_to whom_ they are making a proposal: the people who have voting power at the +moment the proposal goes live. + +## How do I create a proposal? + +Check out the [Create your first proposal](/quickstart/create-a-proposal) guide +in the Quickstart section to get started. diff --git a/docs/definitions/subdaos/_category_.json b/docs/features/subdaos/_category_.json similarity index 100% rename from docs/definitions/subdaos/_category_.json rename to docs/features/subdaos/_category_.json diff --git a/docs/definitions/subdaos/act-on-behalf-of-subdao.md b/docs/features/subdaos/act-on-behalf-of-subdao.md similarity index 63% rename from docs/definitions/subdaos/act-on-behalf-of-subdao.md rename to docs/features/subdaos/act-on-behalf-of-subdao.md index 208ec0c0..c7cc4f9e 100644 --- a/docs/definitions/subdaos/act-on-behalf-of-subdao.md +++ b/docs/features/subdaos/act-on-behalf-of-subdao.md @@ -4,25 +4,23 @@ sidebar_position: 3 # How to act on behalf of a SubDAO -As discussed in [What are SubDAOs?](/definitions/subdaos/what), the admin (or +As discussed in [What are SubDAOs?](/features/subdaos/what), the admin (or parent DAO) can execute any action on behalf of the SubDAO. Follow this guide to learn how. - - In the parent DAO, create a new proposal and add the `DAO Admin Execute` action from the `DAO Governance` category. -![DAO Governance category](/img/definitions/subdaos/dao-governance-category.png) +![DAO Governance category](/img/features/subdaos/dao-governance-category.png) Then, select the SubDAO you want to act on behalf of. -![DAO Admin Execute action](/img/definitions/subdaos/dao-admin-execute.png) +![DAO Admin Execute action](/img/features/subdaos/dao-admin-execute.png) Then simply choose the action(s) you want to execute! ![DAO Admin Execute with Manage Members -action](/img/definitions/subdaos/dao-admin-execute-manage-members.png) +action](/img/features/subdaos/dao-admin-execute-manage-members.png) Once you pass and execute the proposal, your action(s) will be executed on behalf of the SubDAO. diff --git a/docs/definitions/subdaos/how-to-create.md b/docs/features/subdaos/how-to-create.md similarity index 73% rename from docs/definitions/subdaos/how-to-create.md rename to docs/features/subdaos/how-to-create.md index 1707842d..5357bdaf 100644 --- a/docs/definitions/subdaos/how-to-create.md +++ b/docs/features/subdaos/how-to-create.md @@ -10,17 +10,17 @@ the end! To start, go to the DAO you want to create a SubDAO for, and navigate to **SubDAOs > New SubDAO**. -![Create SubDAO button](/img/definitions/subdaos/subdaos-tab.png) +![Create SubDAO button](/img/features/subdaos/subdaos-tab.png) You will be brought to an interface that looks identical to the interface for creating a DAO, except the header should contain the name of the parent DAO. -![New SubDAO UI](/img/definitions/subdaos/new-subdao.png) +![New SubDAO UI](/img/features/subdaos/new-subdao.png) Create the SubDAO like you would any other DAO. If you need help, check out [Create your first DAO](/quickstart/create-a-dao) in the Quickstart section. -![SubDAO home](/img/definitions/subdaos/unregistered-subdao-home.png) +![SubDAO home](/img/features/subdaos/unregistered-subdao-home.png) Lastly, the parent DAO needs to recognize the SubDAO with a proposal. This security step prevents anyone from creating a SubDAO of an organization and @@ -33,13 +33,13 @@ action prefilled. Clicking the alert banner at the top of the page will take you here: ![Parent DAO proposal -creation](/img/definitions/subdaos/prefilled-subdao-recognition.png) +creation](/img/features/subdaos/prefilled-subdao-recognition.png) Once the parent DAO passes and executes this proposal, the SubDAO will be recognized! -![Recognized SubDAO home](/img/definitions/subdaos/subdao-home-recognized.png) +![Recognized SubDAO home](/img/features/subdaos/subdao-home-recognized.png) And it will show up in the parent DAO's SubDAOs tab! -![Parent DAO SubDAOs tab](/img/definitions/subdaos/subdaos-tab-recognized.png) +![Parent DAO SubDAOs tab](/img/features/subdaos/subdaos-tab-recognized.png) diff --git a/docs/definitions/subdaos/what.md b/docs/features/subdaos/what.md similarity index 100% rename from docs/definitions/subdaos/what.md rename to docs/features/subdaos/what.md diff --git a/docs/how-to-contribute.md b/docs/how-to-contribute.md index b22221a2..10d0f136 100644 --- a/docs/how-to-contribute.md +++ b/docs/how-to-contribute.md @@ -1,5 +1,5 @@ --- -sidebar_position: 8 +sidebar_position: 7 --- # Contribute to DAO DAO! diff --git a/docs/quickstart/create-a-proposal.md b/docs/quickstart/create-a-proposal.md index 6f0943e8..e743ed55 100644 --- a/docs/quickstart/create-a-proposal.md +++ b/docs/quickstart/create-a-proposal.md @@ -37,9 +37,9 @@ Then, fill in the proposal's name and description. :::tip Actions? You'll notice the `Actions` label there. [Proposal -actions](/definitions/proposals#actions) allow you to add rich functionality to -proposals: software instructions that execute on the blockchain when a proposal -is passed and executed. +actions](/features/proposals/what#actions) allow you to add rich functionality +to proposals: software instructions that execute on the blockchain when a +proposal is passed and executed. The proposal we are creating is a social agreement, so we don't need to run any code. diff --git a/docs/recipes/_category_.json b/docs/recipes/_category_.json deleted file mode 100644 index b33ff7cb..00000000 --- a/docs/recipes/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Recipes", - "position": 5 -} diff --git a/docs/recipes/config-updates.md b/docs/recipes/config-updates.md deleted file mode 100644 index 0fedcc3d..00000000 --- a/docs/recipes/config-updates.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Updating the config of a DAO - -After you've deployed your DAO you may decide that you'd like to -change parts of the config. - -In this recipe, we'll walk through the process of creating and voting -on a proposal to change your DAO's configuration. - -## Setup - -Before beginning you'll need to have a DAO deployed on DAO-DAO. For a -quick introduction to that see the -[quickstart](/quickstart/create-a-dao.md) guide. - -## The DAO DAO config - -All DAOs deployed from DAO DAO have a config with information like -name, description, and voting threshold. You can view the raw JSON of -a DAOs config from the command line by running a `{get_config: {}}` -query like so: - -``` -junod query wasm contract-state smart '{"get_config": {}}' -``` - -Here's an example of what one of those configs might look like: - -```json -{ - "config": { - "name": "ekez dao", - "description": "The first DAO of the new DAO DAO UI!", - "threshold": { - "absolute_percentage": { - "percentage": "0.66" - } - }, - "max_voting_period": { - "time": 604800 - }, - "proposal_deposit": "0", - "refund_failed_proposals": true - }, - "gov_token": "juno1lnrdwhf4xcx6w6tdpsghgv6uavem353gtgz77sdreyhts883wdjqpg7dk8", - "staking_contract": "juno19nywm4al2pc2sdj834gtdm6tvcn5kqpghlwd022tvld0hek4jfes8jj6um" -} -``` - -Every part of this config can be updated via a governance proposal. - -## Updating the config - -To update a DAO's config we'll create a new proposal in the UI and add -a "Custom" message to it. Our custom message will be a WASM message -which, when executed, will call the `update_config` method on our DAO. - -The structure of a WASM Message can be found -[here](https://docs.rs/cosmwasm-std/latest/cosmwasm_std/enum.WasmMsg.html). We'll -start by filling out most of the execute variant: - -```json -{ - "wasm": { - "execute": { - "contract_addr": "", - "msg": {}, // TODO - fill this in - "funds": [] - } -} -``` - -The `update_config` message that we'll be executing with this has the -same structure as a DAOs config. To change only a few fields I -recommend copying your DAOs current config and then only modifying the -fields that you'd like to change. Here's an example of what your -`update_config` message might look like: - -```json -{ - "update_config": { - "name": "ekez dao", - "description": "The first DAO of the new DAO DAO UI outside a docker container!", - "threshold": { - "absolute_percentage": { - "percentage": "0.66" - } - }, - "max_voting_period": { - "time": 604800 - }, - "proposal_deposit": "0", - "refund_failed_proposals": true - } -} -``` - -Here I've updated the DAO's description to clarify that there were in -fact other DAOs before this one but they all ran in Docker containers. - -To finish up we just combine our WASM Message and our `update_config` -message by putting the `update_config` message into the `msg` field of -the WASM Message: - -```json -{ - "wasm": { - "execute": { - "contract_addr": "", - "msg": { - "update_config": { - "name": "ekez dao", - "description": "The first DAO of the new DAO DAO UI outside a docker container!", - "threshold": { - "absolute_percentage": { - "percentage": "0.66" - } - }, - "max_voting_period": { - "time": 604800 - }, - "proposal_deposit": "0", - "refund_failed_proposals": true - } - }, - "funds": [] - } - } -} -``` - -## Executing the config update - -To execute the config update just finish creating your proposal and -hold a vote with your fellow DAO members. If the proposal passes you -can execute it and you'll have a new DAO config! diff --git a/docs/recipes/contract-deployment.md b/docs/recipes/contract-deployment.md deleted file mode 100644 index 64166a63..00000000 --- a/docs/recipes/contract-deployment.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Deploying a smart contract from a DAO - -Have a smart contract, but want your DAO to control it? - -In this recipe, we'll walk through the process of deploying a smart contract via -a proposal in DAO DAO. - -This example is intended for folks who already have some amount of -experience deploying smart contracts in Juno. If you'd like a -refresher consider reading the [Juno -documentation](https://docs.junonetwork.io/smart-contracts-and-junod-development/tutorial-erc-20) -on smart contract deployment to learn more. - -## Motivation - -Smart contracts are typically structured such that their owner (the -person who deploys them) controls them. For example, the owner of a -smart contract that collects fees for its usage can withdraw those -funds. By deploying a smart contract from a DAO we can make sure that -the DAO owns the smart contract instead of a potentially untrustworthy -individual. - -:::tip Did you know? - -The Ethereum Name Service (ENS) is currently controlled by a four-of-seven -multisig. This means that at the root of the entire system are seven -people, four of whom together have complete control over the -contract. As they write in [their -docs](https://ens.domains/about/#about-root): - -> In the long term, we would like the root multisig to be replaced by -> some form of distributed decision making process, as such systems -> become available. - -DAO DAO is one such system. - -::: - -## Setup - -Before beginning you'll need to have a DAO deployed on DAO-DAO. For a -quick introduction to that see the -[quickstart](/quickstart/create-a-dao) guide. - -## Deploying a contract - -From the homepage for your DAO go the proposals page and press the -create button to create a new proposal. - -![](/img/examples/create-button.jpg) - -Type in the name and description of your proposal and then add a -"WASM" message. We'll be using a WASM message as we'll be interacting -with a smart contract. - -### Collecting information about the contract to be deployed - -Next, you'll need to gather some information about the contract you'll -be deploying. You'll need to know the code ID for the contract and -what information the contract expects to be instantiated with. - -At the time of writing the DAO-DAO smart contract is deployed with -code id `280` and we can learn what information it expects for -instantiation by taking a look at its -[`InstantiateMsg`](https://github.com/DA0-DA0/dao-contracts/blob/28744e2040fa09c0e3a4eb87905fc68895b01e9a/contracts/cw3-dao/src/msg.rs#L12-L28). - -### Creating the deployment proposal - -In order to deploy the contract DAO-DAO expects a -[`WasmMsg`](https://docs.rs/cosmwasm-std/0.16.2/cosmwasm_std/enum.WasmMsg.html), -which encapsulates all of ways that one might interact with a smart -contract on Juno. We'll be using the `Instantiate` variant so our -message will look something like this: - -```json -{ - "wasm": { - "instantiate": { - "admin": "juno147huky2j39qccdw4a0j68y8xrpg7wwqfvkm29qfmsecn5nu6rl8qsle7gk", - "code_id": 280, - "label": "baby dao", - "msg": {} // TODO - We'll create the message below. - } - } -} -``` - -Here we've set the `admin` of the contract to the address of the DAO -we'll be deploying the contract from. This allows the DAO to [perform -a -migration](https://github.com/CosmWasm/wasmd/blob/315284e3601b5e4a15a57b8b9ab5edd785323b9c/x/wasm/internal/types/tx.proto#L51-L52) -of the contract code should it want to. The admin field is optional if -you'd prefer to disable migration. You can find the address of your -DAO in the "Info" tab on your DAO's homepage. - -The message field will vary from contract to contract and based on -how you'd like to set up the DAO you're deploying so its particulars -aren't terribly important. Here we'll use a pretty standard issue DAO -configuration: - -```json -{ - "name": "baby dao", - "description": "this is a dao created via a DAO-DAO proposal", - "gov_token": { - "instantiate_new_cw20": { - "code_id": 279, - "label": "bdao", - "msg": { - "name": "baby dao", - "symbol": "bdao", - "decimals": 6, - "initial_balances": [ - { - "address": "juno1m7a7nva00p82xr0tssye052r8sxsxvcy2v5qz6", - "amount": "6000000" - } - ] - } - } - }, - "threshold": { - "absolute_percentage": { - "percentage": "0.5" - } - }, - "proposal_deposit_amount": "1", - "max_voting_period": { - "time": 604800 - } -} -``` - -Our final message is our WASM message with the above JSON object -replacing the `TODO` line above. With the replacement done you can -go ahead and create the proposal. - -## Deployment - -All that is left is to chat with the other members of your DAO and -vote on it. If it passes you can execute the proposal and your smart -contract will be instantiated! diff --git a/docs/recipes/diversify-treasury.md b/docs/recipes/diversify-treasury.md deleted file mode 100644 index 9ef761bc..00000000 --- a/docs/recipes/diversify-treasury.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Diversify your DAO's treasury - -So, you have a DAO, but you want its treasury to hold some tokens other than -your governance token. - -It's as easy as making an IBC transaction with the DAO's address as the recipient. - - -## Enabling IBC transfers on Juno - -First, enable IBC transfers in Juno. - -In Keplr, go to Settings, then check "Advanced IBC Transfers." - -## Sending the tokens to your DAO - -Find the coin you want to send, and follow [these -instructions](https://keplr.crunch.help/ibc-guides-troubleshooting/cosmos-ibc-transfers) -to send your tokens over IBC. - -Your destination chain will be Juno, and your destination address will be your -DAO's address. - -:::danger -Make sure you have the right channel ID. Check the [active IBC -channels](https://hub.mintscan.io/ibc-network) for Juno. -::: diff --git a/docs/recipes/executing-smart-contracts.md b/docs/recipes/executing-smart-contracts.md deleted file mode 100644 index a58294dd..00000000 --- a/docs/recipes/executing-smart-contracts.md +++ /dev/null @@ -1,223 +0,0 @@ -# Executing smart contracts - -Once you've [deployed a smart contract](./contract-deployment.md) from -your DAO you'll then likely want to start using it. The way to modify -the state of a contract or tell it to perform an action on cosmwasm is -to execute a message on it. Here we'll walk through the process of -executing a message on a DAO's staking contract to update its -unstaking duration and in the process learn about controlling smart -contracts from a DAO DAO DAO. - -## Background - -With CosmWasm there are a number of message types that can be executed -by the chain. These message types can do things like stake tokens with -validators, send tokens to addresses, and manage smart contracts. The -message types are enumerated -[here](https://docs.rs/cosmwasm-std/latest/cosmwasm_std/enum.CosmosMsg.html). A -"custom" message on a DAO DAO proposal can cause any of these message -types to be executed. - -In order to execute one of those message types it needs to be -converted into JSON. JSON allows us to manually type out messages in a -human readable format that the computer can convert into the Rust -data structures you can see in the aforementioned enum. - -## JSON conversion - -Under the hood a Rust library called [Serde -JSON](https://docs.serde.rs/serde_json/) is used to do this conversion -from human readable JSON to computer readable data. You can see the -linked docs for all the details about how this conversion -happens. Here's an example to build some intuition: - -Lets say we have a Rust enum that looks something like this: - -```rust -pub enum Msg { - House(HouseMsg), - Bar { - baz: String, - }, - BluBla {} -} - -pub struct HouseMsg { - width: Uint128, - height: Decimal, - depth: u64, -} -``` - -Lets see what the variants of this Rust enum look like in JSON, -starting with `House`. - -### House - -Say I want to write a `House` with a `width` of `100` and a height of -`0.12` and a depth of `12`. The JSON for that would look like this: - -```json -{ - "house": { - "width": "100", - "height": "0.12", - "depth": 12 - } -} -``` - -In CosmWasm `Uint128` values are large integer values and to write one -in JSON form you surround the number with quotes. The same applies to -the `Decimal` type. For regular Rust integer types like `u64` we can -just write those out as normal. - -### Bar - -Writing a `Bar` is really similar to a Foo. Even though for the `Foo` -the data is in a separate `struct` the serialized version looks the -same. Here's what a `Bar` with a `baz` of `"zoop"` looks like: - -```json -{ - "bar": { - "baz": "zoop" - } -} -``` - -For comparason, here's how you'd construct that same `Bar` in Rust: - -```rust -Msg::Bar { baz: "zoop".to_string() } -``` - -### Blu - -A `BluBla` is just like a `Bar` or a `Foo` but it doesn't have any data: - -```json -{ - "blu_bla": {} -} -``` - -:::note -Notice that the `BluBla` gets converted from camel case to snake case -during serialization. This is not a hard rule for CosmWasm contracts, -but most will do this. -::: - -## Executing a contract - -Now that we understand how messages are put together, let's try -writing a custom message to update the unstaking duration for a -DAO. We'll start by collecting the relevant addresses for our -message. For our purposes we'll need the DAO address and the staking -contract address. Those can be found in under the "Staking" and "DAO" -addresses in the "Addresses" section of your DAO page. - -:::note -For this walk through we'll use `` and `` as placeholders -for those addresses. When you're writing your message you'll want to -replace those with the addresses you're using. -::: - -We can start with a basic [WASM -execute](https://docs.rs/cosmwasm-std/latest/cosmwasm_std/enum.WasmMsg.html) -message: - -```json - { - "wasm": { - "execute": { - "contract_addr": "", - "msg": {}, - "funds": [] - } - } - } -``` - -Let's fill in this basic message with the address of our staking -contract. The staking contract will be the contract we want to execute -this message on as we want to tell it to change the unstaking -duration. - -```json - { - "wasm": { - "execute": { - "contract_addr": "", - "msg": {}, - "funds": [] - } - } - } -``` - -If you look at the type of the `msg` field on in the docs you'll see -it is a `Binary` type. The `Binary` type in CosmWasm is a base64 -encoded JSON message. From your terminal you can create one by running: - -```bash -echo '' | base64 -``` - -Happily, the DAO DAO UI will automatically do that conversion for you -so we can just put the JSON for the message we want to execute in that -field. We can find the format of the message we'd like to execute by -looking at the [`UpdateConfig` -message](https://github.com/DA0-DA0/dao-contracts/blob/2c7bc83eeb5f9a882ec36e442a1c8fdb6e3f90c6/contracts/stake-cw20/src/msg.rs#L25-L28) -in the DAO DAO staking contract. - -We see that the message variant we want is `UpdateConfig` so in JSON -that becomes `update_config`. Likewise, the admin field is a string so -we call it `admin`. Inspecting the `Duration` type we see that it has -a `Height` and `Time` variant. We select the `Time` variant and -following our rules of enum serialzation the `duration` field becomes -`{ "time": }` - -As for the actual values, lets leave the admin as the DAO and update -the unstaking duration to ten seconds. Our `msg` field will then look -like this: - -```json -{ -"update_config": { - "admin": "", - "duration": { - "time": 10 - } - } -} -``` - -The last field on the WASM message is the `funds` field. We could use -this field to send some native tokens (for example, Juno) along with -our message. We don't want to send money to our staking contract so -we'll leave that empty. - -This makes our final WASM message: - -```json -{ -"wasm": { - "execute": { - "contract_addr": "", - "msg": { - "update_config": { - "admin": "", - "duration": { - "time": 10 - } - } - }, - "funds": [] - } - } -} -``` - -If we throw this into a custom message on a DAO DAO DAO proposal and -execute it it'll change the unstaking duration. diff --git a/docs/upgrading/_category_.json b/docs/upgrading/_category_.json index f7e27603..a00af4ec 100644 --- a/docs/upgrading/_category_.json +++ b/docs/upgrading/_category_.json @@ -1,4 +1,4 @@ { "label": "Upgrading", - "position": 7 + "position": 6 } diff --git a/docs/upgrading/v2.md b/docs/upgrading/v2.md index 1def858b..df3e826a 100644 --- a/docs/upgrading/v2.md +++ b/docs/upgrading/v2.md @@ -12,12 +12,12 @@ First, create a new proposal. Add the `Upgrade to V2` action under the `DAO Governance` category. ![Action picker modal with DAO Governance -category](/img/action-modal-dao-governance-category.png) +category](/img/shared/action-modal-dao-governance-category.png) ![DAO Governance category with Upgrade to V2 -action](/img/upgrade-to-v2-action.png) +action](/img/upgrading/upgrade-to-v2-action.png) -![Upgrade to V2 action](/img/upgrade-to-v2-action-done.png) +![Upgrade to V2 action](/img/upgrading/upgrade-to-v2-action-done.png) If you created any SubDAOs while on V1, you can optionally choose to officially recognize them as SubDAOs (which will show up on the DAO's page). diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js deleted file mode 100644 index b206b35c..00000000 --- a/src/components/HomepageFeatures.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import styles from './HomepageFeatures.module.css'; - -const FeatureList = [ - { - title: 'Create DAOs', - Svg: require('../../static/img/undraw_docusaurus_mountain.svg').default, - description: ( - <> - Create DAOs with a point-and-click GUI. No command line interface. - - ), - }, - { - title: 'Vote and Propose', - Svg: require('../../static/img/undraw_docusaurus_tree.svg').default, - description: ( - <> - Create and vote on proposals without writing code. - - ), - }, - { - title: 'Join the Cosmoverse', - Svg: require('../../static/img/undraw_docusaurus_react.svg').default, - description: ( - <> - Create your DAO on a Tendermint chain, and join the world of Cosmos with the magic of IBC. - - ), - }, -]; - -function Feature({Svg, title, description}) { - return ( -
-
- -
-
-

{title}

-

{description}

-
-
- ); -} - -export default function HomepageFeatures() { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/HomepageFeatures.module.css b/src/components/HomepageFeatures.module.css deleted file mode 100644 index b248eb2e..00000000 --- a/src/components/HomepageFeatures.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/src/pages/index.js b/src/pages/index.js index 5e9afb97..6fe2363f 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,5 +1,5 @@ -import React from 'react'; -import {Redirect} from '@docusaurus/router'; +import React from "react"; +import { Redirect } from "@docusaurus/router"; export default function Home() { return ; diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 666feb6a..00000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 966px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/static/img/copy-wallet.jpg b/static/img/copy-wallet.jpg deleted file mode 100644 index 198438ea..00000000 Binary files a/static/img/copy-wallet.jpg and /dev/null differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico deleted file mode 100644 index c03cf380..00000000 Binary files a/static/img/favicon.ico and /dev/null differ diff --git a/static/img/enable-multiple-choice-add-action.png b/static/img/features/proposals/enable-multiple-choice-add-action.png similarity index 100% rename from static/img/enable-multiple-choice-add-action.png rename to static/img/features/proposals/enable-multiple-choice-add-action.png diff --git a/static/img/enable-multiple-choice-dao-governance-category.png b/static/img/features/proposals/enable-multiple-choice-dao-governance-category.png similarity index 100% rename from static/img/enable-multiple-choice-dao-governance-category.png rename to static/img/features/proposals/enable-multiple-choice-dao-governance-category.png diff --git a/static/img/enable-multiple-choice-done.png b/static/img/features/proposals/enable-multiple-choice-done.png similarity index 100% rename from static/img/enable-multiple-choice-done.png rename to static/img/features/proposals/enable-multiple-choice-done.png diff --git a/static/img/multiple-choice-proposal-done.png b/static/img/features/proposals/multiple-choice-proposal-done.png similarity index 100% rename from static/img/multiple-choice-proposal-done.png rename to static/img/features/proposals/multiple-choice-proposal-done.png diff --git a/static/img/multiple-choice-proposal-option-1.png b/static/img/features/proposals/multiple-choice-proposal-option-1.png similarity index 100% rename from static/img/multiple-choice-proposal-option-1.png rename to static/img/features/proposals/multiple-choice-proposal-option-1.png diff --git a/static/img/multiple-choice-proposal-option-2.png b/static/img/features/proposals/multiple-choice-proposal-option-2.png similarity index 100% rename from static/img/multiple-choice-proposal-option-2.png rename to static/img/features/proposals/multiple-choice-proposal-option-2.png diff --git a/static/img/multiple-choice-proposal.png b/static/img/features/proposals/multiple-choice-proposal.png similarity index 100% rename from static/img/multiple-choice-proposal.png rename to static/img/features/proposals/multiple-choice-proposal.png diff --git a/static/img/proposal.png b/static/img/features/proposals/single-choice-proposal.png similarity index 100% rename from static/img/proposal.png rename to static/img/features/proposals/single-choice-proposal.png diff --git a/static/img/definitions/subdaos/dao-admin-execute-manage-members.png b/static/img/features/subdaos/dao-admin-execute-manage-members.png similarity index 100% rename from static/img/definitions/subdaos/dao-admin-execute-manage-members.png rename to static/img/features/subdaos/dao-admin-execute-manage-members.png diff --git a/static/img/definitions/subdaos/dao-admin-execute.png b/static/img/features/subdaos/dao-admin-execute.png similarity index 100% rename from static/img/definitions/subdaos/dao-admin-execute.png rename to static/img/features/subdaos/dao-admin-execute.png diff --git a/static/img/definitions/subdaos/dao-governance-category.png b/static/img/features/subdaos/dao-governance-category.png similarity index 100% rename from static/img/definitions/subdaos/dao-governance-category.png rename to static/img/features/subdaos/dao-governance-category.png diff --git a/static/img/definitions/subdaos/new-subdao.png b/static/img/features/subdaos/new-subdao.png similarity index 100% rename from static/img/definitions/subdaos/new-subdao.png rename to static/img/features/subdaos/new-subdao.png diff --git a/static/img/definitions/subdaos/prefilled-subdao-recognition.png b/static/img/features/subdaos/prefilled-subdao-recognition.png similarity index 100% rename from static/img/definitions/subdaos/prefilled-subdao-recognition.png rename to static/img/features/subdaos/prefilled-subdao-recognition.png diff --git a/static/img/definitions/subdaos/subdao-home-recognized.png b/static/img/features/subdaos/subdao-home-recognized.png similarity index 100% rename from static/img/definitions/subdaos/subdao-home-recognized.png rename to static/img/features/subdaos/subdao-home-recognized.png diff --git a/static/img/definitions/subdaos/subdaos-tab-recognized.png b/static/img/features/subdaos/subdaos-tab-recognized.png similarity index 100% rename from static/img/definitions/subdaos/subdaos-tab-recognized.png rename to static/img/features/subdaos/subdaos-tab-recognized.png diff --git a/static/img/definitions/subdaos/subdaos-tab.png b/static/img/features/subdaos/subdaos-tab.png similarity index 100% rename from static/img/definitions/subdaos/subdaos-tab.png rename to static/img/features/subdaos/subdaos-tab.png diff --git a/static/img/definitions/subdaos/unregistered-subdao-home.png b/static/img/features/subdaos/unregistered-subdao-home.png similarity index 100% rename from static/img/definitions/subdaos/unregistered-subdao-home.png rename to static/img/features/subdaos/unregistered-subdao-home.png diff --git a/static/img/logo.svg b/static/img/logo.svg deleted file mode 100644 index 9db6d0d0..00000000 --- a/static/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/action-modal-dao-governance-category.png b/static/img/shared/action-modal-dao-governance-category.png similarity index 100% rename from static/img/action-modal-dao-governance-category.png rename to static/img/shared/action-modal-dao-governance-category.png diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index 431cef2f..00000000 --- a/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index e4170504..00000000 --- a/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index a05cc03d..00000000 --- a/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1 +0,0 @@ -docu_tree \ No newline at end of file diff --git a/static/img/upgrade-to-v2-action-done.png b/static/img/upgrading/upgrade-to-v2-action-done.png similarity index 100% rename from static/img/upgrade-to-v2-action-done.png rename to static/img/upgrading/upgrade-to-v2-action-done.png diff --git a/static/img/upgrade-to-v2-action.png b/static/img/upgrading/upgrade-to-v2-action.png similarity index 100% rename from static/img/upgrade-to-v2-action.png rename to static/img/upgrading/upgrade-to-v2-action.png diff --git a/static/img/voting-config-multiple-choice-proposals.png b/static/img/voting-config-multiple-choice-proposals.png deleted file mode 100644 index 063f8571..00000000 Binary files a/static/img/voting-config-multiple-choice-proposals.png and /dev/null differ diff --git a/static/img/voting-config-no-advanced.png b/static/img/voting-config-no-advanced.png deleted file mode 100644 index 41129cb8..00000000 Binary files a/static/img/voting-config-no-advanced.png and /dev/null differ