이더리움이란?
탈중앙 어플리케이션 제작을 위한 대안 프로토콜 구축이 목적이다.
블록체인을 이용한 기술로 빠른 개발 시간, 보안, 다른 어플리케이션과의 효율적 상호작용이 가능하다.
이더리움을 백서 분석을 기반으로 유튜브, 업비트 투자자보호센터, 다양한 인터넷 블로그로 개인적으로 정리한 글이다.
이글도 비트코인 백서 글과 마찬가지로 이더리움 백서를 옮긴건 아니고 이해를 돕기위한 정리이므로 같이 보기!
1. 비트코인과 기존 개념들에 대한 소개 -비트코인의 상태변환시스템, 채굴, 스크립팅 등
2. 이더리움 - 어카운트, 메시지와 트랜잭션, 이더리움 상태 변환 함수
용어 설명
1. utxo : 이더리움은 잔고를 일일이 확인하면서 코인의 존재여부를 안다면 , utxo는 거래되고 있는
내역을 확인하며 , 하나하나 객체들을 확인해서 어떤 사람이 돈 잔고와 누가 보냈는지 나타나기 때문에 유효성 검증이 쉬워짐 . 이더리움은 은행이랑 비슷하다치면 비트코인은 모든 돈이 흩어져있음 .
이처럼 비트코인의 utxo란 돈이 은행처럼 잔고가 통틀어서 표현되는게 아닌, 누구한테 받았는지에 따라 구분되어 있다. 그래서 돈을 누군가한테 송금해야할 때, 각각의 utxo 로 쪼개서 보낸다고 한다.
utxo는 이자가 발생했을 때 작은 단위의 돈으로 쪼개는것이 정확하게는 불가능해서 단점이 있음.
2. 시빌공격 : 네트워크 해킹공격으로 한명의 행위를 여러 명의 행위인 것처럼 속이고 네트워크 시스템의 기능을 무력화함. 작업증명이 방어할수 있는 메커니즘 제공.
3. 머클트리 : 상위 부모들 아래 두개씩의 하위 노드로 묶어서 블록이 계층 구조를 이루는 것이다.
지난번 게시글에서 , 비트코인의 채굴, 작업증명 등은 기술했다.
그렇지만 비트코인 백서가 나온지 오래라 그런지 utxo나 상태 변환 등 중요한 개념의
용어 정리는 되지 않아 있었다.
이렇게 현재 비트코인의 소유권 관리 현황을 상태 변환함수로 입력을 넣으면 출력이 달라져서 상태를 업데이트 하게 되는거다.
입력으로는 보내는 쪽 지갑주소에서 선택된 기존 UTXO에 대한 참조정보와 해당지갑 주소에 대응되는 개인키가 생성한 암호화된 서명이 들어있고,
출력으로는 상태에 추가될 새로운 utxo 정보를 가지고 있다.
에러를 리턴한다는 얘기는, 존재하지 않는 코인이나 다른 사람의 코인 사용을 금지 시키는 것이다.
제네시스 블록 : 최초로 생성된 블록
채굴은 비트코인 백서 분석할 때, 작업증명을 해시값을 넣어보면서 목표값보다 작은지 수천번 넣어보는 방법으로 한다고 했다. 이 백서 부분에서는 s0 부터 s[n]에 계속 상태변환 함ㅅ에 넣어보면서 업데이트 한다는 과정을 자세히 설명해놔서 재미있고 이해가 더 잘됐다.
작업증명(proof of work)이 유효한지 확인한다.
-> SHA-256 해시값이 목표값보다 작다면 OK.
S[0]를 이전 블록의 마지막 상태가 되도록 설정한다.
TX를 n개의 트랜잭션을 갖는 블록의 트랜잭션 목록으로 가정한다.
트랜잭션을 순서대로 상태변환 함수에 넣어보면서 상태를 S[1]에서 S[n]까지 계속 업데이트해본다.
그 과정에서 에러가 나면 false 를 리턴하며 종료한다.
S[n]을 이 블록의 마지막 상태로 등록하고 true 를 리턴한다.
튜링완전성? 충분한 연산 능력과 시간만 주어진다면 모든 것을 계산할수 있음!
이더리움은 이러한 튜링 완전성을 갖고 있음. 하지만 복잡성 때문에 잠재적인 보안 문제를 갖고 있지만 트랜잭션에 대한 비용(transaction fee 또는 gas fee)의 도입으로 어느 정도 보완을 함
스마트 컨트랙트가 이더리움의 정체성인줄 알고 있었는데 , 비트코인에서도 스마트 컨트랙트가 스크립팅으로 가능하긴하다.
비트코인에서도 자동으로 자금 이체, 전달, 보관 등의 기본적인 스마트컨 트랙트 금융기능을 활용할 수 있다.
그렇지만 , 비트코인의 한계가 있다.
한계 1.
튜링 불완정성 - 비트코인에서는 반복문 사용이 불가능하고 이더리움에서는 반복문 사용이 가능하다. 코드 축약이 어려움
한계 2.
스마트컨 트랙트로 비트코인의 스크립트 언어를 활용해서 만든다면 작은 단위의 이자나 세분화된 금액의 분할할 수가 없다.
-> 비트코인 언어의 스크립트 언어의 한계 그리고 UTXO의 특성으로 발생하는 문제임.
-> 상태변환이 나타나기 전에 분할을 해놨어야했는데 , 스크립트로 쪼갤수 없다.
한계3.
상태표현제한
UTXO가 표현할 수 있는 상태는 사용되었거나 그렇지 않거나하는 두 가지 제약사항임.
이러한 특징으로 인해서 다중계약이 어렵다.
한계4.
블록체인 무지의 경우는 UTXO에서는 논스(nonce), 타임스탬프, 이전블록해시 같은 블록체인에 기록된 자료를 읽지 못함.
UTXO의 특징과 단순한 형태의 코딩만 가능한 스크립트 언어의 한계로 인하여 다양하고 복잡한 형태의 스마트 컨트랙트 프로그램 구현은 불가능한 것이 비트코인의 현실
참고로 메타규약은 현재는 확장성 때문에 결국에 안쓴다고 함!
이더리움의 목적?
분산 애플리케이션 제작을 위한 대체 프로토콜을 만드는 것
탈중앙화된 환경에서 누구나 쉽게 애플리케이션을 개발하고 이용할 수 있는 플랫폼
스마트 컨트랙트? 계약을 프로토콜화하여 소프트웨어 및 하드웨어에 미리 저장하고 해당 계약을 이행하는 과정에서 조건 충족 여부에 대한 판단을 인간이 아닌 컴퓨터 등의 기계가 대신 실행함
계약 결과가 명확하며 계약 내용을 즉각 이행되서 신뢰성,시간.비용 해결
-> 논스 , 이더 잔고 , 계약 코드(존재한다면) , 어카운트의 저장공간
1) 논스(nonce): 각 트랜잭션이 오직 한번만 처리되게 하는 일종의 카운터
탈중앙화된 이더리움 환경에서 프로그램이 실행되거나 어떠한 요청이 왔을 때 순차적인 처리를 가능하게함 .
2) 이더리움 가스 : 스마트 컨트랙트가 모두 블록체인상에 기록될 때 네트워크의 과부화를 방지해줌. 수수료 개념 !
이더리움을 빠르게 전송하고 싶은 사람은 높은 가스비를 지불하고 반대로, 천천히 전송해도 되는 사람은 낮은 가스비를 지불함으로써 네트워크 과부하를 방지해준다
3) 이더(ether) : 이더리움의 암호 - 연료.
트랜잭션 fee를 지불하는데 이용됨!
외부소유계정(EOA)과 컨트랙트 계정(CA)
'사람 -외부 소유 계정(입출금이 가능) - 컨트랙트 계정(스마트 컨트랙트의 주소로 프로그래밍 언어로 쓰인 코드(code)와 저장공간을 가짐)' 순으로 요청 및 처리가 가능함.
계약 코드나 저장공간은 옵셔널인데 있으면 스마트컨트랙트 .
정리하자면 이더리움에서의 계약은 메시지나 트랜잭션이 도착하면 특정 코드를 실행하고 , 자신의 이더 잔고와 key/value 저장소를 직접 통제한다.
transaction: 외부 소유 어카운트(EOA)가 보낼 메시지를 가지고 있는 서명된 데이터 패키지.
STARTGAS 값: 트랜잭션 실행이 수행되도록 허용된 최대 계산 수
GASPRICE 값: 매 계산단계마다 발신처가 지불하는 수수료
->이더리움 백서 중...
메시지 수신처,발신처를 확인할 수 있는 서명,발신처가 수신처로 보내는 이더의 양
: eoa에서 메시지. 다양한 정보를 포함하며 ca에 명령 요청할 수 있음
startgas , gasprice :
이더리움에서는 인터넷 서비스에서 제공하는 어떠한 프로그램을 실행하는데 들어가는 비용(CPU, 메모리, 프로그램 수행비용) 등을 사용자가 지불하게 되어있음.
이는 디도스 공격(사이트를 무력화 시킴) 을 하는 공격자도 마찬가지.
요런 비용을 공격자가 상당량의 공격을 가하면 그정도의 비용을 지불하기 때문에 안함.
#메시지
: CA -> CA 에게 보내는것.
정리하자면 트랜잭션은 외부소유계정(EOA)가 어떠한 메세지(다양한 요청들)를 컨트랙트계정(CA)에게 보내는 행위!
APPLY( ) 함수에 정의된 방식대로 프로그램이 동작하고 그 결과를 S’(다음상태)의 형태로 출력값을 얻을 수 있다.
이러한 상태변환함수가 동작 한 뒤에 나온 결과값을 지속적으로 업데이트하게 됨!
이더리움에서 상태 변환 함수 절차를 살펴보자.
백서에서의 6개의 절차
서명의 유효성 확인을 통해서 트랜잭션을 요청한 개인키에 대한 검증을 확인
가스비에 대한 수수료를 계산하는 과정
실제 가스비용을 처리하는 과정
수신처로 트랜잭션의 값을 보내고 처리하는 과정
발신저의 이더잔고나 가스비가 부족한 경우? 1~4번까지 진행했던 모든 내역을 취소!..
5번의 예외상황 없이 모든 게 정상적으로 진행되었다면 총 사용된 가스비에서 남은 가스비를 원 발신처에 돌려주고 트랜잭션 처리에 소요된 가스비를 채굴자에게 전송
정리하자면,
상태변환함수를 실행시키는 데는 가스비(수수료)가 발생한다.
채굴자(풀노드)는 이더리움 상태변환함수를 실행하고, 그 결과를 블록체인에 과정에서 가스비를 수수료로 받는다.
가스가 돌리고 있는데 부족한 상황이 오면 처음부터 다시 돌린다.
컴파일: 프로그래머가 볼 수 있는 언어를 컴퓨터가 이해할 수 있는 언어로 변환하는 과정
EVM(Ethereum Virtual Machine):
컴파일된 스마트 컨트랙트 코드를 실행하고 블록체인에 기록을 담당하는 곳
스택( 컴파일한 스마트컨트랙트의 코드가 실행됨 ) 을 꺼내고 넣고 할 수 있음
저장소 : 스마트 컨트랙트에서 블록체인에 영구적으로 기록해야 하는 데이터들을 기록하는 장소
이더리움 블록체인에 기록된 모든 내용들이 상태로 존재하고,
이 상태를 스마트 컨트랙트가 EVM에서 실행하면 상태값을 변경할 수 있음.
이렇게 변경된 최종 상태값이 최신 이더리움 블록체인에 기록된다!
정리하기 from 업비트 투자보호센터 이더리움편
사진링크 :
링크텍스트