# Set up your development environment

All of the [developer guides](https://v1-docs.cozy.finance/for-developers/guides) assume that you are using a TypeScript development environment with a project structure similar to the one described here. You can follow the instructions in this section to prepare a development environment for working with the sample scripts in the [Cozy developer guide](https://github.com/Cozy-Finance/cozy-developer-guides) repository.

## Before you begin

Before you set up the development environment for creating protection markets, verify the following:

* You have an internet connection and access to a shell terminal.
* You have `node.js` and `yarn` installed.
* You can connect to a node running locally or through a service such as [Infura](https://infura.io/).
* You have access to a wallet—including its private key—and can send transactions.

## Prepare the development environment

To set up the development environment:

1. Clone the [Cozy Developer Guides](https://github.com/Cozy-Finance/cozy-developer-guides) repository by running the following command:

   ```
    git clone git@github.com:Cozy-Finance/cozy-developer-guides.git
   ```
2. Install package dependencies by running the following command:

   ```
    yarn
   ```
3. Create an environment file called `.env` to store information for connecting to the node provider and wallet.

   For example, if you are using the infura API and connecting to the Rinkeby test network, your `.env` file should look similar to the following example:

   ```bash
    RPC_URL=https://rinkeby.infura.io/v3/yourInfuraId
    PRIVATE_KEY=0xYourPrivateKey
   ```

   Be careful to never commit these secrets to a repository!
4. Test your local environment by running the following command:

   ```
    yarn test
   ```

   If your development environment is ready to use, you should see output similar to the following to indicate that tests have passed:

   ```
        Creating Typechain artifacts in directory typechain for target ethers-v5
        Successfully generated Typechain artifacts!

        MockTrigger
          Deployment
            ✓ initializes properly (52ms)
            ✓ should not deploy if market is already triggered (424ms)
          checkAndToggleTrigger
            ✓ does nothing when it should do nothing
            ✓ toggles trigger when expected to toggle trigger (58ms)
            ✓ returns a boolean with the value of isTriggered (446ms)
            5 passing (7s)
   ```

## What's next?

The settings in the `.env` file are used to initialize the wallet and send transactions when the TypeScript files such as `create-protection-market.ts` are executed.

For example:

```javascript
// Hardhat and ethers imports
import hre from 'hardhat';
import '@nomiclabs/hardhat-ethers';
import { Contract, ContractFactory } from 'ethers';

// Import some helper methods we have
import { getChainId, getContractAddress, logSuccess, logFailure, findLog, fundAccount } from '../utils/utils';

// Import any required ABIs
import comptrollerAbi from '../abi/Comptroller.json';

// STEP 0: ENVIRONMENT SETUP
// Use the default Hardhat provider
const provider = hre.ethers.provider;

// Initialize our signer using the private key from the environment variable
const signer = new hre.ethers.Wallet(process.env.PRIVATE_KEY as string, hre.ethers.provider);

// Chain ID is used to determine which contract addresses to use, and we use a 
// special helper method for getting chain ID. Normally you would get this from
// (await ethers.provider.getNetwork()).chainId, but since we are testing against
// a forked network we need to ensure we used the forked network's ID (e.g. 1 for
// mainnet) instead of the Hardhat default Chain ID of 1337
const chainId = getChainId(hre);
```

To finish setting up the development environment, you need to obtain the contract addresses and ABIs. You can find all of the contract addresses on the [Contract deployments](https://v1-docs.cozy.finance/for-developers/contract-deployments) page. If you cloned the [Cozy Developer Guides](https://github.com/Cozy-Finance/cozy-developer-guides) repository, you'll already have the ABIs. If you did not clone the repository, the contracts are verified on Etherscan, so you can get the ABIs from there \[NOTE: currently not true].
