BlockChain

모든 이더리움 입문자를 위한 이더리움 입문 바이블: #2. 중요한 관련 개념들

IT's 잇츠 2021. 8. 30. 09:00

개발 강의로 유명한 인프런에 이더리움 입문자를 위한 바이블 강의가 있습니다.

 

이더리움으로 개발자가 되시려는 분들이

 

필수적으로 알아야 하는 지식에 대한 내용인데요.

 

제가 잘 정리해서 블로그에 주기적으로 올려보도록 하겠습니다!_!


📑  목차

  1. 스마트 계약(Smart Contracts)
  2. 이더, 그리고 이더의 단위(Ether & Denominations)
  3. 주소(Addresses) - 이더리움 주소 어떻게 생성?
  4. 계정(Accounts)
  5. 지갑(Wallets)
  6. 가스(Gas), 가스 가격(Gas Price), 가스 한도(Gas Limit)
  7. 바이트 코드(Byte Code)
  8. EVM(Ethereum Virtual Machine)
  9. 마무리

 


📌 스마트 계약(Smart Contracts)

 

2021.08.28 - [BlockChain] - 모든 이더리움 입문자를 위한 이더리움 입문 바이블: #1. 이더리움이란?

 

모든 이더리움 입문자를 위한 이더리움 입문 바이블: #1. 이더리움이란?

개발 강의로 유명한 인프런에 이더리움 입문자를 위한 바이블 강의가 있습니다. 이더리움으로 개발자가 되시려는 분들이 필수적으로 알아야 하는 지식에 대한 내용인데요. 제가 잘 정리해서 블

chuwinwin.tistory.com

위의 글에서는 솔리디티 프로그래밍 언어로 응용 프로그램을 작성하고

 

이를 이더리움 블록체인에 배포하는 방법에 대해 설명했습니다.

 

이더리움에서는 이러한 응용 프로그램을 '스마트 계약'이라고 합니다.

.

.

.

왜 이러한 응용 프로그램을 스마트 계약이라고 부르는지 궁금하시죠?

 

일반적으로 계약은 법으로 집행되는 두 당사자, 또는 여러 당사자 간의 서면 합의입니다.

 

계약서를 작성하여 코드로 변환하고 블록체인에 배포하면 디지털 계약이 체결됩니다.

.

.

.

블록체인에 있는 이 코드의 장점은 당사자 간의 합의를 강화할 수 있다는 점입니다.

 

이것이 바로 '스마트 계약'이라고 불리는 이유입니다.

 

이 코드가 어떻게 계약을 시행할 수 있을까요?

 

일단 계약이 블록체인에 배포되면 이를 중지하거나 수정할 수 없습니다.

 

이것이 계약이 시행되는 방식이며 이해를 위해 간단한 예를 살펴보겠습니다.

.

.

.

'예시'

 

Crowd Sale 응용 프로그램을 작성하려고 한다고 가정해 봅시다.

 

제품을 만들기 위해 $10,000를 모으고자 하는 제작사가 있으며,

 

이 제품에 관심이 있고 선불로 기꺼이 지불할 잠재 고객이 있습니다.

 

계약상 각 고객이 보내는 액수가 $10 ~ $10,000 사이에 해당하면 수령할 것이고,

 

목표가 달성된다면 그 돈은 제작사에게 송금됩니다.

 

그렇지 않은 경우, 기부자에게 돈이 돌려보내집니다.

 

이는 스마트 계약을 사용하여 제작자와 지지자 간의 계약을 시행하는 이상적인 사용 사례입니다.

 

중앙화된 응용 프로그램이 아닌 스마트 계약에서 이를 구현할 때의 장점은 아래와 같습니다.

 

 1. 모든 참여자가 보낸 돈이 스마트 계약에 담겨 있습니다. 참여자도 제작자도 그 돈을 사용할 수 없습니다.

 2. 목표에 도달하자마자 돈이 제작자에게 바로 보내지도록 코드를 구현할 수 있습니다.

 3. 특정 시간 내에 목표에 도달하지 못하면 모든 참가자에게 환불을 시행할 수 있도록 코드를 구현할 수 있습니다.

 4. 이 코드는 한번 블록체인에 배포된 후에는 조작할 수 없습니다.


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

 

