티스토리 뷰

시작하기에 앞서서

글을 쓸 때 최대한 규격화된 형식으로 써야지, 저를 포함해서 혹시나 이 글을 보시는 분들에게도 도움이 될 것 같아서

다음과 같은 형식을 고수하며 써보겠습니다.

 

 

1. 개념 목차

 

2. 코드 설명 :

코드설명

 

3. 제 생각, 추가 자료 : 기울임체

 

4. 강조 : 강조

 

 

추가할 부분이 필요하다고 생각이 들면 추가하겠습니다. 최대한 깔끔한 포스팅을 하는 것 그리고 컴팩트하게 하는 것을 목표로 달려보겠습니다. 


컴퓨터 과학의 관점에서 보자면 이더리움은 결정론적이지만, 사실상 한정되지 않은 상태 머신이며, 이것은 전역적으로 접근 가능한 싱글통 상태와 그 상태를 변화시킬 수 있는 가상 머신으로 구성되어 있다.

 

실용적인 관점에서 보면 이더리움은 스마트 컨트랙트라는 프로그램을 실행하는 오픈 소스에 기반을 둔, 전 세계에 걸쳐 탈중앙화된 컴퓨팅 인프라스트럭처다. 블록체인을 사용하여 시스템의 상태 변화를 동기화하고 저장하며, 이더라는 암호화폐를 이용하여 실행 자원 비용을 측정하고 제한한다.

 

비트코인과 비교

매우 제한된 스크립트 언어를 사용하는 비트코인과 다르게, 이더리움은 임의성과 무한 복잡성을 가진 코드를 실행 수 있는 가상 머신(virtual machine)을 운영하는 범용 프로그래밍이 가능한 블록체인의 설계되어 있다. 비트코인의 스크립트 언어가 의도적으로 지불 조건에 대한 단순한 참/거짓 평가에만 제한되어 있는 방면, 이더리움 언어는 튜링 완전 언어이다. 이것은 이더리움이 범용 컴퓨터로 직접 작동할 수 있음을 의미한다.

 

드디어 지금까지 코드 분석을 할 때 걸림돌이 되던 EVM에 관한 설명이 나왔습니다.

출처 : https://opentutorials.org/course/2869/18360

솔리디티로 짠  코드가 솔리디티 컴파일러에 의해 기계어(Ethereum Bytecode)가 되고, 이 바이트 코드가 바로 EVM에서 실행되는 것입니다. EVM은 하나의 기계, Machine입니다. EVM 바이트 코드 이더리움의 Mainnet에 배포함으로써 실제 실행이 가능한 상태가 되며, 배포된 EVM 바이트 코드 이더리움 블록체인에 기록되기도 합니다. 또한 스마트컨트랙트와 같은 경우에도 바이트 코드로 컴파일되어 EVM을 통해 실행됩니다. 

 

VM에 관련된 설명은 원래 어느정도 알고 있었는데, 튜링 완전에대한 설명이 궁금해서 찾아봤다. 해시넷에서

튜링완전(Turing-Complete)는 어떤 프로그래밍 언어나 추상 머신이 튜링머신과 동일한 계산 능력으로 문제를 풀 수 있다는 의미이다. 이것은 튜링 머신으로 풀 수 있는 문제, 즉 계산적인 문제를 그 프로그래밍 언어나 추상 머신으로 풀 수 있다는 것이다. 튜링은 수학자 앨런 튜링(Alan Turing)이 1936년에 제시한 개념으로 계산하는 기계의 일반적인 개념을 설명하기 위한 가상의 기계를 뜻한다.[1] 앨런튜링 사후에 이름을 떠서 튜링 머신이라고 불리우게 되었다.

라고 합니다.

 

이더리움의 탄생

비트코인 기반에서 구축해야 한다는 것은, 네트워크의 의도적인 제약 조건들을 전제한 상태에서 해결책을 찾아야 한다는 뜻이다. 즉 제한된 트랜잭션 타입, 데이터 타입 및 데이터 스토리지 크기로 애플리케이션의 종류를 제한하는 듯이 보였고, 

이를 개선하고자 비탈릭 부테린은 이더리움 프로토콜 계층을 구축했다. 기본 메커니즘을 구현하지 않고도 특정 애플리케이션을 프로그래밍 할 수 있다는 것을 의미합니다.

 

 

이더리움 : 범용 블록체인
이더리움은 임의의 상태를 추적하고 상태 머신을 프로그래밍하여 합의로 작동하는 월드-와이드 컴퓨터다

 

비트코인의 블록체인은 비트코인 단위 및 소유상태(1)를 추적한다. 비트코인은 트랜잭션이 상태 전이를 일으켜, 코인의 소유권을 변경하는 탈중앙화된 합의 상태 머신이라고 생각할 수 있다.

 

반면 이더리움은  범용 데이터 저장소, 즉 키-벨류 튜플로 표현할 수 있는 모든 데이터를 저장할 수 있는 저장소의 상태 전이(1)를 추적한다. 특정 키는 키-벨류 데이터 저장소에서 임의의 값을 보유하고 그 값을 참고합니다. 이더리움은 코드와 데이터를 저장하는 메모리가 있으며, 이더리움은 블록체인을 사용하여 이 메모리가 시간에 따라 어떻게 변하는지 추적합니다. 이 때 이더리움은 상태 변화가 합의 규칙에 의해 관리되고, 상태가 전체적으로 배포된다.

 

