스마트 계약 초보자를 위한
Source: Dev.to
Introduction
블록체인 개념을 배우는 것은 어려울 수 있지만, 스마트 계약을 이해하는 것은 그리 복잡하지 않습니다. 이 가이드는 스마트 계약의 기본을 소개하고 Solidity로 작성된 간단한 “은행 금고” 계약을 단계별로 살펴봅니다.
Key Concepts
- State machine – 블록체인은 상태 머신처럼 동작합니다 (Redux 또는 Context API와 유사) 그리고 상태를 추적하고 업데이트합니다.
- View – 현재 상태(예: 계약의 잔액)를 확인할 수 있는 읽기 전용 연산입니다.
- State – 블록체인에 저장된 데이터(예: 잔액, 기록)입니다.
- Contract – 상태를 읽거나 수정할 수 있는 방식을 정의하는 코드 조각으로, 규칙 집합에 비유할 수 있습니다.
- Public –
public으로 표시된 함수나 변수는 네트워크 상의 누구든지 접근할 수 있습니다. - Remix – Solidity 계약을 작성, 테스트 및 배포할 수 있는 온라인 IDE입니다.
- Returns – 함수의 출력 타입을 지정하며, 주로 view 함수에서 사용됩니다.
Example: Vault Contract
아래는 사용자가 이더를 입금하고 출금할 수 있는 간단한 금고 역할을 하는 최소 Solidity 계약입니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Vault {
uint public initialBalance;
uint public balance;
constructor(uint _balance) {
initialBalance = _balance;
balance = _balance;
}
function checkBalance() public view returns (uint) {
return balance;
}
function deposit(uint amount) public {
balance += amount;
}
function withdraw(uint amount) public {
require(balance >= amount, "Not enough balance");
balance -= amount;
}
}
Contract Overview
-
State variables
initialBalance– 배포 시 설정된 초기 잔액을 저장합니다.balance– 현재 금고 잔액을 추적합니다.
-
Constructor
배포 시 전달된 값을 사용해initialBalance와balance를 모두 초기화합니다. -
Functions
checkBalance()– 현재 잔액을 반환하는view함수입니다.deposit(uint amount)– 지정된amount만큼balance를 증가시킵니다.withdraw(uint amount)–require를 통해 충분한 자금이 있는지 확인한 뒤balance를 감소시킵니다.
Important Details
- 언더스코어(
_)가 붙은 매개변수 이름(예:_balance)은 상태 변수와의 이름 충돌을 방지합니다. require문은if검사와 비슷하게 동작하며, 조건이 실패하면 제공된 오류 메시지와 함께 트랜잭션이 되돌아갑니다.- 모든 함수가
public으로 표시되어 외부 계정이 호출할 수 있습니다.
Conclusion
Vault 계약은 Solidity의 핵심 개념인 상태 변수, 생성자, view 함수, 상태 변경 함수 및 기본 오류 처리 방식을 보여줍니다. Remix에서 이 예제를 실험해 보면 보다 복잡한 스마트 계약을 구축하기 위한 탄탄한 기반을 마련할 수 있습니다.