# EVM Gauntlet Many Chain Multisig Gauntlet

## Note

Commands are interfacing with the MCM / Timelock contracts version at [this ccip-owner-contracts repository](https://github.com/smartcontractkit/ccip-owner-contracts)


## Timelock Commands

The general format for a timelock gauntlet command is:

```
yarn gauntlet timelock:<OPERATION> --network=<NETWORK> [FLAGS] <TIMELOCK_ADDRESS>
```

### Basic Commands

`deploy`:
```
yarn gauntlet timelock:deploy --network=<NETWORK> --minDelay=<NUMBER> --admin=<ADDRESS> --proposers=<COMMA_DELIMITED_PROPOSERS> --executors=<COMMA_DELIMITED_EXECUTORS> --cancellers=<COMMA_DELIMITED_CANCELLERS> --bypassers=<COMMA_DELIMITED_BYPASSERS>
```

`scheduleBatch`: 
```
yarn gauntlet timelock:schedule_batch --network=<NETWORK> --targets=0x0,0x1,0x2 --values=30,20,10 --payloads=0x0,0x1,0x2 --predecessor=0x0 --salt=0x0 --delay=10
```

`cancel`:
```
yarn gauntlet timelock:cancel --network=<NETWORK> --id=<ID> <TIMELOCK_ADDRESS>
```

`executeBatch`
```
yarn gauntlet timelock:execute_batch --network=<NETWORK> --targets=0x0,0x1,0x2 --values=30,20,10 --payloads=0x0,0x1,0x2 --predecessor=0x0000000000000000000000000000000000000000000000000000000000000000 --salt=0x0000000000000000000000000000000000000000000000000000000000000000
```

`bypasserExecuteBatch`: 
```
yarn gauntlet timelock:bypasser_execute_batch --network=<NETWORK> --targets=0x0,0x1,0x2 --values=30,20,10 --payloads=0x0,0x1,0x2 <TIMELOCK_ADDRESS>
```

`grantRole`:
```
yarn gauntlet timelock:grant_role --network=<NETWORK> --role=<proposer | executor | canceller | bypasser | admin> --address=<ADDRESS> <TIMELOCK_ADDRESS>
```

`renounceRole`:
```
yarn gauntlet timelock:renounce_role --network=<NETWORK> --role=<proposer | executor | canceller | bypasser | admin> --address=<ADDRESS> <TIMELOCK_ADDRESS>
```

`revokeRole`:
```
yarn gauntlet timelock:revoke_role --network=<NETWORK> --role=<proposer | executor | canceller | bypasser | admin> --address=<ADDRESS> <TIMELOCK_ADDRESS>
```

`updateDelay`:
```
yarn gauntlet timelock:update_delay --delay=1 <TIMELOCK_ADDRESS>
```

### Wrapped Commands

The timelock wrapped commands (suffixed with keyword `wrapped`) allows users to pass in an input file with arbitrary low level gauntlet commands, which will then be batched and executed on the timelock.

For example, given an input file like:

```
{
    "transactions": [
      {
        "commandId": "ownership:accept_ownership",
        "input": {},
        "target": "0x1A61dc6d49490b18eD318033F8aaAC3260E281C0"
      },
      {
        "commandId": "ownership:accept_ownership",
        "input": {},
        "target": "0x2CcB80Bd7d0b0E10aCd401CDCA46a3486bf75a9a"
      },
      {
        "commandId": "ownership:accept_ownership",
        "input": {},
        "target": "0xD0792582d5d3Bdb022A7FC29e9976aaa4Fe75E03"
      },
      {
        "commandId": "ownership:accept_ownership",
        "input": {},
        "target": "0xe37d36db213f92daEAE8CCff628405340D8B5B38"
      }
    ]
  }
```

Calling `yarn gauntlet timelock:<TIMELOCK_OPERATION>:wrapped --inputFile=<PATH_TO_FILE> --network=<NETWORK> <TIMELOCK_ADDRESS>` will batch all of the transactions and execute the desired timelock operation

Note: each command has a few additional flags that might need to be set

`schedule_batch`: takes in required `delay` (in seconds) and optional `predecessor` and `salt` flags
`execute_batch`: takes in optional `predecessor` and `salt` flags
`cancel`: takes in optional `predecessor` and `salt` flags