> ## Documentation Index
> Fetch the complete documentation index at: https://docs.carletonblockchain.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Pre-requisites?

> Lets deploy your first smart contract

<Steps>
  <Step title="Connect to a VPN">
    <Card title="Proton VPN" icon="globe" href="https://protonvpn.com/">
      Heres a good free vpn that doesn't keep logs.
    </Card>
  </Step>

  <Step title="Download Metamask">
    <Card title="Metamask" icon="paw" href="https://metamask.io/">
      Metamask is very good EVM wallet
    </Card>
  </Step>

  <Step title="Connect wallet to testnet">
    For the purposes of our demo, we are going to complete all operations on *Testnet*.
    Mainnet is real. You are transacting with real currencies etc. On Testnet is a sandbox environment
    and duplicate of Mainnet. As the name suggests, it provides developers with a sandbox environment to
    test code.

    <Tabs>
      <Tab title="Open Metamask">
        <img height="25" src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/meta/meta0.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=487e26d8f5ac0d2cdf309df8f51f3d38" data-path="images/meta/meta0.png" />
      </Tab>

      <Tab title="Open Network Tab">
        <img height="25" src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/meta/meta1.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=4b15307a8d60c509207162dccc30bb3d" data-path="images/meta/meta1.png" />
      </Tab>

      <Tab title="Select Sepolia Testnet">
        <img height="25" src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/meta/meta2.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=0a7065de4ed692625939db85f8b84247" data-path="images/meta/meta2.png" />
      </Tab>
    </Tabs>
  </Step>

  <Step title="Fund Wallet">
    Since it's a testnet, funds are free. However, since we are simulating a real
    environment, actions on-chain will still require gas. That is why we need to
    fund in. Take your Sepolia public address and put it into [Google Web3
    Faucet](https://cloud.google.com/application/web3/faucet/ethereum/sepolia)

    <Tabs>
      <Tab title="Receive">
        <img height="25" src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/meta/meta3.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=4fbb4bf395687204611681c033ba6b60" data-path="images/meta/meta3.png" />
      </Tab>

      <Tab title="Copy">
        <img height="25" src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/meta/meta4.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=9f1f3111e8f8993f8e8cc7090673ed0c" data-path="images/meta/meta4.png" />
      </Tab>
    </Tabs>
  </Step>

  <Step title="Grab private key">
    Walkthrough on where to grab your private keys

    <Tabs>
      <Tab title="Home">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk1.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=1104f991d16c061ccf00fc50b95466fd" width="226" height="378" data-path="images/pk/pk1.png" />
      </Tab>

      <Tab title="Accounts">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk2.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=f2fcb2f446627154d019b89c16ee9d24" width="225" height="380" data-path="images/pk/pk2.png" />
      </Tab>

      <Tab title="Account Settings">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk3.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=75023093b4d8015cde160e8e7ebf475a" width="225" height="378" data-path="images/pk/pk3.png" />
      </Tab>

      <Tab title="Show priv key">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk4.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=178f89c5388cc0fa4a2af5606a4e1a66" width="224" height="382" data-path="images/pk/pk4.png" />
      </Tab>

      <Tab title="Enter password">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk5.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=94570648e4f9bf9e92700f6e42bacafc" width="225" height="379" data-path="images/pk/pk5.png" />
      </Tab>

      <Tab title="Hold">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk6.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=728d3426aace301736e6fb7e91c571f6" width="222" height="378" data-path="images/pk/pk6.png" />
      </Tab>

      <Tab title="Copy">
        <img src="https://mintcdn.com/carletonblockchain/i-a8dAUgkm3FC6Jr/images/pk/pk7.png?fit=max&auto=format&n=i-a8dAUgkm3FC6Jr&q=85&s=a096282115af9a591a69a8193d1c51d5" width="223" height="378" data-path="images/pk/pk7.png" />
      </Tab>
    </Tabs>
  </Step>

  <Step title="Create env file in Foundry project">
    It's good practice to keep sensitive info such as private keys hidden in env
    files.

    ```markdown {1} theme={null}
    PRIVATE_KEY=<YOUR_PRIVATE_KEY>
    ```
  </Step>

  <Step title="Wallet Private Key">
    Your private keys are used to sign transactions on the blockchain. When we are
    deploying a contract on-chain, we are the ones signing off on this action.
  </Step>

  <Step title="RPC Node">
    RPC nodes act as the bridge between your code and the actual blockchain. We
    can get a free one right [here](https://ethereum-sepolia-rpc.publicnode.com).

    ```markdown {2} theme={null}
    PRIVATE_KEY=<YOUR_PRIVATE_KEY>
    RPC_URL=https://ethereum-sepolia-rpc.publicnode.com
    ```

    Now lets run source .env to update your load your env file into your project

    ```markdown theme={null}
    source .env
    ```
  </Step>
</Steps>