각 국가마다 USD, INR, RNB, GBP, EUR 등과 같은 자체 통화가 있듯이,

 

각 블록체인에도 자체 통화가 있습니다.

.

.

.

이더리움 블록체인의 경우 기본 통화를 이더(Ether)라고 합니다.

 

이더를 USD 또는 EUR와 같은 다른 화폐로 교환할 수 있는 거래소도 있습니다.

.

.

.

현실 세계의 통화에는 다양한 단위가 있습니다.

 

예를 들어 미국 1달러는 100센트이며

 

페니(1센트), 니켈(5센트), 십 센트(10센트), 쿼터(25센트)와 같은 다양한 단위가 있습니다.

 

위처럼 국가 및 통화에 따라 다양한 단위가 있을 수 있습니다.

.

.

.

 

이더에도 옆의 그림과 같이 다양한 단위가 있습니다.

 

그중에서 두 가지, 이더(ether)와 웨이(wei)만 잘 기억하면 됩니다.

 

웨이는 가장 작은 단위로, 스마트 계약서에서 실제로 쓰이는 단위입니다.

 

 

 

 

 


📌 주소(Addresses) - 이더리움 주소 어떻게 생성?

 

페이스북과 같은 웹사이트에 로그인하려면 일반적으로 이메일, 사용자 이름과 비밀번호를 사용합니다.

 

당신의 사용자 이름은 페이스북에서 신분증에 준하며,

 

사용자 이름 / 암호를 사용하여 페이스북 로그인을 위한 인증을 거치게 됩니다.

.

.

.

이더리움 블록체인에서 사용자의 신분증에 해당하는 것은 '주소'입니다.

 

이더리움 주소는 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 과 같은 형태를 가집니다.

 

각 주소에는 해당 개인키가 있으며 이는 사용자가 알고 있는 일종의 암호로 간주할 수 있습니다.

 

블록체인과 상호 작용하려면 이 주소 + 개인키 쌍이 필요합니다.

.

.

.

다음은 블록체인과 이더리움을 이해하기 위해 암기해야 할 몇 가지 핵심 사항입니다.

 

 1. 이더리움 주소는 공개되어 있으며 전 세계 누구와도 공유할 수 있습니다.

 2. 개인키는 절대 다른 사람과 공유해서는 안 됩니다.

 3. 주소 + 개인키는 그 어떤 데이터베이스에도 저장되지 않습니다. 사용자만이 이 정보를 통제할 수 있습니다.

.

.

.

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

 

아래의 예는 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 라는 주소가 어떻게 생성되는지에 대한 간단한 설명입니다.

 

 1. 개인키 생성

  k(private key) = f8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315

 

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

  K(public key) = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0

 

 3. keccak256 알고리즘으로 공개키의 해시값 계산

  Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9001d3f1ef827552ae1114027bd3ecf1f086ba0f9

 

 4. 생성된 해시값의 뒤쪽 20바이트를 취하여 이더리움 주소 생성

  Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9001d3f1ef827552ae1114027bd3ecf1f086ba0f9

=> 0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9


📌 계정(Accounts)

 

이더리움 주소와 개인키의 조합을 계정(Account)이라고 합니다.

 

이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있으며,

 

크게 2가지 유형이 있습니다.

 

 1. 외부 소유 계정(EOA)

 위에서 언급한 공개 주소와 개인키의 조합을 말합니다.

 

 외부 소유 계정, 또는 외부 계정을 사용하면

  1) 다른 계정과 이더를 송수신하고

  2) 스마트 계약에 트랜잭션을 보낼 수 있습니다.

 

 2. 컨트랙트 계정

 컨트랙트 계정에는 상응하는 개인키가 없습니다.

 이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성됩니다.

 컨트랙트 계정 대신 컨트랙트(contract)로만 표시되기도 합니다.

 

 컨트랙트 계정의 몇 가지 주요 기능은 다음과 같습니다.

  1) 다른 계정과 이더를 송수신하고(EOA와 동일)

  2) 관련된 코드를 담고(EOA와 다름)

  3) EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시킵니다.

 

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


