# Deploying Smart Contracts

### 1. Create Foundry Project & Write Contracts

Install Foundry:

```
curl -L <https://foundry.paradigm.xyz> | bash
foundryup
```

Initialize a new project:

```
forge init memecore-contract-demo
cd memecore-contract-demo
```

Open the folder in your preferred IDE (e.g. VS Code), and create  `src/Counter.sol`:

```solidity
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

contract Counter {
    uint256 public number;

    function setNumber(uint256 newNumber) public {
        number = newNumber;
    }
    function increment() public {
        number++;
    }
}
```

Compile:

```
forge build
```

Test code example `test/Counter.t.sol`:&#x20;

```solidity
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

import "forge-std/Test.sol";
import "../src/Counter.sol";

contract CounterTest is Test {
    Counter public counter;

    function setUp() public {
        counter = new Counter();
        counter.setNumber(0);
    }

    function testIncrement() public {
        counter.increment();
        assertEq(counter.number(), 1);
    }

    function testSetNumber(uint256 x) public {
        counter.setNumber(x);
        assertEq(counter.number(), x);
    }
}
```

Run tests:

```powershell
forge test
```

### 2. **Deploying Contracts and Checking Results**

> The following examples are based on MemeCore’s **testnet**, the Insectarium network.

#### Requirements

* Your EOA (e.g. MetaMask) wallet must have M tokens and your private key is needed (for signing transactions and paying fees).
  * If you are connecting to a testnet, you can obtain tokens from the [testnet faucet](/developer-guide/quickstart/receive-test-tokens-from-faucet.md); *If you are connecting to the mainnet, you will need to prepare the necessary funds separately.*
* Keep your private key secure and never expose it.

#### Deploying Contracts

Deployment command:

```
forge create --rpc-url <YOUR_RPC_URL>
             --private-key <YOUR_PRIVATE_KEY>
             src/Example.sol:Example
```

For example:

```
forge create --rpc-url https://rpc.insectarium.memecore.net
             --private-key 0x5e2b...b9b6b6
             src/Counter.sol:Counter
```

{% hint style="info" %}
If you are connecting to the mainnet, please refer to the Mainnet RPC URL in the [Memecore Network Information](/memecore/connect-to-memecore.md).
{% endhint %}

If a constructor takes arguments:

```
forge create --rpc-url <YOUR_RPC_URL>
             --constructor-args "Arg1" "Arg2"
             --private-key <YOUR_PRIVATE_KEY>
             src/Example.sol:Example
```

#### **Checking Results**

* After running the deployment command, the contract address and transaction hash will be displayed in the console upon success.
* You can search for the contract address on the Block Explorer (e.g. [Insectarium Explorer](https://insectarium.blockscout.memecore.com/)) to view the contract code, transactions, and event logs.
  * You can find the Block Explorer links for each network in the [Memecore Network Information](/memecore/connect-to-memecore.md).

### 3. Common Issues & Solutions

* Network connection failure: Ensure the RPC URL and PRIVATE KEY are correct.
* Insufficient gas: Make sure your deployment account (with M tokens) has sufficient balance.
* Transaction failure/Compile error: Review your contract code, command options, and environment variables for potential problems.


---

# 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://docs.memecore.com/developer-guide/deploying-smart-contracts.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.
