ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이더리움의 스마트 컨트랙트
    블록체인/이더리움 2024. 4. 7. 15:04

    비트코인, 이더리움 모두 달성하고자 하는 목표는 프라이버시 보호, 탈중앙화, 오픈소스, 사이퍼펑크 정신이었다.

     

     

    여기에 추가로 이더리움은 '컴퓨터처럼 만들어서 세상의 다양한 활동들의 프라이버시를 보호하고 탈중앙화' 하고 싶어했다. 그리고 이를 같은 비전을 꿈꾸는 누구나 참여할 수 있도록 하여 기술 진보를 이루고 싶어하였다.

     

     

    이를 위해서는 세 가지 결합이 필요해졌다.

     

     

    1) 탈중앙 블록체인

    가치의 전송을 가능하게 한 비트코인 시스템의 기술.

     

    2) 스마트 컨트랙트

    돈 거래 이상의 다른 기능들도 가능해야 하기 때문에 조건이 충족하면 자동으로 실행하는 스마트 컨트랙트 개념.

     

    3) 솔리디티 언어

    스마트 컨트랙트를 구현하기 위해서는 비트코인에 쓰였던 '스크립트'언어는 적합하지 않았다. 스크립트 언어는 Turing-complete 언어가 아니며 특정 기능에 특화한 기능들만 구현할 수 있었다. 그래서 이더리움 파운데이션 초창기 멤버인 '개빈 우드'는 솔리디티라는 언어를 만들었다. 

     

     

    2013년 비탈릭은 누구나 솔리디티라는 언어로 코드를 작성해 스마트 컨트랙트를 만들고 이더리움 네트워크 위에 스마트 컨트랙트를 배포하고 이를 활용한 거래나 활동을 할 수 있게 될 것이라며 이더리움을 소개하였다. 

     

     

    2024년 1월 기준 이더리움 위에는 5,330만 개의 스마트 컨트랙트가 존재한다. 

     

     

    ...

     

     

    <스마트 컨트랙트 작동 방식과 예시>

     

     

    이더리움에서는 스마트 컨트랙트를 아래와 같이 정의하고 있다.

     

    1) '이더리움 블록체인에서 실행되는 프로그램으로 이더리움 블록체인의 특정 주소에 있는 코드(기능)와 데이터(상태)의 모음

    2) '사전에 정의된 조건에 따라 계약을 자동적이고 결정론적으로 실행'

     

     

     

    '특정 주소에 있는 코드(기능)와 데이터(상태)의 모음' 이 무엇을 의미할까, 이더리움에는 두 가지 계정 유형이 존재한다. 

     

     

    1) 외부소유계정 (External Owned Account, EOA)

    • P2P 지갑으로 주로 관리되는 '일반적인 계정 유형'
    • '개인 키'가 존재
    • 개인 키로 계정 주소를 제어 (트랜잭션 생성 및 서명)
    • 연결된 코드 없음
    • EOA 에서 생성된 트랜잭션은 EOA 나 컨트랙트 계정(CA)으로 전송 가능

    (참고, EOA 에서 EOA 로 트랜잭션을 일으킨다는 것은 비트코인 개인 지갑 간에 트랜잭션을 일으킨다는 것과 동일하다.)

     

     

    2) 컨트랙트 계정 (Contract Account, CA)

    • 계정 주소를 통제할 '개인 키'가 존재하지 않음
    • 직접 트랜잭션을 생성할 수 없음 (개인키가 없기 때문)
    • 특정 조건이 충족되면 실행되는 코드로 제어
    • 즉, EOA가 생성한 트랜잭션을 받고 해당 트랜잭션의 메시지가 조건을 만족하면 컨트랙트 코드가 실행되어 특정한 작업을 수행

     

    CA 는 혼자서는 움직일 수 없고 EOA 의 트랜잭션을 받아야 작동한다. 자판기와 유사하다.

     

    1) 동전을 넣고 음료를 구매한다는 메시지가 '트랜잭션'

    2) 동전이 충분한 금액인지 확인하고, 음료를 배분하는 과정이 'CA가 EOA의 트랜잭션에 의해서 작동하는 것'

     

     

    그래서 '특정 주소에 있는 코드(기능)와 데이터(상태)의 모음' 이라는 정의를 다시 자판기에 비유해보자면 아래와 같다.

     

    1) CA코드 (기능) = 계약 조건:

    누구든 판매하는 음료의 금액만큼 동전을 투입하면, 음료를 분배한다.

     

    2) CA데이터 (상태) = 자판기의 현재 상태: 

    현재 음료 재고 수량, 음료 가격, 투입된 동전 수량, 판매 기록 등의 상태

     

     

    이에 더 해, CA 에는 Pool 이라는 개념이 있다. 자판기로 비유하자면 자판기 뒷편 재고 보관함 혹은 돈통을 생각하면 된다.

     

    1) Pool 은 CA에 속하며, 스마트 컨트랙트 내부에서 데이터를 저장하고 관리하는 역할

    2)EOA 처럼 CA에도 자산을 보관할 수는 있느나, 개인키가 없기 떄문에 스스로 자산을 옮기는 등의 작동은 불가능.

     

    풀 안에 들어가 있는 돈은 EOA가 트랜잭션을 날려야만 코드 내용에 따라 옮겨질 수 있다. 

     

     

    ...

     

     

    예시) '토큰 발행'  컨트랙트의 작동 방식과 상태변화 (간소화 버전)

     

     

    1) 철수 지갑에서 ace 토큰 100개를 발행하라는 트랜잭션 생성

    2) 컨트랙트 주소가 생성되고

    3) 컨트랙트 주소 pool 에는 ace 토큰 100개 생성 

     

    여기까지의 데이터 상태는 발행량 100개, 풀 잔액 100개이다.

     

    만약, 철수 지갑으로 토큰을 옮겨두면 컨트랙트 pool은 아래와 같이 표시된다.

    (발행량 100개, 풀 잔액 0개, 철수 주소/100개)

     

    철수가 영희에게 토큰 1개를 전송한다고 가정해보자. 

     

    4) 철수 지갑은 ace 토큰 컨트랙트에 트랜잭션을 날린다.

    5) CA 는 (발행량 100개, 풀 잔액 0개, 철수 주소/100개) 상태에서 

    - 철수 지갑 상태를 ace -1 로 변경

    - 영희 지갑 상태를 ace +1 로 변경

     

    6) ace 토큰 컨트랙트 주소 상태 변화는 아래와 같이 변한다

    (발행량 100개, 풀 잔액 0개, 철수 주소/99개, 영희 주소 /1개)

     

    7) 그리고 위 내용은 철수와 영희의 지갑에 반영이 되어있다. 

     

     

    ...

     

     

     

     

    ERC-20 Token Standard | ethereum.org

    Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.

    ethereum.org

     

     

    ERC-20 Standard 는 토큰 발행을 위한 컨트랙트 코드의 표준 버전이다. 이 컨트랙트 코드로 짜여진 토큰을 'ERC-20 Standard Token' 이라고 부른다. 

     

    ... 

     

     

    이더리움에서는 컨트랙트 주소만 알면 컨트랙트의 기능이 무엇인지, 어떤 상태인지 등을 실시간으로 확인할 수 있다. 그래서 USDT 의 컨트랙트주소를 이더 스캔에 검색해보면 공급량, 홀더, 이체 수, 소수점 자리, 발행자 등과 같은 정보 확인이 가능하다.

     

     

    토큰 생성 시에 입력되는 정보들은 중복이 가능하다. 그런데 컨트랙트 주소는 절대 같을 수가 없다. 그래서 해당 토큰이 사기, 스캠인지를 알려면 반드시 컨트랙트 주소를 확인해야 한다.

     

     

    ...

     

     

    정리

     

    1) 이더리움의 철학은 이더리움을 컴퓨터처럼 만들어 다양한 활동들의 프라이버시를 보호하고 탈중앙화 하는 것이다. 그리고 이를 같은 비전을 꿈꾸는 사람이라면 누구나 참여할 수 있도록 하여 기술 진보를 이루는 것이다.

     

    2) 이를 위해서는 탈중앙 블록체인, 스마트 컨트랙트, 솔리디티 언어의 기술이 필요하다.

     

    3) 이더리움에는 외부소유 계정(EOA)와 컨트랙트 계정(CA)가 존재한다.

     

    4) EOA 는 일반 지갑이며 개인 키 있음, 트랜잭션 생성 및 서명이 가능하다.

     

    5) CA 는 개인 키 없음, 트랜잭션 생성 불가, 코드로 제어, EOA 가 생성한 트랜잭션 메시지가 조건을 만족하면 코드가 실행되어 동작한다.

     

    6) CA 에는 pool 이 있다. pool 에는 데이터의 상태가 기록된다. EOA 트랜잭션과 코드 내용에 따라 상태 값은 변한다.

     

    7) 일반적으로 토큰을 생성할 땐 erc-20 표준을 따른다.

     

    8) 토큰 생성 시 입력되는 정보는 중복될 수 있다. 하지만 컨트랙트 주소는 중복이 불가능하다.

Designed by Tistory.