ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이더리움 입문
    블록체인/스터디 2018. 10. 18. 16:59

    출처: 프로그래머스

    가격: 무료



    1.1 무척 간단한 강의 소개

    이더리움 공통 기초를 다루는 강의입니다

    이더리움 블록체인에서 탈중앙화 애플리케이션(Decentralized App, dApp)을 개발하는 것에 관심있는 모두를 위한 기초 내용을 담았습니다. 하나의 문서 형태에 가까운 강의이며, 동영상이나 소스코드를 제공하는 내용은 아닙니다. 단, 이더리움에 대해 배울 때 기초적으로 누구나 알고 있어야 할 핵심 내용을 담았습니다.



    1.2 지불(Payment), 그 이상을 향해

    지불, 그 이상을 향해

    비트코인 블록체인은 주로 은행과 같은 중앙 기관의 중재 없이 블록체인의 다양한 당사자 간에 돈을 송금하는 데 사용됩니다. 비탈릭 부테린(Vitalik Buterin)이라는 이름의 19세 청년 개발자는 이러한 탈중앙화의 개념을 송금 외에 다른 분야에 적용하고자 했습니다. 그는 중앙화된 통제 권한 없이 전 세계적으로 운영될 수 있는 응용 프로그램을 만들고 싶었습니다. 예를 들어, 페이스북의 경우 페이스북 주식회사가 사용자의 데이터를 소유하고 있으며 원하면 사용자의 계정을 제거할 수 있는 권리를 가집니다. 10년 뒤 페이스북이 폐쇄된다고 가정하면 모든 데이터가 손실될 수도 있습니다.

    비탈릭은 응용 프로그램을 빌드할 수 있도록 비트코인에 스크립팅 언어를 추가할 것을 제안하지만 비트코인 개발팀과의 합의에 도달하지 못합니다. 결국 그는 2014년 1월에 일반적인 스크립팅 언어를 사용할 수 있는 새로운 플랫폼에 대한 백서를 출간합니다. 곧이어 개발팀이 꾸려지고, 개빈 우드(Gavin Wood) 박사의 팀이 이더리움 황서에서 네트워크의 모든 스마트 계약을 실행하는 런타임 환경인 EVM(EVerenum Virtual Machine)에 대해 설명했습니다(EVM 및 스마트 계약에 대한 자세한 내용은 다음 절에서 설명합니다). 이 플랫폼의 개발을 위한 자금의 크라우드펀딩은 2014년 7월부터 8월에 거쳐 이루어졌으며, 펀딩 참가자는 비트코인으로 이더리움 밸류 토큰(이더)을 구입했습니다.


    1.3 세계의 컴퓨터

    세계의 컴퓨터

    이더리움은 퍼블릭 블록체인 기반의 분산 컴퓨팅 플랫폼입니다. 전세계의 수많은 작은 컴퓨터로 구성된 하나의 큰 컴퓨터로 생각할 수도 있습니다. 응용 프로그램을 작성하고이 글로벌 컴퓨터에서 실행할 수 있으며, 이 플랫폼은 중단 시간, 검열, 사기 또는 제 3 자의 간섭없이 항상 실행되도록 보장합니다. 응용 프로그램을 실행하는 것 외에도, 이더리움 블록체인을 통해 중앙 권한없이 두 당사자간에 돈을 이체할 수 있습니다.

    이러한 모든 컴퓨터(노드라고도 함)는 서로 연결되어 있으며 코드와 데이터의 전체 복사본을 가지고 있습니다. 이더리움 블록체인에 코드를 배포하면 코드가 네트워크의 모든 노드로 복제됩니다. 응용 프로그램에 데이터가 저장되면 모든 노드에서 해당 데이터가 복제됩니다. 네트워크에는 수천 개의 노드가 있으며 모든 노드를 중지시키는 것은 거의 불가능합니다. 따라서 응용 프로그램에 항상 액세스할 수 있습니다.


    image


    1.4 웹앱 아키텍쳐

    웹앱 아키텍쳐

    이더리움을 이해하는 가장 좋은 방법 중 하나는 기존의 클라이언트/서버 아키텍처와 비교하는 것입니다. 웹 개발자라면 오른쪽 다이어그램을 쉽게 이해할 수 있을 것입니다(웹 아키텍처를 몰라도 괜찮습니다). 이것은 간단한 웹 애플리케이션의 클라이언트/서버 아키텍처입니다.

    일반적인 웹 응용 프로그램은 일반적으로 Java C# Ruby Python 과 같은 프로그래밍 언어로 작성된 서버 단 코드로 구성됩니다. 프론트엔드 코드는 HTML/CSS/자바스크립트를 사용하여 구현됩니다. 전체 애플리케이션은 AWS, Microsoft Azure, Google Cloud Platform, Heroku 또는 VPS와 같은 호스팅 제공 업체에서 호스팅됩니다.

    사용자는 웹 브라우저, curl/wget(커맨드 라인) 또는 API를 통해 클라이언트를 사용하여 웹 응용 프로그램과 상호 작용합니다. 중앙화된 하나의 웹 응용 프로그램이 있으며 모든 클라이언트가 이 응용 프로그램과 상호 작용합니다. 클라이언트가 서버에 요청하면 서버는 요청을 처리하고 데이터베이스 또는 캐시와 상호 작용하며 데이터베이스를 읽고, 쓰고, 업데이트하고 클라이언트에 응답을 반환합니다.

    image



    cURL(/kɝl/ 또는 /kə:l/[3])은 다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리와 명령 줄 도구를 제공하는 컴퓨터 소프트웨어 프로젝트이다. 이 cURL 프로젝트는 libcurl와 cURL이라는 2개의 제품을 만든다. 1997년에 처음 출시되었다. 이 이름은 "client URL"을 대표한다.[4]

    출처: 위키



    GNU Wget(간단히 Wget, 이전 이름: Geturl)는 웹 서버로부터 콘텐츠를 가져오는 컴퓨터 프로그램으로, GNU 프로젝트의 일부이다. 이 프로그램의 이름은 월드 와이드 웹과 get에서 가져온 것이다. HTTPHTTPSFTP 프로토콜을 통해 내려받기를 지원한다.

    출처: 위키




    API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

    출처: 위키



    캐시(cache, 문화어: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다.

    출처: 위키




    1.5 이더리움 아키텍쳐

    이더리움 아키텍쳐

    image
    그림에서 알 수 있듯이, 모든 클라이언트(브라우저)는 응용 프로그램의 자체 인스턴스와 통신합니다. 모든 클라이언트가 연결할 중앙 서버가 없습니다. 즉, 이상적인 탈중앙화 세계에서, Dapp(탈중앙화 애플리케이션)과 상호 작용하려는 모든 사람은 컴퓨터/스마트콘 등의 기기에 실행중인 블록체인의 전체 복사본이 필요합니다. 즉, 애플리케이션을 사용하려면 먼저 전체 블록체인을 다운로드한 다음 애플리케이션 사용을 시작해야 합니다.

    우리가 사는 세계는 이상적인 세계가 아니기에, 모든 사람들이 이러한 앱을 사용하기 위해 블록체인 서버를 운영할 것으로 기대하는 것은 무리입니다. 하지만 탈중앙화의 배경은 단일/중앙화된 서버에 의존하지 않는 것입니다. 그래서 제안된 몇 가지 솔루션(블록체인 서버 호스팅 서비스, Metamask 등)를 사용하면 하드 디스크와 RAM을 많이 사용하지 않아도 블록체인의 전체 복사본을 다운로드하고 실행하면서도 탈중앙화를 훼손하지 않을 수 있습니다. 앞으로의 이어지는 레슨에서 이러한 방식을 경험할 것입니다.

    자, 그럼 이더리움 블록체인이 정확히 무엇일까요? 블록체인에는 2가지 구성 요소가 있습니다:

    1. 데이터베이스: 네트워크의 모든 트랜잭션은 블록체인에 저장됩니다. 응용 프로그램을 배포하는 행위도 트랜잭션으로 간주됩니다. 후보자 투표를 위한 투표 응용 프로그램을 예로 들면 하나하나의 투표가 트랜잭션로 간주됩니다. 이러한 모든 트랜잭션은 공개되며 누구나 볼 수 있고 확인할 수 있습니다. 이 데이터는 절대로 조작할 수 없습니다. 네트워크의 모든 노드에 동일한 데이터 복사본이 있는지 확인하고, 유효하지 않은 데이터가 이 데이터베이스에 기록되지 않도록 하기 위해 이더리움은 작업증명(Proof of Work)이라는 알고리즘을 사용하여 네트워크를 보호합니다. (http://ethereum.stackexchange.com/questions/14/what-proof-of-work-function-does-ethereum-use)

    2. 코드: 블록체인의 데이터베이스 요소는 트랜잭션을 저장합니다. 그렇다면 투표 응용 프로그램에서 투표에 대한 모든 논리는 어디에 담길까요? 이더리움 세계에서는 솔리디티(Solidity)라는 언어로 논리/응용 프로그램 코드(스마트 계약)를 작성합니다. 그런 다음 솔리디티 컴파일러를 사용하여 이더리움 바이트코드(Ethereum Byte Code)로 컴파일한 다음 해당 바이트 코드를 블록체인에 배포합니다 (스마트 계약 작성에 사용할 수 있는 다른 언어가 조금 있긴 하지만, 가장 인기 있고 상대적으로 쉬운 것이 솔리디티). 따라서, 이더리움 블록체인은 트랜잭션을 저장할 뿐 아니라 스마트 계약 코드를 저장하고 실행합니다.

    즉, 기본적으로 블록체인은 데이터를 저장하고 코드를 저장하며 코드를 EVM (Ethereum Virtual Machine)에서 실행합니다. 이후 이어지는 절에서 바이트코드 및 EVM에 대해 자세히 배울 예정입니다.

    이더리움에는 웹 기반 Dapp을 만들기 위해 web3.js라는 편리한 자바스크립트 라이브러리가 있습니다. 이 라이브러리는 블록체인 노드에 연결됩니다. 따라서 reactjs, angularjs 등의 유명한 js 프레임워크에 이 라이브러리를 포함시킬 수도 있습니다.


    분산 응용 프로그램 ( Dapp , dApp 또는 DApp은 )는 인 응용 프로그램 A의 많은 사용자에 의해 실행되는 분산 네트워크 신용이없는 프로토콜을. 단일 장애 지점을 피하기 위해 설계되었습니다. 그들은 일반적으로 컴퓨팅 능력을 제공하기 위해 사용자에게 보상 할 토큰이 있습니다. 

    출처:위키



    2.1 스마트 컨트랙트(Smart Contracts)

    스마트 컨트랙트(Smart Contracts, 스마트 계약)

    앞 절에서는 솔리디티 프로그래밍 언어로 응용 프로그램을 작성하고 이를 이더리움 블록체인에 배포하는 방법에 대해 설명했습니다. 이더리움에서는 이러한 응용 프로그램을 '스마트 계약' 또는 '스마트 컨트랙트' 라고 합니다.

    왜 이러한 응용 프로그램을 스마트 계약이라고 부르는지 궁금하겠죠? 일반적으로 계약은 법으로 집행되는 두 당사자, 또는 여러 당사자 간의 서면 합의입니다. 계약서를 작성하여 코드로 변환하고 블록체인에 배포하면 디지털 계약이 체결됩니다. 블록체인에 있는 이 코드의 장점은 당사자 간의 합의를 강화할 수 있다는 점입니다. 이것이 바로 스마트 계약이라고 불리는 이유입니다.

    이 코드가 어떻게 계약을 시행할 수 있을까요? 일단 계약이 블록체인에 배포되면 이를 중지하거나 수정할 수 없습니다. 이것이 계약이 시행되는 방식입니다. 이해를 위해 간단한 예를 살펴 보겠습니다.


    예시

    Crowdsale 응용 프로그램을 작성하려고 한다고 가정해 봅시다. 제품을 만들기 위해 10,000달러를 모으고자 하는 제작자가 있으며, 이 제품에 관심이 있고 선불로 기꺼이 지불할 잠재 고객이 있습니다. 계약상 각 고객이 보내는 액수가 $10 - $10,000 사이에 해당하면 수령할 것이고, 목표가 달성된다면 그 돈은 제작자에게 송금됩니다. 그렇지 않은 경우, 기부자에게 돈이 돌려 보내집니다. 이는 스마트 계약을 사용하여 제작자와 지지자 간의 계약을 시행하는 이상적인 사용 사례입니다. 중앙화된 응용 프로그램에서도 이 논리를 구현하는 것은 간단합니다. 스마트 계약에서 이를 구현할 때의 장점은 아래와 같습니다.

    1. 모든 참여자가 보낸 돈이 스마트 계약에 담겨 있습니다. 참여자도 제작자도 그 돈을 사용할 수 없습니다.
    2. 목표에 도달하자마자 돈이 제작자에게 보내지도록 코드를 구현할 수 있습니다.
    3. 특정 시간 내에 목표에 도달하지 못하면 모든 참가자에게 환불을 시행할 수 있도록 코드를 구현할 수 있습니다.
    4. 이 코드는 한번 블록체인에 배포된 후에는 조작할 수 없습니다.


    Crowdsale: (InternetAn online event where participants can purchase tokens in a cryptocurrency.



    2.2 이더, 그리고 이더의 단위(Ether & Denominations)

    이더와 이더의 각종 단위

    각 국가마다 USD, INR, RNB, GBP, EUR 등과 같은 자체 통화가 있듯이, 각 블록체인에는 자체 통화가 있습니다. 이더리움 블록체인의 경우 기본 통화를 이더(Ether)라고 합니다. 이더를 USD 또는 EUR와 같은 다른 화폐로 교환할 수 있는 거래소도 있습니다. 이더의 현재 가격은 이곳에서 확인할 수 있습니다.

    현실 세계의 통화에는 다양한 단위가 있습니다. 예를 들어 미국 1달러는 100센트이며 페니(1센트), 니켈(5센트), 십 센트(10센트), 쿼터(25센트)와 같은 다양한 단위가 있습니다. 국가 및 통화에 따라 다양한 단위가 있을 수 있습니다.

    이더에도 그림과 같이 다양한 단위가 있습니다. 그 중에서 두 가지, 이더와 웨이만 잘 기억해도 됩니다. 웨이는 가장 낮은 단위로, 스마트 계약서에서 실제로 쓰이는 단위입니다. 아래 그림을 참고하세요.

    이더리움의 각종 단위들



    2.3 주소(Addresses)

    주소(Addresses)

    페이스북과 같은 웹사이트에 로그인하려면 일반적으로 이메일, 사용자 이름과 비밀번호를 사용합니다. 당신의 사용자 이름은 페이스북에서 신분증에 준하며, 사용자 이름 / 암호를 사용하여 페이스북 로그인을 위한 인증을 거치게 됩니다.

    이더리움 블록체인에서 사용자의 신분증에 해당하는 것은 주소입니다. 이더리움 주소는 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 과 같은 형태를 가집니다. 각 주소에는 해당 개인키가 있습니다. 개인키는 사용자가 알고 있는 일종의 암호로 간주할 수 있습니다. 블록체인과 상호 작용하려면 이 주소 + 개인키 쌍이 필요합니다. 다음은 블록체인과 이더리움을 이해하기 위해 암기해야 할 몇 가지 핵심 사항입니다.

    1. 이더리움 주소는 공개되어 있으며 전 세계 누구와도 공유 할 수 있습니다.
    2. 개인키는 절대 다른 사람과 공유해서는 안됩니다.
    3. 주소 + 개인키는 그 어떤 데이터베이스에도 저장되지 않습니다. 사용자만이 이 정보를 통제 할 수 있습니다.

    앞으로 이어지는 절에서는 이러한 주소를 관리하고 사용하는 방법을 배우게 됩니다.


    이더리움 주소는 어떻게 생성되는가?

    아래의 예는 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 라는 주소가 어떻게 생성되는지에 대한 간단한 설명입니다. 공개키 암호화의 원리를 알고 있다는 가정 하에 작성된 내용이며, 자세한 내용은 다음 링크를 참조하십시오(https://en.wikipedia.org/wiki/Public-key_cryptography).

    1. 개인키 생성 
      k(private key) = f8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315

    2. 개인키로부터 공개키 생성

    K(public key) = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0

    1. keccak256 알고리즘으로 공개키의 해시값 계산
      Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9001d3f1ef827552ae1114027bd3ecf1f086ba0f9

    2. 생성된 해시갑의 뒤쪽 20바이트를 취하여 이더리움 주소 생성
      0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9




    2.4 계정(Accounts)

    계정

    이더리움 주소와 개인키의 조합을 계정(accounts)이라고 합니다. 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있습니다. 이더리움에는 2가지 유형의 계정이 있습니다.

    1. 외부 소유 계정(EOA): 위에서 언급한, 공개 주소와 개인키의 조합을 말합니다. 외부 소유 계정, 또는 외부 계정을 사용하면

      1. 다른 계정과 이더를 송수신하고
      2. 스마트 컨트랙트에 트랜잭션을 보낼 수 있습니다.
    2. 컨트랙트 계정: 컨트랙트 계정에는 상응하는 개인키가 없습니다. These accounts don't have a corresponding private key. 이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성됩니다. 컨트랙트 계정 대신 컨트랙트(contract)로만 표시되기도 합니다. 컨트랙트(계정)의 몇 가지 주요 기능은 다음과 같습니다.

      1. 다른 계정과 이더를 송수신하고(EOA와 동일)
      2. 관련된 코드를 담고(EOA와 다름)
      3. EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시킵니다.

    이어지는 내용을 통해 이러한 계정을 만들고 사용하는 방식을 더 잘 이해할 수 있을 것입니다.



    2.5 지갑(Wallets)

    지갑(Wallets)

    지갑은 이더리움 계정을 저장하고 관리하는 데 사용되는 소프트웨어 플러그인 또는 라이브러리입니다. 지갑을 통해 여러 계정을 관리하고, 트랜잭션에 서명하고, 잔고을 추적하는 등의 기능을 사용할 수 있습니다. 지갑은 크게 2 가지 유형으로 분류할 수 있습니다.

    1. 비결정적 지갑: 이것은 임의의 개인키/공개키 쌍을 사용하는 유형의 지갑입니다. 개인키/공개키 쌍을 많이 생성할 수 있지만 각 키 쌍 간에는 아무런 상관 관계가 없습니다.

    2. 결정론적 지갑: 이 유형의 지갑에서는 모든 키가 시드(seed)라는 단일 시작 지점에서 파생됩니다. 이 시드는 사용자가 다른 정보를 요구하지 않고 지갑을 쉽게 백업하고 복원할 수 있게 해주며, 경우에 따라 개인키를 모른 채 공개키를 생성할 수 있게 해 줍니다. 시드는 일반적으로 사람이 읽을 수 있는 니모닉 문구 단어로 배열됩니다. 메타마스크(metamask)와 같은 플러그인을 사용한다면 처음 설치했을 때 12개 단어로 이루어진 시드를 저장하라는 요청을 받았을 것입니다. 다음 장의 메타마스크 부분에서 이에 대한 비디오 데모를 다룰 것입니다.




    이 부분이 개인적으로 개념적으로 이해하기 어려웠는데, 블록체인 개발혹은 기회하시는 분들에게 여쭈어봤는데 
    실제로 대부분의 코인은 비결정적 지갑을 사용한다고 합니다. 간단하게 실제 사용을 예를 들어보면, 블록체인 지갑을 사용하면 대부분 사람들이 개인키를 잘 보관하라고 합니다. 왜냐하면 개인키를 분실하면 지갑을 다시 찾을 수 없기 때문이라 합니다.





    2.7 바이트코드(Byte Code)

    바이트코드(Byte Code)

    스마트 계약 코드는 대개 솔리디티(Solidity)와 같은 고급 프로그래밍 언어(High-level Programming Language)로 작성됩니다. 이 코드는 이더리움 블록체인에 배포되는 EVM 바이트코드로 컴파일됩니다. 이것은 코드가 JVM 바이트코드로 변환되는 자바 등의 프로그래밍 언어와 매우 유사합니다. 이더리움의 런타임 환경은 바이트코드만을 이해하고 실행할 수 있습니다.

    이러한 설계의 이점 중 하나는 개발자가 다른 프로그래밍 언어를 사용하여 스마트 계약을 구현할 수 있는 옵션을 제공한다는 점입니다. 현재 파이썬과 유사한 바이퍼(Vyper) 등 몇몇 언어가 EVM 바이트코드로 컴파일됩니다. 프로그램 언어 설계자 입장에서는 이더리움 황서를 참조하여 독자적인 이더리움 


    바이퍼 비탈릭이 연구하고 있는 차세대 언어

    https://github.com/ethereum/vyper

    비탈릭이 계속 연구중인 스마트 컨트랙 언어가 있는데, Viper 라고 합니다.

     

    https://github.com/ethereum/viper 

     

    현재 가장 많이 사용되고 있는 solidity 나 파이썬 문법을 베이스로 한 서펀트를 완전히 대체하는 것은 아니고, 기존 언어의 문제들을 해결해보려고 테스트하고 있는 언어입니다. 아직까지 실제 컨트랙으로 사용될 수 있는 수준은 아닙니다.

     

    가장 눈에 띄는 것은 어떤 함수의 정확한 개스 사용량을 계산할 수 있다는 점인 것 같습니다.

     

    Viper is an experimental programming language that aims to provide the following features:

    • Bounds and overflow checking, both on array accesses and on arithmetic
    • Support for signed integers and decimal fixed point numbers
    • Decidability - it's possible to compute a precise upper bound on the gas consumption of any function call
    • Strong typing, including support for units (eg. timestamp, timedelta, seconds, wei, wei per second, meters per second squared)
    • Maximally small and understandable compiler code size
    • Limited support for pure functions - anything marked constant is NOT allowed to change the state
    출처: http://www.chaintalk.io/archive/lecture/763


    이더리움 황서 

    https://github.com/ethereum/wiki/wiki/%5BKorean%5D-White-Paper




    2.8 EVM(Ethereum Virtual Machine)

    EVM

    이더리움 가상 머신(Ethereum Virtual Machine, EVM)은 단순하지만 강력한, 튜링 완전성을 가진 256비트 가상 머신으로써 누구나 임의의 EVM 바이트코드를 실행할 수 있습니다. EVM은 이더리움 프로토콜의 일부이며, 이더리움 시스템의 합의 엔진에서 중요한 역할을 합니다. EVM은 누구나 신뢰가 필요없는 환경에서 임의의 코드를 실행하고, 그 결과로 완전히 결정론적이고 실행 결과가 보장됩니다.

    gethparity 등의 이더리움 클라이언트를 설치하고 실행하면 EVM이 시작되고, EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작합니다.


    geth 
    https://github.com/ethereum/go-ethereum/wiki/geth


    parity

    https://ko.wikipedia.org/wiki/%ED%8C%A8%EB%A6%AC%ED%8B%B0_%EB%B9%84%ED%8A%B8

    https://github.com/paritytech/wiki



    3.1 게스(Geth)/패리티(Parity) 클라이언트

    Geth/Parity Clients

    지금까지 이더리움의 이론적 개념에 대해서만 이야기했습니다. 하지만 이더리움을 이해하기 위한 가장 좋은 방법은 다양한 라이브러리 및 소프트웨어를 직접 설치하고 사용해보는 것입니다. 이제부터 이더리움 블록체인에서 응용 프로그램을 빌드하는 데 사용할 수 있는 도구를 살펴 보겠습니다.

    Geth

    Geth는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로써, Go언어로 개발되었습니다. Geth를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 됩니다. Geth는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신합니다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있습니다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 합니다.

    블록체인에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있습니다.
    geth-network

    Parity

    패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체이며, 러스트(Rust) 프로그래밍 언어로 개발되었습니다. 현재 Parity Inc. 라는 기업에서 운영하고 있습니다.

    사실 이더리움 네트워크에 접속할 수 있는 클라이언트 소프트웨어를 개발하는 길은 누구에게나 열려 있으며, C++, 파이썬 및 다른 언어로 작성된 클라이언트도 있습니다. 원한다면 이더리움 황서의 사양을 따라 자신의 클라이언트를 구현할 수도 있습니다!
    geth-parity-network


    댓글

© 2018 T-Story. All right reserved.