tech

블록체인 구조부터 시작하는 온체인 분석하기

© Pixabay

1.1. 블록체인이란?

블록체인은 네트워크에 참여하고 있는 컴퓨터에서 공유되는 공용 데이터베이스라고 보면 된다. 공용 데이터베이스를 관리하기 위해서 다수의 거래내역을 묶어 ‘블록’을 구성한다. 암호화 기술을 이용하여 여러 블록들을 ‘체인’처럼 연결한 뒤 복사하여 컴퓨터에 저장하는 기술이 바로 ‘블록체인’이다. 네트워크의 모든 컴퓨터는 새로운 블록과 체인에 동의 해야한다. 이 컴퓨터를 ‘노드’라고 하며 노드는 블록체인과 상호 작용하는 모든 사람들이 동일한 데이터를 갖도록 🔗‘합의’하여 보장한다.

이하 블록체인은 이더리움 기준으로 설명하며 간단한 구조부터 온체인 분석을 하는 방법까지 알아본다.

1.2. 계정

계정에는 두 가지 유형이 있다.

  • 외부 소유 계정 (EOA): 개인키를 가진 계정으로 지갑을 생각하면 된다.
  • 컨트랙트 계정 (CA): 개발자가 배포하는 스마트 컨트랙트다.

두 계정 유형 모두 다음과 같은 기능을 제공한다.

  • 코인(ETH)과 토큰(ERC-20)을 받고, 보유하고, 보낸다.
  • 배포된 스마트 컨트랙트와 상호 작용을 한다.
_content_developers_docs_accounts_accounts

🔗 이더리움 홈페이지

계정은 4가지 필드로 구성된다.

  • Nonce: EOA에서 전송된 트랜잭션 수 또는 CA에서 생성된 컨트랙트 수를 나타내는 카운터다. 각 계정에 대해 주어진 Nonce를 가진 하나의 트랜잭션만 실행이 가능하다.
  • Balance: 주소가 소유한 Wei(ETH)의 수량
  • Storage hash: 계정에 저장된 콘텐츠를 나타낸다. CA에만 존재한다.
  • Code hash: 이더리움 가상 머신 (EVM)의 계정 코드를 나타낸다. CA에만 존재하며 메시지 호출을 받으면 실행된다.

1.3. 트랜잭션

_content_developers_docs_transactions_tx

🔗 이더리움 홈페이지

트랜잭션은 EOA 계정에서 암호화된 방식으로 서명된 지시다. 내가 가지고 있는 코인을 다른 지갑으로 보내는 것이 하나의 트랜잭션이 된다. EVM의 상태를 변경하는 트랜잭션은 전체 네트워크에 전파(브로드캐스트)되어야 한다. 트랜잭션에는 수수료가 필요하며, 검증된 블록에 포함되어야 한다. 트랜잭션에 포함되는 정보는 다음과 같다.

  • from: 보낸 사람의 주소
  • to: 수신 주소
  • signature: 발신자 식별자, 보낸 사람의 개인 키가 거래에 서명하고 보낸 사람이 거래를 승인했음을 확인할 때 생성된다.
  • nonce: 계좌의 거래 번호를 나타내는 순차적으로 증가하는 카운터
  • value: 발송인에서 수취인에게 전송할 ETH의 양
  • input data: 임의의 데이터를 포함하는 선택적 필드 (CA 호출시 사용)
  • gasLimit: 트랜잭션에서 소비할 수 있는 최대 가스 단위량
  • maxPriorityFeePerGas: 밸리데이터(검증자)에게 팁으로 포함될 소비 가스 최대 가격
  • maxFeePerGas: 트랜잭션에 대해 지불할 의사가 있는 가스당 최대 수수료

트랜잭션 유형은 크게 3가지로 구성된다.

  • 일반 트랜잭션
  • 계약 배포 트랜잭션
  • 계약 실행 트랜잭션

1.4. 블록

© Unsplash
_content_developers_docs_blocks_tx-block (3)

🔗 이더리움 홈페이지

네트워크의 모든 참가자가 동기화된 상태를 유지하고 정확한 거래 내역에 동의하기 위해서 트랜잭션을 블록으로 일괄적으로 처리한다. 합의 및 동기화가 필요하여 일정 합의에 도달할 수 있도록 일정 시간마다 한 번만 생성되고 커밋된다. (이더리움은 12초 XPLA는 6초다.)

2024-04-03 16 22 51
🔗 블록 데이터는 예시는 다음과 같다.

2.1. 스마트 컨트랙트