📌 지갑(Wallets)

 

지갑은 이더리움 계정을 저장하고 관리하는 데 사용되는 소프트웨어 플러그인 또는 라이브러리입니다.

 

지갑을 통해 여러 계정을 관리하고, 트랜잭션에 서명하고 잔고를 추적하는 등의 기능을 사용할 수 있습니다.

.

.

.

지갑은 크게 2가지 유형으로 분류할 수 있습니다.

 

 1. 비결정적 지갑

 이것은 임의의 개인키/공개키 쌍을 사용하는 유형의 지갑입니다.

 개인키/공개키 쌍을 많이 생성할 수는 있지만 각 키 쌍 간에는 아무런 상관관계가 없습니다.

 

 2. 결정론적 지갑

 이 유형의 지갑에서는 모든 키가 시드(seed)라는 단일 시작 지점에서 파생됩니다.

 이 시드는 일반적으로 사람이 읽을 수 있는

니모닉(Mnemonic, 가장 순수한 형식으로 정보를 쉽게 기억할 수 있는 문자, 단어 또는 연상어의 패턴) 문구 단어로 배열됩니다.

.

.

.

메타마스크(Metamask)와 같은 플러그인을 사용한다면

 

처음 설치했을 때 12개 단어로 이루어진 시드를 저장하라는 요청을 받았을 것입니다.


📌 가스(Gas), 가스 가격(Gas Price), 가스 한도(Gas Limit)

 

"가스(Gas)"

 

이더리움 블록체인에 스마트 계약을 배포하고

 

트랜잭션을 실행하기 위해서는 각 상호 작용과 관련된 비용이 소모됩니다.

 

블록체인에서 트랜잭션을 실행하려면 네트워크의 채굴자에게 이더를 지불해야 합니다.

 

그럼 트랜잭션을 위해 지불하는 이더의 양은 누가 결정할까요?

 

이는 이더리움에 익숙하지 않은 많은 개발자들이 혼란스러워하는 부분이기도 합니다.

 

여기에 대한 답은 이더리움 황서에 기재되어 있는데,

 

트랜잭션에 얼마나 많은 '단위 연산'이 포함되는지에 따라 달라집니다.

 

예를 들어 트랜잭션이 단순히 두 개의 숫자를 더하는 작업이라면 이는 3개의 단위 연산에 해당합니다.

 

곱셈이라면 5개의 단위 연산에 해당합니다. 이러한 연산의 단위를 가스(Gas)라고 합니다.

.

.

.

"가스 가격(Gas Price)"

 

각 트랜잭션이 얼마나 많은 가스를 필요로 하는지 알아도,

 

실제로 채굴자에게 지불해야 하는 이더의 양은 아직 알 수 없습니다.

 

이것을 결정하는 요소가 가스 가격(Gas price)입니다.

 

재미있는 점은 트랜잭션 생성자가 원하는 가스 가격을 설정할 수 있다는 점입니다.

 

예를 들어, '가스당 3Gwei를 지불할 용의가 있습니다'라고 설정하는 식입니다.

 

당신의 트랜잭션이 100,000 가스를 소비하고 가스 가격을 3Gwei로 설정하면,

 

해당 트랜잭션에 대한 수수료로 300,000 Gwei를 지불하게 됩니다.

.

.

.

"가스 한도(Gas Limit)"

 

트랜잭션이 소모하는 가스의 양을 정확하게 파악하는 것은 매우 어렵습니다.

 

사용자 입장에서는 아무 생각 없이 트랜잭션을 전송했다가

 

