Solidity / Testnet-д deploy хийх

Testnet-д deploy хийх

Орон нутгийн тест амжилттай болсны дараа Sepolia testnet-д deploy хийнэ. Sepolia бол Ethereum mainnet-тэй яг адил боловч жинхэнэ мөнгөгүй тест сүлжээ юм.

MetaMask суулгах

1. metamask.io руу орж, browser extension суулгана.

2. Шинэ wallet үүсгэж, seed phrase-г аюулгүй газар хадгал (хэзээ ч хэнд хэлэх хэрэггүй).

3. Sepolia testnet нэмэх:

  • MetaMask нээж → Network dropdown → "Show test networks" идэвхжүүлнэ
  • "Sepolia test network" сонгоно

Sepolia testnet ETH авах (Faucet)

Testnet ETH нь үнэгүй, дараах faucet-уудаас авна:

MetaMask хаягаа оруулахад 0.5–1 Sepolia ETH илгээнэ.

Hardhat-д Sepolia тохируулах

Alchemy эсвэл Infura RPC URL авах

Sepolia-д холбогдохын тулд RPC endpoint хэрэгтэй. alchemy.com дээр үнэгүй бүртгэл үүсгэж:

  • "Create App" → Chain: Ethereum → Network: Sepolia
  • "View key" → HTTPS URL хуулна

.env файл үүсгэх

bash
npm install dotenv

.env файл үүсгэнэ (.gitignore-д нэмэхээ бүү мартаарай):

код
SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_API_KEY
PRIVATE_KEY=0xтаны_MetaMask_private_key
ETHERSCAN_API_KEY=таны_etherscan_api_key

MetaMask-с private key авах: MetaMask → Дансны дэргэд ⋮ → Account details → "Show private key"

⚠️ Private key-г хэзээ ч GitHub-д оруулж болохгүй!

.gitignore шинэчлэх

код
node_modules
.env
artifacts
cache
coverage

hardhat.config.js шинэчлэх

javascript
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

module.exports = {
  solidity: "0.8.28",
  networks: {
    hardhat: {
      chainId: 31337,
    },
    sepolia: {
      url: process.env.SEPOLIA_RPC_URL,
      accounts: [process.env.PRIVATE_KEY],
      chainId: 11155111,
    },
  },
  etherscan: {
    apiKey: process.env.ETHERSCAN_API_KEY,
  },
};

Deploy скрипт бичих

ignition/modules/SimpleStorage.js файл үүсгэнэ:

javascript
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");

module.exports = buildModule("SimpleStorageModule", (m) => {
  const simpleStorage = m.contract("SimpleStorage");
  return { simpleStorage };
});

Эсвэл scripts/deploy.js хэлбэрээр:

javascript
const { ethers } = require("hardhat");

async function main() {
  console.log("Deploy эхэлж байна...");

  const [deployer] = await ethers.getSigners();
  console.log("Deploy хийж буй хаяг:", deployer.address);

  const balance = await ethers.provider.getBalance(deployer.address);
  console.log("Үлдэгдэл:", ethers.formatEther(balance), "ETH");

  // Contract deploy хийнэ
  const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
  const storage = await SimpleStorage.deploy();
  await storage.waitForDeployment();

  const address = await storage.getAddress();
  console.log("✅ SimpleStorage deploy хийгдлээ:", address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Sepolia-д deploy хийх

bash
npx hardhat run scripts/deploy.js --network sepolia

Гарах:

код
Deploy эхэлж байна...
Deploy хийж буй хаяг: 0xYourAddress
Үлдэгдэл: 0.5 ETH
✅ SimpleStorage deploy хийгдлээ: 0xContractAddress

Etherscan дээр харах

sepolia.etherscan.io руу орж, contract хаягаа хайна. Гүйлгээ, баланс бүгдийг харж болно.

Etherscan-д verify хийх

Verify хийснээр Etherscan дээр source code харагдаж, хэрэглэгчид итгэх боломж нэмэгдэнэ.

Etherscan API key авах: etherscan.io → бүртгэл → API Keys → "Add"

bash
npx hardhat verify --network sepolia CONTRACT_ADDRESS

Constructor argument байвал:

bash
npx hardhat verify --network sepolia CONTRACT_ADDRESS "arg1" "arg2"

Амжилттай бол:

код
Successfully submitted source code for contract
contracts/SimpleStorage.sol:SimpleStorage at 0xContractAddress
for verification on the block explorer. Waiting for verification result...

Successfully verified contract SimpleStorage on the block explorer.
https://sepolia.etherscan.io/address/0xContractAddress#code

Etherscan дээр "Contract" tab → "✅ Contract Source Code Verified" харагдана.

Deploy хийсний дараа шалгах

Hardhat console ашиглан Sepolia-д холбогдож шалгаж болно:

bash
npx hardhat console --network sepolia
javascript
const storage = await ethers.getContractAt(
  "SimpleStorage",
  "0xContractAddress",
);

await storage.set(100);
const value = await storage.get();
console.log(value.toString()); // 100

Дараагийн хичээлд:

Сурсан бүх мэдлэгээ нэгтгэж, crowdfunding smart contract бүтээнэ.