{"id":20585802,"url":"https://github.com/shutter-network/shutter-dao","last_synced_at":"2025-08-23T05:09:40.577Z","repository":{"id":217538924,"uuid":"720077672","full_name":"shutter-network/shutter-dao","owner":"shutter-network","description":null,"archived":false,"fork":false,"pushed_at":"2024-01-17T12:54:54.000Z","size":754,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-08-23T05:09:40.035Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shutter-network.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-17T14:29:43.000Z","updated_at":"2024-01-16T18:11:48.000Z","dependencies_parsed_at":"2024-01-17T03:19:37.976Z","dependency_job_id":"3f8b353d-7899-4877-a642-fba376c4cd08","html_url":"https://github.com/shutter-network/shutter-dao","commit_stats":null,"previous_names":["shutter-network/shutter-dao"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shutter-network/shutter-dao","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shutter-network%2Fshutter-dao","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shutter-network%2Fshutter-dao/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shutter-network%2Fshutter-dao/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shutter-network%2Fshutter-dao/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shutter-network","download_url":"https://codeload.github.com/shutter-network/shutter-dao/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shutter-network%2Fshutter-dao/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271745490,"owners_count":24813503,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T07:09:24.888Z","updated_at":"2025-08-23T05:09:40.526Z","avatar_url":"https://github.com/shutter-network.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shutter DAO blueprint\n\nThis is the official blueprint for a Shutter DAO. Below, you will find the instructions to deploy a Shutter DAO and how to modify the configuration parameters.\n\nThis repo comes with a suggested default configuration. If you intend to deploy with the proposed configuration, you can skip the step `2) Modify DAO Parameters`.\n\n## 1) Configuration\nCreate a `.env` file in the root depository of the project.\n\nFor your convenience, you execute the following command in the repository's root directory.\n\n``` \ncp .env.example .env\n```\n\nConfigure the following parameters:\n\n```\n# Etherscan API key to verify the contracts\nETHERSCAN_API_KEY=\n# Ethereum mainnet RPC provider\nMAINNET_PROVIDER=\n# Private key used to deploy and configure the contracts\nMAINNET_DEPLOYER_PRIVATE_KEY=\n# Choose a random value to determine the DAO's safe address\n# it is recommended to use \"openssl rand -hex 32 | tr -dc '[0-9]'\"\nMAINNET_SAFE_SALT=\n```\n\nDeploying all contracts requires around 15.2M gas. At a gas price of 30 Gwei, this would cost around 0.5 ETH.  \nMake sure to have the account funded with *at least* that amount of ETH. Note that the total costs to deploy a DAO depends on the current gas price.\n\n## 2) Modify DAO parameters\n\nIf you want to alter DAO parameter settings, you can make the following changes:\n\n### 2.1) Changing token allocations and vesting schedules\nYou need to generate a new Merkle root hash to change token allocation and vesting schedules.\nPlease visit https://github.com/shutter-network/shutter-dao-claiming-app-data and follow the README.\nModify the CSV files to your needs and execute the Merkle root hash generation. Replace the parameter\n`rootHash` and `tokenBalance` under `airdropConfig` in `config/shutterDaoConfig.ts` with the generated values.\n\n### 2.2) DAO governance parameters\nInside the `config/shutterDAOConfig.ts`, you could change a DAO parameters as you wish.\nPlease remember that the values `airdrop.rootHash` and `airdrop.tokenBalance` should be taken from the generated output\nfile as described above.\n\n```\n{\n  // name of the DAO\n  name: 'Shutter DAO',\n  // Snapshot | url of the snapshot page if one exists\n  snapshotURL: '',\n  // Linear Strategy |  Length of time that voting occurs\n  votingPeriodBlocks: 5, // (blocks)\n  // Linear Strategy | Length of time between when a proposal is passed and when it can be actually be executed.  For the top level Decent DAO we may want to have this be 0\n  timeLockPeriodBlocks: 0, // (blocks)\n  // Linear Strategy | Length of time that a successful proposal has to be executed, after which is will expire.  We can simply set this to the the same length decided on for Voting Period.\n  executionPeriodBlocks: 86400, // (blocks)\n  // Linear Strategy | Percentage of total possible tokens that must vote in order to consider a proposal result valid.  We should take into account that a large portion of tokens will be locked for investors, who may never vote.\n  quorumBasisNumerator: 4, // (basis points, will be divided by 1_000_000)\n  // Linear Strategy | Percentage of total possible tokens that must vote YES in order to pass a proposal.  Suggested 50% for a simple majority.\n  votingBasisNumerator: 500000, // (basis points, will be divided by 1_000_000)\n  // Linear Strategy | Percentage of total possible tokens that must be delegated to a user in order for them to create a proposal.  Suggested 1%.\n  proposalRequiredWeightTokens: 0,  // (delegated voting token balance)\n\n  // Airdrop | Configuration for the airdrop contract.\n  airdropConfig: {\n    // Total sum of the airdrop allocations as defined in the allocations referenced by the root hash.\n    tokenBalance: BigNumber.from('405642857142857047400000000'), // (wei)\n    // Root hash of the airdrop merkle tree.\n    rootHash: '0x07ad1b3aa5ce0e596eeef606c53ba868ba435b052a6b11e7aa7a55a5b6f6b02a',\n    // Deadline for the airdrop redemption.  This is the timestamp after which the airdrop will be closed.\n    redeemDeadline: 1721000000, // (seconds; 1721000000 ~= 2024-07-14T23:33:20 UTC)\n  },\n\n  // The initial keyper set that is associated with the DAO. Taken from the Shutter keyper set 1 as deployed on Gnosis chain at `0x5162f51ef5cb9d12f5f64e17fc910d17af37f833`\n  initialKeyperSet: {\n    keypers: [\n      \"0x52e94E093a162F1D3D5481828cfaB3807Ea32b3A\",\n      \"0x1c0a6fDd52A0c3F18cd6640695884e6248a13533\",\n      \"0x618509C70Bd8b97b78B43c6AF081a55f7225901f\",\n      \"0x3cA93C6c6E3081B26eCA2af4ec2E50d1BA975aE4\",\n      \"0x90A09a9797A04CA679D8F8A6748f728D8f49F34B\",\n      \"0x7238E49003771F9A1bE44585483979c69B6b0F5c\",\n      \"0x23d33956940083e0E92Dd608D6E576AfbEcc83a9\",\n      \"0x772213aaD4c6B37d2cc0Fa3B74F9ace5a028B8C8\",\n      \"0xcB43AEAA8c029Da18A499dC684FdD250ab3FCd13\",\n      \"0xf8A17443c1e98535aBe4D6D9Fdb9C99E8D36D87a\",\n      \"0xfc7d75e4bb6D18591cDc1E766CE7cF231bc08fBc\",\n      \"0xE1A425b2726D92Bc5178e7F5Ed30256481F5337f\",\n      \"0x322F63e33B35CD227a51ae2B8b7Ef9EB8Ca8A238\",\n    ],\n    collator: \"0xe67b35a6eC0F206F28C72c32c6F9dA55D8c3943D\",\n    thresholdRatio: 0.3,\n    activationBlock: 18234313,\n  },\n};\n```\n\n## 3) Deploy DAO\n\n### 3.1) Set up environment\n\nRequirements: \n\n- Node.js \u003e=v18\n\nIn the root directory, execute\n\n```\nnpm install\n```\n\n### 3.2) Run deployment command\n\nAfter configuring all necessary files, as in the steps above, execute the following commands in the root directory.\n``` \nnpx hardhat --network mainnet deploy-contracts\n```\n\nA message `🚀 Shutter DAO contracts successfully deployed 🚀` will be displayed once the contracts are successfully and completely deployed.\n\n\n#### Ensure that the contracts are verified on Etherscan\n\nThe `deploy-contracts` task will also automatically attempt to verify the contracts on Etherscan.\nThis can sometimes fail due to rate limiting. If this should happen just run the following command again to complete the verification:\n\n```shell\nnpx hardhat --network mainnet verify-contracts\n```\n\n(Note that a message like: `Failed to verify contract Collator: NOTOK, Already Verified` is not an error, but just \nmeans that the contract was already verified.)\n\n\nAfter successfully executing the deployment command, the deployment artifacts will be stored in `deployments/mainnet/`\nin the project's root directory. You will need these files in the next step.\n\n## 4) Proposing the deployment\nAfter successfully deploying a shutter DAO, you can propose the deployment to the community by creating a PR in \n[shutter-dao-deployment-artifacts](https://github.com/shutter-network/shutter-dao-deployment-artifacts).\n\nPlease upload the generated files in a PR.\n\nYou can do this by forking the above repo and then executing the following commands (outside of this repository):\n\n```\ngit clone git@github.com:\u003c\u003cYOUR_FORK_OF_SHUTTER_DAO_DEPLOYMENT_ARTIFACTS\u003e\u003e.git\ncd shutter-dao-deployment-artifacts\ncp -a \u003c\u003cPATH_TO_SHUTTER_DAO_REPOSITORY\u003e\u003e/deployments .\ngit add deployments\ngit commit -m \"Shutter DAO deployment by \u003c\u003cYOUR_NAME\u003e\u003e\"\ngit push -u origin main\n```\n\nThis will create a new commit in your fork of the `shutter-dao-deployment-artifacts` repository and push the deployment artifacts to it.\nPlease open a PR with this branch against the `main` branch of the `shutter-dao-deployment-artifacts` repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshutter-network%2Fshutter-dao","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshutter-network%2Fshutter-dao","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshutter-network%2Fshutter-dao/lists"}