인프런의 이더리움 입문 바이블: 모든 이더리움 입문자를 위하여 강의를 보고 단순 정리 목적으로 정리한 글이다.
[무료] 이더리움 입문 바이블: 모든 이더리움 입문자를 위하여 - 인프런 | 강의
초급자를 위해 준비한 [블록체인] 강의입니다. 본 텍스트 강의는 하나의 '바이블' 을 자처하고, 그러한 기초 내용을 올바르게 담고자 노력한 자료입니다. 너무나도 중요하고 뼈대있는 이더리움 기초 내용들 블록체인에 대한 관심, 이더리움에 대한 학습 열의에 대해서 논하는건 이제 너무나도 당연해서 식상하다는 생각이 들 정도입니다.

Smart Contracts
- Solidity 언어(다른 언어도 가능하지만 많이 쓰이는 언어가 solidity)로 작성한 응용프로그램을 ‘스마트 컨트랙트’라고 한다.
- 계약서를 작성하여 코드로 변환하고 블록체인에 배포하면 디지털 계약이 체결된다.
- 당사자 간의 합의를 강화할 수 있다는 장점이 있다.
이더와 이더의 단위
- 각 블록체인에는 자체 통화가 존재.
- 이더리움 블록체인의 경우 기본 통화를 이더(Ether)라고 한다.
- 이더의 현재 가격은 https://messari.io/asset/ethereum에서 확인 가능하다.
- 웨이(wei)는 가장 낮은 단위로 스마트 계약서에서 실제로 쓰이는 단위.

주소(Address)
- 이더리움 블록체인에서 사용자를 인증할 수 있는 것은 주소이다.
- 각 주소에는 해당 개인키(사용자가 알고 있는 일종의 암호)가 존재.
- 블록체인과 상호작용하기 위해서 주소 + 개인키 쌍이 필요.
- 이더리움의 주소는 공개되어 있으며 전 세계 누구와도 공유할 수 있다.
- 개인키는 절대 다른 사람과 공유해서는 안된다.
- 주소 + 개인키는 그 어떤 데이터베이스에도 저장되지 않는다. 사용자만이 이정보를 통제할 수 있다.
이더리움의 주소가 생성되는 방식
https://en.wikipedia.org/wiki/Public-key_cryptography
공개키 암호화 방식 사용
- 개인키 생성
k(private key) = f8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315
- 개인키로부터 공개키 생성
K(public key) = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0
- keccak256 알고리즘으로 공개키의 해시값 계산
Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9
001d3f1ef827552ae1114027bd3ecf1f086ba0f9
- 생성된 해시값의 하위 20바이트를 취하여 이더리움 주소 생성
0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9
계정(Account)
- 이더리움 주소와 개인키의 조합을 계정이라고 한다.
- 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다.
- 두 가지 유형이 존재
- 외부 소유 계정(EOA)
- 공개주소와 개인키의 조합.
- 다른 계정과 이더를 송수신할 수 있다.
- 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.
- 컨트랙트 계정
- 상응하는 개인키가 없다.
- 이러한 종류의 계정은 스마트 계약을 블록체인에 배포할 때 생성된다.
- 다른 계정과 이더를 송수신할 수 있다.
- 관련된 코드를 담을 수 있다.(담을 수 있다?)
- EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시킨다.
- 외부 소유 계정(EOA)
지갑(Wallets)
- 이더리움 계정을 저장하고 관리하는 데 사용되는 소프트웨어 플러그인 또는 라이브러리.
- 지갑을 통해 여러 계정을 관리하고, 트랜잭션에 서명하고, 잔고를 추적할 수 있다.
- 두 가지 유형이 존재
- 비결정적 지갑
- 임의의 개인키/공개키 쌍을 사용하는 유형의 지갑
- 개인키/공개키 쌍을 많이 생성할 수 있지만 각 키 쌍 간에는 아무런 상관 관계가 없다.
- 결정론적 지갑
- 모든 키가 시드(seed)라는 단일 시작 지점에서 파생된다.
- 시드는 사용자가 다른 정보를 요구하지 않고 지갑을 쉽게 백업하고 복원할 수 있게 해주고, 경우에 따라 개인키를 몰라도 공개키를 생성할 수 있게 해준다.
- 비결정적 지갑
가스(Gas)
- 이더리움 블록체인에 스마트 계약을 배포하고 트랜잭션을 실행하기 위한 비용.
- 트랜잭션을 실행하기 위해 채굴자에게 이더를 지불해야 한다.
가스 가격(Gas Price)
- 실제 채굴자에게 지불해야 하는 이더의 양을 결정.
- 가스 가격은 트랜잭션 생성자가 설정할 수 있다.
- 설정한 가격이 높을수록 트랜잭션이 빨리 처리된다.
- 대부분의 처리자들이 가스 가격의 내림차순으로 트랜잭션을 분류해서 처리한다.
가스 한도(Gas Limit)
- 트랜잭션을 실행하기 위해 사용할 가스의 최대 금액을 나타내는 것.
- 블록 가스 한도(Block Gas Limit)과 다름.
- 블록 가스 한도는 이더리움의 각 블록에 적용되는 최대 캡.
- 현재 이더리움의 블록은 가스 총액이 800만 이내의 범위에서만 트랜잭션을 포함할 수 있다.
- 무한 루프를 실행할 수 없도록 하기 위함.
- 무한 루프가 발생하면 트랜잭션 실행이 완료되지 않아 블록 채굴이 발생하지 않는다.
바이트코드(Byte Code)
- 스마트 컨트랙트 코드는 Solidity와 같은 고급 프로그래밍 언어로 작성된다.
- 이 코드는 이더리움 블록체인에 배포되는 EVM 바이트코드로 컴파일된다.
- 이더리움의 런타임 환경은 바이트코드만을 이해하고 실행할 수 있다.
- 현재 파이썬과 유사한 Vyper 등 몇몇 언어가 EVM 바이트코드로 컴파일된다.
EVM(Ethereum Virtual Machine)
- 이더리움 가상 머신은 256비트 가상머신으로써 누구나 임의의 EVM 바이트코드를 실행할 수 있다.
- EVM은 이더리움 프로토콜의 일부이며, 이더리움 시스템의 합의 엔진에서 중요한 역할을 한다.
- 누구나 신뢰가 필요없는 환경에서 임의의 코드를 실행하고 그 결과로 완전히 결정론적이고 실행 결과가 보장된다.
- geth, parity 등의 이더리움 클라이언트를 설치하고 실행하면 EVM이 시작되고, EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작한다.
Uploaded by N2T