# Getting Started with edeXa (Developer Guide)

1\. Introduction

Welcome to edeXa! Whether you're building on the Testnet or Mainnet, edeXa offers developers a flexible, fast, and secure blockchain environment for your decentralized applications. Let’s get you started on the right foot.

#### 2. Step-by-Step Guide to Get Started

**Step 1: Set Up Your Development Environment**

To start developing on edeXa, you'll need a few basic tools:

* **Install edeXa Wallet** (recommended) or **MetaMask** (or another Ethereum-compatible wallet) to interact with the blockchain.
* **Set up Remix IDE** or your preferred development environment for smart contracts.\
  Open your browser and visit <https://remix.ethereum.org/>.\
  ![](https://2774938473-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNudzL8uUR1SxRnPj4wxZ%2Fuploads%2F9VwAexap1FRSW2u3C2KU%2Fimage.png?alt=media\&token=48c243d4-6305-4f3d-aeb9-49bc7921e319)

<div align="left"><figure><img src="https://2774938473-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNudzL8uUR1SxRnPj4wxZ%2Fuploads%2FIOmDi5zlctRyjKiygzdp%2Fimage.png?alt=media&#x26;token=1abe237b-9303-40d3-8370-9cbef04ed034" alt=""><figcaption></figcaption></figure></div>

**Step 2: Connect to edeXa Network**

To connect to the edeXa Testnet or Mainnet:

**RPC URLs for Testnet & Mainnet:**

* **Testnet**: <https://testnet.edexa.network/rpc>
* **Mainnet**: <https://mainnet.edexa.network/rpc>\
  You can also visit <https://chainlist.org/?search=edexa&testnets=true>

<figure><img src="https://2774938473-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNudzL8uUR1SxRnPj4wxZ%2Fuploads%2FLpPshmfM3tG9HwxqJirP%2Fimage.png?alt=media&#x26;token=269da20c-550a-4fe4-a666-af5a59cc69fb" alt=""><figcaption></figcaption></figure>

Use these URLs to configure your wallet or development tools like **Truffle** or **Hardhat** for seamless interaction with the network.

**Step 3: Access the edeXa Faucet**

Get **Testnet EDX tokens** for testing your contracts or transactions on Testnet:

**Faucet link**: [edeXa Testnet Faucet](https://faucet.edexa.com)

<figure><img src="https://2774938473-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNudzL8uUR1SxRnPj4wxZ%2Fuploads%2F2Il21BZ8o9LRHkYrpb6N%2Fimage.png?alt=media&#x26;token=b8e40ec3-b085-4be5-ac64-fd58b37fd689" alt=""><figcaption></figcaption></figure>

Get tokens to experiment with smart contract interactions or transactions.

**Step 4: Start Building Your Smart Contracts**

1. **Necessary Preparations:** Open your browser and visit [Remix IDE](https://remix.ethereum.org/).
   * Click the **File Explorer** icon in the left navigation bar of Remix.
   * Click the "+" icon to create a new workspace. Name your workspace (e.g., "edeXaWorkspace").
   * Create a new `.sol` smart contract, and name it something easy to remember like `MyContract.sol`.
2. **Basic Operations:** In your new `.sol` smart contract, import `edeXaApp.sol`. This will allow your smart contract to inherit from `edeXaApp` and access its functionality.

   For example:

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

   import "@edexa/contracts/edeXaApp.sol";  // Replace with actual edeXa contract path

   contract MyContract is edeXaApp {
       // Your contract code
   }
   ```

   * Override the `_edeXaReceive` function in your smart contract. This is a protected function that will be called when your contract receives a cross-chain message. You can customize this function to define how your contract will handle incoming messages.

   ```solidity
   solidityCopyEditfunction _edeXaReceive(
       bytes calldata data,
       bytes32 messageId,
       uint256 fromChainId,
       address fromSC
   ) internal override {
       // Custom handling for incoming message
   }
   ```
3. **Initialize Your Smart Contract:** When initializing your smart contract, call the `edeXaApp` initialize function. This function takes two parameters: the `admin` and the `_edeXaGateway` address.

   Example:

   ```solidity
   solidityCopyEditconstructor(address admin, address _edeXaGateway) edeXaApp() {
       initialize(admin, _edeXaGateway);
       // Your initialization code
   }
   ```
4. **Sending Cross-Chain Messages:** To send messages or contract calls to other chains, you can use the `_dispatchMessage` function provided by `edeXaApp`. This function allows you to send messages to any specified chain or contract.

   Example:

   ```solidity
   solidityCopyEditfunction sendMessage(
       uint256 toChainId, address toAddress, bytes memory msgData,
       uint256 feeAmount) public payable {
       _dispatchMessage(toChainId, toAddress, msgData, feeAmount);
   }
   ```
5. **Estimate Fees:** Use the `estimateFee` function to calculate the fee required to send a cross-chain message. This function takes two parameters: the target chain ID and the gas limit.

   Example:

   ```solidity
   solidityCopyEditfunction sendMessage(
       uint256 toChainId, address toAddress,
       bytes memory msgData, uint256 gasLimit) public payable {
       uint256 fee = estimateFee(toChainId, gasLimit);
       require(msg.value >= fee, "Insufficient fee");
       _dispatchMessage(toChainId, toAddress, msgData, msg.value);
   }
   ```

***

#### 3. Resources

* edeXa API Documentation
* [edeXa GitHub Repositories](https://github.com/devEdexa)
* [edeXa Smart Contract Templates](https://github.com/devEdexa/edexa.js)
* [edeXa Gas Tracker](https://explorer.testnet.edexa.network/gas-tracker)
* [edeXa Community](https://discord.com/invite/TKBQS9tZJY)

#### 4. Contact & Support

* **Join the Developer Community**: [Discord](https://discord.com/invite/TKBQS9tZJY)
* **Submit a Support Request**: <helpdesk@edexa.com>
* **Explore edeXa Labs**: [edeXa Labs Innovation Center](https://x.com/edeXaLabs)