이더리움의 구성 요소
구성요소 설명
P2P network TCP 포트 30303으로 접속 가능한 이더리움 메인 네트워크
에서 실행된다
합의 규칙(consensus rules)  
트랜잭션(transactions) 보낸 사람, 받는 사람, 값 및 데이터 페이로드가 포함된 네트워크 메세지
(페이로드는 전송의 근본적인 목적이 되는 데이터의 일부분으로 그 데이터와 함께 전송되는 헤더와 메타데이터와 같은 데이터는 제외한다.)
상태 머신(state machine) 이더리움의 상태 전이는 바이트코드를 실행하는 스택 기반 가상 머신인 EVM에 의해 처리된다. '스마트 컨트랙트'라는 EVM 프로그램은 고수준 프로그래밍 언어(Solidity)에 의해 작성되고, EVM에서 실행되도록 바이트코드로 컴파일된다.
데이터 구조(data structure) 이더리움의 상태는 트랜잭션 및 시스템 상태가 머클 패트리샤 트리(이더리움에서 사용하는 수정된 머클트리)라고 하는 시리얼라이즈된 해시 데이터 구조이며, 각 노드의 데이터베이스에 저장된다.
합의 알고리즘(consensus algorithm) 현재는 PoW 곧 PoS(Casper)로 전환할 예정이다.
경제적 보안성(economic security) 현재는 PoW(이대시) 곧 PoS로 전환할 예정
클라이언트(client) 클라이언트 소프트웨어를 상호운용할 수 있는 몇 가지 구현체를 가지고있다.
(Ex Geth, Parity)

각각의 자세한 내용은 뒷시간에 다루겠습니다.

 

이더리움과 튜링 완전

튜링은 모든 문제를 해결할 수 있는지를 나타내는 보편적 계산 가능성에 대한 질문을 답하기 위해 수학적 기초를 제공했다. 그는 정지 문제가 해결되지 않는다는 것을 증명했다. 앨런 튜링은 튜링 머신을 시뮬레이션하는 데 사용할 수 있다면 튜링 완전하다고 정의했다. (튜링완전 (Turing-Complete)는 어떤 프로그래밍 언어나 추상 머신이튜링머신과 동일한 계산 능력으로 문제를 풀 수 있다는 의미이다. 이것은 튜링 머신으로 풀 수 있는 문제, 즉 계산적인 문제를 그 프로그래밍 언어나 추상 머신으로 풀 수 있다는 것이다.) 이러한 시스템을 UTM이라고 한다.

 

이더리움 가상 머신이라는 상태 머신 상에서 메모리에 데이터를 읽고 쓰면서 저장된 프로그램을 실행할 수 있는 이더리움 기능은 튜링 완전 시스템을 가능하게 하므로 UTM이라고 볼 수 있다. 하지만 이러한 튜링 완전은 개방향 엑세스 시스템에서 매우 위험하다. 왜냐 하면 앞서 언급한 정지 문제 때문인데, 정지 문제는 임의로 주어진 튜링 머신이 주어진 입력 테이프에 대해 정지하는가 정지하지 않는가를 판정하는 알고리즘의 존재 여부를 묻는 문제다.  다시 돌아와서 튜링 완전은 유연성을 제공하는데, 이 유연성은 보안과 자원 관리에 대한 몇가지 문제를 야기한다.

 

튜링은 컴퓨터에서 프로그램을 시뮬레이션하여 프로그램 종류 여부를 예측할 수 없음을 증명했다. 프로그램을 실행하지 않고서는 프로그램의 경로를 예측할 수 없다. 튜링 완전 시스템은 종료되지 안흔 프로그램을 설명하기 위해서 사용되는 용어인 '무한 루프'에서 실행될 수 있다. 이더리움도 마찬가지로 시작 조건과 코드 간의 복잡한 상호작용으로 인해 의도하지 않은 무한 반복 루프가 경고없이 발생할 수 있다. 이것이 도전과제였다. 즉 이더리움은 스마트 컨트랙트가 종료될 지 혹은 실제로 스마트 컨트랙트를 실행하지 않고 얼마나 오랫동안 실행될지를 예측할 수 없다. 사전에 자원 사용을 예측할 수 없다면 어떻게 해야할까?

 

이러한 문제를 해결하기 위해 이더리움은 가스(Gas)라는 과금 메커니즘을 도입합니다. 스마트 컨트랙트를 실행하게 되면, 가스는 각 명령어의 비용을 일일히 계산합니다. 그 후 트랜잭션은 스마트 컨트랙트를 실행하는 데 사용할 수 있는 가스의 최대 사용량을 가지고 있어야 한다. 가스 가용량을 초과하면 EVM은 실행을 중단한다. 즉 리소스를 제한해서 이더리움 튜링 완전 계산을 허용하게 하는 메커니즘이다. 이 때 가스는 부분 구성요소로서만 구매할 수 있으며, 이더로만 살 수 있다.

 

범용적인 블록체인에서 탈중앙화 애플리케이션(DApp)으로

이더리움의 목표는 비트코인과 달리 다양한 용도로 프로그래밍을 할 수 있는 범용적인 블록체인 만들기였습니다. 이를 위해서 스마트 컨트랙트와 웹 프론트엔드 사용자 인터페이스를 합친 DApp을 제시했습니다(최소 구성). 댑의 개념은 웹 어플리케이션의 모든 측면에서 P2P 탈중앙화를 도입한다. 이때 웹3는 웹 어플리케이션에 초점을 두는 새로운 버전을 말한다.

 

web3.js

-  JS application과 이더리움 블록체인을 연결

-  web3.js 라이브러리는 Swarm(P2P stroage Network)와 Whisper(P2P Messing Service)를 포함한다.

이 3가지 요소(web3.js, Swarm, Whisper)를 통해서 개발자들은 웹3 DApp를 구축할 수 있는 완전한 애플리케이션 개발 세션을 갖는다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함