수백 달러 어치의 이더를 수수료로 소모하고 싶지는 않을 겁니다.

 

가격을 낮게 책정해도 결국 트랜잭션이 블록에 포함되기는 하겠지만,

 

그 대기 시간이 상당히 길어질 수 있습니다.

.

.

.

❗️주의❗️

 

가스 한도(Gas Limit)와 블록 가스 한도(Block Gas Limit)를 혼동하면 안 됩니다.

 

블록 가스 한도는 이더리움의 각 블록에 적용되는 최대 캡입니다.

 

현재 이더리움의 블록은 가스 총액이 800만 이내의 범위에서만 트랜잭션을 포함할 수 있습니다.

 

각 블록에 대해 가스 제한이 있는 이유는,

 

누군가 무한 루프를 실행할 수 없도록 하기 위함입니다.

 

무한 루프가 발생하면 트랜잭션 실행이 완료되지 않아 블록 채굴이 발생하지 않기 때문입니다.

.

.

.

+) 이더리움 가스에 대해 더 구체적인 내용이 있습니다.

2021.09.01 - [BlockChain] - 이더리움의 가스(Gas)란 무엇일까? | 가스 가격(Gas Price), 가스 한도(Gas Limit)에 대해

 

이더리움의 가스(Gas)란 무엇일까? | 가스 가격(Gas Price), 가스 한도(Gas Limit)에 대해

📑  목차 컴퓨터들의 연결 작업의 양 측정 채굴자들과 GWEI 가스의 사용 가스란 무엇인가요? - 6줄 요약 📌 컴퓨터들의 연결 이더리움은 단지 간단한 계산을 수행하는 소프트웨어 플랫폼입니다.

chuwinwin.tistory.com


📌 바이트 코드(Byte Code)

 

스마트 계약 코드는 대개 솔리디티(Soliduty)와 같은 고급 프로그래밍 언어로 작성됩니다.

 

이 코드는 이더리움 블록체인에 배포되는 EVM 바이트 코드로 컴파일됩니다.

 

이것은 코드가 JVM 바이트 코드로 변환되는 자바 등의 프로그래밍 언어와 매우 유사합니다.

 

이더리움의 런타임 환경은 바이트 코드만을 이해하고 실행할 수 있습니다.

.

.

.

이러한 설계의 이점 중 하나는

 

개발자가 다른 프로그래밍 언어를 사용하여 스마트 계약을 구현할 수 있는 옵션을 제공한다는 점입니다.

 

현재 파이썬과 유사한 바이퍼(Vyper) 등 몇몇 언어가 EVM 바이트 코드로 컴파일됩니다.

 

프로그래밍 언어 설계자 입장에서는

 

이더리움 황서를 참조하여 독자적인 이더리움 프로그래밍 언어를 구현할 수도 있습니다.

솔리디티 코드
바이트 코드


📌 EVM(Ethereum Virtual Machine)

 

이더리움 가상 머신(EVM)은 단순하지만 강력한 튜링 완전성을 가진

 

256비트 가상 머신으로써 누구나 임의의 EVM 바이트 코드를 실행할 수 있습니다.

.

.

.

EVM은 이더리움 프로토콜의 일부이며, 이더리움 시스템의 합의 엔진에서 중요한 역할을 합니다.

 

EVM은 누구나 신뢰가 필요 없는 환경에서 임의의 코드를 실행하고,

 

그 결과로 완전히 결정론적이고 실행 결과가 보장됩니다.

 

geth, parity 등 이더리움 클라이언트를 설치하고 실행하면 EVM이 시작되고,

 

EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작합니다.


꾸준히 블록체인 관련한 정보 및 내용들을 정리해서

 

이해하기 쉽게끔 블로그에 주기적으로 업로드하도록 하겠습니다.

 

⬇️ 인스타그램으로도 관련 정보를 만나보시려면 아래 링크로 놀러 오세요☺

https://www.instagram.com/dev.chooble/