[Smart contract audit]스마트 컨트랙트

이전 포스트에서 비트코인, 이더리움, 블럭체인에 대해 간단하게 개념을 정리했다.
이제 스마트 컨트랙트 오딧의 "스마트 컨트랙트"부분을 이해하고 넘어가보자.
스마트 컨트랙트?
컨트랙트는 계약이라는 뜻을 가지고 있지.
그럼 스마트 컨트랙트?는 똑똑한 계약이라고 보면된다.
보통 그냥 계약을 보면 A와 B가 계약을 한다고 할 때 뭐 부동산 공인중개사든 제 3자라는 인증기관이 끼어야 계약을 하잖아?
근데 똑똑한 계약인 스마트 컨트랙트는 제 3자 없이 신뢰있는 개인간의 신뢰있는 계약을 위해 만들어진 기술이야.
한줄로 정리하자면 아래와 같아.
제 3자 없이 개인과 개인이 신뢰있는 계약을 하기 위해 만들어진 자동화 기술
자동화라는게 들어갔지.
맞아, 스마트 컨트랙트는 코드 형태로 블록체인 위에서 자동으로 작동해.
조건과 조건이 맞으면 하는 행위를 코드로 작성해두고 블록 체인 위에 업로드해두면 조건 만족시 자동으로 행위가 이루어진다는 것이지.
블록체인 위에 올라간다고 했지? 이전 포스트에서 말한 것처럼 블록체인은 불변성, 투명성, 탈중앙화의 특성을 지니는데 스마트 컨트랙트도 이걸 그대로 따라가.
그래서 계약이 불변하고, 내용이 투명하고, 특정 서버나 회사가 운영하지 않아서 계약에 대한 신뢰가 보장되니 개인과의 거래가 가능한거지.
비트코인과 이더리움 둘다 스마트 컨트랙트가 들어가는데 앞으로 우리가 배울건 이더리움의 스마트 컨트랙트가 9할 아니 그 이상읽야.
왜냐면 비트코인의 스마트 컨트랙트는 Script라는 너무 저수준의 언어를 사용하고 루프조차 안되서 활용할게 없거든
이더리움은 Solidity 라는 언어를 사용해 스마트 컨트랙트를 작성하는데, 모든 프로그램 로직을 구현할 수 있어서 활용도가 높아.
그만큼 보안 헛점도 많지.
그래서 앞으로 이더리움 스마트 컨트랙트에 대해 집중적으로 공부할 것이다.
EOA(Externally Owned Account)와 CA(Contract Account)
우선 이더리움에서 계정이라는 개념이 있고 크게 2가지 종류가 있어.
EOA와 CA야.
EOA는 메타 마스크같은 지갑이라고 보면된다.
CA는 스마트 컨트랙트를 블록 체인 위에 올리면 발급되는 스마트 컨트랙트의 계정이라고 보면된다.
자 아래 흐름을 보면 바로 이해할것임.
너가 누군가와 계약을 하기 위해 스마트 컨트랙트를 코드로 짠다.
작성한 스마트 컨트랙트를 블록체인에 올릴 때, 나 누구누구인데(EOA 계정)! 이 스마트 컨트랙트좀 블록체인에 올립시다!하고 말해.
이제 스마트 컨트랙트가 블록체인에 올라가면 자동으로 CA가 발급이 되고 발급한 CA를 계약하려는 사람에게 주면 거기로 송금을 하든 특정 행위를 하든 하는거지.
CA는 곧 계약서야.
쉽게 생각해서 코딩할 때 함수? 라고 봐도 될것같어.
트랜잭션 흐름
자 이제 계정을 이해했으니 흐름을 이해해보자.
위에서 계속 스마트 컨트랙트를 블록체인 위에 올린다는 표현을 했는데 너무 추상적이지. 이걸 설명할거야.
이더리움에서의 트랜잭션(거래)는 비트코인과 다르게 다양한 형태를 보인다고 했지?
그 다양한 형태 중 하나가 스마트 컨트랙트야.
즉, 블록안에 들어가는 트랜잭션의 여러 형태중 하나가 스마트 컨트랙트인거지
구조는 아래와 같아.
- 누가 보냈는지(EOA 주소)
- 계약서 코드
- 수수료 (Gas)
- 기타 정보
이제 트랜잭션을 보냈으니 PoS 기준으로 노드들 중 하나가 검증자 노드가 되어 블록을 만들어서 네트워크에 올리겠지.
네트워크에 올라가게 되면 아까 말한 CA가 발급되며 누구든 그 계약서를 호출하고 계약하고 할 수 있는 거지.
전체적인 흐름을 다시 정리하자면 다음과 같겠다.
나 누구인데(EOA) 계약서 하나 작성했으니 좀 올립시다.(계약서에 본인 서명 했음)
네트워크에 전파하면 하나의 트랜잭션이 되며 PoS기준으로 했을 때 검증자 노드가 해당 트랜잭션과 여러 트랜잭션들을 모아서 블록으로 만든다.
검증 과정 이후 공식적으로 블록체인에 올라감.
CA가 발급이 된다.
CA를 호출하여 기능 실행이나 계약을 진행한다.
스마트 컨트랙트에 대해선 대강 개념은 정리된 것 같다.
다음엔 이더리움에 대해 더 자세히 알아보자.