스마트 컨트랙트는 트랜잭션을 받으면 실행되는 프로그램이다.

soda-2592159_1280
© Pixabay

좋은 예시로 음료 자판기를 생각하면 된다. 내가 돈을 넣고 원하는 음료에 해당하는 버튼을 누르면 내가 원하는 음료를 받을 수 있다.

좀 더 복잡한 예시를 들어보면 중고차 판매 컨트랙트가 있다고 가정해보자. 철수는 영희에게 중고차를 구매하고 싶어서 컨트랙트에 10ETH를 보내고 영희도 컨트랙트에 자동차 소유 증서 NFT를 보내면 컨트랙트 계정은 해당하는 조건이 충족 됐다고 판단할 수 있다. 그러면 교환이 성립된다.

2.2. 가스

_content_developers_docs_gas_gas

🔗 이더리움 홈페이지

가스는 블록체인 네트워크에서 특정 작업을 실행하는데 필요한 계산 노력의 양을 측정하는 단위다. 이는 🔗EVM Opcodes에서 확인 할 수 있다. 트랜잭션을 실행하려면 노드의 컴퓨터 리소스가 필요하므로 스팸, 무한루프로 인한 리소스를 방지하기 위해서 가스비라는 이름으로 비용을 지불한다. 가스비는 작업 수행하는데 사용되는 가스의 양에 단위 가스당 비용을 곱한 값이다.

2.3. Event Log

컨트랙트에서 개발자가 정의한 로그(Log)다. 로그 데이터는 최대 4개의 topic 필드를 가지는 array와 data 필드로 구성돼 있다. 대부분의 스마트 컨트랙트는 이미 정해진 규약(ERC)을 사용하여 정의된 로그가 존재한다.

2024-04-01 16 57 17
예를 들어 ERC-20의 경우는 Transfer()🔗 로그를 확인할 수 있다.

3.1. EVM이란?

EVM(Ethereum Virtual Machine, 이더리움 가상머신)은 스마트 컨트랙트를 동작시키기 위한 하나의 상태머신이다.

_content_developers_docs_evm_evm

🔗 이더리움 홈페이지

블록체인의 상태는 계정, 잔액뿐만 아니라 미리 정의된 규칙에 따라서 블록마다 변경될 수 있다. 임의 코드를 실행할 수 있는 기계 상태를 보유하는 대규모 데이터 구조로, 상태를 변경하는 특정 규칙은 EVM에 의해 정의된다.

Y(S, T)= S’

위 함수처럼 작동하여 입력이 주어지면 결정론적인 출력을 생성한다. 이전에 유효한 상태(S)와 새로운 트랜잭션(T)가 주어지면 상태 전환 기능 Y(S, T)로 새로운 출력 상태를 생성한다. (S’) 블록체인에서 상태를 변경하는 트랜잭션을 전송하면 EVM을 통해서 상태가 변경된다는 것이다.

블록체인의 기본 구조에 대해서 알았으니 블록체인 데이터를 분석하는 방법에 대해서 알아보자.

4.1. 온체인 분석이란?

퍼블릭 블록체인에서는 누구나 네트워크에 참여하여 노드가 될 수 있다. 즉, 모든 블록체인 데이터가 공개되어 있는 셈이다. 이 공개된 블록체인 데이터를 온체인 데이터라고 부른다. 반대로 블록체인 외부에서 가져오는 데이터는 오프체인 데이터라고 한다.

4.2. 왜 온체인 분석인가?

온체인 데이터를 제대로 읽고 활용 할 수 있다면 다음과 같은 이점이 있다.

  1. 유의미한 의사 결정에 활용: 거래량, 장단기 보유자, 팀 보유량, 거버넌스 활동 등 다양한 온체인 지표를 가지고 투자를 결정 할 수 있다.
  2. 유저 활동으로 보는 시장 트렌드 조사: 유동성, 네트워크 이용자 수, 프로젝트 컨트랙트 트랜잭션 등 온체인에서 활동하는 지갑을 보고 시장 트렌드를 알 수 있다.
  3. 이상 탐지 모니터링(리스크 관리): 재단 물량 출금, 해킹 물량 추적, 러그 프로젝트 지갑 추적 등 이상 상황을 모니터링 할 수 있다.

4.3. 스캔 활용

블록체인에서 가공되지 않은 온체인 데이터는 체인별 스캔 사이트를 이용하면 된다. 이더리움은 이더스캔이라는 사이트를 제공한다. 이더스캔에서 🔗코인원 지갑으로 라벨링된 주소를 분석을 해보겠다.

