Vitalik Buterin
에 의해 제안된 탈중앙화, 오픈소스 블록체인 플랫폼개발자들이 블록체인 네트워크 위에 decentralized applications(dApps)
즉, 분산 어플리케이션을 자유롭게 만들 수 있도록 지원
튜링 완전 언어
의 내장을 통해 다른 종류의 제작 기법 제공, 빠른 개발 시간, 보안, 다른 dApp과의 효율적인 상호작용을 지원
❗튜링 완전 언어란?
무한한 저장공간이 있다면 이 세상 모든 문제를 풀 수 있다는 튜링 머신을 구현하는 언어
다시 말해, 모든 기능을 구현할 수 있는 언어, 어떠한 어플리케이션이던 만들 수 있는 언어라고 말할 수 있다.
Smart contract
로 불리는 자동 계약 시스템을 사용할 수 있는 어플리케이션을 만들 수 있도록 지원비트코인 스크립트 언어는 while이나 for과 같은 순환 명령어를 지원하지 않는다. 따라서 다양한 기능의 어플리케이션을 모두 구현하는 것이 어렵다.
UTXO 스크립트만으로는 인출 액수를 세밀하게 통제할 수가 없다.
❗UTXO(Unspent Transaction Outputs)란?
말 그대로, 사용되지 않은 트랜잭션 출력값이다.비트코인은 잔고라는 개념이 없고, 거래 내역을 각각의 카드로 가지고 있다고 생각하면 된다. 그 거래내역에 적혀있는 뭉텅이 금액들이 UTXO이다.
이 뭉텅이 금액들은 쪼갤 수가 없기 때문에(10000원 실물 지폐를 찢어서 5000원 두 장으로 만들 수 없음과 비슷하다) 출금을 할 때, 그 것보다 큰 UTXO를 찾아 보내서 거스름돈을 받던가, 작은 UTXO 여러 개를 합쳐서 보내야한다.
UTXO를 거래에 이용하면 사용한(spend) 것이 되기 때문에 UTXO는 소멸된다.
UTXO는 오직 사용됐는지, 안됐는지만을 표현할 수 있다. 따라서 단순하고 1회적인 거래에만 사용될 수 있을 뿐, 다른 어떤 내부적인 상태를 가지는 다중 단계 계약과 같은 스크립트를 만들 수가 없다.
UTXO는 여러 정보가 들어있는 블록체인 헤더 데이터 등을 전혀 해독하지 못하기 때문에 여러 다른 분야의 어플리케이션을 만드는데 제약이 생긴다.
비트코인은 탈중앙화된 디지털 자산이라는 개념에 초점이 맞춰져있기 때문에 다양하고 복잡한 형태의 컨트랙트 구현이 어려웠다. 이더리움은 이 부분(스마트 컨트랙트)을 개선함으로서 블록체인을 활용한 다양한 탈중앙화된 애플리케이션을 개발할 수 있는 플랫폼으로 등장하게 되었다.
❗이더(Ether)란?
이더리움 내의 화폐라고 생각하면 되는데, 트랜잭션 수수료를 지불하는데 사용된다.
1. 외부 소유 어카운트(Externally Owned Accounts)
2. 컨트랙트 어카운트(Contract Accounts)
❗GAS란?
- 이더리움에서 송금이나 스마트 컨트랙트를 실행할 때 얼마나 계산을 했는가를 세기 위해 만든 단위(거리 단위인 km, 부피 단위인 L와 비슷)
- Ethereum yellow paper(황서)에 각 스마트 컨트랙트 당 필요한 gas의 양이 측정되어있다(ex. EOA간 송금에는 21000gas 소요)
- 수수료 = 사용된 gas의 양 * gasprice(Ether per gas)
- 이더리움 네트워크를 향한 공격자의 무차별적인 공격을 GAS를 통해 방지할 수 있다. 네트워크 안에서의 모든 실행에는 GAS를 지불해야하기 떄문에 무한 루프나 과도한 실행을 통한 공격을 시도한다면 비용이 기하급수적으로 증가하게 된다.
상태 전이 함수 : Apply(S,TX) → S'
- S라는 현재 상태와, Transaction인 TX를 함수에 넣으면 함수에 정의된대로 프로그램이 작동하고, S'라는 출력값을 내놓음과 동시에 S'라는 상태로 바뀐다. 이러한 출력값들이 블록체인에 지속적으로 업데이트되며 기록된다.
스마트 컨트랙트를 실행시키는 코드는 "Ethereum Virtual Machine code"(EVM code)로 작성된다.
❗EVM이란?
- 어떤 프로그래밍 언어든지 사람이 쓴 언어를 컴퓨터가 알아볼 수 있도록 변환해주는 과정인 "컴파일"이 필요하다.
- 그리고 이더리움 네트워크에서, 컴파일된 스마트 컨트랙트 코드를 실행하고 블록체인에 기록을 담당하는 곳이 EVM이다.
- 코드 실행 순서 : 스마트 컨트랙트 코드 → 이더리움 컴파일러(컴파일 해주는 곳) → EVM 바이트 코드 → EVM에서 실행
- 구성요소
- 스택 : 스마트 컨트랙트 코드가 실행되는 공간(코드가 실행하는 다양한 방식 중 스택을 이용하는 방법이 있다)
- 메모리 : 컴퓨터 메모리와 비슷한 개념으로, 스마트 컨트랙트 코드가 실행되기 위한 임시 공간. 계산(실행)이 끝나면 리셋
- 저장소 : 영속적으로 유지되는 저장소로, 스마트 컨트랙트가 완료된 이후에 블록체인에 기록할 데이터 공간. 영구적으로 저장해야할 데이터들을 저장하는 곳
- EVM 코드는 블록 헤더 데이터부터 특정 값, 발송 및 수신되는 메세지 데이터에 접근할 수 있고, 결과값으로 데이터의 바이트 배열을 반환할 수 있다.
이더리움 생태계는 하나의 상태(World State)로 볼 수 있는데, 트랜잭션에 따라 계속 변화하게 된다.
이 상태는(block_state,transaction,message,code,memory,stack,pc,gas)의 데이터들로 정의될 수 있고, 특히 block_state는 모든 어카운트를 포함하며 잔고와 저장소를 가진다.
결국 스마트 컨트랙트 코드가 EVM에서 실행된다면 각각의 명령에 따라 World State의 내부 데이터 값들이 각자의 정의에 따라 변화하고, 따라서 World State의 값은 변한다. 그리고 그 최종 상태 값은 이더리움 블록체인에 기록되게 된다.
0~n-1에 대해 S[i+1] = APPLY(S[i],TX[i])
로 설정.이더리움 백서 톺아보기 - 업비트 투자자보호센터
Ethereum Development Documentation
[이더리움] 가스와 수수료 체계 - feyee95님
비트코인의 한계라.. 좋네요. 잘 읽었습니다~