본문 바로가기
Develop/기타

[Ethereum] Ethereum이란?

by Tarra 2023. 2. 14.

 

 

 


개인 공부 후 자료를 남겨놓기 위한 목적이므로,
생략되거나 오류가 있을 수 있음을 알립니다.

 

 


 

1. 이더리움이란?

퍼블릭 블록체인 기반의 분산 컴퓨팅 플랫폼입니다.

 

응용 프로그램을 작성하고 글로벌 컴퓨터에서 실행할 수 있으며, 이 플랫폼은

 

중단 시간, 검열, 사기 또는 제 3자의 간섭없이 항상 실행되도록 보장됩니다.

 

이러한 모든 컴퓨터(노드)는 서로 연결되어 있으며, 코드와 데이터의 전체 복사본을 가지고 있습니다.

 

 

 

 

따라서 이더리움 블록체인에 코드르 배포하면 코드가 네트워크의 모든 노드로 복제됩니다.

 

응용 프로그램에 데이터가 저장되면 모든 노드에서 해당 데이터가 복제됩니다.

 

 

 

 

기존 클라이언트 / 서버 아키텍처의 경우,

 

중앙화된 하나의 웹 응용 프로그램이 있으며 모든 클라이언트가 이 응용 프로그램과 상호작용을 하는 방식으로 이루어집니다.

 

 

 

 

 

하지만 이더리움 아키텍쳐의 경우,

 

모든 클라이언트(브라우저)는 응용 프로그램의 자체 인스턴스와 통신합니다.

 

클라이언트 자체가 연결할 중앙 서버가 없습니다.

 

 

 

이상적인 탈중앙화 세계에서, DApp(탈중앙화 어플리케이션)과 상호 작용하려는

 

모든 사람은 컴퓨터 기기에 실행중인 블록체인의 전체 복사본이 필요하게 되고,

 

현실적으로 가장 최신화된 블록체인 복사본을 소유하는것은 무리기에

 

이에 대한 솔루션으로 나온 것이 MetaMask와 같은 블록체인 서버 호스팅 서비스입니다.

 

 


 

2. 구성요소

 

💡트랜잭션이란?

”쪼갤 수 없는 업무 처리의 최소 단위”를 의미한다.

업무 처리의 최소 단위이므로, 
A라는 사람이 B라는 사람에게 1,000원을 지급하고 B가 그 돈을 받은 경우,
이 거래 기록은 더 이상 쪼갤 수 없는 하나의 트랜잭션을 구성한다고 한다.

만약  A가 돈을 지불했으나 B가 그 돈을 받지 못했다면 거래가 성립되지 않았으므로
트랜잭션이라고 할 수 없다.

 

 

 

블록체인에는 2가지 구성 요소가 존재합니다.

 

 

1. 데이터 베이스

 

이러한 모든 트랜잭션은 공개되며 누구나 볼 수 있고 확인할 수 있습니다.

 

이 데이터는 절대로 조작할 수 없고, 이더리움은 유효하지 않은 데이터가 데이터베이스에 저장되지 않게 하기 위해 작업증명이라는 알고리즘을 사용하여 네트워크를 보호합니다.

 

네트워크의 모든 트랜잭션은 블록체인에 저장됩니다.

 

 

2. 코드

 

블록체인의 데이터베이스 요소는 트랜잭션을 저장합니다.

 

투표 응용 프로그램이 있다고 가정할 때 투표에 대한 모든 논리는 어디에 담길까요?

 

이더리움에서는 솔리디티(Solidity)라는 언어를 통해 논리/응용 프로그램 코드(스마트 컨트랙트)를 작성합니다.

 

이더리움 블록체인은 트랜잭션을 저장할 뿐 아니라 스마트 컨트랙트 코드를 저장하고 실행합니다.

 

작성 후 솔리디티 컴파일러를 사용하여 이더리움 바이트코드로 컴파일 한 다음 바이트 코드를 블록체인에 배포합니다.

 

 

 

즉, 기본적으로 블록체인은 데이터(트랜잭션)를 저장하고 코드(스마트 컨트랙트)를 저장하며,

코드를 EVM (Ethereum Virtual Machine)에서 실행합니다.

 

 


 

· 화폐 단위

각 국가마다 자체 통화가 있듯이, 블록체인에도 갖가지 자체 통화가 있습니다.

 

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

 

 

 

위와 같은 여러가지 단위의 통화가 존재하지만,

 

이중에서 이더(Ether) 와 웨이(Wei)만 잘 기억하면 됩니다.

 

Wei는 가장 낮은 단위로, 스마트 컨트랙트에서 실제로 자주 쓰이는 단위입니다.

 

( 1 Wei = 10^-18 Ether ), ( 1Ether = 10^18Wei)

 

 


 

 

· 주소 (Address)

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

.

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

 

각 주소에는 개인키가 있으며, 개인키는 사용자가 알고 있는 일종의 암호로 간주합니다.

 

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

 

 

 

 

💡이더리움의 핵심 사항

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

 

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

 

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

 

 

 

 

 

 

이더리움 주소의 생성 로직

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

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

3. keccak256 알고리즘으로 공개키의 해시값 계산
Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9**001d3f1ef827552ae1114027bd3ecf1f086ba0f9

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

 

 


 

· 계정 (Accounts)

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

 

이더림움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있으며 2가지 유형이 있습니다.

 

 

1. 외부 소유 계정 (EOA)