2024-04-01 17 06 01
위와 같은 화면을 볼 수 있고 우리가 봐야하는 부분은 Transaction이다. 여기서 가장 위에 있는 🔗Shiba Inu…누르면 트랜잭션에 대한 상세 페이지를 볼 수 있다.

2024-04-01 17 09 40
중요한 데이터는 다음과 같다.

  • Transaction Hash: 트랜잭션 고유의 값
  • Block: 트랜잭션이 포함된 블록의 높이
  • Timestamp: 트랜잭션이 실행된 시간
  • Transaction Action: 트랜잭션에서 중요한 Event Log
  • From: 발신자 계정 (EOA)
  • To: 수신자 계정(EOA, CA)
  • Value: 보내는 코인(이더리움)의 값
  • Transaction Fee: 트랜잭션 비용
  • Gas Price: 가스비용

이제 트랜잭션을 통해서 언제, 어디서, 어디로, 얼마만큼 토큰을 전송 했는지 확인이 가능하다. 0xdEEa5D66…893Ed5D1F 지갑에서 코인원으로 SHIB 토큰을 396,188,976.2774만큼 보냈다는 것을 알 수 있다.

4.4. 서비스 사용

스캔 사이트에서는 가공되지 않은 데이터를 제공해주기 때문에 대규모 데이터와 유의미한 데이터를 찾기 힘들 수 있다. 이러한 문제를 해결하기 위해서 온체인 데이터를 쉽게 분석 할 수 있도록 다양한 서비스가 제공되고 있다. 대표적으로 크립토 퀀트, 듄 애널리틱스, 아캄 플랫폼, 난센 등이 존재한다.

2024-04-01 19 03 25
아캄 플랫폼에서 🔗코인원 지갑주소를 확인하면 미리 설정된 대시보드를 볼 수 있다.

2024-04-01 19 11 09
우측 상단에 Visualize를 누르면 트랜잭션을 시각화된 형태로 볼 수 있다.

2024-04-01 19 13 15
또는 Trace Address를 누르고 INFLOWS, OUTFLOWS 설정을 하면 계정의 자금 흐름을 알 수 있다.

4.5. 컨트랙트 분석

블록체인 서비스는 새로운 스마트 컨트랙트를 만들어서 사용한다. 블록체인 서비스를 분석하기 위해서는 컨트랙트 코드를 분석 할 수 있어야 한다. 팬 참여형 플랫폼 ‘COSMO’ 서비스의 투표 컨트랙트를 분석해보자.

2024-04-02 11 56 48
🔗 COSMO 컨트랙트에 들어가서 보면 트랜잭션에서 Method를 확인 할 수 있다.

2024-04-02 11 58 02
이는 Contract에 사용되는 Method로 Contract > Write as Proxy(or Write Contract)에서 확인 가능하다.

프록시 패턴은 원본이 아닌 대리하여 처리하게 함으로써 로직 흐름을 제어하는 패턴이다. 주요 로직이 있는 컨트랙트는 ~ as Proxy 부분을 읽으면 된다. 함수로는 정확하게 어떻게 투표하는지 알 수 없기 때문에 스마트 컨트랙트를 정의하는 언어인 솔리디티 코드를 읽어야한다.

2024-04-03 11 49 23
🔗COSMO 로직 컨트랙트에 들어가서 코드를 읽어보면 Reveal은 이미 투표한 부분에서 결과를 등록하는 부분이다. 그래서 투표에 해당하는 코드를 찾아보니 tokensReceived라는 함수를 찾을 수 있었다. 이 함수를 살펴보면, como토큰을 받은 수량만큼 투표 함수가 호출하여 투표 하는 것을 볼 수 있다.

2024-04-03 11 56 02
이제 Token Transfers(ERC-20)에서 como토큰에 해당하는 전송을 보면 어떤 지갑에서 얼마나 투표했는지 확인 가능하다.

블록체인의 구조부터 온체인 데이터를 분석하는 방법에 대해서 알아보았다. 온체인 데이터는 공개적으로 접근이 가능하기 때문에 정보의 접근이 쉽다. 많은 데이터가 있고 그 속에서 의미있는 분석을 하기는 힘들 수 있지만, 원하는 데이터를 찾을 수 있는 능력이 생긴다면 올바른 의사 결정에 도움이 된다.

참고

이학성 기자

온체인 세상은 24시간 동안 빠르게 많은 일들이 일어나는 만큼 재밌고 흥미로운 일도 많습니다. 제 글을 통해 한 명이라도 온체인 세상 읽기에 도움이 되었다면 좋겠습니다.


TOP