Анхны smart contract
Counter contract бол Solidity суралцахад хамгийн түгээмэл жишээ. Тоо хадгалж, нэмж, хасч, унших боломжтой энгийн contract юм. Энэ хичээлд бүтнээр бичиж, Remix дээр ажиллуулна.
Counter contract
// 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 хийх
- Remix нээж,
Counter.solнэртэй файл үүсгэнэ - Дээрх кодыг хуулж оруулна
- ⚙️ (Compiler) дарна
- Compiler version:
0.8.26сонгоно - "Compile Counter.sol" дарна
- ✅ тэмдэг гарвал амжилттай
Алдаа гарвал terminal-д улаан мессеж харагдана — тэр мөрийг засна.
Deploy хийх
- ▶️ (Deploy & Run) дарна
- Environment: Remix VM (Cancun)
- Contract: Counter сонгоно
- 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 өөрчлөхгүй)
Туршилт:
countдарна →0гарнаincrement3 удаа дарнаcountдарна →3гарнаdecrementдарнаgetCountдарна →2гарна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-д ямар өгөгдлийн төрлүүд байдаг, тэдгээрийн хэмжээ, онцлогийг судална.