이타인클럽

이더리움 핵심 개요 정리 1

토픽 이타인클럽 > Blockchain > Blockchain 개발

이더리움 스마트 컨트랙트의 본격적 개발에 앞서 이더리움 개념을 좀 살펴보겠습니다. 주로 아래 책의 내용을 요약하였으니 보다 자세한 내용은 아래 책을 참고하시면 되겠습니다.

이더리움을 활용한 블록체인 프로젝트 구축

이더리움을 한마디로 요약하면 다음과 같습니다.

"이더리움은 탈중앙화 앱(DApp)을 실행할 수 있는 플랫폼이다"

이더리움은 이더(Ether, ETH)라고 불리는 내부 화폐를 가지고 있습니다. 스마트 컨트랙트를 배포하거나 스마트 컨트랙트의 기능을 수행하기 위해서는 이더가 필요합니다.

이더리움 네트워크는 2개의 노드 타입이 있습니다. 일반 노드는 블락체인 사본을 가지고 있는 노드이고, 다른 노드는 채굴노드로서 블락을 생성하는 노드입니다. 또 이더리움은 두 가지 타입의 계정이 있습니다. 일반적인 사용자가 소유한 계정인 Externally Owned Account (EOA)와 스마트 컨트랙트 계정입니다. 사용자 계정은 다른 블락체인과 유사하여 별다른 어려움이 없으나, 스마트 컨트랙트 계정은 이해가 좀 필요합니다.

스마트 컨트랙트 계정은 배포된 스마트 컨트랙트의 주소입니다. 이 때, 하나의 스마트 컨트랙트에 대해서 여러 인스턴스가 존재할 수 있습니다. 마치 C++에서 스마트 컨트랙트가 하나의 클래스이고, 이것의 객체 즉 인스턴스가 여러 개 존재할 수 있는 것과 같습니다. 스마트 컨트랙트의 각 인스턴스도 고유의 주소를 갖게 됩니다.

이더리움 계정

  • 이더리움 계정 생성을 위해 타원곡선암호 (ECC, Elliptic Curve Cryptography) 알고리듬 사용
  • ECC 매개변수 중, 이더리움은 secp256k1 매개변수 사용
  • 이더리움 개인키, 공개키는 256 비트. 256/8=32 바이트 (16진수로 64자리로 표현)
  • 주소 생성 방법
    • 공개키에 대해서 keccak-256 해쉬 생성. 결과로 256비트 숫자 생성.
    • 앞 96비트(12바이트)는 버림. 160비트(20바이트)가 남음.
    • 160비트를 16진수로 변환. 20바이트이므로, 16진수로는 40개 문자열이 생성됨. 이것이 계정 주소가 됨.

트랜잭션

  • 트랜잭션 실행을 위해 트랜잭션 발신자는 다음 두가지를 설정해야 함
    • 최대 개스(gas)량: 트랜잭션 실행에 사용될 최대 개스량. 실제 사용된 개스보다 작게 설정하면 트랜잭션 실행 안됨.
    • 개스 비용: 개스 1개당 비용. 개스 비용을 크게 할수록 트랜잭션 수수료가 높아 채굴자가 트랜잭션 처리를 우선시함.
  • 트랜잭션 수수료는 (실제 사용된 개스량) x (발신자가 설정한 개스 비용) 으로 결졍됨.
  • 발신자는 트랜잭션 발송할 때, 개인키로 서명하여 암호화. 수신자는 발신자의 공개키로 트랜잭션 내용을 복호화 함.
  • 하나의 블락은 컨텐츠와 블락 해더로 구성된다. 컨텐츠는 트랜잭션들의 내용이 있고, 블락 헤더는 다음과 같은 요소들로 구성된다.
    • 이전 블락 해쉬
    • 블락 번호
    • nonce
    • 목표값(target)
    • 타임스탬프
    • 난이도
    • 채굴자 주소
  • 비트코인과 이더리움 블락 구성 차이점은 아래 링크를 참고하세요.
    https://steemit.com/kr/@loum/5b5cyr

채굴, 합의 알고리듬

  • 이더 발행량 제한 없음
  • 채굴자 마다 서로 다른 블락들을 모아서 블락을 생성. 즉 채굴자마다 서로 다른 퍼즐을 푸는 것임. 따라서 퍼즐 난이도도 다름.
  • 채굴에서 퍼즐을 푸는 것은 경쟁한다기 보다, 복권 당첨과 비슷함. 즉 연산능력이 큰 채굴자는 당첨 확률이 높은 것일 뿐이지, 항상 당첨되지는 않음.
  • 네트워크의 보안 수준은 채굴자의 수에 따라 결정되는 것이 아니라, 네트워크 전체 연산량에 따라 측정됨. 즉 전체 해쉬 파워가 합의 알고리즘의 보안 수준을 나타냄.
  • 채굴자가 푸는 퍼즐은 블락을 해쉬했을 때, 해쉬 값이 목표 값보다 같거나 작아지는 nonce를 찾는 것임.
  • 이더리움 합의 알고리듬에서는 서로 다른 블락이 생성되었을 때, 즉 블락체인이 분기되어 두 개 이상이 존재하게 될 때, 모든 블락의 난이도 합이 더 높은 블락체인을 유효한 것으로 인정함.
    • 누군가 임의로 과거 트랜잭션 내용을 변경했다면, 그 블락 이후의 후속 블락의 nonce를 다시 계산해야 하는데, 그것을 하는 시간 동안, 정상적인 블락들이 더 많이 채굴되어 난이도 합에서 차이가 발생하여, 조작한 블락체인은 거부됨.

Nonce

  • 64비트의 부호 없는 정수(unsigned integer)
  • White Paper에는 "각 트랜잭션이 오직 한번만 처리되게 하는 일종의 카운터"로 설명됨.
  • 보통 채굴자는 nonce를 하나씩 증가시키면 블락 해쉬값이 목표값보다 작은지 검토 (만약 nonce를 빠르게 찾는 방법이 발견된다면? 또는 특정 채굴자만 엄청나게 빠르게 계산해 낸다면? 양자컴퓨터로??)
  • 블락의 해쉬는 타임스탬프, 채굴자 주소 등에 의존적이기 때문에, 채굴자마다 서로 다른 nonce값을 찾아야 한다. 그래서 이것을 하나의 퍼즐을 푸는 경쟁이 아니라, 복권 당첨과 같다고 하는 것이다.

다음에 이어서 엉클 블락, 개스 등에서 요약해 보겠습니다.

Steemit https://steemit.com/coinkorea/@etainclub/smart-contract-7-1

댓글

댓글 본문