이더리움 개념 - NomadJin/Blockchain-Study GitHub Wiki
차세대 스마트 컨트랙트와 탈중앙화된 어플리케이션을 제공하는 플랫폼이다.
탄생 배경 : 사용자가 원하는 기능을 자유롭게 설계하고 제공 할 수 있는 블록체인 플랫폼
- 비트코인은 제한된 스크립트만 사용 가능
- 반복문을 사용할 수 없음
- 계정에 잔고 이외에 상태정보를 관리할 수 없음
- 인출 금액을 조건에 따라 제어할 수 없음
차세대 스마트 컨트랙트
비트코인 스크립트 언어의 한계를 극복 튜링 완전한 프로그래밍 언어(Solidity)를 기반으로 사마트 컨트랙트를 개발
탈중앙화된 어플리케이션 플랫폼
블록체인 기반으로 제 3자의 개입이 없어도 신뢰를 부여? 프로그래밍 언어의 제약이 적기 때문에 다양한 어플리케이션의 개발이 가능
Ethereum Virtual Machine(EVM) // Blockchain
- 화폐거래 외에도 스마트 컨트랙트를 배포하고 사용하는 컨트랙트 거래가 블록체인에 기록
- 컨트랙트 거래 요청이 오면 바이트코드 형태의 컨트랙트 코드를 노드의 EVM 위에서 실행
이더리움 계정
- 계정 : 외부소유계정(개인키로 통제되는 일반 계정) // 컨트랙트계정(코드로 통제되는 스마트 컨트랙트 계졍)
- 잔고 : 해당 계정이 소유한 이더
- 코드 : 바이트코드 형태의 소스코드
- 코드해시 : 바이트코드의 해시값
- 논스 : 해당 계정에서 생성한 트랜잭션 수
- Root : 저장공간의 Merkle Patricia Tree의 루트해시
- 저장공간 : 키/값 쌍으로 매핑된 저장 공간
모든 트랜잭션은 개인키를 가진 외부소유계정에서 시작 컨트랙트 내부에서 발생하는 내부 트랜잭션을 통해 다른 컨트랙트 계정이나 외부소유계정과 연계할 수 있다.
스마트 컨트랙트(Smart Contract)
- 이더리움 네트워크 위에서 동작하는 프로그램
- ‘코드’ 자체가 신뢰를 보장하는 프로그램화 된 계약
- 다운타임, 검열, 제 3자의 개입 없이 실행되는 프로그램
스마트 컨트랙트 생성, 배포 , 호출
- 스마트 컨트랙트 코드를 작성(Truffle, Remix IDE)
- 코드를 바이트코드로(Bytecode)로 컴파일
- 바이트코드를 포함한 Transaction을 블록체인에 전송
- Transaction이 네트워크에서 컨펌되면 해당 컨트랙트에 대한 주소가 생성됨
- 이 주소에 Transaction을 보내서 해당 프로그램을 사용할 수 있음
탈중앙화 어플리케이션(Decentralized Application)
- 사용자와 공급자 간에 직접적인 상호자용을 할 수 있는 서비스
- 블록체인 위에서 동작하는 서비스
IPFS
- IPFS(InterPlanetary File System)는 모든 컴퓨팅 장치를 동일한 파일 시스템으로 연결하려고 하는 P2P 분산 파일 시스템
- IPFS는 웹과 비슷하지만, 한 Git 레포지트리의 오브젝트를 교환하는 단일 비트토렌트 스웜으로 볼 수 있음
- IPFS는 content addressed 하이퍼 링크를 이용하여 높은 처리량을 가진 content addressed 블록 스토리지 모델을 제공함
DAG
- DAG란 Directed Acyclic Graph를 뜻하고, 방향을 가지되 루프가 없는 그래프를 말함
이더리움 문제점과 극복방안
확장성
- 이더리움은 평균 15초에 한번 블록이 생성되고, 보통 12~15개의 Transaction 처리가 가능함
- 지연시간을 낮추고(블록생성 주기), 초당 처리 성능(TPS)을 높여야
- 이더리움 풀노드의 데이터 사이즈가 급격히 증가하고 있고 현재는 340GB 이름
- 블록체인 사이즈가 커짐에 따라 처리 성능이 감소하게 되며, 이는 네트워크 중앙화의 원인이 됨
라이덴 네트워크
- 블록체인 외부의 채널을 통한 P2P 간의 실시간 데이터 전송 및 결제
- 채널을 통한 거랜느 블록체인에 기록되지 않기 때문에 실시간으로 처리 가능
- 이를 블록체인 네트워크를 통해 확인 받고 보증금을 통해 보상받음
샤딩
-
이더리움의 가장 큰 문제점 중의 하나가 바로 성능(특히 트랜잭션 처리 성능)
-
트랜잭션 처리를 이해 각 노드는 전체 블록체인 데이터를 모두 다운로드하고 저장한 후에 해당 데이터를 탐색해야 한다. -> 데이터 크기가 증가할수록 접근 시 성능은 더 떨어질 수 밖에 없다.
-
샤딩은 하나의 데이터베이스를 물리적으로 다른 데이터베이스에 수평으로 분할 저장하고 조회하는 방법이다.
-
샤딩의 장점
- 데이터베이스의 용량을 확장
- 데이터 접근 시에 특정 샤딩키를 통해 찾고자 하는 데이터가 어떤 위치에 있는지 확인한 후 접근 > 접근 속도 개선
- 샤딩을 블록체인에 적용하면 하나의 블록 내에 많은 트랜잭션 처리 정보를 분할하여 저장 및 병렬 처리로 속도를 개선
샤딩을 블록체인에 어떻게 적용?
-
이더리움 블록 구조 : 헤더, 트랜잭션, 리시트, 상태 정보로 구성
-
블록의 헤더와 머클 트리에만 접근하면 필요한 정보를 최단 시간에 추출할 수 있도록 단일 계층을 설계
-
기존 단일 계층으로 설계된 블록을 수평적으로 나누는 것이 이더리움 샤딩
-
이더리움 샤딩은 하나의 체인으로 연결된 블록을 두 개의 수평 계층으로 나눈다.
- 트랜잭션들의 샤드 계층
- 이들을 연결한 체인 계층
- 샤딩 적용을 위해서는 사전에 미리 PoS로 전환해야 안전하다.
- 기존 PoW 방식을 사용할 경우에는 적은 해시 계산 파워로도 샤드들에 대한 점유도를 높일 수 있기 때문에 보안상 문제 발생
플라즈마
- 이더리움 블록체인 위에 Child 블록체인을 확장
수수료 문제
- 이더리움은 단순 코드량에 따라 수수료가 부과됨, DApp을 결합하여 새로운 서비스를 제공하기 어려움
- 블록생성 시 채굴자는 수수료 수익 극대화를 위해 수수료가 높은 Transaction을 우선 처리
캐스퍼
- 작업증명고 지분증명 방식을 결합한 하이브리드 합의 알고리즘
- 블록 생성은 작업증명 방식으로 한다
- 검증자로 Casper 스마트 컨트랙트에 예치금을 보냄
- 매 100번째 블륵(체크포인트) 마다 지분증명 기반의 체인 확정 투표를 진행
- 검증자의 3분의 2가 동의 하면 체크포인트가 확정되고 체인 확정에 따른 보상이 지급
- 2개의 다른 체크포인트가 동시에 확정되면 예치금은 소각한다
스마트 컨트랙트 보안
- DAO 해킹, 코드 결함으로 인해 243만 이더가 해킹됨
- 이더리움 지갑 코드 취약점 해킹으로 50만 이더가 동결
- 자유도가 높은 만큼 코드의 취약점이 발생할 가능성이 높음
- 버그 수정을 위해 네트워크 합의가 필요하기 때문에 빠른 수정이 어려움
- 공통 라이브러리 확대(ERC20, 난수함수 등)
- 스마트 컨트랙트의 기능을 제한한 바이퍼(Viper), 배비지(Babbage)같은 새로운 스마트 컨트랙트 언어 개발
튜링완전(Turing-complete)
- 비트코인은 loop 문법을 배제하고 있음
- 이유는 ddos 공격에서 자유롭기 위해
- 반복문을 배제한 대가로 매우 낮은 수준의 자유도를 가짐
- 이더리움은 튜링완전한 문법을 사용할 수 있게 만들었음
- 더욱 복잡한 조건을 만들수 있게 되었고, 이것을 기반으로 하여 스마트 계약 가능
- 반복문에 의한 공격과 정지 문제를 해결해야 하는데 이를 위해 가스라는 개념을 추가
- 거래 조건을 넣는 구문에 특정 조건마다 가스를 소모
- 정지 문제의 경우에도 투입 가능한 가스량을 제한, 사용할 가스만큼 다 사용한 경우 더 이상 거래가 진행되지 않음
궁금한 점
-
샤딩 : 블록의 거래 기록은 분산해서 저장한다는 개념인데, 풀 노드 라이트 노드와 차이점? 블록의 전체 기록은 구체적으로 어떤 기술로 관리 가능한지, 오라클의 파티셔닝 개념과 우사한가?
-
블록 유효성 검증에서 Difficulty가 제일 높은 블록 : 여기서 검증 난이도는 어떻게 확인?
-
리젝된 엉클 블록은 계속 누적되는지. 엉클블록 문제를 GHOST 알고리즘을 사용하여 해결한다.
-
Ethash 비트코인의 마이닝 알고리즘과 무엇이 다르고 왜 만들었나? ASIC로 인한 Hashrate 독점, 중아화 문제 해결 초점 단순히 SHA256 연산만 필요했던 비트코인 마이닝 알고리즘과 달리 ethash 에서는 DAG를 통해 미리 알 수, 할 수 없는 순차적 메모리 연산을 요구하여 ASIC 제작을 어렵게 함