정지용
기술스택 목록
블록체인

Smart Contract

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

블록체인 위에서 조건에 따라 자동으로 실행되는 신뢰 가능한 프로그램

스마트 컨트랙트는 블록체인 네트워크에 배포되어 정해진 조건이 충족되면 자동으로 실행되는 코드다. 계약 이행을 중개자 없이 코드 로직으로 강제함으로써, 거래 상대방을 신뢰하지 않고도 자산 이전이나 소유권 증명 같은 약속을 지킬 수 있게 하려는 목적으로 만들어졌다. 한번 배포되면 실행 결과가 네트워크 참여자 전원에게 검증되고 기록되어 임의로 변경하기 어렵다.

이럴 때 사용합니다

  • 제3자 중개 없이 자산 소유권이나 이전 규칙을 강제하고 싶을 때
  • 실행 결과가 위변조되지 않고 누구나 검증 가능해야 할 때
  • NFT, 토큰 발행 등 온체인 자산의 발행·전송 로직을 표준화하고 싶을 때

핵심 개념

State
컨트랙트가 블록체인 위에 저장하고 있는 데이터로, 트랜잭션이 실행될 때마다 갱신된다.
Transaction
컨트랙트의 함수를 호출해 상태를 변경하는 요청으로, 네트워크 합의를 거쳐 블록에 기록된다.
Gas
컨트랙트 실행에 필요한 연산량을 측정하는 단위이며, 실행 비용을 지불하는 수단으로도 쓰인다.
Immutability
배포된 컨트랙트 코드는 원칙적으로 수정할 수 없어, 실행 로직에 대한 신뢰의 근거가 된다.
Event/Log
컨트랙트 실행 중 발생한 사실을 블록체인에 기록해 외부 애플리케이션이 조회하거나 구독할 수 있게 한다.

간단한 소유권 저장 컨트랙트

배포자를 소유자로 저장하고, 소유자만 소유권을 다른 주소로 이전할 수 있게 하는 최소 예시다.

Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Ownership {
    address public owner;

    event OwnerChanged(address newOwner);

    constructor() {
        owner = msg.sender;
    }

    function transferOwnership(address newOwner) external {
        require(msg.sender == owner, "not owner");
        owner = newOwner;
        emit OwnerChanged(newOwner);
    }
}

처음 쓸 때 흔한 함정

  • 배포 후 코드를 고칠 수 없어 버그가 있어도 되돌리기 어렵다
  • 모든 실행에 가스 비용이 들기 때문에 로직이 복잡하면 비용이 커진다
  • 외부 컨트랙트 호출 순서를 잘못 설계하면 재진입 등 보안 취약점이 생길 수 있다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.