블록체인 학습
0 XP

Chapter 2: 스마트 컨트랙트 첫걸음

계정과 트랜잭션

블록체인 위에서 무언가를 하려면 계정(account)과 트랜잭션(transaction)을 알아야 합니다. 앞에서 본 EVM과 gas가 실행 무대와 요금이라면, 계정과 트랜잭션은 '누가 어떤 요청을 보내는가'에 해당합니다.

지갑 계정과 컨트랙트 계정

계정은 블록체인에서 나를 가리키는 주소입니다. 크게 두 종류가 있습니다.

  • 사람이 쓰는 지갑 계정(EOA): 개인키(private key)로 제어하며, 트랜잭션을 직접 보낼 수 있습니다.
  • 컨트랙트 계정: 스마트 컨트랙트 그 자체입니다. 코드가 들어 있고, 호출을 받아 동작합니다.

두 계정 모두 주소가 0x...로 시작합니다. 나중에 코드에서 "누가 이 함수를 불렀는가"를 알아낼 때 msg.sender라는 값을 쓰는데, 바로 이 주소를 가리킵니다.

상태를 바꾸는 요청, 트랜잭션

트랜잭션은 블록체인의 상태를 바꾸는 요청 한 건입니다. "이 컨트랙트의 이 기능을 실행해줘" 같은 요청입니다.

트랜잭션을 보내면 노드들이 검증하고, 합의를 거쳐 블록에 기록되며, 그 결과로 블록체인의 상태가 바뀝니다. 단순히 읽기만 하는 것은 트랜잭션이 아니지만, **무언가를 바꾸는 일은 반드시 트랜잭션**으로 이뤄지고 gas가 듭니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract Ledger {
    uint256 public value;
 
    // 값을 바꾸는 호출 → 트랜잭션, gas 필요
    function setValue(uint256 v) public {
        value = v;
    }
}

value를 읽는 것은 거의 공짜지만, setValue로 value를 바꾸는 호출은 상태 변경이므로 트랜잭션이 되고 gas가 듭니다. 이 구분은 앞으로 코드를 짤 때 계속 등장합니다.

개인키는 곧 계정의 소유권 그 자체입니다. 노출되면 자산을 통째로 잃을 수 있으니, 실제 환경에서는 절대 코드나 화면에 노출하지 마세요. (이 사이트의 연습은 실제 키 없이 안전하게 진행됩니다.)