Solidity / Анхны smart contract

Анхны smart contract

Counter contract бол Solidity суралцахад хамгийн түгээмэл жишээ. Тоо хадгалж, нэмж, хасч, унших боломжтой энгийн contract юм. Энэ хичээлд бүтнээр бичиж, Remix дээр ажиллуулна.

Counter contract

solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

contract Counter {
    uint256 public count;

    function increment() public {
        count += 1;
    }

    function decrement() public {
        require(count > 0, "Тоо тэгээс бага болж чадахгүй");
        count -= 1;
    }

    function getCount() public view returns (uint256) {
        return count;
    }

    function reset() public {
        count = 0;
    }
}

Мөр тус бүрийг задлаж үзье.

Мөр тус бүрийн тайлбар

// SPDX-License-Identifier: MIT

Лицензийн мэдэгдэл. Нээлттэй эхийн MIT лиценз гэсэн утга. Solidity файл бүрт энэ мөр байх ёстой — байхгүй бол compiler анхааруулга өгнө.

pragma solidity ^0.8.26;

Ямар хувилбарын Solidity compiler ашиглахыг заана. ^ тэмдэг "0.8.26 ба түүнээс дээш 0.9.x-аас доош" гэсэн утга. Semicolon (;) мартаж болохгүй — Solidity-д мөр бүр ;-ээр төгсдөг.

contract Counter { ... }

Contract-ийн тодорхойлолт. JavaScript-ийн class-тай адилхан бүтэц.

uint256 public count;

State variable — blockchain-д байнга хадгалагдах хувьсагч. uint256 нь 0-ээс 2²⁵⁶-1 хүртэлх бүхэл тоо. public гэдэг нь Solidity автоматаар getCount-тай адил уншигч функц үүсгэнэ.

function increment() public { count += 1; }

Функц — count-г 1-ээр нэмнэ. public тул гаднаас дуудаж болно.

require(count > 0, "...")

Нөхцөл шалгах — хэрэв count тэг байвал transaction revert болж, алдааны мессеж харуулна. ETH шатаагдахгүй боловч зарцуулагдсан gas буцаагдахгүй.

function getCount() public view returns (uint256)

view — blockchain-ийн өгөгдлийг зөвхөн уншина, өөрчлөхгүй. returns (uint256) — буцааж өгөх утгын төрлийг заана.

Remix дээр compile хийх

  1. Remix нээж, Counter.sol нэртэй файл үүсгэнэ
  2. Дээрх кодыг хуулж оруулна
  3. ⚙️ (Compiler) дарна
  4. Compiler version: 0.8.26 сонгоно
  5. "Compile Counter.sol" дарна
  6. ✅ тэмдэг гарвал амжилттай

Алдаа гарвал terminal-д улаан мессеж харагдана — тэр мөрийг засна.

Deploy хийх

  1. ▶️ (Deploy & Run) дарна
  2. Environment: Remix VM (Cancun)
  3. Contract: Counter сонгоно
  4. Deploy дарна

Доод хэсгийн Deployed Contracts хэсэгт COUNTER AT 0x... гарна.

Функцүүд дуудах

Deploy хийсэн contract-г задлаад функцүүдийг харна:

код
COUNTER AT 0xd9145...
├── [call]  count          ← state variable (автоматаар)
├── [call]  getCount       ← view функц
├── [txn]   increment      ← state өөрчлөх
├── [txn]   decrement      ← state өөрчлөх
└── [txn]   reset          ← state өөрчлөх

Улаан товч — transaction илгээнэ (gas зарцуулна, state өөрчилнө)

Цэнхэр товч — зөвхөн уншина (gas үнэгүй, state өөрчлөхгүй)

Туршилт:

  1. count дарна → 0 гарна
  2. increment 3 удаа дарна
  3. count дарна → 3 гарна
  4. decrement дарна
  5. getCount дарна → 2 гарна
  6. reset дарна → count знову 0 болно

Transaction log унших

increment дарахад terminal-д:

код
[vm] from: 0x5B38...
to: Counter.increment()
value: 0 wei
gas used: 43497
✅ Transaction mined and execution succeed

gas used: 43497 — энэ үйлдэлд 43,497 gas зарцуулагдсан.

Алдааг туршиж үзэх

count тэг байхад decrement дарбал:

код
❌ revert
  The transaction has been reverted to the initial state.
  Reason: Тоо тэгээс бага болж чадахгүй

require зөв ажилсан — тэгээс бага болохоос хамгаалав.

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

Solidity-д ямар өгөгдлийн төрлүүд байдаг, тэдгээрийн хэмжээ, онцлогийг судална.