5 이더리움
1) 비트코인 트랜잭션 모델의 한계
(1) Not Turing-complete script
- 만약 스크립트가 무한 루프를 돈다면 해당 트랜잭션을 처리하는 동안 마이너는 다른 작업을 할 수 없음
- 악의적으로 무한 루프를 도는 트랜잭션을 발생시킨다면 시스템이 마비됨
- 비트코인 스크립트는 무한 루프를 지원하지 않고 이는 자산 프로그래밍에 큰 제약조건이 됨
- 무한 루프를 사전에 찾아서 배제하자 ! -> Halting Probloem(모순)
(2) Large bootstrapping cost
- 새로운 트랜잭션을 검증하기 위해서는 최신 상태와 동일한 UTXO를 유지해야 함 _ 노드 동기화
- 이를 유지하기 위해서는 모든 블록을 최신까지 수행하는 방법 밖에 없으므로 시간이 오래 걸림
2) 이더리움의 등장
(1) 이더리움의 등장
- 2014년 7월 22일 이더리움 자금 공모
- 비탈릭 부테린을 비록한 이더리움 재단이 크라우드 펀딩의 방식으로 개발비를 모금
- ICO 방법은 특정한 방식으로 만든 비트코인 트랜잭션을 특정한 주소로 전송
(2) 이더리움
- 비트코인과 다르게 계좌의 상태를 명시적으로 블록에 기록해 트랜잭션으로 그 상태를 변경하게 함
- 메모리에 프로그램의 상태를 기록하고 그 상태를 기반으로 다음 동작을 수행하는 튜링머신과 유사함
- 이더리움은 일반적인 계좌 + 상태를 가지는 Smart Contract를 가짐
- 무한 루프를 방지하는 방법으로 gas를 청구하는 방식 사용
(3) Smart Contract
- 디지털 자산을 다루는 프로그램
- Smart Contract의 바이너리 코드를 트랜잭션에 담아 전송하면 Smart Contract Account(CA)가 생성됨
- Smart Contract는 다른 스마트 컨트랙트 함수를 호출할 수 있음
스마트 컨트랙트(Smart Contract), 글 한 편으로 제대로 이해하기
블록체인 스마트 컨트랙트 개요 및 작동방식 A to Z
medium.com
3) 이더리움의 원리
(1) Gas cost
- 이더리움 프로그램의 트랜젝션 및 스키립트 수행 마다 가스를 부여하는 방법을 제안
- 인스트럭션 마다 실제로 소요되는 비용이 다르므로 경우에 따라 필요한 가스를 차등 지정
- 사용자가 트랜잭션에 gas limit을 명시하고 가스 사용량이 limit을 넘기면 해당 트랜잭션 abort 시킴
(2) 가상머신
- 이더리움 가상머신 -> EVM(Ethereum Virtural Machine)
- 인스트럭션에 따른 가스가 명시된 테이블을 가지고 트랜잭션 abort를 담당
(3) 이더리움 트랜잭션 구조
- 이더리움의 트랜잭션은 논스를 가짐
- 논스는 이중 지불 문제를 해결하기 위함 // 비트코인의 UTXO
- 논스는 어떤 어카운트가 발생시킨 트랜잭션의 개수를 의미함
(4) Ethash
- ASIC 저항성을 가지는 메모리 기반의 이더리움 작업증명 알고리즘
- ASIC는 이더리움 전용 채굴기를 이야기함
- 매 3만 블록을 주기로 GB의 DAG를 추가로 생성하므로 크기가 점점 커짐
- ASIC 저항성은 달성하였지만 블록 헤더를 검증하는데 비용이 많이 들어 Light Client를 만들기 어려움
(5) GHOST
- Greedy Heaviest Object subTree Protocol
- 이더리움의 성능 향상과 보안성 향상을 위해 나온 알고리즘
- 빠른 블록 생성 속도를 가지면서 보안성도 높이는 결과를 얻음
- 블록 생성의 중첩이 발생했을 때 비트코인과 달리 가장 무거운 쪽을 선택함
- Genesis Block에서 출발하여 Subtree들이 각각 얼마나 블록을 포함하고 있으며
그 블록들의 개수가 많은 쪽을 메인 chain의 블록으로 하겠다는 것