# Remix IDE Deployment Guide - ChainID 138

**Date**: 2025-01-12  
**Purpose**: Guide for deploying contracts via Remix IDE when direct deployment fails

---

## Overview

Remix IDE provides an alternative deployment method that may work when direct `forge` deployment fails. This guide walks through deploying contracts to ChainID 138 using Remix IDE.

---

## Prerequisites

1. **Remix IDE Access**
   - Visit: https://remix.ethereum.org
   - No account required (works in browser)

2. **Network Configuration**
   - RPC Endpoint: `http://192.168.11.250:8545`
   - ChainID: 138
   - Network Name: DBIS Chain

3. **Deployer Account**
   - Private Key: (from `.env` file)
   - Address: `0x4A666F96fC8764181194447A7dFdb7d471b301C8`
   - Balance: 999M+ ETH

---

## Step-by-Step Deployment

### Step 1: Connect to Remix IDE

1. Open browser and navigate to: https://remix.ethereum.org
2. Wait for Remix IDE to load completely

### Step 2: Create Contract File

1. In Remix IDE, click **"File Explorer"** in the left sidebar
2. Click **"Create New File"**
3. Name the file: `MockLinkToken.sol`
4. Copy the contract code:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract MockLinkToken {
    string public name = "Chainlink Token";
    string public symbol = "LINK";
    uint8 public decimals = 18;
    uint256 public totalSupply;
    
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    
    constructor() {
        totalSupply = 1000000000 * 10**18; // 1 billion tokens
        balanceOf[msg.sender] = totalSupply;
        emit Transfer(address(0), msg.sender, totalSupply);
    }
    
    function transfer(address to, uint256 value) external returns (bool) {
        require(balanceOf[msg.sender] >= value, "Insufficient balance");
        balanceOf[msg.sender] -= value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }
    
    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }
    
    function transferFrom(address from, address to, uint256 value) external returns (bool) {
        require(balanceOf[from] >= value, "Insufficient balance");
        require(allowance[from][msg.sender] >= value, "Insufficient allowance");
        balanceOf[from] -= value;
        balanceOf[to] += value;
        allowance[from][msg.sender] -= value;
        emit Transfer(from, to, value);
        return true;
    }
}
```

### Step 3: Compile Contract

1. Click **"Solidity Compiler"** in the left sidebar
2. Select compiler version: **0.8.19** (or compatible)
3. Click **"Compile MockLinkToken.sol"**
4. Wait for compilation to complete (check for green checkmark)

### Step 4: Configure Network Connection

1. Click **"Deploy & Run Transactions"** in the left sidebar
2. Under **"Environment"**, select **"Injected Provider - MetaMask"** or **"Custom"**
3. If using Custom:
   - Click **"Add Network"**
   - Network Name: `DBIS Chain`
   - RPC URL: `http://192.168.11.250:8545`
   - Chain ID: `138`
   - Currency Symbol: `ETH`
   - Block Explorer: `https://explorer.d-bis.org`

### Step 5: Connect Wallet

1. If using MetaMask:
   - Click **"Connect to MetaMask"**
   - Approve connection in MetaMask
   - Ensure correct account is selected

2. If using Custom Provider:
   - Enter your private key (from `.env` file)
   - **⚠️ WARNING**: Only use in secure environment
   - Click **"Connect"**

### Step 6: Deploy Contract

1. In **"Deploy & Run Transactions"**:
   - Select contract: **"MockLinkToken"**
   - Constructor parameters: (none required)
   - Click **"Deploy"**

2. Wait for deployment:
   - Transaction will appear in transaction list
   - Wait for confirmation
   - Check transaction status

### Step 7: Verify Deployment

1. After deployment, contract address will appear
2. Click on contract address to view details
3. Test contract functions:
   - `name()` - Should return "Chainlink Token"
   - `symbol()` - Should return "LINK"
   - `totalSupply()` - Should return 1000000000000000000000000000

---

## Troubleshooting

### Issue: Cannot Connect to Network

**Solution**:
- Verify RPC endpoint is accessible: `http://192.168.11.250:8545`
- Check if network allows external connections
- Try using MetaMask with custom network

### Issue: Transaction Fails

**Solution**:
- Check deployer account balance
- Verify gas settings (increase gas limit if needed)
- Check transaction status on block explorer

### Issue: Contract Not Deployed

**Solution**:
- Verify transaction was actually sent
- Check block explorer for transaction
- Review Remix console for errors

---

## Alternative: Minimal Contract Test

If full contract fails, try deploying a minimal contract first:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract TestMinimal {
    uint256 public x = 1;
    
    function setX(uint256 _x) external {
        x = _x;
    }
}
```

This minimal contract (204 bytes) can help verify if the issue is contract-specific or network-wide.

---

## Security Notes

1. **Private Key Security**
   - Never share your private key
   - Only use Remix IDE in secure environment
   - Consider using MetaMask instead of direct private key

2. **Network Security**
   - Verify RPC endpoint is legitimate
   - Check network configuration before connecting
   - Be cautious with test networks

---

## Next Steps

After successful deployment:

1. **Save Contract Address**
   - Copy deployed contract address
   - Update `.env` file with new address
   - Update configuration files

2. **Verify Contract**
   - Use block explorer to verify contract
   - Check contract bytecode matches source
   - Verify constructor parameters

3. **Test Contract Functions**
   - Test all contract functions
   - Verify contract behavior
   - Check event emissions

---

**Last Updated**: 2025-01-12

