이더리움(Ethereum)
2015년 비탈릭 부테린이 개발한 블록체인 플랫폼이다.
이더리움 애플리케이션은 특정 조건의 처리를 사전에 설정하며 해당 조건을 만족하면 실행된다 → 스마트계약
스마트계약(Smart Contract)
현실의 권리 증명이나 이동등을 포함한 계약을자동으로 실행하는 구조
- 상태(필드) 와 함수를 갖는 평범한 프로그램
- 이더리움에 접속한 노드에서 동작하는 전용 가상머신 EVM에서 실행
- 튜링 완전한 언어를 사용하므로 더 복잡한 처리 구현 가능
어떤 컴퓨터 알고리즘이든 이론적으로 시뮬레이션 할 수 있는 프로그래밍 언어
1. 투명한 거래가능 : 상대를 신뢰하지 않아도 거래에 문제가 발생되지 않는다.
2. 비용절감 : 중개자가 필요하지 않다.
비트코인은 암호화폐 플랫폼인 반면,
이더리움은 암호화폐 + 스마트계약 등의 애플리케이션을 블록체인에서 실행하려는 플랫폼이다.
1. 이더리움의 로드맵(Roadmap)
단계 | 단계명 | 내용 |
0단계 | 올림픽(Olympic) |
2015년 05월 09일 이더리움 네트워크의 실질적인 구축 이전에 다양한 테스트를 진행하는 단계 |
1단계 | 프론티어(Frontier) |
2015년 7월 30일 명령 줄 인터페이스 기반 탈중앙화 애플리케이션 개발의 기초 테스트 단계 이더리움을 개발/채굴하고 네트워크를 형성하는 단계 |
2단계 | 홈스테드(Homestead) |
2016년 03월 14일 노드가 생기면서 생태계를 진행하는 단계 거래의 고속화 및 안정화 추구 |
3단계 | 메트로폴리스(Metropolis) |
2017년 10월 17일 대중화를 위한 인프라 형성 단계 - 1 단계 하드포크 : 비잔티움
- 2 단계 하드포크 : 콘스탄티노플(실패, 재시도 예정)
|
4단계 | 세레니티(Serenity) | 지분 증명 알고리즘의 안정화를 위한 마지막 단계 |
2. 이더리움의 화폐 단위
- 이더리움 내부 화폐 단위 : 이더(ETHER)
- 이더리움의 최소 단위 : wei
No | 통화단위 | 최소 단위(wei) 기준 환산 금액 | 지수승 |
1 | wei | 1 | 1 |
2 | kwei | 1,000 | 10^3 |
3 | mwei | 1,000,000 | 10^6 |
4 | gwei | 1,000,000,000 | 10^9 |
5 | micro | 1,000,000,000,000 | 10^12 |
6 | pwei | 1,000,000,000,000,000 | 10^15 |
7 | ether | 1,000,000,000,000,000,000 | 10^18 |
8 | kether | 1,000,000,000,000,000,000,000 | 10^21 |
9 | mether | 1,000,000,000,000,000,000,000,000 | 10^24 |
10 | gether | 1,000,000,000,000,000,000,000,000,000 | 10^27 |
11 | tether | 1,000,000,000,000,000,000,000,000,000,000 | 10^30 |
3. 거래수수료 가스(Gas)
가스(Gas)
프로그램 연산을 위한 연료
채굴자에게 수수료로 지불 = 가스 가격 * 가스 소비량
- 가스량은 OPCODE(바이트코드) 양에 따라 결정된다.
- 유닛 당 가스가격이 다르다 ex) 메모리 사용시, if문 사용 시 등
- 가스가격(Gas Price)
- 가스제한(Gas Limit)
- 가스제한 = 가스가격 * 가스 소비량
[특징]
- 가스가 부족한 경우, 거래가 실패된다.
- 사용하지 않는 가스는 돌려받는다.
- 가스상한의 목적은 무한 루프 제어를 위함이다(보안매커니즘)
- 이더리움에서는 무한루프를 강제 종료하는 방법이 없다 → 가스 상한 모두 소모 시, 무한루프 중지 유도
4. 계정구조
이더리움 역시 비밀키 계정 개념 사용
: 비밀키를 가진 사람만이 소유권을 가진 암호화폐를 송금할 수 있다.
외부(비밀키)계정 | EOA(Extenerally Owned Account)
: 이더리움 사용자를 위한 계정
- 주소(address)
- 잔액정보 : 주소와 연결해 잔액정보를 갖는다.
- 비밀키
계약계정 | CA(Contract Account)
: 계약증명이 있는 계정
- EOA에서 거래를 통해 만들어지며, EOA가 발신하는 거래가 트리거가 되어 계약코드가 실행된다.
- CA에서 다른 CA를 생성하거나 코드 실행 가능
- 주소(address)
- 잔액정보 : 주소와 연결해 잔액정보를 갖는다.
5. 계정과 연결된 정보
상태트리
이더리움의 상태값을 다루는 해시트리
계정정보 | 설명 |
nonce |
계정에서 보낸 거래 회수
|
balance | 계정의 잔액정보를 출력(wei) |
storageRoot |
계정과 연결된 스토리지의 패트리샤 트리의 루트 노드를 나타내는 256bit 해쉬값
|
codeHash |
스마트 계약의 프로그램(EVM 코드)에 대한 해시값
|
- 이더리움은 블록 크기에 제한을 두지 않는다.
- 모든 이더리움 사용자의 잔액 정보를 블록에 넣을 경우, 블록크기가 너무 커지가 되므로 이를 제어하기 위해 계정정보 + 이더 잔액 정보는 상태트리에 저장
{머클 패트리샤 트리는 조금 더 공부가 필요}
6. 블록의 데이터 구조
- 비트코인 네트워크에서는 잔액정보를 UTXO를 모두 합해서 계산
- 이더리움에서는 계정과 연결된 잔액이 있으며, 이 잔액을 분산장부상(상태트리)에서 관리
잔액 확인 방식의 차이
UTXO | 계정구조 | |
장점 | 다수를 보유했을 때 병렬로 거래 가능 | 계정정보를 별도의 자료구조로 분리해 빠른 검색 가능 |
단점 | 잔액 확인 구조가 복잡 |
계정 상태를 바꾸 때 FIFO 방식으로 작업 실행 (블록 생성 속도와 거래 속도를 빠르게 처리하는 구조를 만들어 단점 보완 진행) |
7. 블록 생성 속도의 차이
- 비트코인의 블록 생성 속도 : 1회 / 10분
- 이더리움의 블록 생성 속도 : 15초
엉클블록에 대한 보상
이더리움은 블록 생성 속도가 비트코인의 40배로 빠르다는 강점을 갖짐나,
블록 생성 속도가 빠르기에 동시 블록 생성의 확률이 높아진다는 문제가 존재
→ 엉클블록 의 문제 발생 : 엉클블록이 많으면 블록체인 네트워크 참여도가 저하
채굴에 성공하여도 보상(수수료)을 받을 수 없는 블록
→ 이더리움은 고스트 프로토콜을 통해 문제해결
더 어려운 난이도와큰 Nonce값을 가진 블록에 최대 2개의 엉클블록을 추가하고 보상
8. 블록 선택 방식의 차이
블록 높이가 같은 여러 개의 블록이 있는 경우,
- 비트코인 : 나카모토 합의
- POW 알고리즘의 난이도가 높은 블록 선택
- 이더리움 : 수정 고스트 프로토콜
- 각 체인에 묶인 블록들의 생성 난이도 전체를 더한 결과가 가장 높은 체인을 메인 체인으로 선택
- 두 체인 중 하나가 엉클 블록을 포함할 경우, 엉클 블록의 난이도까지 합해서 난이도를 더한 결과로 판단
9. 작업 증명 알고리즘의 차이
- 비트코인 : Nonce를 변경한 후, SHA-256 해시함수로 연산 반복
- 이더리움 : 이대시(ethash) 사용 → ASIC 장비 무력화를 위해 메모리를 사용하는 방식
- 블록의 해더를 스캔 → 블록을 대상으로 계산할 수 있는 값(시드) 추출
- 시드에서 16MB 단위의 의사 랜덤 캐시를 만들고, GB크기를 갖는 DAG기반 데이터셋을 만든다.
- DAG(Directed Acyclic Graph) : 방향은 있지만 서로 순환하는 노드가 없는 그래프
- 1GB 이상의 데이터셋에서 일부를 추출해 특정 조건이 될 때까지 Nonce를 변경하며 채굴 진행
- 데이터셋은 3만 블록단위(에포크)로 바뀌며 선형으로 커진다.
- 일정 패턴으로 메모리 읽기 연산을 방지
- 데이터셋 저장공간도 일정하지 않게 설정
10. 이더리움 가상머신(EVM)
이더리움 가상머신(EVM)
애플리케이션을 실행하는 기반으로 튜링 완전한 가상머신
- 스마트 계약은 코드 작성 후, EVM에서 실행할 수 있는 상태로 이더리움 블록체인에 배포
- 처리속도, 데이터크기, 스펙상의 제약 등과 관계없이 어떤 애플리케이션이든 실행할 수 있다는 것을 보장
11. 거래, 메시지, 콜
이더리움의 거래 발행의 경우
- 암호화폐 송금
- EOA로 스마트계약 생성
- 계약 내 함수 호출
메시지 : 어떤 계약이 다른 계약을 호출콜 : 데이터 변경없이 기존의 정보만 확인(가스 발생없음)
메시지/콜 : setter/getter함수로 이해
'Studynote > Blockchain' 카테고리의 다른 글
[솔리디티/Solidity] ERC20 호환 Token의 스마트 컨트랙트 생성 #01 (0) | 2019.06.08 |
---|
댓글