이더리움 개념 - NomadJin/Blockchain-Study GitHub Wiki

차세대 스마트 컨트랙트와 탈중앙화된 어플리케이션을 제공하는 플랫폼이다.

탄생 배경 : 사용자가 원하는 기능을 자유롭게 설계하고 제공 할 수 있는 블록체인 플랫폼

  • 비트코인은 제한된 스크립트만 사용 가능
  • 반복문을 사용할 수 없음
  • 계정에 잔고 이외에 상태정보를 관리할 수 없음
  • 인출 금액을 조건에 따라 제어할 수 없음

차세대 스마트 컨트랙트

비트코인 스크립트 언어의 한계를 극복 튜링 완전한 프로그래밍 언어(Solidity)를 기반으로 사마트 컨트랙트를 개발


탈중앙화된 어플리케이션 플랫폼

블록체인 기반으로 제 3자의 개입이 없어도 신뢰를 부여? 프로그래밍 언어의 제약이 적기 때문에 다양한 어플리케이션의 개발이 가능


Ethereum Virtual Machine(EVM) // Blockchain

  • 화폐거래 외에도 스마트 컨트랙트를 배포하고 사용하는 컨트랙트 거래가 블록체인에 기록
  • 컨트랙트 거래 요청이 오면 바이트코드 형태의 컨트랙트 코드를 노드의 EVM 위에서 실행

이더리움 계정

  • 계정 : 외부소유계정(개인키로 통제되는 일반 계정) // 컨트랙트계정(코드로 통제되는 스마트 컨트랙트 계졍)
  • 잔고 : 해당 계정이 소유한 이더
  • 코드 : 바이트코드 형태의 소스코드
  • 코드해시 : 바이트코드의 해시값
  • 논스 : 해당 계정에서 생성한 트랜잭션 수
  • Root : 저장공간의 Merkle Patricia Tree의 루트해시
  • 저장공간 : 키/값 쌍으로 매핑된 저장 공간

모든 트랜잭션은 개인키를 가진 외부소유계정에서 시작 컨트랙트 내부에서 발생하는 내부 트랜잭션을 통해 다른 컨트랙트 계정이나 외부소유계정과 연계할 수 있다.


스마트 컨트랙트(Smart Contract)

  • 이더리움 네트워크 위에서 동작하는 프로그램
  • ‘코드’ 자체가 신뢰를 보장하는 프로그램화 된 계약
  • 다운타임, 검열, 제 3자의 개입 없이 실행되는 프로그램

스마트 컨트랙트 생성, 배포 , 호출

  1. 스마트 컨트랙트 코드를 작성(Truffle, Remix IDE)
  2. 코드를 바이트코드로(Bytecode)로 컴파일
  3. 바이트코드를 포함한 Transaction을 블록체인에 전송
  4. Transaction이 네트워크에서 컨펌되면 해당 컨트랙트에 대한 주소가 생성됨
  5. 이 주소에 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 간의 실시간 데이터 전송 및 결제
  • 채널을 통한 거랜느 블록체인에 기록되지 않기 때문에 실시간으로 처리 가능
  • 이를 블록체인 네트워크를 통해 확인 받고 보증금을 통해 보상받음


샤딩

  • 이더리움의 가장 큰 문제점 중의 하나가 바로 성능(특히 트랜잭션 처리 성능)

  • 트랜잭션 처리를 이해 각 노드는 전체 블록체인 데이터를 모두 다운로드하고 저장한 후에 해당 데이터를 탐색해야 한다. -> 데이터 크기가 증가할수록 접근 시 성능은 더 떨어질 수 밖에 없다.

  • 샤딩은 하나의 데이터베이스를 물리적으로 다른 데이터베이스에 수평으로 분할 저장하고 조회하는 방법이다.

  • 샤딩의 장점

  1. 데이터베이스의 용량을 확장
  2. 데이터 접근 시에 특정 샤딩키를 통해 찾고자 하는 데이터가 어떤 위치에 있는지 확인한 후 접근 > 접근 속도 개선
  • 샤딩을 블록체인에 적용하면 하나의 블록 내에 많은 트랜잭션 처리 정보를 분할하여 저장 및 병렬 처리로 속도를 개선

