{"id":18705082,"url":"https://github.com/aave/arc-timelock","last_synced_at":"2025-10-04T07:54:11.547Z","repository":{"id":38198617,"uuid":"429402354","full_name":"aave/arc-timelock","owner":"aave","description":"Set of contracts for Timelock Executor of ARC Market","archived":false,"fork":false,"pushed_at":"2022-10-18T11:06:10.000Z","size":1357,"stargazers_count":6,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-12T10:04:41.566Z","etag":null,"topics":["aave","arc","ethereum","executor","governance","solidity","timelock"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aave.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":"audit/Aave-Governance-Crosschain-Bridges-Security-Audit-Report.pdf","citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-18T11:24:19.000Z","updated_at":"2025-04-09T13:42:43.000Z","dependencies_parsed_at":"2023-01-19T15:16:50.849Z","dependency_job_id":null,"html_url":"https://github.com/aave/arc-timelock","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aave%2Farc-timelock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aave%2Farc-timelock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aave%2Farc-timelock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aave%2Farc-timelock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aave","download_url":"https://codeload.github.com/aave/arc-timelock/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248550634,"owners_count":21122933,"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","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":["aave","arc","ethereum","executor","governance","solidity","timelock"],"created_at":"2024-11-07T12:09:39.986Z","updated_at":"2025-10-04T07:54:06.515Z","avatar_url":"https://github.com/aave.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n        .///.                .///.     //.            .//  `/////////////-\n       `++:++`              .++:++`    :++`          `++:  `++:......---.`\n      `/+: -+/`            `++- :+/`    /+/         `/+/   `++.\n      /+/   :+/            /+:   /+/    `/+/        /+/`   `++.\n  -::/++::`  /+:       -::/++::` `/+:    `++:      :++`    `++/:::::::::.\n  -:+++::-`  `/+:      --++/---`  `++-    .++-    -++.     `++/:::::::::.\n   -++.       .++-      -++`       .++.    .++.  .++-      `++.\n  .++-         -++.    .++.         -++.    -++``++-       `++.\n `++:           :++`  .++-           :++`    :+//+:        `++:----------`\n -/:             :/-  -/:             :/.     ://:         `/////////////-\n```\n\n# Aave Arc Timelock\n\nThis repo contains smart contracts to add a timelock to the Aave Arc governance process. This timelock gives a guardian address the opportunity to cancel an approved governance action prior to its execution.\n\nThe core contract is the `TimelockExecutorBase`, an abstract contract that contains the logic to facilitate the queueing, delay, cancellation and/or execution of sets of actions sent by the aave governance contract. This base contract is extended in the `ArcTimelock` contract to manage receiving calls from the governance contract and queuing them within the `TimelockExecutorBase`.\n\nThis repo is based on the [governance-crosschain-bridges](https://github.com/aave/governance-crosschain-bridges). The `TimelockExecutorBase` is the same as the `BridgeExecutorBase` contract from this repo, just renamed to meet the usecase. The `governance-crosschain-bridges` repo, is an audited repo, and has 100% test coverage that can be accessed and ran within that repo.\n\n## Getting Started\n\n### Setup\n\n- Clone the repo\n- Run `npm install`\n\nFollow the next steps to setup the repository:\n\n- Install `docker` and `docker-compose`\n- Create an environment file named `.env` and fill out the environment variables per `example.env`\n- Make sure the information included in the environment file `.config.env` is correct.\n\n#### Note:\nIf using private key instead of mnemonic, please use the full 64 character hex string, without the \"0x\" prefix in the `.env` file. Additionally, please leave the mnemonic key blank.\n\n\n### Running in Docker\n\nTerminal Window 1\n`docker-compose up`\n\nOnce Terminal Window 1 Loaded - in a separate terminal window - Terminal Window 2: \n`docker-compose exec contracts-env bash`\n\nIn Terminal Window 2, run desired scripts from npm package file (i.e `npm run compile`)\n\n### Compile\n\n`npm run compile`\n\nThis will compile the available smart contracts.\n\n### Test\n\nAll tests will run a fork-based test with the existing deployed versions of aave governance and the aave arc market.\n\n- `test:arc:full:fork` - Runs a full test scenario, executing every action needed for the ARC market launch: deploy the ArcTimelock contract, release the market keys to the ArcTimelock, deploy the AIP payload and submit the governance proposal.\n\n- `test:timelock:full` - The ArcTimelock is set as the ArcMarketAdmin. A proposal is created, queued, voted on, and executed, passing the Aave Governance and the ArcTimelock. It uses a mock proposal to update some market parameters.\n\n- `test:timelock:update\"` - The ArcTimelock is set as the ArcMarketAdmin. A proposal is created, queued, voted on, and executed, passing the Aave Governance and the ArcTimelock. It uses a mock proposal to update parameters of the ArcTimelock.\n\n- `test:arc:keys` - Run a simple test scenario for releasing the ARC market keys to the ArcTimelock.\n\n- `test:arc:new-permission-admin` - Test the addition of a new permission admin to the ARC protocol.\n\n## Arc Timelock\n\n### Deploying parameters\n\n- `ethereumGovernanceExecutor` - the address that will have permission to queue ActionSets. This should be the aave governance executor\n- `delay` - the time required to pass after the ActionsSet is queued, before execution\n- `gracePeriod` - once execution time passes, you can execute this until the grace period ends\n- `minimumDelay` - if the delay is updated by the guardian, it cannot be less than this minimum\n- `maximumDelay` - if the delay is updated by the guardian, it cannot be more than this maximum\n- `guardian` - the admin address of this contract with the permission to cancel ActionsSets and update the delay value\n\n## Adding a new PermissionAdmin\n\nAdding a new permission admin to the ARC protocol needs a governance proposal to be approved by the community and the `guardian`.\n\nThe task `full:submit-proposal-new-permission-admin` lets you submit a proposal in this regard, providing the address of the new permission admin to add and the IPFS encoded hash of the AIP text.\n\n```\nADMIN_ADDRESS=\"Your Address\" IPFS_ENCODED_HASH=\"Your IPFS encoded hash\" npm run main:proposal:submit-new-permission-admin\n```\n\n## License\n\n[BSD-3-Clause](./LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faave%2Farc-timelock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faave%2Farc-timelock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faave%2Farc-timelock/lists"}