본문 바로가기
밤샘하는 개발자 먼지

FI_TIL_YMI #003

by 알 수 없는 사용자 2019. 12. 30.

Fake It TILl You Make It

 

191229
너무 오래 방치해버려서, 쓰던 것을 마저 하기보다 그것들을 요약하며 현재 일을 정리하기로 마음먹었습니다.

이더리움 입문 바이블
  • 이더리움 = 비트코인(only payment) + 스크립팅 언어 = 퍼블릭 블록체인 기반의 분산 컴퓨팅 플랫폼
    • for 중앙화된 통제 권한 없이 전 세계적으로 운영될 수 있는 응용 프로그램
  • EVM(EVerenum Virtual Machine) = 네트워크의 모든 스마트 계약을 실행하는 런타임 환경
  • 노드
  • 클라이언트/서버 아키텍처
    • 서버 단 코드(자바, C#, 루비, 파이썬)
    • 프론트엔드 코드(HTML/CSS/자바스크립트)
    • 호스팅 제공 업체(AWS, Azure, GCP, Heroku, VPS)
    • 웹 브라우저, curl/wget(커맨드 라인) 또는 API
    • 중앙화된 하나의 웹 응용 프로그램이 있으며 모든 클라이언트가 이 응용 프로그램과 상호 작용
  • 이더리움 아키텍쳐
    • 이상적인 탈중앙화 세계는 모든 노드 풀노드 ← 솔루션(블록체인 서버 호스팅 서비스, Metamask 등)
    1. 데이터베이스 - 네트워크의 모든 트랜잭션 저장, 작업증명(Proof of Work) 알고리즘을 사용하여 네트워크를 보호
    2. 코드 - 스마트 계약 코드를 EVM (Ethereum Virtual Machine)에서 실행, 솔리디티(Solidity)라는 언어로 논리/응용 프로그램 코드(스마트 계약)를 작성 → 솔리디티 컴파일러를 사용하여 이더리움 바이트코드(Ethereum Byte Code)로 컴파일 → 해당 바이트 코드를 블록체인에 배포
      • 웹 기반 Dapp을 만들기 위해 web3.js 자바스크립트 라이브러리가 블록체인 노드에 연결 => js 프레임워크에 이 라이브러리 포함 가능
  • 스마트 계약
  • 1 ether == 1018 wei, 1 Gwei == 109 wei
  • 계정 = 주소(공개) + 개인키(개인)
    1. 개인키 생성 k(private key)
    2. 개인키로부터 공개키 생성 K(public key)
    3. keccak256 알고리즘으로 공개키의 해시값 계산
    4. 생성된 해시값의 뒤쪽 20바이트를 취하여 이더리움 주소 생성
  1. 외부 소유 계정(EOA) = 다른 계정과 이더를 송수신, 스마트 컨트랙트에 트랜잭션 전송
  2. 컨트랙트 계정(CA, 개인키x) = 다른 계정과 이더를 송수신, 관련 코드 저장, EOA나 다른 컨트랙트의 호출을 받아 트랜잭션 발생
  • 지갑 = 이더리움 계정을 저장, 관리하는 데 사용되는 소프트웨어 플러그인 또는 라이브러리(여러 계정 관리, 트랜잭션에 서명, 잔고 추적)
    1. 비결정적 지갑 - 임의의 개인키/공개키 쌍을 사용. 개인키/공개키 쌍을 많이 생성할 수 있지만 각 키 쌍 간 상관 관계가 없음.
    2. 결정론적 지갑 - 모든 키가 시드(seed)라는 단일 시작 지점에서 파생. 시드로 사용자는 다른 정보 없이 지갑 백업하고 복원 가능, 경우에 따라 개인키를 모른 채 공개키를 생성 가능. 시드는 일반적으로 니모닉 문구.
  • 가스(Gas) - 연산의 단위 ← 트랜잭션이 필요로 하는 가스 ∝ 트랜잭션에 포함된 단위 연산
  • 가스 가격(Gas Price) - 가스당 가격. 설정 가능. 트랜잭션 처리 속도 ∝ 설정한 가스 가격
  • 가스 한도(Gas Limit) - 트랜잭션을 실행하기 위해 사용할 가스의 최대 금액 ↔ 블록 가스 한도(Block Gas Limit) - 이더리움의 각 블록에 적용되는 최대 캡. 무한 루프 방지.
  • 이더리움 런타임 환경은 바이트코드만 이해, 실행. 고급 프로그래밍 언어(솔리디티(Solidity), 바이퍼(Vyper)) → EVM 바이트코드(Byte Code)
  • 이더리움 가상 머신(Ethereum Virtual Machine, EVM) - 튜링 완전성을 가진 256비트 가상 머신. 이더리움 프로토콜의 일부, 이더리움 시스템의 합의 엔진에서 중요. 누구나 신뢰가 필요없는 환경에서 임의의 코드를 실행 → 결정론적이고 실행 결과가 보장. 이더리움 클라이언트를 설치, 실행 → EVM 시작 → EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작
  • 게스(Geth)/패리티(Parity) 클라이언트
  • Web3.js/Truffle
  • 가나슈(Ganache)
  • 메타마스크(Metamask)
  • 이더스캔(Etherscan)
  • 리믹스(Remix)

'밤샘하는 개발자 먼지' 카테고리의 다른 글

TIL #002 블록체인 시작  (1) 2019.12.03
TIL #001 시작  (1) 2019.11.08

댓글