블록체인은 네트워크에 참여하고 있는 컴퓨터에서 공유되는 공용 데이터베이스라고 보면 된다. 공용 데이터베이스를 관리하기 위해서 다수의 거래내역을 묶어 ‘블록’을 구성한다. 암호화 기술을 이용하여 여러 블록들을 ‘체인’처럼 연결한 뒤 복사하여 컴퓨터에 저장하는 기술이 바로 ‘블록체인’이다. 네트워크의 모든 컴퓨터는 새로운 블록과 체인에 동의 해야한다. 이 컴퓨터를 ‘노드’라고 하며 노드는 블록체인과 상호 작용하는 모든 사람들이 동일한 데이터를 갖도록 🔗‘합의’하여 보장한다.
이하 블록체인은 이더리움 기준으로 설명하며 간단한 구조부터 온체인 분석을 하는 방법까지 알아본다.
트랜잭션은 EOA 계정에서 암호화된 방식으로 서명된 지시다. 내가 가지고 있는 코인을 다른 지갑으로 보내는 것이 하나의 트랜잭션이 된다. EVM의 상태를 변경하는 트랜잭션은 전체 네트워크에 전파(브로드캐스트)되어야 한다. 트랜잭션에는 수수료가 필요하며, 검증된 블록에 포함되어야 한다. 트랜잭션에 포함되는 정보는 다음과 같다.
from: 보낸 사람의 주소
to: 수신 주소
signature: 발신자 식별자, 보낸 사람의 개인 키가 거래에 서명하고 보낸 사람이 거래를 승인했음을 확인할 때 생성된다.
nonce: 계좌의 거래 번호를 나타내는 순차적으로 증가하는 카운터
value: 발송인에서 수취인에게 전송할 ETH의 양
input data: 임의의 데이터를 포함하는 선택적 필드 (CA 호출시 사용)
gasLimit: 트랜잭션에서 소비할 수 있는 최대 가스 단위량
maxPriorityFeePerGas: 밸리데이터(검증자)에게 팁으로 포함될 소비 가스 최대 가격
좋은 예시로 음료 자판기를 생각하면 된다. 내가 돈을 넣고 원하는 음료에 해당하는 버튼을 누르면 내가 원하는 음료를 받을 수 있다.
좀 더 복잡한 예시를 들어보면 중고차 판매 컨트랙트가 있다고 가정해보자. 철수는 영희에게 중고차를 구매하고 싶어서 컨트랙트에 10ETH를 보내고 영희도 컨트랙트에 자동차 소유 증서 NFT를 보내면 컨트랙트 계정은 해당하는 조건이 충족 됐다고 판단할 수 있다. 그러면 교환이 성립된다.
가스는 블록체인 네트워크에서 특정 작업을 실행하는데 필요한 계산 노력의 양을 측정하는 단위다. 이는 🔗EVM Opcodes에서 확인 할 수 있다. 트랜잭션을 실행하려면 노드의 컴퓨터 리소스가 필요하므로 스팸, 무한루프로 인한 리소스를 방지하기 위해서 가스비라는 이름으로 비용을 지불한다. 가스비는 작업 수행하는데 사용되는 가스의 양에 단위 가스당 비용을 곱한 값이다.
2.3. Event Log
컨트랙트에서 개발자가 정의한 로그(Log)다. 로그 데이터는 최대 4개의 topic 필드를 가지는 array와 data 필드로 구성돼 있다. 대부분의 스마트 컨트랙트는 이미 정해진 규약(ERC)을 사용하여 정의된 로그가 존재한다.
블록체인의 상태는 계정, 잔액뿐만 아니라 미리 정의된 규칙에 따라서 블록마다 변경될 수 있다. 임의 코드를 실행할 수 있는 기계 상태를 보유하는 대규모 데이터 구조로, 상태를 변경하는 특정 규칙은 EVM에 의해 정의된다.
Y(S, T)= S’
위 함수처럼 작동하여 입력이 주어지면 결정론적인 출력을 생성한다. 이전에 유효한 상태(S)와 새로운 트랜잭션(T)가 주어지면 상태 전환 기능 Y(S, T)로 새로운 출력 상태를 생성한다. (S’) 블록체인에서 상태를 변경하는 트랜잭션을 전송하면 EVM을 통해서 상태가 변경된다는 것이다.
블록체인의 기본 구조에 대해서 알았으니 블록체인 데이터를 분석하는 방법에 대해서 알아보자.
4.1. 온체인 분석이란?
퍼블릭 블록체인에서는 누구나 네트워크에 참여하여 노드가 될 수 있다. 즉, 모든 블록체인 데이터가 공개되어 있는 셈이다. 이 공개된 블록체인 데이터를 온체인 데이터라고 부른다. 반대로 블록체인 외부에서 가져오는 데이터는 오프체인 데이터라고 한다.
4.2. 왜 온체인 분석인가?
온체인 데이터를 제대로 읽고 활용 할 수 있다면 다음과 같은 이점이 있다.
유의미한 의사 결정에 활용: 거래량, 장단기 보유자, 팀 보유량, 거버넌스 활동 등 다양한 온체인 지표를 가지고 투자를 결정 할 수 있다.
유저 활동으로 보는 시장 트렌드 조사: 유동성, 네트워크 이용자 수, 프로젝트 컨트랙트 트랜잭션 등 온체인에서 활동하는 지갑을 보고 시장 트렌드를 알 수 있다.
이상 탐지 모니터링(리스크 관리): 재단 물량 출금, 해킹 물량 추적, 러그 프로젝트 지갑 추적 등 이상 상황을 모니터링 할 수 있다.
4.3. 스캔 활용
블록체인에서 가공되지 않은 온체인 데이터는 체인별 스캔 사이트를 이용하면 된다. 이더리움은 이더스캔이라는 사이트를 제공한다. 이더스캔에서 🔗코인원 지갑으로 라벨링된 주소를 분석을 해보겠다.
위와 같은 화면을 볼 수 있고 우리가 봐야하는 부분은 Transaction이다. 여기서 가장 위에 있는 🔗Shiba Inu…누르면 트랜잭션에 대한 상세 페이지를 볼 수 있다.
중요한 데이터는 다음과 같다.
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. 서비스 사용
스캔 사이트에서는 가공되지 않은 데이터를 제공해주기 때문에 대규모 데이터와 유의미한 데이터를 찾기 힘들 수 있다. 이러한 문제를 해결하기 위해서 온체인 데이터를 쉽게 분석 할 수 있도록 다양한 서비스가 제공되고 있다. 대표적으로 크립토 퀀트, 듄 애널리틱스, 아캄 플랫폼, 난센 등이 존재한다.
이는 Contract에 사용되는 Method로 Contract > Write as Proxy(or Write Contract)에서 확인 가능하다.
프록시 패턴은 원본이 아닌 대리하여 처리하게 함으로써 로직 흐름을 제어하는 패턴이다. 주요 로직이 있는 컨트랙트는 ~ as Proxy 부분을 읽으면 된다. 함수로는 정확하게 어떻게 투표하는지 알 수 없기 때문에 스마트 컨트랙트를 정의하는 언어인 솔리디티 코드를 읽어야한다.
🔗COSMO 로직 컨트랙트에 들어가서 코드를 읽어보면 Reveal은 이미 투표한 부분에서 결과를 등록하는 부분이다. 그래서 투표에 해당하는 코드를 찾아보니 tokensReceived라는 함수를 찾을 수 있었다. 이 함수를 살펴보면, como토큰을 받은 수량만큼 투표 함수가 호출하여 투표 하는 것을 볼 수 있다.
이제 Token Transfers(ERC-20)에서 como토큰에 해당하는 전송을 보면 어떤 지갑에서 얼마나 투표했는지 확인 가능하다.
블록체인의 구조부터 온체인 데이터를 분석하는 방법에 대해서 알아보았다. 온체인 데이터는 공개적으로 접근이 가능하기 때문에 정보의 접근이 쉽다. 많은 데이터가 있고 그 속에서 의미있는 분석을 하기는 힘들 수 있지만, 원하는 데이터를 찾을 수 있는 능력이 생긴다면 올바른 의사 결정에 도움이 된다.