샤딩을 블록체인에 어떻게 적용?

  • 이더리움 블록 구조 : 헤더, 트랜잭션, 리시트, 상태 정보로 구성

  • 블록의 헤더와 머클 트리에만 접근하면 필요한 정보를 최단 시간에 추출할 수 있도록 단일 계층을 설계

  • 기존 단일 계층으로 설계된 블록을 수평적으로 나누는 것이 이더리움 샤딩

  • 이더리움 샤딩은 하나의 체인으로 연결된 블록을 두 개의 수평 계층으로 나눈다.

  1. 트랜잭션들의 샤드 계층
  2. 이들을 연결한 체인 계층

  • 샤딩 적용을 위해서는 사전에 미리 PoS로 전환해야 안전하다.
  • 기존 PoW 방식을 사용할 경우에는 적은 해시 계산 파워로도 샤드들에 대한 점유도를 높일 수 있기 때문에 보안상 문제 발생

플라즈마

  • 이더리움 블록체인 위에 Child 블록체인을 확장


수수료 문제

  • 이더리움은 단순 코드량에 따라 수수료가 부과됨, DApp을 결합하여 새로운 서비스를 제공하기 어려움
  • 블록생성 시 채굴자는 수수료 수익 극대화를 위해 수수료가 높은 Transaction을 우선 처리

캐스퍼

  • 작업증명고 지분증명 방식을 결합한 하이브리드 합의 알고리즘
  • 블록 생성은 작업증명 방식으로 한다
  • 검증자로 Casper 스마트 컨트랙트에 예치금을 보냄
  • 매 100번째 블륵(체크포인트) 마다 지분증명 기반의 체인 확정 투표를 진행
  • 검증자의 3분의 2가 동의 하면 체크포인트가 확정되고 체인 확정에 따른 보상이 지급
  • 2개의 다른 체크포인트가 동시에 확정되면 예치금은 소각한다


스마트 컨트랙트 보안

  • DAO 해킹, 코드 결함으로 인해 243만 이더가 해킹됨
  • 이더리움 지갑 코드 취약점 해킹으로 50만 이더가 동결
  • 자유도가 높은 만큼 코드의 취약점이 발생할 가능성이 높음
  • 버그 수정을 위해 네트워크 합의가 필요하기 때문에 빠른 수정이 어려움
  • 공통 라이브러리 확대(ERC20, 난수함수 등)
  • 스마트 컨트랙트의 기능을 제한한 바이퍼(Viper), 배비지(Babbage)같은 새로운 스마트 컨트랙트 언어 개발

튜링완전(Turing-complete)

  • 비트코인은 loop 문법을 배제하고 있음
  • 이유는 ddos 공격에서 자유롭기 위해
  • 반복문을 배제한 대가로 매우 낮은 수준의 자유도를 가짐
  • 이더리움은 튜링완전한 문법을 사용할 수 있게 만들었음
  • 더욱 복잡한 조건을 만들수 있게 되었고, 이것을 기반으로 하여 스마트 계약 가능
  • 반복문에 의한 공격과 정지 문제를 해결해야 하는데 이를 위해 가스라는 개념을 추가
  • 거래 조건을 넣는 구문에 특정 조건마다 가스를 소모
  • 정지 문제의 경우에도 투입 가능한 가스량을 제한, 사용할 가스만큼 다 사용한 경우 더 이상 거래가 진행되지 않음

궁금한 점

  1. 샤딩 : 블록의 거래 기록은 분산해서 저장한다는 개념인데, 풀 노드 라이트 노드와 차이점? 블록의 전체 기록은 구체적으로 어떤 기술로 관리 가능한지, 오라클의 파티셔닝 개념과 우사한가?

  2. 블록 유효성 검증에서 Difficulty가 제일 높은 블록 : 여기서 검증 난이도는 어떻게 확인?

  3. 리젝된 엉클 블록은 계속 누적되는지. 엉클블록 문제를 GHOST 알고리즘을 사용하여 해결한다.

  4. Ethash 비트코인의 마이닝 알고리즘과 무엇이 다르고 왜 만들었나? ASIC로 인한 Hashrate 독점, 중아화 문제 해결 초점 단순히 SHA256 연산만 필요했던 비트코인 마이닝 알고리즘과 달리 ethash 에서는 DAG를 통해 미리 알 수, 할 수 없는 순차적 메모리 연산을 요구하여 ASIC 제작을 어렵게 함