공개 주소와 개인키의 조합을 의미합니다.

  • 다른 계정과 이더를 송수신하고,
  • 스마트 컨트랙트에 트랜잭션을 보낼 수 있습니다.

 

 

2. 컨트랙트 계정

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

 

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

 

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

 

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

 

 


 

· 지갑 (Wallets)

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

 

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

 

메타마스크의 지갑 형태에 대해서만 다룹니다.

 

 

결정론적 지갑

모든 키가 시드(Seed)라는 단일 시작점에서 파생되며,

 

이 시드를 통해 사용자가 다른 정보를 요구하지 않고 지갑을 쉽게 백업하고 복원할 수 있게됩니다.

 

이러한 시드는 사람이 읽을 수 있는 니모닉 문구 단어로 배열되며, 이것이 메타마스크를 처음 시작할 때 12개 단어로 이루어진 시드를 저장하라는 요청입니다.

 

 

 


 

· 가스 (Gas)

스마트 컨트랙트를 배포하고, 트랜잭션을 실행하기 위해서는 각 상호작용과 관련된 비용이 소모됩니다.

 

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

 

트랜잭션을 위해 지불하는 이더의 양은, 트랜잭션에 얼마나 많은 “단위 연산”이 포함되어있는지에 따라 달라집니다. 이러한 연산의 단위를 가스(Gas)라고 합니다.

 

 

가스 가격 (Gas Price)

트랜잭션이 어느정도의 가스를 필요로 하는지 알아도, 실제로 채굴자에게 지불해야하는 이더의 양은 알 수 없습니다.

 

이것을 결정하는 요소가 가스 가격 (Gas Price)이며, 가스 가격은 트랜잭션 생성자가 직접 설정할 수 있습니다.

 

설정한 가스 가격이 높을 수록 트랜잭션이 더욱 빠르게 처리되며, 가스 가격이 낮다면, 트랜잭션이 처리되기는 하지만 처리속도가 늦어질 수 있습니다.

 

 

 

가스 한도(Gas Limit)

트랜잭션이 소모하는 가스의 양을 파악하는 것은 어렵고,

 

우리는 엄청난 양의 수수료를 지불하고 싶지 않으므로, 트랜잭션을 실행하기 위해 사용할 가스의 최대 금액을 설정할 수 있습니다.

 

이를 가스한도 (Gas Limit)이라고 합니다.

 

 

 


 

· 바이트 코드 (Byte Code)

스마트 컨트랙트 코드는 솔리디티와 같은 고급 프로그래밍 언어로 작성됩니다.

 

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

 

이러한 방식은 다른 프로그래밍 언어를 사용하여 스마트 컨트랙트를 구현할 수 있도록 합니다.

 

 

 


· EVM (Ethereum Virtual Machine)

EVM 바이트 코드를 실행할 수 있는 가상머신입니다.

 

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

 

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

 

우리 프로젝트에서는 이러한 EVM 중 하나인 besu 를 사용합니다.

 

 

 

Web3JS

Web3.js는 이더리움 블록체인과 상호작용하는 데 사용되는 유명한 자바스크립트 라이브러리입니다.

 

이 라이브러리를 사용하면 모든 프론트엔드 프레임워크에서 사용자가 DApp을 이용하게 할 수 있습니다.

 

 

 

트러플(Truffle)

Django , Spring 등과 같은 웹 어플리케이션 개발을 위한 프레임워크처럼, 

 

트러플은 DApp 개발에 가장 널리 사용되는 프레임워크중 하나로서

 

스마트 컨트랙트를 컴파일하고 배포하는 복잡성을 추상화해줍니다.

 

 


 

4. 메타마스크

이더리움 지갑 중 메타마스크는 커뮤니티에서 사용되는 가장 인기있는 지갑 중 하나입니다.

 

The crypto wallet for Defi, Web3 Dapps and NFTs | MetaMask

A safe crypto wallet for digital tokens & NFTs. Join the blockchain and DeFi world.

metamask.io

해당 링크에서 크롬 플러그인으로 설치할 수 있습니다.

 

 

 


5. 이더스캔

이더스캔은 이더스캔 사에서 서비스하는 무료 프론트엔드 어플리케이션으로,

 

이더리움 블록체인을 위한 편리한 탐색기입니다.

 

퍼블릭 이더리움 블록체인의 모든 주소, 트랜잭션과 블록에 대한 정보를 확인할 수 있습니다.

 

다양한 퍼블릭 네트워크에 대해 대응되는 각각의 이더스캔 페이지가 존재합니다.

 

Mainnet : https://etherscan.io/

 

Ethereum (ETH) Blockchain Explorer

Etherscan allows you to explore and search the Ethereum blockchain for transactions, addresses, tokens, prices and other activities taking place on Ethereum (ETH)

etherscan.io

 

Ropsten : https://ropsten.etherscan.io

 

TESTNET Ropsten (ETH) Blockchain Explorer

Etherscan allows you to explore and search the Ropsten blockchain for transactions, addresses, tokens, prices and other activities taking place on Ropsten (ETH)

ropsten.etherscan.io

 

 

 


6. Remix

리믹스는 스마트 컨트랙트를 코딩하는 데 사용되는 브라우저 IDE입니다.

 

소규모 스마트 컨트랙트 를 신속하게 테스트하기에는 좋지만

 

전문적인 스마트 컨트랙트 개발을 위해서는 전문 IDE를 사용하고,

 

스마트 컨트랙트의 컴파일 및 배포에는 트러플을 사용할 것을 권장합니다.