# Set up your development environment

All of the [developer guides](/for-developers/guides.md) 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](/for-developers/contract-deployments.md) 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].


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://v1-docs.cozy.finance/for-developers/guides/development-environment-setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
