일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 제주코딩베이스캠프
- 더오름
- 리버싱 핵심 원리
- 위니브
- 티스토리챌린지
- 안드로이드 adb start-server
- 안드로이드 adb
- 드림핵 리버싱 풀이
- 드림핵 리버싱
- 안드로이드 모바일 앱 모의해킹
- rev-basic 풀이
- 자바스크립트 강의
- 리버싱 플래그
- adb
- 리버싱핵심원리
- 제주ICT
- 리버싱 초보
- 안드로이드 리버싱
- 리버싱
- 자바스크립트 강의 추천
- 자바스크립트강의 후기
- 오블완
- 리버싱 스터디
- 인프런 강의 추천
- dreamhack reversing
- 자바스크립트
- 드림핵 플래그
- 강의 체험단 1기
- adb 옵션
- 리버싱 입문
- Today
- Total
해보자고
[이더리움 입문 바이블] 본문
https://www.inflearn.com/course/ethereum-bible/dashboard
인프런 강의를 토대로 입맛대로 정리 + 복붙한 글입니다.
#섹션0
- 비트코인 블록체인은 은행과 같은 중앙 기관의 중재 없이 블록체인의 다양한 당사자 간에 돈을 송금하는 데 사용
- 비탈릭 부테린(Vitalik Buterin)은 탈중앙화의 개념을 다양한 분야에서 적용하고 싶어했고, 탈중앙화적으로 전세계적으로 운영 가능한 응용 프로그램을 만들고 싶어함.
-----
- 이더리움은 *퍼블릭 블록체인 기반의 *분산 컴퓨팅 플랫폼
- 응용 프로그램 작성 및 글로벌 컴퓨터에서 실행 가능하며, 이 플랫폼은 중단 시간, 검열, 사기 또는 제 3 자의 간섭없이 항상 실행되도록 보장함.
- 모든 컴퓨터(노드라고도 함)는 서로 연결되어 있으며, 코드와 데이터의 전체 복사본을 가지고 있음.
-> 이더리움 블록체인에 코드를 배포하면 코드가 네트워크의 모든 노드로 복제.
-> 응용 프로그램에 데이터가 저장되면 모든 노드에 해당 데이터 복제
=> 네트워크에는 수 많은 노드가 존재하고, 모든 노드를 중지시키는 것은 불가능하기에 응용프로그램에 항상 액세스 가능.
*퍼블릭 블록체인: 누구나 참여할 수 있으며, 모든 참여자들의 상호 검증을 거치는 블록체인 (ex. 비트코인, 이더리움, 라이트 코인 등)
*분산 컴퓨팅: 다수의 컴퓨터가 공통 문제를 해결하기 위해 협업하도록 만드는 방법
+) 세계의 컴퓨터 예시 이미지가 이해가 안 감.
-----
(해당 차시 이미지 참고)
- 모든 클라이언트(브라우저)가 연결할 중앙 서버가 없음
- Dapp(탈중앙화 애플리케이션)과 상호 작용하려는 모든 사람은 컴퓨터/스마트콘 등의 기기에 실행중인 블록체인의 전체 복사본이 필요.
-> 즉, 애플리케이션 이용을 위해선 블록체인을 다운로드한 후 실행해야 함.
- 이더리움에는 웹 기반 Dapp을 만들기 위해 web3.js라는 편리한 자바스크립트 라이브러리가 존재.
- 해당 라이브러리는 블록체인 노드에 연결되며 따라서 유명한 js 프레임워크에(ex. react.js, angular.js) 라이브러리를 포함시킬 수 있음.
- 이더리움 블록체인의 두 가지 요소
데이터베이스 | - 네트워크의 모든 트랜색션이 블록체인에 저장 (응용 프로그램 배포도 트랜잭션으로 간주) - 네트워크의 모든 노드에 데이터 복사본이 동일한지 확인 - 데이터베이스에 유효하지 않은 데이터가 저장되지 않게끔 이더리움은 작업증명(Proof of Work) 알고리즘 사용하여 네트워크 보호 => 모든 트랜잭션은 공개되며, 누구나 확인 가능하며, 조작이 불가능. |
코드 | 1. (이더리움 세계에서는) 솔리디티(Solidity) 언어로 논리/응용 프로그램 코드(스마트 계약)를 작성 2. 솔리디티 컴파일러를 통해 이더리움 바이트 코드(Ethereum Byte Code)로 컴파일 3. 블록체인에 해당 바이트 코드 배포 +) 스마트 계약 작성시 다양한 언어가 존재함. 솔리디티만 존재하는 것X |
=> 따라서, 이더리움 블록체인은 트랜잭션을 저장할 뿐 아니라 스마트 계약 코드를 저장하고 실행합니다.
=> 기본적으로 블록체인은 데이터를 저장하고 코드를 저장하며 코드를 EVM (Ethereum Virtual Machine)에서 실행
#섹션1
- 스마트 계약(Smart Contracts): 스마트 계약은 이더리움 애플리케이션의 기초적인 빌딩 블록으로, 이는 블록체인에 저장된 컴퓨터 프로그램이며, 기존의 계약을 디지털 병렬로 변환할 수 있다. (출처: https://ethereum.org/ko/smart-contracts/)
- 왜 스마트 계약이라고 부를까??
=> 계약서를 작성 -> 코드로 변환 및 블록체인에 배포 -> 디지털 계약 체결
=> 블록체인에 있는 이 코드는 당사자 간 합의를 강화할 수 있다.
- 어떻게 계약이 실행되나???
=> 일단 계약이 블록체인에 배포되면 이를 중지하거나 수정할 수 없다.
- 작성: 솔리디티(Solidity) 등의 고급 프로그래밍 언어
- 컴파일: EVM 바이트코드
- 이더리움의 런타임 환경은 바이트코드만 이해, 실행 가능
- 각 블록체인에는 자체 통화가 존재.
ex) 이더리움 블록체인의 경우 기본 통화는 이더(Ether)
+) 이더를 다른 화폐로 교환할 수 있는 거래소도 존재.
+) 이더에도 다양한 단위 존재.
- 주소(address) : 공개키 해시(Keccak-256)의 마지막 20바이트로 구성되며, 이더리움 블록체인에서 사용자의 신분증에 해당 (출처: https://steemit.com/kr/@anpigon/ethereum-1)
- 각 주소에는 해당 *개인키가 존재.
ex) 001d3f1ef827552ae1114027bd3ecf1f086ba0f9
- 블록 체인과 상호 작용하기 위해선 주소 + 개인키 쌍이 필요
*개인키: 사용자가 알고 있는 일종의 암호와 같은 것으로 이해.
+) 블록체인과 이더리움을 이해하기 위한 몇 가지 핵심 사항
- 이더리움 주소는 공개되어 있으며 전 세계 누구와도 공유 할 수 있다.
- 개인키는 절대 다른 사람과 공유해서는 안된다.
- 주소 + 개인키는 그 어떤 데이터베이스에도 저장되지 않는다. 사용자만이 이 정보를 통제 할 수 있다.
- 이더리움 주소는 어떻게 생성되나??
=> 1. 개인키 생성 k(private key) = f8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315
2. 개인키로부터 공개키 생성 K(public key) = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0
1. keccak256 알고리즘으로 공개키의 해시값 계산 Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9001d3f1ef827552ae1114027bd3ecf1f086ba0f9
2. 생성된 해시값의 뒤쪽 20바이트를 취하여 이더리움 주소 생성 0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9
- 계정(account): 이더리움 주소와 개인키의 조합
- 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있으며 2가지 유형이 존재한다.
- 1) 외부 소유 계정(EOA)
- 2) 컨트랙트 계정
1) 외부 소유 계정(EOA)
- 공개 주소와 개인키 조합
- 다른 계정과 이더 송수신 가능
- 스마트 컨트랙트에 트랜잭션 보내기 가능
2) 컨트랙트 계정
- 상응하는 개인키가 존재X
- 스마트 계약을 블록체인에 배포할 때 생성
- 컨트랙트(contract)로만 표기하기도 함.
- 다른 계정과 이더 송수신 가능(EOA와 동일)
- 관련된 코드를 담음 (EOA와 다름)
- EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시킴
- 지갑: 이더리움 계정을 저장, 관리하는 데 사용되는 *소프트웨어 플러그인 또는 라이브러리
- 지갑으로 여러 계정 관리, 트랜잭션 서명, 잔고 추적 등의 기능 사용 가능
- 지갑의 유형
- 1) 비결정적 지갑
- 임의의 개인키/공개키 쌍을 사용하는 유형의 지갑
- 개인키/공개키 쌍을 많이 생성할 수 있다.
- 그러나 각 키 쌍 간에는 상관 관계가 없다.
-> 어떤 의미의 상관 관계??
=> 무작위로 서로 간의 관계성이 없는 키를 생성하는 방법 (원래는 개인키로부터 공개키를 생성)
- 2) 결정론적 지갑
- 모든 키가 시드(seed)라는 단일 시작 지점에서 파생
- 시드는 사용자가 다른 어떤 정보를 요구하지 않고 지갑을 쉽게 백업 및 복원 가능하게 해주며, 개인키를 모른 채 공개키 생성이 가능하도록 해준다.
- 시드는 일반적으로 사람이 읽을 수 있는 *니모닉 문구 단어로 배열됨.
*소프트웨어 플러그인: 어떤 프로그램에 없던 새 기능을 추가하기 위해 끼워넣는 부가 프로 그램. 쉽게 부가 소프트웨어 (출처: https://m.cafe.daum.net/myveritas/O8dl/9
*니모닉: 메타마스크, 카이카스 등의 암호화폐 지갑 복구를 위한 12개의 단어로, 단어 12개를 순서대로 맞춰 지갑을 복구, 열 수 있게 해준다. 랜덤한 영어 단어로 이루어져 있다. (출처: https://m.post.naver.com/viewer/postView.naver?volumeNo=34746474&memberNo=40921089)
- 가스(Gas) : 아래와 같은 이유에서의 연산의 단위 (일종의 수수료 책정을 위한 것)
- 블록체인에서 트랜잭션을 실행하려면 네트워크의 *채굴자에게 이더를 지불해야 함.
+) 채굴: 거래내역을 기록해주는 사람에게 일을 수행한 대가로 디지털자산을 지급하는 것
- 이더리움 황서에 기재된 바에 따르면 트랜잭션의단위 연산이 얼마나 많이 포함되는지에 따라 이더의 양이 달라짐
ex) 단순히 두 개의 숫자를 더하는 작업 -> 3개의 단위 연산 / 곱셈 -> 5개의 단위 연산
- 가스 가격(Gas Price): 채굴자에게 지불해야하는 이더의 양을 결정하는 요소
- 트랜잭션 생성자가 원하는 가스 가격 설정 가능
ex) 가스당 3Gwei(기위)를 지불할 용의가 있다라고 설정 (트랜잭션이 100000가스 소비, 가스 가격은 3Gwei => 수수료 3000000Gwei 지불) // 이해 안됨.
+) 0.000000001 ETH = 1 Gwei (10억 Gwei = 1 ETH)
- 설정한 가스 가격이 높을 수록 트랜잭션이 더 빨리 처리
=> 채굴자들이 가스 가격이 높은 순서대로 채굴하기에
- 가스 한도(Gas Limit): 트랜잭션을 실행하기 위해 사용할 가스의 최대 금액을 나타냄.
+) 가스 한도와 *블록 가스 한도(Block Gas Limit)는 다른 것.
*블록 가스 한도: 이더리움의 각 블록에 적용되는 최대 캡.
- 이더리움 가상 머신(Ethereum Virtual Machine, EVM): 스마트 컨트랙트를 처리 (배포 및 실행) 하기 위한 256비트 이더리움 가상 머신
- geth, parity 등의 이더리움 클라이언트를 설치 후 실행하면 EVM이 시작되고, EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작함.
#섹션2
Geth
- 이더리움 재단이 제공하는 공식 클라이언트 소프트웨어
- 개발 언어: Go
- 처음 시작시 이더리움 클라이언트(노드node)에 연결 -> 블록체인 전체 사본 내려받음.
- 블록체인의 복사본을 최신 상태로 유지하기 위해 계속해서 다른 노드와 통신
- 블록 채굴, 블록체인에 트랜잭션 추가, 블록의 트랜잭션 검증, 트랜잭션 실행, 서버 역할, 블록체인에 연결 가능한 자바스크립트 클라이언트(geth sonsole) 존재.
패리티(parity)
- 이더리움 프로토콜의 또 다른 구현체
- 개발 언어: Rust
Web3JS
- 이더리움 블록체인과 상호작용할 때 사용하는 유명한 자바스크립트 라이브러리
- 모든 프론트엔드 프레임워크에서 사용자가 탈중앙화 애플리케이션 이용이 가능해짐.
+) 블록체인과 상호작용하는 또 다른 라이브러리로 Ethers.js 존재.
트러플
- dapps 개발에 많이 사용되는 프레임워크로 블록체인에서 스마트 계약을 컴파일, 배포하는 복잡성을 추상화함.
+) 트러플 대안으로 Embark 프레임워크 존재.
가나슈
- 메모리 내 블록체인
- geth, 패리티 등의 개발 속도가 느리다는 문제 해결을 위해 가나슈 사용.
- 100개의 이더가 탑재된 10개의 테스트 계정으로 테스트할 수 있다.
메타마스크
- 이더리움 지갑중 가장 인기있는 지갑
(강의에 영상이 포함되어 있으나 따로 정리X)
+) 개인적으로 공개키 암호화 공부할 때 좋았던 티스토리
https://koonsland.tistory.com/42
+) 비트코인 간단한 용어 설명(해당 사이트의 다양한 글을 보면 자세하게 해줌)
https://upbitcare.com/academy/education/blockchain/60